aboutsummaryrefslogtreecommitdiff
path: root/bfd
AgeCommit message (Collapse)AuthorFilesLines
2015-09-16Fix slowdown in ld -r for most common case of out-of-order relocsAlan Modra2-15/+58
I chose insertion sort since relocs are mostly sorted, but there is a common case we can handle better; A run of relocs put out of order due to not linking input files in order. PR 18867 * elflink.c (elf_link_adjust_relocs): Modify insertion sort to insert a run. Return status in case of malloc failure. Adjust callers.
2015-09-16Automatic date update in version.inGDB Administrator1-1/+1
2015-09-15xtensa: generate PLT entries for call0 ABIMax Filippov2-7/+20
2015-09-15 Max Filippov <jcmvbkbc@gmail.com> bfd/ * elf32-xtensa.c (elf_xtensa_be_plt_entry) (elf_xtensa_le_plt_entry): Emit 'entry' instruction only for windowed ABI. (elf_xtensa_create_plt_entry): Generate 'l32r' offsets and fix up instructions according to ABI.
2015-09-15Automatic date update in version.inGDB Administrator1-1/+1
2015-09-15Fix the SH behavior for EF_SH_PIC flag in FDPIC ABIRich Felker2-2/+8
Fix it so that it's compatible with the kernel and other FDPIC targets. * elf32-sh.c (sh_elf_relocate_section): Set EF_SH_PIC flag instead of clearing it on cross-section relocations. (sh_elf_merge_private_data): Clear EF_SH_PIC flag by default.
2015-09-14Automatic date update in version.inGDB Administrator1-1/+1
2015-09-13Automatic date update in version.inGDB Administrator1-1/+1
2015-09-12Set .plt entry size to 0 in elf32-hppa.cJohn David Anglin2-3/+10
2015-09-12Automatic date update in version.inGDB Administrator1-1/+1
2015-09-11Automatic date update in version.inGDB Administrator1-1/+1
2015-09-10Automatic date update in version.inGDB Administrator1-1/+1
2015-09-09[AArch64] Sort IS_AARCH64_TLS_RELAX_RELOC in alphabetic orderJiong Wang2-8/+12
This can also speedup the check as TLSDESC is the default model for global/local dynamic that the big "||" check can finish more quickly than putting them at the bottom. 2015-09-09 Jiong. Wang <jiong.wang@arm.com> bfd/ * elfnn-aarch64.c (IS_AARCH64_TLS_RELAX_RELOC): Sort alphabetically.
2015-09-09[AArch64] Relax TLS local dynamic traditional into local executableJiong Wang2-0/+60
The linker relaxation logic will be: Code sequence I (tiny): 0x00 adr x0, :tlsldm:x 0x04 bl __tls_get_addr | V 0x00 mrs x0, tpidr_el0 0x04 add x0, x0, TCB_SIZE Code sequence II (small): 0x00 adrp a0, :tlsldm:x 0x04 add a0, #:tlsldm_lo12:x 0x08 bl __tls_get_addr | V 0x00 mrs x0, tpidr_el0 0x04 add x0, x0, TCB_SIZE 0x08 nop 2015-09-09 Jiong Wang <jiong.wang@arm.com> bfd/ * elfnn-aarch64.c (aarch64_tls_transition_without_check): Support three TLS local dynamic traditional relocations types. (elfNN_aarch64_tls_relax): Support TLS local dynamic traditional to local executable relaxation. ld/testsuite/ * ld-aarch64/tls-relax-ld-le-tiny.s: New testcase. * ld-aarch64/tls-relax-ld-le-small.s: Likewise. * ld-aarch64/tls-relax-ld-le-tiny.d: New expectation file. * ld-aarch64/tls-relax-ld-le-small.d: Likewise. * ld-aarch64/aarch64-elf.exp: Run new testcases.
2015-09-09Automatic date update in version.inGDB Administrator1-1/+1
2015-09-08Automatic date update in version.inGDB Administrator1-1/+1
2015-09-07Automatic date update in version.inGDB Administrator1-1/+1
2015-09-06Automatic date update in version.inGDB Administrator1-1/+1
2015-09-05Automatic date update in version.inGDB Administrator1-1/+1
2015-09-04Automatic date update in version.inGDB Administrator1-1/+1
2015-09-03Remove convert_mov_to_leaH.J. Lu2-32/+26
* elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Remove convert_mov_to_lea.
2015-09-03Automatic date update in version.inGDB Administrator1-1/+1
2015-09-02Rename R_386_irelative to R_386_ext2H.J. Lu2-6/+14
* elf32-i386.c (R_386_irelative): Renamed to ... (R_386_ext2): This. (R_386_vt_offset): Updated. (elf_i386_rtype_to_howto): Likewise. (elf_i386_relocate_section): Likewise.
2015-09-02Automatic date update in version.inGDB Administrator1-1/+1
2015-09-01Skip PLT for function pointer initializationH.J. Lu3-17/+150
We use its PLT entry to initialize function pointer at run-time. If there is no other usage for the PLT entry, we can generate run-time function pointer relocations in read-write section, which can be resolved by dynamic linker, to initialize function pointers. It avoids the extra indirect branch overhead in PLT. bfd/ PR ld/18900 * elf32-i386.c (elf_i386_link_hash_entry): Add func_pointer_refcount. (elf_i386_link_hash_newfunc): Clear func_pointer_refcount. (elf_i386_get_local_sym_hash): Likewise. (elf_i386_copy_indirect_symbol): Also copy func_pointer_refcount. (elf_i386_check_relocs): Increment func_pointer_refcount. (elf_i386_gc_sweep_hook): Decrement func_pointer_refcount. (elf_i386_allocate_dynrelocs): Don't create the PLT entry if there are only function pointer relocations which can be resolved at run-time. Keep dynanamic relocations for run-time function pointer initialization. (elf_i386_relocate_section): Copy dynamic function pointer relocations. * elf64-x86-64.c (elf_x86_64_link_hash_entry): Add func_pointer_refcount. (elf_x86_64_link_hash_newfunc): Clear func_pointer_refcount. (elf_x86_64_get_local_sym_hash): Likewise. (elf_x86_64_copy_indirect_symbol): Also copy func_pointer_refcount. (elf_x86_64_check_relocs): Increment func_pointer_refcount. (elf_x86_64_gc_sweep_hook): Decrement func_pointer_refcount. (elf_x86_64_allocate_dynrelocs): Don't create the PLT entry if there are only function pointer relocations which can be resolved at run-time. Keep dynanamic relocations for run-time function pointer initialization. (elf_x86_64_relocate_section): Copy dynamic function pointer relocations. ld/testsuite/ PR ld/18900 * ld-i386/i386.exp: Run tests for PR ld/18900. * ld-x86-64/x86-64.exp: Likewise. * ld-i386/pr18900.out: New file. * ld-i386/pr18900a.c: Likewise. * ld-i386/pr18900a.c: Likewise. * ld-i386/pr18900a.rd: Likewise. * ld-i386/pr18900b.c: Likewise. * ld-i386/pr18900b.rd: Likewise. * ld-i386/pr18900c.c: Likewise. * ld-x86-64/pr18900.out: Likewise. * ld-x86-64/pr18900a.c: Likewise. * ld-x86-64/pr18900a.rd: Likewise. * ld-x86-64/pr18900b.c: Likewise. * ld-x86-64/pr18900b.rd: Likewise. * ld-x86-64/pr18900c.c: Likewise. * ld-x86-64/mpx3.dd: Updated.
2015-09-01Wrong function reported for linker error messageAlan Modra2-1/+22
OPD lookup goes awry when .opd has been shuffled to remove unused functions. * elf64-ppc.c (ppc64_elf_maybe_function_sym): Adjust symbol value if .opd section has been edited.
2015-09-01ppc64 out-of-line register save/restore functionsAlan Modra2-49/+171
Don't emit long branch or plt branch stubs to save/restore functions. Copy them instead. The problem is that plt branch stubs currently trash r12, one of the parameters to some of the save/restore functions, and there is no free register available to use instead of r12. 6f20ed8a is prerequisite for this patch. PR 18878 * elf64-ppc.c (ARRAY_SIZE): Define. Use throughout. (enum ppc_stub_type): Add ppc_stub_save_res. (struct map_stub): Add "next" and "needs_save_res". (struct ppc_link_hash_entry): Add "save_res" flag. (struct ppc_link_hash_table): Add "group". (sfpr_define): Add stub_sec param. Define symbol in stub_sec if stub_sec is non-null. Set "save_res". (save_res_funcs): Make file scope, rename from funcs. Adjust uses. (ppc64_elf_adjust_dynamic_symbol): Prohibit plt call to save_res syms. (ppc_build_one_stub): Handle ppc_stub_save_res. (ppc_size_one_stub): Set stub type to ppc_size_one_stub on finding stub for linker defined save_res sym. (group_sections): Init new fields of struct map_stub. (ppc64_elf_size_stubs): Reserve space for save/restore func copy. (ppc64_elf_build_stubs): Copy save/restore funcs to groups. Emit alias syms too. (ppc64_elf_relocate_section): Set destination for ppc_stub_save_res.
2015-09-01Automatic date update in version.inGDB Administrator1-1/+1
2015-08-31Optimise PowerPC64 r2 adjusting stubsAlan Modra2-12/+28
Sometimes these stubs don't need to change the low 16-bits of r2, so in that case omit a useless addi r2,r2,0 insn. Also, change the get_r2off error return from 0 to -1 since 0 is a valid return for ELFv2 -R objects. * elf64-ppc.c (get_r2off): Return -1 on error. (ppc_build_one_stub): Adjust for get_r2off change. Don't emit addi r2,r2,0 on r2off stubs when the low 16-bit delta is zero. (ppc_size_one_stub): Corresponding size changes for r2off stubs. Add condition in test for -R objects.
2015-08-31ppc64 section group handlingAlan Modra4-176/+192
Two organizational changes to the array of additional info kept for sections. 1) Move group info into a per-group allocated struct, in preparation for future changes that need per-group accounting. 2) Expand the array to include output sections, which simplifies sizing and removes the need for a separate output section array. * section.c (section_id): Make file scope. (bfd_get_next_section_id): New function. * elf64-ppc.c (struct map_stub): Remove toc_off field. Move decl. (struct ppc_stub_hash_entry): Delete stub_sec and id_sec. Add group. Update all uses. (struct ppc_link_hash_table): Delete top_id, top_index, and input_list. Add sec_info_arr_size. Rename stub_group to sec_info, and make group info indirect. Update stub_group refs throughout file. (ppc_add_stub): Don't look for stub_sec on link_sec stub_group entry. (ppc_build_one_stub): Delete FIXME. (ppc64_elf_setup_section_lists): Size htab->sec_info for all sections, not just input sections. Don't create htab->input_list. (ppc64_elf_next_input_section): Update to use sec_info union as list pointer. (PREV_SEC): Delete. (group_sections): Pass "info" param rather than "htab". Iterate over output sections rather than input_list. Use sec_info union as list pointers. Alloc atruct map_stub, and return fail status. * bfd-in2.h: Regenerate.
2015-08-31More "Make asection->id and asection->index unsigned"Alan Modra4-5/+13
Fixes regressions introduced by 7292b3ac. * elflink.c (elf_sort_symbol): Use correctly sized type for calculating signed section->id difference. (elf_link_add_object_symbols): Likewise. * pef.c (bfd_pef_scan_start_address): Warning fix. * vms-alpha.c (vms_new_section_hook): Likewise.
2015-08-31NDS32 build fixesAlan Modra2-5/+13
* elf32-nds32.c (nds32_convert_32_to_16_alu1): Warning fix. (find_relocs_at_address_addr): Make "reloc_type" an enum. (nds32_elf_relax_delete_blanks): Warning fix. (nds32_elf_relax_loadstore): Correct loop bound.
2015-08-31Make asection->id and asection->index unsignedAlan Modra14-28/+46
These int vars are really unsigned, so make them so. * section.c (struct bfd_section): Make "id" and "index" unsigned. * coff-rs6000.c (_bfd_xcoff_sizeof_headers): Adjust local var to suit. * elf.c (elf_map_symbols): Likewise. * elf64-ppc.c (sym_exists_at): Make "id" param unsigned. (struct ppc_link_hash_table): Make "top_id" and "top_index" unsigned. (ppc64_elf_setup_section_lists): Ditto for local vars. * elf32-arm.c: Similarly to elf64-ppc.c. * elf32-avr.c: Likewise. * elf32-hppa.c: Likewise. * elf32-m68hc1x.c: Likewise. * elf32-metag.c: Likewise. * elf32-nios2.c: Likewise. * elfnn-aarch64.c: Likewise. * simple.c (struct saved_offsets): Make "section_count" unsigned. * bfd-in2.h: Regenerate.
2015-08-31Automatic date update in version.inGDB Administrator1-1/+1
2015-08-30Automatic date update in version.inGDB Administrator1-1/+1
2015-08-29Automatic date update in version.inGDB Administrator1-1/+1
2015-08-28Automatic date update in version.inGDB Administrator1-1/+1
2015-08-27Add missing pr referenceAlan Modra1-0/+1
2015-08-27Don't sort ld -r output relocs on alphaAlan Modra2-0/+19
LITERAL/LITUSE relocs must be kept together. * elf64-alpha.c (elf64_alpha_sort_relocs_p): New function. (elf_backend_sort_relocs_p): Define.
2015-08-27Automatic date update in version.inGDB Administrator1-1/+1
2015-08-26Use stable sort for ld -r relocsAlan Modra2-72/+86
A number of targets emit multiple relocs at a given r_offset, and depend on those relocs staying in their original order. PR 18867 * elflink.c (cmp_ext32l_r_offset, cmp_ext32b_r_offset): Delete. (cmp_ext64l_r_offset, cmp_ext64b_r_offset): Delete. (ext32l_r_offset, ext32b_r_offset, ext64l_r_offset, ext64b_r_offset): New functions. (elf_link_adjust_relocs): Use an insertion sort to sort relocs.
2015-08-26Select MIPS ABi based upon abiflags rather than e_flags.Matthew Fortune2-201/+206
bfd PR ld/18401 * elfxx-mips.c (bfd_mips_isa_ext_mach): New function: Converts an ISA value to a bfd machine number. (bfd_mips_isa_ext): Update the ISA level and revision if necessary. Use mips_mach_extends_p to decide if the ISA extension needs to be set. (_bfd_mips_elf_merge_private_bfd_data): Allow the ISA extension to be inferred from the ABI setting. Set the ISA level from the maximum of the incoming and outgoing ISA levels. tests * ld-mips-elf/mips-elf-flags.exp: Add more ISA conflict tests.
2015-08-26Automatic date update in version.inGDB Administrator1-1/+1
2015-08-25Replace assertions with warning messages about ELF binaries containing ↵Nick Clifton2-2/+24
multiple symbol tables. PR binutils/18854 * elf.c (bfd_section_from_shdr): Replace assertions with warnings about multiple symbol tables.
2015-08-25[AArch64] Fix a typo in the comment for BFD_RELOC_AARCH64_LD64_GOT_LO12_NCRenlin Li3-2/+8
2015-08-25 Renlin Li <renlin.li@arm.com> bfd/ * reloc.c (BFD_RELOC_AARCH64_LD64_GOTOFF_LO15): Use LP64 instead of ILP64. * bfd-in2.h: Regenerate.
2015-08-25Automatic date update in version.inGDB Administrator1-1/+1
2015-08-24Automatic date update in version.inGDB Administrator1-1/+1
2015-08-23Automatic date update in version.inGDB Administrator1-1/+1
2015-08-22Uninitialized vd_nodenameAlan Modra2-1/+7
Belt and braces fix. Either of the changes here is sufficient to ensure vd_nodename is initialized properly. * elf.c (_bfd_elf_slurp_version_tables): Always init vd_nodename. Don't copy fields not set by _bfd_elf_swap_verdef_in.
2015-08-22Automatic date update in version.inGDB Administrator1-1/+1
2015-08-21Automatic date update in version.inGDB Administrator1-1/+1