Sriraman Tallam [Tue, 13 Oct 2009 21:17:43 +0000 (21:17 +0000)]
* gc.h (gc_process_relocs): Check if icf is enabled using new
function.
* gold.cc (queue_initial_tasks): Likewise.
(queue_middle_tasks): Likewise.
* object.cc (do_layout): Likewise.
* symtab.cc (is_section_folded): Likewise.
* main.cc (main): Likewise.
* reloc.cc (Read_relocs::run): Likewise.
(Sized_relobj::do_scan_relocs): Likewise.
* icf.cc (is_function_ctor_or_dtor): New function.
(Icf::find_identical_sections): Check if function is ctor or dtor when
safe icf is chosen.
* options.h (General_options::icf): Change option to be an enum.
(Icf_status): New enum.
(icf_enabled): New method.
(icf_safe_folding): New method.
(set_icf_status): New method.
(icf_status_): New variable.
* (options.cc) (General_options::finalize): Set icf_status_.
* testsuite/Makefile.am: Add commands to build icf_safe_test. Modify
icf_test and icf_keep_unique_test to use the --icf enum flag.
* testsuite/icf_safe_test.sh: New file.
* testsuite/icf_safe_test.cc: New file.
* solib-darwin.c: Add an empty line after comment for functions.
(struct gdb_dyld_all_image_infos): Improve comment.
(DYLD_VERSION): Removed and replaced by ...
(DYLD_VERSION_MAX, DYLD_VERSION_MIN): ... New macros.
(darwin_dyld_version_ok): New function.
(darwin_load_image_infos): Call darwin_dyld_version_ok.
(darwin_current_sos): Ditto.
(darwin_solib_create_inferior_hook): Ditto.
* machoread.c: Add an empty line after comment for functions.
(oso_el_compare_name): New function.
(macho_add_oso_symfile): New function.
(macho_oso_symfile): Use macho_add_oso_symfile. Sort the oso
and optimize accesses to libraries.
PR gas/3041
* gas/m68k/all.exp: Added "p3041data".
* gas/m68k/p3041.d, gas/m68k/p3041.s: Added tests of weak references
from text section to all possible sections.
* gas/m68k/p3041data.d, gas/m68k/p3041data.s: New test. Check weak
references from data section.
Ian Lance Taylor [Sat, 10 Oct 2009 04:56:43 +0000 (04:56 +0000)]
* descriptor.cc: Include <cstdio> and "binary-io.h".
(Descriptors::open): Open the files in binary mode always.
* script.cc (Lex::get_token): Treat \r as whitespace.
* configure.ac: Check for readv function also.
* fileread.cc (readv): Define if not HAVE_READV.
* fileread.h (File_read:: max_readv_entries): Set to 1 if readv
does not exist.
* config.in: Regenerate.
* configure: Regenerate.
* layout.cc (Layout::make_output_section): Call target hook to make
ordinary output section.
(Layout::finalize): Adjust parameter list of call the
Target::may_relax().
* layout.h (class Layout::section_list): New method.
* merge.h (Output_merge_base::entsize): Change visibility to public.
(Output_merge_base::is_string, Output_merge_base::do_is_string):
New methods.
(Output_merge_string::do_is_string): New method.
* object.cc (Sized_relobj::do_setup): renamed from
Sized_relobj::set_up.
* object.h (Sized_relobj::adjust_shndx,
Sized_relobj::initializ_input_to_output_maps,
Sized_relobj::free_input_to_output_maps): Change visibilities to
protected.
(Sized_relobj::setup): Virtualize.
(Sized_relobj::do_setup): New method declaration.
(Sized_relobj::invalidate_section_offset,
Sized_relobj::do_invalidate_section_offset): New method decfinitions.
(Sized_relobj::elf_file, Sized_relobj::local_values): New methods.
* options.cc (parse_int): New function.
* options.h (parse_int): New declaration.
(DEFINE_int): New macro.
(stub_group_size): New option.
* output.cc (Output_section::Output_section): Initialize memebers
merge_section_map_, merge_section_by_properties_map_,
relaxed_input_section_map_, is_relaxed_input_section_map_valid_.
(Output_section::add_input_section): Handled deferred code-fill
generation and remove an old comment.
(Output_section::add_relaxed_input_section): New method definition.
(Output_section::add_merge_input_section): Use merge section by
properties map to speed to search. Update merge section maps
as appropriate.
(Output_section::build_relaxation_map): New method definition.
(Output_section::convert_input_sections_in_list_to_relaxed_sections):
Same.
(Output_section::relax_input_section): Renamed to
Output_section::convert_input_sections_to_relaxed_sections and change
interface to take a vector of pointers to relaxed sections.
(Output_section::find_merge_section,
Output_section::find_relaxed_input_section): New method definitions.
(Output_section::is_input_address_mapped,
Output_section::output_offset, Output_section::output_address):
Use output section data maps to speed up searching.
(Output_section::find_starting_output_address): Add comments.
(Output_section::do_write,
Output_section::write_to_postprocessing_buffer): Do code-fill
generation as appropriate.
(Output_section::get_input_sections): Invalidate relaxed input section
map.
(Output_section::restore_states): Adjust type of checkpoint .
Invalidate relaxed input section map.
* output.h (Output_merge_base): New class declaration.
(Input_section_specifier): New class defintion.
(class Output_relaxed_input_section) Change base class to
Output_section_data_build.
(Output_relaxed_input_section::Output_relaxed_input_section): Adjust
base class initializer.
(Output_section::add_relaxed_input_section): New method declaration.
(Output_section::Input_section): Change visibility to protected.
(Output_section::Input_section::relobj,
Output_section::Input_section::shndx): Handle relaxed input sections.
Output_section::input_sections) Change visibility to protected. Also
define overload to return a non-const pointer.
(Output_section::Merge_section_properties): New class defintion.
(Output_section::Merge_section_by_properties_map,
Output_section::Output_section_data_by_input_section_map,
Output_section::Relaxation_map): New types.
(Output_section::relax_input_section): Rename method to
Output_section::convert_input_sections_to_relaxed_sections and change
interface to take a vector of relaxed section pointers.
(Output_section::find_merge_section,
Output_section::find_relaxed_input_section,
Output_section::build_relaxation_map,
Output_section::convert_input_sections_in_list_to_relaxed_sections):
New method declarations.
(Output_section::merge_section_map_
Output_section::merge_section_by_properties_map_,
Output_section::relaxed_input_section_map_,
Output_section::is_relaxed_input_section_map_valid_,
Output_section::generate_code_fills_at_write_): New data members.
* script-sections.cc
(Output_section_element_input::set_section_addresses): Call
current_data_size and addralign methods of relaxed input sections.
(Orphan_output_section::set_section_addresses): Call current_data_size
and addralign methods of relaxed input sections.
* symtab.cc (Symbol_table::compute_final_value): Extract template
from the body of Symbol_table::sized_finalize_symbol.
(Symbol_table::sized_finalized_symbol): Call
Symbol_table::compute_final_value.
* symtab.h (Symbol_table::Compute_final_value_status): New enum type.
(Symbol_table::compute_final_value): New templated method declaration.
* target.cc (Target::do_make_output_section): New method defintion.
* target.h (Target::make_output_section): New method declaration.
(Target::relax): Add more parameters for input objects, symbol table
and layout. Adjust call to do_relax.
(Target::do_make_output_section): New method declaration.
(Target::do_relax): Add parameters for input objects, symbol table
and layout.
* dwarf_reader.cc (Sized_dwarf_line_info::Sized_dwarf_line_info):
Change read_shndx type to unsigned int.
(Sized_dwarf_line_info::read_lines): Change shndx type to unsigned
int.
(Sized_dwarf_line_info::read_line_mappings): Likewise.
* dwarf_reader.h (Sized_dwarf_line_info::Sized_dwarf_line_info):
Change read_shndx type to unsigned int.
(Sized_dwarf_line_info::read_lines): Change shndx type to unsigned
int.
(Sized_dwarf_line_info::read_line_mappings): Likewise.
* layout.cc (Layout::create_symtab_sections): Cast the result of
local_symcount * symsize to off_t in the gold_assert.
elfcpp/:
* elf_file.h: (class Elf_strtab): New class.
gold/:
* gold.cc: (queue_initial_tasks): Pass incremental_inputs to
Incremental_checker.
* incremental.cc: (INCREMENTAL_LINK_VERSION): Change type to
unsigned int.
(class Incremental_inputs_header): New class.
(Incremental_inputs_header_writer): Edit comment.
(Incremental_inputs_entry): New class.
(Incremental_inputs_entry_writer): Edit comment.
(Sized_incremental_binary::do_find_incremental_inputs_section):
Add *strtab_shndx parameter, fill it.
(Sized_incremental_binary::do_check_inputs): New method.
(Incremental_checker::can_incrementally_link_output_file): Use
Sized_incremental_binary::check_inputs.
(Incremental_inputs::report_command_line): Save command line in
command_line_.
* incremental.h:
(Incremental_binary::find_incremental_inputs_section): New
method.
(Incremental_binary::do_find_incremental_inputs_section): Add
strtab_shndx parameter.
(Incremental_binary::do_check_inputs): New pure virtual method.
(Sized_incremental_binary::do_check_inputs): Declare.
(Incremental_checker::Incremental_checker): Add incremental_inputs
parameter, use it to initialize incremental_inputs_.
(Incremental_checker::incremental_inputs_): New field.
(Incremental_checker::command_line): New method.
(Incremental_checker::inputs): New method.
(Incremental_checker::command_line_): New field.
elfcpp/:
* elfcpp_file.h: Fix header guard. Include <cstdio>.
(class Elf_recognizer): New class, code from gold/object.cc.
(Elf_file::find_section_by_type): New method.
gold/:
* incremental.cc: Include <cstdarg> and "target-select.h".
(vexplain_no_incremental): New function.
(explain_no_incremental): New function.
(Incremental_binary::error): New method.
(Sized_incremental_binary::do_find_incremental_inputs_section): New
method.
(make_sized_incremental_binary): New function.
(open_incremental_binary): New function.
(can_incrementally_link_file): Add checks if output is ELF and has
inputs section.
* incremental.h: Include "elfcpp_file.h" and "output.h".
(Incremental_binary): New class.
(Sized_incremental_binary): New class.
(open_incremental_binary): Declare.
* object.cc (is_elf_object): Use
elfcpp::Elf_recognizer::is_elf_file.
(make_elf_object): Use elfcpp::Elf_recognizer::is_valid_header.
* output.h (Output_file::filesize): New method.
* mach-o.c (bfd_mach_o_scan_read_symtab_symbols): Rename to
bfd_mach_o_read_symtab_symbols.
(bfd_mach_o_scan_write_thread): Rename to bfd_mach_o_write_thread.
(bfd_mach_o_scan_write_relocs): Rename to bfd_mach_o_write_relocs.
(bfd_mach_o_scan_write_section_32): Rename to
bfd_mach_o_write_section_32.
(bfd_mach_o_scan_write_section_64): Rename to
bfd_mach_o_write_section_64.
(bfd_mach_o_scan_write_segment_32): Rename to
bfd_mach_o_write_segment_32.
(bfd_mach_o_scan_write_segment_64): Rename to
bfd_mach_o_write_segment_64.
(bfd_mach_o_scan_write_symtab): Rename to bfd_mach_o_write_symtab.
(bfd_mach_o_scan_read_section_32): Rename to
bfd_mach_o_read_section_32.
(bfd_mach_o_scan_read_section_64): Rename to
bfd_mach_o_read_section_64.
(bfd_mach_o_scan_read_section): Rename to bfd_mach_o_read_section.
(bfd_mach_o_scan_read_symtab_strtab): Rename to
bfd_mach_o_read_symtab_strtab.
(bfd_mach_o_scan_read_symtab_symbol): Rename to
bfd_mach_o_read_symtab_symbol.
(bfd_mach_o_scan_read_dysymtab_symbol): Rename to
bfd_mach_o_read_dysymtab_symbol.
(bfd_mach_o_scan_read_dylinker): Rename to bfd_mach_o_read_dylinker.
(bfd_mach_o_scan_read_dylib): Rename to bfd_mach_o_read_dylib.
(bfd_mach_o_scan_read_prebound_dylib): Rename to
bfd_mach_o_read_prebound_dylib.
(bfd_mach_o_scan_read_thread): Rename to bfd_mach_o_read_thread.
(bfd_mach_o_scan_read_dysymtab): Rename to bfd_mach_o_read_dysymtab.
(bfd_mach_o_scan_read_symtab): Rename to bfd_mach_o_read_symtab.
(bfd_mach_o_scan_read_uuid): Rename to bfd_mach_o_read_uuid.
(bfd_mach_o_scan_read_linkedit): Rename to bfd_mach_o_read_linkedit.
(bfd_mach_o_scan_read_str): Rename to bfd_mach_o_read_str.
(bfd_mach_o_scan_read_dyld_info): Rename to bfd_mach_o_read_dyld_info.
(bfd_mach_o_scan_read_segment): Rename to bfd_mach_o_read_segment.
(bfd_mach_o_scan_read_segment_32): Rename to
bfd_mach_o_read_segment_32.
(bfd_mach_o_scan_read_segment_64): Rename to
bfd_mach_o_read_segment_64.
(bfd_mach_o_scan_read_command): Rename to bfd_mach_o_read_command.
* mach-o.h (bfd_mach_o_scan_read_dysymtab_symbol): Rename to
bfd_mach_o_read_dysymtab_symbol.
* mach-o.c (bfd_mach_o_section_get_entry_size): Moved.
(bfd_mach_o_section_get_nbr_indirect): Ditto.
(bfd_mach_o_get_synthetic_symtab): New function.
(bfd_mach_o_print_private_header): Print the number of commands
in decimal.
* mach-o.h (bfd_mach_o_get_synthetic_symtab): Add prototype.
* mach-o-target.c: Do not defined bfd_mach_o_get_synthetic_symtab.
Pedro Alves [Fri, 9 Oct 2009 01:57:12 +0000 (01:57 +0000)]
* linux-nat.c (linux_nat_wait_1): Bail out, if TARGET_WNOHANG and
we found no event while waiting for a specific LWP.
* infrun.c (handle_inferior_event): Handle TARGET_WAITKIND_IGNORE
before anything else.
Pedro Alves [Fri, 9 Oct 2009 00:49:06 +0000 (00:49 +0000)]
* corelow.c (core_has_fake_pid): New.
(core_close): Clear it.
(add_to_thread_list): Fake a pid if one is not found on a Solaris
core. Add the inferior here. Always add the thread, don't use
thread_change_ptid.
(core_open): Don't add the main thread or the inferior here unless
we find that the core had no .reg/NN sections.
(get_core_register_section): Handle Solaris cores with fake pids.
* arm.cc (Arm_relocate_functions::extract_arm_movw_movt_addend):
New function.
(Arm_relocate_functions::insert_val_arm_movw_movt): New function.
(Arm_relocate_functions::extract_thumb_movw_movt_addend): New
function.
(Arm_relocate_functions::insert_val_thumb_movw_movt): New
function.
(Arm_relocate_functions::movw_abs_nc): New function.
(Arm_relocate_functions::movt_abs): New function.
(Arm_relocate_functions::thm_movw_abs_nc): New function.
(Arm_relocate_functions::thm_movt_abs): New function.
(Scan::local): Handle R_ARM_MOVW_ABS_NC, R_ARM_MOVT_ABS,
R_ARM_THM_MOVW_ABS_NC, R_ARM_THM_MOVT_ABS.
(Scan::global): Likewise.
(Relocate::relocate): Likewise.
(Relocatable_size_for_reloc::get_size_for_reloc): Likewise.
Nathan Sidwell [Wed, 7 Oct 2009 07:25:36 +0000 (07:25 +0000)]
ld/
* ldlang.c (lang_new_phdr): Check PHDRS and FILEHDR in loadable
segments do not appear after a different loadable segment.
* ld.texinfo (PHDRS): Document order of processing segments.
Document where PHDRS and FILEHDR may appear.
Alan Modra [Wed, 7 Oct 2009 05:13:53 +0000 (05:13 +0000)]
PR gas/2117
* config/tc-ia64.c (parse_operand): Use expression rather than
expression_and_evalute.
(parse_operand_and_eval): New function. Replace all uses of
parse_operand outside of parse_operands with this function.
(parse_operans_maybe_eval): New function. Replace uses of
parse_operand in parse_operands, except for the dummy, with
this function.
* i386.cc (class Target_i386::Relocate): Add ldo_addrs_ field.
(Target_i386::Relocate::relocate_tls): Call fix_up_ldo before
changing local_dynamic_type_ from LOCAL_DYNAMIC_NONE. When
handling R_386_TLS_LDO_32, if local_dynamic_type_ is NONE, push
the address on ldo_addrs_.
(Target_i386::Relocate::fix_up_ldo): New function.