mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 23:19:24 +02:00
* on aarch64-win64 do the assignment of the exception frame pointer only after the SEH prologue has been done as there is no SEH directive for assigning a register to FP
This commit is contained in:
parent
b7afb6237f
commit
465537583b
@ -1889,6 +1889,7 @@ implementation
|
||||
hitem: tlinkedlistitem;
|
||||
seh_proc: tai_seh_directive;
|
||||
templist: TAsmList;
|
||||
genloadframeforexcept,
|
||||
suppress_endprologue: boolean;
|
||||
ref: treference;
|
||||
totalstackframesize: longint;
|
||||
@ -1905,6 +1906,7 @@ implementation
|
||||
SEH directives in assembler body. In this case, .seh_endprologue
|
||||
is expected to be one of those directives, and not generated here. }
|
||||
suppress_endprologue:=(pi_has_unwind_info in current_procinfo.flags);
|
||||
genloadframeforexcept:=false;
|
||||
|
||||
if not nostackframe then
|
||||
begin
|
||||
@ -1934,7 +1936,12 @@ implementation
|
||||
end
|
||||
else
|
||||
begin
|
||||
gen_load_frame_for_exceptfilter(list);
|
||||
{ do this after the prologue is done for aarch64-win64 as
|
||||
there is no SEH directive for setting FP to a register }
|
||||
if target_info.system<>system_aarch64_win64 then
|
||||
gen_load_frame_for_exceptfilter(list)
|
||||
else
|
||||
genloadframeforexcept:=true;
|
||||
localsize:=current_procinfo.maxpushedparasize;
|
||||
end;
|
||||
end;
|
||||
@ -1994,7 +2001,11 @@ implementation
|
||||
end;
|
||||
|
||||
if not (pi_has_unwind_info in current_procinfo.flags) then
|
||||
exit;
|
||||
begin
|
||||
if genloadframeforexcept then
|
||||
gen_load_frame_for_exceptfilter(list);
|
||||
exit;
|
||||
end;
|
||||
|
||||
{ Generate unwind data for aarch64-win64 }
|
||||
seh_proc:=cai_seh_directive.create_name(ash_proc,current_procinfo.procdef.mangledname);
|
||||
@ -2015,6 +2026,9 @@ implementation
|
||||
else
|
||||
list.concatlist(templist);
|
||||
templist.free;
|
||||
|
||||
if genloadframeforexcept then
|
||||
gen_load_frame_for_exceptfilter(list);
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user