Browse Source

+ parse ExpDef OMF records and delegate them to a new method
TOmfObjData.AddExportSymbol (not implemented yet)

git-svn-id: trunk@42621 -

nickysn 6 years ago
parent
commit
4b54cbea1e
1 changed files with 29 additions and 4 deletions
  1. 29 4
      compiler/ogomf.pas

+ 29 - 4
compiler/ogomf.pas

@@ -114,6 +114,7 @@ interface
         function reffardatasection:TObjSection;
         function reffardatasection:TObjSection;
         procedure writeReloc(Data:TRelocDataInt;len:aword;p:TObjSymbol;Reloctype:TObjRelocationType);override;
         procedure writeReloc(Data:TRelocDataInt;len:aword;p:TObjSymbol;Reloctype:TObjRelocationType);override;
         procedure AddImportSymbol(const libname,symname,symmangledname:TCmdStr;OrdNr: longint;isvar:boolean);
         procedure AddImportSymbol(const libname,symname,symmangledname:TCmdStr;OrdNr: longint;isvar:boolean);
+        procedure AddExportSymbol(aExportByOrdinal,aResidentName,aNoData:Boolean;aParmCount:Integer;aExportedName,aInternalName:string;ExportOrdinal:Word);
         property MainSource: TPathStr read FMainSource;
         property MainSource: TPathStr read FMainSource;
         property ImportLibraryList:TFPHashObjectList read FImportLibraryList;
         property ImportLibraryList:TFPHashObjectList read FImportLibraryList;
       end;
       end;
@@ -172,7 +173,7 @@ interface
         function ReadModEnd(RawRec: TOmfRawRecord; objdata:TObjData): Boolean;
         function ReadModEnd(RawRec: TOmfRawRecord; objdata:TObjData): Boolean;
         function ReadLeOrLiDataAndFixups(RawRec: TOmfRawRecord; objdata:TObjData): Boolean;
         function ReadLeOrLiDataAndFixups(RawRec: TOmfRawRecord; objdata:TObjData): Boolean;
         function ReadImpDef(Rec: TOmfRecord_COMENT; objdata:TObjData): Boolean;
         function ReadImpDef(Rec: TOmfRecord_COMENT; objdata:TObjData): Boolean;
-        function ReadExpDef(Rec: TOmfRecord_COMENT): Boolean;
+        function ReadExpDef(Rec: TOmfRecord_COMENT; objdata:TObjData): Boolean;
         function ImportOmfFixup(objdata: TObjData; objsec: TOmfObjSection; Fixup: TOmfSubRecord_FIXUP): Boolean;
         function ImportOmfFixup(objdata: TObjData; objsec: TOmfObjSection; Fixup: TOmfSubRecord_FIXUP): Boolean;
 
 
         property LNames: TOmfOrderedNameCollection read FLNames;
         property LNames: TOmfOrderedNameCollection read FLNames;
@@ -1107,6 +1108,14 @@ implementation
           ImportSymbol:=TImportSymbol.Create(ImportLibrary.ImportSymbolList,symname,symmangledname,OrdNr,isvar);
           ImportSymbol:=TImportSymbol.Create(ImportLibrary.ImportSymbolList,symname,symmangledname,OrdNr,isvar);
       end;
       end;
 
 
+    procedure TOmfObjData.AddExportSymbol(aExportByOrdinal, aResidentName,
+        aNoData: Boolean; aParmCount: Integer; aExportedName,
+        aInternalName: string; ExportOrdinal: Word);
+      begin
+        { todo: implement }
+        //Writeln('AddExportSymbol(',aExportByOrdinal,',',aResidentName,',',aNoData,',',aParmCount,',',aExportedName,',',aInternalName,',',ExportOrdinal,')');
+      end;
+
 {****************************************************************************
 {****************************************************************************
                                 TOmfObjOutput
                                 TOmfObjOutput
 ****************************************************************************}
 ****************************************************************************}
@@ -2068,10 +2077,26 @@ implementation
         ImpDefRec.Free;
         ImpDefRec.Free;
       end;
       end;
 
 
-    function TOmfObjInput.ReadExpDef(Rec: TOmfRecord_COMENT): Boolean;
+    function TOmfObjInput.ReadExpDef(Rec: TOmfRecord_COMENT; objdata: TObjData): Boolean;
+      var
+        ExpDefRec: TOmfRecord_COMENT_EXPDEF;
+        SymName: string;
       begin
       begin
-        {todo: implement}
+        ExpDefRec:=TOmfRecord_COMENT_EXPDEF.Create;
+        ExpDefRec.DecodeFrom(Rec);
+        SymName:=ExpDefRec.InternalName;
+        if not CaseSensitiveSymbols then
+          SymName:=UpCase(SymName);
+        TOmfObjData(objdata).AddExportSymbol(
+          ExpDefRec.ExportByOrdinal,
+          ExpDefRec.ResidentName,
+          ExpDefRec.NoData,
+          ExpDefRec.ParmCount,
+          ExpDefRec.ExportedName,
+          SymName,
+          ExpDefRec.ExportOrdinal);
         Result:=True;
         Result:=True;
+        ExpDefRec.Free;
       end;
       end;
 
 
     function TOmfObjInput.ImportOmfFixup(objdata: TObjData; objsec: TOmfObjSection; Fixup: TOmfSubRecord_FIXUP): Boolean;
     function TOmfObjInput.ImportOmfFixup(objdata: TObjData; objsec: TOmfObjSection; Fixup: TOmfSubRecord_FIXUP): Boolean;
@@ -2462,7 +2487,7 @@ implementation
                               if not ReadImpDef(FCOMENTRecord,objdata) then
                               if not ReadImpDef(FCOMENTRecord,objdata) then
                                 exit;
                                 exit;
                             CC_OmfExtension_EXPDEF:
                             CC_OmfExtension_EXPDEF:
-                              if not ReadExpDef(FCOMENTRecord) then
+                              if not ReadExpDef(FCOMENTRecord,objdata) then
                                 exit;
                                 exit;
                           end;
                           end;
                         end;
                         end;