Commit graph

11957 commits

Author SHA1 Message Date
GDB Administrator
fb4048adf7 Automatic date update in version.in 2015-05-12 00:00:07 +00:00
H.J. Lu
bf64a9511f Add Intel MCU support to bfd
bfd/

	* Makefile.am (ALL_MACHINES): Add cpu-iamcu.lo.
	(ALL_MACHINES_CFILES): Likewise.
	* archures.c (bfd_mach_iamcu): New.
	(bfd_mach_i386_iamcu): Likewise.
	(bfd_mach_i386_iamcu_intel_syntax): Likewise.
	(bfd_iamcu_arch): Likewise.
	(bfd_archures_list): Add &bfd_iamcu_arch.
	* config.bfd (targ_selvecs): Add iamcu_elf32_vec to
	i386_elf32_vec.
	(targ_archs): Add bfd_iamcu_arch if needed.
	* configure.ac: Support iamcu_elf32_vec.
	* cpu-iamcu.c: New file.
	* elf32-i386.c (elf32_iamcu_elf_object_p): New function.
	Add support for iamcu_elf32_vec and elf32_iamcu_bed.
	* targets.c (iamcu_elf32_vec): New.
	(_bfd_target_vector): Add iamcu_elf32_vec.
	* Makefile.in: Regenerated.
	* bfd-in2.h: Likewise.
	* configure: Likewise.

binutils/testsuite/

	* binutils-all/objdump.exp (cpus_expected): Append iamcu.
2015-05-11 10:31:00 -07:00
H.J. Lu
22abe5566a Rename EM_486 to EM_IAMCU
bfd/

	* elfcode.h (elf_object_p): Replace EM_486 with EM_IAMCU.

binutils/

	* dwarf.c (init_dwarf_regnames): Replace EM_486 with EM_IAMCU.
	* readelf.c (guess_is_rela): Likewise.
	(dump_relocations): Likewise.
	(get_machine_name): Likewise.
	(get_elf_section_flags): Likewise.
	(process_section_headers): Likewise.
	(is_32bit_abs_reloc): Likewise.
	(is_32bit_pcrel_reloc): Likewise.

include/elf/

	* common.h (EM_486): Renamed to ...
	(EM_IAMCU): This.
2015-05-11 08:53:05 -07:00
GDB Administrator
415158ef39 Automatic date update in version.in 2015-05-11 00:00:08 +00:00
H.J. Lu
4b71eec627 Replace input_bfd and output_bfd with abfd
The first argument to bfd_get_8/bfd_put_8 isn't used.  But we should
use something real.  Replace input_bfd and output_bfd with abfd.

	* elf32-i386.c (elf_i386_convert_mov_to_lea): Replace input_bfd
	and output_bfd with abfd.
	* elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Likewise.
2015-05-10 06:44:12 -07:00
GDB Administrator
10a52f094e Automatic date update in version.in 2015-05-10 00:00:08 +00:00
GDB Administrator
504374b503 Automatic date update in version.in 2015-05-09 00:00:08 +00:00
GDB Administrator
7a261c91c8 Automatic date update in version.in 2015-05-08 00:00:08 +00:00
GDB Administrator
187032dbb8 Automatic date update in version.in 2015-05-07 00:00:08 +00:00
Toni Spets
9ac47a43ff Skip discarded resource sections when building a PE resource table.
PR ld/18372
	* peXXigen.c (rsrc_process_section): Skip discarded resource
	sections.
2015-05-06 14:18:34 +01:00
GDB Administrator
03bbcd1c7a Automatic date update in version.in 2015-05-06 00:00:09 +00:00
GDB Administrator
e1765cdae2 Automatic date update in version.in 2015-05-05 00:00:07 +00:00
GDB Administrator
44b3de870e Automatic date update in version.in 2015-05-04 00:00:08 +00:00
GDB Administrator
01a97082d0 Automatic date update in version.in 2015-05-03 00:00:07 +00:00
GDB Administrator
0138c3463d Automatic date update in version.in 2015-05-02 00:00:08 +00:00
H.J. Lu
b633b7258d Support ix86-*-elf*
bfd/

	* config.bfd: Support i[3-7]86-*-elf*.

gas/

	* configure.tgt: Support i386-*-elf*.
2015-05-01 05:02:30 -07:00
GDB Administrator
d6ad735147 Automatic date update in version.in 2015-05-01 00:00:08 +00:00
Nick Clifton
153a27763c Fix handling of relocs for the MeP target.
bfd	PR 18317
	* elf32-mep.c (MEPREL): Use bfd_elf_generic_reloc instead of
	mep_reloc.
	(mep_reloc): Delete unused function.

bin	* readelf.c (get_machine_flags): Add description of MeP flags.

tests	* binutils-all/objdump.exp (cpus_expected): Add MeP CPU names.
2015-04-30 15:57:41 +01:00
H.J. Lu
914082d11b Undef elf_backend_post_process_headers for Solaris
* elf32-i386.c (elf_backend_post_process_headers): Undef for
	Solaris 2.
2015-04-30 06:52:34 -07:00
GDB Administrator
97bf273d5d Automatic date update in version.in 2015-04-30 00:00:08 +00:00
Nick Clifton
a93d5cb197 Add support for absolute PE/x86 relocations.
PR 17099
	* coff-i386.c (coff_i386_rtype_to_howto): Allow absolute PCRLONG
	relocs.
2015-04-29 12:26:46 +01:00
GDB Administrator
521f2feb98 Automatic date update in version.in 2015-04-29 00:00:08 +00:00
GDB Administrator
d84f2dd325 Automatic date update in version.in 2015-04-28 00:00:08 +00:00
Andreas Krebbel
643f7afb0d S/390: z13 use GNU attribute to indicate vector ABI
bfd/
	* elf-s390-common.c (elf_s390_merge_obj_attributes): New function.
	* elf32-s390.c (elf32_s390_merge_private_bfd_data): Call
	elf_s390_merge_obj_attributes.
	* elf64-s390.c (elf64_s390_merge_private_bfd_data): New function.

binutils/
	* readelf.c (display_s390_gnu_attribute): New function.
	(process_s390_specific): New function.
	(process_arch_specific): Call process_s390_specific.

gas/
	* doc/as.texinfo: Document Tag_GNU_S390_ABI_Vector.

include/elf/
	* s390.h: Define Tag_GNU_S390_ABI_Vector.
2015-04-27 10:32:23 +02:00
GDB Administrator
4b9bfa2be0 Automatic date update in version.in 2015-04-27 00:00:07 +00:00
GDB Administrator
36cca014bb Automatic date update in version.in 2015-04-26 00:00:07 +00:00
GDB Administrator
e0f80dc193 Automatic date update in version.in 2015-04-25 00:00:07 +00:00
Jiong Wang
b53b1bedbd [AArch64] PR18270, fix handling of GOT entry for local symbol
2015-04-24  Jiong. Wang  <jiong.wang@arm.com>

bfd/
  PR ld/18270
  * elfnn-aarch64.c (elfNN_aarch64_size_dynamic): Count local symbol for
  GOT_NORMAL for both sgot/srelgot section.
  (elfNN_aarch64_final_link_relocate): Relocate against GOT entry address
  and generate necessary runtime relocation for GOT entry.
2015-04-24 23:25:28 +01:00
H.J. Lu
69b52ab8c5 Copy is_linker_input to archive member
We must copy is_linker_input to archive member.

	PR binutils/18209
	* archive.c (_bfd_get_elt_at_filepos): Also copy is_linker_input.
2015-04-24 15:03:21 -07:00
Jiong Wang
dcbd20eb14 [AArch64] Improve PC-relative relocation check for shared library
2015-04-24  Jiong. Wang  <jiong.wang@arm.com>

bfd/
  * elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Reject
  PC-relative relocation for external symbol.

ld/testsuite/
  * ld-aarch64/pcrel.s: New testcase.
  * ld-aarch64/pcrel_pic_defiend_local.d: New expect file.
  * ld-aarch64/pcrel_pic_undefined.d: Ditto.
  * ld-aarch64/aarch64-elf.exp: Run them.
