Commit Graph

6712 Commits

Author SHA1 Message Date
H.J. Lu 8d00121477 Don't write the zlib header if not used
No need to write the zlib header if compression didn't make the section
smaller.

	PR binutils/18087
	* compress.c (bfd_compress_section_contents): Don't write the
	zlib header and set contents as well as compress_status if
	compression didn't make the section smaller.
	(bfd_init_section_compress_status): Don't check compression
	size here.
2015-03-24 13:27:52 -07:00
Nick Clifton fc42baf3cd Fixes a bug introduced by the new ranges checks on COFF symbol tables.
PR binutils/17512
	* coffgen.c (coff_get_normalized_symtab): Fix test for out of
	range auxillary sections.
2015-03-24 17:20:00 +00:00
Marcus Shawcroft fc6d53be18 [AArch64] Factor out _bfd_aarch64_get_stub_for_link_section. 2015-03-24 14:10:43 +00:00
Marcus Shawcroft 30068a6d2d [AArch64] Refactor section_group[] representation.
Change the behaviour of section_group[] such that .stub_sec points to
the stub section attached to the indexed section rather than the stub
section attached to the link_section pointed to be the index section.

This provides a mechanism to get to the stub section following any
input section.  While still allowing the section grouping mechanism to
find the section group stub section associated with an input section
by first following the link_sec pointer.
2015-03-24 14:10:43 +00:00
Marcus Shawcroft 5421cc6e55 [AArch64] Refactor generation of 835769 workaround stubs.
This patch recognizes that we only need to perform one scan for the
835769 errata and that this scan can take place before we insert
branch stubs.  The erratum scan code is relocated and adjusted to
create stub entries directly rather than populating an intermediate
representation.  Since stub entries are created immediately we can
drop the adhoc stub size adjustment code and allow the generic stub
sizing code to deal with 835769 stub entries.

This patch restructures the code but does not change the workaround
used to deal with erratum 83679, the exact placement of workaround
stubs in the final image may change slightly after this patch due to
stubs being created in a different order.
2015-03-24 12:03:46 +00:00
Marcus Shawcroft e572930b96 [AArch64] Use _bfd_aarch64_add_stub_entry_in_group.
Adjust the 835769 workaround code to use
_bfd_aarch64_add_stub_entry_in_group rather than inspect the
underlying section_group structure directly.
2015-03-24 12:03:39 +00:00
Alan Modra 8131c12209 Make powerpc bfd ld reloc overflow vs undefined symbols match gold
* elf64-ppc.c (ppc64_elf_relocate_section): Report overflow to
	stubs, even those for undefined weak symbols.  Otherwise, don't
	report relocation overflow on branches to undefined strong
	symbols.  Fix memory leak.
	* elf32-ppc.c (ppc_elf_relocate_section): Don't report relocation
	overflow on branches to undefined strong symbols.
2015-03-24 17:42:36 +10:30
Keith Seitz c53ed7cf57 [OBV] Fix build -- missing ';'
bfd/ChangeLog

	* elfnn-aarch64.c (_bfd_aarch64_create_or_find_stub_sec): Add
	missing ';'.
2015-03-23 11:47:26 -07:00
Marcus Shawcroft 94a75bde2f Adding Changelog for previous commit. 2015-03-23 16:56:29 +00:00
Marcus Shawcroft 13f622ec59 [AArch64] Factor out _bfd_aarch64_resize_stubs() 2015-03-23 16:14:05 +00:00
Marcus Shawcroft 6658567565 [AArch64] Factor stub creation code into _bfd_aarch64_create_stub_section. 2015-03-23 16:06:55 +00:00
Marcus Shawcroft ef85752125 [AArch64] Factor out common behaviour between elf_aarch64_create_or_find_stub_sec and elfNN_aarch64_add_stub 2015-03-23 15:52:03 +00:00
Marcus Shawcroft 2144188dcf [AArch64] Flip sense of erratum_835769_scan. 2015-03-23 15:44:08 +00:00
Marcus Shawcroft 4c77202d00 [AArch64] Drop unused argument to elf_aarch64_create_or_find_stub_sec 2015-03-23 15:20:30 +00:00
Marcus Shawcroft 9b9971aac7 [AArch64] Remove unused variable. 2015-03-23 15:20:30 +00:00
Marcus Shawcroft 23956543da Fixup previous changelog entry. 2015-03-23 15:11:45 +00:00
Marcus Shawcroft e2cdef47b7 Remove dead code. 2015-03-23 14:46:04 +00:00
Marcus Shawcroft 3d14faea41 [AArch64] Tidy up in aarch64_mem_op_p(). 2015-03-23 14:45:37 +00:00
Marcus Shawcroft f872121a87 [AArch64] Adjust layout of elfNN_aarch64_write_section. 2015-03-23 14:35:28 +00:00
Nick Clifton 1740ba0cec Add support for G13 and G14 flag bits in RL78 ELF binaries.
inc	* rl78.h (E_FLAG_RL78_G10): Redefine.
	(E_FLAG_RL78_CPU_MASK, E_FLAG_RL78_ANY_CPU, E_FLAG_RL78_G13
	E_FLAG_RL78_G14): New flags.

