bfd/
authorNick Clifton <nickc@redhat.com>
Fri, 23 May 2008 13:53:27 +0000 (13:53 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 23 May 2008 13:53:27 +0000 (13:53 +0000)
        * elf32-arm.c (arm_type_of_stub): Ignore STT_SECTION symbols.
        (elf32_arm_stub_add_mapping_symbol): Remove.
        (elf32_arm_add_stub): Don't generate mapping symbols. Change
        prototype.
        (elf32_arm_size_stubs): Use new elf32_arm_add_stub
        prototype. Don't generate thumb to arm glue for calls.
        (arm_map_one_stub): Define.
        (elf32_arm_output_arch_local_syms): Generate mapping symbols for
        long calls stubs.

        ld/testsuite/
        * ld-arm/farcall-arm-arm.s: Force function type on 'bar'.
        * ld-arm/farcall-thumb-arm.s: Likewise.
        * ld-arm/farcall-thumb-arm-blx.d: Fix encoding.
        * ld-arm/farcall-thumb-arm.d: Likewise.
        * ld-arm/farcall-thumb-arm-blx-pic-veneer.d: Likewise.
        * ld-arm/arm-elf.exp (armelftests): Add farcall-mix, farcall-mix2,
        farcall-group-default, farcall-group-size2, farcall-section Ignore
        gas warnings in farcall-thumb-arm, farcall-thumb-arm-blx,
        farcall-thumb-arm-blx-pic-veneer.

bfd/ChangeLog
bfd/elf32-arm.c
ld/testsuite/ChangeLog
ld/testsuite/ld-arm/arm-elf.exp
ld/testsuite/ld-arm/armthumb-lib.d
ld/testsuite/ld-arm/farcall-arm-arm.s
ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d
ld/testsuite/ld-arm/farcall-thumb-arm-blx.d
ld/testsuite/ld-arm/farcall-thumb-arm.d
ld/testsuite/ld-arm/farcall-thumb-arm.s

index b061ffa69ac4cb0a91b3beb9f3281d87b68aab1d..11c894f349a1336c76809710f4f776f91f14065a 100644 (file)
@@ -1,3 +1,15 @@
+2008-05-22  Christophe Lyon  <christophe.lyon@st.com>
+
+       * elf32-arm.c (arm_type_of_stub): Ignore STT_SECTION symbols.
+       (elf32_arm_stub_add_mapping_symbol): Remove.
+       (elf32_arm_add_stub): Don't generate mapping symbols. Change
+       prototype.
+       (elf32_arm_size_stubs): Use new elf32_arm_add_stub
+       prototype. Don't generate thumb to arm glue for calls.
+       (arm_map_one_stub): Define.
+       (elf32_arm_output_arch_local_syms): Generate mapping symbols for
+       long calls stubs.
+       
 2008-05-21  Maxim Kuvyrkov  <maxim@codesourcery.com>
        
        Add multi-GOT support for m68k.
index 2f10f0284b575837f90fb3e8c66f7c7da8021141..548dfc0df99a0e0e0c9013441fa4c9bf530e261c 100644 (file)
@@ -2233,9 +2233,9 @@ struct elf32_arm_link_hash_entry
        symbols with Arm stubs.  */
     struct elf_link_hash_entry *export_glue;
 
-  /* A pointer to the most recently used stub hash entry against this
+   /* A pointer to the most recently used stub hash entry against this
      symbol. */
-  struct elf32_arm_stub_hash_entry *stub_cache;
+    struct elf32_arm_stub_hash_entry *stub_cache;
   };
 
 /* Traverse an arm ELF linker hash table.  */