2015-04-24 22:35:04 +01:00
Nick Clifton
de13ef81f0 Fix compile time warning messages about variables being used before they are initialised.
PR 18313
bin	* ieee.c (ieee_read_cxx_class): Initialise the varargs variable.
	* readelf.c (uncompress_section_contents): Zero initialise the
	zstream structure.

bfd	* compress.c (decompress_contents): Zero initialse the z_stream
	structure.
2015-04-24 17:13:22 +01:00
Nick Clifton
b1fa9dd630 Extend test for local labels to include fake symbols and local labels with a numeric suffix.
* elf.c (_bfd_elf_is_local_label_name): Extend test for assembler
	local labels to include local labels with a numeric suffix and
	fake symbols.
2015-04-24 15:17:13 +01:00
H.J. Lu
9361e6307b Define SEC_MEP_VLIW in bfd/section.c
Bits in section flags should only be defined in bfd/section.c.  This
patch moves SEC_MEP_VLIW to bfd/section.c.

bfd/

	PR binutils/18316
	* section.c (SEC_MEP_VLIW): New.
	* bfd-in2.h: Regenerated.

include/elf/

	PR binutils/18316
	* mep.h (SEC_MEP_VLIW): Removed.
2015-04-24 05:40:23 -07:00
GDB Administrator
ef1f8ff8cd Automatic date update in version.in 2015-04-24 00:00:07 +00:00
H.J. Lu
3e19fb8f99 Delay setting up compressed debug section names
When we set up st_name for output section name in elf_fake_sections, we
don't know if the compressed DWARF debug section will be smaller. We may
end up with compressed DWARF debug sections which are bigger than the
uncompressed ones.  This patch delays setting up st_name for output DWARF
debug section to _bfd_elf_assign_file_positions_for_non_load which will
compress the output debug section.  We also postpone placement of shstrtab
section after DWARF debug sections have been compressed.  The net effect
is .shstrtab section is now placed after .symtab and .strtab sections.

bfd/

	PR ld/18277
	* compress.c (bfd_compress_section_contents): Remove the
	write_compress argument.
	(bfd_init_section_compress_status): Updated.
	(bfd_compress_section): Likewise.
	* elf.c (_bfd_elf_set_reloc_sh_name): New.
	(_bfd_elf_init_reloc_shdr): Add delay_st_name_p.  Set sh_name
	to (unsigned int) -1 if delay_st_name_p is TRUE.  Use
	_bfd_elf_set_reloc_sh_name.
	(elf_fake_sections): Don't rename DWARF debug section for
	linker output if it will be compressed.  Instead, set
	delay_st_name_p to TRUE and pass it to _bfd_elf_init_reloc_shdr.
	(assign_section_numbers): Call _bfd_elf_strtab_addref only if
	sh_name != (unsigned int) -1.  Don't finalize nor assign
	shstrtab section here.  Delay setting output section names to
	_bfd_elf_write_object_contents.
	(_bfd_elf_compute_section_file_positions): Update comments on
	sh_offset for shstrtab section.
	(assign_file_positions_for_non_load_sections): Set sh_offset to
	-1 for shstrtab section.
	(assign_file_positions_except_relocs): Likewise.
	(_bfd_elf_assign_file_positions_for_non_load): Set up sh_name
	when compressing DWARF debug sections.  Place shstrtab section
	after DWARF debug sections have been compressed.
	(_bfd_elf_write_object_contents): Setting sh_name for output
	sections.

ld/testsuite/

	PR ld/18277
	* ld-elf/compressed1d.d: New.
	* ld-elf/compressed1e.d: Likewise.
2015-04-23 16:37:56 -07:00
H.J. Lu
f6fe1ccd62 Don't change compressed input debug section names
Change compressed input debug section name for objdump is very confusing.
But we need to change it for linker so that linker will consider the
input section as a debug section.  This patch delays section rename to
elf_fake_sections for objcopy and avoids it for objdump.

bfd/

	PR binutils/18209
	* bfd.c (bfd): Add is_linker_input.
	* elf.c (convert_debug_to_zdebug): New.
	(convert_zdebug_to_debug): Likewise.
	(_bfd_elf_make_section_from_shdr): Don't convert .debug_* to
	.zdebug_* here.  Use convert_zdebug_to_debug.  Set SEC_ELF_RENAME.
	(_bfd_elf_init_reloc_shdr): Pass a pointer to section name
	instead of a pointer to section.
	(elf_fake_sections): Rename the section name if SEC_ELF_RENAME
	is set.
	* section.c (SEC_ELF_RENAME): New.
	* bfd-in2.h: Regenerated.

binutils/

	PR binutils/18209
	* objcopy.c (setup_section): Copy compress status.

binutils/testsuite/

	PR binutils/18209
	* binutils-all/compress.exp: Replace dw2-3.W with dw2-3gabi.W
	on zlib-gabi output.
	* binutils-all/dw2-1.W: Convert section names to .zdebug_*.
	* binutils-all/dw2-3.W: Likewise.
	* binutils-all/objdump.W: Likewise.
	* binutils-all/dw2-3gabi.W: New file.

ld/

	PR binutils/18209
	* ldfile.c (ldfile_try_open_bfd): Set is_linker_input to 1.
2015-04-23 07:59:59 -07:00
Alan Modra
a27e685fa0 Align .TOC. for PowerPC64
This change, with prerequisite 0e5fabeb, provides a toc base aligned
to 256 bytes rather than 8 bytes.  This is necessary for a minor gcc
optimisation, allowing use of d-form instructions to correctly access
toc-relative items larger than 8 bytes.

bfd/
	* elf64-ppc.c (TOC_BASE_ALIGN): Define.
	(ppc64_elf_next_toc_section): Align multi-got toc base.
	(ppc64_elf_set_toc): Likewise initial toc base and .TOC. symbol.
ld/
	* emulparams/elf64ppc.sh (GOT): Align.
ld/testsuite/
	* ld-powerpc/ambiguousv1b.d: Update for aligned .got.
	* ld-powerpc/defsym.d: Likewise.
	* ld-powerpc/elfv2-2exe.d: Likewise.
	* ld-powerpc/elfv2exe.d: Likewise.
	* ld-powerpc/elfv2so.d: Likewise.
	* ld-powerpc/relbrlt.d: Likewise.
	* 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.g: Likewise.
	* ld-powerpc/tlstocso.d: Likewise.
	* ld-powerpc/tlstocso.g: Likewise.
	* ld-powerpc/tlstocso.r: Likewise.
	* ld-powerpc/tocopt.d: Likewise.
	* ld-powerpc/tocopt2.d: Likewise.
	* ld-powerpc/tocopt3.d: Likewise.
	* ld-powerpc/tocopt4.d: Likewise.
	* ld-powerpc/tocopt5.d: Likewise.
2015-04-23 09:49:19 +09:30
GDB Administrator
19947f5fbb Automatic date update in version.in 2015-04-23 00:00:07 +00:00
H.J. Lu
d5597ebccc i386: Allow copy relocs for building PIE
This patch allows copy relocs for R_386_GOTOFF relocations in PIE.  For

extern int glob_a;
int foo ()
{
  return glob_a;
}

compiler now can optimize it from

	call	__x86.get_pc_thunk.ax
	addl	$_GLOBAL_OFFSET_TABLE_, %eax
	movl	glob_a@GOT(%eax), %eax
	movl	(%eax), %eax
	ret

to

	call	__x86.get_pc_thunk.ax
	addl	$_GLOBAL_OFFSET_TABLE_, %eax
	movl	glob_a@GOTOFF(%eax), %eax
	ret

