mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
Deal with address offsets. Address lookup is now:
2006-10-07 Soren Sandmann <sandmann@daimi.au.dk> Deal with address offsets. Address lookup is now: - First convert the address to an offset into the file - Then convert to an offset into the text segment - Then add the load address of the text segment (found in the debug binary) - Then finally lookup the result in the symbol table. * elfparser.c (elf_parser_get_text_offset): New function * elfparser.c (elf_parser_lookup_symbol): Treat addresses as offsets into the text segment. * binfile.c (bin_file_new): Store the offset of the text section of the actual binary (not the debug one) (bin_file_lookup_symbol): Subtract text_offset before passing address to elf parser. * module/sysprof-module.c: Remove include of linux/config.h
This commit is contained in:
committed by
Søren Sandmann Pedersen
parent
6a7178f612
commit
52274fadd6
15
binfile.c
15
binfile.c
@ -46,6 +46,8 @@ struct BinFile
|
||||
ino_t inode;
|
||||
|
||||
char * undefined_name;
|
||||
|
||||
gulong text_offset;
|
||||
};
|
||||
|
||||
/* FIXME: error handling */
|
||||
@ -154,6 +156,13 @@ bin_file_new (const char *filename)
|
||||
{
|
||||
bf = g_new0 (BinFile, 1);
|
||||
bf->elf = elf_parser_new (filename, NULL);
|
||||
|
||||
/* We need the text offset of the actual binary, not the
|
||||
* (potential) debug binary
|
||||
*/
|
||||
if (bf->elf)
|
||||
bf->text_offset = elf_parser_get_text_offset (bf->elf);
|
||||
|
||||
bf->elf = find_separate_debug_file (bf->elf, filename);
|
||||
bf->inode = read_inode (filename);
|
||||
bf->filename = g_strdup (filename);
|
||||
@ -188,10 +197,16 @@ bin_file_lookup_symbol (BinFile *bin_file,
|
||||
{
|
||||
if (bin_file->elf)
|
||||
{
|
||||
address -= bin_file->text_offset;
|
||||
|
||||
const ElfSym *sym = elf_parser_lookup_symbol (bin_file->elf, address);
|
||||
|
||||
|
||||
if (sym)
|
||||
{
|
||||
g_print ("found %lx => %s\n", address, bin_symbol_get_name (bin_file, sym));
|
||||
return (const BinSymbol *)sym;
|
||||
}
|
||||
}
|
||||
|
||||
return (const BinSymbol *)bin_file->undefined_name;
|
||||
|
||||
Reference in New Issue
Block a user