* Generate exception filters data on i386-win32 and x86_64-win64 without using global labels.

git-svn-id: trunk@29512 -
This commit is contained in:
sergei 2015-01-20 13:52:19 +00:00
parent a67478e033
commit ed4e876f4f
2 changed files with 6 additions and 10 deletions

View File

@ -535,7 +535,7 @@ procedure ti386tryexceptnode.pass_generate_code;
{ start of scope }
if assigned(right) then
begin
current_asmdata.getdatalabel(filterlabel);
current_asmdata.getaddrlabel(filterlabel);
emit_scope_start(
current_asmdata.RefAsmSymbol('__FPC_on_handler'),
filterlabel);
@ -609,8 +609,7 @@ procedure ti386tryexceptnode.pass_generate_code;
begin
if hnode.nodetype<>onn then
InternalError(2011103101);
{ TODO: make it done without using global label }
current_asmdata.getglobaljumplabel(onlabel);
current_asmdata.getjumplabel(onlabel);
hlist.concat(tai_const.create_sym(current_asmdata.RefAsmSymbol(tonnode(hnode).excepttype.vmt_mangledname,AT_DATA)));
hlist.concat(tai_const.create_sym(onlabel));
cg.a_label(current_asmdata.CurrAsmList,onlabel);
@ -626,8 +625,7 @@ procedure ti386tryexceptnode.pass_generate_code;
inc(onnodecount.value);
end;
{ now move filter table to permanent list all at once }
maybe_new_object_file(current_asmdata.asmlists[al_typedconsts]);
current_asmdata.asmlists[al_typedconsts].concatlist(hlist);
current_procinfo.aktlocaldata.concatlist(hlist);
hlist.free;
end;

View File

@ -448,7 +448,7 @@ procedure tx64tryexceptnode.pass_generate_code;
begin
{ emit filter table to a temporary asmlist }
hlist:=TAsmList.Create;
current_asmdata.getdatalabel(filterlabel);
current_asmdata.getaddrlabel(filterlabel);
new_section(hlist,sec_rodata_norel,filterlabel.name,4);
cg.a_label(hlist,filterlabel);
onnodecount:=tai_const.create_32bit(0);
@ -459,8 +459,7 @@ procedure tx64tryexceptnode.pass_generate_code;
begin
if hnode.nodetype<>onn then
InternalError(2011103101);
{ TODO: make it done without using global label }
current_asmdata.getglobaljumplabel(onlabel);
current_asmdata.getjumplabel(onlabel);
hlist.concat(tai_const.create_rva_sym(current_asmdata.RefAsmSymbol(tonnode(hnode).excepttype.vmt_mangledname,AT_DATA)));
hlist.concat(tai_const.create_rva_sym(onlabel));
cg.a_label(current_asmdata.CurrAsmList,onlabel);
@ -476,8 +475,7 @@ procedure tx64tryexceptnode.pass_generate_code;
inc(onnodecount.value);
end;
{ now move filter table to permanent list all at once }
maybe_new_object_file(current_asmdata.asmlists[al_typedconsts]);
current_asmdata.asmlists[al_typedconsts].concatlist(hlist);
current_procinfo.aktlocaldata.concatlist(hlist);
hlist.free;
end;