bfd/

	PR ld/18289
	* elf32-i386.c (elf_i386_link_hash_entry): Add gotoff_ref.
	(elf_i386_link_hash_newfunc): Initialize gotoff_ref to 0.
	(elf_i386_create_dynamic_sections): Always allow copy relocs for
	building executables.
	(elf_i386_copy_indirect_symbol): Also copy gotoff_ref.
	(elf_i386_check_relocs): Set gotoff_ref for R_386_GOTOFF.
	(elf_i386_adjust_dynamic_symbol): Also allocate copy relocs for
	PIE and R_386_GOTOFF.
	(elf_i386_relocate_section): Allow R_386_GOTOFF in executable.

ld/testsuite/

	PR ld/18289
	* ld-i386/copyreloc-lib.c: New file.
	* ld-i386/copyreloc-main.S: Likewise.
	* ld-i386/copyreloc-main.out: Likewise.
	* ld-i386/copyreloc-main1.rd: Likewise.
	* ld-i386/copyreloc-main2.rd: Likewise.
	* ld-i386/dummy.c: Likewise.
	* ld-i386/pr17689.out: Likewise.
	* ld-i386/pr17689.rd: Likewise.
	* ld-i386/pr17689a.c: Likewise.
	* ld-i386/pr17689b.S: Likewise.
	* ld-i386/pr17827.rd: Likewise.
	* ld-i386/pr17827ver.rd: Likewise.
	* ld-i386/i386.exp: Run copyreloc tests.
2015-04-22 05:30:01 -07:00
GDB Administrator
712e55b924 Automatic date update in version.in 2015-04-22 00:00:13 +00:00
GDB Administrator
efdacec57c Automatic date update in version.in 2015-04-21 00:00:08 +00:00
H.J. Lu
e97029632c Always set up sh_name in assign_section_numbers
commit 9ad5cbcfb2 added the initial support
for more than 64k ELF sections with holes for reserved section indices in
section header table and set entries of reserved section indices in
section header table to index 0:

   for (secn = 1; secn < section_number; ++secn)
-    i_shdrp[secn]->sh_name = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
-                                                    i_shdrp[secn]->sh_name);
-
+    if (i_shdrp[secn] == NULL)
+      i_shdrp[secn] = i_shdrp[0];
+    else
+      i_shdrp[secn]->sh_name = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
+							i_shdrp[secn]->sh_name);

commit 4fbb74a605 removed holes in section
header table.  Check for i_shdrp[secn] == NULL is no longer needed now.
This patch removes it.

	* elf.c (assign_section_numbers): Always set up sh_name.
2015-04-20 12:37:14 -07:00
H.J. Lu
e06efbf1c8 Iterate ELF sections by pointer
Iterate ELF sections by pointer without section counter.  It removes
"i++".

	* elf.c (assign_file_positions_for_non_load_sections): Iterate
	sections by pointer.
	(_bfd_elf_assign_file_positions_for_non_load): Likewise.
2015-04-20 08:50:01 -07:00
GDB Administrator
3cdf408c30 Automatic date update in version.in 2015-04-20 00:00:07 +00:00
GDB Administrator
09b29ece9a Automatic date update in version.in 2015-04-19 00:00:08 +00:00
GDB Administrator
b9a7202de8 Automatic date update in version.in 2015-04-18 00:00:07 +00:00
GDB Administrator
0fdc66e16e Automatic date update in version.in 2015-04-17 00:00:07 +00:00
GDB Administrator
04be4e9eda Automatic date update in version.in 2015-04-16 00:00:08 +00:00
H.J. Lu
0ce398f106 Add --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]
This patch adds --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]
to ld for ELF targets to support generating compressed DWARF debug
sections.  We always generate .zdebug_* section since section names have
been finalized and they can't be changed easily when compression is
being performed.

bfd/

	* bfd-in.h (compressed_debug_section_type): New.
	* compress.c (bfd_compress_section_contents): Add an argument
	for linker write compression and always generate .zdebug_*
	section when linking.
	(bfd_init_section_compress_status): Pass FALSE to
	bfd_compress_section_contents.
	(bfd_compress_section): New function.
	* elf.c (elf_fake_sections): For linking, set SEC_ELF_COMPRESS
	on DWARF debug sections if COMPRESS_DEBUG is set and rename
	section if COMPRESS_DEBUG_GABI_ZLIB isn't set.
	(assign_file_positions_for_non_load_sections): Set sh_offset
	to -1 if SEC_ELF_COMPRESS is set.
	(assign_file_positions_except_relocs): Likwise.
	(_bfd_elf_assign_file_positions_for_relocs): Renamed to ...
	(_bfd_elf_assign_file_positions_for_non_load): This.  Change
	return time to bfd_boolean.  Compress the section if
	SEC_ELF_COMPRESS is set.
	(_bfd_elf_write_object_contents): Updated.
	(_bfd_elf_set_section_contents): Write section contents to
	the buffer if SEC_ELF_COMPRESS is set.
	* merge.c: Include "elf-bfd.h".
	(sec_merge_emit): Add arguments for contents and offset.  Write
	to contents with offset if contents isn't NULL.
	(_bfd_write_merged_section): Write section contents to the
	buffer if SEC_ELF_COMPRESS is set.  Pass contents and
	output_offset to sec_merge_emit.
	* elflink.c (bfd_elf_final_link): Allocate the buffer for
	output section contents if SEC_ELF_COMPRESS is set.
	* section.c (SEC_ELF_COMPRESS): New.
	* bfd-in2.h: Regenerated.

gas/

	* as.h (compressed_debug_section_type): Removed.

include/

	* bfdlink.h (bfd_link_info): Add compress_debug.

ld/

	* ld.texinfo: Document --compress-debug-sections=.
	* ldmain.c (main): Set BFD_COMPRESS on output_bfd if
	COMPRESS_DEBUG is set.  Set BFD_COMPRESS_GABI on output_bfd
	for COMPRESS_DEBUG_GABI_ZLIB.
	* lexsup.c (elf_static_list_options): Add
	--compress-debug-sections=.
	* emultempl/elf32.em (OPTION_COMPRESS_DEBUG): New.
	(xtra_long): Add "compress-debug-sections".
	(gld${EMULATION_NAME}_handle_option): Handle
	OPTION_COMPRESS_DEBUG.

ld/testsuite/

	* ld-elf/compress.exp (build_tests): Add tests for
	--compress-debug-sections=.
	(run_tests): Likewise.
	Add additonal tests for --compress-debug-sections=.
	* ld-elf/gabiend.rt: New file.
	* ld-elf/gabinormal.rt: Likewise.
	* ld-elf/gnubegin.rS: Likewise.
	* ld-elf/gnunormal.rS: Likewise.
	* ld-elf/zlibbegin.rS: Likewise.
	* ld-elf/zlibnormal.rS: Likewise.
2015-04-14 22:01:38 -07:00
Alan Modra
95b57adeb7 Fix typo in commit 6ff71e76
* elf32-rl78.c (rl78_elf_relocate_section): Typo fix.
2015-04-15 11:26:34 +09:30
GDB Administrator
69cb14a0d7 Automatic date update in version.in 2015-04-15 00:00:07 +00:00
Nick Clifton
6ff71e7681 Adds support to the RL78 port for linker relaxation affecting .debug sections.
gas	* config/tc-rl78.h (TC_LINKRELAX_FIXUP): Define.
	(TC_FORCE_RELOCATION_SUB_SAME): Define.
	(DWARF2_USE_FIXED_ADVANCE_PC): Define.

	* gas/lns/lns.exp: Add RL78 to list of targets using
	DW_LNS_fixed_advance_pc.

bfd	* elf32-rl78.c (RL78_OP_REL): New macro.
	(rl78_elf_howto_table): Use it for complex relocs.
	(get_symbol_value): Handle the cases when the info or status
	arguments are NULL.
	(get_romstart): Cache the status returned by get_symbol_value.
	(get_ramstart): Likewise.
	(RL78_STACK_PUSH): Generate an error message if the stack
	overflows.
	(RL78_STACK_POP): Likewise for underflows.
	(rl78_compute_complex_reloc): New function.  Contains the basic
	processing code for all RL78 complex relocs.
	(rl78_special_reloc): New function.  Provides special reloc
	handling for complex relocs.
	(rl78_elf_relocate_section): Use rl78_compute_complex_reloc.
	(rl78_offset_for_reloc): Likewise.