bin	* readelf.c (get_machine_flags): Decode RL78's G13 and G14 flags.

gas	* config/tc-rl78.c (enum options): Add G13 and G14.
	(md_longopts): Add -mg13 and -mg14.
	(md_parse_option): Handle -mg13 and -mg14.
	(md_show_usage): List -mg13 and -mg14.
	* doc/c-rl78.texi: Add description of -mg13 and -mg14 options.

bfd	* elf32-rl78.c (rl78_cpu_name): New function.  Prints the name of
	the RL78 core based upon the flags.
	(rl78_elf_merge_private_bfd_data): Handle merging of G13 and G14
	flags.
	(rl78_elf_print_private_bfd_data): Use rl78_cpu_name.
	(elf32_rl78_machine): Always return bfd_mach_rl78.
2015-03-19 15:37:43 +00:00
Nick Clifton e2575e05e7 Fix building and testing dwarf debug section compression feature when zlib is not available.
PR gas/18087
gas/test	* gas/i386/dw2-compress-1.d: Allow the test to pass regardless of
	whether the .debug_info section was compressed on not.

bfd	* compress.c (bfd_compress_section_contents): Do not define this
	function if it is not used.
2015-03-19 12:14:56 +00:00
H.J. Lu 0b0732e13a Make bfd_compress_section_contents static
* compress.c (bfd_compress_section_contents): Make it static.
	* bfd/bfd-in2.h: Regenerated.
2015-03-18 11:20:06 -07:00
Nick Clifton 27aaeda0cd Fixes a problem generating relocs for import libraries created by Microsoft tools for the x85_64 architecture.
PR ld/16598
	* peicode.h (pe_ILF_build_a_bfd): Add support for creating relocs
	suitable for the AMD64.
2015-03-18 16:19:59 +00:00
Jon Turney 273a49858f Fix debug section compression so that it is only performed if it would make the section smaller.
PR binutils/18087
gas	* doc/as.texinfo: Note that when gas compresses debug sections the
	compression is only performed if it makes the section smaller.
	* write.c (compress_debug): Do not compress a debug section if
	doing so would make it larger.

tests	* gas/i386/dw2-compress-1.d: Do not expect the .debug_abbrev or
	.debug_info sections to be compressed.

binu	* doc/binutils.texi: Note that when objcopy compresses debug
	sections the compression is only performed if it makes the section
	smaller.

bfd	* coffgen.c (make_a_section_from_file): Only prepend a z to a
	debug section's name if the section was actually compressed.
	* elf.c (_bfd_elf_make_section_from_shdr): Likewise.
	* compress.c (bfd_init_section_compress_status): Do not compress
	the section if doing so would make it bigger.  In such cases leave
	the section alone and return COMPRESS_SECTION_NONE.
2015-03-18 15:47:13 +00:00
Alan Modra c4b0b099b8 Fix elf64-ppc.c electric fence warning
* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Return count of 0
	on nothing to do, before malloc of returned symbol array.
2015-03-17 13:41:01 +10:30
Nick Clifton 9c761a5541 Fixes a problem with the RX port trying to perform linker relaxation when -no-keep-memory has been enabled.
* elf32-rx.c (elf32_rx_relax_delete_bytes): If the relocs are not
	stored in the elf_section_data structure then load them as
	necessary.
