mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 07:43:04 +01: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