Quellcode durchsuchen

+ support RELOC_RELATIVE relocations in the omf object writer, by using omf's
"self relative" (instead of "segment relative") fixups. "Hello world" and
fpctris in the small memory model now work (under dosbox, at least) with the
internal object writer.

git-svn-id: trunk@30581 -

nickysn vor 10 Jahren
Ursprung
Commit
03e8c3ae05
1 geänderte Dateien mit 12 neuen und 2 gelöschten Zeilen
  1. 12 2
      compiler/ogomf.pas

+ 12 - 2
compiler/ogomf.pas

@@ -157,7 +157,12 @@ implementation
             FOmfFixup.LocationType:=fltOffset;
             FOmfFixup.FrameDeterminedByThread:=False;
             FOmfFixup.TargetDeterminedByThread:=False;
-            FOmfFixup.Mode:=fmSegmentRelative;
+            if typ=RELOC_ABSOLUTE then
+              FOmfFixup.Mode:=fmSegmentRelative
+            else if typ=RELOC_RELATIVE then
+              FOmfFixup.Mode:=fmSelfRelative
+            else
+              internalerror(2015041401);
             FOmfFixup.TargetMethod:=ftmSegmentIndexNoDisp;
             FOmfFixup.TargetDatum:=ObjSection.Index;
             if TOmfObjSection(ObjSection).PrimaryGroup<>'' then
@@ -174,7 +179,12 @@ implementation
             FOmfFixup.LocationType:=fltOffset;
             FOmfFixup.FrameDeterminedByThread:=False;
             FOmfFixup.TargetDeterminedByThread:=False;
-            FOmfFixup.Mode:=fmSegmentRelative;
+            if typ=RELOC_ABSOLUTE then
+              FOmfFixup.Mode:=fmSegmentRelative
+            else if typ=RELOC_RELATIVE then
+              FOmfFixup.Mode:=fmSelfRelative
+            else
+              internalerror(2015041401);
             FOmfFixup.TargetMethod:=ftmExternalIndexNoDisp;
             FOmfFixup.TargetDatum:=symbol.symidx;
             FOmfFixup.FrameMethod:=ffmTarget;