@@ -2731,6 +2731,11 @@ arm_type_of_stub (struct bfd_link_info *info,
   int thumb_only;
   enum elf32_arm_stub_type stub_type = arm_stub_none;
 
+  /* We don't know the actual type of destination in case it is of
+     type STT_SECTION: give up */
+  if (st_type == STT_SECTION)
+    return stub_type;
+
   globals = elf32_arm_hash_table (info);
 
   thumb_only = using_thumb_only (globals);
@@ -2915,33 +2920,13 @@ elf32_arm_get_stub_entry (const asection *input_section,
   return stub_entry;
 }
 
-static void elf32_arm_stub_add_mapping_symbol (struct bfd_link_info * link_info,
-                                              asection *stub_sec,
-                                              char* name,
-                                              bfd_vma val)
-{
-  struct bfd_link_hash_entry * bh = NULL;
-  struct elf_link_hash_entry * myh;
-
-  _bfd_generic_link_add_one_symbol (link_info,
-                                   stub_sec->owner, name,
-                                   BSF_LOCAL, stub_sec, stub_sec->size + val,
-                                   NULL, TRUE, FALSE, &bh);
-
-  myh = (struct elf_link_hash_entry *) bh;
-  myh->type = ELF_ST_INFO (STB_LOCAL, STT_NOTYPE);
-  myh->forced_local = 1;
-}
-
 /* Add a new stub entry to the stub hash.  Not all fields of the new
    stub entry are initialised.  */
 
 static struct elf32_arm_stub_hash_entry *
 elf32_arm_add_stub (const char *stub_name,
                    asection *section,
-                   struct elf32_arm_link_hash_table *htab,
-                   struct bfd_link_info * link_info,
-                   enum elf32_arm_stub_type stub_type)
+                   struct elf32_arm_link_hash_table *htab)
 {
   asection *link_sec;
   asection *stub_sec;
@@ -2989,33 +2974,6 @@ elf32_arm_add_stub (const char *stub_name,
   stub_entry->stub_offset = 0;
   stub_entry->id_sec = link_sec;
 
-  switch (stub_type)
-    {
-    case arm_stub_long_branch:
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$a", 0);
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$d", 4);
-      break;
-    case arm_thumb_v4t_stub_long_branch:
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$a", 0);
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$d", 8);
-      break;
-    case arm_thumb_thumb_stub_long_branch:
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$t", 0);
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$d", 12);
-      break;
-    case arm_thumb_arm_v4t_stub_long_branch:
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$t", 0);
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$a", 8);
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$d", 16);
-      break;
-    case arm_stub_pic_long_branch:
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$a", 0);
-      elf32_arm_stub_add_mapping_symbol (link_info, stub_sec, "$d", 8);
-      break;
-    default:
-      BFD_FAIL ();
-  }
-
   return stub_entry;
 }
 
@@ -3627,7 +3585,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
                      continue;
                    }
 
-                 stub_entry = elf32_arm_add_stub (stub_name, section, htab, info, stub_type);
+                 stub_entry = elf32_arm_add_stub (stub_name, section, htab);
                  if (stub_entry == NULL)
                    {
                      free (stub_name);
@@ -6413,7 +6371,8 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
                    /* Convert BL to BLX.  */
                    lower_insn = (lower_insn & ~0x1000) | 0x0800;
                  }
-               else if (elf32_thumb_to_arm_stub
+               else if (r_type != R_ARM_THM_CALL) {
+                 if (elf32_thumb_to_arm_stub
                    (info, sym_name, input_bfd, output_bfd, input_section,
                     hit_data, sym_sec, rel->r_offset, signed_addend, value,
                     error_message))
@@ -6421,6 +6380,7 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
                else
                  return bfd_reloc_dangerous;
              }
+             }
            else if (sym_flags == STT_ARM_TFUNC && globals->use_blx
                     && r_type == R_ARM_THM_CALL)
              {
@@ -11137,6 +11097,72 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf)
 }
 
 
