summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2012-09-04 12:35:33 +0000
committerH.J. Lu <hjl.tools@gmail.com>2012-09-04 12:35:33 +0000
commitd0704435a1cb729119c23ab075d55596d12f0504 (patch)
tree9bc8cd953cad9c632d76a8d083ab4eed839fdbce
parent58f12b1bcfe8732d20bf0b2f7a852e7bab742a9e (diff)
downloadbinutils-redhat-d0704435a1cb729119c23ab075d55596d12f0504.tar.gz
Ignore section symbols without a BFD section
bfd/ PR binutils/14493 * elf.c (ignore_section_sym): Also ignore section symbols without a BFD section. binutils/ PR binutils/14493 * readelf.c (get_symbol_index_type): Check bad section index.
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf.c14
-rw-r--r--binutils/ChangeLog39
-rw-r--r--binutils/readelf.c2
4 files changed, 41 insertions, 20 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 189d52d1a6..a7165020e4 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2012-09-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/14493
+ * elf.c (ignore_section_sym): Also ignore section symbols without
+ a BFD section.
+
2012-09-03 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* elf32-s390.c (elf_s390_relocate_section): Handle PLTOFF for
diff --git a/bfd/elf.c b/bfd/elf.c
index 0208e05ec1..b4043b1292 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -3264,13 +3264,21 @@ sym_is_global (bfd *abfd, asymbol *sym)
}
/* Don't output section symbols for sections that are not going to be
- output, or that are duplicates. */
+ output, that are duplicates or there is no BFD section. */
static bfd_boolean
ignore_section_sym (bfd *abfd, asymbol *sym)
{
- return ((sym->flags & BSF_SECTION_SYM) != 0
- && !(sym->section->owner == abfd
+ elf_symbol_type *type_ptr;
+
+ if ((sym->flags & BSF_SECTION_SYM) == 0)
+ return FALSE;
+
+ type_ptr = elf_symbol_from (abfd, sym);
+ return ((type_ptr != NULL
+ && type_ptr->internal_elf_sym.st_shndx != 0
+ && bfd_is_abs_section (sym->section))
+ || !(sym->section->owner == abfd
|| (sym->section->output_section->owner == abfd
&& sym->section->output_offset == 0)
|| bfd_is_abs_section (sym->section)));
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 922396acf7..5c6fcb7f70 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2012-09-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/14493
+ * readelf.c (get_symbol_index_type): Check bad section index.
+
2012-08-24 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
* readelf.c (arm_attr_tag_CPU_arch): Update for ARMv8.
@@ -20,15 +25,15 @@
* bfdtest1.c: New file.
2012-08-13 Ian Bolton <ian.bolton@arm.com>
- Laurent Desnogues <laurent.desnogues@arm.com>
- Jim MacArthur <jim.macarthur@arm.com>
- Marcus Shawcroft <marcus.shawcroft@arm.com>
- Nigel Stephens <nigel.stephens@arm.com>
- Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
- Richard Earnshaw <rearnsha@arm.com>
- Sofiane Naci <sofiane.naci@arm.com>
- Tejas Belagod <tejas.belagod@arm.com>
- Yufeng Zhang <yufeng.zhang@arm.com>
+ Laurent Desnogues <laurent.desnogues@arm.com>
+ Jim MacArthur <jim.macarthur@arm.com>
+ Marcus Shawcroft <marcus.shawcroft@arm.com>
+ Nigel Stephens <nigel.stephens@arm.com>
+ Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+ Richard Earnshaw <rearnsha@arm.com>
+ Sofiane Naci <sofiane.naci@arm.com>
+ Tejas Belagod <tejas.belagod@arm.com>
+ Yufeng Zhang <yufeng.zhang@arm.com>
* readelf.c (guess_is_rela): Handle EM_AARCH64.
(get_machine_name): Likewise.
@@ -88,17 +93,17 @@
2012-07-24 Teresa Johnson <tejohnson@google.com>
* addr2line.c (find_address_in_section): Invoke
- bfd_find_nearest_line_discriminator to get the discriminator.
+ bfd_find_nearest_line_discriminator to get the discriminator.
(find_offset_in_section): Likewise.
(translate_addresses): Print discriminator if it is non-zero.
* objdump.c (show_line): Invoke
- bfd_find_nearest_line_discriminator to get the discriminator,
- and keep track of prev_discriminator. Print discriminator
- if it is non-zero.
+ bfd_find_nearest_line_discriminator to get the discriminator,
+ and keep track of prev_discriminator. Print discriminator
+ if it is non-zero.
(disassemble_data): Initialize prev_discriminator.
(dump_reloc_set): Invoke bfd_find_nearest_line_discriminator
- to get the discriminator, and keep track of last_discriminator.
- Print discriminator if it is non-zero.
+ to get the discriminator, and keep track of last_discriminator.
+ Print discriminator if it is non-zero.
2012-07-17 Nick Clifton <nickc@redhat.com>
@@ -360,8 +365,8 @@
2012-04-11 Ryan Mansfield <rmansfield@qnx.com>
- * objdump.c (dump_bfd): If defaulting to dwarf call
- dwarf_select_sections_all to enable displays.
+ * objdump.c (dump_bfd): If defaulting to dwarf call
+ dwarf_select_sections_all to enable displays.
2012-04-06 Roland McGrath <mcgrathr@google.com>
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 89cff2477e..2fbf2ae6e8 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -8974,6 +8974,8 @@ get_symbol_index_type (unsigned int type)
sprintf (buff, "OS [0x%04x]", type & 0xffff);
else if (type >= SHN_LORESERVE)
sprintf (buff, "RSV[0x%04x]", type & 0xffff);
+ else if (type >= elf_header.e_shnum)
+ sprintf (buff, "bad section index[%3d]", type);
else
sprintf (buff, "%3d", type);
break;