aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf32-arm.c
diff options
context:
space:
mode:
authorThomas Schwinge <tschwinge@gnu.org>2010-10-01 11:22:40 +0000
committerThomas Schwinge <tschwinge@gnu.org>2010-10-01 11:22:40 +0000
commitf6d250ce5c780e6b43ea4b658d6037be34eb91bd (patch)
tree942b5774b7ccef3c4012bdd39780d5f5f9170787 /bfd/elf32-arm.c
parentabf4be64df114dbca199fc2c2fbf52fa17492649 (diff)
downloadgdb-f6d250ce5c780e6b43ea4b658d6037be34eb91bd.zip
gdb-f6d250ce5c780e6b43ea4b658d6037be34eb91bd.tar.gz
gdb-f6d250ce5c780e6b43ea4b658d6037be34eb91bd.tar.bz2
2010-10-01 Thomas Schwinge <thomas@codesourcery.com>
* elf32-arm.c (elf32_arm_size_stubs): Don't choke on local symbols in SHN_UNDEF, SHN_ABS, SHN_COMMON.
Diffstat (limited to 'bfd/elf32-arm.c')
-rw-r--r--bfd/elf32-arm.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 2125582..fb3e0a3 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -4486,7 +4486,6 @@ elf32_arm_size_stubs (bfd *output_bfd,
{
/* It's a local symbol. */
Elf_Internal_Sym *sym;
- Elf_Internal_Shdr *hdr;
if (local_syms == NULL)
{
@@ -4502,8 +4501,16 @@ elf32_arm_size_stubs (bfd *output_bfd,
}
sym = local_syms + r_indx;
- hdr = elf_elfsections (input_bfd)[sym->st_shndx];
- sym_sec = hdr->bfd_section;
+ if (sym->st_shndx == SHN_UNDEF)
+ sym_sec = bfd_und_section_ptr;
+ else if (sym->st_shndx == SHN_ABS)
+ sym_sec = bfd_abs_section_ptr;
+ else if (sym->st_shndx == SHN_COMMON)
+ sym_sec = bfd_com_section_ptr;
+ else
+ sym_sec =
+ bfd_section_from_elf_index (input_bfd, sym->st_shndx);
+
if (!sym_sec)
/* This is an undefined symbol. It can never
be resolved. */