+static bfd_boolean
+arm_map_one_stub (struct bfd_hash_entry *gen_entry,
+                 PTR in_arg)
+{
+  struct elf32_arm_stub_hash_entry *stub_entry;
+  struct bfd_link_info *info;
+  struct elf32_arm_link_hash_table *htab;
+  asection *stub_sec;
+  bfd_vma addr;
+
+  /* Massage our args to the form they really have.  */
+  stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry;
+
+  output_arch_syminfo *osi = (output_arch_syminfo *) in_arg;
+  info = osi->info;
+
+  htab = elf32_arm_hash_table (info);
+  stub_sec = stub_entry->stub_sec;
+
+  /* Ensure this stub is attached to the current section being
+     processed */
+  if (stub_sec != osi->sec)
+    return TRUE;
+
+  addr = (bfd_vma)stub_entry->stub_offset;
+
+  switch(stub_entry->stub_type) {
+    case arm_stub_long_branch:
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
+       return FALSE;
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 4))
+       return FALSE;
+      break;
+    case arm_thumb_v4t_stub_long_branch:
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
+       return FALSE;
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8))
+       return FALSE;
+      break;
+    case arm_thumb_thumb_stub_long_branch:
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_THUMB, addr))
+       return FALSE;
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 12))
+       return FALSE;
+      break;
+    case arm_thumb_arm_v4t_stub_long_branch:
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_THUMB, addr))
+       return FALSE;
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr + 8))
+       return FALSE;
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 16))
+       return FALSE;
+      break;
+    case arm_stub_pic_long_branch:
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
+       return FALSE;
+      if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8))
+       return FALSE;
+      break;
+    default:
+      BFD_FAIL ();
+  }
+
+  return TRUE;
+}
+
 /* Output mapping symbols for linker generated sections.  */
 
 static bfd_boolean
@@ -11212,6 +11238,26 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
       elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0);
     }
 
+  /* Long calls stubs. */
+  if (htab->stub_bfd && htab->stub_bfd->sections) {
+      asection* stub_sec;
+      for (stub_sec = htab->stub_bfd->sections;
+          stub_sec != NULL;
+          stub_sec = stub_sec->next) {
+
+       /* Ignore non-stub sections */
+       if (!strstr(stub_sec->name, STUB_SUFFIX))
+         continue;
+
+       osi.sec = stub_sec;
+
+       osi.sec_shndx = _bfd_elf_section_from_bfd_section
+         (output_bfd, osi.sec->output_section);
+
+       bfd_hash_traverse (&htab->stub_hash_table, arm_map_one_stub, &osi);
+      }
+  }
+
   /* Finally, output mapping symbols for the PLT.  */
   if (!htab->splt || htab->splt->size == 0)
     return TRUE;
index 3f4c8c917eb30bc57495a6d50586e828df264442..be242b6e0690793d541cae0b043103196eca4b32 100644 (file)
@@ -1,3 +1,15 @@
+2008-05-22  Christophe Lyon  <christophe.lyon@st.com>
+
+       * ld-arm/farcall-arm-arm.s: Force function type on 'bar'.
+       * ld-arm/farcall-thumb-arm.s: Likewise.
+       * ld-arm/farcall-thumb-arm-blx.d: Fix encoding.
+       * ld-arm/farcall-thumb-arm.d: Likewise.
+       * ld-arm/farcall-thumb-arm-blx-pic-veneer.d: Likewise.
+       * ld-arm/arm-elf.exp (armelftests): Add farcall-mix, farcall-mix2,
+       farcall-group-default, farcall-group-size2, farcall-section Ignore
+       gas warnings in farcall-thumb-arm, farcall-thumb-arm-blx,
+       farcall-thumb-arm-blx-pic-veneer.
+
 2008-05-21  Maxim Kuvyrkov  <maxim@codesourcery.com>
 
        * ld-m68k/got-12.s: New file.
index 0dd64bcbe67168222b98e2f93dbac0505aa783b4..62a7ef00b35796a6d3fc4e8ecabe4a6517a5eca2 100644 (file)
@@ -171,71 +171,85 @@ set armelftests {
      {preempt-app.s}
      {{readelf -Ds preempt-app.sym}}
      "preempt-app"}
-     {"jump19" "-static -T arm.ld" "" {jump19.s}
-      {{objdump -dr jump19.d}}
-      "jump19"}
-     {"callweak" "-static -T arm.ld" "" {callweak.s}
-      {{objdump -dr callweak.d}}
-      "callweak"}
+    {"jump19" "-static -T arm.ld" "" {jump19.s}
+     {{objdump -dr jump19.d}}
+     "jump19"}
+    {"callweak" "-static -T arm.ld" "" {callweak.s}
+     {{objdump -dr callweak.d}}
+     "callweak"}
     
