diff options
| author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2019-12-21 11:27:54 +0100 |
|---|---|---|
| committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2019-12-21 11:27:54 +0100 |
| commit | 4706a60e8a071f0c6a686c45ed08c7bab0bb8446 (patch) | |
| tree | 154bd0103578251330d9f98b010c293876d5304d /lldb/test/Shell | |
| parent | df6879ec0227a8a5e5697e505201d0f4444f03a4 (diff) | |
| download | bcm5719-llvm-4706a60e8a071f0c6a686c45ed08c7bab0bb8446.tar.gz bcm5719-llvm-4706a60e8a071f0c6a686c45ed08c7bab0bb8446.zip | |
[lldb] [testsuite] Fix Linux fail: Unwind/thread-step-out-ret-addr-check.test
D71372 introduced: `Unwind/thread-step-out-ret-addr-check.test` failing on
Fedora 30 Linux x86_64.
[lldb] Add additional validation on return address in 'thread step-out'
https://reviews.llvm.org/D71372
One problem is the underscored `_nonstandard_stub` in the `.s` file but not in
the LLDB command:
(lldb) breakpoint set -n nonstandard_stub
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
(lldb) process launch
Process 21919 exited with status = 0 (0x00000000)
Process 21919 launched: '/home/jkratoch/redhat/llvm-monorepo-clangassert/tools/lldb/test/Unwind/Output/thread-step-out-ret-addr-check.test.tmp' (x86_64)
(lldb) thread step-out
error: invalid thread
(lldb) _
Another problem is that Fedora Linux has executable stack by default and all
programs indicate non-executable stack by `PT_GNU_STACK`, after fixing the
underscore I was getting:
(lldb) thread step-out
Process 22294 exited with status = 0 (0x00000000)
(lldb) _
A different approach was tried as:
[lldb] Refactor thread-step-out-ret-addr-check test to use .data instead of stack variable
https://reviews.llvm.org/D71789
Differential revision: https://reviews.llvm.org/D71784
Diffstat (limited to 'lldb/test/Shell')
| -rw-r--r-- | lldb/test/Shell/Unwind/Inputs/thread-step-out-ret-addr-check.s | 8 | ||||
| -rw-r--r-- | lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test | 2 |
2 files changed, 7 insertions, 3 deletions
diff --git a/lldb/test/Shell/Unwind/Inputs/thread-step-out-ret-addr-check.s b/lldb/test/Shell/Unwind/Inputs/thread-step-out-ret-addr-check.s index d18ea24fba4..2fb4935b38b 100644 --- a/lldb/test/Shell/Unwind/Inputs/thread-step-out-ret-addr-check.s +++ b/lldb/test/Shell/Unwind/Inputs/thread-step-out-ret-addr-check.s @@ -4,13 +4,13 @@ asm_main: sub $0x8, %rsp movq $0, (%rsp) push %rsp - jmp _nonstandard_stub + jmp nonstandard_stub # Takes a single pointer argument via the stack, which is nonstandard for x64. # Executing 'thread step-out' here will initially attempt to write a # breakpoint to that stack address, but should fail because of the executable # memory check. -_nonstandard_stub: +nonstandard_stub: mov (%rsp), %rdi mov (%rdi), %rsi add $1, %rsi @@ -18,3 +18,7 @@ _nonstandard_stub: add $0x10, %rsp ret + +#ifdef __linux__ + .section .note.GNU-stack,"",@progbits +#endif diff --git a/lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test b/lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test index 53436cd55af..ec73bd808c2 100644 --- a/lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test +++ b/lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test @@ -1,7 +1,7 @@ # Test that `thread step-out` fails when the "return address" # points to non-executable memory. -# REQUIRES: target-x86_64, system-darwin +# REQUIRES: target-x86_64 # RUN: %clang_host %p/Inputs/call-asm.c %p/Inputs/thread-step-out-ret-addr-check.s -o %t # RUN: %lldb %t -s %s -b 2>&1 | FileCheck %s |

