Commit Graph

4667 Commits

Author SHA1 Message Date
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
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
Alan Modra daf220f0a7 Correct -z nocopyreloc doc
This option is misnamed.  It should probably be called -z nodynbss,
but it's too late to change now.

	* ld.texinfo (Options <-z nocopyreloc>): Rewrite.
2015-03-02 16:57:08 +10:30
Alan Modra 9028d9432c Pad only text sections at end by default
gas/
	* write.c (SUB_SEGMENT_ALIGN): Don't pad non-code sections at
	end to their alignment.
gas/testsuite/
	* gas/sparc/pcrel.d: Update for changed padding in data sections.
	* gas/sparc/pcrel64.d: Likewise.
ld/testsuite/
	* ld-sparc/gotop32.rd: Update for changed padding in data sections.
	* ld-sparc/gotop32.td: Likewise.
	* ld-sparc/gotop64.rd: Likewise.
	* ld-sparc/gotop64.td: Likewise.
	* ld-tilegx/external.s: Align .data.
	* ld-tilepro/external.s: Likewise.
2015-02-28 22:26:56 +10:30
Nick Clifton f0673d2040 Fixes a problem with the linker script parser not always handling the ! character in memort region attributes.
PR ld/17900
	* ldlang.c (lang_set_flags): Allow exclamation mark to reverse the
	sense of the following memory region attribute characters.
2015-02-27 16:19:57 +00:00
Alan Modra 330b17b30f Fix recent h8300 configury changes
* Makefile.am (ALL_EMULATION_SOURCES): Sort new h8300 entries.
	(eh8300elf_linux.c, eh8300helf_linux.c, eh8300self_linux.c,
	eh8300sxelf_linux.c): Do not invoke genscripts here.
	* Makefile.in: Regenerate.
2015-02-27 11:47:20 +10:30
Marcus Shawcroft 60d1b0d6a4 [AArch64] Add tiny DESC test cases. 2015-02-26 22:59:27 +00:00
Marcus Shawcroft b480a4819b Add tiny memory model GD test cases. 2015-02-26 22:23:09 +00:00
Marcus Shawcroft b108998791 Adding tls-tiny-ie test. 2015-02-26 22:23:09 +00:00
Terry Guo 99654aaf36 [ARM]Update for Tag_ABI_HardFP_use per EABI doc
Updated how we merge and display this attribute per the latest
EABI documents.

bfd/ChangeLog
	* elf32-arm.c (elf32_arm_merge_eabi_attributes): Update how we
	merge Tag_ABI_HardFP_use.

binutils/ChangeLog
	* readelf.c (arm_attr_tag_ABI_HardFP_use): Update how we
	display it.

ld/testsuite/ChangeLog
	* ld-arm/attr-merge-3.attr: Remove Tag_ABI_HardFP_use.
	* ld-arm/attr-merge-vfp-10.d: Likewise.
	* ld-arm/attr-merge-vfp-10r.d: Likewise.
	* ld-arm/attr-merge-vfp-12.d: Likewise.
	* ld-arm/attr-merge-vfp-12r.d: Likewise.
	* ld-arm/attr-merge-vfp-13.d: Likewise.
	* ld-arm/attr-merge-vfp-13r.d: Likewise.
	* ld-arm/attr-merge-vfp-14.d: Likewise.
	* ld-arm/attr-merge-vfp-14r.d: Likewise.
	* ld-arm/attr-merge-vfp-6.d: Likewise.
	* ld-arm/attr-merge-vfp-6r.d: Likewise.
	* ld-arm/attr-merge-vfp-7.d: Likewise.
	* ld-arm/attr-merge-vfp-7r.d: Likewise.
	* ld-arm/attr-merge-vfp-8.d: Likewise.
	* ld-arm/attr-merge-vfp-8r.d: Likewise.
2015-02-26 14:11:41 +08:00
Andrew Burgess bac13f5a4c AVR/ld: Use .avr.prop data during linker relaxation.
Make use of the data held within the .avr.prop section during linker
relaxation in order to maintain the properties of the .org and .align
directives.

In relation to the .align directives, if enough bytes are deleted before
a .align directive then the alignment can be moved while still
maintaining the alignment requirement.

bfd/ChangeLog:

	* elf32-avr.c (struct elf_avr_section_data): New structure.
	(struct avr_relax_info): New structure.
	(elf_avr_new_section_hook): New function.
	(struct elf_avr_section_data): Add relax_info.
	(get_avr_relax_info): New function.
	(init_avr_relax_info): New function.
	(elf32_avr_relax_delete_bytes): Find next property record before
	deleting bytes.  When deleting don't move bytes beyond the next
	property record.
	(avr_elf32_assign_records_to_section): New function.
	(avr_property_record_compare): New function.
	(avr_load_all_property_sections): New function.
	(elf32_avr_relax_section): Load property data.  After relaxing the
	section, move any .align directives that have enough deleted bytes
	before them.
	(bfd_elf32_new_section_hook): Define.