-     {"ARMv4 interworking" "-static -T arm.ld --fix-v4bx-interworking" "--fix-v4bx -meabi=4" {armv4-bx.s}
-      {{objdump -d armv4-bx.d}}
-      "armv4-bx"}
-     {"MOVW/MOVT and merged sections" "-T arm.ld" "" {movw-merge.s}
-      {{objdump -dw movw-merge.d}}
-      "movw-merge"}
-     {"MOVW/MOVT against shared libraries" "tmpdir/arm-lib.so" "" {arm-app-movw.s}
-      {{objdump -Rw arm-app.r}}
-      "arm-app-movw"}
-     {"Thumb-2-as-Thumb-1 BL" "-Ttext 0x1000 --section-start .foo=0x40100c" "" {thumb2-bl-as-thumb1-bad.s}
-      {{objdump -d thumb2-bl-as-thumb1-bad.d}}
-      "thumb2-bl-as-thumb1-bad"}
-     {"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x100100c" "" {thumb2-bl-bad.s}
-      {{objdump -d thumb2-bl-bad.d}}
-      "thumb2-bl-bad"}
+    {"ARMv4 interworking" "-static -T arm.ld --fix-v4bx-interworking" "--fix-v4bx -meabi=4" {armv4-bx.s}
+     {{objdump -d armv4-bx.d}}
+     "armv4-bx"}
+    {"MOVW/MOVT and merged sections" "-T arm.ld" "" {movw-merge.s}
+     {{objdump -dw movw-merge.d}}
+     "movw-merge"}
+    {"MOVW/MOVT against shared libraries" "tmpdir/arm-lib.so" "" {arm-app-movw.s}
+     {{objdump -Rw arm-app.r}}
+     "arm-app-movw"}
+    {"Thumb-2-as-Thumb-1 BL" "-Ttext 0x1000 --section-start .foo=0x40100c" "" {thumb2-bl-as-thumb1-bad.s}
+     {{objdump -d thumb2-bl-as-thumb1-bad.d}}
+     "thumb2-bl-as-thumb1-bad"}
+    {"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x100100c" "" {thumb2-bl-bad.s}
+     {{objdump -d thumb2-bl-bad.d}}
+     "thumb2-bl-bad"}
 
-     {"ARM-ARM farcall" "-Ttext 0x1000 --section-start .foo=0x2001020" "" {farcall-arm-arm.s}
-      {{objdump -d farcall-arm-arm.d}}
-      "farcall-arm-arm"}
-     {"ARM-ARM farcall (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001020 --pic-veneer" "" {farcall-arm-arm.s}
-      {{objdump -d farcall-arm-arm-pic-veneer.d}}
-      "farcall-arm-arm-pic-veneer"}
-     {"ARM-ARM farcall (BE8)" "-Ttext 0x1000 --section-start .foo=0x2001020 -EB --be8" "-EB" {farcall-arm-arm.s}
-      {{objdump -d farcall-arm-arm-be8.d}}
-      "farcall-arm-arm-be8"}
+    {"ARM-ARM farcall" "-Ttext 0x1000 --section-start .foo=0x2001020" "" {farcall-arm-arm.s}
+     {{objdump -d farcall-arm-arm.d}}
+     "farcall-arm-arm"}
+    {"ARM-ARM farcall (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001020 --pic-veneer" "" {farcall-arm-arm.s}
+     {{objdump -d farcall-arm-arm-pic-veneer.d}}
+     "farcall-arm-arm-pic-veneer"}
+    {"ARM-ARM farcall (BE8)" "-Ttext 0x1000 --section-start .foo=0x2001020 -EB --be8" "-EB" {farcall-arm-arm.s}
+     {{objdump -d farcall-arm-arm-be8.d}}
+     "farcall-arm-arm-be8"}
 
