* x86_64.cc (Target_x86_64::saw_tls_block_reloc_): Remove member.
[binutils-gdb.git] / gold / ChangeLog
index 6e04f6e1a71162d115e4fdb747a709024efc9225..c0dbc263bf82a0d91a1a89a4c1bb3847bd5b2c60 100644 (file)
@@ -1,3 +1,353 @@
+2010-09-14  Cary Coutant  <ccoutant@google.com>
+
+       * x86_64.cc (Target_x86_64::saw_tls_block_reloc_): Remove member.
+       (Target_x86_64::Relocate::relocate_tls): Replace check for
+       saw_tls_block_reloc_ with test for executable section.
+
+2010-09-12  Cary Coutant  <ccoutant@google.com>
+
+       * symtab.h (Symbol::needs_dynamic_reloc): Non-PIC calls from
+       position-independent executables to shared libraries need dynamic
+       relocations.
+       (Symbol::may_need_copy_reloc): Do not generate COPY relocs in
+       position-independent executables.
+       * testsuite/Makefile.am (two_file_mixed_pie_test): New test.
+       * testsuite/Makefile.in: Regenerate.
+
+2010-09-10  Nick Clifton  <nickc@redhat.com>
+
+       PR gold/11997
+       * testsuite/memory_test.t: Discard any sections that are not
+       needed.
+
+2010-09-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gold/11996
+       * object.cc (Sized_relobj::do_finalize_local_symbols): Remove
+       "This::" to work around a bug in gcc 4.2.
+
+       * testsuite/ifuncmain7.c (foo_ifunc): Add __attribute__ ((used)).
+
+2010-09-09  Rafael Espindola  <espindola@google.com>
+
+       * layout.cc (Layout::attach_allocated_section_to_segment): Don't put
+       sections with different PF_X flags in the same segment.
+       (Layout::find_first_load_seg): Search all segments to find the first
+       one.
+       * options.h (rosegment): New.
+
+2010-09-08  Rafael Espindola  <espindola@google.com>
+
+       * layout.cc (Layout::set_segment_offsets): Always advance to a new page.
+
+2010-09-08  Doug Kwan  <dougkwan@google.com>
+
+       * arm.cc (Arm_exidx_cantunwind::do_print_to_mapfile): New method.
+       (Arm_relobj::do_relocate_sections): Add new parameter for output
+       file to match the parent.
+       (Target_arm::scan_reloc_section_for_stubs): Use would-be final values
+       of local symbols instead of input values.  Update code to track
+       changes in gold::relocate_section.
+       * object.cc (Sized_relobj::compute_final_local_value): New methods.
+       (Sized_relobj::compute_final_local_value_internal): New methods.
+       (Sized_relobj::do_finalize_local_symbols): Move code from loop
+       body into private version of Sized_relobj::compute_final_local_value.
+       Call the inline method.
+       * object.h (Symbol_value::Symbol_value): Define destructor.  Free
+       merged symbol value if there is one.
+       (Symbol_value::has_output_value): New method defintiion.
+       (Sized_relobj::Compute_final_local_value_status): New enum type.
+       (Sized_relobj::compute_final_local_value): New methods.
+       (Sized_relobj::compute_final_local_value_internal): New methods.
+       * Makefile.am (check_SCRIPTS): Add arm_branch_out_of_range.sh
+       and arm_cortex_a8.sh.
+       (thumb_bl_out_of_range_local, arm_cortex_a8_b_cond, arm_cortex_a8_bl,
+       arm_cortex_a8_blx, arm_cortex_a8_local, arm_corte_a8_local_reloc):
+       New tests.
+       * Makefile.in: Regenerate.
+       * testsuite/arm_bl_out_of_range.s: Update test.
+       * testsuite/thumb_bl_out_of_range.s: Ditto.
+       * testsuite/thumb_blx_out_of_range.s: Ditto.
+       * testsuite/arm_branch_out_of_range.sh: New file.
+       * testsuite/arm_cortex_a8.sh: Ditto.
+       * testsuite/arm_cortex_a8_b.s: Ditto.
+       * testsuite/arm_cortex_a8_b_cond.s: Ditto.
+       * testsuite/arm_cortex_a8_b_local.s: Ditto.
+       * testsuite/arm_cortex_a8_bl.s: Ditto.
+       * testsuite/arm_cortex_a8_blx.s: Ditto.
+       * testsuite/arm_cortex_a8_local.s: Ditto.
+       * testsuite/arm_cortex_a8_local_reloc.s: Ditto.
+       * testsuite/thumb_bl_out_of_range_local.s: Ditto.
+
+2010-09-08  Rafael Espindola  <espindola@google.com>
+
+       * Makefile.am (memory_test.stdout): Run readelf with -W.
+       * Makefile.in: Regenerate.
+       * testsuite/memory_test.sh: Make the regexps accept both 32 and
+       64 bit output.
+
+2010-09-08  Rafael Espindola  <espindola@google.com>
+
+       * script-sections.cc (Script_sections::add_memory_region): Convert
+       field precision to int.
+       * script.cc (script_set_section_region, script_set_section_region):
+       Convert field precision to int.
+
+2010-09-08  Rafael Espindola  <espindola@google.com>
+
+       * arm.cc (do_finalize_sections): Create the __exidx_start and
+       __exdix_end symbols even when the section is missing.
+
+2010-09-08  Nick Clifton  <nickc@redhat.com>
+
+       * README: Remove claim that MEMORY is not supported.
+       * expression.cc (script_exp_function_origin)
+       (script_exp_function_length): Move from here to ...
+       * script.cc: ... here.
+       (script_set_section_region, script_add_memory)
+       (script_parse_memory_attr, script_include_directive): New
+       functions.
+       * script-sections.cc
+       (class Memory_region): New class.
+       (class Output_section_definition): Add set_memory_region,
+       set_section_vma, set_section_lma and get_section_name methods.
+       (class Script_Sections): Add add_memory_region,
+       find_memory_region, find_memory_region_origin,
+       find_memory_region_length and set_memory_region methods.
+       Have set_section_addresses method walk the list of set memory
+       regions.
+       Extend the print methos to display memory regions.
+       * script-sections.h: Add prototypes for new methods.
+       Add enum for MEMORY region attributes.
+       * yyscript.y: Add support for parsing MEMORY regions.
+       * script-c.h: Add prototypes for new functions.
+       * testsuite/Makefile.am: Add test of MEMORY region functionality.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/memory_test.sh: New script.
+       * testsuite/memory_test.s: New assembler source file.
+       * testsuite/memory_test.t: New linker script.
+
+2010-08-27  Doug Kwan  <dougkwan@google.com>
+
+       * gold/resolve.cc (Symbol_table::should_override): Let a weak
+       reference override an existing dynamic weak reference.
+       * testsuite/Makefile.am: Add new test dyn_weak_ref.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/dyn_weak_ref.sh: New file.
+       * testsuite/dyn_weak_ref_1.c: Ditto.
+       * testsuite/dyn_weak_ref_2.c: Ditto.
+
+2010-08-27  Ian Lance Taylor  <iant@google.com>
+
+       * incremental.h (class Incremental_input_entry): Add virtual
+       destructor.
+
+2010-08-27  Ian Lance Taylor  <iant@google.com>
+
+       * testsuite/start_lib_test_3.c: Mark t3 as used.
+
+2010-08-27  Nick Clifton  <nickc@redhat.com>
+
+       * options.cc (version_script): Fix small typo in previous
+       whitespace tidyup.
+
+2010-08-25  Nick Clifton  <nickc@redhat.com>
+
+       * archive.cc: Formatting fixes: Remove whitespace between
+       typename and following asterisk.  Remove whitespace between
+       function name and opening parenthesis.
+       * archive.h: Likewise.
+       * arm.cc: Likewise.
+       * attributes.cc: Likewise.
+       * attributes.h: Likewise.
+       * common.cc: Likewise.
+       * copy-relocs.cc: Likewise.
+       * dirsearch.h: Likewise.
+       * dynobj.cc: Likewise.
+       * ehframe.cc: Likewise.
+       * ehframe.h: Likewise.
+       * expression.cc: Likewise.
+       * fileread.cc: Likewise.
+       * fileread.h: Likewise.
+       * gc.h: Likewise.
+       * gold-threads.cc: Likewise.
+       * gold.cc: Likewise.
+       * i386.cc: Likewise.
+       * icf.h: Likewise.
+       * incremental-dump.cc: Likewise.
+       * incremental.cc: Likewise.
+       * layout.cc: Likewise.
+       * layout.h: Likewise.
+       * main.cc: Likewise.
+       * merge.cc: Likewise.
+       * merge.h: Likewise.
+       * object.cc: Likewise.
+       * object.h: Likewise.
+       * options.cc: Likewise.
+       * options.h: Likewise.
+       * output.cc: Likewise.
+       * output.h: Likewise.
+       * plugin.cc: Likewise.
+       * plugin.h: Likewise.
+       * powerpc.cc: Likewise.
+       * reloc.cc: Likewise.
+       * script-c.h: Likewise.
+       * script-sections.cc: Likewise.
+       * script.cc: Likewise.
+       * stringpool.cc: Likewise.
+       * symtab.cc: Likewise.
+       * symtab.h: Likewise.
+       * target.cc: Likewise.
+       * timer.cc: Likewise.
+       * timer.h: Likewise.
+       * version.cc: Likewise.
+       * x86_64.cc: Likewise.
+
+2010-08-24  Nick Clifton  <nickc@redhat.com>
+
+       PR 11899
+       * layout.cc (segment_precedes): Sort segments by their physical
+       addresses, if they have been set.
+
+2010-08-23  Cary Coutant  <ccoutant@google.com>
+
+       * archive.cc (Lib_group::add_symbols): Lock object before deleting its
+       symbols data.
+       (Lib_group::include_member): Unlock object after deleting its
+       symbols data.
+       * testsuite/start_lib_test_3.c: Remove all global symbols to trigger
+       the bug fixed here.
+
+2010-08-19  Neil Vachharajani  <nvachhar@google.com>
+           Cary Coutant  <ccoutant@google.com>
+
+       * gold/archive.h (Add_lib_group_symbols): Add readsyms_blocker_, adjust
+       constructor, and set_blocker.
+       * gold/archive.cc (Add_lib_group_symbols::is_runnable): Also check
+       readsyms_blocker_.
+       * gold/readsyms.cc (Read_symbols::do_lib_group): Also pass
+       this->this_blocker_ to Add_lib_group_symbols::set_blocker.
+       * testsuite/Makefile.am (start_lib_test): New test case.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/start_lib_test_main.c: New file.
+       * testsuite/start_lib_test_1.c: New file.
+       * testsuite/start_lib_test_2.c: New file.
+       * testsuite/start_lib_test_3.c: New file.
+
+2010-08-19  Ian Lance Taylor  <iant@google.com>
+
+       * Makefile.in: Rebuild with automake 1.11.1.
+       * aclocal.m4: Likewise.
+       * testsuite/Makefile.in: Likewise.
+
+2010-08-19  Ian Lance Taylor  <iant@google.com>
+
+       PR 10893
+       * i386.cc (class Output_data_plt_i386): Update declarations.
+       Define Global_ifunc and Local_ifunc types.  Add global_ifuncs_ and
+       local_ifuncs_ fields.
+       (Target_i386::do_plt_section_for_global): New function.
+       (Target_i386::do_plt_section_for_local): New function.
+       (Output_data_plt_i386::Output_data_plt_i386): Add symtab
+       parameter; change all callers.  Initialize global_ifuncs_ and
+       local_ifuncs_.  If doing a static link define __rel_iplt_start and
+       __rel_iplt_end.
+       (Output_data_plt_i386::add_entry): Handle IFUNC symbols.
+       (Output_data_plt_i386::add_local_ifunc_entry): New function.
+       (Output_data_plt_i386::do_write): Fix GOT entries for IFUNC
+       symbols.
+       (Target_i386::make_plt_section): New function, broken out of
+       make_plt_entry.  Set sh_info field of .rel.plt to point to .plt.
+       (Target_i386::make_plt_entry): Call make_plt_section.
+       (Target_i386::make_local_ifunc_plt_entry): New function.
+       (Target_i386::Scan::reloc_needs_iplt_for_ifunc): New function.
+       (Target_i386::Scan::local): Handle IFUNC symbols.  Add
+       R_386_IRELATIVE to switch.
+       (Target_i386::Scan::global): Likewise.
+       (Target_i386::Relocate::relocate): Likewise.
+       (Target_i386::Relocatable_size_for_reloc): Add R_386_IRELATIVE to
+       switch.
+       * x86_64.cc (class Output_data_plt_x86_64): Update declarations.
+       (Target_x86_64::do_plt_section_for_global): New function.
+       (Target_x86_64::do_plt_section_for_local): New function.
+       (Output_data_plt_x86_64::Output_data_plt_x86_64): Add symtab
+       parameter; change all callers.  If doing a static link define
+       __rela_iplt_start and __rela_iplt_end.
+       (Output_data_plt_x86_64::add_entry): Handle IFUNC symbols.
+       (Output_data_plt_x86_64::add_local_ifunc_entry): New function.
+       (Target_x86_64::make_plt_section): Set sh_info field of .rel.plt
+       to point to .plt.
+       (Target_x86_64::make_local_ifunc_plt_entry): New function.
+       (Target_x86_64::Scan::check_non_pic): Add R_X86_64_IRELATIVE to
+       switch.
+       (Target_x86_64::Scan::reloc_needs_iplt_for_ifunc): New function.
+       (Target_x86_64::Scan::local): Handle IFUNC symbols.  Add
+       R_X86_64_IRELATIVE to switch.
+       (Target_x86_64::Scan::global): Likewise.
+       (Target_x86_64::Relocate::relocate): Likewise.
+       (Target_x86_64::Relocatable_size_for_reloc): Add R_X86_64_IRELATIVE to
+       switch.
+       * target.h (class Target): Add plt_section_for_global and
+       plt_section_for_local functions.  Add do_plt_section_for_global
+       and do_plt_section_for_local virtual functions.
+       * symtab.h (Symbol::needs_plt_entry): Handle IFUNC symbol.  Add
+       clarifying comments.
+       (Symbol::use_plt_offset): Handle IFUNC symbol.
+       * object.cc (Sized_relobj::Sized_relobj): Initialize
+       local_plt_offsets_.
+       (Sized_relobj::local_has_plt_offset): New function.
+       (Sized_relobj::local_plt_offset): New function.
+       (Sized_relobj::set_local_plt_offset): New function.
+       (Sized_relobj::do_count): Handle IFUNC symbol.
+       * object.h (class Symbol_value): Add is_ifunc_symbol_ field.  Take
+       a bit away from input_shndx_ field.  Add set_is_func_symbol and
+       is_ifunc_symbol functions.
+       (class Sized_relobj): Update declarations.  Remove Tls_got_entry
+       and Local_tls_got_offsets.  Define Local_plt_offsets.  Add
+       local_plt_offsets_ field.
+       (Sized_relobj::clear_local_symbols): Clear local_plt_offsets_.
+       * output.h (class Output_section_data): Add non-const
+       output_section function.
+       (class Output_data_got): Update declarations.
+       (class Output_data_got::Got_entry): Add use_plt_offset_ field.
+       Add use_plt_offset parameter to global and local constructors.
+       Change all callers.  Change local_sym_index_ field to 31 bits.
+       Change GSYM_CODE and CONSTANT_CODE accordingly.
+       * output.cc (Output_data_reloc_base::do_adjust_output_section): If
+       doing a static link don't set sh_link field.
+       (Output_data_got::Got_entry::write): Use PLT offset if
+       appropriate.
+       (Output_data_got::add_global_plt): New function.
+       (Output_data_got::add_local_plt): New function.
+       * target-reloc.h (relocate_section): Handle IFUNC symbol.
+       * defstd.cc (in_section): Remove entries for __rel_iplt_start,
+       __rel_iplt_end, __rela_iplt_start, and __rela_iplt_end.
+       * configure.ac: Set IFUNC automake conditional for glibc >= 2.11.
+       * testsuite/Makefile.am: Add a bunch of IFUNC tests, all within
+       IFUNC conditional.
+       * testsuite/ifunc-sel.h: New file.
+       * testsuite/ifuncmain1.c: New file.
+       * testsuite/ifuncmain1vis.c: New file.
+       * testsuite/ifuncmod1.c: New file.
+       * testsuite/ifuncdep2.c: New file.
+       * testsuite/ifuncmain2.c: New file.
+       * testsuite/ifuncmain3.c: New file.
+       * testsuite/ifuncmod3.c: New file.
+       * testsuite/ifuncmain4.c: New file.
+       * testsuite/ifuncmain5.c: New file.
+       * testsuite/ifuncmod5.c: New file.
+       * testsuite/ifuncmain6pie.c: New file.
+       * testsuite/ifuncmod6.c: New file.
+       * testsuite/ifuncmain7.c: New file.
+       * configure, testsuite/Makefile.in: Rebuild.
+
+2010-08-18  Ian Lance Taylor  <iant@google.com>
+
+       * incremental.cc
+       (Output_section_incremental_inputs::write_input_files): Add cast
+       to avoid signed/unsigned comparison warning.
+       (Output_section_incremental_inputs::write_info_blocks): Likewise.
+
 2010-08-12  Cary Coutant  <ccoutant@google.com>
 
        * common.cc (Sort_commons::operator()): Remove unnecessary code.