From 8554b7d530743b6f61cf27f58167e1a8d6699f43 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Mon, 7 Aug 2000 10:56:22 +0000 Subject: * solib.c (bfd_lookup_symbol): Fall back on the dynamic symbol table if the symbol couldn't be found in the normal symbol table (i.e. if the shared object in question was stripped). --- gdb/ChangeLog | 6 ++++++ gdb/solib.c | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0c47be7..aad8daa 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2000-05-21 Mark Kettenis + + * solib.c (bfd_lookup_symbol): Fall back on the dynamic symbol + table if the symbol couldn't be found in the normal symbol table + (i.e. if the shared object in question was stripped). + 2000-08-06 Kevin Buettner * ch-exp.c (parse_opt_name_string): Protoize. [Thanks to Eli diff --git a/gdb/solib.c b/gdb/solib.c index b6cfcaa..a957411 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -1,5 +1,5 @@ /* Handle SunOS and SVR4 shared libraries for GDB, the GNU Debugger. - Copyright 1990, 91, 92, 93, 94, 95, 96, 98, 1999 + Copyright 1990, 91, 92, 93, 94, 95, 96, 98, 1999, 2000 Free Software Foundation, Inc. This file is part of GDB. @@ -528,7 +528,35 @@ bfd_lookup_symbol (bfd *abfd, char *symname) } do_cleanups (back_to); } - return (symaddr); + + if (symaddr) + return symaddr; + + /* On FreeBSD, the dynamic linker is stripped by default. So we'll + have to check the dynamic string table too. */ + + storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd); + + if (storage_needed > 0) + { + symbol_table = (asymbol **) xmalloc (storage_needed); + back_to = make_cleanup (free, (PTR) symbol_table); + number_of_symbols = bfd_canonicalize_dynamic_symtab (abfd, symbol_table); + + for (i = 0; i < number_of_symbols; i++) + { + sym = *symbol_table++; + if (STREQ (sym->name, symname)) + { + /* Bfd symbols are section relative. */ + symaddr = sym->value + sym->section->vma; + break; + } + } + do_cleanups (back_to); + } + + return symaddr; } #ifdef HANDLE_SVR4_EXEC_EMULATORS -- cgit v1.1