Update French Translations for LD and GOLD.
[deliverable/binutils-gdb.git] / gold / ChangeLog
index 9b78b35a3e6b743cd6e6fa9209f78ea3e66b84eb..0ec1c2718c8d5a2bcaa99ff0dc36f3d4abb5f95d 100644 (file)
+2015-06-08  Nick Clifton  <nickc@redhat.com>
+
+       * po/fr.po: New French Translation.
+
+2015-06-07  Cary Coutant  <ccoutant@gmail.com>
+
+       PR gold/18288
+       * resolve.cc (symbol_to_bits): Remove type parameter; adjust all
+       callers. Don't use STT_COMMON to check for common symbols.
+       (Symbol_table::resolve): Warn if relocatable object has STT_COMMON
+       symbol that's not in a common section.
+       * symtab.h (Symbol::is_common): Don't use STT_COMMON to check for
+       common symbols.
+
+2015-06-04  Cary Coutant  <ccoutant@gmail.com>
+
+       PR gold/18200
+       * Makefile.am (diststuff): Add target.
+       * Makefile.in: Regenerate.
+
+2015-06-04  Cary Coutant  <ccoutant@gmail.com>
+
+       PR gold/17498
+       * object.cc (Sized_relobj_file::do_count_local_symbols): Discard
+       temporary locals in merge sections.
+       * options.cc (General_options::parse_discard_all): New method.
+       (General_options::parse_discard_locals): New method.
+       (General_options::parse_discard_none): New method.
+       (General_options::General_options): Initialize discard_locals_.
+       * options.h (--discard-all): Convert to special option.
+       (--discard-locals): Likewise.
+       (--discard-none): New option.
+       (General_options::discard_all): New method.
+       (General_options::discard_locals): New method.
+       (General_options::discard_sec_merge): New method.
+       (General_options::Discard_locals): New enum.
+       (General_options::discard_locals_): New data member.
+
+2015-06-03  Cary Coutant  <cary@google.com>
+
+       * script-sections.cc (Script_sections::Script_sections): Initialize
+       segments_created_.
+       (Script_sections::create_note_and_tls_segments): Set flag when
+       segments are created.
+       (Script_sections::expected_segment_count): Count PT_INTERP.
+       (Script_sections::attach_sections_using_phdrs_clause): Set flag when
+       segments are created.
+       * script-sections.h (Script_sections::segments_created_): New data
+       member.
+
+2015-06-03  Cary Coutant  <ccoutant@gmail.com>
+
+       PR gold/15370
+       * script-sections.cc
+       (Output_section_element_input::set_section_addresses): When there
+       are several patterns with no sort spec, put all sections in the same
+       bin.
+       * testsuite/Makefile.am (script_test_12): New testcase.
+       (script_test_12i): New testcase.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/script_test_12.t: New test linker script.
+       * testsuite/script_test_12i.t: New test linker script.
+       * testsuite/script_test_12a.c: New test source file.
+       * testsuite/script_test_12b.c: New test source file.
+
+2015-06-02  Cary Coutant  <ccoutant@gmail.com>
+
+       * nacl.h (Sniff_file): Switch parameters to get_view to get an
+       aligned view.
+
+2015-06-03  Cary Coutant  <ccoutant@gmail.com>
+
+        PR gold/17819
+        * gold.cc (queue_final_tasks): When --build-id=tree, queue a
+        separate task to schedule the build id computation.
+        * layout.cc (Hash_task::Hash_task): Remove build_id_blocker,
+        add Output_file and offset.
+        (Hash_task::run): Get and release the input views.
+        (Hash_task::is_runnable): Always return NULL (always runnable).
+        (Layout::queue_build_id_tasks): Remove.
+        (Layout::write_build_id): Add array_of_hashes and size_of_hashes
+        parameters; use them instead of class members.
+        (Build_id_task_runner::run): New function.
+        (Close_task_runner::run): Pass array_of_hashes and size_of_hashes
+        to write_build_id.
+        * layout.h (Layout::queue_build_id_tasks): Remove.
+        (Layout::write_build_id): Add array_of_hashes and size_of_hashes
+        parameters.
+        (Layout::array_of_hashes_): Remove.
+        (Layout::size_of_array_of_hashes_): Remove.
+        (Layout::input_view_): Remove.
+        (Build_id_task_runner): New class.
+        (Close_task_runner::Close_task_runner): Add array_of_hashes and
+        size_of_hashes parameters.
+        (Close_task_runner::array_of_hashes_): New data member.
+        (Close_task_runner::size_of_hashes_): New data member.
+        * testsuite/Makefile.am
+        (flagstest_compress_debug_sections_and_build_id_tree): New test.
+        * testsuite/Makefile.in: Regenerate.
+
+2015-06-01  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * merge.cc (get_input_merge_map): Update for data structure change.
+       (get_or_make_input_merge_map): Update for data structure change.
+       * merge.h (Object_merge_map): Use a std::vector<std::pair>> instead of
+       a std::map. Remove first_shnum_, first_map_, second_shnum_, second_map_.
+
+2015-05-16  Alan Modra  <amodra@gmail.com>
+
+       * reloc.cc (Sized_relobj_file::find_functions): Use function_location.
+       * powerpc.cc (Target_powerpc::do_calls_non_split): New function.
+       (addi_12_1, addis_2_12, addis_12_1, cmpld_7_12_0): New constants.
+       (lis_0): Rename from lis_0_0.
+
+2015-04-29  Cary Coutant  <cary@google.com>
+           Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * gc.h (Garbage_collection::is_section_garbage): Change Object*
+       to Relobj*.
+       (Garbage_collection::add_reference): Likewise.
+       (Garbage_collection::gc_process_relocs): Likewise. Don't push
+       object/shndx pair onto *secvec for dynamic objects. Don't follow
+       relocations pointing to dynamic objects for GC.
+       * icf.cc (Icf::find_identical_sections): Change Object* to Relobj*.
+       (Icf::unfold_section): Likewise.
+       (Icf::is_section_folded): Likewise.
+       (Icf::get_folded_section): Likewise.
+       * icf.h: (Icf::get_folded_section): Likewise.
+       (Icf::unfold_section): Likewise.
+       (Icf::is_section_folded): Likewise.
+       (Icf::section_has_function_pointers): Likewise.
+       (Icf::set_section_has_function_pointers): Likewise.
+       * object.h (Section_id): Likewise.
+       (Const_section_id): Likewise.
+       * output.cc (Output_section::update_section_layout): Likewise.
+       * output.h: (Output_section_lookup_maps::find_relaxed_input_section):
+       Likewise.
+       * plugin.cc (update_section_order): Likewise.
+       (unique_segment_for_sections): Likewise.
+       * powerpc.cc (Powerpc_relobj::add_reference): Likewise.
+       (Target_powerpc::do_gc_add_reference): Likewise.
+       (Target_powerpc::gc_process_relocs): Likewise.
+       (Target_powerpc::do_gc_add_reference): Likewise.
+       * symtab.cc (Symbol_table::is_section_folded): Likewise.
+       (Symbol_table::gc_mark_symbol): Likewise.
+       * symtab.h: (Symbol_table::is_section_folded): Likewise.
+       * target.h: (Sized_target::gc_add_reference): Likewise.
+       (Sized_target::do_gc_add_reference): Likewise.
+
+2015-04-29  Nick Clifton  <nickc@redhat.com>
+
+       * po/fi.po: Updated Finnish translation.
+
+2015-04-28  Alan Modra  <amodra@gmail.com>
+
+       * powerpc.cc (Target_powerpc::do_dynsym_value): Use Address rather
+       than unsigned int for find_global_entry result temp.  Compare
+       against invalid_address.
+       (Target_powerpc::do_plt_address_for_global): Likewise.
+       (Target_powerpc::Relocate::relocate): Likewise.  Don't assert
+       on plt call stub existence for debug info.  Do assert for plt
+       and global entry stub existence if an alloc section.
+
+2015-04-28  Alan Modra  <amodra@gmail.com>
+
+       * powerpc.cc (Target_powerpc::Relocate::relocate): Don't assert
+       on missing global entry stub due to bogus debug info.
+
+2015-04-27  Han Shen  <shenhan@google.com>
+
+       * options.h (--fix-cortex-a53-843419): Rename option.
+       * aarch64.cc (AArch64_relobj::do_count_local_symbols): Use renamed
+       option.
+       (AArch64_relobj::scan_sections_for_stubs): Use renamed option.
+
+2015-04-27  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       PR gold/18327
+       * output.cc (Output_section::is_input_address_mapped): Assume a missing
+       entry is mapped.
+       * testsuite/Makefile.am: Add the eh_test test.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/eh_test_a.cc: New test.
+       * testsuite/eh_test_b.cc: New test.
+
+2015-04-23  Sriraman Tallam  <tmsriram@google.com>
+
+       * options.h (--weak-unresolved-symbols): New option.
+       * symtab.cc (Symbol_table::sized_write_globals): Change symbol
+       binding to weak with new option.
+       * symtab.h (is_weak_undefined): Check for new option.
+       (is_strong_undefined): Check for new option.
+       * testsuite/Makefile.am (weak_unresolved_symbols_test): New test.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/weak_unresolved_symbols_test.cc: New file.
+
+2015-04-20  Ian Coolidge  <icoolidge@google.com>
+
+       * symtab.cc (Symbol::should_add_dynsym_entry): Return true for
+       GNU_UNIQUE.
+
+2015-04-17  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * gc.cc (Garbage_collection::do_transitive_closure): Use back and
+       push_back.
+       * gc.h (Garbage_collection): Use a std::vector instead of a std::queue.
+       * object.cc (Sized_relobj_file::do_layout): Use push_back.
+       * powerpc.cc (process_gc_mark): Use push_back.
+       (Target_powerpc::do_gc_mark_symbol): Use push_back.
+       * symtab.cc (Symbol_table::gc_mark_symbol): Use push_back.
+
+2015-04-16  Han Shen  <shenhan@google.com>
+
+       * aarch64.cc (AArch64_insn_utilities): New utility class.
+       (AArch64_relobj::Mapping_symbol_position): New struct.
+       (AArch64_relobj::Mapping_symbol_info): New typedef.
+       (AArch64_relobj::do_count_local_symbols): New function overriding
+       parent's implementation.
+       (AArch64_relobj::mapping_symbol_info_): New member
+       (AArch64_relobj::scan_erratum_843419): New method.
+       (Target_aarch64::scan_erratum_843419_span): New method.
+       (Target_aarch64::is_erratum_843419_sequence): New method.
+       * options.h (fix_cortex_a53): New option.
+
+2015-04-09  Cary Coutant  <ccoutant@google.com>
+
+       * symtab.cc (Symbol::final_value_is_known): Check for TLS symbol
+       in a PIE link.
+       * testsuite/Makefile.am (tls_pie_test.sh): New test.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/tls_pie_test.sh: New.
+
+2015-04-09  Cary Coutant  <ccoutant@google.com>
+
+       * debug.h (DEBUG_LOCATION): New.
+       (DEBUG_ALL): Include DEBUG_LOCATION.
+       (debug_string_to_enum): Add DEBUG_LOCATION.
+       * dwarf_reader.cc (Sized_dwarf_line_info::read_lines): Fix debug
+       output to print correct context.
+       (Sized_dwarf_line_info::do_addr2line): Add debug output. Return
+       up to 4 more locations at the beginning of the function.
+       * symtab.cc (Symbol_table::detect_odr_violations): Get canonical
+       result before sorting list of line numbers.
+       * testsuite/debug_msg.sh: Allow range of line numbers for
+       canonical results on optimized code.
+
+2015-04-07  HC Yen <hc.yen@mediatek.com>
+
+       Add AArch32 support for gold linker.
+       gold/
+       * arm.cc: Add V8 arch combine table.
+
+2015-04-06  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * aarch64.cc (do_reloc_addend): Fix signature to match the parent one.
+
+2015-04-06  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * gc.cc (Garbage_collection::do_transitive_closure): Avoid a call
+       to find by using the return value of insert.
+
+2015-04-06  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * gc.cc (Garbage_collection::do_transitive_closure): Avoid a copy
+       constructor call.
+
+2015-04-06  Ilya Tocar  <ilya.tocar@intel.com>
+
+       PR gold/17641
+       * x86_64.cc (Target_x86_64::can_convert_mov_to_lea): New.
+       (Target_x86_64::Scan::local): Don't create GOT entry, when we
+       can convert mov to lea.
+       (Target_x86_64::Scan::global): Ditto.
+       (Target_x86_64::Relocate::relocate): Convert mov foo@GOTPCREL(%rip),
+       %reg to lea foo(%rip), %reg if possible.
+       * testsuite/Makefile.am (x86_64_mov_to_lea): New test.
+       * testsuite/x86_64_mov_to_lea1.s: New.
+       * testsuite/x86_64_mov_to_lea2.s: Ditto.
+       * testsuite/x86_64_mov_to_lea3.s: Ditto.
+       * testsuite/x86_64_mov_to_lea4.s: Ditto.
+       * testsuite/x86_64_mov_to_lea.sh: Ditto.
+
+2015-04-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * configure: Regenerated.
+
+2015-04-01  Ilya Tocar  <ilya.tocar@intel.com>
+
+       PR gold/17640
+       * i386.cc (Target_i386::can_convert_mov_to_lea): New.
+       (Target_i386::Scan::local): Don't create GOT entry, when we
+       can convert GOT to GOTOFF.
+       (Target_i386::Scan::global): Ditto.
+       (Target_i386::Relocate::relocate): Convert  mov foo@GOT(%reg), %reg to
+       lea foo@GOTOFF(%reg), %reg if possible.
+       * testsuite/Makefile.am (i386_mov_to_lea): New test.
+       * testsuite/i386_mov_to_lea1.s: New.
+       * testsuite/i386_mov_to_lea2.s: Ditto.
+       * testsuite/i386_mov_to_lea3.s: Ditto.
+       * testsuite/i386_mov_to_lea4.s: Ditto.
+       * testsuite/i386_mov_to_lea5.s: Ditto.
+       * testsuite/i386_mov_to_lea.sh: Ditto.
+
+2015-04-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * Makefile.am (ZLIB): New.
+       (ZLIBINC): Likewise.
+       (AM_CFLAGS): Add $(ZLIBINC).
+       (AM_CXXFLAGS): Likewise.
+       (ldadd_varldadd_var): Add $(ZLIB).
+       (incremental_dump_LDADD): Likewise.
+       (dwp_LDADD): Likewise.
+       * compressed_output.cc: Don't check HAVE_ZLIB_H to include
+       <zlib.h>.
+       (zlib_compress): Don't check HAVE_ZLIB_H.
+       (zlib_decompress): Likewise.
+       * options.h (compress_debug_sections): Likewise.
+       * configure.ac (AM_CONDITIONAL): Removed.
+       * testsuite/Makefile.am (ZLIB): New.
+       (LDADD): Add $(ZLIB).
+       Don't check HAVE_ZLIB.
+       * Makefile.in: Regenerated.
+       * config.in: Likewise.
+       * configure: Likewise.
+       * testsuite/Makefile.in: Likewise.
+
+2015-03-30  Jing Yu  <jingyu@google.com>
+
+       * aarch64-reloc.def: New TLSLD_ADD_DTPREL_HI12,
+       TLSLD_ADD_DTPREL_LO12_NC.
+       * aarch64.cc (Target_aarch64::define_tls_base_symbol): Always let
+       _TLS_MODULE_BASE_ point to the start of tls segment.
+       (Target_aarch64::optimize_tls_reloc): Add cases for
+       R_AARCH64_TLSLD_ADD_DTPREL_HI12 and
+       R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC.
+       (Target_aarch64::Scan::local): Likewise.
+       (Target_aarch64::Scan::global): Likewise.
+       (Target_aarch64::Relocate::relocate): Likewise.
+       (Target_aarch64::Relocate::relocate_tls): Likewise. And remove
+       subtracting tls segment size from symbol value for TLSLD_*_DTPREL
+       relocations.
+
+2015-03-27  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * merge.cc (Object_merge_map::add_mapping): call
+       Object_merge_map::Input_merge_map::add_mapping.
+       (Object_merge_map::Input_merge_map::add_mapping): New.
+       (Output_merge_data::do_add_input_section): Call
+       get_or_make_input_merge_map before a loop.
+       (Output_merge_string<Char_type>::finalize_merged_data): Call
+       get_or_make_input_merge_map before a loop.
+       * merge.h (Object_merge_map): Make Input_merge_map public.
+       * object.cc (Relobj::add_merge_mapping): Use get_or_create_merge_map.
+       (Relobj::get_or_create_merge_map): New.
+       * object.h (Relobj::get_or_create_merge_map): New.
+
+2015-03-24  Alan Modra  <amodra@gmail.com>
+
+       PR 18147
+       * powerpc.cc (Target_powerpc::Relocate::relocate): Don't report
+       relocation errors for branches to strong undefined symbols.
+
+2015-03-23  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * merge.cc (Object_merge_map::get_input_merge_map): Make it const.
+       (Object_merge_map::is_merge_section_for): Remove.
+       (Object_merge_map::find_merge_section): New.
+       * merge.h (Object_merge_map::is_merge_section_for): Remove.
+       (Object_merge_map::find_merge_section): New.
+       (Object_merge_map::get_input_merge_map): Add a const version.
+       * object.cc (Relobj::is_merge_section_for): Remove.
+       (Relobj::find_merge_section): New.
+       * object.h (Relobj::is_merge_section_for): Remove.
+       (Relobj::find_merge_section): New.
+       * output.cc
+       (Output_section::Input_section::is_merge_section_for): Remove.
+       (Output_section::add_merge_input_section): Don't call
+       add_merge_input_section.
+       (Output_section::find_merge_section): Return const. Use
+       object->find_merge_section.
+       (Output_section::build_lookup_maps): Don't build a map for
+       merge sections.
+       (Output_section::is_input_address_mapped): Return false if
+       section is not found.
+       (Output_section::find_starting_output_address): Use
+       find_merge_section instead of is_merge_section_for.
+       (Output_section::add_script_input_section):  Don't build a map for
+       merge sections.
+       * output.h (Output_section_lookup_maps::merge_sections_by_id_): Remove.
+       (Output_section_lookup_maps::find_merge_section): Remove.
+       (Output_section_lookup_maps::add_merge_input_section) Remove.
+       (Output_section::find_merge_section): Return const.
+
+2015-03-22  Cary Coutant  <cary@google.com>
+
+       PR gold/18106
+       * i386.cc (Target_i386::Relocate::tls_gd_to_ie): Fix support for
+       non-SIB form of lea, with nop after the call.
+
+2015-03-21  Cary Coutant  <cary@google.com>
+
+       PR gold/14217
+       * output.cc (Output_segment::is_first_section_relro): Don't ignore
+       .tdata section.
+       (Output_segment::set_section_addresses): Don't align size of relro
+       segment for .tbss.
+
+2015-03-21  Cary Coutant  <cary@google.com>
+
+       PR gold/18010
+       * stringpool.cc (Stringpool_template): Don't optimize if section
+       alignment is greater than sizeof(char).
+
+2015-03-21  Cary Coutant  <cary@google.com>
+
+       PR gold/18048
+       * script-c.h (script_include_directive): Add first_token parameter.
+       * script.cc (script_include_directive): Add first_token parameter, and
+       pass it to read_script_file.
+       * yyscript.y (PARSING_SECTIONS_BLOCK, PARSING_SECTION_CMDS)
+       (PARSING_MEMORY_DEF): New tokens.
+       (top): Add new productions for INCLUDE files.
+       (file_cmd): Replace file_or_sections_cmd with copy of its productions.
+       Pass PARSING_LINKER_SCRIPT to script_include_directive.
+       (section_block_cmd): Likewise; pass PARSING_SECTIONS_BLOCK.
+       (section_cmd): Pass PARSING_SECTION_CMDS.
+       (file_or_sections_cmd): Remove.
+       (memory_def): Pass PARSING_MEMORY_DEF.
+       * testsuite/Makefile.am (memory_test_2): New test.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/memory_test_inc.t: New script file.
+       * testsuite/memory_test_inc_1.t.src: New script file.
+       * testsuite/memory_test_inc_2.t.src: New script file.
+       * testsuite/memory_test_inc_3.t.src: New script file.
+
+2015-03-21  Cary Coutant  <cary@google.com>
+
+       * dwp.cc (Sized_relobj_dwo::do_section_contents): Delete.
+       (Sized_relobj_dwo::setup): Build compressed section map.
+       (Sized_relobj_dwo::do_decompressed_section_contents): Delete.
+       * dynobj.cc (Sized_dynobj::base_read_symbols): Build compressed
+       section map.
+       * object.cc (Sized_relobj_file::Sized_relobj_file): Remove
+       compressed_sections_ field.
+       (build_compressed_section_map): Take Object instead of
+       Sized_relobj_file parameter; add decompress_if_needed parameter.
+       (Sized_relobj_file::do_find_special_sections): Store compressed
+       section map in parent Object.
+       (Sized_relobj_file::do_decompressed_section_contents): Move
+       implementation to Object::decompressed_section_contents.
+       (Sized_relobj_file::do_discard_decompressed_sections): Move
+       implementation to Object::discard_decompressed_sections.
+       * object.h (build_compressed_section_map): Declare.
+       (Object::Object): Add compressed_sections_ field.
+       (Object::section_is_compressed): Move implementation here.
+       (Object::decompressed_section_contents): De-virtualize.
+       (Object::discard_decompressed_sections): De-virtualize.
+       (Object::do_section_is_compressed): Delete.
+       (Object::do_decompressed_section_contents): Delete.
+       (Object::set_compressed_sections): New method.
+       (Object::compressed_sections): New method.
+       (Object::compressed_sections_): New data member.
+       (Compressed_section_info, Compressed_section_map): Move to top of file.
+       (Sized_relobj_file::do_section_is_compressed): Delete.
+       (Sized_relobj_file::do_decompressed_section_contents): Delete.
+       (Sized_relobj_file::do_discard_decompressed_sections): Delete.
+       (Sized_relobj_file::compressed_sections_): Move to Object class.
+
+2015-03-21  Cary Coutant  <ccoutant@google.com>
+
+       PR gold/18152
+       * gold.cc (queue_middle_tasks): Finalize .eh_frame after laying out
+       deferred objects.
+
+2015-03-11  Cary Coutant  <ccoutant@google.com>
+
+       * options.cc (General_options::finalize): Don't allow -z relro
+       with incremental linking.
+       * testsuite/Makefile.am (incremental_test): Add -z norelro.
+       (incremental_test_2): Likewise.
+       (incremental_test_3): Likewise.
+       (incremental_test_4): Likewise.
+       (incremental_test_5): Likewise.
+       (incremental_test_6): Likewise.
+       (incremental_copy_test): Likewise.
+       (incremental_common_test_1): Likewise.
+       (incremental_comdat_test_1): Likewise.
+       * testsuite/Makefile.in: Regenerate.
+
+2015-03-09  Cary Coutant  <ccoutant@google.com>
+
+       PR gold/14675
+       * ehframe.cc (Eh_frame::add_ehframe_input_section): Change return type;
+       return enum indicating whether .eh_frame section is empty, optimizable,
+       unrecognized, or an end marker. Adjust explicit instantiations.
+       * ehframe.h (Eh_frame::Eh_frame_section_disposition): New enum type.
+       (Eh_frame::add_ehframe_input_section): Change return type.
+       * gold.cc (queue_middle_tasks): Call Layout::finalize_eh_frame_section.
+       * layout.cc (Layout::layout_eh_frame): Don't add optimized sections
+       to the .eh_frame output section until we see the end marker.
+       (Layout::finalize_eh_frame_section): New.
+       * layout.h: (Layout::finalize_eh_frame_section): New.
+
+2015-03-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * output.cc (Relobj::initialize_input_to_output_map<size>):
+       Remove typename on elfcpp::Elf_types<size>::Elf_Addr.
+
+2015-03-04  Cary Coutant  <ccoutant@google.com>
+
+       * parameters.cc (Parameters::set_target_once): Call
+       Target::select_as_default_target just once from here...
+       (set_parameters_target): ...instead of from here.
+
+2015-03-04  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * ehframe.cc (Cie::set_output_offset): Pass in and use a
+       Output_section_data instead of a Merge_map.
+       (Eh_frame::Eh_frame): Don't initialize merge_map_.
+       (Eh_frame::read_cie): Use add_merge_mapping instead of
+       Merge_map::add_mapping.
+       (Eh_frame::read_fde): Ditto.
+       (Eh_frame::set_final_data_size): Use this instead of this->merge_map_.
+       (Eh_frame::do_output_offset): Use merge_output_offset istead of
+       merge_map_->get_output_offset.
+       (Eh_frame::do_is_merge_section_for): Delete.
+       * ehframe.h (Fde::add_mapping): Pass in and use a Output_section_data
+       instead of a Merge_map.
+       (Cie::set_output_offset): Pass in a Output_section_data instead of a
+       Merge_map.
+       (Eh_frame::do_is_merge_section_for): Delete.
+       (Eh_frame::merge_map_): Delete.
+       * merge.cc (Object_merge_map::get_or_make_input_merge_map): Pass in
+       and use a Output_section_data instead of a Merge_map.
+       (Object_merge_map::add_mapping): Ditto.
+       (Object_merge_map::get_output_offset): Remove the merge_map argument.
+       (Object_merge_map::is_merge_section_for): Pass in and use a
+       Output_section_data instead of a Merge_map.
+       (Merge_map): Delete.
+       (Output_merge_base::do_output_offset): Use merge_output_offset instead
+       of merge_map_.get_output_offset.
+       (Output_merge_base::do_is_merge_section_for): Delete.
+       (Output_merge_data::do_add_input_section): Use
+       object->add_merge_mapping instead of add_mapping.
+       (Output_merge_string<Char_type>::finalize_merged_data): Ditto.
+       * merge.h (Merge_map): Delete forward declaration.
+       (Object_merge_map::add_mapping): Pass in and use a Output_section_data
+       instead of a Merge_map.
+       (Object_merge_map::get_output_offset): Remove the merge_map argument.
+       (Object_merge_map::is_merge_section_for): Pass in and use a
+       Output_section_data instead of a Merge_map.
+       (Input_merge_map::Object_merge_map::merge_map): Replace with
+       output_data.
+       (Object_merge_map::get_or_make_input_merge_map): Pass in and use a
+       Output_section_data instead of a Merge_map.
+       (Merge_map): Delete.
+       (Output_merge_base::Output_merge_base): Don't initialize merge_map_.
+       (Output_merge_base::do_is_merge_section_for): Delete.
+       (Output_merge_base::add_mapping): Delete.
+       (Output_merge_base::merge_map_): Delete.
+       * object.cc (Relobj::initialize_input_to_output_map): New.
+       (Relobj::initialize_input_to_output_map): New.
+       (Relobj::merge_output_offset): New.
+       (Relobj::is_merge_section_for): New.
+       (Relobj::initialize_input_to_output_map): Instantiate for 32 and 64
+       bits.
+       * object.h (Relobj::merge_map): Delete.
+       (initialize_input_to_output_map): New.
+       (set_merge_map): Delete.
+       (add_merge_mapping): New.
+       (merge_output_offset): New.
+       (is_merge_section_for): New.
+       * output.cc (Output_section::Input_section::is_merge_section_for):
+       Use object->is_merge_section_for.
+       * output.h (Output_section_data::is_merge_section_for): Delete.
+       (Output_section_data::do_is_merge_section_for): Delete.
+       * reloc.cc (Merged_symbol_value<size>::initialize_input_to_output_map):
+       Use object->initialize_input_to_output_map.
+       (Merged_symbol_value<size>::value_from_output_section): Use
+       object->merge_output_offset.
+
+2015-03-02  Peter Collingbourne  <pcc@google.com>
+            Cary Coutant  <ccoutant@google.com>
+
+       * output.cc (Output_section::add_merge_input_section): Do not
+       attempt to merge sections with an entsize of 0.
+
+2015-03-02  Khem Raj  <raj.khem@gmail.com>
+
+       * attributes.h (class Output_attributes_section_data ): Add
+       do_print_to_mapfile function.
+
+2015-02-24  Alan Modra  <amodra@gmail.com>
+
+       PR 18010
+       * powerpc.cc (Powerpc_relocate_functions::addr16_ds): Always
+       complain if value is not a multiple of four.
+       (Target_powerpc::Relocate::relocate): Correct handling of
+       R_POWERPC_GOT_TPREL16 and R_POWERPC_GOT_TPREL16_LO for ppc64.
+
+2015-02-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * configure.ac (default_size): Set to 32 for x32.
+       * configure: Regenerated.
+
+2015-02-18  Alan Modra  <amodra@gmail.com>
+
+       PR 17954
+       * powerpc.cc (Global_symbol_visitor_opd::operator()): Set default
+       visibility.
+
+2015-02-17  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * gc.h (Garbage_collection::add_reference): Don't use find.
+
+2015-02-17  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * object.cc (write_local_symbols): avoid std::vector copy.
+
+2015-02-17  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * merge.cc (get_output_offset): Use upper_bound instead of lower_bound.
+
+2015-02-09  Mark Wielaard  <mjw@redhat.com>
+
+       * gdb-index.cc (Gdb_index_info_reader::visit_top_die): Recognize
+       DW_LANG_Fortran03 and DW_LANG_Fortran08.
+
+2015-02-16  Cary Coutant  <ccoutant@google.com>
+
+       PR gold/13577
+       PR gold/16992
+       * layout.cc (Layout::finish_dynamic_section): Don't set DT_SYMBOLIC or
+       DF_SYMBOLIC if --dynamic-list option is used.
+       * options.cc (General_options::finalize): --dynamic-list is not
+       mutually exclusive with -Bsymbolic.
+       * symtab.h (Symbol::is_preemptible): Don't exclude dynamic symbols not
+       listed in --dynamic-list.
+       * testsuite/Makefile.am (dynamic_list_lib2.so): Add
+       -Bsymbolic-functions.
+       * testsuite/Makefile.in: Regenerate.
+
+2015-02-16  Cary Coutant  <ccoutant@google.com>
+
+       PR gold/17971
+       * incremental.cc: Remove redundant include of "output.h".
+
+2015-02-12  Jing Yu  <jingyu@google.com>
+
+       * aarch64-reloc.def (TLSLE_MOVW_TPREL_G2, TLSLE_MOVW_TPREL_G1,
+       TLSLE_MOVW_TPREL_G1_NC, TLSLE_MOVW_TPREL_G0, TLSLE_MOVW_TPREL_G0_NC,):
+       New relocation.
+       * aarch64.cc (Target_aarch64::Scan::local): Add cases for new
+       TLSLE_MOVW_* relocations.
+       (Target_aarch64::Scan::global): Likewise.
+       (Target_aarch64::Relocate::relocate): Likewise.
+       (Target_aarch64::Relocate::relocate_tls): Add cases and handlings
+       for new TLSLE_MOVW_* relocations.
+
+2015-02-11  Will Newton  <will.newton@linaro.org>
+
+       PR gold/13321
+       * arm.cc (Target_arm::make_plt_section): Create an ARM
+       state mapping symbol at the start of the PLT.
+
+2015-02-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * testsuite/Makefile.am (two_file_shared_2_pic_1_test_DEPENDENCIES):
+       Replace two_file_shared_2.so with two_file_shared_1.so.
+       * testsuite/Makefile.in: Regenerated.
+
+2015-02-09  Alan Modra  <amodra@gmail.com>
+
+       * testsuite/Makefile.am (MOSTLYCLEANFILES): Add libweak_undef_2.a,
+       plugin_test_thin.a and defsym_test.
+       * testsuite/Makefile.in: Regenerate.
+
+2015-02-04  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+
+       * merge.cc (do_add_input_section): Combine loop epilogue into main loop
+       body.
+
+2015-02-04  Peter Collingbourne  <pcc@google.com>
+
+       * plugin.cc (Pluginobj::get_symbol_resolution_info): Resolve
+       forwarding symbols when computing symbol resolution info for plugins.
+       * plugin.h (Plugin_manager::symtab): New method.
+       (Pluginobj::get_symbol_resolution_info): Add symtab parameter.
+
+2015-02-03  Cary Coutant  <ccoutant@google.com>
+           Peter Collingbourne  <pcc@google.com>
+
+       PR gold/15660
+       * archive.cc (Thin_archive_object_unlocker): New class.
+       (Archive::include_member): Unlock external members of thin archives.
+       * testsuite/Makefile.am (plugin_test_1): Rename .syms files.
+       (plugin_test_2): Likewise.
+       (plugin_test_3): Likewise.
+       (plugin_test_4): Likewise.
+       (plugin_test_5): Likewise.
+       (plugin_test_6): Likewise.
+       (plugin_test_7): Likewise.
+       (plugin_test_8): Likewise.
+       (plugin_test_9): Likewise.
+       (plugin_test_10): Likewise.
+       (plugin_test_11): New test case.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/plugin_test.c (claim_file_hook): Check for parallel .syms
+       file to decide whether to claim file.
+       (all_symbols_read_hook): Likewise.
+       * testsuite/plugin_test_1.sh: Adjust expected output.
+       * testsuite/plugin_test_2.sh: Likewise.
+       * testsuite/plugin_test_3.sh: Likewise.
+       * testsuite/plugin_test_6.sh: Likewise.
+       * testsuite/plugin_test_tls.sh: Likewise.
+       * testsuite/plugin_test_11.sh: New testcase.
+
+2015-02-03  Cary Coutant  <ccoutant@google.com>
+
+       * descriptors.cc (Descriptors::open): Set artificially-low limit for
+       file descriptors when debugging enabled. Add debug output.
+       (Descriptors::release): Add debug output.
+       (Descriptors::close_some_descriptor): Likewise.
+       (Descriptors::close_all): Likewise.
+       * fileread.cc (File_read::lock): Likewise.
+       (File_read::unlock): Likewise.
+
+2015-02-02  Cary Coutant  <ccoutant@google.com>
+
+       * x86_64.cc (Target_x86_64::Relocate::relocate_tls): Check for
+       executable output file.
+
+2015-01-22  Han Shen  <shenhan@google.com>
+
+       * arm.cc (Target_arm::Target_arm): Add initialization for new members.
+       (Target_arm::do_plt_address_for_global): New method.
+       (Target_arm::do_plt_address_for_local): New method.
+       (Target_arm::rel_irelative_section): New method.
+       (Target_arm::make_data_plt): Add more parameters for plt ctor.
+       (Target_arm::do_make_data_plt): Add more parameters for plt ctor.
+       (Target_arm::Scan::symbol_needs_plt_entry): Add ifunc support.
+       (Target_arm::Scan::reloc_needs_plt_for_ifunc): Add ifunc support.
+       (Target_arm::Scan::check_non_pic): Add ifunc support.
+       (Target_arm::Scan::local): Add ifunc support.
+       (Target_arm::Scan::global): Add ifunc support.
+       (Target_arm::make_plt_section): New method.
+       (Target_arm::make_plt_entry): Change to call to make_plt_section.
+       (Target_arm::make_local_ifunc_plt_entry): New method.
+       (Target_arm::got_irelative_): New member.
+       (Target_arm::rel_irelative_): New member.
+       (Target_arm::got_section): Add creation for got_irelative_.
+       (Target_arm::rel_dyn_section): Add creation for rel_irelative_.
+       (Target_arm::Relocate::relocate): Properly set local ifunc address.
+       (Target_arm::do_dynsym_value): Properly set global ifunc address.
+       (Target_arm::scan_reloc_for_stub): Properly set global ifunc address.
+       (Output_data_plt_arm::IRelative_data): New type.
+       (Output_data_plt_arm::Output_data_plt_arm): Add more parameters.
+       (Output_data_plt_arm::add_entry): Add more parameters.
+       (Output_data_plt_arm::add_relocation): New method.
+       (Output_data_plt_arm::add_local_ifunc_entry): New method.
+       (Output_data_plt_arm::rel_irelative): New method.
+       (Output_data_plt_arm::entry_count): Modified.
+       (Output_data_plt_arm::address_for_global): New method.
+       (Output_data_plt_arm::address_for_local): New method.
+gold/
+       (Output_data_plt_arm::set_final_data_size): Add irelative_count_.
+       (Output_data_plt_arm::insert_irelative_data): New method.
+       (Output_data_plt_arm::irelative_rel_): New member.
+       (Output_data_plt_arm::got_): New member.
+       (Output_data_plt_arm::got_irelative_): New member.
+       (Output_data_plt_arm::irelative_count_): New member.
+       (Output_data_plt_arm::IRelative_data_vec): New typedef.
+       (Output_data_plt_arm::irelative_data_vec_): New member.
+       (Output_data_plt_arm::do_write): Write out irelative entries.
+       (Output_data_plt_arm_standard::Output_data_plt_arm_standard): Add
+       more parameters to ctor.
+       (Output_data_plt_arm_nacl::Output_data_plt_arm_nacl): Add
+       more parameters to ctor.
+       * output.h (Output_data_reloc::add_local_relative): New method.
+       * aarch64.cc (Output_data_plt_aarch64): Fixed typo in comment.
+
+2015-01-29  Alan Modra  <amodra@gmail.com>
+
+       * powerpc.cc (Target_powerpc::Relocate::relocate): Correct GOT_TLSLD
+       and GOT_TLSGD to LE optimization.
+
+2015-01-28  Cary Coutant  <ccoutant@google.com>
+
+       * x86_64.cc (Target_x86_64::Scan::global): Allow IE-to-LE optimization
+       for undef TLS symbols.
+       (Target_x86_64::Relocate::relocate_tls): Likewise.
+       (Target_x86_64::Relocate::tls_ie_to_le): Likewise.
+
+2015-01-25  Cary Coutant  <ccoutant@google.com>
+
+       * output.cc (Output_segment::set_section_addresses): Fix calculation
+       of size of relro segment.
+
+2015-01-22  Alan Modra  <amodra@gmail.com>
+
+       * powerpc.cc (Target_powerpc::Scan::local <got relocs>): Correct
+       condition for need of ifunc plt entry.
+       (Target_powerpc::Scan::global <got relocs>): Likewise.
+
+2015-01-14  Sasa Stankovic  <Sasa.Stankovic@imgtec.com>
+
+       * mips.cc (reloc_high): Add r_sym.
+       (Mips_relocate_functions::relhi16): Add r_sym parameter. Pass r_sym to
+       reloc_high constructor.
+       (Mips_relocate_functions::relgot16_local): Likewise.
+       (Mips_relocate_functions::rello16): Add r_sym parameter. Use r_sym and
+       r_type to decide whether LO16 matches HI16.
+       (Target_mips::Relocate::relocate): Pass r_sym to calls to relhi16,
+       rello16 and relgot16_local.
+
+2015-01-09  Cary Coutant  <ccoutant@google.com>
+
+       * layout.cc (Layout::set_segment_offsets): Don't align start of segment
+       unless alignment is larger than page size.
+
+2015-01-06  H.J. Lu  <hongjiu.lu@intel.com>
+           Cary Coutant  <ccoutant@google.com>
+
+       PR gold/17729
+       * configure.ac (DEFAULT_TARGET_X86_64): Don't set for x32.
+       (DEFAULT_TARGET_X32): Set for x32.
+       * x86_64.cc (cmp_insn_32): New.
+       (lea_r10_insn_32): Likewise.
+       (lea_r11_insn_32): Likewise.
+       (cmp_insn_64): Likewise.
+       (lea_r10_insn_64): Likewise.
+       (lea_r11_insn_64): Likewise.
+       (Target_x86_64<size>::do_calls_non_split): Handle x32.
+       * testsuite/Makefile.am (check_SCRIPTS): Add split_x32.sh.
+       (check_DATA): Add split_x32 files.
+       (split_x32_[1234n].o): New targets.
+       (split_x32_[124]): New targets.
+       (split_x32_[1234r].stdout): New targets.
+       * testsuite/split_x32.sh: New file.
+       * testsuite/split_x32_1.s: Likewise.
+       * testsuite/split_x32_2.s: Likewise.
+       * testsuite/split_x32_3.s: Likewise.
+       * testsuite/split_x32_4.s: Likewise.
+       * testsuite/split_x32_n.s: Likewise.
+       * configure: Regenerated.
+       * testsuite/Makefile.in: Likewise.
+
+2015-01-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gold/17809
+       * x86_64.cc (Target_x86_64<size>::Relocate::tls_ie_to_le): Handle
+       x32.
+
+2015-01-02  Alan Modra  <amodra@gmail.com>
+
+       * version.cc (print_version): Just print current year.
+       * dwp.cc (print_version): Likewise.
+
+2015-01-01  Alan Modra  <amodra@gmail.com>
+
+       Update year range in copyright notice of all files.
+
+2014-12-25  Alan Modra  <amodra@gmail.com>
+
+       * arm.cc (Target_arm::do_adjust_elf_header): Provide namespace on
+       new enums.
+       (Target_arm::merge_object_attributes, ): Likewise.
+
+2014-12-25  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       * arm.cc (Target_arm::do_adjust_elf_header): Set e_flags in ELF header
+       as hard float only when Tag_ABI_VFP_args is 1, using new enum value
+       AEABI_VFP_args_vfp to check that.
+       (Target_arm::merge_object_attributes): Handle new Tag_ABI_VFP_args
+       value and replace hardcoded values by enum values.
+
+2014-12-22  Cary Coutant  <ccoutant@google.com>
+
+       * powerpc.cc (Target_powerpc::relocate): Fix overflow check.
+
+2014-12-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gold/14608
+       * testsuite/debug_msg.cc (SometimesInlineFunction): Changed
+       to "return i * i * 3;".
+
+2014-12-16  Cary Coutant  <ccoutant@google.com>
+
+       * mapfile.cc (Mapfile::print_input_section): Print uncompressed sizes.
+       (Mapfile::print_output_data): Use current_data_size() to avoid
+       assert for sections requiring postprocessing; if address is not valid,
+       print 0.
+       (Mapfile::print_output_section): Use current_data_size(); print note
+       that addresses and sizes are before compression.
+
+2014-12-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * aarch64.cc (AArch64_relocate_functions::maybe_apply_stub):
+       Cast current_group_size to unsigned long when reporting error.
+
+2014-12-10  Jing Yu  <jingyu@google.com>
+
+       * aarch64.cc (Target_aarch64): Add new variable stub_group_size_.
+       (AArch64_relocate_functions::maybe_apply_stub): Add new parameter.
+       Update error message.
+       (Target_aarch64::do_relax): Use absolute value of option
+       stub_group_size. Replace local variable with class member
+       stub_group_size_.
+
+2014-12-04  Alan Modra  <amodra@gmail.com>
+
+       * powerpc.cc (Target_powerpc::Branch_info::make_stub): Ignore
+       addend of PLTREL24 reloc when not generating a plt stub.  Make
+       max_branch_offset an "Address".
+       (Stub_table::can_reach_stub): Make max_branch_offset an "Address".
+       (Target_powerpc::Relocate::relocate): Likewise.
+
+2014-12-04  Alan Modra  <amodra@gmail.com>
+
+       PR 17670
+       * symtab.cc (Symbol::set_undefined): Remove assertion.
+       * powerpc.cc (Target_powerpc::symval_for_branch): Don't assert
+       on symbols defined in discarded sections, instead return false.
+       Rearrange params, update all callers.
+       (Target_powerpc::Branch_info::make_stub): Don't make stubs for
+       branches to syms in discarded sections.
+       (Global_symbol_visitor_opd::operator()): Set discarded opd syms
+       undefined and flag as discarded.
+       (Target_powerpc::Relocate::relocate): Localize variable.
+
+2014-12-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gold/17675
+       * testsuite/Makefile.am (pie_copyrelocs_test_CXXFLAGS): New.
+       * testsuite/Makefile.in: Regenerated.
+
+2014-12-03  Alan Modra  <amodra@gmail.com>
+
+       PR 17566
+       * powerpc.cc (Target_powerpc::Scan::local): Use add_local_section
+       when adding dynamic relocations against section symbols.
+
+2014-12-01  Dimitry Ivanov <dimitry@google.com>
+
+       * layout.cc (Layout::finish_dynamic_section): When '-z global'
+       is specified set DF_1_GLOBAL in DT_FLAGS_1 flags.
+       * options.h (General_options): New -z option (global).
+
+2014-12-01  Cary Coutant  <ccoutant@google.com>
+
+       PR gold/17578
+       * layout.cc (Layout::layout_gnu_stack): Don't warn when -z execstack
+       is given.
+       (Layout::create_executable_stack_info): Warn when -z noexecstack is
+       given but some inputs require executable stack.
+
+2014-11-26  Cary Coutant  <ccoutant@google.com>
+
+       * layout.cc (gdb_sections): Keep .debug_gdb_scripts and
+       .debug_str_offsets; strip .debug_gnu_pubnames and
+       .debug_gnu_pubtypes.
+       (lines_only_debug_sections): Strip all four new sections.
+
+2014-11-26  Jing Yu  <jingyu@google.com>
+
+       * aarch64.cc (Relocate::tls_desc_gd_to_ie): Set ldr target
+       register to be x0 when to relax TLSDESC_LD64_LO12.
+
+2014-11-26  Alan Modra  <amodra@gmail.com>
+
+       * powerpc.cc (struct Stub_table_owner): New.
+       (Powerpc_relobj): Rename stub_table_ to stub_table_index_, an
+       unsigned int vector.  Update all references.
+       (powerpc_relobj::set_stub_table): Take an unsigned int param
+       rather than a Stub_table.  Update callers.
+       (Powerpc_relobj::clear_stub_table): New function.
+       (Target_powerpc): Add relax_failed_, relax_fail_count_ and
+       stub_group_size_ vars.
+       (Target_powerpc::new_stub_table): Delete.
+       (max_branch_delta): New function, extracted from..
+       (Target_powerpc::Relocate::relocate): ..here..
+       (Target_powerpc::Branch_info::make_stub): ..and here.  Return
+       status on whether stub created successfully.
+       (Stub_control::Stub_control): Add "no_size_errors" param.  Move
+       default sizing to..
+       (Target_powerpc::do_relax): ..here.  Init stub_group_size_ and
+       reduce on relax failure.
+       (Target_powerpc::group_sections): Add "no_size_errors" param.
+       Use stub_group_size_.  Set up group info in a temp vector,
+       before building Stub_table vector.  Account for input sections
+       possibly already converted to relaxed sections.
+       (Stub_table::init): Delete.  Merge into..
+       (Stub_table::Stub_table): ..here.
+       (Stub_table::can_reach_stub): New function.
+       (Stub_table::add_plt_call_entry): Add "from" parameter and
+       return true iff stub could be reached.
+       (Stub_table::add_long_branch_entry): Similarly.  Add "r_type"
+       param too.
+       (Stub_table::clear_stubs): Add "all" param.
+
 2014-11-26  Alan Modra  <amodra@gmail.com>
 
        * powerpc.cc (Stub_control::set_output_and_owner): New function.
        * aarch64.cc (AArch64_relocate_functions::maybe_apply_stub):
        Add "typename" keyword.
 
-2014-09-22  Han Shen  <shenhan@google.com>
+2014-10-15  Han Shen  <shenhan@google.com>
             Jing Yu   <jingyu@google.com>
 
        Patch for gold aarch64 backend to support relaxation.
 
        * Added source code to GNU binutils.
 \f
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
This page took 0.037 seconds and 4 git commands to generate.