Bläddra i källkod

* fixed CFI registers for leave on x86-64, and place CFI directives closer to
the instructions they apply to

git-svn-id: branches/debug_eh@41576 -

Jonas Maebe 6 år sedan
förälder
incheckning
866331de34
1 ändrade filer med 6 tillägg och 3 borttagningar
  1. 6 3
      compiler/x86/cgx86.pas

+ 6 - 3
compiler/x86/cgx86.pas

@@ -3710,19 +3710,22 @@ unit cgx86;
         else
         else
           begin
           begin
 {$if defined(x86_64)}
 {$if defined(x86_64)}
+            current_asmdata.asmcfi.cfa_def_cfa_register(list,NR_RSP);
             list.Concat(taicpu.op_reg_reg(A_MOV,S_Q,NR_RBP,NR_RSP));
             list.Concat(taicpu.op_reg_reg(A_MOV,S_Q,NR_RBP,NR_RSP));
+            current_asmdata.asmcfi.cfa_restore(list,NR_RBP);
+            current_asmdata.asmcfi.cfa_def_cfa_offset(list,8);
             list.Concat(taicpu.op_reg(A_POP,S_Q,NR_RBP));
             list.Concat(taicpu.op_reg(A_POP,S_Q,NR_RBP));
 {$elseif defined(i386)}
 {$elseif defined(i386)}
+            current_asmdata.asmcfi.cfa_def_cfa_register(list,NR_ESP);
             list.Concat(taicpu.op_reg_reg(A_MOV,S_L,NR_EBP,NR_ESP));
             list.Concat(taicpu.op_reg_reg(A_MOV,S_L,NR_EBP,NR_ESP));
+            current_asmdata.asmcfi.cfa_restore(list,NR_EBP);
+            current_asmdata.asmcfi.cfa_def_cfa_offset(list,4);
             list.Concat(taicpu.op_reg(A_POP,S_L,NR_EBP));
             list.Concat(taicpu.op_reg(A_POP,S_L,NR_EBP));
 {$elseif defined(i8086)}
 {$elseif defined(i8086)}
             list.Concat(taicpu.op_reg_reg(A_MOV,S_W,NR_BP,NR_SP));
             list.Concat(taicpu.op_reg_reg(A_MOV,S_W,NR_BP,NR_SP));
             list.Concat(taicpu.op_reg(A_POP,S_W,NR_BP));
             list.Concat(taicpu.op_reg(A_POP,S_W,NR_BP));
 {$endif}
 {$endif}
           end;
           end;
-        current_asmdata.asmcfi.cfa_restore(list,NR_EBP);
-        current_asmdata.asmcfi.cfa_def_cfa_register(list,NR_ESP);
-        current_asmdata.asmcfi.cfa_def_cfa_offset(list,sizeof(pint));
       end;
       end;