diff options
author | Daniel Jacobowitz <drow@false.org> | 2008-06-25 14:28:48 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2008-06-25 14:28:48 +0000 |
commit | 7413f23fb41cf2a09614c4db4703074ae878ee89 (patch) | |
tree | 50c723e2c83c56d63290c119528a3fba766636a8 | |
parent | 92677fa666331d50978d88a969c3bb275ceea1a9 (diff) | |
download | gdb-7413f23fb41cf2a09614c4db4703074ae878ee89.zip gdb-7413f23fb41cf2a09614c4db4703074ae878ee89.tar.gz gdb-7413f23fb41cf2a09614c4db4703074ae878ee89.tar.bz2 |
* elf32-arm.c (STUB_ENTRY_NAME): Define.
(arm_thumb_thumb_long_branch_stub): Use bx instead of b.n.
(arm_pic_long_branch_stub): Mention R_ARM_REL32 instead of
R_ARM_ABS32.
(struct elf32_arm_stub_hash_entry): Add output_name.
(arm_build_one_stub): Move offsets into the offset argument
of _bfd_final_link_relocate. Correct offset for
arm_thumb_arm_v4t_stub_long_branch.
(elf32_arm_size_stubs): Set stub_entry->output_name.
(elf32_arm_ouput_plt_map_sym): Rename to elf32_arm_output_map_sym.
Update all callers.
(elf32_arm_output_stub_sym): New.
(arm_map_one_stub): Correct formatting. Use elf32_arm_output_stub_sym.
* ld-arm/farcall-arm-arm-be8.d, ld-arm/farcall-arm-arm-pic-veneer.d,
ld-arm/farcall-arm-arm.d, ld-arm/farcall-arm-thumb-blx-pic-veneer.d,
ld-arm/farcall-arm-thumb-blx.d, ld-arm/farcall-arm-thumb-pic-veneer.d,
ld-arm/farcall-arm-thumb.d, ld-arm/farcall-group-size2.d,
ld-arm/farcall-group.d, ld-arm/farcall-mix.d, ld-arm/farcall-mix2.d,
ld-arm/farcall-thumb-arm-blx-pic-veneer.d,
ld-arm/farcall-thumb-arm-blx.d, ld-arm/farcall-thumb-arm.d,
ld-arm/farcall-thumb-thumb-blx-pic-veneer.d,
ld-arm/farcall-thumb-thumb-blx.d, ld-arm/farcall-thumb-thumb-m.d,
ld-arm/thumb2-bl-as-thumb1-bad.d, ld-arm/thumb2-bl-bad.d: Update for
stub symbols and stub corrections.
23 files changed, 265 insertions, 144 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c17368f..d87568b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,19 @@ +2008-06-24 Daniel Jacobowitz <dan@codesourcery.com> + + * elf32-arm.c (STUB_ENTRY_NAME): Define. + (arm_thumb_thumb_long_branch_stub): Use bx instead of b.n. + (arm_pic_long_branch_stub): Mention R_ARM_REL32 instead of + R_ARM_ABS32. + (struct elf32_arm_stub_hash_entry): Add output_name. + (arm_build_one_stub): Move offsets into the offset argument + of _bfd_final_link_relocate. Correct offset for + arm_thumb_arm_v4t_stub_long_branch. + (elf32_arm_size_stubs): Set stub_entry->output_name. + (elf32_arm_ouput_plt_map_sym): Rename to elf32_arm_output_map_sym. + Update all callers. + (elf32_arm_output_stub_sym): New. + (arm_map_one_stub): Correct formatting. Use elf32_arm_output_stub_sym. + 2008-06-20 Alan Modra <amodra@bigpond.net.au> * elf32-spu.c (needs_ovl_stub): Correctly return nonovl_stub for diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index e691300..bb0dd42 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -1898,6 +1898,8 @@ typedef unsigned short int insn16; #define ARM_BX_GLUE_SECTION_NAME ".v4_bx" #define ARM_BX_GLUE_ENTRY_NAME "__bx_r%d" +#define STUB_ENTRY_NAME "__%s_veneer" + /* The name of the dynamic interpreter. This is put in the .interp section. */ #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1" @@ -2024,8 +2026,8 @@ static const bfd_vma arm_thumb_thumb_long_branch_stub[] = { 0x4e02b540, /* push {r6, lr} */ /* ldr r6, [pc, #8] */ - 0xe7fe46fe, /* mov lr, pc */ - /* b.n r6 */ + 0x473046fe, /* mov lr, pc */ + /* bx r6 */ 0xbf00bd40, /* pop {r6, pc} */ /* nop */ 0x00000000, /* dcd R_ARM_ABS32(X) */ @@ -2046,7 +2048,7 @@ static const bfd_vma arm_pic_long_branch_stub[] = { 0xe59fc000, /* ldr r12, [pc] */ 0xe08ff00c, /* add pc, pc, ip */ - 0x00000000, /* dcd R_ARM_ABS32(X) */ + 0x00000000, /* dcd R_ARM_REL32(X) */ }; /* Section name for stubs is the associated section name plus this @@ -2090,6 +2092,11 @@ struct elf32_arm_stub_hash_entry /* Where this stub is being called from, or, in the case of combined stub sections, the first input section in the group. */ asection *id_sec; + + /* The name for the local symbol at the start of this stub. The + stub name in the hash table has to be unique; this does not, so + it can be friendlier. */ + char *output_name; }; /* Used to build a map of a section. This is required for mixed-endian @@ -3111,32 +3118,30 @@ arm_build_one_stub (struct bfd_hash_entry *gen_entry, { case arm_stub_long_branch: _bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32), - stub_bfd, stub_sec, stub_sec->contents + 4, - stub_entry->stub_offset, sym_value, 0); + stub_bfd, stub_sec, stub_sec->contents, + stub_entry->stub_offset + 4, sym_value, 0); break; case arm_thumb_v4t_stub_long_branch: _bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32), - stub_bfd, stub_sec, stub_sec->contents + 8, - stub_entry->stub_offset, sym_value, 0); + stub_bfd, stub_sec, stub_sec->contents, + stub_entry->stub_offset + 8, sym_value, 0); break; case arm_thumb_thumb_stub_long_branch: _bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32), - stub_bfd, stub_sec, stub_sec->contents + 12, - stub_entry->stub_offset, sym_value, 0); + stub_bfd, stub_sec, stub_sec->contents, + stub_entry->stub_offset + 12, sym_value, 0); break; case arm_thumb_arm_v4t_stub_long_branch: _bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32), - stub_bfd, stub_sec, stub_sec->contents + 20, - stub_entry->stub_offset, sym_value, 0); + stub_bfd, stub_sec, stub_sec->contents, + stub_entry->stub_offset + 16, sym_value, 0); break; case arm_stub_pic_long_branch: /* We want the value relative to the address 8 bytes from the start of the stub. */ - sym_value -= stub_addr + 8; - - _bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32), - stub_bfd, stub_sec, stub_sec->contents + 8, - stub_entry->stub_offset, sym_value, 0); + _bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_REL32), + stub_bfd, stub_sec, stub_sec->contents, + stub_entry->stub_offset + 8, sym_value, 0); break; default: break; @@ -3484,6 +3489,7 @@ elf32_arm_size_stubs (bfd *output_bfd, bfd_vma sym_value; bfd_vma destination; struct elf32_arm_link_hash_entry *hash; + const char *sym_name; char *stub_name; const asection *id_sec; unsigned char st_type; @@ -3511,6 +3517,7 @@ elf32_arm_size_stubs (bfd *output_bfd, sym_value = 0; destination = 0; hash = NULL; + sym_name = NULL; if (r_indx < symtab_hdr->sh_info) { /* It's a local symbol. */ @@ -3539,6 +3546,10 @@ elf32_arm_size_stubs (bfd *output_bfd, + sym_sec->output_offset + sym_sec->output_section->vma); st_type = ELF_ST_TYPE (sym->st_info); + sym_name + = bfd_elf_string_from_elf_section (input_bfd, + symtab_hdr->sh_link, + sym->st_name); } else { @@ -3576,6 +3587,7 @@ elf32_arm_size_stubs (bfd *output_bfd, goto error_ret_free_internal; } st_type = ELF_ST_TYPE (hash->root.type); + sym_name = hash->root.root.root.string; } /* Determine what (if any) linker stub is needed. */ @@ -3614,6 +3626,33 @@ elf32_arm_size_stubs (bfd *output_bfd, stub_entry->stub_type = stub_type; stub_entry->h = hash; stub_entry->st_type = st_type; + + if (sym_name == NULL) + sym_name = "unnamed"; + stub_entry->output_name + = bfd_alloc (htab->stub_bfd, + sizeof (THUMB2ARM_GLUE_ENTRY_NAME) + + strlen (sym_name)); + if (stub_entry->output_name == NULL) + { + free (stub_name); + goto error_ret_free_internal; + } + + /* For historical reasons, use the existing names for + ARM-to-Thumb and Thumb-to-ARM stubs. */ + if (r_type == (unsigned int) R_ARM_THM_CALL + && st_type != STT_ARM_TFUNC) + sprintf (stub_entry->output_name, THUMB2ARM_GLUE_ENTRY_NAME, + sym_name); + else if (r_type == (unsigned int) R_ARM_CALL + && st_type == STT_ARM_TFUNC) + sprintf (stub_entry->output_name, ARM2THUMB_GLUE_ENTRY_NAME, + sym_name); + else + sprintf (stub_entry->output_name, STUB_ENTRY_NAME, + sym_name); + stub_changed = TRUE; } @@ -11030,12 +11069,12 @@ enum map_symbol_type }; -/* Output a single PLT mapping symbol. */ +/* Output a single mapping symbol. */ static bfd_boolean -elf32_arm_ouput_plt_map_sym (output_arch_syminfo *osi, - enum map_symbol_type type, - bfd_vma offset) +elf32_arm_output_map_sym (output_arch_syminfo *osi, + enum map_symbol_type type, + bfd_vma offset) { static const char *names[3] = {"$a", "$t", "$d"}; struct elf32_arm_link_hash_table *htab; @@ -11083,20 +11122,20 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf) addr = h->plt.offset; if (htab->symbian_p) { - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 4)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 4)) return FALSE; } else if (htab->vxworks_p) { - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 8)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr + 12)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr + 12)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 20)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 20)) return FALSE; } else @@ -11109,13 +11148,13 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf) if (thumb_refs > 0) { - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_THUMB, addr - 4)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr - 4)) return FALSE; } #ifdef FOUR_WORD_PLT - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 12)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 12)) return FALSE; #else /* A three-word PLT with no Thumb thunk contains only Arm code, @@ -11123,7 +11162,7 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf) entries with thumb thunks. */ if (thumb_refs > 0 || addr == 20) { - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; } #endif @@ -11132,6 +11171,27 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf) return TRUE; } +/* Output a single local symbol for a generated stub. */ + +static bfd_boolean +elf32_arm_output_stub_sym (output_arch_syminfo *osi, const char *name, + bfd_vma offset, bfd_vma size) +{ + struct elf32_arm_link_hash_table *htab; + Elf_Internal_Sym sym; + + htab = elf32_arm_hash_table (osi->info); + sym.st_value = osi->sec->output_section->vma + + osi->sec->output_offset + + offset; + sym.st_size = size; + sym.st_other = 0; + sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FUNC); + sym.st_shndx = osi->sec_shndx; + if (!osi->func (osi->finfo, name, &sym, osi->sec, NULL)) + return FALSE; + return TRUE; +} static bfd_boolean arm_map_one_stub (struct bfd_hash_entry *gen_entry, @@ -11142,6 +11202,7 @@ arm_map_one_stub (struct bfd_hash_entry *gen_entry, struct elf32_arm_link_hash_table *htab; asection *stub_sec; bfd_vma addr; + char *stub_name; /* Massage our args to the form they really have. */ stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry; @@ -11153,48 +11214,60 @@ arm_map_one_stub (struct bfd_hash_entry *gen_entry, stub_sec = stub_entry->stub_sec; /* Ensure this stub is attached to the current section being - processed */ + processed. */ if (stub_sec != osi->sec) return TRUE; - addr = (bfd_vma)stub_entry->stub_offset; + addr = (bfd_vma) stub_entry->stub_offset; + stub_name = stub_entry->output_name; - switch(stub_entry->stub_type) { + switch (stub_entry->stub_type) + { case arm_stub_long_branch: - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr)) + if (!elf32_arm_output_stub_sym (osi, stub_name, addr, 8)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 4)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) + return FALSE; + if (!elf32_arm_output_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)) + if (!elf32_arm_output_stub_sym (osi, stub_name, addr, 12)) + return FALSE; + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8)) + if (!elf32_arm_output_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)) + if (!elf32_arm_output_stub_sym (osi, stub_name, addr + 1, 16)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 12)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr)) + return FALSE; + if (!elf32_arm_output_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)) + if (!elf32_arm_output_stub_sym (osi, stub_name, addr + 1, 20)) + return FALSE; + if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr + 8)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr + 8)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 16)) + if (!elf32_arm_output_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)) + if (!elf32_arm_output_stub_sym (osi, stub_name, addr, 12)) + return FALSE; + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 8)) return FALSE; break; default: BFD_FAIL (); - } + } return TRUE; } @@ -11240,8 +11313,8 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, for (offset = 0; offset < htab->arm_glue_size; offset += size) { - elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, offset); - elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, offset + size - 4); + elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, offset); + elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, offset + size - 4); } } @@ -11257,8 +11330,8 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, for (offset = 0; offset < htab->thumb_glue_size; offset += size) { - elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_THUMB, offset); - elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, offset + 4); + elf32_arm_output_map_sym (&osi, ARM_MAP_THUMB, offset); + elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, offset + 4); } } @@ -11271,7 +11344,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, osi.sec_shndx = _bfd_elf_section_from_bfd_section (output_bfd, osi.sec->output_section); - elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0); + elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0); } /* Long calls stubs. */ @@ -11308,18 +11381,18 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, /* VxWorks shared libraries have no PLT header. */ if (!info->shared) { - if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0)) + if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, 12)) + if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, 12)) return FALSE; } } else if (!htab->symbian_p) { - if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0)) + if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0)) return FALSE; #ifndef FOUR_WORD_PLT - if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, 16)) + if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, 16)) return FALSE; #endif } diff --git a/gdb/testsuite/gdb.threads/manythreads.exp b/gdb/testsuite/gdb.threads/manythreads.exp index a92d049..ec8764b 100644 --- a/gdb/testsuite/gdb.threads/manythreads.exp +++ b/gdb/testsuite/gdb.threads/manythreads.exp @@ -19,6 +19,8 @@ # This file was written by Jeff Johnston. (jjohnstn@redhat.com) +exp_internal 1 + if $tracelevel then { strace $tracelevel } diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c703407..02614c7 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,17 @@ +2008-06-24 Daniel Jacobowitz <dan@codesourcery.com> + + * ld-arm/farcall-arm-arm-be8.d, ld-arm/farcall-arm-arm-pic-veneer.d, + ld-arm/farcall-arm-arm.d, ld-arm/farcall-arm-thumb-blx-pic-veneer.d, + ld-arm/farcall-arm-thumb-blx.d, ld-arm/farcall-arm-thumb-pic-veneer.d, + ld-arm/farcall-arm-thumb.d, ld-arm/farcall-group-size2.d, + ld-arm/farcall-group.d, ld-arm/farcall-mix.d, ld-arm/farcall-mix2.d, + ld-arm/farcall-thumb-arm-blx-pic-veneer.d, + ld-arm/farcall-thumb-arm-blx.d, ld-arm/farcall-thumb-arm.d, + ld-arm/farcall-thumb-thumb-blx-pic-veneer.d, + ld-arm/farcall-thumb-thumb-blx.d, ld-arm/farcall-thumb-thumb-m.d, + ld-arm/thumb2-bl-as-thumb1-bad.d, ld-arm/thumb2-bl-bad.d: Update for + stub symbols and stub corrections. + 2008-06-20 Alan Modra <amodra@bigpond.net.au> * ld-spu/ovl.d: Update. diff --git a/ld/testsuite/ld-arm/farcall-arm-arm-be8.d b/ld/testsuite/ld-arm/farcall-arm-arm-be8.d index b409517..524ce6a 100644 --- a/ld/testsuite/ld-arm/farcall-arm-arm-be8.d +++ b/ld/testsuite/ld-arm/farcall-arm-arm-be8.d @@ -2,7 +2,7 @@ Disassembly of section .text: -00001000 <_start-0x8>: +00001000 <__bar_veneer>: 1000: 04f01fe5 .* 1004: 02001020 .word 0x02001020 diff --git a/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d b/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d index 1d0af22..1fd79a7 100644 --- a/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d @@ -2,14 +2,14 @@ Disassembly of section .text: -00001000 <_start-0x10>: - 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8> +00001000 <__bar_veneer>: + 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_veneer\+0x8> 1004: e08ff00c add pc, pc, ip 1008: 02000018 .word 0x02000018 100c: 00000000 .word 0x00000000 00001010 <_start>: - 1010: ebfffffa bl 1000 <_start-0x10> + 1010: ebfffffa bl 1000 <__bar_veneer> Disassembly of section .foo: 02001020 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-arm-arm.d b/ld/testsuite/ld-arm/farcall-arm-arm.d index 3ccb2c4..e4c8ca3 100644 --- a/ld/testsuite/ld-arm/farcall-arm-arm.d +++ b/ld/testsuite/ld-arm/farcall-arm-arm.d @@ -2,12 +2,12 @@ Disassembly of section .text: -00001000 <_start-0x8>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4> +00001000 <__bar_veneer>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_veneer\+0x4> 1004: 02001020 .word 0x02001020 00001008 <_start>: - 1008: ebfffffc bl 1000 <_start-0x8> + 1008: ebfffffc bl 1000 <__bar_veneer> Disassembly of section .foo: 02001020 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d b/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d index 3ede5de..4fbba82 100644 --- a/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d @@ -2,14 +2,14 @@ Disassembly of section .text: -00001000 <_start-0x10>: - 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8> +00001000 <__bar_from_arm>: + 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_arm\+0x8> 1004: e08ff00c add pc, pc, ip 1008: 0200000d .word 0x0200000d 100c: 00000000 .word 0x00000000 00001010 <_start>: - 1010: ebfffffa bl 1000 <_start-0x10> + 1010: ebfffffa bl 1000 <__bar_from_arm> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-arm-thumb-blx.d b/ld/testsuite/ld-arm/farcall-arm-thumb-blx.d index 86aaf39..d67387c 100644 --- a/ld/testsuite/ld-arm/farcall-arm-thumb-blx.d +++ b/ld/testsuite/ld-arm/farcall-arm-thumb-blx.d @@ -2,12 +2,12 @@ Disassembly of section .text: -00001000 <_start-0x8>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4> +00001000 <__bar_from_arm>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_from_arm\+0x4> 1004: 02001015 .word 0x02001015 00001008 <_start>: - 1008: ebfffffc bl 1000 <_start-0x8> + 1008: ebfffffc bl 1000 <__bar_from_arm> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d b/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d index 3ede5de..4fbba82 100644 --- a/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d @@ -2,14 +2,14 @@ Disassembly of section .text: -00001000 <_start-0x10>: - 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8> +00001000 <__bar_from_arm>: + 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_arm\+0x8> 1004: e08ff00c add pc, pc, ip 1008: 0200000d .word 0x0200000d 100c: 00000000 .word 0x00000000 00001010 <_start>: - 1010: ebfffffa bl 1000 <_start-0x10> + 1010: ebfffffa bl 1000 <__bar_from_arm> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-arm-thumb.d b/ld/testsuite/ld-arm/farcall-arm-thumb.d index c664eff..d7519a0 100644 --- a/ld/testsuite/ld-arm/farcall-arm-thumb.d +++ b/ld/testsuite/ld-arm/farcall-arm-thumb.d @@ -2,14 +2,14 @@ Disassembly of section .text: -00001000 <_start-0x10>: - 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8> +00001000 <__bar_from_arm>: + 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_arm\+0x8> 1004: e12fff1c bx ip 1008: 02001015 .word 0x02001015 100c: 00000000 .word 0x00000000 00001010 <_start>: - 1010: ebfffffa bl 1000 <_start-0x10> + 1010: ebfffffa bl 1000 <__bar_from_arm> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-group-size2.d b/ld/testsuite/ld-arm/farcall-group-size2.d index 7367151..bab6c68 100644 --- a/ld/testsuite/ld-arm/farcall-group-size2.d +++ b/ld/testsuite/ld-arm/farcall-group-size2.d @@ -3,31 +3,35 @@ Disassembly of section .text: -00001000 <_start-0x18>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x14> +00001000 <__bar2_veneer>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar2_veneer\+0x4> 1004: 02003024 .word 0x02003024 - 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <_start-0x8> +00001008 <__bar_from_arm>: + 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8> 100c: e12fff1c bx ip 1010: 02003021 .word 0x02003021 1014: 00000000 .word 0x00000000 00001018 <_start>: - 1018: ebfffffa bl 1008 <_start-0x10> - 101c: ebfffff7 bl 1000 <_start-0x18> - 1020: e51ff004 ldr pc, \[pc, #-4\] ; 1024 <_start\+0xc> + 1018: ebfffffa bl 1008 <__bar_from_arm> + 101c: ebfffff7 bl 1000 <__bar2_veneer> +00001020 <__bar3_veneer>: + 1020: e51ff004 ldr pc, \[pc, #-4\] ; 1024 <__bar3_veneer\+0x4> 1024: 02003028 .word 0x02003028 - 1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <_start\+0x18> +00001028 <__bar5_from_arm>: + 1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <__bar5_from_arm\+0x8> 102c: e12fff1c bx ip 1030: 0200302f .word 0x0200302f - 1034: e59fc000 ldr ip, \[pc, #0\] ; 103c <_start\+0x24> +00001034 <__bar4_from_arm>: + 1034: e59fc000 ldr ip, \[pc, #0\] ; 103c <__bar4_from_arm\+0x8> 1038: e12fff1c bx ip 103c: 0200302d .word 0x0200302d ... 00001048 <myfunc>: - 1048: ebfffff4 bl 1020 <_start\+0x8> - 104c: ebfffff8 bl 1034 <_start\+0x1c> - 1050: ebfffff4 bl 1028 <_start\+0x10> + 1048: ebfffff4 bl 1020 <__bar3_veneer> + 104c: ebfffff8 bl 1034 <__bar4_from_arm> + 1050: ebfffff4 bl 1028 <__bar5_from_arm> Disassembly of section .foo: 02003020 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-group.d b/ld/testsuite/ld-arm/farcall-group.d index 813344d..95ebfb3 100644 --- a/ld/testsuite/ld-arm/farcall-group.d +++ b/ld/testsuite/ld-arm/farcall-group.d @@ -3,30 +3,34 @@ Disassembly of section .text: -00001000 <_start-0x40>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x3c> +00001000 <__bar2_veneer>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar2_veneer\+0x4> 1004: 02003024 .word 0x02003024 - 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <_start-0x30> +00001008 <__bar_from_arm>: + 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8> 100c: e12fff1c bx ip 1010: 02003021 .word 0x02003021 - 1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <_start-0x28> +00001014 <__bar3_veneer>: + 1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <__bar3_veneer\+0x4> 1018: 02003028 .word 0x02003028 - 101c: e59fc000 ldr ip, \[pc, #0\] ; 1024 <_start-0x1c> +0000101c <__bar4_from_arm>: + 101c: e59fc000 ldr ip, \[pc, #0\] ; 1024 <__bar4_from_arm\+0x8> 1020: e12fff1c bx ip 1024: 0200302d .word 0x0200302d - 1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <_start-0x10> +00001028 <__bar5_from_arm>: + 1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <__bar5_from_arm\+0x8> 102c: e12fff1c bx ip 1030: 0200302f .word 0x0200302f ... 00001040 <_start>: - 1040: ebfffff0 bl 1008 <_start-0x38> - 1044: ebffffed bl 1000 <_start-0x40> + 1040: ebfffff0 bl 1008 <__bar_from_arm> + 1044: ebffffed bl 1000 <__bar2_veneer> 00001048 <myfunc>: - 1048: ebfffff1 bl 1014 <_start-0x2c> - 104c: ebfffff2 bl 101c <_start-0x24> - 1050: ebfffff4 bl 1028 <_start-0x18> + 1048: ebfffff1 bl 1014 <__bar3_veneer> + 104c: ebfffff2 bl 101c <__bar4_from_arm> + 1050: ebfffff4 bl 1028 <__bar5_from_arm> Disassembly of section .foo: 02003020 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-mix.d b/ld/testsuite/ld-arm/farcall-mix.d index 8a00798..1880ae8 100644 --- a/ld/testsuite/ld-arm/farcall-mix.d +++ b/ld/testsuite/ld-arm/farcall-mix.d @@ -3,28 +3,32 @@ Disassembly of section .text: -00001000 <_start-0x40>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x3c> +00001000 <__bar2_veneer>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar2_veneer\+0x4> 1004: 02002024 .word 0x02002024 - 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <_start-0x30> +00001008 <__bar_from_arm>: + 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8> 100c: e12fff1c bx ip 1010: 02002021 .word 0x02002021 - 1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <_start-0x28> +00001014 <__bar3_veneer>: + 1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <__bar3_veneer\+0x4> 1018: 02002028 .word 0x02002028 - 101c: e59fc000 ldr ip, \[pc, #0\] ; 1024 <_start-0x1c> +0000101c <__bar4_from_arm>: + 101c: e59fc000 ldr ip, \[pc, #0\] ; 1024 <__bar4_from_arm\+0x8> 1020: e12fff1c bx ip 1024: 0200202d .word 0x0200202d - 1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <_start-0x10> +00001028 <__bar5_from_arm>: + 1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <__bar5_from_arm\+0x8> 102c: e12fff1c bx ip 1030: 0200202f .word 0x0200202f ... 00001040 <_start>: - 1040: ebfffff0 bl 1008 <_start-0x38> - 1044: ebffffed bl 1000 <_start-0x40> - 1048: ebfffff1 bl 1014 <_start-0x2c> - 104c: ebfffff2 bl 101c <_start-0x24> - 1050: ebfffff4 bl 1028 <_start-0x18> + 1040: ebfffff0 bl 1008 <__bar_from_arm> + 1044: ebffffed bl 1000 <__bar2_veneer> + 1048: ebfffff1 bl 1014 <__bar3_veneer> + 104c: ebfffff2 bl 101c <__bar4_from_arm> + 1050: ebfffff4 bl 1028 <__bar5_from_arm> Disassembly of section .foo: 02002020 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-mix2.d b/ld/testsuite/ld-arm/farcall-mix2.d index eb70843..0af3027 100644 --- a/ld/testsuite/ld-arm/farcall-mix2.d +++ b/ld/testsuite/ld-arm/farcall-mix2.d @@ -3,32 +3,35 @@ Disassembly of section .text: -00001000 <_start-0x18>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x14> +00001000 <__bar2_veneer>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar2_veneer\+0x4> 1004: 02003024 .word 0x02003024 - 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <_start-0x8> +00001008 <__bar_from_arm>: + 1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8> 100c: e12fff1c bx ip 1010: 02003021 .word 0x02003021 1014: 00000000 .word 0x00000000 00001018 <_start>: - 1018: ebfffffa bl 1008 <_start-0x10> - 101c: ebfffff7 bl 1000 <_start-0x18> + 1018: ebfffffa bl 1008 <__bar_from_arm> + 101c: ebfffff7 bl 1000 <__bar2_veneer> Disassembly of section .mytext: -00002000 <.mytext>: - 2000: e59fc000 ldr ip, \[pc, #0\] ; 2008 <__exidx_end\+0xfe8> +00002000 <__bar5_from_arm>: + 2000: e59fc000 ldr ip, \[pc, #0\] ; 2008 <__bar5_from_arm\+0x8> 2004: e12fff1c bx ip 2008: 0200302f .word 0x0200302f - 200c: e51ff004 ldr pc, \[pc, #-4\] ; 2010 <__exidx_end\+0xff0> +0000200c <__bar3_veneer>: + 200c: e51ff004 ldr pc, \[pc, #-4\] ; 2010 <__bar3_veneer\+0x4> 2010: 02003028 .word 0x02003028 - 2014: e59fc000 ldr ip, \[pc, #0\] ; 201c <__exidx_end\+0xffc> +00002014 <__bar4_from_arm>: + 2014: e59fc000 ldr ip, \[pc, #0\] ; 201c <__bar4_from_arm\+0x8> 2018: e12fff1c bx ip 201c: 0200302d .word 0x0200302d ... - 2028: ebfffff7 bl 200c <__exidx_end\+0xfec> - 202c: ebfffff8 bl 2014 <__exidx_end\+0xff4> - 2030: ebfffff2 bl 2000 <__exidx_end\+0xfe0> + 2028: ebfffff7 bl 200c <__bar3_veneer> + 202c: ebfffff8 bl 2014 <__bar4_from_arm> + 2030: ebfffff2 bl 2000 <__bar5_from_arm> Disassembly of section .foo: 02003020 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d b/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d index 23db877..db4df3c 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d @@ -2,14 +2,14 @@ Disassembly of section .text: -00001000 <_start-0x10>: - 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8> +00001000 <__bar_from_thumb>: + 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_thumb\+0x8> 1004: e08ff00c add pc, pc, ip 1008: 0200000c .word 0x0200000c 100c: 00000000 .word 0x00000000 00001010 <_start>: - 1010: f7ff eff6 blx 1000 <_start-0x10> + 1010: f7ff eff6 blx 1000 <__bar_from_thumb> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-thumb-arm-blx.d b/ld/testsuite/ld-arm/farcall-thumb-arm-blx.d index 7a72ed4..21cf736 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-arm-blx.d +++ b/ld/testsuite/ld-arm/farcall-thumb-arm-blx.d @@ -2,12 +2,12 @@ Disassembly of section .text: -00001000 <_start-0x8>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4> +00001000 <__bar_from_thumb>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_from_thumb\+0x4> 1004: 02001014 .word 0x02001014 00001008 <_start>: - 1008: f7ff effa blx 1000 <_start-0x8> + 1008: f7ff effa blx 1000 <__bar_from_thumb> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-thumb-arm.d b/ld/testsuite/ld-arm/farcall-thumb-arm.d index d733511..61e72be 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-arm.d +++ b/ld/testsuite/ld-arm/farcall-thumb-arm.d @@ -2,17 +2,18 @@ Disassembly of section .text: -00001000 <_start-0x18>: +00001000 <__bar_from_thumb>: 1000: b540 push {r6, lr} - 1002: 4e03 ldr r6, \[pc, #12\] \(1010 <_start-0x8>\) + 1002: 4e03 ldr r6, \[pc, #12\] \(1010 <__bar_from_thumb\+0x10>\) 1004: 46fe mov lr, pc 1006: 4730 bx r6 1008: e8bd4040 pop {r6, lr} 100c: e12fff1e bx lr - ... + 1010: 02001014 .word 0x02001014 + 1014: 00000000 .word 0x00000000 00001018 <_start>: - 1018: f7ff fff2 bl 1000 <_start-0x18> + 1018: f7ff fff2 bl 1000 <__bar_from_thumb> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d b/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d index cadb620..06107b7 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d @@ -2,14 +2,14 @@ Disassembly of section .text: -00001000 <_start-0x10>: - 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8> +00001000 <__bar_veneer>: + 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_veneer\+0x8> 1004: e08ff00c add pc, pc, ip 1008: 0200000d .word 0x0200000d 100c: 00000000 .word 0x00000000 00001010 <_start>: - 1010: f7ff eff6 blx 1000 <_start-0x10> + 1010: f7ff eff6 blx 1000 <__bar_veneer> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d b/ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d index 11280c9..f8e9836 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d +++ b/ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d @@ -2,12 +2,12 @@ Disassembly of section .text: -00001000 <_start-0x8>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4> +00001000 <__bar_veneer>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_veneer\+0x4> 1004: 02001015 .word 0x02001015 00001008 <_start>: - 1008: f7ff effa blx 1000 <_start-0x8> + 1008: f7ff effa blx 1000 <__bar_veneer> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/farcall-thumb-thumb-m.d b/ld/testsuite/ld-arm/farcall-thumb-thumb-m.d index 6415be7..2f7cdaf 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-thumb-m.d +++ b/ld/testsuite/ld-arm/farcall-thumb-thumb-m.d @@ -2,17 +2,17 @@ Disassembly of section .text: -00001000 <_start-0x10>: +00001000 <__bar_veneer>: 1000: b540 push {r6, lr} - 1002: 4e02 ldr r6, \[pc, #8\] \(100c <_start-0x4>\) + 1002: 4e02 ldr r6, \[pc, #8\] \(100c <__bar_veneer\+0xc>\) 1004: 46fe mov lr, pc - 1006: e7fe b.n 1006 <_start-0xa> + 1006: 4730 bx r6 1008: bd40 pop {r6, pc} 100a: bf00 nop 100c: 02001015 .word 0x02001015 00001010 <_start>: - 1010: f7ff fff6 bl 1000 <_start-0x10> + 1010: f7ff fff6 bl 1000 <__bar_veneer> Disassembly of section .foo: 02001014 <bar>: diff --git a/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d b/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d index 1dfca21..28d1b29 100644 --- a/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d +++ b/ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d @@ -2,12 +2,12 @@ Disassembly of section .text: -00001000 <_start-0x8>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4> +00001000 <__bar_veneer>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_veneer\+0x4> 1004: 0040100d .word 0x0040100d 00001008 <_start>: - 1008: f7ff effa blx 1000 <_start-0x8> + 1008: f7ff effa blx 1000 <__bar_veneer> Disassembly of section .foo: 0040100c <bar>: diff --git a/ld/testsuite/ld-arm/thumb2-bl-bad.d b/ld/testsuite/ld-arm/thumb2-bl-bad.d index ea38797..12674f9 100644 --- a/ld/testsuite/ld-arm/thumb2-bl-bad.d +++ b/ld/testsuite/ld-arm/thumb2-bl-bad.d @@ -2,12 +2,12 @@ Disassembly of section .text: -00001000 <_start-0x8>: - 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4> +00001000 <__bar_veneer>: + 1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_veneer\+0x4> 1004: 0100100d .word 0x0100100d 00001008 <_start>: - 1008: f7ff effa blx 1000 <_start-0x8> + 1008: f7ff effa blx 1000 <__bar_veneer> Disassembly of section .foo: 0100100c <bar>: |