summaryrefslogtreecommitdiff
path: root/elfparser.c
diff options
context:
space:
mode:
authorSøren Sandmann <sandmann@redhat.com>2008-03-29 16:00:33 +0000
committerSøren Sandmann Pedersen <ssp@src.gnome.org>2008-03-29 16:00:33 +0000
commitd2a6151f8da8b8a2d20f76560e1b2d9ca670dbdc (patch)
tree6dc3efdccd051a98073336ed792ce8d7016cbe6c /elfparser.c
parent72ef8ca8c6712cbc75ec3ed2cb26e7c108289300 (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.c35
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)