ld/testsuite/ChangeLog:

	* ld-avr/avr-prop-1.d: New file.
	* ld-avr/avr-prop-1.s: New file.
	* ld-avr/avr-prop-2.d: New file.
	* ld-avr/avr-prop-2.s: New file.
	* ld-avr/avr-prop-3.d: New file.
	* ld-avr/avr-prop-3.s: New file.
	* ld-avr/avr-prop-4.d: New file.
	* ld-avr/avr-prop-4.s: New file.
2015-02-25 23:19:11 +00:00
Oleg Endo ac99436572 [SH] Fix clrs, sets, pref insn arch memberships.
opcodes/
	* sh-opc.h (clrs, sets): Mark as arch_sh3_nommu_up instead of
	arch_sh_up.
	(pref): Mark as arch_sh2a_nofpu_or_sh3_nommu_up instead of
	arch_sh2a_nofpu_or_sh4_nommu_nofpu_up.

gas/testsuite/
	* gas/sh/arch/arch.exp: Replace dead code to generate expected .s files
	with ...
	* gas/sh/arch/sh-opc-gen-as.pl: ... this new script.
	* gas/sh/arch/arch_expected.txt: Regenerate.
	* gas/sh/arch/sh-dsp.s: Likewise.
	* gas/sh/arch/sh-opc-gen-as.pl: Likewise.
	* gas/sh/arch/sh.s: Likewise.
	* gas/sh/arch/sh2.s: Likewise.
	* gas/sh/arch/sh2a-nofpu-or-sh3-nommu.s: Likewise.
	* gas/sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s: Likewise.
	* gas/sh/arch/sh2a-nofpu.s: Likewise.
	* gas/sh/arch/sh2a-or-sh3e.s: Likewise.
	* gas/sh/arch/sh2a-or-sh4.s: Likewise.
	* gas/sh/arch/sh2a.s: Likewise.
	* gas/sh/arch/sh2e.s: Likewise.
	* gas/sh/arch/sh3-dsp.s: Likewise.
	* gas/sh/arch/sh3-nommu.s: Likewise.
	* gas/sh/arch/sh3.s: Likewise.
	* gas/sh/arch/sh3e.s: Likewise.
	* gas/sh/arch/sh4-nofpu.s: Likewise.
	* gas/sh/arch/sh4-nommu-nofpu.s: Likewise.
	* gas/sh/arch/sh4.s: Likewise.
	* gas/sh/arch/sh4a-nofpu.s: Likewise.
	* gas/sh/arch/sh4a.s: Likewise.
	* gas/sh/arch/sh4al-dsp.s: Likewise.

ld/testsuite/
	* ld-sh/arch/arch_expected.txt: Regenerate.
	* ld-sh/arch/sh-dsp.s: Likewise.
	* ld-sh/arch/sh.s: Likewise.
	* ld-sh/arch/sh2.s: Likewise.
	* ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s: Likewise.
	* ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s: Likewise.
	* ld-sh/arch/sh2a-nofpu.s: Likewise.
	* ld-sh/arch/sh2a-or-sh3e.s: Likewise.
	* ld-sh/arch/sh2a-or-sh4.s: Likewise.
	* ld-sh/arch/sh2a.s: Likewise.
	* ld-sh/arch/sh2e.s: Likewise.
	* ld-sh/arch/sh3-dsp.s: Likewise.
	* ld-sh/arch/sh3-nommu.s: Likewise.
	* ld-sh/arch/sh3.s: Likewise.
	* ld-sh/arch/sh3e.s: Likewise.
	* ld-sh/arch/sh4-nofpu.s: Likewise.
	* ld-sh/arch/sh4-nommu-nofpu.s: Likewise.
	* ld-sh/arch/sh4.s: Likewise.
	* ld-sh/arch/sh4a-nofpu.s: Likewise.
	* ld-sh/arch/sh4a.s: Likewise.
	* ld-sh/arch/sh4al-dsp.s: Likewise.
2015-02-25 21:26:59 +01:00
Nick Clifton 685080f210 Adds support for generating notes in V850 binaries.
bfd	* elf32-v850.c (v850_set_note): New function.  Creates a Renesas
	style note entry.
	(v850_elf_make_note_section): New function.  Creates a note
	section.
	(v850_elf_create_sections): New function.  Create a note section
	if one is not already present.
	(v850_elf_set_note): New function.  Adds a note to a bfd.
	(v850_elf_copy_private_bfd_data): New function.  Copies V850
	notes.
	(v850_elf_merge_notes): New function.  Merges V850 notes.
	(print_v850_note): New function.  Displays a V850 note.
	(v850_elf_print_notes): New function. Displays all notes attached
	to a bfd.
	(v850_elf_merge_private_bfd_data): Call v850_elf_merge_notes.
	(v850_elf_print_private_bfd_data): Call v850_elf_print_notes.
	(v850_elf_fake_sections): Set the type of the V850 note section.
	* bfd-in.h (v850_elf_create_sections): Add prototype.
	(v850_elf_set_note): Add prototype.
	* bfd-in2.h: Regenerate.

