diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/elfread.c | 19 |
2 files changed, 16 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 128c1e2..d2fcc6f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +Thu Feb 13 17:14:28 1992 Fred Fish (fnf at cygnus.com) + + * elfread.c (elf_symtab_read): Fix code to correctly track + changes in bfd for absolute symbols. + Thu Feb 13 12:43:29 1992 Stu Grossman (grossman at cygnus.com) * xm-vaxbsd.h: Close off comment. diff --git a/gdb/elfread.c b/gdb/elfread.c index 8cabd2f..a24f4c2 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -195,25 +195,28 @@ DEFUN (elf_symtab_read, (abfd, addr, mainline), for (i = 0; i < number_of_symbols; i++) { sym = *symbol_table++; - /* Select global symbols that are defined in a specific section - or are absolute. */ - if (sym -> flags & BSF_GLOBAL - && (sym -> section == &bfd_abs_section)) + /* Select global/weak symbols that are defined in a specific section. + Note that bfd now puts abs symbols in their own section, so + all symbols we are interested in will have a section. */ + if ((sym -> flags & (BSF_GLOBAL | BSF_WEAK)) + && (sym -> section != NULL)) { symaddr = sym -> value; - if (!mainline) + /* Relocate all non-absolute symbols by base address. + FIXME: Can we eliminate the check for mainline now, + since shouldn't addr be 0 in this case? */ + if (!mainline && (sym -> section != &bfd_abs_section)) { - /* Relocate all symbols by base address */ symaddr += addr; } /* For non-absolute symbols, use the type of the section they are relative to, to intuit text/data. Bfd provides no way of figuring this out for absolute symbols. */ - if (sym -> section && (sym -> section -> flags & SEC_CODE)) + if (sym -> section -> flags & SEC_CODE) { mf_type = mf_text; } - else if (sym -> section && (sym -> section -> flags & SEC_DATA)) + else if (sym -> section -> flags & SEC_DATA) { mf_type = mf_data; } |