mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 04:29:29 +02:00
+ provide way to specify a custom section name for vectorized dead strippable
sections o does nothing by default, will be used by llvm git-svn-id: trunk@32398 -
This commit is contained in:
parent
416894f206
commit
4974201d7f
@ -310,6 +310,7 @@ type
|
||||
procedure insert_marked_aggregate_alignment(def: tdef); virtual; abstract;
|
||||
class function get_vectorized_dead_strip_section_symbol(const basename: string; st: tsymtable; define, start: boolean): tasmsymbol; virtual;
|
||||
public
|
||||
class function get_vectorized_dead_strip_custom_section_name(const basename: TSymStr; st: tsymtable; out secname: TSymStr): boolean; virtual;
|
||||
{ get the start/end symbol for a dead stripable vectorized section, such
|
||||
as the resourcestring data of a unit }
|
||||
class function get_vectorized_dead_strip_section_symbol_start(const basename: string; st: tsymtable; define: boolean): tasmsymbol; virtual;
|
||||
@ -943,17 +944,25 @@ implementation
|
||||
var
|
||||
sym: tasmsymbol;
|
||||
secname: TSymStr;
|
||||
sectype: TAsmSectiontype;
|
||||
customsecname,
|
||||
secend: boolean;
|
||||
begin
|
||||
fvectorized_finalize_called:=true;
|
||||
secend:=false;
|
||||
customsecname:=get_vectorized_dead_strip_custom_section_name(basename,st,secname);
|
||||
if customsecname then
|
||||
sectype:=sec_user
|
||||
else
|
||||
sectype:=sec_data;
|
||||
if tcalo_vectorized_dead_strip_start in options then
|
||||
begin
|
||||
{ the start and end names are predefined }
|
||||
if itemname<>'' then
|
||||
internalerror(2015110801);
|
||||
sym:=get_vectorized_dead_strip_section_symbol_start(basename,st,true);
|
||||
secname:=make_mangledname(basename,st,'1_START');
|
||||
if not customsecname then
|
||||
secname:=make_mangledname(basename,st,'1_START');
|
||||
end
|
||||
else if tcalo_vectorized_dead_strip_end in options then
|
||||
begin
|
||||
@ -961,16 +970,18 @@ implementation
|
||||
if itemname<>'' then
|
||||
internalerror(2015110802);
|
||||
sym:=get_vectorized_dead_strip_section_symbol_end(basename,st,true);
|
||||
make_mangledname(basename,st,'3_END');
|
||||
if not customsecname then
|
||||
make_mangledname(basename,st,'3_END');
|
||||
secend:=true;
|
||||
end
|
||||
else if tcalo_vectorized_dead_strip_item in options then
|
||||
begin
|
||||
sym:=current_asmdata.DefineAsmSymbol(make_mangledname(basename,st,itemname),AB_GLOBAL,AT_DATA);
|
||||
secname:=make_mangledname(basename,st,'2_'+itemname);
|
||||
if not customsecname then
|
||||
secname:=make_mangledname(basename,st,'2_'+itemname);
|
||||
exclude(options,tcalo_vectorized_dead_strip_item);
|
||||
end;
|
||||
finalize_asmlist(sym,def,sec_data,secname,alignment,options);
|
||||
finalize_asmlist(sym,def,sectype,secname,alignment,options);
|
||||
{ The darwin/ppc64 assembler or linker seems to have trouble }
|
||||
{ if a section ends with a global label without any data after it. }
|
||||
{ So for safety, just put a dummy value here. }
|
||||
@ -1351,6 +1362,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
class function ttai_typedconstbuilder.get_vectorized_dead_strip_custom_section_name(const basename: TSymStr; st: tsymtable; out secname: TSymStr): boolean;
|
||||
begin
|
||||
result:=false;
|
||||
end;
|
||||
|
||||
|
||||
class function ttai_typedconstbuilder.get_vectorized_dead_strip_section_symbol_start(const basename: string; st: tsymtable; define: boolean): tasmsymbol;
|
||||
begin
|
||||
result:=get_vectorized_dead_strip_section_symbol(basename,st,define,true);
|
||||
|
Loading…
Reference in New Issue
Block a user