binutils* readelf.c (get_machine_flags): Remove deprecated V850 machine
	flags.
	(get_v850_section_type_name): New function.  Handles V850 special
	sections.
	(get_section_type_name): Add support for V850.
	(get_v850_elf_note_type): New function.  Returns the name of a
	V850 note.
	(print_v850_note): New function.  Prints a V850 note.
	(process_v850_notes): New function.  Prints V850 notes.
	(process_note_sections): Add support for V850.

binutils/testsute
	* binutils-all/objcopy.exp: Skip the strip-10 test for the V850.

gas	* config/tc-v850.c (soft_float): New variable.
	(v850_data_8): New variable.
	(md_show_usage): Add -msoft-float/-mhard-float.
	(md_parse_option): Likewise.
	(md_begin): Set the default value of soft_float.
	(v850_md_end): New function.  Creates a note section.
	* config/tc-v850.h (md_end): Define.
	* doc/c-v850.texi: Document -msoft-float/-mhard-float.

gas/testsuite
	* gas/elf/elf.exp: Add special version of the section2 test for
	the V850.
	* gas/elf/section2.e-v850: New file.

include/elf
	* v850.h (EF_RH850_SIMD): Delete deprecated flag.
	(EF_RH850_CACHE): Likewise.
	(EF_RH850_MMU): Likewise.
	(EF_RH850_DATA_ALIGN8): Likewise.
	(SHT_RENESAS_IOP): Fix typo in name.
	(SHT_RENESAS_INFO): Define.
	(V850_NOTE_SECNAME): Define.
	(SIZEOF_V850_NOTE): Define.
	(V850_NOTE_NAME): Define.
	(enum v850_notes): New enum.
	(NUM_V850_NOTES): Define.

ld/ChangeLog
2015-02-24  Nick Clifton  <nickc@redhat.com>

	* Makefile.am (ev850.c): Add dependency upon
	$(srcdir)/emultempl/v850elf.em.
	(ev850_rh850.c): Likewise.
	* Makefile.in: Regenerate.
	* emultempl/v850elf.em: New file.
	* emulparams/v850.sh (EXTRA_EM_FILE): Define.
	* emulparams/v850_rh850.sh (EXTRA_EM_FILE): Define.
	* scripttempl/v850.sc: Add .note.renesas section.
	* scripttempl/v850_rh850.sc: Likewise.

ld/testsuite
	* ld-elf/extract-symbol-1sec.d: Expect to fail on the V850.
2015-02-24 17:54:09 +00:00
Alan Modra 884151a7b8 Add aligned string merge test
* ld-elf/merge3.s, * ld-elf/merge3.d: New test.
2015-02-25 00:15:26 +10:30
Senthil Kumar Selvaraj cb0728165e This patch modifies the AVR linker script templates to use __<name>_REGION_LENGTH__ symbols, if provided, for setting memory region lengths, defaulting to the current constant values otherwise.
ld	* scripttempl/avr.sc: Add new user_signatures region. Define and Use
	symbols for all region lengths.
	* scripttempl/avrtiny.sc: Define and use symbols for all region lengths.

testsuite * ld-avr/region_overflow.d: New test.
	* ld-avr/region_overflow.s: Likewise.
2015-02-24 11:26:28 +00:00
Yoshinori Sato 5518c738a4 Add support for the h8300-linux target.
ld	* Makefile.am: (ALL_EMULATION_SOURCES): Add new emulations.
	* Makefile.in: Regenerate.
	* configure.tgt: Add h8300-*-linux
	* emulparams/h8300elf_linux.sh: Add new emulation.
	* emulparams/h8300helf_linux.sh: Likewise.
	* emulparams/h8300self_linux.sh: Likewise.
	* emulparams/h8300sxelf_linux.sh: Likewise.

bfd	* config.bfd: Add h8300-*-linux.
	* configure.ac: Add h8300_elf32_linux_vec.
	* configure: Regenerate.
	* elf32-h8300.c: Likewise.
	* targets.c(_bfd_target_vector): Likewise.

gas	* config/tc-h8300.c (line_separater_chars): Add a version for
	h8300-linux that includes a separator.
	(default_mach): New variable.
	(md_main): Use it.
	(md_longopts): Add '--march' option.
	(md_parse_option): Parse the new option.
	* config/tc-h8300.h (TARGET_FORMAT): Add elf32-h8300-linux.
	* configure.tgt: Add h8300-*-linux
	* doc/c-h8300.texi: Document --march.
2015-02-23 17:04:53 +00:00
Nick Clifton f971c12fc5 Fixes a problem where "ld -ixxx" would report an error of "ld: bad -rpath option".
* lexsup.c (parse_args): Produce a more reasonable error message
	when -ixxx or -rxxx is the last option on the linker command line.
2015-02-23 15:33:56 +00:00
H.J. Lu db95bb7c59 Use nm/readelf with "failif"
PR ld/4317
	* ld-i386/compressed1.d: Use nm/readelf with "failif".
	* ld-x86-64/compressed1.d: Likewise.
	* ld-x86-64/pie1.d: Likewise.
