* i386.cc (Target_i386::Relocate::relocate): Recognize non-PIC calls
[binutils-gdb.git] / gold / ChangeLog
index ff9dd446e84291f829c86facb74c26c253ea8e7b..56fc48e014970dc3b2cf1943fced702844e9ca19 100644 (file)
@@ -1,3 +1,383 @@
+2009-01-29  Cary Coutant  <ccoutant@google.com>
+
+       * i386.cc (Target_i386::Relocate::relocate): Recognize non-PIC calls
+       to __tls_get_addr.
+       * x86_64.cc (Target_x86_64::Relocate::relocate): Likewise.
+
+2009-01-28  Ian Lance Taylor  <iant@google.com>
+
+       * version.cc (version_string): Bump to 1.9.
+
+       * gold.h: Include <cstring> and <stdint.h>.
+       * version.cc: Include <cstdio>.
+       * object.cc (Sized_relobj::do_layout): Initialize gc_sd to avoid a
+       warning.
+       * reduced_debug_output.cc (insert_into_vector): Rename from
+       Insert_into_vector; change all callers.  Use Swap_unaligned to
+       avoid aliasing issue; remove union since it is unnecessary.
+
+2009-01-27  Sriraman Tallam  <tmsriram@google.com>
+
+       * Makefile.am (CCFILES): Add gc.cc.
+       (HFILES): Add gc.h.
+       * Makefile.in: Regenerate.
+       * gold.cc (Gc_runner): New class.
+       (queue_initial_tasks): Call garbage collection related tasks
+       when corresponding options are invoked.
+       (queue_middle_gc_tasks): New function.
+       (queue_middle_tasks): Reorder tasks to allow relocs to be read and
+       processed early before laying out sections during garbage collection.
+       * gold.h (queue_middle_gc_tasks): New function.
+       (is_prefix_of): Move from "layout.cc".
+       * i386.cc (Target_i386::gc_process_relocs): New function.
+       * layout.cc (is_prefix_of): Remove. Move to "gold.h"
+       * main.cc (main): Create object of class "Garbage_collection".
+       * object.cc (Relobj::copy_symbols_data): New function.
+       (Relobj::is_section_name_included): New function.
+       (Sized_relobj::do_layout): Allow this function to be called twice 
+       during garbage collection and defer layout of section during the 
+       first call.
+       * object.h (Relobj::get_symbols_data): New function.
+       (Relobj::is_section_name_included): New function.
+       (Relobj::copy_symbols_data): New function.
+       (Relobj::set_symbols_data): New function.
+       (Relobj::get_relocs_data): New function.
+       (Relobj::set_relocs_data): New function.
+       (Relobj::is_output_section_offset_invalid): New pure virtual function.
+       (Relobj::gc_process_relocs): New function.
+       (Relobj::do_gc_process_relocs): New pure virtual function.
+       (Relobj::sd_): New data member.
+       (Sized_relobj::is_output_section_offset_invalid): New function.
+       (Sized_relobj::do_gc_process_relocs): New function.
+       * options.h (General_options::gc_sections): Modify to not be a no-op.
+       (General_options::print_gc_sections): New option.
+       * plugin.cc (Plugin_finish::run): Remove function call to
+       Plugin_manager::layout_deferred_objects.  Move it to "gold.cc".
+       * powerpc.cc (Target_powerpc::gc_process_relocs): New function.
+       * reloc.cc (Read_relocs::run): Add task to process relocs and
+       determine unreferenced sections when doing garbage collection.
+       (Gc_process_relocs): New class.
+       (Sized_relobj::do_gc_process_relocs): New function.
+       (Sized_relobj::do_scan_relocs): Don't try to scan the relocs for
+       sections that are garbage collected.
+       * reloc.h (Gc_process_relocs): New class.
+       * sparc.cc (Target_sparc::gc_process_relocs): New function.
+       * symtab.cc (Symbol::should_add_dynsym_entry): Do not add entries for
+       symbols whose corresponding sections are garbage collected.
+       (Symbol_table::Symbol_table): Add new parameter for the garbage
+       collection object.
+       (Symbol_table::gc_mark_undef_symbols): New function.
+       (Symbol_table::gc_mark_symbol_for_shlib): New function.
+       (Symbol_table::gc_mark_dyn_syms): New function.
+       (Symbol_table::resolve): Do not treat symbols seen in dynamic objects
+       as garbage.
+       (Symbol_table::add_from_object): Likewise.
+       (Symbol_table::add_from_relobj): When building shared objects, do not
+       treat externally visible symbols as garbage.
+       (Symbol_table::sized_finalize_symbol): Do not check dynamic symbol
+       table information for static and relocatable links.
+       * symtab.h (Symbol_table::set_gc): New function.
+       (Symbol_table::gc): New function.
+       (Symbol_table::gc_mark_undef_symbols): New function.
+       (Symbol_table::gc_mark_symbol_for_shlib): New function.
+       (Symbol_table::gc_mark_dyn_syms): New function.
+       (Symbol_table::gc_): New data member.
+       * target.h (Sized_target::gc_process_relocs): New pure virtual 
+       function.
+       * x86_64.cc (Target_x86_64::gc_process_relocs): New function.
+       * testsuite/testfile.cc (Target_test::gc_process_relocs): New function.
+
+2009-01-20  Chris Faylor <me.sourceware@sourceware.org>
+
+       * options.h (General_options::gc_sections): Define as a no-op for now.
+       (General_options::no_keep_memory): Ditto.
+       (General_options::Bshareable): Define.
+       * options.cc (General_options::finalize): Honor -Bshareable.
+
+2009-01-20  Andreas Schwab  <schwab@suse.de>
+
+       * powerpc.cc (Powerpc_relocate_functions::rel16_ha): Don't try to
+       read the value in the contents, since we don't use it.  Use the
+       template endianness when writing.
+       (Relocate::relocate): Use it for R_PPC_REL16_HA.
+
+2009-01-19  Andreas Schwab  <schwab@suse.de>
+
+       * configure.tgt (powerpc64-*): Fix targ_obj.
+
+2009-01-15  Ian Lance Taylor  <iant@google.com>
+
+       * object.cc (Sized_relobj::write_local_symbols): Don't write out
+       local symbols when stripping all symbols.
+
+2009-01-14  Cary Coutant  <ccoutant@google.com>
+
+       * output.cc (Output_reloc): Add explicit instantiations.
+
+2009-01-14  Cary Coutant  <ccoutant@google.com>
+
+       * archive.cc (Archive::get_elf_object_for_member): Remove call
+       to File_read::claim_for_plugin.
+       * descriptors.cc (Descriptors::open): Remove reference to
+       is_claimed.
+       (Descriptors::claim_for_plugin): Remove.
+       * descriptors.h (Descriptors::claim_for_plugin): Remove.
+       (Descriptors::is_claimed): Remove.
+       (claim_descriptor_for_plugin): Remove.
+       * fileread.cc (File_read::claim_for_plugin): Remove.
+       * fileread.h (File_read::claim_for_plugin): Remove.
+       (File_read::descriptor): Reopen descriptor if necessary.
+       * plugin.cc  (Plugin::load): Add two new APIs to transfer vector.
+       (Plugin_manager::all_symbols_read): Add task parameter. Change
+       all callers.
+       (Plugin_manager::get_input_file): New function.
+       (Plugin_manager::release_input_file): New function.
+       (Pluginobj::Pluginobj): Add filesize parameter and initialize
+       corresponding data member.
+       (Sized_pluginobj::Sized_pluginobj): Add filesize parameter
+       and pass to base constructor. Change all callers.
+       (get_input_file, release_input_file): New functions.
+       (make_sized_plugin_object): Add filesize parameter. Change all callers.
+       * plugin.h (Plugin_manager::Plugin_manager): Initialize task_ member.
+       (Plugin_manager::all_symbols_read): Add task parameter.
+       (Plugin_manager::get_input_file): New function.
+       (Plugin_manager::release_input_file): New function.
+       (Plugin_manager::task_): New data member.
+       (Pluginobj::Pluginobj): Add filesize parameter.
+       (Pluginobj::filename): New function.
+       (Pluginobj::descriptor): New function.
+       (Pluginobj::filesize): New function.
+       (Pluginobj::filesize_): New data member.
+       (Sized_pluginobj::Sized_pluginobj): Add filesize parameter.
+       * readsyms.cc (Read_symbols::do_read_symbols): Remove call to
+       File_read::claim_for_plugin; use Object::unlock to unlock the file.
+
+       * testsuite/Makefile.am (plugin_test_4): New test case for plugins
+       with archive libraries.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/plugin_test.c (struct sym_info): New type.
+       (get_input_file, release_input_file): New static variables.
+       (onload): Capture new transfer vector entries.
+       (claim_file_hook): Stop reading at end of file according to filesize.
+       Factor out parsing of readelf output into separate function.
+       (all_symbols_read_hook): Exercise get_input_file and release_input_file
+       APIs and get the source file name from the symbol table.  Convert
+       source file name to corresponding object file name.  Print info
+       message when adding new input files.
+       (parse_readelf_line): New function.
+       * testsuite/plugin_test_1.sh: Add checks for new info messages.
+       * testsuite/plugin_test_2.sh: Likewise.
+       * testsuite/plugin_test_3.sh: Likewise.
+       * testsuite/plugin_test_4.sh: New test case.
+
+2009-01-07  Ian Lance Taylor  <iant@google.com>
+
+       * version.cc (version_string): Bump to 1.8.
+
+2008-12-23  Cary Coutant  <ccoutant@google.com>
+
+       * gold.cc (gold_exit): Call plugin cleanup handlers on exit.
+       * plugin.cc (Plugin_manager::finish): Rename as
+       layout_deferred_objects.  Move cleanup to separate function.
+       (Plugin_manager::cleanup): New function.
+       (Plugin_finish::run): Call layout_deferred_objects and cleanup
+       separately.
+       * plugin.h (Plugin_manager::finish): Rename as
+       layout_deferred_objects.
+       (Plugin_manager::cleanup): New function.
+       (Plugin_manager::cleanup_done): New field.
+
+2008-12-23  Cary Coutant  <ccoutant@google.com>
+
+       * plugin.cc (is_visible_from_outside): New function.
+       (Pluginobj::get_symbol_resolution_info): Call is_visible_from_outside
+       so we don't return "IR only" status for exported symbols or -r links.
+
+       * testsuite/Makefile.am (plugin_test_3): New test case.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/plugin_test_3.sh: New file.
+
+2008-12-22  Cary Coutant  <ccoutant@google.com>
+
+       * object.cc (Sized_relobj::layout_section): New function.
+       (Sized_relobj::do_layout): Defer layout of input sections until after
+       plugin has provided replacement files.
+       (Sized_relobj::do_layout_deferred_sections): New function.
+       * object.h (Relobj::set_section_offset): Remove virtual keyword.
+       (Relobj::layout_deferred_sections): New function.
+       (Relobj::do_layout_deferred_sections): New function.
+       (Sized_relobj::do_layout_deferred_sections): New function.
+       (Sized_relobj::layout_section): New function.
+       (Sized_relobj::Deferred_layout): New structure.
+       (Sized_relobj::deferred_layout_): New field.
+       * plugin.cc (Plugin_manager::finish): Renamed, was cleanup.
+       Change all callers.  Layout deferred sections.
+       (class Plugin_finish): Renamed, was Plugin_cleanup.  Change all
+       references.
+       (Plugin_hook::run): Move code from do_plugin_hook inline.
+       (Plugin_hook::do_plugin_hook): Remove.
+       * plugin.h (Plugin_manager::Plugin_manager): Add missing initializers.
+       (Plugin_manager::finish): Renamed, was cleanup.
+       (Plugin_manager::should_defer_layout): New function.
+       (Plugin_manager::add_deferred_layout_object): New function.
+       (Plugin_manager::Deferred_layout_list): New type.
+       (Plugin_manager::deferred_layout_objects_): New field.
+       (Plugin_hook::do_plugin_hook): Remove.
+
+2008-12-17  Ian Lance Taylor  <iant@google.com>
+
+       * options.h (class General_options): Add --no case for
+       --export-dynamic.
+
+2008-12-16  Cary Coutant  <ccoutant@google.com>
+
+       * plugin.cc (Plugin::load): Move LDPT_MESSAGE to front of transfer
+       vector.
+       (Plugin_manager::claim_file): Create plugin object even if
+       plugin did not call the add_symbols callback.
+       (Plugin_obj::get_symbol_resolution_info): Guard against plugin
+       asking for more symbols than were added.
+       * testsuite/Makefile.am (plugin_test_1): Add test case with
+       no global symbols.
+       (empty.syms): New target.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/plugin_test.c (claim_file_hook): Add new debug
+       message. Don't call add_symbols if no globals.
+       (all_symbols_read_hook): Don't provide replacement for empty
+       claimed file.
+
+2008-12-12  Ian Lance Taylor  <iant@google.com>
+
+       * target-reloc.h (Default_scan_relocatable_relocs): Only discard
+       r_type == 0 for a local symbol with r_sym == 0.
+       (scan_relocatable_relocs): Pass r_sym to
+       local_non_section_strategy.
+       * reloc.cc (Emit_relocs_strategy::local_non_section_strategy): Add
+       r_sym parameter.
+
+       * configure.ac: Update test for TLS descriptors: they are
+       supported as of glibc 2.9.
+       * configure: Rebuild.
+
+2008-12-11  Ian Lance Taylor  <iant@google.com>
+
+       PR 7091
+       * target-reloc.h (Default_scan_relocatable_relocs): For each
+       function, map r_type == 0 to RELOC_DISCARD.
+
+2008-12-10  Cary Coutant  <ccoutant@google.com>
+
+       * layout.cc (Layout::add_comdat): Allow COMDAT group from a replacement
+       object to override a kept COMDAT group from a plugin object.
+
+2008-12-09  Ian Lance Taylor  <iant@google.com>
+
+       PR 7088
+       * yyscript.y (file_cmd): Handle INPUT.
+
+       * testsuite/initpri1.c: Change all declarations to be full
+       prototypes by adding void, to avoid compiler warnings.
+
+2008-12-05  Rafael Avila de Espindola  <espindola@google.com>
+
+       * options.cc (General_options::parse_plugin_opt): New.
+       (General_options::add_plugin): The argument now is just the filename.
+       (General_options::add_plugin_option): New.
+       * options.h (plugin_opt): New.
+       (add_plugin): Change argument name.
+       (add_plugin_option): New.
+       * plugin.cc (Plugin::load): Don't parse the plugin option.
+       * plugin.h (Plugin::Plugin): Rename argument. Init filename_.
+       (Plugin::add_option): New.
+       (Plugin::args_): Change type.
+       (Plugin::filename_): New.
+       (Plugin_manager::add_plugin_option): New.
+       * testsuite/Makefile.am (plugin_test_1): Use new syntax.
+       * testsuite/Makefile.in: Regenerate.
+
+2008-12-05  Cary Coutant  <ccoutant@google.com>
+
+       * layout.cc (Layout::include_section): Check for SHF_EXCLUDE.
+       Handle --strip-lto-sections option.
+       * options.h (strip_lto_sections): New option.
+
+2008-12-01  Cary Coutant  <ccoutant@google.com>
+
+       * plugin.cc (ld_plugin_message): Change format parameter to const.
+       Fix mismatch between new[] and delete.
+
+2008-11-14  Cary Coutant  <ccoutant@google.com>
+
+       * reloc.cc (Sized_relobj::do_read_relocs): Use constant invalid_address
+       instead of -1U.
+
+2008-11-05  Craig Silverstein  <csilvers@google.com>
+
+       * options.cc (General_options::parse_dynamic_list): New function.
+       * options.h (General_options): New flags dynamic_list,
+       dynamic_list_data, dynamic_list_cpp_new, and
+       dynamic_list_cpp_typeinfo.  New variable dynamic_list_.
+       (General_options::in_dynamic_list): New function.
+       * script.cc (Lex::Mode): New enum DYNAMIC_LIST.
+       (Lex::can_start_name): Add support for DYNAMIC_LIST mode.
+       (Lex::can_continue_name): Likewise.
+       (yylex): Likewise.
+       (read_script_file): New parameter script_options.
+       (read_dynamic_list): New function.
+       (Script_options::define_dynamic_list): New function.
+       (dynamic_list_keyword_parsecodes): New variable.
+       (dynamic_list_keywords): New variable.
+       * script.h (Script_options::define_dynamic_list): New function
+       prototype.
+       (read_dynamic_list): New function prototype.
+       * symtab.cc (strprefix): New macro.
+       (Symbol::should_add_dynsym_entry): Support dynamic_list,
+       dynamic_list_data, dynamic_list_cpp_new, and
+       dynamic_list_cpp_typeinfo.
+       * yyscript.y (PARSING_DYNAMIC_LIST): New token.
+       (dynamic_list_expr): New rule.
+       (dynamic_list_nodes): Likewise.
+       (dynamic_list_node): Likewise.
+       * testsuite/Makefile.am (dynamic_list): New test.
+       * testsuite/Makefile.in: Regenerated.
+       * testsuite/dynamic_list.t: New file.
+       * testsuite/dynamic_list.sh: New file.
+
+2008-11-05  Craig Silverstein  <csilvers@google.com>
+
+       * testsuite/tls_test_c.c: Add prototype for t11 and t11_last.
+       * testsuite/tls_test_c.c (t11): Add explicit "void" to prototype.
+       (t11_last): Likewise.
+       * testsuite/ver_test_6.c (main): Likewise.
+
+2008-10-07  Cary Coutant  <ccoutant@google.com>
+
+       * options.c (General_options::finalize): Add check for -static and
+       -shared.
+       * gold.cc (queue_middle_tasks): Assert that list of dynamic objects
+       is not empty.
+
+2008-10-02  Cary Coutant  <ccoutant@google.com>
+
+       * plugin.cc (make_sized_plugin_object): Fix conditional
+       compilation to work when not all targets are enabled.
+
+2008-09-29  Cary Coutant  <ccoutant@google.com>
+
+       * archive.cc (Archive::get_file_and_offset): Use filename instead
+       of name to get library path.
+       (Archive::include_member): Unlock external member of a thin archive.
+
+       * testsuite/Makefile.am (TEST_AR): New variable.
+       (thin_archive_test_1): New test.
+       (thin_archive_test_2): New test.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/thin_archive_main.cc: New file.
+       * testsuite/thin_archive_test_1.cc: New file.
+       * testsuite/thin_archive_test_2.cc: New file.
+       * testsuite/thin_archive_test_3.cc: New file.
+       * testsuite/thin_archive_test_4.cc: New file.
+
 2008-09-29  Cary Coutant  <ccoutant@google.com>
 
        * mapfile.cc (Mapfile::print_input_section): Change -1U to -1ULL.
        * testsuite/script_test_2.cc (test_addr): Declare.
        (test_addr_alias): Declare.
        (main): Check that test_addr and test_addr_alias have the right
