diff options
author | Thomas Schwinge <tschwinge@gnu.org> | 2010-10-01 11:22:40 +0000 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gnu.org> | 2010-10-01 11:22:40 +0000 |
commit | f6d250ce5c780e6b43ea4b658d6037be34eb91bd (patch) | |
tree | 942b5774b7ccef3c4012bdd39780d5f5f9170787 | |
parent | abf4be64df114dbca199fc2c2fbf52fa17492649 (diff) | |
download | gdb-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.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf32-arm.c | 13 |
2 files changed, 15 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 2b0b5b0..f9aba1c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +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. + 2010-09-30 H.J. Lu <hongjiu.lu@intel.com> PR ld/11812 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. */ |