diff options
| author | 2014-03-11 11:30:20 -0700 | |
|---|---|---|
| committer | 2014-03-11 11:35:45 -0700 | |
| commit | ee043fc5b2459d221ff020e2b096e2d492311d11 (patch) | |
| tree | 3c89051e9584a77536f3914f94cc02cd8304e240 | |
| parent | e6d7a6192d505b0ecaa5495ce208fb68cc2e3639 (diff) | |
Ensure functions start with clean CFA state.
.cfi_startproc doesn't reset CFA state and so delivering exceptions and the
like can leave the CFA with an incorrect offset. Reset the state in the
DEFINE_FUNCTION macro.
Also fix using test/run-test with --gdb for the target.
Change-Id: I4c03768e118ef1e06d34fedce856919e6ecba0c4
| -rw-r--r-- | runtime/arch/arm/asm_support_arm.S | 2 | ||||
| -rw-r--r-- | runtime/arch/mips/asm_support_mips.S | 2 | ||||
| -rw-r--r-- | runtime/arch/x86/asm_support_x86.S | 3 | ||||
| -rw-r--r-- | runtime/arch/x86_64/asm_support_x86_64.S | 3 | ||||
| -rwxr-xr-x | test/etc/push-and-run-test-jar | 2 |
5 files changed, 9 insertions, 3 deletions
diff --git a/runtime/arch/arm/asm_support_arm.S b/runtime/arch/arm/asm_support_arm.S index ee4484b96c..b42102461d 100644 --- a/runtime/arch/arm/asm_support_arm.S +++ b/runtime/arch/arm/asm_support_arm.S @@ -42,7 +42,7 @@ /* Cache alignment for function entry */ .balign 16 \name: - .cfi_startproc + .cfi_startproc simple .fnstart .endm diff --git a/runtime/arch/mips/asm_support_mips.S b/runtime/arch/mips/asm_support_mips.S index fe932d20c2..a14593b99c 100644 --- a/runtime/arch/mips/asm_support_mips.S +++ b/runtime/arch/mips/asm_support_mips.S @@ -25,7 +25,7 @@ .global \name .balign 16 \name: - .cfi_startproc + .cfi_startproc simple .endm .macro END name diff --git a/runtime/arch/x86/asm_support_x86.S b/runtime/arch/x86/asm_support_x86.S index 267717a28f..5bf7c5537a 100644 --- a/runtime/arch/x86/asm_support_x86.S +++ b/runtime/arch/x86/asm_support_x86.S @@ -104,6 +104,9 @@ MACRO1(DEFINE_FUNCTION, c_name) ALIGN_FUNCTION_ENTRY VAR(c_name, 0): CFI_STARTPROC + // TODO: we reset the CFA state here. It'd be better to use ".cfi_startproc simple" above but + // clang 3.4 doesn't support this. + CFI_DEF_CFA(esp, 4) END_MACRO MACRO1(END_FUNCTION, c_name) diff --git a/runtime/arch/x86_64/asm_support_x86_64.S b/runtime/arch/x86_64/asm_support_x86_64.S index 14975dadd4..df2afb257f 100644 --- a/runtime/arch/x86_64/asm_support_x86_64.S +++ b/runtime/arch/x86_64/asm_support_x86_64.S @@ -104,6 +104,9 @@ MACRO1(DEFINE_FUNCTION, c_name) ALIGN_FUNCTION_ENTRY VAR(c_name, 0): CFI_STARTPROC + // TODO: we reset the CFA state here. It'd be better to use ".cfi_startproc simple" above but + // clang 3.4 doesn't support this. + CFI_DEF_CFA(rsp, 8) END_MACRO MACRO1(END_FUNCTION, c_name) diff --git a/test/etc/push-and-run-test-jar b/test/etc/push-and-run-test-jar index a218a42344..2a2aa70f9f 100755 --- a/test/etc/push-and-run-test-jar +++ b/test/etc/push-and-run-test-jar @@ -131,7 +131,7 @@ fi if [ "$GDB" = "y" ]; then gdb="gdbserver :5039" - gdbargs="--args $exe" + gdbargs="$exe" fi if [ "$INTERPRETER" = "y" ]; then |