aboutsummaryrefslogtreecommitdiff
path: root/bfd
AgeCommit message (Collapse)AuthorFilesLines
2015-04-14Add --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]H.J. Lu8-21/+253
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-15Fix typo in commit 6ff71e76Alan Modra2-1/+5
* elf32-rl78.c (rl78_elf_relocate_section): Typo fix.
2015-04-15Automatic date update in version.inGDB Administrator1-1/+1
2015-04-14Adds support to the RL78 port for linker relaxation affecting .debug sections.Nick Clifton2-388/+465
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-14Add -z noextern-protected-data to ld for ELF/x86H.J. Lu2-2/+16
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-14Automatic date update in version.inGDB Administrator1-1/+1
2015-04-13Add support for the x86 XSAVE extended state on FreeBSD/x86.John Baldwin2-1/+14
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-13Don't check object claimed by pluginH.J. Lu2-0/+10
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-13Automatic date update in version.inGDB Administrator1-1/+1
2015-04-11Revert the last 2 commits on pagesize_m1H.J. Lu2-14/+4
2015-04-12Automatic date update in version.inGDB Administrator1-1/+1
2015-04-11Don't call getpagesize more than onceH.J. Lu1-1/+2
2015-04-11Initialize pagesize_m1 in bfd_cache_initH.J. Lu2-4/+13
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-11Replace SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCALH.J. Lu3-16/+55
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-11Automatic date update in version.inGDB Administrator1-1/+1
2015-04-10Check GOTOFF reloc against protected data on x86H.J. Lu3-13/+28
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-10Add extern_protected_data and set it for x86H.J. Lu6-4/+35
Re-apply: commit ca3fe95e469b9daec153caa2c90665f5daaec2b5 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-10Use bfd_alloc for compressed section contentsH.J. Lu2-3/+12
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-10Downgrade linker error on protected symbols in .dynbss to a warningAlan Modra2-7/+9
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-10Revert "Add extern_protected_data and set it for x86"Alan Modra6-17/+18
This reverts commit ca3fe95e469b9daec153caa2c90665f5daaec2b5.
2015-04-10Automatic date update in version.inGDB Administrator1-1/+1
2015-04-09Update comments in compress.cH.J. Lu2-6/+9
* compress.c (bfd_compress_section_contents): Update comments. (bfd_init_section_decompress_status): Likewise. (bfd_init_section_compress_status): Likewise.
2015-04-09Properly check --compress-debug-sections=XXXH.J. Lu2-2/+10
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-09xtensa: update bfd/ChangelogMax Filippov1-0/+75
2015-04-09xtensa: replace action list with splay treeMax Filippov1-206/+282
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-09xtensa: optimize find_removed_literalMax Filippov1-6/+58
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-09xtensa: optimize removed_by_actionsMax Filippov1-25/+156
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-09xtensa: optimize check_section_ebb_pcrels_fitMax Filippov1-23/+298
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-09Add support to the RX toolchain to restrict the use of string instructions.Nick Clifton2-1/+25
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-09Automatic date update in version.inGDB Administrator1-1/+1
2015-04-08Work around a GCC uninitialized warning bugH.J. Lu2-0/+10
* compress.c (bfd_compress_section_contents): Work around a GCC uninitialized warning bug fixed in GCC 4.7.
2015-04-08Add SHF_COMPRESSED support to gas and objcopyH.J. Lu6-95/+457
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-08Automatic date update in version.inGDB Administrator1-1/+1
2015-04-07Modify get_reloc_section for targets that map .got.plt to .gotAlan Modra2-1/+14
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-07PowerPC non-PIC to PIC editing for protected var accessAlan Modra3-38/+239
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-07Treat assembler generated local labels as local.Nick Clifton2-0/+9
* elf.c (_bfd_elf_is_local_label_name): Treat assembler generated local labels as local.
2015-04-07Automatic date update in version.inGDB Administrator1-1/+1
2015-04-06Use bfd_putb64/bfd_getb64H.J. Lu2-31/+10
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-06Automatic date update in version.inGDB Administrator1-1/+1
2015-04-05Automatic date update in version.inGDB Administrator1-1/+1
2015-04-04Also preserve the SHF_COMPRESSED bitH.J. Lu2-0/+10
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-04Replace uncompressed_size_buffer with compressed_size_bufferH.J. Lu1-9/+9
2015-04-04Extract get_uncompressed_sizeH.J. Lu2-9/+27
* compress.c (get_uncompressed_size): New. Extracted from ... (bfd_init_section_decompress_status): This. Use it.
2015-04-04Automatic date update in version.inGDB Administrator1-1/+1
2015-04-03Automatic date update in version.inGDB Administrator1-1/+1
2015-04-02Add support for configuring an aarch64-freebsd target.Andrew Turner2-0/+9
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-02Regenerate configure in bfd/binutils/gas/gdb/goldH.J. Lu2-2/+6
bfd/ * configure: Regenerated. binutils/ * configure: Regenerated. gas/ * configure: Regenerated. gdb/ * Makefile.in (top_srcdir): New. * configure: Regenerated. gold/ * configure: Regenerated.
2015-04-02Automatic date update in version.inGDB Administrator1-1/+1
2015-04-01[AArch64] Workaround for Cortex A53 erratum 843419Marcus Shawcroft6-13/+516
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-01Regenerate configure in bfd/binutils/gas/gdbH.J. Lu2-2/+8
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.