Explorar o código

+ 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 %!s(int64=10) %!d(string=hai) anos
pai
achega
03e8c3ae05
Modificáronse 1 ficheiros con 12 adicións e 2 borrados
  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;