2015-03-16 11:14:07 +00:00
Andreas Krebbel b9005ba76e S/390: Disable relocation sort against code sections.
When downgrading from GD to IE model we rewrite the call to
__tls_get_offset to a 64 bit load instruction. This relies on the fact
that the additional relocation for the call target has already been
executed when doing the rewrite.

   f1018:       e3 20 d0 00 00 04       lg      %r2,0(%r13)
   f101e:       c0 e5 00 00 00 00       brasl   %r14,f101e <__res_init+0x1e>
                        f101e: R_390_TLS_GDCALL __libc_resp
                        f1020: R_390_PLT32DBL   __tls_get_offset+0x2

0000000f1020  39f6c00000014 R_390_PLT32DBL    0000000000000000 __tls_get_offset + 2
0000000f101e  3afb700000026 R_390_TLS_GDCALL  0000000000000008 __libc_resp + 0

Due to the reloc sorting the order changed an the PLT32DBL reloc is
executed after the rewrite and overwrites part of the load instruction
with garbage.

bfd/
2015-03-14  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* elf-s390-common.c (elf_s390_elf_sort_relocs_p): Don't sort
	relocs against code sections.
	* elf32-s390.c: Define elf_backend_sort_relocs_p.
	* elf64-s390.c: Likewise.
2015-03-14 11:45:05 +01:00
Alan Modra 1079403cc0 Fix ppc32 synthetic symbols when __tls_get_addr_opt stub is generated
Also update the 32-bit tls testcases to be secure plt.

bfd/
	* elf32-ppc.c (ppc_elf_get_synthetic_symtab): Examine stubs in
	reverse order.  Account for larger size of __tls_get_addr_opt stub.
ld/testsuite/
	* ld-powerpc/tls32.s: Add GOT pointer setup.
	* ld-powerpc/tls32.d: Update.
	* ld-powerpc/tls32.g: Update.
	* ld-powerpc/tls32.t: Update.
	* ld-powerpc/tlsexe.d: Update.
	* ld-powerpc/tlsexe32.d: Update.
	* ld-powerpc/tlsexe32.g: Update.
	* ld-powerpc/tlsexe32.r: Update.
	* ld-powerpc/tlsexetoc.d: Update.
	* ld-powerpc/tlsso32.d: Update.
	* ld-powerpc/tlsso32.g: Update.
	* ld-powerpc/tlsso32.r: Update.
2015-03-11 18:04:25 +10:30
Jiong Wang a5721eddd1 [ARM] PR ld/16572: Remove EF_ARM_HASENTRY flag
bfd/
2015-03-10  Yuri Gribov  <y.gribov@samsung.arm>

	PR ld/16572
	* elf32-arm.c (elf32_arm_final_link_relocate): Remove
	support for ELF_ARM_HASENTRY.
	(elf32_arm_print_private_bfd_data): Likewise.

binutils/
2015-03-10  Yuri Gribov  <y.gribov@samsung.arm>

	PR ld/16572
	* readelf.c: Remove support for ELF_ARM_HASENTRY.

include/
2015-03-10  Matthew Wahab  <matthew.wahab@arm.com>

	PR ld/16572
	* elf/arm.h (EF_ARM_HASENTRY): Remove.
2015-03-10 11:15:13 +00:00
Nick Clifton 65164438aa Fix an undefined 32-bit right shift by replacing it with two 16-bit right shifts.
PR binutils/17765
	* elflink.c (put_value): Like previous delta, but for the 32-bit
	case.
2015-03-06 09:46:15 +00:00
Nick Clifton 41cd1ad1b9 Fix a potentially undefined right shift by replacing it with two smaller right shifts.
PR binutils/17765
	* elflink.c (put_value): Avoid using an undefined shift
	operation.
2015-03-05 17:26:10 +00:00
H.J. Lu ca3fe95e46 Add extern_protected_data and set it for x86
With copy relocation, address of protected data defined in the shared
library may be external.  This patch adds extern_protected_data and
changes _bfd_elf_symbol_refs_local_p to return false for protected data
if extern_protected_data is true.

