From 49f359aea4b1d625946ca21c4a4cee8d8272dbc1 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Fri, 7 Mar 2014 19:02:20 +0000 Subject: [PATCH] Fix malloc thread step-out test on FreeBSD After hitting the malloc() breakpoint on FreeBSD our top frame is actually an inlined function malloc_init. * frame #0: 0x0000000800dcba19 libc.so.7`malloc [inlined] malloc_init at malloc.c:5397 frame #1: 0x0000000800dcba19 libc.so.7`malloc(size=1024) + 9 at malloc.c:5949 frame #2: 0x00000000004006e5 test_step_out_of_malloc_into_function_b_with_dwarf`b(val=1) + 37 at main2.cpp:29 Add a heuristic to keep stepping out until we come to a non-malloc caller, before checking if it is our desired caller from the test code. llvm.org/pr17944 llvm-svn: 203268 --- lldb/test/python_api/thread/TestThreadAPI.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lldb/test/python_api/thread/TestThreadAPI.py b/lldb/test/python_api/thread/TestThreadAPI.py index a04def9..1dc8d83 100644 --- a/lldb/test/python_api/thread/TestThreadAPI.py +++ b/lldb/test/python_api/thread/TestThreadAPI.py @@ -74,7 +74,6 @@ class ThreadAPITestCase(TestBase): self.setTearDownCleanup(dictionary=d) self.step_out_of_malloc_into_function_b(self.exe_name) - @expectedFailureFreeBSD('llvm.org/pr17944') @expectedFailureLinux # llvm.org/pr14416 @python_api_test @dwarf_test @@ -187,6 +186,15 @@ class ThreadAPITestCase(TestBase): #print "caller symbol of malloc:", caller_symbol if not caller_symbol: self.fail("Test failed: could not locate the caller symbol of malloc") + + # Our top frame may be an inlined function in malloc() (e.g., on + # FreeBSD). Apply a simple heuristic of stepping out until we find + # a non-malloc caller + while caller_symbol.startswith("malloc"): + thread.StepOut() + self.assertTrue(thread.IsValid(), "Thread valid after stepping to outer malloc") + caller_symbol = get_caller_symbol(thread) + if caller_symbol == "b(int)": break #self.runCmd("thread backtrace") -- 2.7.4