mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-17 12:39:25 +02:00
* tcg386.g_proc_exit: instead of recalculating stack size, use current_procinfo.final_localsize which was calculated in g_proc_entry.
* tcgx86.g_proc_entry: don't over-allocate stack in SEH finalizer procedures. git-svn-id: trunk@26251 -
This commit is contained in:
parent
258e8c58a4
commit
f2096de53a
@ -303,8 +303,6 @@ unit cgcpu;
|
||||
list.concat(Taicpu.op_ref_reg(A_LEA,TCGSize2OpSize[OS_ADDR],href,NR_STACK_POINTER_REG));
|
||||
end;
|
||||
|
||||
var
|
||||
stacksize : longint;
|
||||
begin
|
||||
{ MMX needs to call EMMS }
|
||||
if assigned(rg[R_MMXREGISTER]) and
|
||||
@ -317,16 +315,8 @@ unit cgcpu;
|
||||
if (current_procinfo.framepointer=NR_STACK_POINTER_REG) or
|
||||
(current_procinfo.procdef.proctypeoption=potype_exceptfilter) then
|
||||
begin
|
||||
stacksize:=current_procinfo.calc_stackframe_size;
|
||||
if (target_info.stackalign>4) and
|
||||
((stacksize <> 0) or
|
||||
(pi_do_call in current_procinfo.flags) or
|
||||
{ can't detect if a call in this case -> use nostackframe }
|
||||
{ if you (think you) know what you are doing }
|
||||
(po_assembler in current_procinfo.procdef.procoptions)) then
|
||||
stacksize := align(stacksize+sizeof(aint),target_info.stackalign) - sizeof(aint);
|
||||
if stacksize<>0 then
|
||||
increase_sp(stacksize);
|
||||
if current_procinfo.final_localsize<>0 then
|
||||
increase_sp(current_procinfo.final_localsize);
|
||||
if (not paramanager.use_fixed_stack) then
|
||||
internal_restore_regs(list,true);
|
||||
if (current_procinfo.procdef.proctypeoption=potype_exceptfilter) then
|
||||
|
@ -2660,7 +2660,7 @@ unit cgx86;
|
||||
Exception filters don't have own local vars, and temps are 'mapped'
|
||||
to the parent procedure.
|
||||
maxpushedparasize is already aligned at least on x86_64. }
|
||||
//localsize:=current_procinfo.maxpushedparasize;
|
||||
localsize:=current_procinfo.maxpushedparasize;
|
||||
end;
|
||||
current_asmdata.asmcfi.cfa_def_cfa_register(list,NR_FRAME_POINTER_REG);
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user