mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-06 07:30:54 +02:00
+ also take into account the frame method when converting the omf start address to a symbol
git-svn-id: trunk@31383 -
This commit is contained in:
parent
cff94639d5
commit
e0bd25191e
@ -1307,6 +1307,7 @@ implementation
|
||||
ModEndRec: TOmfRecord_MODEND;
|
||||
objsym: TObjSymbol;
|
||||
objsec: TOmfObjSection;
|
||||
basegroup: TObjSectionGroup;
|
||||
begin
|
||||
Result:=False;
|
||||
ModEndRec:=TOmfRecord_MODEND.Create;
|
||||
@ -1331,12 +1332,46 @@ implementation
|
||||
ModEndRec.Free;
|
||||
exit;
|
||||
end;
|
||||
case ModEndRec.FrameMethod of
|
||||
ffmSegmentIndex:
|
||||
begin
|
||||
if (ModEndRec.FrameDatum<1) or (ModEndRec.FrameDatum>objdata.ObjSectionList.Count) then
|
||||
begin
|
||||
InputError('Frame segment name index for start address out of range');
|
||||
ModEndRec.Free;
|
||||
exit;
|
||||
end;
|
||||
if ModEndRec.FrameDatum<>ModEndRec.TargetDatum then
|
||||
begin
|
||||
InputError('Frame segment different than target segment is not supported supported for start address');
|
||||
ModEndRec.Free;
|
||||
exit;
|
||||
end;
|
||||
basegroup:=nil;
|
||||
end;
|
||||
ffmGroupIndex:
|
||||
begin
|
||||
if (ModEndRec.FrameDatum<1) or (ModEndRec.FrameDatum>objdata.GroupsList.Count) then
|
||||
begin
|
||||
InputError('Frame group name index for start address out of range');
|
||||
ModEndRec.Free;
|
||||
exit;
|
||||
end;
|
||||
basegroup:=TObjSectionGroup(objdata.GroupsList[ModEndRec.FrameDatum-1]);
|
||||
end;
|
||||
else
|
||||
begin
|
||||
InputError('Frame method for start address other than "Segment Index" or "Group Index" is not supported');
|
||||
ModEndRec.Free;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
objsec:=TOmfObjSection(objdata.ObjSectionList[ModEndRec.TargetDatum-1]);
|
||||
|
||||
objsym:=objdata.CreateSymbol('..start');
|
||||
objsym.bind:=AB_GLOBAL;
|
||||
objsym.typ:=AT_FUNCTION;
|
||||
//objsym.group:=basegroup;
|
||||
objsym.group:=basegroup;
|
||||
objsym.objsection:=objsec;
|
||||
objsym.offset:=ModEndRec.TargetDisplacement;
|
||||
objsym.size:=0;
|
||||
|
Loading…
Reference in New Issue
Block a user