bfd/

	PR ld/pr15228
	PR ld/pr17709
	* elf-bfd.h (elf_backend_data): Add extern_protected_data.
	* elf32-i386.c (elf_backend_extern_protected_data): New.
	Defined to 1.
	* elf64-x86-64.c (elf_backend_extern_protected_data): Likewise.
	* elflink.c (_bfd_elf_adjust_dynamic_copy): Don't error on
	copy relocs against protected symbols if extern_protected_data
	is true.
	(_bfd_elf_symbol_refs_local_p): Don't return true on protected
	non-function symbols if extern_protected_data is true.
	* elfxx-target.h (elf_backend_extern_protected_data): New.
	Default to 0.
	(elfNN_bed): Initialize extern_protected_data with
	elf_backend_extern_protected_data.

ld/testsuite/

	PR ld/pr15228
	PR ld/pr17709
	* ld-i386/i386.exp (i386tests): Add a test for PR ld/17709.
	* ld-i386/pr17709-nacl.rd: New file.
	* ld-i386/pr17709.rd: Likewise.
	* ld-i386/pr17709a.s: Likewise.
	* ld-i386/pr17709b.s: Likewise.
	* ld-i386/protected3.d: Updated.
	* ld-i386/protected3.s: Likewise.
	* ld-x86-64/pr17709-nacl.rd: New file.
	* ld-x86-64/pr17709.rd: Likewise.
	* ld-x86-64/pr17709a.s: Likewise.
	* ld-x86-64/pr17709b.s: Likewise.
	* ld-x86-64/protected3.d: Updated.
	* ld-x86-64/protected3.s: Likewise.
	* ld-x86-64/x86-64.exp (x86_64tests): Add a test for PR ld/17709.
2015-03-05 06:34:53 -08:00
Nick Clifton 425bd9e1bb Allows the binutils to cope with PE binaries where the section addresses have been changed, but the DWARF debug info has not been altered.
PR binutils/18025
	* coffgen.c (coff_find_nearest_line_with_names): If the dwarf2
	lookup fails, check for an address bias in the dwarf info, and if
	one exists, retry the lookup with the biased value.
	* dwarf2.c (_bfd_dwarf2_find_symbol_bias): New function.
	Determines if a bias exists bewteen the addresses of functions
	based on DWARF information vs symbol table information.
	* libbfd-in.h (_bfd_dwarf2_find_symbol_bias): Prototype.
	* libbfd.h: Regenerate.
2015-03-05 12:14:26 +00:00
Marcus Shawcroft 8ef229f32b [AArch64] Removing unused functions.
Removing a group of unused functions from the AArch64 BFD backend.
2015-03-04 12:30:34 +00:00
Marcus Shawcroft 8e2fe09f70 [AArch64] Call abort() consistently in unhandled stub switch statements.
Ensure we hard stop via abort() for unhandled stub types rather than
continuing either silently (or noisly with a BFD_FAIL()).

Call abort() giving a hard stop rather than BFD_FAIL () for unhandled
stub types.
2015-03-04 12:30:32 +00:00
Andreas Arnez df88b70224 S390: Place "s390:31-bit" after default arch in 64-bit arch list
On 64-bit platforms GDB did not include "s390:31-bit" in its list of
architecture names.  This patch fixes that.

To determine the list of architecture names for S390,
gdbarch_printable_names() walks through the linked list of BFD arches
starting with the default S390 arch, which is "s390:64-bit" on 64-bit
platforms.  But since "s390:64-bit" was at the end of that list, the
31-bit architecture was not reached.  The patch swaps the elements of
that list on 64-bit platforms.

bfd/ChangeLog:

	* cpu-s390.c (N): New macro.
	(bfd_s390_31_arch): New.  Define only if default target word size
	is 64 bits.  Otherwise define...
	(bfd_390_64_arch): ...this.  Make static.
	(bfd_s390_arch): Define according to the default target word size.
	Let the 'next' field point to the alternate arch.
2015-03-04 10:40:39 +01:00
Richard Sandiford e09ab7ac78 Allow MOVK for R_AARCH64_TLSLE_MOVW_TPREL_G{0,1}NC
bfd/
	PR gas/17843
	* elfxx-aarch64.c (_bfd_aarch64_elf_put_addend): Expect
	R_AARCH64_TLSLE_MOVW_TPREL_G0_NC and R_AARCH64_TLSLE_MOVW_TPREL_G1_NC
	to be used with MOVK rather than MOVZ.

