""" 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)