OSDN Git Service

Fix x86 instrumentation exit entrypoint and trace size limit.
authorJeff Hao <jeffhao@google.com>
Wed, 23 Jul 2014 01:38:42 +0000 (18:38 -0700)
committerJeff Hao <jeffhao@google.com>
Wed, 23 Jul 2014 18:13:37 +0000 (11:13 -0700)
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
test/run-test

index 68f46ad..3d87297 100644 (file)
@@ -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
index 2989f25..cbfe63a 100755 (executable)
@@ -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