binutils* readelf.c (target_specific_reloc_handling): Add code to handle
	RL78 complex relocs.
2015-04-14 16:23:33 +01:00
H.J. Lu
889c2a6796 Add -z noextern-protected-data to ld for ELF/x86
Address of protected data defined in the shared library may be external,
i.e., due to copy relocation.  By default, linker backend checks if
relocations against protected data symbols are valid for building shared
library and issues an error if relocation isn't allowed.  The new option
override linker backend default.  When -z noextern-protected-data is used,
updates on protected data symbols by another module won't be visibile
to the resulting shared library.  This option is specific to ELF/i386
and ELF/x86-64.

bfd/

	PR ld/pr17709
	* elflink.c (_bfd_elf_adjust_dynamic_copy): Check
	info->extern_protected_data when warning copy relocs against
	protected symbols.
	(_bfd_elf_symbol_refs_local_p): Check info->extern_protected_data
	when checking protected non-function symbols.

include/

	PR ld/pr17709
	* bfdlink.h (bfd_link_info): Add extern_protected_data.

ld/

	PR ld/pr17709
	* ld.texinfo: Document "-z noextern-protected-data".
	* ldmain.c (main): Initialize link_info.extern_protected_data
	to -1.
	* lexsup.c (elf_shlib_list_options): Add
	"-z [no]extern-protected-data".
	* emulparams/elf32_x86_64.sh: Source extern_protected_data.sh.
	* emulparams/elf_i386.sh: Likewise.
	* emulparams/elf_i386_be.sh: Likewise.
	* emulparams/elf_i386_chaos.sh: Likewise.
	* emulparams/elf_i386_ldso.sh: Likewise.
	* emulparams/elf_i386_vxworks.sh: Likewise.
	* emulparams/elf_k1om.sh: Likewise.
	* emulparams/elf_l1om.sh: Likewise.
	* emulparams/elf_x86_64.sh: Source extern_protected_data.sh.
	(PARSE_AND_LIST_OPTIONS): Renamed to ...
	(PARSE_AND_LIST_OPTIONS_BNDPLT): This.
	(PARSE_AND_LIST_ARGS_CASE_Z): Renamed to ...
	(PARSE_AND_LIST_ARGS_CASE_Z_BNDPLT): This.
	(PARSE_AND_LIST_OPTIONS): Append $PARSE_AND_LIST_OPTIONS_BNDPLT.
	(PARSE_AND_LIST_ARGS_CASE_Z): Append
	$PARSE_AND_LIST_ARGS_CASE_Z_BNDPLT.
	* emulparams/extern_protected_data.sh: New file.

ld/testsuite/

	PR ld/pr17709
	* ld-i386/i386.exp: Run protected6b.
	* ld-i386/protected6b.d: New file.
	* ld-x86-64/protected6b.d: Likewise.
	* ld-x86-64/x86-64.exp:  Run protected6b.
2015-04-14 04:13:11 -07:00
GDB Administrator
af6407fc3c Automatic date update in version.in 2015-04-14 00:00:08 +00:00
John Baldwin
97de3545ca Add support for the x86 XSAVE extended state on FreeBSD/x86.
Recognize NT_X86_XSTATE notes in FreeBSD process cores.  Recent
FreeBSD versions include a note containing the XSAVE state for each
thread in the process when XSAVE is in use.  The note stores a copy of
the current XSAVE mask in a reserved section of the machine-defined
XSAVE state at the same offset as Linux's NT_X86_XSTATE note.

For native processes, use the PT_GETXSTATE_INFO ptrace request to
determine if XSAVE is enabled, and if so the active XSAVE state mask
(that is, the value of %xcr0 for the target process) as well as the
size of XSAVE state area.  Use the PT_GETXSTATE and PT_SETXSTATE requests
to fetch and store the XSAVE state, respectively, in the BSD x86
native targets.

In addition, the FreeBSD amd64 and i386 native targets now include
"read_description" target methods to determine the correct x86 target
description for the current XSAVE mask.  On FreeBSD amd64 this also
properly returns an i386 target description for 32-bit binaries which
allows the 64-bit GDB to run 32-bit binaries.

Note that the ptrace changes are in the BSD native targets, not the
FreeBSD-specific native targets since that is where the other ptrace
register accesses occur.  Of the other BSDs, NetBSD and DragonFly use
XSAVE in the kernel but do not currently export the extended state via
ptrace(2).  OpenBSD does not currently support XSAVE.

bfd/ChangeLog:

	* elf.c (elfcore_grok_note): Recognize NT_X86_XSTATE on
	FreeBSD.
	(elfcore_write_xstatereg): Use correct note name on FreeBSD.

gdb/ChangeLog:

	* amd64-tdep.c (amd64_target_description): New function.
	* amd64-tdep.h: Export amd64_target_description and tdesc_amd64.
	* amd64bsd-nat.c [PT_GETXSTATE_INFO]: New variable amd64bsd_xsave_len.
	(amd64bsd_fetch_inferior_registers) [PT_GETXSTATE_INFO]: Handle
	x86 extended save area.
	(amd64bsd_store_inferior_registers) [PT_GETXSTATE_INFO]: Likewise.
	* amd64bsd-nat.h: Export amd64bsd_xsave_len.
	* amd64fbsd-nat.c (amd64fbsd_read_description): New function.
	(_initialize_amd64fbsd_nat): Set "to_read_description" to
	"amd64fbsd_read_description".
	* amd64fbsd-tdep.c (amd64fbsd_core_read_description): New function.
	(amd64fbsd_supply_xstateregset): New function.
	(amd64fbsd_collect_xstateregset): New function.
	Add "amd64fbsd_xstateregset".
	(amd64fbsd_iterate_over_regset_sections): New function.
	(amd64fbsd_init_abi): Set "xsave_xcr0_offset" to
	"I386_FBSD_XSAVE_XCR0_OFFSET".
	Add "iterate_over_regset_sections" gdbarch method.
	Add "core_read_description" gdbarch method.
	* i386-tdep.c (i386_target_description): New function.
	* i386-tdep.h: Export i386_target_description and tdesc_i386.
	* i386bsd-nat.c [PT_GETXSTATE_INFO]: New variable i386bsd_xsave_len.
	(i386bsd_fetch_inferior_registers) [PT_GETXSTATE_INFO]: Handle
	x86 extended save area.
	(i386bsd_store_inferior_registers) [PT_GETXSTATE_INFO]: Likewise.
	* i386bsd-nat.h: Export i386bsd_xsave_len.
	* i386fbsd-nat.c (i386fbsd_read_description): New function.
	(_initialize_i386fbsd_nat): Set "to_read_description" to
	"i386fbsd_read_description".
	* i386fbsd-tdep.c (i386fbsd_core_read_xcr0): New function.
	(i386fbsd_core_read_description): New function.
	(i386fbsd_supply_xstateregset): New function.
	(i386fbsd_collect_xstateregset): New function.
	Add "i386fbsd_xstateregset".
	(i386fbsd_iterate_over_regset_sections): New function.
	(i386fbsd4_init_abi): Set "xsave_xcr0_offset" to
	"I386_FBSD_XSAVE_XCR0_OFFSET".
	Add "iterate_over_regset_sections" gdbarch method.
	Add "core_read_description" gdbarch method.
	* i386fbsd-tdep.h: New file.
2015-04-13 16:07:01 -04:00
H.J. Lu
f0bf6bfd70 Don't check object claimed by plugin
When ELF linker backend searchs the symbol table of an archive element,
it should skip the object which has been claimed by plugin.

	PR ld/18250
	* elflink.c (elf_link_is_defined_archive_symbol): Return FALSE
	if the object has been claimed by plugin.