2015-02-19 04:45:27 -08:00
Alan Modra d983c8c550 Strip undefined symbols from .symtab
bfd/
	PR ld/4317
	* elflink.c (elf_link_input_bfd): Drop undefined local syms.
	(elf_link_output_extsym): Drop local and global undefined syms.
	Tidy.  Expand comment.
ld/testsuite/
	PR ld/4317
	* ld-aarch64/gc-tls-relocs.d, * ld-cris/locref2.d,
	* ld-elf/ehdr_start-weak.d, * ld-elf/group1.d,
	* ld-i386/compressed1.d, * ld-ia64/error1.d, * ld-ia64/error2.d,
	* ld-ia64/error3.d, * ld-mips-elf/pic-and-nonpic-1.nd,
	* ld-mmix/undef-3.d, * ld-powerpc/tlsexe.r, * ld-powerpc/tlsexetoc.r,
	* ld-powerpc/tlsso.r, * ld-powerpc/tlstocso.r,
	* ld-x86-64/compressed1.d, * ld-x86-64/pie1.d: Update.
2015-02-19 13:36:34 +10:30
Alan Modra 2ec55de302 Properly place the NULL STT_FILE symbol revistited
I was having a little closer look at what is going on here and noticed
that HJ unconditionally emits a NULL STT_FILE symbol before emitting
forced local symbols.  That means we really don't need a second pass
over forced local symbols.  The only reason for two passes is when
some forced local symbol can be emitted before the NULL STT_FILE.  So
I set about removing the second pass, updating the testsuite all over
again.  It's also unnecessary to emit the NULL STT_FILE when no
previous file symbol has been emitted.

bfd/
	PR ld/17975
	* elflink.c (struct elf_outext_info): Remove need_second_pass
	and second_pass.
	(elf_link_output_extsym): Delete code handling second forced
	local pass.  Move code emitting NULL STT_FILE symbol later, so
	that it can be omitted if forced local is stripped.  Don't
	emit the NULL STT_FILE if no file symbols have been output.
	(bfd_elf_final_link): Remove second forced local pass.
	* elf32-ppc.c (add_stub_sym): Set linker_def on linker syms.
	(ppc_elf_size_dynamic_sections): Likewise.
	* elf64-ppc.c (ppc_build_one_stub): Likewise.
	(build_global_entry_stubs): Likewise.
	(ppc64_elf_build_stubs): Likewise.
ld/testsuite/
	PR ld/17975
	* ld-aarch64/gc-tls-relocs.d, * ld-alpha/tlspic.rd,
	* ld-cris/libdso-2.d, * ld-i386/tlsdesc-nacl.rd, * ld-i386/tlsdesc.rd,
	* ld-i386/tlsnopic-nacl.rd, * ld-i386/tlsnopic.rd,
	* ld-i386/tlspic-nacl.rd, * ld-i386/tlspic.rd, * ld-ia64/tlspic.rd,
	* ld-powerpc/tlsexe.r, * ld-powerpc/tlsexetoc.r,
	* ld-powerpc/tlsso.r, * ld-powerpc/tlstocso.r,
	* ld-s390/tlspic.rd, * ld-s390/tlspic_64.rd,
	* ld-sparc/tlssunnopic32.rd, * ld-sparc/tlssunnopic64.rd,
	* ld-sparc/tlssunpic32.rd, * ld-sparc/tlssunpic64.rd,
	* ld-tic6x/shlib-1.rd, * ld-tic6x/shlib-1b.rd, * ld-tic6x/shlib-1r.rd,
	* ld-tic6x/shlib-1rb.rd, * ld-tic6x/shlib-noindex.rd,
	* ld-x86-64/tlsdesc-nacl.rd, * ld-x86-64/tlsdesc.rd,
	* ld-x86-64/tlspic-nacl.rd, * ld-x86-64/tlspic.rd: Update.
2015-02-18 00:31:52 +10:30
H.J. Lu 67ca0b7662 Correct a typo in ld/testsuite/ChangeLog 2015-02-16 09:07:42 -08:00
H.J. Lu 49bd1d6e87 Update more ld testcases after PR ld/17975 fix
* ld-alpha/tlspic.rd: Updated.
	* ld-powerpc/tlsexe.r: Likewise.
	* ld-powerpc/tlsexetoc.r: Likewise.
	* ld-powerpc/tlsso.r: Likewise.
	* ld-powerpc/tlstocso.r: Likewise.
	* ld-s390/tlspic.rd: Likewise.
	* ld-s390/tlspic_64.rd: Likewise.
	* ld-sparc/gotop32.dd: Likewise.
	* ld-sparc/gotop64.dd: Likewise.
	* ld-sparc/tlssunnopic32.rd: Likewise.
	* ld-sparc/tlssunnopic64.rd: Likewise.
	* ld-sparc/tlssunpic32.rd: Likewise.
	* ld-sparc/tlssunpic64.rd: Likewise.
	* ld-tic6x/shlib-1.rd: Likewise.
	* ld-tic6x/shlib-1b.rd: Likewise.
	* ld-tic6x/shlib-1r.rd: Likewise.
	* ld-tic6x/shlib-1rb.rd: Likewise.
	* ld-tic6x/shlib-noindex.rd: Likewise.
