+2008-05-21 Ian Lance Taylor <iant@google.com>
+
+ * mapfile.cc: New file.
+ * mapfile.h: New file.
+ * options.h (class General_options): Add -M/--print-map and -Map.
+ * options.cc (General_options::finalize): Make -M equivalent to
+ -Map -.
+ * main.cc: Include <cstdio> and "mapfile.h".
+ (main): Open mapfile if requested.
+ * gold.cc (class Middle_runner): Add mapfile_ field. Update
+ constructor. Change caller.
+ (queue_initial_tasks): Add mapfile parameter. Change caller.
+ (queue_middle_tasks): Likewise.
+ * gold.h (queue_initial_tasks, queue_middle_tasks): Update
+ declarations.
+ * archive.cc: Include "mapfile.h".
+ (Archive::add_symbols): Add mapfile parameter. Change all
+ callers. Pass mapfile, symbol, and reason to include_member.
+ (Archive::include_all_members): Add mapfile parameter. Change all
+ callers.
+ (Archive::include_member): Add mapfile, sym, and why parameters.
+ Change all callers. Report inclusion to map file.
+ * archive.h: Include "fileread.h".
+ (class Archive): Update declarations.
+ (Archive::file): New const method.
+ (class Add_archive_symbols): Add mapfile_ field. Update
+ constructor. Change all callers.
+ * readsyms.h (class Read_symbols): Likewise.
+ (class Finish_group): Likewise.
+ (class Read_script): Likewise.
+ * common.cc: Include "mapfile.h".
+ (Symbol_table::allocate_commons): Add mapfile parameter. Change
+ all callers.
+ (Symbol_table::do_allocate_commons): Likewise.
+ (Symbol_table::do_allocate_commons_list): Likewise. Report common
+ symbol allocation to mapfile.
+ * common.h (class Allocate_commons_task): Add mapfile_ field.
+ Update constructor. Change all callers.
+ * symtab.h (class Symbol_table): Update declarations.
+ * layout.cc: Include "mapfile.h".
+ (Layout_task_runner::run): Print information to mapfile.
+ (Layout::create_gold_note): Change Output_data_fixed_space to
+ Output_data_zero_fill.
+ (Layout::create_build_id): Likewise.
+ (Layout::print_to_mapfile): New function.
+ * layout.h (class Layout_task_runner): Add mapfile_ field. Update
+ constructor. Change caller.
+ (class Layout): Declare print_to_mapfile.
+ * output.cc (Output_section::Input_section::print_to_mapfile): New
+ function.
+ (Output_section::add_input_section): If producing a map, always
+ add to input_sections_ list.
+ (Output_section::do_print_to_mapfile): New function.
+ (Output_segment::print_sections_to_mapfile): New function.
+ (Output_segment::print_section_list_to_mapfile): New function.
+ * output.h: Include "mapfile.h".
+ (Output_data::print_to_mapfile): New function.
+ (Output_data::do_print_to_mapfile): New virtual function.
+ (Output_segment_headers::do_print_to_mapfile): New function.
+ (Output_file_header::do_print_to_mapfile): New function.
+ (Output_data_const::do_print_to_mapfile): New function.
+ (class Output_data_const_buffer): Add map_name_ field. Update
+ constructor. Change all callers. Add do_print_to_mapfile
+ function.
+ (class Output_data_fixed_space): Likewise.
+ (class Output_data_space): Likewise.
+ (class Output_data_zero_fill): New class.
+ (Output_data_strtab::do_print_to_mapfile): New function.
+ (Output_data_reloc_base::do_print_to_mapfile): New function.
+ (Output_relocatable_relocs::do_print_to_mapfile): New function.
+ (Output_data_group::do_print_to_mapfile): New function.
+ (Output_data_got::do_print_to_mapfile): New function.
+ (Output_data_dynamic::do_print_to_mapfile): New function.
+ (Output_symtab_xindex::do_print_to_mapfile): New function.
+ (class Output_section): Declare do_print_to_mapflie. Declare
+ print_to_mapfile in Input_section.
+ (class Output_segment): Declare new functions.
+ * object.h (Sized_relobj::symbol_count): New function.
+ * script-sections.cc
+ (Output_section_element_dot_assignment::set_section_addresses):
+ Change Output_data_fixed_space to Output_data_zero_fill.
+ (Output_data_expression::do_print_to_mapfile): New function.
+ * script.cc (read_input_script): Add mapfile parameter. Change
+ all callers.
+ * script.h (read_input_script): Update declaration.
+ * ehframe.h (Eh_frame_hdr::do_print_to_mapfile): New function.
+ (Eh_frame::do_print_to_mapfile): New function.
+ * merge.h (Output_merge_data::do_print_to_mapfile): New function.
+ (Output_merge_string::do_print_to_mapfile): New function.
+ * i386.cc (Output_data_plt_i386::do_print_to_mapfile): New
+ function.
+ * sparc.cc (Output_data_plt_sparc::do_print_to_mapfile): New
+ function.
+ * x86_64.cc (Output_data_plt_x86_64::do_print_to_mapfile): New
+ function.
+ * Makefile.am (CCFILES): Add mapfile.cc.
+ (HFILES): Add mapfile.h.
+ * Makefile.in: Rebuild.
+
+2008-05-19 Ian Lance Taylor <iant@google.com>
+
+ * options.h (class General_options): Add -z relro.
+ * layout.cc (Layout::Layout): Initialize relro_segment_.
+ (Layout::add_output_section_data): Return the output section.
+ (Layout::make_output_section): Rcognize relro sections and mark
+ them appropriately.
+ (Layout::attach_allocated_section_to_segment): Put relro sections
+ in a PT_GNU_RELRO segment.
+ (Layout::create_initial_dynamic_sections): Mark the .dynamic
+ section as relro.
+ (Layout::segment_precedes): Sort PT_GNU_RELRO segments after
+ PT_TLS segments.
+ (Layout::linkonce_mapping): Map d.rel.ro.local to
+ .data.rel.ro.local.
+ (Layout::output_section_name): Us .data.rel.ro.local for any
+ section which begins with that.
+ * layout.h (class Layout): Update add_output_section_data
+ declaration. Add relro_segment_ field.
+ * output.cc (Output_section::Output_section): Initialize is_relro_
+ and is_relro_local_ fields.
+ (Output_segment::add_output_section): Group relro sections.
+ (Output_segment::is_first_section_relro): New function.
+ (Output_segment::maximum_alignment): If there is a relro section,
+ align the segment to the common page size.
+ (Output_segment::set_section_addresses): Track whether we are
+ looking at relro sections. If the last section is a relro
+ section, align to the common page size.
+ (Output_segment::set_section_list_addresses): Add in_relro
+ parameter. Change all callers. Align to the page size when
+ moving from relro to non-relro section.
+ (Output_segment::set_offset): Align memsz of a PT_GNU_RELRO
+ segment.
+ * output.h (class Output_section): Add is_relro_ and
+ is_relro_local_ fields.
+ (Output_section::is_relro): New function.
+ (Output_section::set_is_relro): New function.
+ (Output_section::is_relro_local): New function.
+ (Output_section::set_is_relro_local): New function.
+ (class Output_segment): Update declarations.
+ * i386.cc (Target_i386::got_section): Mark .got section as relro.
+ * sparc.cc (Target_sparc::got_section): Likewise.
+ * x86_64.cc (Target_x86_64::got_section): Likewise.
+ * testsuite/relro_test_main.cc: New file.
+ * testsuite/relro_test.cc: New file.
+ * testsuite/Makefile.am (check_PROGRAMS): Add relro_test.
+ (relro_test_SOURCES, relro_test_DEPENDENCIES): New variables.
+ (relro_test_LDFLAGS, relro_test_LDADD): New variables.
+ (relro_test.so, relro_test_pic.o): New targets.
+ * testsuite/Makefile.in: Rebuild.
+
+2008-05-16 Ian Lance Taylor <iant@google.com>
+
+ * output.cc (Output_segment::add_output_section): Remove front
+ parameter.
+ * output.h (class Output_segment): Remove
+ add_initial_output_section and overloaded add_output_section.
+ Update declaration of remaining add_output_section.
+ * layout.cc (Layout::create_interp): Call add_output_section
+ rather than add_initial_output_section.
+ (Layout::finish_dynamic_section): Likewise.
+
+ * i386.cc (Target_i386::Relocate::relocate_tls): Set dynamic type
+ for TLS_GOTDESC and TLS_DESC_CALL. Only optimize TLS_LDO_32 if we
+ know the dynamic type.
+ * x86_64.cc (Target_x86_64::Relocate): Add saw_tls_block_reloc_
+ field. Initialize it in constructor.
+ (Target_x86_64::Relocate::relocate_tls): Record that we saw a TLS
+ block reloc for TLSGD, GOTPC32_TLSDESC, TLSDESC_CALL, and TLSLD.
+ Only optimize DTPOFF32 and DTPOFF64 if we have seen a TLS block
+ reloc.
+
+ * output.cc (Output_reloc::get_address): Change return type to
+ Elf_Addr.
+ * output.h (class Output_reloc): Update get_address declaration.
+ * x86_64.cc (Output_data_plt_x86_64::do_write): Use 64-bit types
+ for section addresses.
+
+2008-05-09 Ian Lance Taylor <iant@google.com>
+
+ PR 6493
+ * gold.cc (gold_nomem): Use return value of write.
+
+2008-05-08 Ian Lance Taylor <iant@google.com>
+
+ * symtab.c (Symbol::init_base_output_data): Add version
+ parameter. Change all callers.
+ (Symbol::init_base_output_segment): Likewise.
+ (Symbol::init_base_constant): Likewise.
+ (Symbol::init_base_undefined): Likewise.
+ (Sized_symbol::init_output_data): Likewise.
+ (Sized_symbol::init_output_segment): Likewise.
+ (Sized_symbol::init_constant): Likewise.
+ (Sized_symbol::init_undefined): Likewise.
+ (Symbol_table::do_define_in_output_data): If the new symbol has a
+ version, mark it as the default.
+ (Symbol_table::do_define_in_output_segment): Likewise.
+ (Symbol_table::do_define_as_constant): Likewise.
+ * symtab.h (class Symbol): Update declarations.
+ (class Sized_symbol): Likewise.
+ * resolve.cc (Symbol::override_version): New function.
+ (Symbol::override_base: Call override_version.
+ (Symbol::override_base_with_special): Likewise.
+ * testsuite/ver_script_8.script: New file.
+ * testsuite/Makefile.am (check_PROGRAMS): Add ver_test_8.
+ (ver_test_8_SOURCES, ver_test_8_DEPENDENCIES): Define.
+ (ver_test_8_LDFLAGS, ver_test_8_LDADD): Define.
+ (ver_test_8_1.so, ver_test_8_2.so): New targets.
+
+2008-05-06 Ian Lance Taylor <iant@google.com>
+
+ PR 6049
+ * options.h (DEFINE_set): Add VARNAME_begin and VARNAME_end
+ functions.
+ (class General_options): Remove existing --undefined, and add
+ --no-undefined instead. Add new --undefined as synonym for -u.
+ * archive.cc (Archive::add_symbols): Check whether symbol was
+ named with -u.
+ * gold.cc (queue_middle_tasks): Add -u symbols to symbol table.
+ * symtab.h (class Symbol): Rename CONSTANT to IS_CONSTANT; change
+ all uses. Add IS_UNDEFINED. Update declarations to split
+ different versions of init_base. Declare init_base_undefined.
+ (Symbol::is_defined): Handle IS_UNDEFINED.
+ (Symbol::is_undefined): Likewise.
+ (Symbol::is_weak_undefined): Call is_undefined.
+ (Symbol::is_absolute): Handle IS_CONSTANT.
+ (class Sized_symbol): Update declarations to split different
+ versions of init. Declare init_undefined.
+ (class Symbol_table): Declare new functions.
+ * symtab.cc (Symbol::init_base_object): Rename from init_base.
+ Change all callers.
+ (Symbol::init_base_output_data): Likewise.
+ (Symbol::init_base_output_segment): Likewise.
+ (Symbol::init_base_constant): Likewise.
+ (Symbol::init_base_undefined): New function.
+ (Sized_symbol::init_object): Rename from init. Change all
+ callers.
+ (Sized_symbol::init_output_data): Likewise.
+ (Sized_symbol::init_output_segment): Likewise.
+ (Sized_symbol::init_constant): Likewise.
+ (Sized_symbol::init_undefined): New function.
+ (Symbol_table::add_undefined_symbols_from_command_line): New
+ function.
+ (Symbol_table::do_add_undefined_symbols_from_command_line): New
+ function.
+ (Symbol::final_value_is_known): Handle IS_UNDEFINED.
+ (Symbol::output_section): Likewise.
+ (Symbol::set_output_section): Likewise.
+ (Symbol_table::sized_finalize_symbol): Likewise.
+ (Symbol_table::sized_write_globals): Likewise.
+ * resolve.cc (Symbol_table::should_override): Likewise.
+ (Symbol::override_base_with_special): Likewise.
+
+ * symtab.cc (Symbol_table::add_from_dynobj): If we see a protected
+ symbol, change it to have default visibility.
+ * testsuite/protected_1.cc: New file.
+ * testsuite/protected_2.cc: New file.
+ * testsuite/protected_3.cc: New file.
+ * testsuite/protected_main_1.cc: New file.
+ * testsuite/protected_main_2.cc: New file.
+ * testsuite/protected_main_3.cc: New file.
+ * testsuite/Makefile.am (check_PROGRAMS): Add protected_1.
+ (protected_1_SOURCES, protected_1_DEPENDENCIES): Define.
+ (protected_1_LDFLAGS, protected_1_LDADD): Define.
+ (protected_1.so): New target.
+ (protected_1_pic.o, protected_2_pic.o): New targets.
+ (protected_3_pic.o): New target.
+ (check_PROGRAMS): Add protected_2.
+ (protected_2_SOURCES, protected_2_DEPENDENCIES): Define.
+ (protected_2_LDFLAGS, protected_2_LDADD): Define.
+ * testsuite/Makefile.in: Rebuild.
+
+ * options.h (DEFINE_var): Add set_user_set_##varname__.
+ (DEFINE_bool_alias): New macro.
+ (class General_options): Define -Bstatic using DEFINE_bool_alias
+ rather than DEFINE_special. Add --undefined as an alias for -z
+ defs.
+ * options.cc (General_options::parse_Bstatic): Remove.
+
+ * options.h (class General_options): Add --fatal-warnings.
+ * main.cc (main): Implement --fatal-warnings.
+ * errors.h (Errors::warning_count): New function.
+
+ * options.h (class General_options): Add -Bsymbolic-functions.
+ * symtab.h (Symbol::is_preemptible): Check for
+ -Bsymbolic-functions.
+
+2008-05-05 Ian Lance Taylor <iant@google.com>
+
+ * options.h (DEFINE_bool): For DASH_Z, create the negative option
+ as noVARNAME rather than no-VARNAME.
+ (class General_options): Add option -z combreloc.
+ * output.h (class Output_reloc) [SHT_REL]: Declare compare and
+ get_address.
+ (Output_reloc::sort_before) [SHT_REL]: New function.
+ (Output_reloc::sort_before) [SHT_RELA]: New function.
+ (class Output_data_reloc_base): Add sort_relocs_ field. Define
+ Sort_relocs_comparison.
+ (Output_data_reloc_base::Output_data_reloc_base): Add sort_relocs
+ parameter. Change all callers.
+ (Output_data_reloc::Output_data_reloc) [both versions]: Add
+ sort_relocs parameter. Change all callers.
+ * output.cc (Output_reloc::get_address): New function, broken out
+ of write_rel.
+ (Output_reloc::write_rel): Call it.
+ (Output_reloc::compare): New function.
+ (Output_data_reloc_base::do_write): Optionally sort relocs.
+
+ * configure.ac: If targ_extra_obj is set, link it in.
+ * configure.tgt: Initialize all variables.
+ (x86_64*): Set targ_extra_obj and targ_extra_size.
+ * configure: Rebuild.
+
+ * object.cc (Sized_relobj::include_section_group): Adjust section
+ indexes read from group data. Build vector to pass to
+ layout_group.
+ * layout.cc (Layout::layout_group): Add flags and shndxes
+ parameters. Remove contents parameter. Change caller. Update
+ explicit instantiations.
+ * layout.h (class Layout): Update layout_group declaration.
+ * output.cc (Output_data_group::Output_data_group): Add flags and
+ input_shndxes parameters. Remove contents parameter. Change
+ caller.
+ (Output_data_group::do_write): Change input_sections_ to
+ input_shndxes_.
+ * output.h (class Output_data_group): Update constructor
+ declaration. Rename input_sections_ to input_shndxes_.
+ * testsuite/many_sections_test.cc: Add template.
+
+2008-04-30 Cary Coutant <ccoutant@google.com>
+
+ * target-reloc.h (relocate_section): Fix dead-pointer bug.
+
+ * layout.cc (Layout::include_section): Refactored check for debug
+ info section.
+ (Layout::add_comdat): Add new parameters. Change type
+ of signature parameter. Add object and shndx to signatures table.
+ (Layout::find_kept_object): New function.
+ * layout.h: Include <cstring>.
+ (Layout::is_debug_info_section): New function.
+ (Layout::add_comdat): Add new parameters.
+ (Layout::find_kept_object): New function.
+ (Layout::Kept_section): New struct.
+ (Layout::Signatures): Change type of map range.
+ * object.cc (Relobj::output_section_address): New function.
+ (Sized_relobj::include_section_group): Add new parameters. Change
+ calls to Layout::add_comdat. Change to build table of kept comdat
+ groups and table mapping discarded sections to kept sections.
+ (Sized_relobj::include_linkonce_section): Likewise. Add new parameter.
+ (Sized_relobj::do_layout): Change calls to include_section_group and
+ include_linkonce_section.
+ (Sized_relobj::do_finalize_local_symbols): Do not set local symbol
+ value to zero when section is discarded.
+ (Sized_relobj::map_to_kept_section): New function.
+ * object.h (Relobj::output_section_address): New function.
+ (Relobj::Comdat_group): New type.
+ (Relobj::find_comdat_group): New function.
+ (Relobj::Comdat_group_table): New type.
+ (Relobj::Kept_comdat_section): New type.
+ (Relobj::Kept_comdat_section_table): New type.
+ (Relobj::add_comdat_group): New function.
+ (Relobj::set_kept_comdat_section): New function.
+ (Relobj::get_kept_comdat_section): New function.
+ (Relobj::comdat_groups_): New field.
+ (Relobj::kept_comdat_sections_): New field.
+ (Symbol_value::input_value): Update comment.
+ (Sized_relobj::map_to_kept_section) New function.
+ (Sized_relobj::include_linkonce_section): Add new parameter.
+ * target-reloc.h (Comdat_behavior): New type.
+ (get_comdat_behavior): New function.
+ (relocate_section): Add code to map a discarded section to the
+ corresponding kept section when applying a relocation.
+
2008-04-30 Craig Silverstein <csilvers@google.com>
* dwarf_reader.cc (next_generation_count): New static var.