-     {"ARM-Thumb farcall" "-Ttext 0x1000 --section-start .foo=0x2001014" "" {farcall-arm-thumb.s}
-      {{objdump -d farcall-arm-thumb.d}}
-      "farcall-arm-thumb"}
-     {"ARM-Thumb farcall with BLX" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv5t" {farcall-arm-thumb.s}
-      {{objdump -d farcall-arm-thumb-blx.d}}
-      "farcall-arm-thumb-blx"}
-     {"ARM-Thumb farcall (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "" {farcall-arm-thumb.s}
-      {{objdump -d farcall-arm-thumb-pic-veneer.d}}
-      "farcall-arm-thumb-pic-veneer"}
-     {"ARM-Thumb farcall with BLX (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-march=armv5t" {farcall-arm-thumb.s}
-      {{objdump -d farcall-arm-thumb-blx-pic-veneer.d}}
-      "farcall-arm-thumb-blx-pic-veneer"}
+    {"ARM-Thumb farcall" "-Ttext 0x1000 --section-start .foo=0x2001014" "" {farcall-arm-thumb.s}
+     {{objdump -d farcall-arm-thumb.d}}
+     "farcall-arm-thumb"}
+    {"ARM-Thumb farcall with BLX" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv5t" {farcall-arm-thumb.s}
+     {{objdump -d farcall-arm-thumb-blx.d}}
+     "farcall-arm-thumb-blx"}
+    {"ARM-Thumb farcall (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "" {farcall-arm-thumb.s}
+     {{objdump -d farcall-arm-thumb-pic-veneer.d}}
+     "farcall-arm-thumb-pic-veneer"}
+    {"ARM-Thumb farcall with BLX (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-march=armv5t" {farcall-arm-thumb.s}
+     {{objdump -d farcall-arm-thumb-blx-pic-veneer.d}}
+     "farcall-arm-thumb-blx-pic-veneer"}
 
-     {"Thumb-Thumb farcall with BLX" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv5t" {farcall-thumb-thumb.s}
-      {{objdump -d farcall-thumb-thumb-blx.d}}
-      "farcall-thumb-thumb-blx"}
-     {"Thumb-Thumb farcall M profile" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv7m" {farcall-thumb-thumb.s}
-      {{objdump -d farcall-thumb-thumb-m.d}}
-      "farcall-thumb-thumb-m"}
-     {"Thumb-Thumb farcall with BLX (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-march=armv5t" {farcall-thumb-thumb.s}
-      {{objdump -d farcall-thumb-thumb-blx-pic-veneer.d}}
-      "farcall-thumb-thumb-blx-pic-veneer"}
+    {"Thumb-Thumb farcall with BLX" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv5t" {farcall-thumb-thumb.s}
+     {{objdump -d farcall-thumb-thumb-blx.d}}
+     "farcall-thumb-thumb-blx"}
+    {"Thumb-Thumb farcall M profile" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv7m" {farcall-thumb-thumb.s}
+     {{objdump -d farcall-thumb-thumb-m.d}}
+     "farcall-thumb-thumb-m"}
+    {"Thumb-Thumb farcall with BLX (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-march=armv5t" {farcall-thumb-thumb.s}
+     {{objdump -d farcall-thumb-thumb-blx-pic-veneer.d}}
+     "farcall-thumb-thumb-blx-pic-veneer"}
 
-     {"Thumb-ARM farcall" "-Ttext 0x1000 --section-start .foo=0x2001014" "" {farcall-thumb-arm.s}
-      {{objdump -d farcall-thumb-arm.d}}
-      "farcall-thumb-arm"}
-     {"Thumb-ARM farcall with BLX" "-Ttext 0x1000 --section-start .foo=0x2001014" "-march=armv5t" {farcall-thumb-arm.s}
-      {{objdump -d farcall-thumb-arm-blx.d}}
-      "farcall-thumb-arm-blx"}
-     {"Thumb-ARM farcall with BLX (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-march=armv5t" {farcall-thumb-arm.s}
-      {{objdump -d farcall-thumb-arm-blx-pic-veneer.d}}
-      "farcall-thumb-arm-blx-pic-veneer"}
+    {"Thumb-ARM farcall" "-Ttext 0x1000 --section-start .foo=0x2001014" "-W" {farcall-thumb-arm.s}
+     {{objdump -d farcall-thumb-arm.d}}
+     "farcall-thumb-arm"}
+    {"Thumb-ARM farcall with BLX" "-Ttext 0x1000 --section-start .foo=0x2001014" "-W -march=armv5t" {farcall-thumb-arm.s}
+     {{objdump -d farcall-thumb-arm-blx.d}}
+     "farcall-thumb-arm-blx"}
+    {"Thumb-ARM farcall with BLX (PIC veneer)" "-Ttext 0x1000 --section-start .foo=0x2001014 --pic-veneer" "-W -march=armv5t" {farcall-thumb-arm.s}
+     {{objdump -d farcall-thumb-arm-blx-pic-veneer.d}}
+     "farcall-thumb-arm-blx-pic-veneer"}
+
+    {"Multiple farcalls" "-Ttext 0x1000 --section-start .foo=0x2002020" "" {farcall-mix.s}
+     {{objdump -d farcall-mix.d}}
+     "farcall-mix"}
+    {"Multiple farcalls from several sections" "-Ttext 0x1000 --section-start .mytext=0x2000 --section-start .foo=0x2003020" "" {farcall-mix2.s}
+     {{objdump -d farcall-mix2.d}}
+     "farcall-mix2"}
+
+    {"Default group size" "-Ttext 0x1000 --section-start .foo=0x2003020" "" {farcall-group.s farcall-group2.s}
+     {{objdump -d farcall-group.d}}
+     "farcall-group-default"}
+    {"Group size=2" "-Ttext 0x1000 --section-start .foo=0x2003020 --stub-group-size=2" "" {farcall-group.s farcall-group2.s}
+     {{objdump -d farcall-group-size2.d}}
+     "farcall-group-size2"}
 }
 
 run_ld_link_tests $armelftests
