mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-06 05:18:30 +02:00
Implement simple support for .thumb_func in the ELF output.
git-svn-id: branches/laksen/armiw@29340 -
This commit is contained in:
parent
cc418eef74
commit
de00a1d76d
@ -1214,9 +1214,10 @@ Implementation
|
|||||||
asd_reference:
|
asd_reference:
|
||||||
{ ignore for now, but should be added}
|
{ ignore for now, but should be added}
|
||||||
;
|
;
|
||||||
|
{$ifdef ARM}
|
||||||
asd_thumb_func:
|
asd_thumb_func:
|
||||||
{ ignore for now, but should be added}
|
ObjData.ThumbFunc:=true;
|
||||||
;
|
{$endif ARM}
|
||||||
else
|
else
|
||||||
internalerror(2010011101);
|
internalerror(2010011101);
|
||||||
end;
|
end;
|
||||||
|
@ -233,6 +233,9 @@ interface
|
|||||||
ExeSection : TExeSection;
|
ExeSection : TExeSection;
|
||||||
USed : Boolean;
|
USed : Boolean;
|
||||||
VTRefList : TFPObjectList;
|
VTRefList : TFPObjectList;
|
||||||
|
{$ifdef ARM}
|
||||||
|
ThumbFunc : boolean;
|
||||||
|
{$endif ARM}
|
||||||
constructor create(AList:TFPHashObjectList;const Aname:string;Aalign:shortint;Aoptions:TObjSectionOptions);virtual;
|
constructor create(AList:TFPHashObjectList;const Aname:string;Aalign:shortint;Aoptions:TObjSectionOptions);virtual;
|
||||||
destructor destroy;override;
|
destructor destroy;override;
|
||||||
function write(const d;l:aword):aword;
|
function write(const d;l:aword):aword;
|
||||||
@ -289,6 +292,9 @@ interface
|
|||||||
public
|
public
|
||||||
CurrPass : byte;
|
CurrPass : byte;
|
||||||
ExecStack : boolean;
|
ExecStack : boolean;
|
||||||
|
{$ifdef ARM}
|
||||||
|
ThumbFunc : boolean;
|
||||||
|
{$endif ARM}
|
||||||
constructor create(const n:string);virtual;
|
constructor create(const n:string);virtual;
|
||||||
destructor destroy;override;
|
destructor destroy;override;
|
||||||
{ Sections }
|
{ Sections }
|
||||||
@ -984,6 +990,9 @@ implementation
|
|||||||
FCachedAsmSymbolList:=TFPObjectList.Create(false);
|
FCachedAsmSymbolList:=TFPObjectList.Create(false);
|
||||||
{ section class type for creating of new sections }
|
{ section class type for creating of new sections }
|
||||||
FCObjSection:=TObjSection;
|
FCObjSection:=TObjSection;
|
||||||
|
{$ifdef ARM}
|
||||||
|
ThumbFunc:=false;
|
||||||
|
{$endif ARM}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -1131,6 +1140,10 @@ implementation
|
|||||||
begin
|
begin
|
||||||
result:=CObjSection.create(FObjSectionList,aname,aalign,aoptions);
|
result:=CObjSection.create(FObjSectionList,aname,aalign,aoptions);
|
||||||
result.ObjData:=self;
|
result.ObjData:=self;
|
||||||
|
{$ifdef ARM}
|
||||||
|
result.ThumbFunc:=ThumbFunc;
|
||||||
|
ThumbFunc:=false;
|
||||||
|
{$endif ARM}
|
||||||
end;
|
end;
|
||||||
FCurrObjSec:=result;
|
FCurrObjSec:=result;
|
||||||
end;
|
end;
|
||||||
|
@ -968,6 +968,13 @@ implementation
|
|||||||
elfsym.st_name:=nameidx;
|
elfsym.st_name:=nameidx;
|
||||||
elfsym.st_size:=objsym.size;
|
elfsym.st_size:=objsym.size;
|
||||||
elfsym.st_value:=objsym.address;
|
elfsym.st_value:=objsym.address;
|
||||||
|
|
||||||
|
{$ifdef ARM}
|
||||||
|
if (objsym.typ=AT_FUNCTION) and
|
||||||
|
objsym.objsection.ThumbFunc then
|
||||||
|
inc(elfsym.st_value);
|
||||||
|
{$endif ARM}
|
||||||
|
|
||||||
case objsym.bind of
|
case objsym.bind of
|
||||||
AB_LOCAL :
|
AB_LOCAL :
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user