gas/
	PR gas/17843
	* config/tc-aarch64.c (process_movw_reloc_info): Allow
	R_AARCH64_TLSLE_MOVW_TPREL_G0_NC and R_AARCH64_TLSLE_MOVW_TPREL_G1_NC
	for MOVK.

gas/testsuite/
	PR gas/17843
	* gas/aarch64/tls.s, gas/aarch64/tls.d: Add test for
	R_AARCH64_TLSLE_MOVW_TPREL_G0/R_AARCH64_TLSLE_MOVW_TPREL_G1_NC
	sequence.

ld/testsuite/
	PR gas/17843
	* ld-aarch64/tlsle.s, ld-aarch64/tlsle.d: New test.
	* ld-aarch64/aarch64-elf.exp: Run it.
2015-03-04 09:09:05 +00:00
DJ Delorie 71eef2bd8d RL78 - fix ADDR16 relax
* elf32-rl78.c (rl78_elf_relax_section): Only relax ADDR16's if
there's a symbol.
2015-03-03 17:57:39 -05:00
Alan Modra f01f1741df Tweak ppc32 tls_get_addr optimisation
This patch is cosmetic.  It prevents references to __tls_get_addr_opt
(an alias for __tls_get_addr) when the optimisation isn't possible.

	* elf32-ppc.c (ppc_elf_tls_setup): Set no_tls_get_addr_opt if
	not PLT_NEW.
2015-02-28 13:09:11 +10:30
H.J. Lu c1d11331c9 Convert mov to lea only if needed
We can convert mov to lea only if there are R_386_GOT32/R_X86_64_GOTPCREL
relocations against non IFUNC symbols.

	* elf32-i386.c (need_convert_mov_to_lea): New.
	(elf_i386_check_relocs): Set need_convert_mov_to_lea if needed.
	(elf_i386_convert_mov_to_lea): Return TRUE if
	need_convert_mov_to_lea is unset.
	* elf64-x86-64.c (need_convert_mov_to_lea): New.
	(elf_x86_64_check_relocs): Set need_convert_mov_to_lea if needed.
	(elf_x86_64_convert_mov_to_lea): Return TRUE if
	need_convert_mov_to_lea is unset.
2015-02-27 11:35:37 -08:00
Nick Clifton cdb602b175 Fixes a problem recognizing libraries created by Visual Studio.
PR binutils/17910
	* coffgen.c (_bfd_coff_internal_syment_name): Only check for
	string length overflow when the string table length is actually
	set.
2015-02-27 15:40:49 +00:00
Marcus Shawcroft 96c20bc18d Regenerate bfd-in2.h and libbfd.h 2015-02-27 12:25:03 +00:00
Marcus Shawcroft 73920eed1d Adjust ChangeLog entry. 2015-02-27 08:09:23 +00:00
Marcus Shawcroft 1ada945d05 [AArch64] Add support for :tlsdesc: and TLSDESC_LD_PREL19 2015-02-26 22:59:23 +00:00
Marcus Shawcroft 389b8029b6 [AArch64] Add support for :tlsdesc: and TLSDESC_ADR_PREL21 2015-02-26 22:59:16 +00:00
Marcus Shawcroft 3c12b05436 Add ADR :tlsgd: directive and TLSGD_ADR_PREL21 support. 2015-02-26 22:23:09 +00:00
Marcus Shawcroft 043bf05a3d Adding support for TLSIE_LD_GOTTREL_PREL19. 2015-02-26 22:23:09 +00:00
Marcus Shawcroft 7366006f66 Fix field size for TLSDESC_CALL
This relocation is a marker and does not result in a modification to
the binary.  Changing the HOWTO bit field width to reflect this
property.
2015-02-26 22:23:08 +00:00
Marcus Shawcroft 07875fbce7 Fix field size for TLSLE_MOVW_TPREL_* relocations.
The HOWTO table entries for the TLSLE_MOVW_TPREL_* relocations are
wrong by inspection.  The current implementation does not actually use
these field widths for these relocations but they should be corrected.
2015-02-26 22:23:08 +00:00
Marcus Shawcroft 49d8f92c6e Fix TLSIE_MOVW_GOTTPREL_G0_NC field size. 2015-02-26 22:23:08 +00:00