2015-04-13 04:58:29 -07:00
GDB Administrator
d34f5e83d4 Automatic date update in version.in 2015-04-13 00:00:08 +00:00
H.J. Lu
48d96f80be Revert the last 2 commits on pagesize_m1 2015-04-11 19:34:42 -07:00
GDB Administrator
e46c4f6cc8 Automatic date update in version.in 2015-04-12 00:00:08 +00:00
H.J. Lu
263b1a3c1f Don't call getpagesize more than once 2015-04-11 16:49:09 -07:00
H.J. Lu
2c008f9a5b Initialize pagesize_m1 in bfd_cache_init
There is no need to check and initialize pagesize_m1 in cache_bmmap.

	* cache.c (cache_bmmap): Move pagesize_m1 ... to
	(pagesize_m1): Here.
	(bfd_cache_init): Initialize pagesize_m1.
2015-04-11 15:12:08 -07:00
H.J. Lu
e3c0e32792 Replace SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCAL
When checking R_386_GOTOFF/R_X86_64_GOTOFF64 for building shared library,
we should check SYMBOL_REFERENCES_LOCAL instead of SYMBOLIC_BIND to cover
more cases.

bfd/

	* elf32-i386.c (elf_i386_relocate_section): Replace SYMBOLIC_BIND
	with SYMBOL_REFERENCES_LOCAL when checking R_386_GOTOFF against
	protected data symbol when building shared library.
	* elf64-x86-64.c (elf_x86_64_relocate_section): Check
	R_X86_64_GOTOFF64 against undefined symbol and replace
	SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCAL when checking
	R_X86_64_GOTOFF64 against protected data symbol when building
	shared library.

ld/testsuite/

	* ld-i386/i386.exp: Run protected6a.
	* ld-i386/protected6.d: Renamed to ...
	* ld-i386/protected6a.d: This.
	* ld-x86-64/hidden4.d: New file.
	* ld-x86-64/hidden4.s: Likewise.
	* ld-x86-64/hidden5.d: Likewise.
	* ld-x86-64/hidden5.s: Likewise.
	* ld-x86-64/protected6.d: Renamed to ...
	* ld-x86-64/protected6a.d: This.
	* ld-x86-64/x86-64.exp: Run hidden4, hidden5, protected6a,
	protected7a and protected7b.
2015-04-11 07:56:48 -07:00
GDB Administrator
fbed9c2759 Automatic date update in version.in 2015-04-11 00:00:08 +00:00
H.J. Lu
3d9499950a Check GOTOFF reloc against protected data on x86
R_386_GOTOFF/R_X86_64_GOTOFF64 relocation shouldn't be used against
protected data symbol on x86 since with copy relocation, address of
protected data defined in the shared library may be external.

This patch will break building shared libraries with protected data
symbols using GCCs older than GCC 5 without the bug fix for

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65248

GCC backport request should be made in the GCC bug report above.

bfd/

	PR ld/pr17709
	* elf32-i386.c (elf_i386_relocate_section): Also check R_386_GOTOFF
	against protected data symbol when building shared library.
	* elf64-x86-64.c (elf_x86_64_relocate_section): Also check
	R_X86_64_GOTOFF64 against protected data symbol when building
	shared library.

ld/testsuite/

	PR ld/pr17709
	* ld-i386/protected6.d: New file.
	* ld-i386/protected6.s: Likewise.
	* ld-x86-64/protected6.d: Likewise.
	* ld-x86-64/protected6.s: Likewise.
	* ld-x86-64/protected7.d: Likewise.
	* ld-x86-64/protected7.s: Likewise.
	* ld-x86-64/protected7a.d: Likewise.
	* ld-x86-64/protected7b.d: Likewise.
2015-04-10 14:02:23 -07:00
H.J. Lu
f74839702e Add extern_protected_data and set it for x86
Re-apply: commit ca3fe95e46

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.

This patch will break building shared libraries with protected data
symbols using GCCs older than GCC 5 without the bug fix for

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65248

GCC backport request should be made in the GCC bug report above.

To get correct run-time behavior on Linux, glibc 2.22 or above are
required, which have the bug fix for

https://sourceware.org/bugzilla/show_bug.cgi?id=17711

Backports for glibc 2.21, 2.20, 2.19 and 2.18 are on hjl/pr17711/2.21,
hjl/pr17711/2.20, hjl/pr17711/2.19 and hjl/pr17711/2.18 branches,
respectively, at

https://sourceware.org/git/?p=glibc.git;a=summary

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-04-10 11:06:34 -07:00
H.J. Lu
030aeb7599 Use bfd_alloc for compressed section contents
Compressed section contents should be bfd_alloced to avoid memory leak.
This patch replaces bfd_malloc and free with bfd_alloc and bfd_release
on compressed buffer in bfd_compress_section_contents.  There is still
a very small memory leak when compressed section isn't smaller.

	* compress.c (bfd_compress_section_contents): Replace bfd_malloc
	and free with bfd_alloc and bfd_release on compressed buffer.
	Release buffer if compressed section isn't smaller.
2015-04-10 03:54:41 -07:00
Alan Modra
d07a1b059d Downgrade linker error on protected symbols in .dynbss to a warning
PR ld/18222
	* elflink.c (_bfd_elf_adjust_dynamic_copy): Don't report an error
	on adding a protected visibility variable to .dynbss.
2015-04-10 19:16:47 +09:30
Alan Modra
8d2ea2a80a Revert "Add extern_protected_data and set it for x86"
This reverts commit ca3fe95e46.
2015-04-10 19:16:47 +09:30
GDB Administrator
4f0d8f2d9f Automatic date update in version.in 2015-04-10 00:00:08 +00:00
H.J. Lu
18ece1defb Update comments in compress.c
* compress.c (bfd_compress_section_contents): Update comments.
	(bfd_init_section_decompress_status): Likewise.
	(bfd_init_section_compress_status): Likewise.
2015-04-09 12:48:49 -07:00
H.J. Lu
cd6faa73f8 Properly check --compress-debug-sections=XXX
We can't check if input is ELF in copy_file since some targets may only
set xvec after bfd_check_format_matches is called.  This patch moves
this check to copy_object.

bfd/

	* elfxx-target.h (TARGET_BIG_SYM): Add BFD_COMPRESS_GABI to
	object_flags.
	(TARGET_LITTLE_SYM): Likewise.

binutils/

	* objcopy.c (do_debug_sections): Use bit patterns.
	(copy_object): Return FALSE for compress_zlib, compress_gnu_zlib
	and compress_gabi_zlib on non-ELF input.
	(copy_file): Don't check non-ELF input here.
2015-04-09 10:56:28 -07:00
Max Filippov
1942484389 xtensa: update bfd/Changelog 2015-04-09 19:27:53 +03:00
Max Filippov
4c2af04fe8 xtensa: replace action list with splay tree
text_action_add uses linear list search to order text actions list by
action VMA. The list is used at the first relaxation pass, when it's not
fixed yet.
Replace the list with splay tree from libiberty.

Original profile:

% time    self  children    called     name
-----------------------------------------
          0.00    0.00      14/158225      compute_text_actions
          3.62    0.00   25211/158225      remove_dead_literal
          8.42    0.00   58645/158225      coalesce_shared_literal
         10.68    0.00   74355/158225      text_action_add_proposed
  38.8   22.73    0.00  158225         text_action_add
          0.00    0.00  144527/293246      bfd_zmalloc
-----------------------------------------

Same data, after optimization:

% time    self  children    called     name
-----------------------------------------
          0.00    0.00      14/158225      compute_text_actions
          0.00    0.00   25211/158225      remove_dead_literal
          0.00    0.01   58645/158225      coalesce_shared_literal
          0.00    0.01   74355/158225      text_action_add_proposed
   0.1    0.00    0.02  158225         text_action_add
          0.01    0.00  144527/144527      splay_tree_insert
          0.00    0.00  144527/195130      splay_tree_lookup
          0.00    0.00  144527/293246      bfd_zmalloc
-----------------------------------------

