Same purpose as https://github.com/llvm/llvm-project/pull/141407, comitting this directly to get the bot green sooner. Co-authored-by: Ely Ronnen <elyronnen@gmail.com>
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""
|
|
Test lookup unnamed symbols.
|
|
"""
|
|
|
|
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
# --keep-symbol causes error on Windows: llvm-strip.exe: error: option is not supported for COFF
|
|
@skipIfWindows
|
|
# Unnamed symbols don't get into the .eh_frame section on ARM, so LLDB can't find them.
|
|
@skipIf(archs=["arm"])
|
|
class TestUnnamedSymbolLookup(TestBase):
|
|
def test_unnamed_symbol_lookup(self):
|
|
"""Test looking up unnamed symbol synthetic name"""
|
|
self.build()
|
|
(target, process, thread, bkpt) = lldbutil.run_to_name_breakpoint(
|
|
self, "main", exe_name="a.out.stripped"
|
|
)
|
|
|
|
main_frame = thread.GetFrameAtIndex(0)
|
|
|
|
# Step until reaching the unnamed symbol called from main
|
|
for _ in range(100):
|
|
thread.StepInto()
|
|
if thread.GetFrameAtIndex(0) != main_frame:
|
|
break
|
|
|
|
thread.StepInto()
|
|
|
|
self.assertEqual(
|
|
main_frame, thread.GetFrameAtIndex(1), "Expected to be called from main"
|
|
)
|
|
symbol = thread.GetFrameAtIndex(0).GetSymbol()
|
|
self.assertIsNotNone(symbol, "unnamed symbol called from main not reached")
|
|
self.assertTrue(symbol.name.startswith("___lldb_unnamed_symbol"))
|
|
|
|
exe_module = symbol.GetStartAddress().GetModule()
|
|
found_symbols = exe_module.FindSymbols(symbol.name)
|
|
self.assertIsNotNone(found_symbols)
|
|
self.assertEqual(found_symbols.GetSize(), 1)
|