def testIgnoresMalformedLine(self): # This line is too short. line = ('00c1b228 F .text 00000060 _ZN20trace_event') symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNone(symbol_info) # This line has the wrong marker. line = '00c1b228 l f .text 00000060 _ZN20trace_event' symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNone(symbol_info)
def testStartOfText(self): line = ('00918000 l .text\t00000000' + SPACES + '.hidden linker_script_start_of_text') symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNotNone(symbol_info) self.assertEquals(0x00918000, symbol_info.offset) self.assertEquals('linker_script_start_of_text', symbol_info.name)
def testSymbolTypeObject(self): # Builds with ThinLTO produce symbols of type 'O'. line = ('009faf60 l O .text\t00000500' + SPACES + 'AES_Td') symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNotNone(symbol_info) self.assertEquals(0x009faf60, symbol_info.offset) self.assertEquals('.text', symbol_info.section) self.assertEquals(0x500, symbol_info.size) self.assertEquals('AES_Td', symbol_info.name)
def testNeitherLocalNorGlobalSymbol(self): # This happens, see crbug.com/992884. # Symbol which is neither local nor global. line = '0287ae50 w F .text\t000001e8 log2l' symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNotNone(symbol_info) self.assertEquals(0x287ae50, symbol_info.offset) self.assertEquals(0x1e8, symbol_info.size) self.assertEquals('log2l', symbol_info.name) self.assertEquals('.text', symbol_info.section)
def testOutlinedFunction(self): # Test that an outlined function is reported normally. Also note that # outlined functions are in 64 bit builds which have longer addresses. line = ('00000000020fab4c l F .text\t0000000000000014' + SPACES + 'OUTLINED_FUNCTION_4') symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNotNone(symbol_info) self.assertEquals(0x20fab4c, symbol_info.offset) self.assertEquals(0x14, symbol_info.size) self.assertEquals('OUTLINED_FUNCTION_4', symbol_info.name) self.assertEquals('.text', symbol_info.section)
def testDollarInSymbolName(self): # A $ character elsewhere in the symbol name is fine. # This is an example of a lambda function name from Clang. line = ('00c1b228 l F .text\t00000060' + SPACES + '_ZZL11get_globalsvENK3$_1clEv') symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNotNone(symbol_info) self.assertEquals(0xc1b228, symbol_info.offset) self.assertEquals(0x60, symbol_info.size) self.assertEquals('_ZZL11get_globalsvENK3$_1clEv', symbol_info.name) self.assertEquals('.text', symbol_info.section)
def testHiddenSymbol(self): line = ('00c1c05c l F .text 0000002c ' '.hidden _GLOBAL__sub_I_chrome_main_delegate.cc') test_name = '_GLOBAL__sub_I_chrome_main_delegate.cc' test_offset = 0x00c1c05c test_size = 0x2c test_section = '.text' symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNotNone(symbol_info) self.assertEquals(test_offset, symbol_info.offset) self.assertEquals(test_size, symbol_info.size) self.assertEquals(test_name, symbol_info.name) self.assertEquals(test_section, symbol_info.section)
def testIgnoresBlankLine(self): symbol_info = symbol_extractor._FromObjdumpLine('') self.assertIsNone(symbol_info)
def testSymbolFromLocalLabel(self): line = ('00f64b80 l .text\t00000000' + SPACES + 'Builtins_Abort') symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNone(symbol_info)
def testIgnoresMalformedLine(self): # This line is too short: only 6 flags. line = ('00c1b228 F .text\t00000060' + SPACES + '_ZN20trace_event') symbol_info = symbol_extractor._FromObjdumpLine(line) self.assertIsNone(symbol_info)