mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-10 22:09:18 +02:00
Override a_call_name to use _gp loading and call for cdecl (to get PIC compatible code)
git-svn-id: trunk@21794 -
This commit is contained in:
parent
fc81979f61
commit
514b14a5ae
@ -28,17 +28,52 @@ unit hlcgcpu;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
globtype,
|
||||
aasmbase, aasmdata,
|
||||
symdef,
|
||||
hlcgobj, hlcg2ll;
|
||||
|
||||
type
|
||||
thlcg2mips = class(thlcg2ll)
|
||||
procedure a_call_name(list: TAsmList; pd: tprocdef; const s: TSymStr; weak: boolean);override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
hlcgobj, hlcg2ll,
|
||||
cgcpu;
|
||||
cgbase,
|
||||
cgutils,
|
||||
cgobj,
|
||||
cpubase,
|
||||
cgcpu;
|
||||
|
||||
procedure thlcg2mips.a_call_name(list: TAsmList; pd: tprocdef; const s: TSymStr; weak: boolean);
|
||||
var
|
||||
ref : treference;
|
||||
begin
|
||||
if pd.proccalloption =pocall_cdecl then
|
||||
begin
|
||||
{ Use $gp/$t9 registers as the code might be in a shared library }
|
||||
reference_reset(ref,sizeof(aint));
|
||||
ref.symbol:=current_asmdata.RefAsmSymbol('_gp');
|
||||
cg.a_loadaddr_ref_reg(list,ref,NR_GP);
|
||||
reference_reset(ref,sizeof(aint));
|
||||
ref.symbol:=current_asmdata.RefAsmSymbol(s);
|
||||
ref.base:=NR_GP;
|
||||
ref.refaddr:=addr_pic;
|
||||
cg.a_loadaddr_ref_reg(list,ref,NR_PIC_FUNC);
|
||||
cg.a_call_reg(list,NR_PIC_FUNC);
|
||||
end
|
||||
else
|
||||
cg.a_call_name(list,s,weak);
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
begin
|
||||
hlcg:=thlcg2ll.create;
|
||||
hlcg:=thlcg2mips.create;
|
||||
create_codegen;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user