aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gutson <dgutson@codesourcery.com>2010-02-12 20:52:52 +0000
committerDaniel Gutson <dgutson@codesourcery.com>2010-02-12 20:52:52 +0000
commit3381116249433c4b03de8c30868c2e7d11ef9d43 (patch)
tree6a86faf13ab3541759069a7c75b1218055a6354a
parent77551a33a8ccccbd9900ee1fc921d13aac70ab92 (diff)
downloadgdb-3381116249433c4b03de8c30868c2e7d11ef9d43.zip
gdb-3381116249433c4b03de8c30868c2e7d11ef9d43.tar.gz
gdb-3381116249433c4b03de8c30868c2e7d11ef9d43.tar.bz2
2010-02-12 Daniel Gutson <dgutson@codesourcery.com>
bfd/ * elf32-arm.c (elf32_arm_output_arch_local_syms): add missing mapping symbol to data only sections. ld/testsuite/ * ld-arm/arm-elf.exp (armelftests): New test case added. * ld-arm/data-only-map.s: New file. * ld-arm/data-only-map.d: New file. * ld-arm/data-only-map.ld: New file.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-arm.c31
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp3
-rw-r--r--ld/testsuite/ld-arm/data-only-map.d13
-rw-r--r--ld/testsuite/ld-arm/data-only-map.ld16
-rw-r--r--ld/testsuite/ld-arm/data-only-map.s20
7 files changed, 94 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index fd505bc..a3bec44 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2010-02-12 Daniel Gutson <dgutson@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_output_arch_local_syms): add
+ missing mapping symbol to data only sections.
+
2010-02-11 David S. Miller <davem@davemloft.net>
* elfxx-sparc.c (_bfd_sparc_elf_check_relocs): For R_SPARC_GOTDATA_OP_HIX22
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 8f8d32c..0661369 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -13004,7 +13004,9 @@ arm_map_one_stub (struct bfd_hash_entry * gen_entry,
return TRUE;
}
-/* Output mapping symbols for linker generated sections. */
+/* Output mapping symbols for linker generated sections,
+ and for those data-only sections that do not have a
+ $d. */
static bfd_boolean
elf32_arm_output_arch_local_syms (bfd *output_bfd,
@@ -13019,6 +13021,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
struct elf32_arm_link_hash_table *htab;
bfd_vma offset;
bfd_size_type size;
+ bfd *input_bfd;
htab = elf32_arm_hash_table (info);
if (htab == NULL)
@@ -13030,6 +13033,32 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
osi.info = info;
osi.func = func;
+ /* Add a $d mapping symbol to data-only sections that
+ don't have any mapping symbol. This may result in (harmless) redundant
+ mapping symbols. */
+ for (input_bfd = info->input_bfds;
+ input_bfd != NULL;
+ input_bfd = input_bfd->link_next)
+ {
+ if ((input_bfd->flags & (BFD_LINKER_CREATED | HAS_SYMS)) == HAS_SYMS)
+ for (osi.sec = input_bfd->sections;
+ osi.sec != NULL;
+ osi.sec = osi.sec->next)
+ {
+ if (osi.sec->output_section != NULL
+ && (osi.sec->flags & (SEC_HAS_CONTENTS | SEC_LINKER_CREATED))
+ == SEC_HAS_CONTENTS
+ && get_arm_elf_section_data (osi.sec) != NULL
+ && get_arm_elf_section_data (osi.sec)->mapcount == 0)
+ {
+ osi.sec_shndx = _bfd_elf_section_from_bfd_section
+ (output_bfd, osi.sec->output_section);
+ if (osi.sec_shndx != (int)SHN_BAD)
+ elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, 0);
+ }
+ }
+ }
+
/* ARM->Thumb glue. */
if (htab->arm_glue_size > 0)
{
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index b67acb0..0b00887 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2010-02-12 Daniel Gutson <dgutson@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armelftests): New test case added.
+ * ld-arm/data-only-map.s: New file.
+ * ld-arm/data-only-map.d: New file.
+ * ld-arm/data-only-map.ld: New file.
+
2010-02-11 David S. Miller <davem@davemloft.net>
* ld-sparc/gotop32.s: Add local symbol case.
diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index 9d60084..a207a79 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -241,6 +241,9 @@ set armelftests {
{"Relocation boundaries" "-defsym x=0 -defsym y=0 -defsym _start=0" "" {reloc-boundaries.s}
{{objdump -s reloc-boundaries.d}}
"reloc-boundaries"}
+ {"Data only mapping symbols" "-T data-only-map.ld -Map map" "" {data-only-map.s}
+ {{objdump -dr data-only-map.d}}
+ "data-only-map"}
}
run_ld_link_tests $armelftests
diff --git a/ld/testsuite/ld-arm/data-only-map.d b/ld/testsuite/ld-arm/data-only-map.d
new file mode 100644
index 0000000..39eed87
--- /dev/null
+++ b/ld/testsuite/ld-arm/data-only-map.d
@@ -0,0 +1,13 @@
+
+[^:]*: file format elf32-littlearm
+
+
+Disassembly of section \.text:
+
+00000000 <_start>:
+ 0: eb01 0002 add\.w r0, r1, r2
+ 4: eb010002 \.word 0xeb010002
+ 8: eb01 0002 add\.w r0, r1, r2
+ c: eb01 0200 add\.w r2, r1, r0
+ 10: eb010002 \.word 0xeb010002
+ 14: eb010002 \.word 0xeb010002
diff --git a/ld/testsuite/ld-arm/data-only-map.ld b/ld/testsuite/ld-arm/data-only-map.ld
new file mode 100644
index 0000000..7d6ea92
--- /dev/null
+++ b/ld/testsuite/ld-arm/data-only-map.ld
@@ -0,0 +1,16 @@
+/* Script for ld testsuite */
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ .text :
+ {
+ *(.text)
+ *(.after1)
+ *(.after2)
+ *(.after3)
+ *(.after4)
+ *(.after5)
+ } =0
+}
+
diff --git a/ld/testsuite/ld-arm/data-only-map.s b/ld/testsuite/ld-arm/data-only-map.s
new file mode 100644
index 0000000..0c5e797
--- /dev/null
+++ b/ld/testsuite/ld-arm/data-only-map.s
@@ -0,0 +1,20 @@
+.syntax unified
+.thumb
+.global _start
+_start:
+add.w r0, r1, r2
+
+.section .after1
+.word 0xeb010002
+
+.section .after2
+add.w r0, r1, r2
+
+.section .after3
+add.w r2, r1, r0
+
+.section .after4
+.word 0xeb010002
+
+.section .after5
+.word 0xeb010002