diff options
author | Chih-hung Hsieh <chh@google.com> | 2016-09-01 20:22:18 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-09-01 20:22:18 +0000 |
commit | 450d0058068a4a245bb0a189db780f4ffcf84bdc (patch) | |
tree | 7abfc78deed199148d3ee88d384bb2e213623251 /coregrind/m_syswrap | |
parent | 2a8a3b47a434974eb622355ccc6dd6f0a2e280dd (diff) | |
parent | d8fe08f2466ae86d5a3ecf9f2e58ef9d3f2892ca (diff) | |
download | valgrind-450d0058068a4a245bb0a189db780f4ffcf84bdc.tar.gz |
Merge "Make host valgrind work with clang/llvm." am: 5318c4000d am: 9a25385f22
am: d8fe08f246
Change-Id: Ie3c3a3a65090dcaf6e242f0c0b08251e3951cfa2
Diffstat (limited to 'coregrind/m_syswrap')
-rw-r--r-- | coregrind/m_syswrap/syswrap-x86-linux.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 24d7dc18a..233886d2f 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -83,8 +83,9 @@ asm( ".globl vgModuleLocal_call_on_new_stack_0_1\n" "vgModuleLocal_call_on_new_stack_0_1:\n" " movl %esp, %esi\n" // remember old stack pointer -" movl 4(%esi), %esp\n" // set stack -" pushl 16(%esi)\n" // arg1 to stack +" movl 4(%esi), %esp\n" // set stack, assume %esp is now 16-byte aligned +" subl $12, %esp\n" // skip 12 bytes +" pushl 16(%esi)\n" // arg1 to stack, %esp is 16-byte aligned " pushl 8(%esi)\n" // retaddr to stack " pushl 12(%esi)\n" // f to stack " movl $0, %eax\n" // zero all GP regs @@ -150,7 +151,8 @@ asm( " movl 4+"FSZ"(%esp), %ecx\n" /* syscall arg2: child stack */ " movl 12+"FSZ"(%esp), %ebx\n" /* fn arg */ " movl 0+"FSZ"(%esp), %eax\n" /* fn */ -" lea -8(%ecx), %ecx\n" /* make space on stack */ +" andl $-16, %ecx\n" /* align to 16-byte */ +" lea -20(%ecx), %ecx\n" /* allocate 16*n+4 bytes on stack */ " movl %ebx, 4(%ecx)\n" /* fn arg */ " movl %eax, 0(%ecx)\n" /* fn */ @@ -165,7 +167,7 @@ asm( " jnz 1f\n" /* CHILD - call thread function */ -" popl %eax\n" +" popl %eax\n" /* child %esp is 16-byte aligned */ " call *%eax\n" /* call fn */ /* exit with result */ |