2010-02-12 Daniel Gutson <dgutson@codesourcery.com>
authorDaniel Gutson <dgutson@codesourcery.com>
Fri, 12 Feb 2010 20:52:52 +0000 (20:52 +0000)
committerDaniel Gutson <dgutson@codesourcery.com>
Fri, 12 Feb 2010 20:52:52 +0000 (20:52 +0000)
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.

bfd/ChangeLog
bfd/elf32-arm.c
ld/testsuite/ChangeLog
ld/testsuite/ld-arm/arm-elf.exp
ld/testsuite/ld-arm/data-only-map.d [new file with mode: 0644]
ld/testsuite/ld-arm/data-only-map.ld [new file with mode: 0644]
ld/testsuite/ld-arm/data-only-map.s [new file with mode: 0644]

index fd505bc..a3bec44 100644 (file)
@@ -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
index 8f8d32c..0661369 100644 (file)
@@ -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)
     {
index b67acb0..0b00887 100644 (file)
@@ -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.
index 9d60084..a207a79 100644 (file)
@@ -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 (file)
index 0000000..39eed87
--- /dev/null
@@ -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 (file)
index 0000000..7d6ea92
--- /dev/null
@@ -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 (file)
index 0000000..0c5e797
--- /dev/null
@@ -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