Sriraman Tallam [Sat, 13 Feb 2010 02:04:21 +0000 (02:04 +0000)]
2010-02-12 Sriraman Tallam <tmsriram@google.com>
* arm.cc (Scan::local_reloc_may_be_function_pointer): New function.
(Scan::global_reloc_may_be_function_pointer): New function.
* sparc.cc (Scan::local_reloc_may_be_function_pointer): New function.
(Scan::global_reloc_may_be_function_pointer): New function.
* powerpc.cc (Scan::local_reloc_may_be_function_pointer): New function.
(Scan::global_reloc_may_be_function_pointer): New function.
* i386.cc (Scan::local_reloc_may_be_function_pointer): New function.
(Scan::global_reloc_may_be_function_pointer): New function.
* x86_64.cc (Scan::local_reloc_may_be_function_pointer): New function.
(Scan::global_reloc_may_be_function_pointer): New function.
(Scan::possible_function_pointer_reloc): New function.
(Target_x86_64::can_check_for_function_pointers): New function.
* gc.h (gc_process_relocs): Scan relocation types to determine if
function pointers were taken for targets that support it.
* icf.cc (Icf::find_identical_sections): Include functions for
folding in safe ICF whose pointer is not taken.
* icf.h (Secn_fptr_taken_set): New typedef.
(fptr_section_id_): New member.
(section_has_function_pointers): New function.
(set_section_has_function_pointers): New function.
(check_section_for_function_pointers): New function.
* options.h: Fix comment for safe ICF option.
* target.h (can_check_for_function_pointers): New function.
* testsuite/Makefile.am: Add icf_safe_so_test test case.
Modify icf_safe_test for X86-64.
* testsuite/Makefile.in: Regenerate.
* testsuite/icf_safe_so_test.cc: New file.
* testsuite/icf_safe_so_test.sh: New file.
* testsuite/icf_safe_test.cc (kept_func_3): New function.
(main): Change to take pointer to function kept_func_3.
* testsuite/icf_safe_test.sh (arch_specific_safe_fold): Check if safe
folding is done correctly for X86-64.
* sparc.cc (Target_sparc::Scan::local): Use
->add_symbolless_local_addend as needed.
(Target_sparc::Scan::global): Use ->add_symbolless_global_addend as
needed. Also, emit appropriate unaligned vs. aligned dynamic reloc
based upon relocation offset.
Michael Snyder [Fri, 12 Feb 2010 21:39:27 +0000 (21:39 +0000)]
2010-02-12 Tomas Holmberg <th@virtutech.com>
* mi-reverse.exp: New file. Test for reverse option to the
following MI commands: exec-continue, exec-finish, exec-next,
exec-step, exec-next-instruction, exec-step-instruction.
Michael Snyder [Fri, 12 Feb 2010 21:35:54 +0000 (21:35 +0000)]
2010-02-12 Jakob Engblom <jakob@virtutech.com>
* gdb.texinfo (MI commands): Added documentation of --reverse
option to a set of MI commands. Restructured documentation of MI
commands --exec-continue to reflect the complexity of reverse
execution.
Michael Snyder [Fri, 12 Feb 2010 21:28:25 +0000 (21:28 +0000)]
2010-02-12 Tomas Holmberg <th@virtutech.com>
* mi/mi-main.c: Added the --reverse flag to the following MI
commands: exec-continue, exec-finish, exec-next, exec-step,
exec-next-instruction, exec-step-instruction. This is to
support reverse execution over the MI interface to gdb.
Daniel Gutson [Fri, 12 Feb 2010 20:52:52 +0000 (20:52 +0000)]
2010-02-12 Daniel Gutson <dgutson@codesourcery.com>
bfd/
* elf32-arm.c (elf32_arm_output_arch_local_syms): add
missing mapping symbol to data only sections.
ld/testsuite/
* ld-arm/arm-elf.exp (armelftests): New test case added.
* ld-arm/data-only-map.s: New file.
* ld-arm/data-only-map.d: New file.
* ld-arm/data-only-map.ld: New file.
Pedro Alves [Fri, 12 Feb 2010 16:15:24 +0000 (16:15 +0000)]
gdb/doc/
* gdb.texinfo (Using the Collected Data): Specify that the address
range of `tfind outsize' is exclusive, and that the address range
of `tfind range' is inclusive.
(Tracepoint Packets): Specify that the address range of
`QTFrame:range' is inclusive, and that the address range of
`QTFrame:outside' is exclusive
gdb/
* tracepoint.c (_initialize_tracepoint): Specify that the address
range of `tfind outsize' is exclusive, and that the address range
of `tfind range' is inclusive, in the commands' help strings.
Doug Kwan [Fri, 12 Feb 2010 05:51:32 +0000 (05:51 +0000)]
2010-02-11 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::Scan::local): Fix bugs in relocation handling.
(Target_arm::Scan::global): Ditto. Also remove a comment before the
beginning of function.
(Target_arm::Relocate::relocate): Remove error messages for MOVW_ABS
and MOVT_ABS relocations. Those are non issued in scanning. Fix
parameter is_32bit in calls to should_apply_static_reloc.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_abs_global.sh.
(check_DATA): Add arm_abs_global.stdout.
(arm_abs_lib.o, libarm_abs.so, arm_abs_global.o, arm_abs_global,
arm_abs_global.stdout): New rules.
(MOSTLLYCLEANFILES): Add arm_abs_global
* Makefile.in: Regenerate.
* testsuite/arm_abs_global.s: New file.
* testsuite/arm_abs_global.sh: Ditto.
* testsuite/arm_abs_lib.s: Ditto.
Ian Lance Taylor [Fri, 12 Feb 2010 04:33:53 +0000 (04:33 +0000)]
* gold.cc (queue_middle_gc_tasks): Use a separate blocker for each
Read_relocs task.
(queue_middle_tasks): Likewise, and also for Scan_relocs. Run
Allocate_commons_task first.
* reloc.cc (Read_relocs::run): Pass next_blocker_ down to next
task, rather than symtab_lock_.
(Gc_process_relocs::~Gc_process_relocs): New function.
(Gc_process_relocs::is_runnable): Check this_blocker_.
(Gc_process_relocs::locks): Use next_blocker_ rather than
blocker_.
(Scan_relocs::~Scan_relocs): New function.
(Scan_relocs::is_runnable): Check this_blocker_ rather than
symtab_lock_.
(Scan_relocs::locks): Drop symtab_lock_ and blocker_. Add
next_blocker_.
* reloc.h (class Read_relocs): Drop symtab_lock_ and blocker_
fields. Add this_blocker_ and next_blocker_ fields. Adjust
constructor accordingly.
(class Gc_process_relocs): Likewise.
(class Scan_relocs): Likewise.
* common.h (class Allocate_commons_task): Remove symtab_lock_
field, and corresponding constructor parameter.
* common.cc (Allocate_commons_tasK::is_runnable): Remove use of
symtab_lock_.
(Allocate_commons_task::locks): Likewise.
Ian Lance Taylor [Fri, 12 Feb 2010 03:23:26 +0000 (03:23 +0000)]
* gold-threads.h (class Once): Define.
(class Initialize_lock): Rewrite as child of Once.
* gold-threads.cc (class Once_initialize): Define.
(once_pointer_control): New static variable.
(once_pointer, once_arg): New static variables.
(c_run_once): New static function.
(Once::Once, Once::run_once, Once::internal_run): New functions.
(class Initialize_lock_once): Remove.
(initialize_lock_control): Remove.
(initialize_lock_pointer): Remove.
(initialize_lock_once): Remove.
(Initialize_lock::Initialize_lock): Move to gold-threads.h.
(Initialize_lock::initialize): Rewrite.
(Initialize_lock::do_run_once): New function.
* archive.cc (Archive::interpret_header): Only clear name if it is
not already empty.
* fileread.cc: Include "gold-threads.h"
(file_counts_lock): New static variable.
(file_counts_initialize_lock): Likewise.
(File_read::release): Only increment counts when using --stats.
Use a lock around the increment.
* parameters.cc (class Set_parameters_target_once): Define.
(set_parameters_target_once): New static variable.
(Parameters::Parameters): Move here from parameters.h.
(Parameters::set_target): Rewrite.
(Parameters::set_target_once): New function.
(Parameters::clear_target): Move here and rewrite.
* parameters.h (class Parameters): Update declarations. Add
set_parameters_target_once_ field.
(Parameters::Parameters): Move to parameters.cc.
(Parameters::clear_target): Likewise.
* readsyms.cc (Read_symbols::do_group): Create a Start_group
task.
(Start_group::~Start_group): New function.
(Start_group::is_runnable): New function.
(Start_group::locks, Start_group::run): New functions.
(Finish_group::run): Change saw_undefined to size_t.
* readsyms.h (class Start_group): Define.
(class Finish_group): Change saw_undefined_ field to size_t.
(Finish_group::Finish_group): Remove saw_undefined and
this_blocker parameters. Change all callers.
(Finish_group::set_saw_undefined): New function.
(Finish_group::set_blocker): New function.
* symtab.h (class Symbol_table): Change saw_undefined to return
size_t. Change saw_undefined_ field to size_t.
* target-select.cc (Set_target_once::do_run_once): New function.
(Target_selector::Target_selector): Initialize set_target_once_
field. Don't initialize lock_ and initialize_lock_ fields.
(Target_selector::instantiate_target): Rewrite.
(Target_selector::set_target): New function.
* target-select.h (class Set_target_once): Define.
(class Target_selector): Update declarations. Make
Set_target_once a friend. Remove lock_ and initialize_lock_
fields. Add set_target_once_ field.
Pedro Alves [Fri, 12 Feb 2010 01:24:09 +0000 (01:24 +0000)]
* breakpoint.c (allocate_bp_location): Use bp_loc_other for
bp_tracepoint and bp_fast_tracepoint, not
bp_loc_software_breakpoint.
(update_global_location_list): Tracepoints are never duplicates of
anything.
Pedro Alves [Fri, 12 Feb 2010 00:47:53 +0000 (00:47 +0000)]
* breakpoint.c (break_command_really): Change return type to int.
Return false if no breakpoint was created, true otherwise.
(trace_command): Don't set the tracepoint count if no tracepoint
was created.
(ftrace_command): Ditto.
(create_tracepoint_from_upload): Bail out if the tracepoint wasn't
created in the breakpoints table.
David S. Miller [Thu, 11 Feb 2010 19:57:40 +0000 (19:57 +0000)]
bfd/
* elfxx-sparc.c (_bfd_sparc_elf_check_relocs): For R_SPARC_GOTDATA_OP_HIX22
and R_SPARC_GOTDATA_OP_LOX10, only bump the GOT refcount for global
symbols.
(_bfd_sparc_elf_gc_sweep_hook): Likewise only decrement the GOT count for
these relocs on global symbols.
(gdopoff): New.
(_bfd_sparc_elf_relocate_section): Perform GOTDATA optimizations on
local symbol references which are not STT_GNU_IFUNC. Handle
relocation of them like R_SPARC_HIX22 and R_SPARC_LOX10 respectively,
and deal with negative vs. non-negative values properly.
Ian Lance Taylor [Thu, 11 Feb 2010 07:42:17 +0000 (07:42 +0000)]
* dirsearch.cc (Dirsearch::initialize): Add all blockers before
queueing any tasks.
* gold.cc (queue_middle_gc_tasks): Likewise. Fix final blocker.
(queue_middle_tasks): Add all blockers before queueing any tasks.
(queue_final_tasks): Likewise.
* token.h (Task_token::add_blockers): New function.
* object.h (Input_objects::number_of_relobjs): New function.
Ian Lance Taylor [Wed, 10 Feb 2010 23:00:29 +0000 (23:00 +0000)]
* i386.cc (Relocate::relocate_tls): A local symbol is final if not
shared, not if not position independent.
* x86_64.cc (Relocate::relocate_tls): Likewise.
* testsuite/Makefile.am (check_PROGRAMS): Add tls_pie_pic_test.
(tls_pie_pic_test): New target.
* testsuite/Makefile.in: Rebuild.
Vladimir Prus [Wed, 10 Feb 2010 22:22:02 +0000 (22:22 +0000)]
* mi/mi-cmd-stack.c (mi_cmd_stack_list_locals): Add extra
whitespace character after a dot in comment.
(mi_cmd_stack_list_arguments, mi_cmd_stack_list_variables):
Likewise.
(list_args_or_locals): For the 'all' (that is
-stack-list-variables) case, always output list of tuples.
Output 'arg' field if variable is argument.
David S. Miller [Tue, 9 Feb 2010 20:29:44 +0000 (20:29 +0000)]
* output.h (Output_data_dynamic::add_section_size): New method
that takes two Output_data objects.
(Output_data_dynamic::Dynamic_entry): Create storage for secondary
entry param. Handle it in initializers.
* output.cc (Output_data_dynamic::Dynamic_entry::write): For
DYNAMIC_SECTION_SIZE, add in second object size if non-NULL.
* layout.h (Layout::add_target_dynamic_tags): Add dynrel_includes_plt
arg.
* layout.cc (Layout::add_target_dynamic_tags): If dynrel_includes_plt,
and .rela.plt exists, set DT_REL{,A}SZ to sum of .rela.dyn and .rela.plt
* arm.cc (Target_arm::do_finalize_sections): Update to pass false
for dynrel_includes_plt.
* i386.cc (Target_i386::do_finalize_sections): Likewise.
* x86_64.cc (Target_x86_64::do_finalize_sections): Likewise.
* sparc.cc (Target_sparc::make_plt_entry): Force .rela.dyn to be output
before .rela.plt
(Target_sparc::do_finalize_sections): Update to pass true for
dynrel_includes_plt.
* powerpc.cc (Target_powerpc::make_plt_entry): Force .rela.dyn to be
output before .rela.plt
(Target_powerpc::do_finalize_sections): Update to pass true for
dynrel_includes_plt when 32-bit.
David S. Miller [Tue, 9 Feb 2010 20:05:19 +0000 (20:05 +0000)]
* sparc.cc (Target_sparc::Scan::local): Do not emit relocs other than
R_SPARC_RELATIVE using ->add_local_relative().
(Target_sparc::Scan::global): Likewise for ->add_global_relative().
Tristan Gingold [Tue, 9 Feb 2010 15:53:00 +0000 (15:53 +0000)]
2010-02-09 Tristan Gingold <gingold@adacore.com>
* machoread.c (macho_symfile_relocate): New function.
(macho_sym_fns): Use macho_symfile_relocate instead of
default_symfile_relocate.
(macho_oso_data): New type.
(current_oso): New variable.
(macho_add_oso_symfile): Do not compute section_addr_info, but
instead set vma of sections.
Do not set SYMFILE_VERBOSE to call symbol_file_add_from_bfd.
Set and clear current_oso.
gas/
* config/tc-arm.c (md_pcrel_from_section): Keep base to zero for
non-local branches (BFD_RELOC_THUMB_PCREL_BRANCH23,
BFD_RELOC_THUMB_PCREL_BLX, BFD_RELOC_ARM_PCREL_BLX,
BFD_RELOC_ARM_PCREL_CALL)
gas/testsuite/
* gas/arm/branch-reloc.s, gas/arm/branch-reloc.d,
gas/arm/branch-reloc.l: New tests and expected results with all
variants of call: ARM/Thumb, local/global, inter/intra-section,
using BL/BLX.
Joel Brobecker [Tue, 9 Feb 2010 13:15:10 +0000 (13:15 +0000)]
Wrong type description for tagged type parameter.
* ada-lang.c (ada_evaluate_subexp) [OP_VAR_VALUE]: When noside is
EVAL_AVOID_SIDE_EFFECTS, also handle the case when type is a
reference to a tagged type.
Alan Modra [Tue, 9 Feb 2010 12:31:01 +0000 (12:31 +0000)]
* elf64-ppc.c (merge_got_entries): Move earlier in file.
(allocate_dynrelocs): Merge got entries here if not doing multi-toc.
(ppc64_elf_size_dynamic_sections): Similarly merge tlsld_got.
(ppc64_elf_layout_multitoc): Don't resize if we have already
merged got entries.
Alan Modra [Tue, 9 Feb 2010 11:35:37 +0000 (11:35 +0000)]
* elf64-ppc.c (struct got_entry): Make tls_type and is_indirect
unsigned char. Update variables and code using them throughout file.
(struct ppc_link_hash_entry): Likewise for tls_mask.
Doug Kwan [Tue, 9 Feb 2010 06:46:00 +0000 (06:46 +0000)]
2010-02-08 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::simple_input_section_output_address): New
method.
(Arm_relobj::section_needs_cortex_a8_stub_scanning,
Arm_relobj::scan_section_for_cortex_a8_stubs,
Arm_relobj::do_relocation_section): Instead of calling
Output_section::output_address, use faster
Arm_relobj::simple_input_section_output_address.
David S. Miller [Tue, 9 Feb 2010 04:48:16 +0000 (04:48 +0000)]
gold/
2010-02-08 David S. Miller <davem@davemloft.net>
* sparc.cc (Target_sparc::Relocate::relocate): If relocation offset is
unaligned for R_SPARC_16, R_SPARC_32, or R_SPARC_64, use the unaligned
relocation helper function.
* elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Add loc_hash_table
and loc_hash_memory.
(_bfd_sparc_elf_link_hash_table_free): Declare.
* elf32-sparc.c (elf32_sparc_add_symbol_hook): New.
(elf_backend_add_symbol_hook, elf_backend_post_process_headers,
bfd_elf32_bfd_link_hash_table_free): Define.
* elf64-sparc.c (elf64_sparc_add_symbol_hook): Set
has_ifunc_symbols if STT_GNU_IFUNC.
(bfd_elf64_bfd_link_hash_table_free): Define.
(elf_backend_post_process_headers): Define always.
* elfxx-sparc.c (sparc_jmp_irel_howto, sparc_irelative_howto): New.
(sparc_reloc_map): Add entries for new IFUNC relocs.
(_bfd_sparc_elf_reloc_type_lookup): Handle new IFUNC relocs.
(_bfd_sparc_elf_info_to_howto_ptr): Likewise.
(elf_sparc_local_htab_hash, elf_sparc_local_htab_eq,
elf_sparc_get_local_sym_hash): New.
(_bfd_sparc_elf_create_dynamic_sections): Move PLT ops initialization
from here...
(_bfd_sparc_elf_link_hash_table_create): ... to here. Allocate
local hash table.
(_bfd_sparc_elf_link_hash_table_free): New.
(create_ifunc_sections): New.
(_bfd_sparc_elf_check_relocs): Unconditionally assign htab->elf.dynobj
and call create_ifunc_sections(). For local STT_GNU_IFUNC symbols
cons up a fake local hash table entry for it. Unconditionally add
a PLT refcount for STT_GNU_IFUNC symbols when h->def_regular. Count
dyn relocs for ifunc.
(_bfd_sparc_elf_adjust_dynamic_symbol): Handle ifunc.
(allocate_dynrelocs): Unconditionally emit a PLT entry when STT_GNU_IFUNC
and h->def_regular. Count GOT dyn relocs for ifunc.
(allocate_local_dynrelocs): New function.
(_bfd_sparc_elf_size_dynamic_sections): Invoke it over the local hash table.
Emit dynamic relocs to irelplt when not shared. Treat iplt like splt.
(_bfd_sparc_elf_relocate_section): Handle ifunc relocations by hand.
(_bfd_sparc_elf_finish_dynamic_symbol): Adjust for non-dynamic ifunc plt
in iplt/irelplt.
David S. Miller [Mon, 8 Feb 2010 20:18:03 +0000 (20:18 +0000)]
bfd/
* elfxx-sparc.h (struct _bfd_sparc_elf_link_hash_table): Remove sgot,
srelgot, splt, srelplt, and sgotplt members in favor of generic copies.
* elfxx-sparc.c (create_got_section): Delete.
(_bfd_sparc_elf_create_dynamic_sections): Don't call, the dynamic
section creator does that work for us. Use ->elf.foo instead of
->foo where applicable.
(_bfd_sparc_elf_check_relocs): Use ->elf.foo instead of ->foo
where applicable.
(allocate_dynrelocs): Likewise.
(_bfd_sparc_elf_size_dynamic_sections): Likewise.
(_bfd_sparc_elf_relocate_section): Likewise.
(sparc_vxworks_build_plt_entry): Likewise.
(_bfd_sparc_elf_finish_dynamic_symbol): Likewise.
(sparc_finish_dyn): Likewise.
(sparc_vxworks_finish_exec_plt): Likewise.
(sparc_vxworks_finish_shared_plt): Likewise.
(_bfd_sparc_elf_finish_dynamic_sections): Likewise.
* elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Use the SYMBOL_*
macros for visibilty and locality checks.
(_bfd_sparc_elf_adjust_dynamic_symbol): Likewise.
(allocate_dynrelocs): Likewise.
(_bfd_sparc_elf_relocate_section): Likewise.
(_bfd_sparc_elf_finish_dynamic_symbol):Likewise.
* elfxx-sparc.c (_bfd_sparc_elf_finish_dynamic_symbol): Remove set
but never used local var 'dynobj'.
Chris Moller [Mon, 8 Feb 2010 18:27:53 +0000 (18:27 +0000)]
PR gdb/10728
* valarith.c (value_ptrdiff): Added a test for a zero type length,
warn if found, and assume length = 1.
* gdb.cp/pr10728-x.h: New file.
* gdb.cp/pr10728-x.cc: New file.
* gdb.cp/pr10728-y.cc: New file.
* gdb.cp/pr10728.exp: New file.
* gdb.cp/Makefile.in (EXECUTABLES): Add pr10728
Chris Moller [Mon, 8 Feb 2010 18:04:17 +0000 (18:04 +0000)]
PR gdb/9067
* cp-valprint.c (cp_print_value_fields) Fix use of obstacks.
cp_print_static_field) Fix use of obstacks.
* gdb.cp/pr9067.exp: New
* gdb.cp/pr9067.cc: New
* gdb.cp/Makefile.in (EXECUTABLES): Add pr9067
Pedro Alves [Mon, 8 Feb 2010 15:44:09 +0000 (15:44 +0000)]
* linux-nat.c (linux_nat_resume): In non-stop, also only tag
resumed LWPs as resumed.
(linux_nat_wait_1): If there's no resumed LWP in the set of LWPs
we're waiting for, bail out with TARGET_WAITKIND_IGNORE, instead
of throwing an internal error. If an LWP of a process we're not
waiting for reports a signal, don't force collecting a SIGSTOP,
and if it was breakpoint hit in non-stop mode, cancel it. Don't
go through all LWPs cancelling breakpoints in non-stop mode.
(resume_stopped_resumed_lwps): New.
(linux_nat_wait): Use it.