+ assign ordinals to all exported symbols

git-svn-id: trunk@42625 -
This commit is contained in:
nickysn 2019-08-09 22:15:36 +00:00
parent 831014cb12
commit 3da4cf0792

View File

@ -644,6 +644,8 @@ interface
procedure AddNewExeSection;
function WriteNewExe:boolean;
procedure FillImportedNameAndModuleReferenceTable;
function GetHighestExportSymbolOrdinal: Word;
procedure AssignOrdinalsToAllExportSymbols;
property Header: TNewExeHeader read FHeader;
property CurrExeMetaSec: TNewExeMetaSection read FCurrExeMetaSec write FCurrExeMetaSec;
property ResourceTable: TNewExeResourceTable read FResourceTable;
@ -4110,6 +4112,9 @@ cleanup:
var
i: Integer;
begin
{ all exported symbols must have an ordinal }
AssignOrdinalsToAllExportSymbols;
{ the first entry in the resident-name table is the module name }
TNewExeResidentNameTableEntry.Create(ResidentNameTable,ExtractModuleName(current_module.exefilename),0);
@ -4184,6 +4189,51 @@ cleanup:
end;
end;
function TNewExeOutput.GetHighestExportSymbolOrdinal: Word;
var
i, j: Integer;
ObjData: TOmfObjData;
sym: TOmfObjExportedSymbol;
begin
Result:=0;
for i:=0 to ObjDataList.Count-1 do
begin
ObjData:=TOmfObjData(ObjDataList[i]);
for j:=0 to ObjData.ExportedSymbolList.Count-1 do
begin
sym:=TOmfObjExportedSymbol(ObjData.ExportedSymbolList[j]);
if sym.ExportByOrdinal then
Result:=Max(Result,sym.ExportOrdinal);
end;
end;
end;
procedure TNewExeOutput.AssignOrdinalsToAllExportSymbols;
var
NextOrdinal: LongInt;
i, j: Integer;
ObjData: TOmfObjData;
sym: TOmfObjExportedSymbol;
begin
NextOrdinal:=GetHighestExportSymbolOrdinal+1;
for i:=0 to ObjDataList.Count-1 do
begin
ObjData:=TOmfObjData(ObjDataList[i]);
for j:=0 to ObjData.ExportedSymbolList.Count-1 do
begin
sym:=TOmfObjExportedSymbol(ObjData.ExportedSymbolList[j]);
if not sym.ExportByOrdinal then
begin
if NextOrdinal>High(Word) then
internalerror(2019081001);
sym.ExportByOrdinal:=True;
sym.ExportOrdinal:=NextOrdinal;
Inc(NextOrdinal);
end;
end;
end;
end;
procedure TNewExeOutput.DoRelocationFixup(objsec: TObjSection);
begin
{todo}