summaryrefslogtreecommitdiff
path: root/bfd
Commit message (Collapse)AuthorAgeFilesLines
* Remove unnecessary _bfd_new_bfd initialisationAlan Modra2013-11-022-15/+4
| | | | | | nbfd is allocated by bfd_zmalloc. * opncls.c (_bfd_new_bfd): Don't init vars already zeroed.
* Simplify ppc64 code setting toc_off.Alan Modra2013-11-022-35/+23
| | | | | | | | | | | | | | | Every function has a nominal toc pointer value, even if it isn't used, so set toc_off for every code section to the value used in that object file. The thinking here was that if a code section didn't use the toc it could use the previous object file's toc pointer value. It can, but doing so is only a gain if functions in that section are called mostly from previous objects sharing the same toc. We lose if the functions in question are called mostly from the current object or following objects, and it's a good bet they will probably mostly be called from the current object. * elf64-ppc.c (ppc64_elf_next_input_section): Always set toc_off to value for object file.
* daily updateAlan Modra2013-11-021-1/+1
|
* *-*-nacl* layout: Drop requirement that some section have SEC_HAS_CONTENTS set.Roland McGrath2013-11-012-5/+9
| | | | | | | | bfd/ * elf-nacl.c (segment_eligible_for_headers): Drop requirement that some section have SEC_HAS_CONTENTS set. It's not set for .note.gnu.build-id, and a segment of only read-only SHT_NOBITS sections is implausible and not really supportable anyway.
* daily updateAlan Modra2013-11-011-1/+1
|
* daily updateAlan Modra2013-10-311-1/+1
|
* Replace DT_PPC_TLSOPT with DT_PPC_OPT.Alan Modra2013-10-303-6/+24
| | | | | | | | | | | | | | | | | | | | | | | This removes the DT_PPC_TLSOPT/DT_PPC64_TLSOPT dynamic tag and replaces it with DT_PPC_OPT/DT_PPC64_OPT tag to provide the same functionality and more. This isn't backwards compatible, but the TLSOPT tag hasn't been used since the tls optimisation support was never submitted to glibc. /include/elf/ * ppc.h (DT_PPC_TLSOPT): Delete. (DT_PPC_OPT, PPC_OPT_TLS): Define. * ppc64.h (DT_PPC64_TLSOPT): Delete. (DT_PPC64_OPT, PPC64_OPT_TLS, PPC64_OPT_MULTI_TOC): Define. bfd/ * elf32-ppc.c (ppc_elf_size_dynamic_sections): Use new DT_PPC_OPT tag to specify tls optimisation. * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Likewise. (ppc64_elf_finish_dynamic_sections): Specify whether multiple toc pointers are used via DT_PPC64_OPT. binutils/ * readelf.c (get_ppc_dynamic_type): Replace PPC_TLSOPT with PPC_OPT. (get_ppc64_dynamic_type): Replace PPC64_TLSOPT with PPC64_OPT.
* Support ELFv2 stack frame.Alan Modra2013-10-302-17/+32
| | | | | | | | | The toc pointer save slot changes on ELFv2 from 40(1) to 24(1). * elf64-ppc.c (STK_LR, STK_TOC, STK_LINKER): Define. (savegpr0_tail, restgpr0_tail, savefpr0_tail, restfpr0_tail) build_plt_stub, build_tls_get_addr_stub, ppc_build_one_stub, ppc64_elf_relocate_section): Use new defines.
* ELFv2 stub, plt and glink changesAlan Modra2013-10-302-119/+220
| | | | | | | | | | | | | | | | | | | An ELFv2 PLT entry is simply the address of the target function rather than three (or two) words to specify entry, toc and static chain. PLT call stubs are correspondingly simpler and need no thread safety barrier. The glink resolver stub and branch table also is simplified, a change that could be applied to ELFv1 too, but isn't as yet. * elf64-ppc.c (PLT_ENTRY_SIZE, PLT_INITIAL_ENTRY_SIZE): Add htab parameter and adjust for ELFv2. Update all uses. (PLT_CALL_STUB_SIZE): Delete. (ppc64_elf_get_synthetic_symtab): Support new glink layout. (allocate_dynrelocs): Likewise. (plt_stub_size, build_plt_stub): Adjust for ELFv2. (get_r2off): Return 0 for ELFv2 -R. (ppc_build_one_stub, ppc_size_one_stub): Adjust for ELFv2. (ppc64_elf_size_stubs): Likewise. (ppc64_elf_build_stubs): Add new ELFv2 glink.
* Add ELFv2 .localentry support.Alan Modra2013-10-302-9/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This defines the ELF symbol st_other field used to encode the number of instructions between a function "global entry" and its "local entry", and adds support related to the local entry offset. include/elf/ * ppc64.h (STO_PPC64_LOCAL_BIT, STO_PPC64_LOCAL_MASK): Define. (ppc64_decode_local_entry, ppc64_encode_local_entry): New functions. (PPC64_LOCAL_ENTRY_OFFSET, PPC64_SET_LOCAL_ENTRY_OFFSET): Define. bfd/ * elf64-ppc.c (struct ppc_stub_hash_entry): Add "other". (stub_hash_newfunc): Init new ppc_stub_hash_entry field, and one we forgot, "plt_ent". (ppc64_elf_add_symbol_hook): Check ELFv1 objects don't have st_other bits only valid in ELFv2. (ppc64_elf_merge_symbol_attribute): New function. (ppc_type_of_stub): Add local_off param to test branch range. (ppc_build_one_stub): Adjust destinations for ELFv2 locals. (ppc_size_one_stub, toc_adjusting_stub_needed): Similarly. (ppc64_elf_size_stubs): Pass local_off to ppc_type_of_stub. Set "other" field. (ppc64_elf_relocate_section): Adjust destination for ELFv2 local calls. gas/ * config/tc-ppc.c (md_pseudo_table): Add .localentry. (ppc_elf_localentry): New function. (ppc_force_relocation): Force relocs on all branches to localenty symbols. (ppc_fix_adjustable): Don't reduce such symbols to section+offset. binutils/ * readelf.c (get_ppc64_symbol_other): New function. (get_symbol_other): Use it for EM_PPC64.
* Add .abiversion related support for ELFv2Alan Modra2013-10-302-15/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Defines bits in ELF e_flags to differentiate ELFv2 objects from ELFv2, adds .abiversion directive to explicitly choose the ABI, and code to check and automatically select ABI. include/elf/ * ppc64.h (EF_PPC64_ABI): Define. bfd/ * elf64-ppc.c (abiversion, set_abiversion): New functions. (ppc64_elf_get_synthetic_symtab): Handle ELFv2 objects without .opd. (struct ppc_link_hash_table): Add opd_abi. (ppc64_elf_check_relocs): Check no .opd with ELFv2. (ppc64_elf_merge_private_bfd_data): New function. (ppc64_elf_print_private_bfd_data): New function. (ppc64_elf_tls_setup): Set htab->opd_abi. (ppc64_elf_size_dynamic_sections): Don't emit OPD related dynamic tags for ELFv2. (ppc_build_one_stub): Use R_PPC64_IRELATIVE for ELFv2 ifunc. (ppc64_elf_finish_dynamic_symbol): Likewise binutils/ * readelf.c (get_machine_flags): Display ABI version for EM_PPC64. gas/ * config/tc-ppc.c: Include elf/ppc64.h. (ppc_abiversion): New variable. (md_pseudo_table): Add .abiversion. (ppc_elf_abiversion, ppc_elf_end): New functions. * config/tc-ppc.h (md_end): Define.
* Change plt stubs to have destination in r12.Alan Modra2013-10-302-63/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change is to support the new ELFv2 ABI, which uses the value in r12 on function entry to calculate the got/toc pointer. bfd/ * elf64-ppc.c (build_plt_stub): Switch stubs to use r11 as base reg and r12 as destination. (ppc_build_one_stub): Likewise. (ppc64_elf_build_stubs): Likewise for glink. ld/testsuite/ * ld-powerpc/tls.s: Add proper .opd entry for _start. * ld-powerpc/tlstoc.s: Likewise. * ld-powerpc/relbrlt.d: Update for changed stubs. * ld-powerpc/tls.d: Update for changed stubs and _start .opd entry. * ld-powerpc/tls.g: Likewise. * ld-powerpc/tlsexe.d: Likewise. * ld-powerpc/tlsexe.g: Likewise. * ld-powerpc/tlsexe.r: Likewise. * ld-powerpc/tlsexetoc.d: Likewise. * ld-powerpc/tlsexetoc.g: Likewise. * ld-powerpc/tlsexetoc.r: Likewise. * ld-powerpc/tlsso.d: Likewise. * ld-powerpc/tlsso.g: Likewise. * ld-powerpc/tlsso.r: Likewise. * ld-powerpc/tlstoc.d: Likewise. * ld-powerpc/tlstoc.g: Likewise. * ld-powerpc/tlstocso.d: Likewise. * ld-powerpc/tlstocso.g: Likewise. * ld-powerpc/tlstocso.r: Likewise.
* Report overflow on PowerPC64 @h and @ha relocations.Alan Modra2013-10-305-32/+191
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This changes the behaviour of @h and @ha on PowerPC64 to report errors on 32-bit overflow. The motivation for this change is that on PowerPC64, most uses of @h and @ha modifiers and their corresponding relocations are to build up 32-bit offsets. We'd like to know when such offsets overflow. Only rarely do people use @h or @ha with the high 32-bit modifiers to build a 64-bit constant. Those uses will now need to use two new modifiers, @high and @higha, if the constant isn't known at assembly time. For now, we won't report overflow at assembly time.. This also fixes an error when applying some of the HIGHER and HIGHEST relocations. include/elf/ * ppc64.h (R_PPC64_ADDR16_HIGH, R_PPC64_ADDR16_HIGHA, R_PPC64_TPREL16_HIGH, R_PPC64_TPREL16_HIGHA, R_PPC64_DTPREL16_HIGH, R_PPC64_DTPREL16_HIGHA): New. (IS_PPC64_TLS_RELOC): Match new tls relocs. bfd/ * reloc.c (BFD_RELOC_PPC64_ADDR16_HIGH, BFD_RELOC_PPC64_ADDR16_HIGHA, BFD_RELOC_PPC64_TPREL16_HIGH, BFD_RELOC_PPC64_TPREL16_HIGHA, BFD_RELOC_PPC64_DTPREL16_HIGH, BFD_RELOC_PPC64_DTPREL16_HIGHA): New. * elf64-ppc.c (ppc64_elf_howto_raw): Add entries for new relocs. Make all _HA and _HI relocs report signed overflow. (ppc64_elf_reloc_type_lookup): Handle new relocs. (must_be_dyn_reloc, ppc64_elf_check_relocs): Likewise. (dec_dynrel_count, ppc64_elf_relocate_section): Likewise. (ppc64_elf_relocate_section): Don't apply 0x8000 adjust to R_PPC64_TPREL16_HIGHER, R_PPC64_TPREL16_HIGHEST, R_PPC64_DTPREL16_HIGHER, and R_PPC64_DTPREL16_HIGHEST. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. gas/ * config/tc-ppc.c (SEX16): Don't mask. (REPORT_OVERFLOW_HI): Define as zero. (ppc_elf_suffix): Support @high, @higha, @dtprel@high, @dtprel@higha, @tprel@high, and @tprel@higha modifiers. (md_assemble): Ignore X_unsigned when applying 16-bit insn fields. Add (disabled) code to check @h and @ha reloc overflow for powerpc64. Handle new relocs. (md_apply_fix): Similarly. elfcpp/ * powerpc.h (R_PPC64_ADDR16_HIGH, R_PPC64_ADDR16_HIGHA, R_PPC64_TPREL16_HIGH, R_PPC64_TPREL16_HIGHA, R_PPC64_DTPREL16_HIGH, R_PPC64_DTPREL16_HIGHA): Define. gold/ * powerpc.cc (Target_powerpc::Scan::check_non_pic): Handle new relocs. (Target_powerpc::Scan::global, local): Likewise. (Target_powerpc::Relocate::relocate): Likewise. Check for overflow on all ppc64 @h and @ha relocs.
* BFD: elf64-x86-64-nacl: Correct 9-byte nop sequence used in PLT0 entry.Roland McGrath2013-10-292-1/+6
| | | | | | bfd/ * elf64-x86-64.c (elf_x86_64_nacl_plt0_entry): Correct 9-byte nop sequence to match what the assembler generates.
* daily updateAlan Modra2013-10-301-1/+1
|
* daily updateAlan Modra2013-10-301-1/+1
|
* ld/ELF: refine fake STT_FILE symbol emissionJan Beulich2013-10-292-16/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's no real need to emit these always: They're needed only if we indeed want to emit a localized symbol. Hence defer emission until we at least did the basic early checks that would lead to no such symbol getting emitted. This in particular avoids emitting such a symbol in the majority of (if not all) "ld -r" cases. I hope my set of cross build tests caught all the test cases needing adjustment - please forgive if I missed a few. bfd/ 2013-10-29 Jan Beulich <jbeulich@suse.com> * elflink.c (struct elf_outext_info): Add field file_sym_done. (bfd_elf_final_link): Initialize new field. Move fake STT_FILE symbol emission from here ... (elf_link_output_extsym): ... to here. gas/testsuite/ 2013-10-29 Jan Beulich <jbeulich@suse.com> * gas/microblaze/relax_size.elf: Drop expectation of no longer present STT_FILE symbol. * gas/microblaze/relax_size2.elf: Likewise. ld/testsuite/ 2013-10-29 Jan Beulich <jbeulich@suse.com> * ld-cris/tls-e-tpoffcomm1.d: Drop expectation of no longer present STT_FILE symbol. * ld-mmix/bpo-18.d: Likewise. * ld-mmix/bpo-22.d: Likewise. * ld-mmix/greg-6.d: Likewise. * ld-mmix/greg-7.d: Likewise. * ld-mmix/loc4.d: Likewise. * ld-mmix/local1.d: Likewise. * ld-mmix/local3.d: Likewise. * ld-mmix/local5.d: Likewise. * ld-mmix/local7.d: Likewise. * ld-mmix/loct-1.d: Likewise. * ld-sh/sh64/abi32.xd: Likewise. * ld-sh/sh64/abi64.xd: Likewise. * ld-sh/sh64/cmpct1.xd: Likewise. * ld-sh/sh64/crange1.rd: Likewise. * ld-sh/sh64/crange2.rd: Likewise. * ld-sh/sh64/crange3-cmpct.rd: Likewise. * ld-sh/sh64/crange3-media.rd: Likewise. * ld-sh/sh64/crange3.rd: Likewise. * ld-sh/sh64/crangerel1.rd: Likewise. * ld-sh/sh64/crangerel2.rd: Likewise. * ld-sh/sh64/mix1.xd: Likewise. * ld-sh/sh64/mix2.xd: Likewise. * ld-sh/sh64/shdl32.xd: Likewise. * ld-sh/sh64/shdl64.xd: Likewise.
* PR binutils/15994Nick Clifton2013-10-251-1/+1
| | | | | | | | * dwarf2.c (lookup_address_in_line_info_table): Change return type to be the range of addresses covered by the table. (comp_unit_find_nearest_line): Likewise. (find_line): Search all CUs. Select the one that matches and covers the smallest address range.
* PR binutils/15994Nick Clifton2013-10-252-28/+76
| | | | | | | | * dwarf2.c (lookup_address_in_line_info_table): Change return type to be the range of addresses covered by the table. (comp_unit_find_nearest_line): Likewise. (find_line): Search all CUs. Select the one that matches and covers the smallest address range.
* binutils doc updateTom Tromey2013-10-251-2/+2
| | | | | | | | | | | | Here's another small patch to lay the groundwork for the git conversion. This one updates the BFD and binutils documentation for the move. bfd: * doc/bfdint.texi (BFD generated files): Mention git, not cvs. binutils: * MAINTAINERS: Mention git, not cvs. * README: Mention git, not cvs.
* daily updateAlan Modra2013-10-201-1/+1
|
* daily updateAlan Modra2013-10-191-1/+1
|
* daily updateAlan Modra2013-10-181-1/+1
|
* * elf32-cris.c (cris_elf_check_relocs): Don't assumeHans-Peter Nilsson2013-10-182-5/+15
| | | | a registered dynobj means that a .got has been created.
* daily updateAlan Modra2013-10-171-1/+1
|
* PR 16056Alan Modra2013-10-172-2/+9
| | | | | * elf.c (copy_elf_program_header): Only consider SEC_ALLOC sections when finding lowest_section.
* daily updateAlan Modra2013-10-161-1/+1
|
* daily updateAlan Modra2013-10-151-1/+1
|
* 2013-10-14 Chao-ying Fu <Chao-ying.Fu@imgtec.com>Chao-ying Fu2013-10-142-0/+57
| | | | | | | * elfxx-mips.c (mips_elf_obj_tdata): Add abi_msa_bfd. (mips_elf_merge_obj_attributes): Set abi_msa_bfd to the first object file that has a Tag_GNU_MIPS_ABI_MSA attribute. Merge Tag_GNU_MIPS_ABI_MSA attributes.
* * gen-aout.c (main): Fix formatting. Close file.Nick Clifton2013-10-144-44/+62
| | | | | | | | | | | | | | | | * emultempl/aix.em (_read_file): Close file at end of function. * gas/all/itbl-test.c (main): Close fas. * read.c (add_include_dir): Use xrealloc. * config/tc-score.c (do_macro_bcmp): Initialise inst_main. * config/tc-tic6x.c (tic6x_parse_operand): Initialise second_reg. * readelf.c (decode_arm_unwind): Initialise addr structure. (process_symbol_table): Free lengths. * srcconv.c (wr_sc): Free info. * chew.c (perform): Free next.
* daily updateAlan Modra2013-10-131-1/+1
|
* bfd/Richard Sandiford2013-10-132-75/+96
| | | | | | | | | | | | | | | | | | | | | | | | | * elfxx-mips.c (mips_use_local_got_p): New function. (mips_elf_count_got_symbols, mips_elf_calculate_relocation): Use it. (_bfd_mips_elf_check_relocs): Set pointer_equality_needed for GOT and absolute references. ld/testsuite/ * ld-mips-elf/pic-and-nonpic-6-n32.ad, ld-mips-elf/pic-and-nonpic-6-n32.dd, ld-mips-elf/pic-and-nonpic-6-n32.gd, ld-mips-elf/pic-and-nonpic-6-n32.nd, ld-mips-elf/pic-and-nonpic-6-n32.rd, ld-mips-elf/pic-and-nonpic-6-n64.ad, ld-mips-elf/pic-and-nonpic-6-n64.dd, ld-mips-elf/pic-and-nonpic-6-n64.gd, ld-mips-elf/pic-and-nonpic-6-n64.nd, ld-mips-elf/pic-and-nonpic-6-n64.rd, ld-mips-elf/pic-and-nonpic-6-o32.ad, ld-mips-elf/pic-and-nonpic-6-o32.dd, ld-mips-elf/pic-and-nonpic-6-o32.gd, ld-mips-elf/pic-and-nonpic-6-o32.nd, ld-mips-elf/pic-and-nonpic-6-o32.rd: Fix symbol value of extf4. No longer expect extf3, extf4 and extd2 to be in the global GOT.
* daily updateAlan Modra2013-10-121-1/+1
|
* daily updateAlan Modra2013-10-111-1/+1
|
* daily updateAlan Modra2013-10-101-1/+1
|
* daily updateAlan Modra2013-10-091-1/+1
|
* bfd/Roland McGrath2013-10-092-2/+7
| | | | | * elf64-alpha.c (elf64_alpha_relax_tls_get_addr): Cast switch expression to int to silence over-eager compiler warnings.
* bfd/Roland McGrath2013-10-092-2/+5
| | | | | * xcofflink.c (_bfd_xcoff_bfd_final_link): Don't touch EREL in loop that doesn't use (or initialize) it.
* bfd/Roland McGrath2013-10-092-3/+8
| | | | | * elfxx-tilegx.c (tilegx32_plt_tail_entry, tilegx32_plt_tail_entry): Move second const qualifier so it applies to the pointer.
* PR binutils/16022Nick Clifton2013-10-092-15/+19
| | | | * elf32-rx.c (rx_dump_symtab): Add missing break statements.
* * opncls.c (get_alt_debug_link_info_shim): Update type of 'len'.Tom Tromey2013-10-092-1/+5
|
* PR ld/16021Nick Clifton2013-10-092-84/+6
| | | | | * elf32-rl78.c (rl78_dump_symtab): Delete. (rl78_get_reloc): Delete.
* bfdTom Tromey2013-10-093-3/+11
| | | | | | | | | * bfd-in2.h: Rebuild. * opncls.c (bfd_get_alt_debug_link_info): Change type of buildid_len to bfd_size_type. gdb * dwarf2read.c (dwarf2_get_dwz_file): Update for type change in bfd_get_alt_debug_link_info.
* bfd/ChangeLogSergio Durigan Junior2013-10-092-17/+69
| | | | | | | | 2013-10-09 Sergio Durigan Junior <sergiodj@redhat.com> PR binutils/15993 * elf32-m32c.c (dump_symtab): Add missing "break;" statement on each "case". Reindent "switch" statements.
* daily updateAlan Modra2013-10-081-1/+1
|
* fix PR symtab/15597Tom Tromey2013-10-083-10/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch fixes gdb PR symtab/15597. The bug is that the .gnu_debugaltlink section includes the build-id of the alt file, but gdb does not use it. This patch fixes the problem by changing gdb to do what it ought to always have done: verify the build id of the file found using the filename in .gnu_debugaltlink; and if that does not match, try to find the correct debug file using the build-id and debug-file-directory. This patch touches BFD. Previously, gdb had its own code for parsing .gnu_debugaltlink; I changed it to use the BFD functions after those were introduced. However, the BFD functions are incorrect -- they assume that .gnu_debugaltlink is formatted like .gnu_debuglink. However, it it is not. Instead, it consists of a file name followed by the build-id -- no alignment, and the build-id is not a CRC. Fixing this properly is a bit of a pain. But, because separate_alt_debug_file_exists just has a FIXME for the build-id case, I did not fix it properly. Instead I introduced a hack. This leaves BFD working just as well as it did before my patch. I'm willing to do something better here but I could use some guidance as to what. It seems that the build-id code in BFD is largely punted on. FWIW gdb is the only user of bfd_get_alt_debug_link_info outside of BFD itself. I moved the build-id logic out of elfread.c and into a new file. This seemed cleanest to me. Writing a test case was a bit of a pain. I added a couple new features to the DWARF assembler to handle this. Built and regtested on x86-64 Fedora 18. * bfd-in2.h: Rebuild. * opncls.c (bfd_get_alt_debug_link_info): Add buildid_len parameter. Change type of buildid_out. Update. (get_alt_debug_link_info_shim): New function. (bfd_follow_gnu_debuglink): Use it. * Makefile.in (SFILES): Add build-id.c. (HFILES_NO_SRCDIR): Add build-id.h. * build-id.c: New file, largely from elfread.c. Modified most functions. * build-id.h: New file. * dwarf2read.c (dwarf2_get_dwz_file): Update for change to bfd_get_alt_debug_link_info. Verify dwz file's build-id. Search for dwz file using build-id. * elfread.c (build_id_bfd_get, build_id_verify) (build_id_to_debug_filename, find_separate_debug_file): Remove. * gdb.dwarf2/dwzbuildid.exp: New file. * lib/dwarf.exp (Dwarf::_section): Add "flags" and "type" parameters. (Dwarf::_defer_output): Change "section" parameter to "section_spec"; update. (Dwarf::gnu_debugaltlink, Dwarf::_note, Dwarf::build_id): New procs.
* * elf32-m68k.c (elf_m68k_size_dynamic_sections): Add DT_DEBUG alsoAndreas Schwab2013-10-082-2/+7
| | | | for PIE executables.
* daily updateAlan Modra2013-10-071-1/+1
|
* daily updateAlan Modra2013-10-061-1/+1
|
* daily updateAlan Modra2013-10-051-1/+1
|