2015-04-03  Max Filippov  <jcmvbkbc@gmail.com>
bfd/
	* elf32-xtensa.c (splay-tree.h): include header.
	(text_action_struct): drop next pointer.
	(text_action_list_struct): drop head pointer, add count and
	tree fields.
	(find_fill_action): instead of linear search in text_action_list
	search in the tree.
	(text_action_compare, action_first, action_next): new functions.
	(text_action_add, text_action_add_literal): instead of linear
	search and insertion insert new node into the tree.
	(removed_by_actions): pass additional parameter: action_list,
	use it to traverse the tree.
	(offset_with_removed_text): pass additional action_list parameter
	to removed_by_actions.
	(map_action_fn_context): new typedef.
	(map_action_fn_context_struct): new structure.
	(map_action_fn): new function.
	(map_removal_by_action): use splay_tree_foreach to build map.
	(find_insn_action): replace linear search in text_action_list
	with series of splay_tree_lookups.
	(print_action, print_action_list_fn): new functions.
	(print_action_list): use splay_tree_foreach.
	(init_xtensa_relax_info): drop action_list.head initialization.
	Initialize the tree.
	(compute_text_actions): use non-zero action_list_count instead of
	non-NULL action list.
	(xlate_map_context): new typedef.
	(xlate_map_context_struct): new structure.
	(xlate_map_fn): new function.
	(build_xlate_map): use splay_tree_foreach to build map.
	(action_remove_bytes_fn): new function.
	(relax_section): use zero action_list_count instead of NULL
	action list. Use splay_tree_foreach to count final section size.
	Drop unused variable 'removed'.
2015-04-09 19:10:25 +03:00
Max Filippov
3439c46627 xtensa: optimize find_removed_literal
find_removed_literal uses linear search to find removed literal by its
VMA. The list of literals is fixed at that point, build an ordered index
array and use binary search instead.

Original profile:

% time    self  children    called     name
-----------------------------------------
         56.72    0.00  297578/669392      translate_reloc
         70.86    0.00  371814/669392      relax_section
  67.9  127.58    0.00  669392         find_removed_literal
-----------------------------------------

Same data, after optimization:

% time    self  children    called     name
-----------------------------------------
          0.00    0.00  297578/669392      translate_reloc
          0.00    0.00  371814/669392      relax_section
   0.0    0.00    0.00  669392         find_removed_literal
          0.00    0.00   23838/23838       map_removed_literal
-----------------------------------------

2015-04-03  Max Filippov  <jcmvbkbc@gmail.com>
bfd/
	* elf32-xtensa.c (removed_literal_map_entry): new typedef.
	(removed_literal_map_entry_struct): new structure.
	(removed_literal_list_struct): add new fields: n_map and map.
	(map_removed_literal, removed_literal_compare): new functions.
	(find_removed_literal): build index array for literals ordered
	by VMA, use binary search to find removed literal.
2015-04-09 19:10:25 +03:00
Max Filippov
071aa5c98a xtensa: optimize removed_by_actions
The function removed_by_actions iterates through text actions to
calculate an offset applied by text actions to a given VMA. Although it
has a parameter p_start_action that allows for incremental offset
calculation, in many places it's used with p_start_action explicitly set
to the first action. After the first relaxation pass when the list of
text actions is finalized, an array of offsets sorted by VMA may be used
to speed up this function.

Original profile:

% time    self  children    called     name
-----------------------------------------
          0.35    0.00   33872/4808961     relax_section_symbols
          3.32    0.00  326022/4808961     relax_property_section
         12.83    0.00 1259379/4808961     offset_with_removed_text
         32.50    0.00 3189688/4808961     translate_reloc
  71.5   49.00    0.00 4808961         removed_by_actions
-----------------------------------------

Same data, after optimization:

% time    self  children    called     name
-----------------------------------------
          0.00    0.00   33872/4808537     relax_section_symbols
          0.01    0.00  326022/4808537     relax_property_section
          0.05    0.00 1258955/4808537     offset_with_removed_text_map
          0.13    0.00 3189688/4808537     translate_reloc
   1.0    0.20    0.00 4808537         removed_by_actions_map
          0.00    0.00     120/120         map_removal_by_action
-----------------------------------------

2015-04-01  Max Filippov  <jcmvbkbc@gmail.com>
bfd/
	* elf32-xtensa.c (removal_by_action_entry_struct,
	removal_by_action_map_struct): new structures.
	(removal_by_action_entry, removal_by_action_map): new typedefs.
	(text_action_list_struct): add new field: map.
	(map_removal_by_action, removed_by_actions_map,
	offset_with_removed_text_map): new functions.
	(relax_section): replace offset_with_removed_text with
	offset_with_removed_text_map.
	(translate_reloc, relax_property_section, relax_section_symbols):
	replace removed_by_actions with removed_by_actions_map.
2015-04-09 19:10:25 +03:00
Max Filippov
b2b326d246 xtensa: optimize check_section_ebb_pcrels_fit
The original check_section_ebb_pcrels_fit algorithm checks that text
actions proposed for current EBB are OK for every relocation in a
section. There's no need to check every relocation, because text actions
for EBB can only change size of that EBB, thus only affecting
relocations that in any way cross that EBB. In addition EBBs are
iterated in ascending order of their VMA, making it easier to track
relevant relocations.

Introduce a structure that can track relocations that cross the range of
VMAs of EBB and use it to only check relocations relevant to current EBB
in check_section_ebb_pcrels_fit.
It takes O(N log N) operations to build it and O(N) operations to move
current EBB VMA window through its entire range, where N is the number
of relocations in a section. The resulting complexity of
compute_text_actions is thus reduced from O(N^2) to O(N log N + N * M),
where M is the average number of relocations crossing each EBB.

Original profile:

% time    self  children    called     name
-----------------------------------------
         44.26   71.53    6429/6429        compute_text_actions
  50.2   44.26   71.53    6429         check_section_ebb_pcrels_fit
          1.16   20.12 347506666/347576152     pcrel_reloc_fits
          2.95   16.52 347506666/348104944     get_relocation_opnd
          2.01    9.74 347575100/361252208     r_reloc_init
          0.55    7.53 347575100/363381467     r_reloc_get_section
          5.76    0.02 695013332/695013332     xlate_offset_with_removed_text
          0.68    3.89 347575100/363483827     bfd_octets_per_byte
          0.32    0.00 347506666/349910253     is_alt_relocation
          0.18    0.11    6391/6391        build_xlate_map
          0.00    0.00    6429/19417168     get_xtensa_relax_info
          0.00    0.00    6391/6391        free_xlate_map
-----------------------------------------

Same data, after optimization:

% time    self  children    called     name
-----------------------------------------
          2.56    3.08    6429/6429        compute_text_actions
   8.2    2.56    3.08    6429         check_section_ebb_pcrels_fit
          0.08    0.91 17721075/17790561     pcrel_reloc_fits
          0.17    0.47 17721075/31685977     r_reloc_init
          0.43    0.00 35442150/35442150     xlate_offset_with_removed_text
          0.02    0.37 17721075/33815236     r_reloc_get_section
          0.22    0.11    6391/6391        build_xlate_map
          0.05    0.22 17721075/33917596     bfd_octets_per_byte
          0.03    0.00 17721075/20405299     is_alt_relocation
          0.01    0.00    6429/6429        reloc_range_list_update_range
          0.00    0.00    6429/19417168     get_xtensa_relax_info
          0.00    0.00    6391/6391        free_xlate_map
-----------------------------------------

2015-04-01  Max Filippov  <jcmvbkbc@gmail.com>
bfd/
	* elf32-xtensa.c (reloc_range_list, reloc_range_list_entry,
	reloc_range): new typedef.
	(reloc_range_list_struct, reloc_range_list_entry_struct,
	reloc_range_struct): new structures.
	(reloc_range_compare, build_reloc_ranges,
	reloc_range_list_append, reloc_range_list_remove,
	reloc_range_list_update_range, free_reloc_range_list): new
	functions.
	(compute_text_actions): precompute relocation opcodes before the
	loop. Add relevant_relocs variable, initialize it before the
	loop, pass it to the check_section_ebb_pcrels_fit.
	(check_section_ebb_pcrels_fit): add new parameter:
	relevant_relocs. Update address range in the relevant_relocs if
	it's non-NULL and iterate only over relevant relocations.
