diff options
author | Søren Sandmann <sandmann@redhat.com> | 2008-03-29 16:00:33 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2008-03-29 16:00:33 +0000 |
commit | d2a6151f8da8b8a2d20f76560e1b2d9ca670dbdc (patch) | |
tree | 6dc3efdccd051a98073336ed792ce8d7016cbe6c /elfparser.c | |
parent | 72ef8ca8c6712cbc75ec3ed2cb26e7c108289300 (diff) |
Beginning of a dwarf unwinder.
Sat Mar 29 11:14:38 2008 Søren Sandmann <sandmann@redhat.com>
* unwind.[ch], testunwind.c: Beginning of a dwarf unwinder.
svn path=/trunk/; revision=405
Diffstat (limited to 'elfparser.c')
-rw-r--r-- | elfparser.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/elfparser.c b/elfparser.c index e014438..5224618 100644 --- a/elfparser.c +++ b/elfparser.c @@ -470,16 +470,20 @@ read_table (ElfParser *parser, n_functions++; #if 0 - g_print (" symbol: %s: %lx\n", get_string_indirect (parser->parser, - parser->sym_format, "st_name", - str_table->offset), addr - parser->text_section->load_address); - g_print (" sym %d in %p (info: %d:%d) (func:global %d:%d)\n", addr, parser, info & 0xf, info >> 4, STT_FUNC, STB_GLOBAL); + g_print (" symbol: %s: %lx\n", + get_string_indirect (parser->parser, + parser->sym_format, "st_name", + str_table->offset), + addr - parser->text_section->load_address); + g_print (" sym %d in %p (info: %d:%d) (func:global %d:%d)\n", + addr, parser, info & 0xf, info >> 4, STT_FUNC, STB_GLOBAL); #endif } else if (addr != 0) { #if 0 - g_print (" rejecting %d in %p (info: %d:%d) (func:global %d:%d)\n", addr, parser, info & 0xf, info >> 4, STT_FUNC, STB_GLOBAL); + g_print (" rejecting %d in %p (info: %d:%d) (func:global %d:%d)\n", + addr, parser, info & 0xf, info >> 4, STT_FUNC, STB_GLOBAL); #endif } @@ -653,16 +657,29 @@ elf_parser_get_debug_link (ElfParser *parser, guint32 *crc32) } const guchar * -elf_parser_get_eh_frame (ElfParser *parser) +get_section (ElfParser *parser, + const char *name) { - const Section *eh_frame = find_section (parser, ".eh_frame", SHT_PROGBITS); + const Section *section = find_section (parser, name, SHT_PROGBITS); - if (eh_frame) - return bin_parser_get_data (parser->parser) + eh_frame->offset; + if (section) + return bin_parser_get_data (parser->parser) + section->offset; else return NULL; } +const guchar * +elf_parser_get_eh_frame (ElfParser *parser) +{ + return get_section (parser, ".eh_frame"); +} + +const guchar * +elf_parser_get_debug_frame (ElfParser *parser) +{ + return get_section (parser, ".debug_frame"); +} + const char * elf_parser_get_sym_name (ElfParser *parser, const ElfSym *sym) |