aboutsummaryrefslogtreecommitdiff
path: root/gold
AgeCommit message (Collapse)AuthorFilesLines
2012-08-31 * powerpc.cc (Powerpc_relobj): Add and use Address typedef.Alan Modra2-315/+1477
(Powerpc_relobj::toc_base_offset): New stub function. (Target_powerpc): Add tp_offset, dtp_offset. Rename got_mod_index_offset to tlsld_got_offset. Update all refs. (Target_powerpc::Relocate::enum skip_tls): New. (Target_powerpc::call_tls_get_addr_): New var. (Target_powerpc::is_branch_reloc): Move to file scope. (Target_powerpc::relocate_tls, optimize_tls_reloc): Delete. (Target_powerpc::optimize_tls_gd, optimize_tls_ld, optimize_tls_ie): New functions. (Target_powerpc::enum Got_type): Delete old values, add new ones. (powerpc_info): Correct common_pagesize for ppc64. (at_tls_transform, needs_dynamic_reloc, use_plt_offset): New functions. (Powerpc_relocate_functions): Add overflow check enums and functions. Add non-shift version of rela, rela_ua. Delete all rel public functions. Delete addr16_lo. Add addr64, addr64_u, addr32, addr32_u, addr24, addr16_u, addr16_hi2, addr16_ha2, addr16_hi3, addr16_ha3, addr14 functions. (Output_data_got_powerpc::add_constant_pair): New function. (Output_data_got_powerpc::got_base_offset): Likewise. (Output_data_got_powerpc::do_write): Correct 64-bit got header. (instruction constants): Sort, add some more. (Output_data_glink::do_write): Add and use Address typedef. Use object->toc_base_offset() stub for 64-bit. (Target_powerpc::tlsld_got_offset): Use add_constant_pair. (Target_powerpc::Scan::get_reference_flags): Handle more relocs. (Target_powerpc::Scan::local, global): Emit relative dynamic reloc for R_PPC64_TOC. Handle more relocs. Generate got entries for TLS. Always treat .opd relocs as against locally defined symbol. Correct condition for RELATIVE relocs. (Target_powerpc::do_finalize_sections): Test for NULL sections. (Target_powerpc::Relocate::relocate): Use plt call stub as value for 32-bit syms with a plt entry. Correct ppc64 toc base calculations. Handle TLS relocs, and more. Add overflow checking and adjust for Powerpc_relocate_functions changes. (Target_powerpc::relocate_for_relocatable): Handle zero r_sym. Reinstate --emit-relocs code with FIXME.
2012-08-30 * layout.cc (Layout::set_segment_offsets): Set p_align toAlan Modra2-2/+9
abi_pagesize, not common_pagesize. (Layout::relaxation_loop_body): Similarly use abi_pagesize to determine whether file header can go in segment.
2012-08-30 * output.h (Output_reloc::Output_reloc <output section>): AddAlan Modra3-71/+122
is_relative param. Adjust calls. (Output_reloc::add_output_section_relative): New functions. * output.cc (Output_reloc::Output_reloc <output section>): Handle is_relative. (Output_reloc::symbol_value): Handle SECTION_CODE.
2012-08-24Patch adds support to allow plugins to map selected subset of sections to uniqueSriraman Tallam12-114/+484
segments. 2012-08-24 Sriraman Tallam <tmsriram@google.com> * gold.cc (queue_middle_tasks): Call layout again when unique segments for sections is desired. * layout.cc (Layout::Layout): Initialize new members. (Layout::get_output_section_flags): New function. (Layout::choose_output_section): Call get_output_section_flags. (Layout::layout): Make output section for mapping to a unique segment. (Layout::insert_section_segment_map): New function. (Layout::attach_allocated_section_to_segment): Make unique segment for output sections marked so. (Layout::segment_precedes): Check for unique segments when sorting. * layout.h (Layout::Unique_segment_info): New struct. (Layout::Section_segment_map): New typedef. (Layout::insert_section_segment_map): New function. (Layout::get_output_section_flags): New function. (Layout::is_unique_segment_for_sections_specified): New function. (Layout::set_unique_segment_for_sections_specified): New function. (Layout::unique_segment_for_sections_specified_): New member. (Layout::section_segment_map_): New member. * object.cc (Sized_relobj_file<size, big_endian>::do_layout): Rename is_gc_pass_one to is_pass_one. Rename is_gc_pass_two to is_pass_two. Rename is_gc_or_icf to is_two_pass. Check for which pass based on whether symbols data is present. Make it two pass when unique segments for sections is desired. * output.cc (Output_section::Output_section): Initialize new members. * output.h (Output_section::is_unique_segment): New function. (Output_section::set_is_unique_segment): New function. (Output_section::is_unique_segment_): New member. (Output_section::extra_segment_flags): New function. (Output_section::set_extra_segment_flags): New function. (Output_section::extra_segment_flags_): New member. (Output_section::segment_alignment): New function. (Output_section::set_segment_alignment): New function. (Output_section::segment_alignment_): New member. (Output_segment::Output_segment): Initialize is_unique_segment_. (Output_segment::is_unique_segment): New function. (Output_segment::set_is_unique_segment): New function. (Output_segment::is_unique_segment_): New member. * plugin.cc (allow_unique_segment_for_sections): New function. (unique_segment_for_sections): New function. (Plugin::load): Add new functions to transfer vector. * Makefile.am (plugin_final_layout.readelf.stdout): Add readelf output. * Makefile.in: Regenerate. * testsuite/plugin_final_layout.sh: Check if unique segment functionality works. * testsuite/plugin_section_order.c (onload): Check if new interfaces are available. (allow_unique_segment_for_sections): New global. (unique_segment_for_sections): New global. (claim_file_hook): Call allow_unique_segment_for_sections. (all_symbols_read_hook): Call unique_segment_for_sections. 2012-08-24 Sriraman Tallam <tmsriram@google.com> * plugin-api.h (ld_plugin_allow_unique_segment_for_sections): New interface. (ld_plugin_unique_segment_for_sections): New interface. (LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS): New enum val. (LDPT_UNIQUE_SEGMENT_FOR_SECTIONS): New enum val. (tv_allow_unique_segment_for_sections): New member. (tv_unique_segment_for_sections): New member.
2012-08-222012-08-22 Cary Coutant <ccoutant@google.com>Cary Coutant2-2/+6
gold/ * layout.cc (Layout::include_section): Don't assert on GROUP sections with --emit-relocs.
2012-08-212012-08-21 Cary Coutant <ccoutant@google.com>Cary Coutant2-2/+9
gold/ * symtab.cc (Symbol_table::gc_mark_undef_symbols): Don't assert if --export-dynamic-symbol names an undef symbol.
2012-08-18 * powerpc.cc: Formatting and white space.Alan Modra3-212/+409
(Powerpc_relobj): Rename got2_section_ to special_. Add opd_ent_shndx_ and opd_ent_off_ vectors. (Powerpc_relobj::opd_shndx, init_opd, get_opd_ent, set_opd_ent, scan_opd_relocs, do_read_relocs, opd_ent_ndx): New functions. (Target_powerpc): Add Address typedef and invalid_address. Use throughout. (Target_powerpc::is_branch_reloc): New function. (Powerpc_relocate_functions): Add Address typedef, use throughout. (Powerpc_relocate_functions:rela, rela_ua): Correct type used for dst_mask, value and addend. (Powerpc_relobj::do_find_special_sections): Find .opd for 64-bit. (ld_2_1, cror_15_15_15, cror_31_31_31): New insn constants. (Output_data_glink::do_write): Correct toc base. Don't try to use uint16_t for 24-bit offset. Use get_output_section_offset and check return. (Target_powerpc::Scan::local): Handle more relocs. (Target_powerpc::do_finalize_sections): Set up DT_PPC64_GLINK. (Target_powerpc::Relocate::relocate): Correct toc base calculation. Plug in toc restoring insn after plt calls. Translate branches to function descriptor symbols to corresponding entry point. (Target_powerpc::relocate_for_relocatable): Check return from get_output_section_offset. * symtab.h: Comment typo.
2012-08-15 * x86_64.cc (Target_x86_64::Scan::global): Fix erroneous call toIan Lance Taylor2-1/+6
unsupported_relocal_local to call unsupported_reloc_global.
2012-08-14 PR ld/14265Nick Clifton11-18/+178
* script-sections.cc (Sections_element::output_section_name): Add keep return parameter. (Output_section_element::match_name): Add keep return parameter. Return the value of the keep_ member. * script-sections.h (class Output_section): Update output_section_name prototype. * layout.cc (Layout::keep_input_section): New public member function. (Layout::choose_output_section): Pass keep parameter to output_section_name. * layout.h (class Layout): Add keep_input_section. * object.cc (Sized_relobj_file::do_layout): Check for kept input sections. * testsuite/Makefile.am: Add a test. * testsuite/Makefile.in: Regenerate. * testsuite/pr14265.c: Source file for the test. * testsuite/pr14265.t: Linker script for the test. * testsuite/pr14265.sh: Shell script for the test. * ld-gc/gc.exp: Add a new test. * ld-gc/pr14265.c: Source file for the new test. * ld-gc/pr14265.t: Linker script for the new test. * ld-gc/pr14265.d: Expected symbol dump.
2012-08-14 * target.h (Target::output_section_name): New function.Alan Modra4-1/+40
(Target::do_output_section_name): New function. * layout.cc (Layout::choose_output_section): Call the above. * powerpc.cc (Target_powerpc::do_output_section_name): New function.
2012-08-14elfcpp/Alan Modra2-21/+47
* powerpc.h: Add more relocs. (R_PPC_REL16*): Rename to R_POWERPC_REL16*. gold/ * powerpc.cc: Update for renamed R_PPC_REL16 relocs. (Output_data_got_powerpc::do_write): Don't rely on base class lookup for replace_constant call. (Output_data_plt_powerpc::do_print_to_mapfile): New function. (Output_data_glink::do_print_to_mapfile): New function. (Target_powerpc::Scan::local): Ignore R_PPC64_TOCSAVE. (Target_powerpc::Relocate::relocate): Likewise.
2012-08-14 * powerpc.cc (Powerpc_relobj::set_got2_shndx): Delete.Alan Modra2-61/+50
(Powerpc_relobj::do_find_special_sections): Don't use set_got2_shndx. (Output_data_glink::add_entry,find_entry): Remove shndx param. (class Glink_sym_ent): Rename from struct Glink_sym_ent. Remove all references to shndx_. Handle special case for R_PPC_PLTREL24 here. (class Glink_sym_ent_hash): Rename from struct Glink_sym_ent_hash. (Output_data_glink::do_write): Retrieve got2_shdnx from object. (Target_powerpc::make_plt_entry): Don't special case R_PPC_PLTREL24 here. (Target_powerpc::Scan::global): Nor on make_plt_entry call. (Target_powerpc::Relocate::relocate): Nor on glink->find_entry call.
2012-08-12 * powerpc.cc: Whitespace fixes. Wrap overly long lines.Alan Modra2-156/+169
(glink insn constants): Use uint32_t. (Output_data_glink::add_entry): Use insert, not [] operator.
2012-08-11 * object.h (Sized_relobj_file::find_shdr): New function.Alan Modra6-599/+1367
(Sized_relobj_file::find_special_sections): New function. * object.cc (Sized_relobj_file::find_shdr): New function. (Sized_relobj_file::find_eh_frame): Use find_shdr. (Sized_relobj_file::find_special_sections): New function, split out.. (Sized_relobj_file::do_read_symbols): ..from here. * output.h (Output_data_got::replace_constant): New function. (Output_data_got::num_entries): New function. (Output_data_got::last_got_offset,set_got_size): Use num_entries. (Output_data_got::got_offset): Protected rather than private. (Output_data_got::replace_got_entry): New function. * output.cc (Output_data_got::replace_got_entry): New function. * powerpc.cc (class Powerpc_relobj): New. (class Powerpc_relocate_functions): Delete all psymval variants or convert to value,addend type. Delete pcrela, pcrela_unaligned. Implement _ha functions using corresponding _hi function. (Powerpc_relobj::find_special_sections): New function. (Target_powerpc::do_make_elf_object): New function. (class Output_data_got_powerpc): New. (class Output_data_glink): New. (class Powerpc_scan_relocatable_reloc): New. Many more changes througout file.
2012-08-09Updated Vietnamese translation.Nick Clifton2-98/+107
2012-08-07 * layout.cc (Layout::add_target_dynamic_tags): IfIan Lance Taylor2-9/+22
dynrel_includes_plt but no dyn_rel, emit dynamic reloc tags for plt_rel.
2012-07-30Updated translationsNick Clifton2-5/+10
2012-07-192012-07-18 Cary Coutant <ccoutant@google.com>Cary Coutant10-180/+257
PR gold/14344 * configure.ac: Add check for -gpubnames support. * configure: Regenerate. * testsuite/Makefile.am (gdb_index_test_1): Add check for -gpubnames support; force -gno-pubnames. (gdb_index_test_2, gdb_index_test_3): Add check for -gpubnames support. (gdb_index_test_4): New test. * testsuite/Makefile.in: Regenerate. * testsuite/gdb_index_test_1.sh: Refactor code into common file. * testsuite/gdb_index_test_2.sh: Likewise. * testsuite/gdb_index_test_3.sh: Don't look for space after colon. * testsuite/gdb_index_test_4.sh: New script. * testsuite/gdb_index_test_comm.sh: New script with common code; don't look for space after colon.
2012-07-162012-07-16 Sriraman Tallam <tmsriram@google.com>Sriraman Tallam2-8/+13
* gold.cc (queue_middle_tasks): Update function order only after deferred objects due to plugins are processed.
2012-07-11 * arm.cc (Arm_relocate_functions::abs16): Remove unused typedef.Ian Lance Taylor7-16/+14
(Arm_exidx_cantunwind::do_fixed_endian_write): Likewise. (Target_arm::scan_reloc_for_stub): Likewise. * common.cc (Symbol_table::do_allocate_commons_list): Likewise. * dwarf_reader.cc (Dwarf_die::skip_attributes): Likewise. * ehframe.cc (Eh_frame::do_add_ehframe_input_section): Likewise. * incremental.cc (Sized_incr_dynobj::do_add_symbols): Likewise. * powerpc.cc (Target_powerpc::relocate_tls): Likewise.
2012-07-10 PR gold/14309Ian Lance Taylor6-0/+85
* configure.ac: Test whether std::tr1::hash<off_t> works. * gold.h: Add a specialization for std::tr1::hash<off_t> if needed. * output.h (class Output_fill): Add virtual destructor. * configure, config.in: Rebuild.
2012-06-22gold/Roland McGrath2-0/+14
* layout.cc (finalize): Define __ehdr_start symbol if applicable.
2012-06-122012-06-12 Rafael Ávila de Espíndola <respindola@mozilla.com>Rafael Ávila de Espíndola2-0/+6
* plugin.cc (Plugin::load): Handle position independent executables.
2012-06-07gold/Cary Coutant3-38/+108
* layout.cc (gdb_sections): Remove ".debug_" prefixes, add .debug_macro. (lines_only_debug_sections): Likewise. (gdb_fast_lookup_sections): New static array. (is_gdb_debug_section): Rename formal parameter. (is_lines_only_debug_section): Likewise. (is_gdb_fast_lookup_section): New function. (Layout::include_section): Check for ".zdebug_" prefix; pass section name suffix to is_gdb_debug_section, et al.; check for fast-lookup sections when building .gdb_index. * options.h (--strip-debug-gdb): Update GDB version number.
2012-06-06gold/Cary Coutant6-18/+52
* configure.ac: Add check for fallocate. * configure: Regenerate. * config.in: Regenerate. * options.h (class General_options): Add --mmap-output-file and --posix-fallocate options. * output.cc: (posix_fallocate): Remove; replace with... (gold_fallocate): New function. (Output_file::map_no_anonymous): Call gold_fallocate. (Output_file::map): Check --mmap-output-file option.
2012-06-062012-06-05 Jing Yu <jingyu@google.com>Doug Kwan2-2/+7
* gold.h (textdomain): Add do {} to empty while(0). (bindtextdomain): Likewise.
2012-06-04 * dynobj.cc (Sized_dynobj::do_get_global_symbol_counts): CallCary Coutant2-1/+6
has_dynsym_index.
2012-05-252012-05-25 Sriraman Tallam <tmsriram@google.com>Sriraman Tallam2-0/+6
* symtab.cc (Symbol_table::define_special_symbol): Initialize *poldsym to prevent uninitialized variable errors.
2012-05-24gold/Cary Coutant2-3/+24
* layout.cc (Layout::section_name_mapping): Add rules to handle exact match on .data.rel.ro.local or .data.rel.ro. (Layout::output_section_name): Check for exact matches.
2012-05-23gold/Cary Coutant2-2/+7
* layout.cc (Layout::section_name_mapping): Match .data.rel.ro.* more carefully.
2012-05-22gold/Cary Coutant2-2/+8
* symtab.cc (Symbol::should_add_dynsym_entry): Check for relocatable object before exporting symbol.
2012-05-21Include "config.h" firstH.J. Lu3-2/+7
* testsuite/tls_test.cc: Include "config.h" first. * testsuite/tls_test_c.c: Likewise.
2012-05-17 PR 14072Nick Clifton4-0/+27
* configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * sysdep.h: Generate an error if included before config.h. * alpha-opc.c: Include sysdep.h before any other header file. * alpha-dis.c: Likewise. * avr-dis.c: Likewise. * cgen-opc.c: Likewise. * cr16-dis.c: Likewise. * cris-dis.c: Likewise. * crx-dis.c: Likewise. * d10v-dis.c: Likewise. * d10v-opc.c: Likewise. * d30v-dis.c: Likewise. * d30v-opc.c: Likewise. * h8500-dis.c: Likewise. * i370-dis.c: Likewise. * i370-opc.c: Likewise. * m10200-dis.c: Likewise. * m10300-dis.c: Likewise. * micromips-opc.c: Likewise. * mips-opc.c: Likewise. * mips61-opc.c: Likewise. * moxie-dis.c: Likewise. * or32-opc.c: Likewise. * pj-dis.c: Likewise. * ppc-dis.c: Likewise. * ppc-opc.c: Likewise. * s390-dis.c: Likewise. * sh-dis.c: Likewise. * sh64-dis.c: Likewise. * sparc-dis.c: Likewise. * sparc-opc.c: Likewise. * spu-dis.c: Likewise. * tic30-dis.c: Likewise. * tic54x-dis.c: Likewise. * tic80-dis.c: Likewise. * tic80-opc.c: Likewise. * tilegx-dis.c: Likewise. * tilepro-dis.c: Likewise. * v850-dis.c: Likewise. * v850-opc.c: Likewise. * vax-dis.c: Likewise. * w65-dis.c: Likewise. * xgate-dis.c: Likewise. * xtensa-dis.c: Likewise. * rl78-decode.opc: Likewise. * rl78-decode.c: Regenerate. * rx-decode.opc: Likewise. * rx-decode.c: Regenerate. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * sysdep.h: Generate an error if included before config.h. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * aclocal.m4: Regenerate. * bfd-in.h: Generate an error if included before config.h. * sysdep.h: Likewise. * bfd-in2.h: Regenerate. * compress.c: Remove #include "config.h". * plugin.c: Likewise. * elf32-m68hc1x.c: Include sysdep.h before alloca-conf.h. * elf64-hppa.c: Likewise. * som.c: Likewise. * xsymc.c: Likewise. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * aclocal.m4: Regenerate. * Makefile.am: Use wrappers around C files generated by flex. * Makefile.in: Regenerate. * doc/Makefile.in: Regenerate. * itbl-lex-wrapper.c: New file. * config/bfin-lex-wrapper.c: New file. * cgen.c: Include as.h before setjmp.h. * config/tc-dlx.c: Include as.h before any other header. * config/tc-h8300.c: Likewise. * config/tc-lm32.c: Likewise. * config/tc-mep.c: Likewise. * config/tc-microblaze.c: Likewise. * config/tc-mmix.c: Likewise. * config/tc-msp430.c: Likewise. * config/tc-or32.c: Likewise. * config/tc-tic4x.c: Likewise. * config/tc-tic54x.c: Likewise. * config/tc-xtensa.c: Likewise. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * unwind-ia64.h: Include config.h.
2012-05-14gold/Cary Coutant3-1/+13
* layout.cc (Layout::make_output_section): Mark .tdata section as RELRO. * testsuite/relro_test.cc: Add a TLS variable.
2012-05-11Handle R_X86_64_64 properly for x32H.J. Lu2-1/+10
elfcpp/ PR gold/14091 * x86_64.h (R_X86_64_RELATIVE64): New. gold/ PR gold/14091 * x86_64.cc (Target_x86_64::Scan::local): For x32, generate R_X86_64_RELATIVE64 instead of R_X86_64_RELATIVE in case of R_X86_64_64.
2012-05-08gold/Cary Coutant2-5/+14
* layout.cc (gdb_sections): Update GDB version, add .debug_addr. (lines_only_debug_sections): Likewise.
2012-05-02 * configure.ac (ENABLE_GOLD): Consider *-*-nacl* targets ELF.Roland McGrath21-2575/+4617
* configure: Regenerate. gold/ * nacl.cc: New file. * nacl.h: New file. * Makefile.am (CCFILES, HFILES): Add them. * Makefile.in: Regenerate. * i386.cc (Output_data_plt_i386_nacl): New class. (Output_data_plt_i386_nacl_exec): New class. (Output_data_plt_i386_nacl_dyn): New class. (Target_i386_nacl): New class. (Target_selector_i386_nacl): New class. (target_selector_i386): Use it instead of Target_selector_i386. * x86_64.cc (Output_data_plt_x86_64_nacl): New class. (Target_x86_64_nacl): New class. (Target_selector_x86_64_nacl): New class. (target_selector_x86_64, target_selector_x32): Use it instead of Target_selector_x86_64. * arm.cc (Output_data_plt_arm_nacl): New class. (Target_arm_nacl): New class. (Target_selector_arm_nacl): New class. (target_selector_arm, target_selector_armbe): Use it instead of Target_selector_arm. * target-select.cc (select_target): Take new Input_file* and off_t arguments, pass them on to recognize method of selector. * object.cc (make_elf_sized_object): Update caller. * parameters.cc (parameters_force_valid_target): Likewise. * incremental.cc (make_sized_incremental_binary): Likewise. * target-select.h: Update decl. (Target_selector::recognize): Take new Input_file* argument, pass it on to do_recognize. (Target_selector::do_recognize): Take new Input_file* argument. * freebsd.h (Target_selector_freebsd::do_recognize): Likewise. * powerpc.cc (Target_selector_powerpc::do_recognize): Likewise. * sparc.cc (Target_selector_sparc::do_recognize): Likewise. * testsuite/testfile.cc (Target_selector::do_recognize): Likewise. * target.h (Target::Target_info): New members isolate_execinstr and rosegment_gap. (Target::isolate_execinstr, Target::rosegment_gap): New methods. * arm.cc (Target_arm::arm_info): Update initializer. * i386.cc (Target_i386::i386_info): Likewise. * powerpc.cc (Target_powerpc::powerpc_info): Likewise. * sparc.cc (Target_sparc::sparc_info): Likewise. * x86_64.cc (Target_x86_64::x86_64_info): Likewise. * testsuite/testfile.cc (Target_test::test_target_info): Likewise. * layout.cc (Layout::attach_allocated_section_to_segment): Take new const Target* argument. If target->isolate_execinstr(), act like --rosegment. (Layout::find_first_load_seg): Take new const Target* argument; if target->isolate_execinstr(), reject PF_X segments. (Layout::relaxation_loop_body): Update caller. (Layout::set_segment_offsets): If target->isolate_execinstr(), reset file offset to zero when we hit LOAD_SEG, and then do a second loop over the segments before LOAD_SEG to reassign offsets after addresses have been determined. Handle target->rosegment_gap(). (Layout::attach_section_to_segment): Take new const Target* argument; pass it to attach_allocated_section_to_segment. (Layout::make_output_section): Update caller. (Layout::attach_sections_to_segments): Take new const Target* argument; pass it to attach_section_to_segment. * gold.cc (queue_middle_tasks): Update caller. * layout.h (Layout): Update method decls with new arguments. * arm.cc (Target_arm::Target_arm): Take optional argument for the Target_info pointer to use. (Target_arm::do_make_data_plt): New virtual method. (Target_arm::make_data_plt): New method that calls it. (Target_arm::make_plt_entry): Use it. (Output_data_plt_arm::Output_data_plt_arm): Take additional argument for the section alignment. (Output_data_plt_arm::do_first_plt_entry_offset): New abstract virtual method. (Output_data_plt_arm::first_plt_entry_offset): Call it. (Output_data_plt_arm::do_get_plt_entry_size): New abstract virtual method. (Output_data_plt_arm::get_plt_entry_size): Call it. (Output_data_plt_arm::do_fill_plt_entry): New abstract virtual method. (Output_data_plt_arm::fill_plt_entry): New method that calls it. (Output_data_plt_arm::do_fill_first_plt_entry): New abstract virtual method. (Output_data_plt_arm::fill_first_plt_entry): New method that calls it. (Output_data_plt_arm::set_final_data_size): Use get_plt_entry_size method instead of sizeof(plt_entry). (Output_data_plt_arm::add_entry): Likewise. Use first_plt_entry_offset method instead of sizeof(first_plt_entry). (Target_arm::first_plt_entry_offset): Call method on this->plt_ rather than static method. (Target_arm::plt_entry_size): Likewise. (Output_data_plt_arm::first_plt_entry, Output_data_plt_arm::plt_entry): Move to ... (Output_data_plt_arm_standard): ... here, new class. (Output_data_plt_arm::do_write): Move guts of PLT filling to... (Output_data_plt_arm_standard::do_fill_first_plt_entry): ... here ... (Output_data_plt_arm_standard::do_fill_plt_entry): ... and here. * x86_64.cc (Output_data_plt_x86_64::Output_data_plt_x86_64): Take additional argument for the PLT entry size. (Output_data_plt_x86_64::get_tlsdesc_plt_offset): Use get_plt_entry_size method rather than plt_entry_size variable. (Output_data_plt_x86_64::reserve_slot): Likewise. (Output_data_plt_x86_64::do_adjust_output_section): Likewise. (Output_data_plt_x86_64::add_entry): Likewise. (Output_data_plt_x86_64::add_local_ifunc_entry): Likewise. (Output_data_plt_x86_64::address_for_global): Likewise. (Output_data_plt_x86_64::address_for_local): Likewise. (Output_data_plt_x86_64::set_final_data_size): Likewise. (Output_data_plt_x86_64::first_plt_entry_offset): Likewise. Make method non-static. (Output_data_plt_x86_64::do_get_plt_entry_size): New abstract virtual method. (Output_data_plt_x86_64::get_plt_entry_size): Just call that. (Output_data_plt_x86_64::do_add_eh_frame): New abstract virtual method. (Output_data_plt_x86_64::add_eh_frame): New method to call it. (Output_data_plt_x86_64::do_fill_first_plt_entry): New abstract virtual method. (Output_data_plt_x86_64::fill_first_plt_entry): New method to call it. (Output_data_plt_x86_64::do_fill_plt_entry): New abstract virtual method. (Output_data_plt_x86_64::fill_plt_entry): New method to call it. (Output_data_plt_x86_64::do_fill_tlsdesc_entry): New abstract virtual method. (Output_data_plt_x86_64::fill_tlsdesc_entry): New method to call it. (Output_data_plt_x86_64::plt_entry_size) (Output_data_plt_x86_64::first_plt_entry) (Output_data_plt_x86_64::plt_entry) (Output_data_plt_x86_64::tlsdesc_plt_entry) (Output_data_plt_x86_64::plt_eh_frame_fde_size) (Output_data_plt_x86_64::plt_eh_frame_fde): Move to ... (Output_data_plt_x86_64_standard): ... here, new class. (Target_x86_64::Target_x86_64): Take optional argument for the Target_info pointer to use. (Target_x86_64::do_make_data_plt): New virtual method. (Target_x86_64::make_data_plt): New method to call it. (Target_x86_64::init_got_plt_for_update): Use that. Call this->plt_->add_eh_frame method here. (Output_data_plt_x86_64::init): Don't do add_eh_frame_for_plt here. (Target_x86_64::first_plt_entry_offset): Call method on this->plt_ rather than static method. (Target_x86_64::plt_entry_size): Likewise. (Output_data_plt_x86_64::do_write): Use get_plt_entry_size method rather than plt_entry_size variable. Move guts of PLT filling to... (Output_data_plt_x86_64_standard::do_fill_first_plt_entry): ... here ... (Output_data_plt_x86_64_standard::do_fill_plt_entry): ... and here ... (Output_data_plt_x86_64_standard::do_fill_tlsdesc_entry): ... and here. * i386.cc (Output_data_plt_i386::Output_data_plt_i386): Take additional argument for the section alignment. Don't do add_eh_frame_for_plt here. (Output_data_plt_i386::first_plt_entry_offset): Make the method non-static. Use get_plt_entry_size method rather than plt_entry_size variable. (Output_data_plt_i386::do_get_plt_entry_size): New abstract virtual method. (Output_data_plt_i386::get_plt_entry_size): Call it. (Output_data_plt_i386::do_add_eh_frame): New abstract virtual method. (Output_data_plt_i386::add_eh_frame): New method to call it. (Output_data_plt_i386::do_fill_first_plt_entry): New abstract virtual method. (Output_data_plt_i386::fill_first_plt_entry): New method to call it. (Output_data_plt_i386::do_fill_plt_entry): New abstract virtual method. (Output_data_plt_i386::fill_plt_entry): New method to call it. (Output_data_plt_i386::set_final_data_size): Use get_plt_entry_size method instead of plt_entry_size. (Output_data_plt_i386::plt_entry_size) (Output_data_plt_i386::plt_eh_frame_fde_size) (Output_data_plt_i386::plt_eh_frame_fde): Move to ... (Output_data_plt_i386_standard): ... here, new class. (Output_data_plt_i386_exec): New class. (Output_data_plt_i386::exec_first_plt_entry): Move to ... (Output_data_plt_i386_exec::first_plt_entry): ... here. (Output_data_plt_i386::exec_plt_entry): Move to ... (Output_data_plt_i386_exec::plt_entry): ... here. (Output_data_plt_i386_dyn): New class. (Output_data_plt_i386::first_plt_entry): Move to ... (Output_data_plt_i386_dyn::first_plt_entry): ... here. (Output_data_plt_i386::dyn_plt_entry): Move to ... (Output_data_plt_i386_dyn::plt_entry): ... here. (Target_i386::Target_i386): Take optional argument for the Target_info pointer to use. (Target_i386::do_make_data_plt): New virtual method. (Target_i386::make_data_plt): New method to call it. (Target_i386::make_plt_section): Use that. Call this->plt_->add_eh_frame method here. (Output_data_plt_i386::add_entry): Use get_plt_entry_size method rather than plt_entry_size variable. (Output_data_plt_i386::add_local_ifunc_entry): Likewise. (Output_data_plt_i386::address_for_local): Likewise. (Output_data_plt_i386::do_write): Likewise. Move guts of PLT filling to... (Output_data_plt_i386_exec::do_fill_first_plt_entry): ... here ... (Output_data_plt_i386_exec::do_fill_plt_entry): ... and here ... (Output_data_plt_i386_dyn::do_fill_first_plt_entry): ... and here ... (Output_data_plt_i386_dyn::do_fill_plt_entry): ... and here. Change-Id: Id24b95600489835ff5e860a39c147203d4380c2b
2012-05-01elfcpp/Cary Coutant3-9/+11
* dwarf.h (enum DW_TAG, enum DW_FORM, enum DW_AT, enum DW_ENCODING) (enum DW_OP, enum DW_CFA): Remove. Include dwarf2.def. gold/ * dwarf_reader.cc (Dwarf_die::read_attributes) (Dwarf_die::skip_attributes, Dwarf_die::int_attribute) (Dwarf_die::uint_attribute): Remove DW_FORM_null. * reduced_debug_output.cc (Output_reduced_debug_info_section::get_die_end): Remove DW_FORM_GNU_ref_index. Add default case.
2012-05-01 [Checking in missing files from previous commit.]Cary Coutant2-0/+88
* testsuite/gdb_index_test_3.c: New test source file. * testsuite/gdb_index_test_3.sh: New test source file.
2012-05-01gold: Handle DW_AT_high_pc as offset from DW_AT_low_pc in gdb-index.cc.Mark Wielaard6-24/+82
* dwarf_reader.cc (Dwarf_die::address_attribute): New function. * dwarf_reader.h (Dwarf_die::address_attribute): Likewise. * gdb-index.cc (Gdb_index_info_reader::record_cu_ranges): Handle DW_AT_high_pc as offset from DW_AT_low_pc. * testsuite/Makefile.am (gdb_index_test_3.sh): New test case. * testsuite/Makefile.in: Regenerate. * testsuite/gdb_index_test_3.c: New test source file. * testsuite/gdb_index_test_3.sh: New test source file.
2012-04-26 * arm.cc (Target_arm::do_is_defined_by_abi): Make sym a constIan Lance Taylor6-11/+26
pointer. (Stub_addend_reader::operator()): Declare Arm_relocate_functions as a class, not a struct. (Target_arm::scan_span_for_cortex_a8_erratum): Likewise. (Target_arm::apply_cortex_a8_workaround): Likewise. * gc.h: Declare Reloc_types as a struct, not a class. * object.h: Declare Symbols_data as a struct. * reloc.h: Declare Read_relocs_data as a struct. * target.h: Declare Relocate_info as a struct.
2012-04-24gold: Add linker relaxation of tail calls on sparc.David S. Miller2-0/+158
gold/ * sparc.cc (Target_sparc::Relocate::relax_call): New function. (Target_sparc::Relocate::relocate): Call it for R_SPARC_WDISP30 and R_SPARC_WPLT30.
2012-04-24 * incremental-dump.cc (find_input_containing_global): ReplaceCary Coutant4-34/+123
magic number with symbolic constant. (dump_incremental_inputs): Update version number. * incremental.cc (Output_section_incremental_inputs): Update version number; import symbolic constants from Incremental_inputs_reader. (Incremental_inputs::create_data_sections): Align relocations section correctly for 64-bit targets. (Output_section_incremental_inputs::set_final_data_size): Use symbolic constants; add padding. (Output_section_incremental_inputs::write_header): Add assert for header_size. (Output_section_incremental_inputs::write_input_files): Add assert for input_entry_size. (Output_section_incremental_inputs::write_info_blocks): Add padding; add assert for object_info_size, input_section_entry_size, global_sym_entry_size. * incremental.h (Incremental_inputs_reader): Add symbolic constants for data structure sizes; use them. (Incremental_input_entry_reader): Import symbolic constants from Incremental_inputs_reader; use them.
2012-04-23gold: Maintain sparc ELF header bits properlyDavid S. Miller2-1/+120
gold/ * sparc.cc (class Target_sparc): Add elf_machine_, elf_flags_, and elf_flags_set_. (Target_sparc::Target_sparc): Initialize new fields. (Target_sparc::do_make_elf_object): New function. (Target_sparc::do_adjust_elf_header): New function.
2012-04-23elfcpp/Cary Coutant2-2/+8
* elfcpp_swap.h (struct Swap_aligned32): New template. gold/ * gdb-index.cc (Gdb_index::do_write): Use Swap_aligned32 for writing CU range table of gdb index.
2012-04-20gold: Fix parameterization of do_adjust_elf_headerDavid S. Miller2-2/+7
gold/ * target.cc (Sized_target::do_adjust_elf_header): Use big_endian instead of false.
2012-04-17gold: Add support for sparc GOTDATA optimizations in Gold.David S. Miller2-1/+113
gold/ * sparc.cc (Target_sparc::got_address): New function. (Sparc_relocate_functions::gdop_hix22): New function. (Sparc_relocate_functions::gdop_lox10): New function. (Target_sparc::Scan::local): Do not emit a GOT entry for GOTDATA relocs. (Target_sparc::Scan::local): Likewise if the global symbol is not preemptible and is not IFUNC. (Target_sparc::Relocate::relocate): Perform GOTDATA code transformations for local and non-preemptible non-IFUNC global symbols.
2012-04-17gold: Fix 64-bit sparc GOLD crash in gdb-index code.David S. Miller2-2/+5
gold/ * gdb-index.cc (Gdb_index::do_write): Use Swap_unaligned when writing out 64-bit part of ranges.
2012-04-17gold: Build Gold IFUNC tests with -fPIC/-fPIE instead of -fpic/-fpie.David S. Miller3-36/+40
gold/ * Makefile.am: Build IFUNC tests with -fPIC and -fPIE instead of -fpic and -fpie respectively. * Makefile.in: Regenerate.
2012-04-17gold: Add sparc IFUNC support to Gold.David S. Miller2-79/+553
elfcpp/ * sparc.h (R_SPARC_JMP_IREL): New relocation. gold/ * sparc.cc (class Target_sparc): Add rela_ifunc_. (Target_sparc::Target_sparc): Initialize new field. (Target_sparc::do_plt_section_for_global): New function. (Target_sparc::do_plt_section_for_local): New function. (Target_sparc::reloc_needs_plt_for_ifunc): New function. (Target_sparc::make_plt_section): New function, broken out of make_plt_entry. Use ORDER_NON_RELRO_FIRST for ".plt". (Target_sparc::make_plt_entry): Call make_plt_section. (Target_sparc::make_local_ifunc_plt_entry): New function. (Target_sparc::rela_ifunc_section): New function. (Target_sparc::plt_section): Remove const. (Output_data_plt_sparc): Update declarations. Define Global_ifunc and Local_ifunc types. Add global_ifuncs_, local_ifuncs_, ifunc_rel_, and ifunc_count_ fields. (Output_data_plt_sparc::Output_data_plt_sparc): Initialize new fields. (Output_data_plt_sparc::add_entry): Handle IFUNC symbols. (Output_data_plt_sparc::add_local_ifunc_entry): New function. (Output_data_plt_sparc::rela_ifunc): New function. (Output_data_plt_sparc::emit_pending_ifunc_relocs): New function. (Output_data_plt_sparc::has_ifunc_section): New function. (Output_data_plt_sparc::entry_count): Include ifunc_count_. (Output_data_plt_sparc::address_for_global): New function. (Output_data_plt_sparc::address_for_local): New function. (Output_data_plt_sparc::plt_index_to_offset): New function. (Output_data_plt_sparc::set_final_data_size): Use plt_index_to_offset and entry_count. (Output_data_plt_sparc::do_write): Use first_plt_entry_offset and entry_count. (Target_sparc::Scan::get_reference_flags): Add R_SPARC_IRELATIVE and R_SPARC_JMP_IREL to switch. (Target_sparc::Scan::check_non_pic): Likewise. (Target_sparc::Scan::local): Handle IFUNC symbols. (Target_sparc::Scan::local): Likewise. (Target_sparc::Relocate::relocate): Likewise, use plt_address_for_global and plt_address_for_local. (Target_sparc::do_finalize_sections): Call emit_pending_ifunc_relocs. Define __rel_iplt_start and __rel_iplt_end if doing a static link.