2015-02-16 08:35:17 -08:00
H.J. Lu 6dfb72b906 Add ChangeLog entries for PR ld/17975 fix 2015-02-16 07:31:46 -08:00
H.J. Lu 35f82954b5 Properly place the NULL STT_FILE symbol
We output a NULL STT_FILE symbol for forced local symbols so that they
are not associated with the STT_FILE symbol for real local symbols. This
patch makes sure that the NULL STT_FILE symbol is placed before forced
local symbols.

bfd/

	PR ld/17975
	* elflink.c (elf_link_output_extsym): Only check filesym_count
	when outputting a NULL FILE symbol.  Set second_pass_sym to
	h->forced_local && !h->root.linker_def.

ld/testsuite/

	PR ld/17975
	* ld-i386/tlsbin-nacl.rd: Likewise.
	* ld-i386/tlsbin.rd: Likewise.
	* ld-i386/tlsbindesc-nacl.rd: Likewise.
	* ld-i386/tlsbindesc.rd: Likewise.
	* ld-i386/tlsdesc-nacl.rd: Likewise.
	* ld-i386/tlsdesc.rd: Likewise.
	* ld-i386/tlsnopic-nacl.rd: Likewise.
	* ld-i386/tlsnopic.rd: Likewise.
	* ld-i386/tlspic-nacl.rd: Likewise.
	* ld-i386/tlspic.rd: Likewise.
	* ld-x86-64/tlsbin-nacl.rd: Likewise.
	* ld-x86-64/tlsbin.rd: Likewise.
	* ld-x86-64/tlsbindesc-nacl.rd: Likewise.
	* ld-x86-64/tlsbindesc.rd: Likewise.
	* ld-x86-64/tlsdesc-nacl.rd: Likewise.
	* ld-x86-64/tlsdesc.rd: Likewise.
	* ld-x86-64/tlspic-nacl.rd: Likewise.
	* ld-x86-64/tlspic.rd: Likewise.
2015-02-16 04:54:45 -08:00
H.J. Lu f58926a652 Add a testcase for PR ld/17973
ld/

	PR ld/17973
	* testplug2.c (allsymbolsread_silent): New.
	(set_register_hook): Handle allsymbolsreadsilent.
	(onall_symbols_read): Skip a message if allsymbolsread_silent is
	TRUE.

ld/testsuite/

	PR ld/17973
	* ld-plugin/plugin.exp (regassilent): New.
	Compile tmpdir/dummy.s and ld-plugin/pr17973.s.
	(plugin_tests): Add a test for PR ld/17973.
	* ld-plugin/pr17973.d: New file.
	* ld-plugin/pr17973.s: Likewise.
2015-02-14 06:26:20 -08:00
Alan Modra ce875075f9 PR ld/17973 LTO file syms
LTO output objects have an STT_FILE symbol using the name of the file,
a temporary file.  This results in executables that can't be exactly
reproduced, so the file name needs to be dropped.  We don't want to
lose all file symbols when linking a mix of lto and non-lto objects as
a file symbol can be used to figure which source file generated a
given local symbol.  So lto output objects need to be marked.

I chose to mark lto output objects with a new bfd flag.  This flag is
also used to fix a bug in the link-once handling;  An object being
loaded after "loading_lto_outputs" is set might be one extracted from
an archive to satisfy new references from lto objects, not an lto
object itself.

The new flag is copied from archive to elements, and the same done
for no_export.  This fixes a bug in that --exclude-libs doesn't work
with thin archives.  I'm not completely happy with this part of the
patch and may revist this to avoid the hack in
_bfd_look_for_bfd_in_cache.

	PR ld/17973
include/
	* bfdlink.h (struct bfd_link_info): Delete loading_lto_outputs.
bfd/
	* bfd.c (struct bfd): Add lto_output.
	* linker.c (_bfd_handle_already_linked): Explicitly test for
	objects added by the lto plugin.
	* opncls.c (_bfd_new_bfd_contained_in): Copy lto_output and
	no_export flags from archive.
	* archive.c (open_nested_file): New function, setting lto_output
	and no_export, extracted from..
	(find_nested_archive): ..here.  Flip params.  Rename from
	_bfd_find_nested_archive.
	(_bfd_get_elt_at_filepos): Correct var typo.  Use open_nested_file.
	(_bfd_look_for_bfd_in_cache): Copy no_export.
	* elflink.c (elf_link_add_object_symbols): Remove now unnecessary
	my_archive->no_export test.
	(elf_link_input_bfd): Drop existing lto_output STT_FILE syms.
	Don't use the file name when adding lto_output STT_FILE sym.
	* bfd-in2.h: Regenerate.
ld/
	* ldlang.h (struct lang_input_statement_flags): Add lto_output.
	* ldlang.c (lang_process): Don't set loading_lto_outputs.
	* ldfile.c (ldfile_try_open_bfd): Transfer entry flags.lto_output
	to bfd.
	* plugin.c (add_input_file, add_input_library): Set flags.lto_output.
