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
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user