From 2c240f7972dc4e6c7cbfb5d4ddcae64720230109 Mon Sep 17 00:00:00 2001 From: Jeff Hao Date: Tue, 22 Jul 2014 18:38:42 -0700 Subject: [PATCH] Fix x86 instrumentation exit entrypoint and trace size limit. The x86 instruction movd only copies a 32-bit value when used with a memory location. movsd properly copies 64-bits. Bug: 16386215 (cherry picked from commit cf2e7b0621dfe7fcacd56555dffabab65d1130e7) Change-Id: I102db8aaa5e8a6b3a88f01e545d1bb51b4f3d5d4 --- runtime/arch/x86/quick_entrypoints_x86.S | 12 +++++------- test/run-test | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/runtime/arch/x86/quick_entrypoints_x86.S b/runtime/arch/x86/quick_entrypoints_x86.S index 68f46ad26..3d872978d 100644 --- a/runtime/arch/x86/quick_entrypoints_x86.S +++ b/runtime/arch/x86/quick_entrypoints_x86.S @@ -1277,14 +1277,12 @@ DEFINE_FUNCTION art_quick_instrumentation_exit mov %esp, %ecx // Remember SP subl LITERAL(8), %esp // Save float return value. CFI_ADJUST_CFA_OFFSET(8) - movd %xmm0, (%esp) + movsd %xmm0, (%esp) PUSH edx // Save gpr return value. PUSH eax - subl LITERAL(8), %esp // Align stack - movd %xmm0, (%esp) - subl LITERAL(8), %esp // Pass float return value. - CFI_ADJUST_CFA_OFFSET(8) - movd %xmm0, (%esp) + subl LITERAL(16), %esp // Align stack + CFI_ADJUST_CFA_OFFSET(16) + movsd %xmm0, (%esp) // Pass float return value. PUSH edx // Pass gpr return value. PUSH eax PUSH ecx // Pass SP. @@ -1299,7 +1297,7 @@ DEFINE_FUNCTION art_quick_instrumentation_exit // (ebx is pretending to be our LR). POP eax // Restore gpr return value. POP edx - movd (%esp), %xmm0 // Restore fpr return value. + movsd (%esp), %xmm0 // Restore fpr return value. addl LITERAL(8), %esp CFI_ADJUST_CFA_OFFSET(-8) RESTORE_REF_ONLY_CALLEE_SAVE_FRAME diff --git a/test/run-test b/test/run-test index 2989f2578..cbfe63a08 100755 --- a/test/run-test +++ b/test/run-test @@ -162,7 +162,7 @@ while true; do suffix64="64" shift elif [ "x$1" = "x--trace" ]; then - run_args="${run_args} --runtime-option -Xmethod-trace --runtime-option -Xmethod-trace-file:${DEX_LOCATION}/trace.bin" + run_args="${run_args} --runtime-option -Xmethod-trace --runtime-option -Xmethod-trace-file:${DEX_LOCATION}/trace.bin --runtime-option -Xmethod-trace-file-size:2000000" shift elif expr "x$1" : "x--" >/dev/null 2>&1; then echo "unknown $0 option: $1" 1>&2 -- 2.11.0