@@ -248,6 +262,7 @@ run_dump_test "farcall-thumb-thumb"
 run_dump_test "farcall-thumb-thumb-pic-veneer"
 run_dump_test "farcall-thumb-thumb-m-pic-veneer"
 run_dump_test "farcall-thumb-arm-pic-veneer"
+run_dump_test "farcall-section"
 
 # Exclude non-ARM-EABI targets.
 
index bd45c87fce0c503d260827362066a486e2598a6d..cc922f144872fbcbc3602b478b3fa9081832906b 100644 (file)
@@ -8,7 +8,7 @@ Disassembly of section .plt:
 
 .* <.plt>:
  .*:   e52de004        push    {lr}            ; \(str lr, \[sp, #-4\]!\)
- .*:   e59fe004        ldr     lr, \[pc, #4\]  ; .* <lib_func1-0x1c>
+ .*:   e59fe004        ldr     lr, \[pc, #4\]  ; .* <lib_func1-0x1.>
  .*:   e08fe00e        add     lr, pc, lr
  .*:   e5bef008        ldr     pc, \[lr, #8\]!
  .*:   .*
index bc77ad3ee86fd9904ec7f439daa39f9265b8e001..00c1e48be41879c1ccd926196c1f3f3ad34ef7ae 100644 (file)
@@ -14,6 +14,7 @@ _start:
 
        .section .foo, "xa"
 
+       .type bar, %function
 bar:
        bx lr
 
index 3e0cb39fa56a407b1b59bfbf80a3763d2eaeedb3..23db877b2711b30b0ff4592ef3bf44cb5cf4c410 100644 (file)
@@ -13,4 +13,4 @@ Disassembly of section .text:
 Disassembly of section .foo:
 
 02001014 <bar>:
- 2001014:      4770            bx      lr
+ 2001014:      e12fff1e        bx      lr
index c4bdd3bd711443c50b3c3612cd2b5fc9ec7baa10..7a72ed46ec69139798e4662d58c5b567f97bf8d7 100644 (file)
@@ -11,4 +11,4 @@ Disassembly of section .text:
 Disassembly of section .foo:
 
 02001014 <bar>:
- 2001014:      4770            bx      lr
+ 2001014:      e12fff1e        bx      lr
index 90495b85e0f0c52ed4137fb022694a225c809188..bcabeb91e28be2edc77eea24658dade7d26198d7 100644 (file)
@@ -16,4 +16,4 @@ Disassembly of section .text:
 Disassembly of section .foo:
 
 02001014 <bar>:
- 2001014:      4770            bx      lr
+ 2001014:      e12fff1e        bx      lr
index 82cfb955543cc3817125f1574556bd9ef78b3f9c..6fcdbfc37a0b8329717a37f304b78ebc2c31cd67 100644 (file)
@@ -14,6 +14,8 @@ _start:
 
        .section .foo, "xa"
 
+       .arm
+       .type bar, %function
 bar:
        bx lr