mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-22 18:29:33 +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));
|
list.concat(Taicpu.op_ref_reg(A_LEA,TCGSize2OpSize[OS_ADDR],href,NR_STACK_POINTER_REG));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
|
||||||
stacksize : longint;
|
|
||||||
begin
|
begin
|
||||||
{ MMX needs to call EMMS }
|
{ MMX needs to call EMMS }
|
||||||
if assigned(rg[R_MMXREGISTER]) and
|
if assigned(rg[R_MMXREGISTER]) and
|
||||||
@ -317,16 +315,8 @@ unit cgcpu;
|
|||||||
if (current_procinfo.framepointer=NR_STACK_POINTER_REG) or
|
if (current_procinfo.framepointer=NR_STACK_POINTER_REG) or
|
||||||
(current_procinfo.procdef.proctypeoption=potype_exceptfilter) then
|
(current_procinfo.procdef.proctypeoption=potype_exceptfilter) then
|
||||||
begin
|
begin
|
||||||
stacksize:=current_procinfo.calc_stackframe_size;
|
if current_procinfo.final_localsize<>0 then
|
||||||
if (target_info.stackalign>4) and
|
increase_sp(current_procinfo.final_localsize);
|
||||||
((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 (not paramanager.use_fixed_stack) then
|
if (not paramanager.use_fixed_stack) then
|
||||||
internal_restore_regs(list,true);
|
internal_restore_regs(list,true);
|
||||||
if (current_procinfo.procdef.proctypeoption=potype_exceptfilter) then
|
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'
|
Exception filters don't have own local vars, and temps are 'mapped'
|
||||||
to the parent procedure.
|
to the parent procedure.
|
||||||
maxpushedparasize is already aligned at least on x86_64. }
|
maxpushedparasize is already aligned at least on x86_64. }
|
||||||
//localsize:=current_procinfo.maxpushedparasize;
|
localsize:=current_procinfo.maxpushedparasize;
|
||||||
end;
|
end;
|
||||||
current_asmdata.asmcfi.cfa_def_cfa_register(list,NR_FRAME_POINTER_REG);
|
current_asmdata.asmcfi.cfa_def_cfa_register(list,NR_FRAME_POINTER_REG);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user