2015-02-14 23:41:54 +10:30
H.J. Lu b0619670ab Mention support for LLVM plugin in NEWS
* NEWS: Mention support for LLVM plugin.
2015-02-13 07:54:21 -08:00
Alan Modra 66bc873987 Correct ld.texinfo cross reference
Fixes
warning: @pxref cross-reference name should not contain `:'

	* ld.texinfo (Options <--defsym>): Correct cross reference.
2015-02-13 13:47:28 +10:30
H.J. Lu 761e2bd479 Replace elf_i386 with elf_i386_nacl for nacl
* ld-i386/i386.exp: Replace elf_i386 with elf_i386_nacl for nacl.
2015-02-12 04:59:57 -08:00
H.J. Lu 88b9e2eb54 Add --[no-]map-whole-files for gold compatibility
Gold supports:

  --map-whole-files           Map whole files to memory (default on 64-bit hosts)
  --no-map-whole-files        Map relevant file parts to memory (default on 32-bit hosts)

This patch adds --[no-]map-whole-files command line options for gold
compatibility.  They are ignored for ld.

	* lexsup.c (ld_options): Add --[no-]map-whole-files for gold
	option compatibility.
2015-02-11 14:10:07 -08:00
H.J. Lu 45e813544e Output "warning:" or "error:" in plugin messages
When plugin generates LDPL_WARNING, LDPL_FATAL and LDPL_ERROR messages,
linker should display "warning:" or "error:" in plugin messages like
regular linker messages.

ld/

	* plugin.c (message): Output "warning:" for LDPL_WARNING. Output
	"error:" for LDPL_FATAL and LDPL_ERROR.
	* testplug2.c (parse_option): Handle fatal, error and warning.

ld/testsuite/

	* ld-plugin/plugin-27.d: New.
	* ld-plugin/plugin-28.d: Likewise.
	* ld-plugin/plugin-29.d: Likewise.
	* plugin.exp (plugin_tests): Add tests for LDPL_FATAL, LDPL_ERROR
	and LDPL_WARNING.
2015-02-11 14:00:51 -08:00
H.J. Lu e3001fd920 Remove unused dump_tv_tag
* testplug2.c (dump_tv_tag): Removed.
	(onall_symbols_read): Return LDPS_ERR if the file descriptor isn't
	closed.
	* testplug3.c (dump_tv_tag): Removed.
	(onclaim_file): Fix typo.
2015-02-11 13:35:07 -08:00
H.J. Lu 7275e869fe Add ChangeLogs for 439b7f41b 2015-02-11 05:16:40 -08:00
H.J. Lu b9dc5a8784 Add ChangeLogs for commit 5ae0078cd 2015-02-11 05:14:11 -08:00
H.J. Lu 439b7f41b5 Add tests for non-object IR file
This patch adds linker, nm and ar tests for non-object IR file, including
archive with non-object IR member.

ld/

	PR ld/17878
	* Makefile.am (noinst_LTLIBRARIES): Add libldtestplug2.la and
	libldtestplug3.la.
	(libldtestplug2_la_SOURCES): New.
	(libldtestplug2_la_CFLAGS): Likewise.
	(libldtestplug2_la_LDFLAGS): Likewise.
	(libldtestplug3_la_SOURCES): New.
	(libldtestplug3_la_CFLAGS): Likewise.
	(libldtestplug3_la_LDFLAGS): Likewise.
	* Makefile.in: Regenerated.
	* testplug2.c: New file.
	* testplug3.c: Likewise.

ld/testsuite/

	PR ld/17878
	* ld-plugin/func.c: Add some comments.
	* ld-plugin/plugin-13.d: New file.
	* ld-plugin/plugin-14.d: Likewise.
	* ld-plugin/plugin-15.d: Likewise.
	* ld-plugin/plugin-16.d: Likewise.
	* ld-plugin/plugin-17.d: Likewise.
	* ld-plugin/plugin-18.d: Likewise.
	* ld-plugin/plugin-19.d: Likewise.
	* ld-plugin/plugin-20.d: Likewise.
	* ld-plugin/plugin-21.d: Likewise.
	* ld-plugin/plugin-22.d: Likewise.
	* ld-plugin/plugin-23.d: Likewise.
	* ld-plugin/plugin-24.d: Likewise.
	* ld-plugin/plugin-25.d: Likewise.
	* ld-plugin/plugin-26.d: Likewise.
	* ld-plugin/plugin.exp (plugin2_name): New.
	(plugin3_name): Likewise.
	(plugin2_path): Likewise.
	(plugin3_path): Likewise.
	(testsrcfiles): Likewise.
	(testsrcfiles_notext): Likewise.
	(plugin_tests): Add tests for non-object IR file.
	(plugin_lib_tests): Likewise.
	(plugin_extra_elf_tests): Likewise.
	(plugin_src_tests): New tests for non-object IR file.
	Run nm --plugin test.
	Run ar --plugin test.
	Run plugin_src_tests.
2015-02-11 05:02:12 -08:00
H.J. Lu 5ae0078cd2 Merge linker plugin handling into BFD plugin support
Linker plugin_maybe_claim is the interface of linker plugin support.
This patch extracts linker plugin_maybe_claim into plugin_object_p and
makes it available to BFD via a new function:

void register_ld_plugin_object_p (const bfd_target *(*) (bfd *));

bfd_plugin_object_p calls plugin_object_p registered by linker first.  It
adds an enum bfd_plugin_format field and a pointer to plugin dummy BFD so
that plugin_object_p stores plugin dummy BFD to allow plugin_maybe_claim
to retrieve it later.

bfd/

	PR ld/17878
	* bfd.c (bfd_plugin_format): New.
	(bfd): Add plugin_format and plugin_dummy_bfd.
	* plugin.c (try_load_plugin): Take a pointer to bfd_boolean
	argument to return TRUE if any plugin is found.  Set plugin_format.
	(has_plugin): New.
	(bfd_plugin_target_p): New.
	(bfd_plugin_specified_p): Likewise.
	(bfd_plugin_target_p): Likewise.
	(register_ld_plugin_object_p): Likewise.
	(bfd_plugin_set_plugin): Set has_plugin.
	(load_plugin): Cache try_load_plugin result.
	(bfd_plugin_object_p): Try ld_plugin_object_p first.  Check
	plugin_format.
	* plugin.h (bfd_plugin_target_p): New.
	(bfd_plugin_specified_p): Likewise.
	(register_ld_plugin_object_p): Likewise.
	* bfd-in2.h: Regenerated.

ld/

	PR ld/17878
	* plugin.c: Include ../bfd/plugin.h.
	(plugin_get_ir_dummy_bfd): Call bfd_create with
	link_info.output_bfd instead of srctemplate.  Copy BFD info
	from srctemplate only if it doesn't use BFD plugin target
	vector.
	(plugin_load_plugins): Call register_ld_plugin_object_p with
	(plugin_object_p)
	(plugin_maybe_claim): Renamed to ...
	(plugin_object_p): This.  Return dummy BFD target vector if
	input is calimed by plugin library, otherwise return NULL.
	Update plugin_format and plugin_dummy_bfd.
	(plugin_maybe_claim): New.  Use plugin_object_p.

xx
2015-02-11 05:02:12 -08:00
H.J. Lu d319a098bc Initialize use_mmap
* plugin.c (plugin_maybe_claim): Initialize use_mmap.
2015-02-10 19:02:07 -08:00
H.J. Lu 386047969d Unmap the buffer if plugin didn't claim the file
If plugin didn't claim the file, unmap the buffer.

	* plugin.c (plugin_input_file_t): Add use_mmap.
	(plugin_pagesize): New.
	(get_view): Use plugin_pagesize.  Set use_mmap if mmap is used.
	(plugin_load_plugins): Initialize plugin_pagesize.
	(plugin_maybe_claim): Unmap the buffer if plugin didn't claim the
	file.
2015-02-10 17:03:59 -08:00
H.J. Lu b677c4562d Add the missing HAVE_GETPAGESIZE check in get_view 2015-02-10 05:46:38 -08:00
H.J. Lu fe9057895e Align offset passed to mmap
Offset passed to mmap must be a multiple of the page size.  This patch
aligns offset passed to mmap.

	* plugin.c (get_view): Align offset passed to mmap.
2015-02-10 05:30:56 -08:00
H.J. Lu 1d5b29cfe4 Don't bfd_check_format if not needed
When plugin isn't active or there is no thing more to claim, we don't
need to call bfd_check_format.

	* ldfile.c (ldfile_try_open_bfd): Don't call bfd_check_format
	if plugin isn't active or there is no thing more to claim.
2015-02-08 15:00:34 -08:00
H.J. Lu e13419c472 Check format against bfd_object directly
There is no need to call bfd_check_format.  We should just check format
against bfd_object directly.

	* plugin.c (plugin_maybe_claim): Check format against bfd_object
	directly.
2015-02-08 08:45:23 -08:00
H.J. Lu 9384389406 Replace entry->the_bfd with ibfd
* plugin.c (plugin_maybe_claim): Replace entry->the_bfd with
	ibfd.
2015-02-07 12:50:17 -08:00
H.J. Lu 35a1e5f305 Update plugin_maybe_claim
This patch removes the argument of pointer to struct ld_plugin_input_file.
This is the first step to extract a plugin_object_p out of
plugin_maybe_claim for BFD.

	* plugin.c: Include "libbfd.h".
	(plugin_strdup): New.
	(plugin_maybe_claim): Remove the argument of pointer to struct
	ld_plugin_input_file.  Open and handle input entry.
	* plugin.h (plugin_maybe_claim): Updated.
	* ldfile.c (ldfile_try_open_bfd): Call plugin_maybe_claim directly
	without passing a pointer to struct ld_plugin_input_file.
	* ldmain.c: Don't include "libbfd.h".
	(add_archive_element): Call plugin_maybe_claim directly without
	passing a pointer to struct ld_plugin_input_file.
2015-02-07 11:01:22 -08:00
H.J. Lu 1952c5cd7d Issue relocation in RO section warning for -z text
This patch changes linker to issue a warning for relocation in readonly
section for -z text.

bfd/

	PR ld/17935
	* elf32-i386.c (elf_i386_readonly_dynrelocs): Also issue a
	warning for relocation in readonly section for -z text.
	(elf_i386_size_dynamic_sections): Likewise.
	* elf64-x86-64.c (elf_x86_64_readonly_dynrelocs): Likewise.
	(elf_x86_64_size_dynamic_sections): Likewise.

ld/testsuite/

	PR ld/17935
	* ld-i386/i386.exp: Run pr17935-1 and pr17935-2.
	* ld-x86-64/x86-64.exp: Likewise.

	* ld-i386/pr17935-1.d: New file.
	* ld-i386/pr17935-1.s: Likewise.
	* ld-i386/pr17935-2.d: Likewise.
	* ld-i386/pr17935-2.s: Likewise.
	* ld-x86-64/pr17935-1.d: Likewise.
	* ld-x86-64/pr17935-1.s: Likewise.
	* ld-x86-64/pr17935-2.d: Likewise.
	* ld-x86-64/pr17935-2.s: Likewise.
2015-02-07 05:28:06 -08:00
H.J. Lu 8dfef1bd76 Document -z text, -z notext and -z textoff
* ld.texinfo: Document -z text, -z notext and -z textoff.
	* emultempl/elf32.em (gld${EMULATION_NAME}_list_options): Add
	-z text, -z notext and -z textoff.
2015-02-06 10:01:35 -08:00
H.J. Lu 2aec968d4d Use mmap and cache the view buffer for get_view
This patch uses mmap if it is available and works.  It also caches the
view buffer for get_view.

	* configure.ac: Add AC_FUNC_MMAP.
	* config.in: Regenerated.
	* configure: Likewise.
	* plugin.c: Include <sys/mman.h>.
	(MAP_FAILED): New.  Defined if not defined.
	(PROT_READ): Likewise.
	(MAP_PRIVATE): Likewise.
	(view_buffer_t): New.
	(plugin_input_file_t): Add view_buffer.
	(get_view): Try mmap and cache the view buffer.
	(plugin_maybe_claim): Initialize view_buffer.
2015-02-06 09:05:57 -08:00
H.J. Lu 9e2dec4710 Properly mark the plugin symbol undefined
Mark the unused plugin defined symbol in elf_link_input_bfd instead of
_bfd_elf_fix_symbol_flags.  Limit the PR ld/12365 test to x86 targets.

bfd/

	PR ld/12365
	PR ld/14272
	* elflink.c (_bfd_elf_fix_symbol_flags): Revert the last change.
	(elf_link_input_bfd): Mark the plugin symbol undefined if it is
	referenced from a non-IR file.

ld/testsuite/

	PR ld/12365
	PR ld/14272
	* ld-plugin/lto.exp: Run the PR ld/12365 test only for x86 targets.
	* ld-plugin/plugin-7.d: Updated.
	* ld-plugin/plugin-8.d: Likewise.
2015-02-06 04:29:35 -08:00
H.J. Lu 119d62ffb8 Close fd only if fd != -1
This patch closes fd only if fd != -1.

	* plugin.c (release_input_file): Set fd to -1 after closing it.
	(plugin_maybe_claim): Close fd only if fd != -1.
2015-02-05 16:57:09 -08:00
H.J. Lu f4b78d1898 Add plugin_input_file_t
This patchs adds plugin_input_file_t to implement get_input_file, get_view
and release_input_file.  The maximum memeory overhead per IR input file
are about 40 bytes for plugin_input_file_t plus the memory to store input
IR filename.  According to

http://gcc.gnu.org/wiki/whopr/driver

RELEASE_INPUT_FILE: Function pointer to the linker interface that
releases a file descriptor for a claimed input file. The plug-in library
must call this interface for each file descriptor obtained by the "get
input file" interface. It must release all such file descriptors before
returning from the WPA phase.

However, GCC plug-in library doesn't use the "get input file" interface.
It processed the IR input in the claim file handler.  Since the the file
descriptor opened for the IR input was unused after the claim file
handler returns and GCC plug-in library before GCC 5 doesn't call the
RELEASE_INPUT_FILE function pointer, ld closed the file descriptor to
avoid leaking file descriptor.  But this approach doesn't work with
other plug-in libraries which uses the "get input file", "get view" and
"release input file" interfaces.  To avoid file descriptor leak with
GCC prior to GCC 5 and support other plug-in libraries at the same time,
we close the file descriptor only if the input IR file is a bfd_object
file.  This scheme doesn't work when a plug-in library needs the file
descriptor and its IR is stored in bfd_object file.

	PR ld/17878
	* plugin.c: Include <errno.h>.
	(errno): New.  Declare if needed.
	(plugin_input_file_t): New.
	(get_input_file): Implemented.
	(get_view): Likewise.
	(release_input_file): Likewise.
	(add_symbols): Updated.
	(get_symbols): Likewise.
	(plugin_maybe_claim): Allocate a plugin_input_file_t.  Close fd
	only for a bfd_object input.
2015-02-05 05:03:07 -08:00