2015-04-09 19:10:24 +03:00
Nick Clifton
3525236c57 Add support to the RX toolchain to restrict the use of string instructions.
bfd	* elf32-rx.c (describe_flags): Report the settings of the string
	insn using bits.
	(rx_elf_merge_private_bfd_data): Handle merging of the string insn
	using bits.

bin	* readelf.c (get_machine_flags): Report the setting of the string
	insn using bits.

gas	* config/tc-rx.c (enum options): Add OPTION_DISALLOW_STRING_INSNS.
	(md_longopts): Add -mno-allow-string-insns.
	(md_parse_option): Handle -mno-allow-string-insns.
	(md_show_usage): Mention -mno-allow-string-insns.
	(rx_note_string_insn_use): New function.  Produces an error
	message if a string insn is used when it is not allowed.
	* config/rx-parse.y (SCMPU): Call rx_note_string_insn_use.
	(SMOVU, SMOVB, SMOVF, SUNTIL, SWHILE, RMPA): Likewise.
	* config/rx-defs.h (rx_note_string_insn_use): Prototype.
	* doc/c-rx.texi: Document -mno-allow-string-insns.

elf	* rx.h (E_FLAG_RX_SINSNS_SET): New bit in e_flags field.
	(E_FLAG_RX_SINSNS_YES): Likewise.
	(E_FLAG_RX_SINSNS_MASK): New define.
2015-04-09 12:48:37 +01:00
GDB Administrator
11161a6e38 Automatic date update in version.in 2015-04-09 00:00:08 +00:00
H.J. Lu
5150992626 Work around a GCC uninitialized warning bug
* compress.c (bfd_compress_section_contents): Work around a GCC
	uninitialized warning bug fixed in GCC 4.7.
2015-04-08 09:27:27 -07:00
H.J. Lu
151411f8af Add SHF_COMPRESSED support to gas and objcopy
This patch adds --compress-debug-sections={none|zlib|zlib-gnu|zlib-gabi}
options to gas and objcopy for ELF files. They control how DWARF debug
sections are compressed.  --compress-debug-sections=none is equivalent to
--nocompress-debug-sections.  --compress-debug-sections=zlib and
--compress-debug-sections=zlib-gnu are equivalent to
--compress-debug-sections.  --compress-debug-sections=zlib-gabi compresses
DWARF debug sections with SHF_COMPRESSED from the ELF ABI.  No linker
changes are required to support SHF_COMPRESSED.

bfd/

	* archive.c (_bfd_get_elt_at_filepos): Also copy BFD_COMPRESS_GABI
	bit.
	* bfd.c (bfd::flags): Increase size to 18 bits.
	(BFD_COMPRESS_GABI): New.
	(BFD_FLAGS_SAVED): Add BFD_COMPRESS_GABI.
	(BFD_FLAGS_FOR_BFD_USE_MASK): Likewise.
	(bfd_update_compression_header): New fuction.
	(bfd_check_compression_header): Likewise.
	(bfd_get_compression_header_size): Likewise.
	(bfd_is_section_compressed_with_header): Likewise.
	* compress.c (MAX_COMPRESSION_HEADER_SIZE): New.
	(bfd_compress_section_contents): Return the uncompressed size if
	the full section contents is compressed successfully.  Support
	converting from/to .zdebug* sections.
	(bfd_get_full_section_contents): Call
	bfd_get_compression_header_size to get compression header size.
	(bfd_is_section_compressed): Renamed to ...
	(bfd_is_section_compressed_with_header): This.  Add a pointer
	argument to return compression header size.
	(bfd_is_section_compressed): Use it.
	(bfd_init_section_decompress_status): Call
	bfd_get_compression_header_size to get compression header size.
	Return FALSE if uncompressed section size is 0.
	* elf.c (_bfd_elf_make_section_from_shdr): Support converting
	from/to .zdebug* sections.
	* bfd-in2.h: Regenerated.

binutils/

	* objcopy.c (do_debug_sections): Add compress_zlib,
	compress_gnu_zlib and compress_gabi_zlib.
	(copy_options): Use optional_argument on compress-debug-sections.
	(copy_usage): Update --compress-debug-sections.
	(copy_file): Handle compress_zlib, compress_gnu_zlib and
	compress_gabi_zlib.
	(copy_main): Handle
	--compress-debug-sections={none|zlib|zlib-gnu|zlib-gabi}.
	* doc/binutils.texi: Document
	--compress-debug-sections={none|zlib|zlib-gnu|zlib-gabi}.

binutils/testsuite/

	* compress.exp: Add tests for
	--compress-debug-sections={none|zlib|zlib-gnu|zlib-gabi}.
	* binutils-all/dw2-3.rS: New file.
	* binutils-all/dw2-3.rt: Likewise.
	* binutils-all/libdw2-compressedgabi.out: Likewise.

gas/

	* as.c (show_usage): Update --compress-debug-sections.
	(std_longopts): Use optional_argument on compress-debug-sections.
	(parse_args): Handle
	--compress-debug-sections={none|zlib|zlib-gnu|zlib-gabi}.
	* as.h (compressed_debug_section_type): New.
	(flag_compress_debug): Change type to compressed_debug_section_type.
	--compress-debug-sections={none|zlib|zlib-gnu|zlib-gabi}.
	* write.c (compress_debug): Set BFD_COMPRESS_GABI for
	--compress-debug-sections=zlib-gabi.  Call
	bfd_get_compression_header_size to get compression header size.
	Don't rename section name for --compress-debug-sections=zlib-gabi.
	* config/tc-i386.c (compressed_debug_section_type): Set to
	COMPRESS_DEBUG_ZLIB.
	* doc/as.texinfo: Document
	--compress-debug-sections={none|zlib|zlib-gnu|zlib-gabi}.

gas/testsuite/

	* gas/i386/dw2-compressed-1.d: New file.
	* gas/i386/dw2-compressed-2.d: Likewise.
	* gas/i386/dw2-compressed-3.d: Likewise.
	* gas/i386/x86-64-dw2-compressed-2.d: Likewise.
	* gas/i386/i386.exp: Run dw2-compressed-2, dw2-compressed-1,
	dw2-compressed-3 and x86-64-dw2-compressed-2.

ld/testsuite/

	* ld-elf/compress.exp: Add a test for
	--compress-debug-sections=zlib-gabi.
	(build_tests): Add 2 tests for --compress-debug-sections=zlib-gabi.
	(run_tests): Likewise.
	Verify linker output with zlib-gabi compressed debug input.
	* ld-elf/compressed1a.d: New file.
	* ld-elf/compressed1b.d: Likewise.
	* ld-elf/compressed1c.d: Likewise.
2015-04-08 07:54:09 -07:00
GDB Administrator
31ba1f58f8 Automatic date update in version.in 2015-04-08 00:00:08 +00:00
Alan Modra
87070c082f Modify get_reloc_section for targets that map .got.plt to .got
Fixes tic6x testsuite failures due to .rela.plt having a zero sh_info.
I considered passing link_info to get_reloc_section so we could
directly return the .got.plt output section, but we need the fallback
to name lookup anyway for objcopy.

bfd/
	* elf.c (_bfd_elf_get_reloc_section): Allow for .got.plt being
	mapped to output .got section.
ld/testsuite/
	* ld-arm/tls-gdesc-nlazy.g: Adjust for readelf note.
	* ld-tic6x/shlib-1.rd: Expect corrected .rela.plt sh_info.
	* ld-tic6x/shlib-1b.rd: Likewise.
	* ld-tic6x/shlib-1r.rd: Likewise.
	* ld-tic6x/shlib-1rb.rd: Likewise.
	* ld-tic6x/shlib-app-1.rd: Likewise.
	* ld-tic6x/shlib-app-1b.rd: Likewise.
	* ld-tic6x/shlib-app-1r.rd: Likewise.
	* ld-tic6x/shlib-app-1rb.rd: Likewise.
	* ld-tic6x/shlib-noindex.rd: Likewise.
