diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2004-10-25 15:24:25 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2004-10-25 15:24:25 +0000 |
commit | 1ffa9a1825124bdf3d99f1f09b720aac99038822 (patch) | |
tree | 109a51ec9f424b131ad91c84ac8b3f347ea3c410 /binutils | |
parent | a394c00fe601094be18607099c3e92f0c9ea783d (diff) | |
download | gdb-1ffa9a1825124bdf3d99f1f09b720aac99038822.zip gdb-1ffa9a1825124bdf3d99f1f09b720aac99038822.tar.gz gdb-1ffa9a1825124bdf3d99f1f09b720aac99038822.tar.bz2 |
2004-10-25 David Mosberger <davidm@hpl.hp.com>
* readelf.c (slurp_ia64_unwind_table): Support relocations against
non-section symbols by adding in the symbol value.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 5 | ||||
-rw-r--r-- | binutils/readelf.c | 20 |
2 files changed, 8 insertions, 17 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 665e83f..936792c 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2004-10-25 David Mosberger <davidm@hpl.hp.com> + + * readelf.c (slurp_ia64_unwind_table): Support relocations against + non-section symbols by adding in the symbol value. + 2004-10-25 Nick Clifton <nickc@redhat.com> PR 465 diff --git a/binutils/readelf.c b/binutils/readelf.c index b2a2689..7944c2a 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -4421,25 +4421,11 @@ slurp_ia64_unwind_table (FILE *file, { relname = elf_ia64_reloc_type (ELF32_R_TYPE (rp->r_info)); sym = aux->symtab + ELF32_R_SYM (rp->r_info); - - if (ELF32_ST_TYPE (sym->st_info) != STT_SECTION) - { - warn (_("Skipping unexpected symbol type %u\n"), - ELF32_ST_TYPE (sym->st_info)); - continue; - } } else { relname = elf_ia64_reloc_type (ELF64_R_TYPE (rp->r_info)); sym = aux->symtab + ELF64_R_SYM (rp->r_info); - - if (ELF64_ST_TYPE (sym->st_info) != STT_SECTION) - { - warn (_("Skipping unexpected symbol type %u\n"), - ELF64_ST_TYPE (sym->st_info)); - continue; - } } if (strncmp (relname, "R_IA64_SEGREL", 13) != 0) @@ -4454,15 +4440,15 @@ slurp_ia64_unwind_table (FILE *file, { case 0: aux->table[i].start.section = sym->st_shndx; - aux->table[i].start.offset += rp->r_addend; + aux->table[i].start.offset += rp->r_addend + sym->st_value; break; case 1: aux->table[i].end.section = sym->st_shndx; - aux->table[i].end.offset += rp->r_addend; + aux->table[i].end.offset += rp->r_addend + sym->st_value; break; case 2: aux->table[i].info.section = sym->st_shndx; - aux->table[i].info.offset += rp->r_addend; + aux->table[i].info.offset += rp->r_addend + sym->st_value; break; default: break; |