aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2004-10-25 15:24:25 +0000
committerH.J. Lu <hjl.tools@gmail.com>2004-10-25 15:24:25 +0000
commit1ffa9a1825124bdf3d99f1f09b720aac99038822 (patch)
tree109a51ec9f424b131ad91c84ac8b3f347ea3c410
parenta394c00fe601094be18607099c3e92f0c9ea783d (diff)
downloadgdb-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.
-rw-r--r--binutils/ChangeLog5
-rw-r--r--binutils/readelf.c20
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;