2015-04-07 23:22:11 +09:30
Alan Modra
d3e454b956 PowerPC non-PIC to PIC editing for protected var access
This is a linker-only solution to the incompatibility between shared
library protected visibility variables and using .dynbss and copy
relocs for non-PIC access to shared library variables.

bfd/
	* elf32-ppc.c (struct ppc_elf_link_hash_entry): Add has_addr16_ha
	and has_addr16_lo.  Make has_sda_refs a bitfield.
	(ppc_elf_check_relocs): Set new flags.
	(ppc_elf_link_hash_table_create): Update default_params.
	(ppc_elf_adjust_dynamic_symbol): Clear protected_def in cases
	where we won't be making .dynbss entries or editing code.  Set
	params->pic_fixup when we'll edit code for protected var access.
	(allocate_dynrelocs): Allocate got entry for edited code and
	discard dyn_relocs.
	(struct ppc_elf_relax_info): Add picfixup_size.
	(ppc_elf_relax_section): Rename struct one_fixup to struct
	one_branch_fixup.  Rename fixups to branch_fixups.  Size space for
	pic fixups.
	(ppc_elf_relocate_section): Edit non-PIC accessing protected
	visibility variables to PIC.  Don't emit dyn_relocs for code
	we've edited.
	* elf32-ppc.h (struct ppc_elf_params): Add pic_fixup.
ld/
	* emultempl/ppc32elf.em: Handle --no-pic-fixup.
	(params): Init new field.
	(ppc_before_allocation): Enable relaxation for pic_fixup.
2015-04-07 23:00:07 +09:30
Nick Clifton
ffa547701b Treat assembler generated local labels as local.
* elf.c (_bfd_elf_is_local_label_name): Treat assembler generated
	local labels as local.
2015-04-07 11:22:32 +01:00
GDB Administrator
dc081549e7 Automatic date update in version.in 2015-04-07 00:00:10 +00:00
H.J. Lu
4aa90cc007 Use bfd_putb64/bfd_getb64
bfd/

	* compress.c (get_uncompressed_size): Removed.
	(bfd_compress_section_contents): Use bfd_putb64 to write
	uncompressed section size.
	(bfd_init_section_decompress_status): Replace
	get_uncompressed_size with bfd_getb64.

gas/

	* write.c (compress_debug): Use bfd_putb64 to write uncompressed
	section size.
2015-04-06 09:02:52 -07:00
GDB Administrator
cbaa2d7097 Automatic date update in version.in 2015-04-06 00:00:07 +00:00
GDB Administrator
1d2d99379e Automatic date update in version.in 2015-04-05 00:00:08 +00:00
H.J. Lu
68f5ff89ed Also preserve the SHF_COMPRESSED bit
For objcopy and relocatable link, we should also preserve the
SHF_COMPRESSED bit if not decompress.

	* elf.c (_bfd_elf_init_private_section_data): Also preserve the
	SHF_COMPRESSED bit if not decompress.
2015-04-04 08:01:54 -07:00
H.J. Lu
906bacc0ea Replace uncompressed_size_buffer with compressed_size_buffer 2015-04-04 07:52:55 -07:00
H.J. Lu
8bed4e0f7b Extract get_uncompressed_size
* compress.c (get_uncompressed_size): New.  Extracted from ...
	(bfd_init_section_decompress_status): This.  Use it.
2015-04-04 07:49:35 -07:00
GDB Administrator
af72fdacfd Automatic date update in version.in 2015-04-04 00:00:07 +00:00
GDB Administrator
ef6f73553e Automatic date update in version.in 2015-04-03 00:00:07 +00:00
Andrew Turner
15c7659fd1 Add support for configuring an aarch64-freebsd target.
ld	* Makefile.am: Add FreeBSD aarch64 files.
	* Makefile.in: Regenerate.
	* configure.tgt: Add aarch64-*-freebsd* target triple.
	* emulparams/aarch64fbsd.sh: New file.
	* emulparams/aarch64fbsdb.sh: New file.

bfd	* config.bfd: Add aarch64-*-freebsd* target triple.
2015-04-02 15:07:27 +01:00
H.J. Lu
39f3de7c43 Regenerate configure in bfd/binutils/gas/gdb/gold
bfd/

	* configure: Regenerated.

binutils/

	* configure: Regenerated.

gas/

	* configure: Regenerated.

gdb/

	* Makefile.in (top_srcdir): New.
	* configure: Regenerated.

gold/

	* configure: Regenerated.
2015-04-02 05:45:03 -07:00
GDB Administrator
6f20d58b6f Automatic date update in version.in 2015-04-02 00:00:07 +00:00
Marcus Shawcroft
4106101c44 [AArch64] Workaround for Cortex A53 erratum 843419
Some early revisions of the Cortex-A53 have an erratum (843419).  The
details of the erratum are quite complex and involve dynamic
conditions.  For the purposes of the workaround we have simplified the
static conditions to an ADRP in the last two instructions of a 4KByte
page, followed within four instructions by a load/store dependent on
the ADRP.

This patch adds support to conservatively scan for and workaround
Cortex A53 erratum 843419.  There are two different workaround
strategies used.  The first is to rewrite ADRP instructions which form
part of an erratum sequence with an ADR instruction.  In situations
where the ADR provides insufficient offset the dependent load or store
instruction from the sequence is moved to a stub section and branches
are inserted from the original sequence to the relocated instruction
and back again.

Stub section sizes are rounded up to a multiple of 4096 in order to
ensure that the act of inserting work around stubs does not create
more errata sequences.

Workaround stubs are always inserted into the stub section associated
with the input section containing the erratum sequence.  This ensures
that the fully relocated form of the veneered load store instruction
is available at the point in time when the stub section is written.
2015-04-01 13:16:38 +01:00
H.J. Lu
afa59b7900 Regenerate configure in bfd/binutils/gas/gdb
bfd/

2015-04-01  H.J. Lu  <hongjiu.lu@intel.com>

	* configure: Regenerated.

binutils/

2015-04-01  H.J. Lu  <hongjiu.lu@intel.com>

	* configure: Regenerated.

gas/

2015-04-01  H.J. Lu  <hongjiu.lu@intel.com>

	* configure: Regenerated.

gdb/

2015-04-01  H.J. Lu  <hongjiu.lu@intel.com>

	* configure: Regenerated.
2015-04-01 04:55:48 -07:00
GDB Administrator
2ae0baa450 Automatic date update in version.in 2015-04-01 00:00:08 +00:00
Ed Schouten
6036f48621 Add support for Nuxi CloudABI on x86-64
bfd/

	* config.bfd (targ_defvec): Set to x86_64_elf64_cloudabi_vec
	for x86_64-*-cloudabi*.
	* configure.ac: Handle x86_64_elf64_cloudabi_vec.
	* configure: Regenerated.
	* elf64-x86-64.c (TARGET_LITTLE_SYM): Support x86_64-*-cloudabi*.
	(TARGET_LITTLE_NAME): Likewise.
	(ELF_OSABI): Likewise.
	(elf64_bed): Likewise.
	* targets.c (x86_64_elf64_cloudabi_vec): New.
	(_bfd_target_vector): Add x86_64_elf64_cloudabi_vec.

gas/

	* configure.tgt (fmt): Set to elf for *-*-cloudabi*.

ld/

	* Makefile.am (ALL_64_EMULATION_SOURCES): Add
	eelf_x86_64_cloudabi.c.
	(eelf_x86_64_cloudabi.c): New.
	* configure.tgt (targ_emul): Set to elf_x86_64_cloudabi for
	x86_64-*-cloudabi*.
	* Makefile.in: Regenerated.
	* emulparams/elf_x86_64_cloudabi.sh: New file.
2015-03-31 08:11:08 -07:00