-       values. 
+       values.
        * testsuite/script_test_2.t: Define test_addr_alias and
        test_addr.
 
 
        * symtab.cc (Symbol_table::warn_about_undefined_dynobj_symbol):
        Include symbol version in error message.
-       
+
 2008-07-20  Chris Demetriou  <cgd@google.com>
 
-        * configure.ac (gold_cv_c_random_seed): New configured variable.
+       * configure.ac (gold_cv_c_random_seed): New configured variable.
        (RANDOM_SEED_CFLAGS): New substituted variable.
        * Makefile.am (AM_CFLAGS, AM_CXXFLAGS): Add $(RANDOM_SEED_CFLAGS).
        * configure: Rebuild.
 2008-06-05  Kris Van Hees  <kris.van.hees@oracle.com>
 
        PR 6584
-        * binary.cc (Binary_to_elf::sized_convert): Fix .data
+       * binary.cc (Binary_to_elf::sized_convert): Fix .data
        alignment.
 
 2008-05-30  Cary Coutant  <ccoutant@google.com>
        for thin archives.  Pass additional parameters to
        Archive::Archive.  Unlock the archive file after calling
        Archive::setup.
-       
+
 2008-03-29  Ian Lance Taylor  <iant@google.com>
 
        * symtab.cc (Symbol_table::do_define_as_constant): Don't force a
 2008-03-21  Ian Lance Taylor  <iant@google.com>
 
        * Added source code to GNU binutils.
-