Browse Source

Add writeInt8/writeUInt8 methods to fix some cross-endian generation issues

Pierre Muller 1 year ago
parent
commit
ca6fe96360
1 changed files with 28 additions and 0 deletions
  1. 28 0
      compiler/ogbase.pas

+ 28 - 0
compiler/ogbase.pas

@@ -343,12 +343,14 @@ interface
        constructor create(AList:TFPHashObjectList;const Aname:string;Aalign:longint;Aoptions:TObjSectionOptions);virtual;
        constructor create(AList:TFPHashObjectList;const Aname:string;Aalign:longint;Aoptions:TObjSectionOptions);virtual;
        destructor  destroy;override;
        destructor  destroy;override;
        function  write(const d;l:TObjSectionOfs):TObjSectionOfs;
        function  write(const d;l:TObjSectionOfs):TObjSectionOfs;
+       procedure writeInt8(v: int8);
        procedure writeInt16LE(v: int16);
        procedure writeInt16LE(v: int16);
        procedure writeInt16BE(v: int16);
        procedure writeInt16BE(v: int16);
        procedure writeInt32LE(v: int32);
        procedure writeInt32LE(v: int32);
        procedure writeInt32BE(v: int32);
        procedure writeInt32BE(v: int32);
        procedure writeInt64LE(v: int64);
        procedure writeInt64LE(v: int64);
        procedure writeInt64BE(v: int64);
        procedure writeInt64BE(v: int64);
+       procedure writeUInt8(v: uint8);
        procedure writeUInt16LE(v: uint16);
        procedure writeUInt16LE(v: uint16);
        procedure writeUInt16BE(v: uint16);
        procedure writeUInt16BE(v: uint16);
        procedure writeUInt32LE(v: uint32);
        procedure writeUInt32LE(v: uint32);
@@ -456,12 +458,14 @@ interface
        procedure alloc(len:TObjSectionOfs);
        procedure alloc(len:TObjSectionOfs);
        procedure allocalign(len:longint);
        procedure allocalign(len:longint);
        procedure writebytes(const Data;len:TObjSectionOfs);
        procedure writebytes(const Data;len:TObjSectionOfs);
+       procedure writeInt8(v: int8);
        procedure writeInt16LE(v: int16);
        procedure writeInt16LE(v: int16);
        procedure writeInt16BE(v: int16);
        procedure writeInt16BE(v: int16);
        procedure writeInt32LE(v: int32);
        procedure writeInt32LE(v: int32);
        procedure writeInt32BE(v: int32);
        procedure writeInt32BE(v: int32);
        procedure writeInt64LE(v: int64);
        procedure writeInt64LE(v: int64);
        procedure writeInt64BE(v: int64);
        procedure writeInt64BE(v: int64);
+       procedure writeUInt8(v: uint8);
        procedure writeUInt16LE(v: uint16);
        procedure writeUInt16LE(v: uint16);
        procedure writeUInt16BE(v: uint16);
        procedure writeUInt16BE(v: uint16);
        procedure writeUInt32LE(v: uint32);
        procedure writeUInt32LE(v: uint32);
@@ -1075,6 +1079,12 @@ implementation
       end;
       end;
 
 
 
 
+    procedure TObjSection.writeInt8(v: int8);
+      begin
+        write(v,1);
+      end;
+
+
     procedure TObjSection.writeInt16LE(v: int16);
     procedure TObjSection.writeInt16LE(v: int16);
       begin
       begin
 {$ifdef FPC_BIG_ENDIAN}
 {$ifdef FPC_BIG_ENDIAN}
@@ -1129,6 +1139,12 @@ implementation
       end;
       end;
 
 
 
 
+    procedure TObjSection.writeUInt8(v: uint8);
+      begin
+        write(v,1);
+      end;
+
+
     procedure TObjSection.writeUInt16LE(v: uint16);
     procedure TObjSection.writeUInt16LE(v: uint16);
       begin
       begin
 {$ifdef FPC_BIG_ENDIAN}
 {$ifdef FPC_BIG_ENDIAN}
@@ -1709,6 +1725,12 @@ implementation
       end;
       end;
 
 
 
 
+    procedure TObjData.writeInt8(v: int8);
+      begin
+        writebytes(v,1);
+      end;
+
+
     procedure TObjData.writeInt16LE(v: int16);
     procedure TObjData.writeInt16LE(v: int16);
       begin
       begin
 {$ifdef FPC_BIG_ENDIAN}
 {$ifdef FPC_BIG_ENDIAN}
@@ -1763,6 +1785,12 @@ implementation
       end;
       end;
 
 
 
 
+    procedure TObjData.writeUInt8(v: uint8);
+      begin
+        writebytes(v,1);
+      end;
+
+
     procedure TObjData.writeUInt16LE(v: uint16);
     procedure TObjData.writeUInt16LE(v: uint16);
       begin
       begin
 {$ifdef FPC_BIG_ENDIAN}
 {$ifdef FPC_BIG_ENDIAN}