Implement simple support for .thumb_func in the ELF output.

git-svn-id: branches/laksen/armiw@29340 -
This commit is contained in:
Jeppe Johansen 2014-12-27 11:02:38 +00:00
parent cc418eef74
commit de00a1d76d
3 changed files with 23 additions and 2 deletions

View File

@ -1214,9 +1214,10 @@ Implementation
asd_reference:
{ ignore for now, but should be added}
;
{$ifdef ARM}
asd_thumb_func:
{ ignore for now, but should be added}
;
ObjData.ThumbFunc:=true;
{$endif ARM}
else
internalerror(2010011101);
end;

View File

@ -233,6 +233,9 @@ interface
ExeSection : TExeSection;
USed : Boolean;
VTRefList : TFPObjectList;
{$ifdef ARM}
ThumbFunc : boolean;
{$endif ARM}
constructor create(AList:TFPHashObjectList;const Aname:string;Aalign:shortint;Aoptions:TObjSectionOptions);virtual;
destructor destroy;override;
function write(const d;l:aword):aword;
@ -289,6 +292,9 @@ interface
public
CurrPass : byte;
ExecStack : boolean;
{$ifdef ARM}
ThumbFunc : boolean;
{$endif ARM}
constructor create(const n:string);virtual;
destructor destroy;override;
{ Sections }
@ -984,6 +990,9 @@ implementation
FCachedAsmSymbolList:=TFPObjectList.Create(false);
{ section class type for creating of new sections }
FCObjSection:=TObjSection;
{$ifdef ARM}
ThumbFunc:=false;
{$endif ARM}
end;
@ -1131,6 +1140,10 @@ implementation
begin
result:=CObjSection.create(FObjSectionList,aname,aalign,aoptions);
result.ObjData:=self;
{$ifdef ARM}
result.ThumbFunc:=ThumbFunc;
ThumbFunc:=false;
{$endif ARM}
end;
FCurrObjSec:=result;
end;

View File

@ -968,6 +968,13 @@ implementation
elfsym.st_name:=nameidx;
elfsym.st_size:=objsym.size;
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
AB_LOCAL :
begin