Browse Source

+ added method TRelRelocation.EncodeFlags that encodes the flags to string that can be included in the .rel file

git-svn-id: trunk@45263 -
nickysn 5 years ago
parent
commit
0d11b5bf29
1 changed files with 37 additions and 0 deletions
  1. 37 0
      compiler/ogrel.pas

+ 37 - 0
compiler/ogrel.pas

@@ -61,6 +61,7 @@ interface
 
         constructor CreateSymbol(ADataOffset:TObjSectionOfs;s:TObjSymbol;Atyp:TObjRelocationType);
         constructor CreateSection(ADataOffset:TObjSectionOfs;aobjsec:TObjSection;Atyp:TObjRelocationType);
+        function EncodeFlags: string;
       end;
 
       { TRelObjData }
@@ -125,6 +126,42 @@ implementation
         RelFlags:=[];
       end;
 
+    function TRelRelocation.EncodeFlags: string;
+      var
+        FlagsWord: Word;
+      begin
+        FlagsWord:=0;
+        if rrfByte in RelFlags then
+          Inc(FlagsWord,1);
+        if rrfSymbol in RelFlags then
+          Inc(FlagsWord,2);
+        if rrfPcRelative in RelFlags then
+          Inc(FlagsWord,4);
+        if rrfTwoByteObjectFormatForByteData in RelFlags then
+          Inc(FlagsWord,8);
+        if rrfUnsignedByteData in RelFlags then
+          Inc(FlagsWord,16);
+        if rrfPage0Reference in RelFlags then
+          Inc(FlagsWord,32);
+        if rrfPageNNNReference in RelFlags then
+          Inc(FlagsWord,64);
+        if rrfMSBWith2ByteMode in RelFlags then
+          Inc(FlagsWord,128);
+        if rrfThreeByteObjectFormatForByteData in RelFlags then
+          Inc(FlagsWord,256);
+        if rrfRealMSBForThreeByteMode in RelFlags then
+          Inc(FlagsWord,512);
+        if rrfReserved10 in RelFlags then
+          Inc(FlagsWord,1024);
+        if rrfReserved11 in RelFlags then
+          Inc(FlagsWord,2048);
+
+        if (FlagsWord<=255) and ((FlagsWord and $F0)<>$F0) then
+          Result:=HexStr(FlagsWord,2)
+        else
+          Result:=HexStr($F0 or Byte(FlagsWord shr 8),2)+' '+HexStr(Byte(FlagsWord),2);
+      end;
+
 {*****************************************************************************
                                 TRelObjData
 *****************************************************************************}