1. Dec 05, 2015
    • Josh Stone's avatar
      gdbserver: set ptrace flags after creating inferiors · ece66d65
      Josh Stone authored
      Rename target_ops.arch_setup to .post_create_inferior.  In the Linux
      hook, continue calling the low arch setup, then also set ptrace flags.
      This corrects the possibility of running without flags, demonstrated by
      a new test that would fail to catch a fork before.
      
      gdb/gdbserver/ChangeLog:
      
      2015-12-04  Josh Stone  <jistone@redhat.com>
      
      	* target.h (struct target_ops) <arch_setup>: Rename to ...
      	(struct target_ops) <post_create_inferior>: ... this.
      	(target_arch_setup): Rename to ...
      	(target_post_create_inferior): ... this, calling post_create_inferior.
      	* server.c (start_inferior): Update target_arch_setup calls to
      	target_post_create_inferior.
      	* linux-low.c (linux_low_ptrace_options): Forward declare.
      	(linux_arch_setup): Update its comment for general use.
      	(linux_post_create_inferior): New, run arch_setup and setup ptrace.
      	(struct linux_target_ops): Use linux_post_create_inferior.
      	* lynx-low.c (struct lynx_target_ops): Update arch_setup stub comment
      	to post_create_inferior.
      	* nto-low.c (struct nto_target_ops): Likewise.
      	* spu-low.c (struct spu_target_ops): Likewise.
      	* win32-low.c (struct win32_target_ops): Likewise.
      
      gdb/testsuite/ChangeLog:
      
      2015-12-04  Josh Stone  <jistone@redhat.com>
      
      	* gdb.base/catch-fork-static.exp: New.
      ece66d65
    • GDB Administrator's avatar
      Automatic date update in version.in · cc51fd4c
      GDB Administrator authored
      cc51fd4c
    • H.J. Lu's avatar
      Optimize R_386_GOT32/R_386_GOT32X only if addend is 0 · 02e2aef8
      H.J. Lu authored
      Linker can't optimize R_386_GOT32 and R_386_GOT32X relocations if addend
      isn't 0.  It isn't valid to convert
      
      movl	foo@GOT+1(%ecx), %eax
      
      to
      
      leal	foo@GOTOFF+1(%ecx), %eax
      
      nor to convert
      
      movq	foo@GOTPCREL+1(%rip), %rax
      
      to
      
      leaq	foo(%rip), %rax
      
      for x86-64.  We should check if addend is 0 before optimizing R_386_GOT32
      and R_386_GOT32X relocations.  Testcases are added for i386 and x86-64.
      
      bfd/
      
      	* elf32-i386.c (elf_i386_convert_load): Skip if addend isn't 0.
      	(elf_i386_relocate_section): Skip R_386_GOT32X optimization if
      	addend isn't 0.
      
      ld/testsuite/
      
      	* ld-i386/i386.exp: Run mov2a, mov2b and mov3.
      	* ld-i386/mov2.s: New file.
      	* ld-i386/mov2a.d: Likewise.
      	* ld-i386/mov2b.d: Likewise.
      	* ld-i386/mov3.d: Likewise.
      	* ld-i386/mov3.s: Likewise.
      	* ld-x86-64/mov2.s: Likewise.
      	* ld-x86-64/mov2a.d: Likewise.
      	* ld-x86-64/mov2b.d: Likewise.
      	* ld-x86-64/mov2c.d: Likewise.
      	* ld-x86-64/mov2d.d: Likewise.
      	* ld-x86-64/x86-64.exp: Run mov2a, mov2b, mov2c and mov2d.
      02e2aef8
  2. Dec 04, 2015
    • Nick Clifton's avatar
      Fix GAS testsuite failures for COFF/PE based ARM targets. · f27c5390
      Nick Clifton authored
      	PR gas/19276
      gas	* config/tc-arm.h (SUB_SEGMENT_ALIGN): Do not define for COFF/PE
      	targets.
      
      testsuite	* gas/arm/align64.d: Skip for COFF/PE targets.
      	* gas/arm/bundle-lock.d: Adjust for COFF/PE targets.
      f27c5390
    • Tristan Gingold's avatar
      Remove useless loop in elf.c · 461c4b2e
      Tristan Gingold authored
      461c4b2e
    • Claudiu Zissulescu's avatar
      Fix failures in the GAS testsuite for the ARC architecture. · 24b368f8
      Claudiu Zissulescu authored
      gas	* config/tc-arc.c (arc_option): Sets all internal gas options when
      	parsing .cpu directive.
      	(declare_register_set): Declare all 64 registers.
      	(md_section_align): Refactor.
      	(md_pcrel_from_section): Remove assert.
      	(pseudo_operand_match): Fix pseudo operand match.
      	(find_reloc): Use flags filed, extend matching.
      	* config/tc-arc.h (TC_VALIDATE_FIX): Don't fixup any PLT
      	relocation.
      
      testsuite	* gas/arc/bic.d: Update test.
      	* gas/arc/add_s-err.s: New file.
      	* gas/arc/cpu-warn1.s: Likewise.
      	* gas/arc/pcl-relocs.d: Likewise.
      	* gas/arc/pcl-relocs.s: Likewise.
      	* gas/arc/pcrel-relocs.d: Likewise.
      	* gas/arc/pcrel-relocs.s: Likewise.
      	* gas/arc/pic-relocs.d: Likewise.
      	* gas/arc/pic-relocs.s: Likewise.
      	* gas/arc/plt-relocs.d: Likewise.
      	* gas/arc/plt-relocs.s: Likewise.
      	* gas/arc/pseudos.d: Likewise.
      	* gas/arc/pseudos.s: Likewise.
      	* gas/arc/sda-relocs.d: Likewise.
      	* gas/arc/sda-relocs.s: Likewise.
      	* gas/arc/sda-relocs2.d: Likewise.
      	* gas/arc/sda-relocs2.s: Likewise.
      	* gas/arc/tls-relocs.d: Likewise.
      	* gas/arc/tls-relocs.s: Likewise.
      
      opcode	* arc.h (arc_reloc_equiv_tab): Replace flagcode with flags[32].
      
      opcodes	* arc-dis.c (special_flag_p): Match full mnemonic.
      	* arc-opc.c (print_insn_arc): Check section size to read
      	appropriate number of bytes. Fix printing.
      	* arc-tbl.h: Fix instruction table. Allow clri/seti instruction without
      	arguments.
      24b368f8
    • GDB Administrator's avatar
      Automatic date update in version.in · 5cc854a8
      GDB Administrator authored
      5cc854a8
    • Vladimir Radosavljevic's avatar
      Take addend into account when making GOT entries for local symbols. · 7ef8ae7c
      Vladimir Radosavljevic authored
      gold/
      	* object.cc (Sized_relobj::do_for_all_local_got_entries): Use
      	Local_got_entry_key for searching in local_got_offsets_.
      	* object.h (class Local_got_entry_key): New class.
      	(Relobj::local_has_got_offset): New overloaded method.
      	(Relobj::local_got_offset): Likewise.
      	(Relobj::set_local_got_offset): Likewise.
      	(Relobj::do_local_has_got_offset): Add addend argument.
      	(Relobj::do_local_got_offset): Likewise.
      	(Relobj::do_set_local_got_offset): Likewise.
      	(Sized_relobj::do_local_has_got_offset): Add addend argument, and use
      	Local_got_entry_key for searching through local_got_offsets_.
      	(Sized_relobj::do_local_got_offset): Likewise.
      	(Sized_relobj::do_set_local_got_offset): Likewise.
      	(Sized_relobj::Local_got_offsets): Change type of the key from
      	unsigned int to Local_got_entry_key, and add hash and equal_to.
      	* output.cc (Got_entry::write): Take addend into account for
      	calculating value of the local symbol for GOT.
      	(Output_data_got::add_local): New definition of overloaded method.
      	(Output_data_got::add_local_with_rel): Likewise.
      	(Output_data_got::add_local_pair_with_rel): Likewise.
      	* output.h (Output_data_got::add_local): New declaration of overloaded
      	method.
      7ef8ae7c
    • Antoine Tremblay's avatar
      Remove duplicate arch/arm.h include in linux-arm-low.c. · e58c48b4
      Antoine Tremblay authored
      A duplicate include arm/arm.h was introduced, remove it.
      Pushed as obvious.
      
      gdb/gdbserver/ChangeLog:
      
      	* linux-arm-low.c: Remove duplicate arch/arm.h include.
      e58c48b4
    • Yao Qi's avatar
      Run gdb.base/sizeof.exp with board having gdb,noinferiorio · 41d0efca
      Yao Qi authored
      In my remote cross testing (x86_64 host and aarch64 target), the test
      gdb.base/sizeof.exp is skipped because gdb,noinferiorio is defined in
      my gdbserver board file.  Tests are skipped because the test checks
      the expected value from the program's output, but I don't see why must
      do it this way.  With my patch applied, we can save the result in variable
      in the program, and check the variable then.  Then, the test doesn't rely
      on inferiorio.
      
      gdb/testsuite:
      
      2015-12-03  Yao Qi  <yao.qi@linaro.org>
      
      	* gdb.base/sizeof.c: Don't include stdio.h and
      	../lib/unbuffer_output.c.
      	(main): New variable 'size' and 'value'.  Remove printf and
      	gdb_unbuffer_output.  Assign return value to size and value.
      	* gdb.base/sizeof.exp: Remove the checking to gdb,noinferiorio
      	at the beginning.
      	(check_sizeof): Check the result by printing variable 'size'.
      	(check_valueof): Check the result by printing variable 'value'.
      41d0efca
  3. Dec 03, 2015
  4. Dec 02, 2015
    • Alan Modra's avatar
      addr2line vs. inlined C functions called from C++ · 923b198a
      Alan Modra authored
      In this case the inlined function doesn't have DW_AT_linkage_name in
      .debug_info, but the language is C++ so find_nearest_line goes looking
      in the symbol table.  Since the function is inlined the enclosing
      non-inline function symbol is returned from _bfd_elf_find_function,
      which is wrong.  This patch only uses a symbol if its address matches.
      
      	PR binutils/19315
      	* dwarf2.c (_bfd_elf_find_function): Return symbol matched.
      	(_bfd_dwarf2_find_nearest_line): Check symbol returned above
      	against dwarf range.
      	* elf-bfd.h (_bfd_elf_find_function): Update prototype.
      923b198a
    • Alan Modra's avatar
      Make --enable-initfini-array the default · 26e3a0c9
      Alan Modra authored
      	* configure.ac (--enable-initfini-array): Remove run test.  Default
      	to "yes".  Change help string to --disable-initfini-array.
      	* configure: Regenerate.
      26e3a0c9
    • Alan Modra's avatar
      Fix powerpc64 segfault caused by zero r_symndx relocs. · c27b8c2a
      Alan Modra authored
      Fixes a segfault in ppc64_elf_tls_optimize found when testing
      R_PPC64_ENTRY, and potential for trouble in other places found by
      code inspection.
      
      	* elf64-ppc.c (ppc64_elf_tls_optimize): Don't segfault on NULL
      	symbol section or output section.
      	(ppc64_elf_edit_toc): Similarly for ld -R objects.
      	(ppc64_elf_size_stubs): Likewise.
      c27b8c2a
    • Andre Vieira's avatar
      Fix ldah being disassembled as ldaexh · 3395762e
      Andre Vieira authored
      2015-12-02  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      opcodes/
          * arm-dis.c (arm_opcodes): <ldaexh>: Fix typo...
          <ldah>: ... to this.
      
      gas/testsuite/
          * gas/arm/armv8-a.d: <ldaexh>: Rename mismatched mnemonics ...
          <ldah>: ... to this.
      3395762e
    • GDB Administrator's avatar
      Automatic date update in version.in · 46de9bcf
      GDB Administrator authored
      46de9bcf
    • H.J. Lu's avatar
      Properly check symbol defined by assignment in linker script · ead3d542
      H.J. Lu authored
      Symbol defined by a linker assignment may have type bfd_link_hash_new
      or bfd_link_hash_undefined.  And h->def_regular is always set.
      elf_i386_convert_load and elf_x86_64_convert_load should check
      h->def_regular as well as bfd_link_hash_undefined and bfd_link_hash_new
      to see if a symbol is defined by a linker script.
      
      bfd/
      
      	PR ld/19319
      	* elf32-i386.c (elf_i386_convert_load): Check h->def_regular
      	instead of bfd_link_hash_new.
      	* elf64-x86-64.c (elf_x86_64_convert_load): Likewise.  Skip
      	relocation overflow for bfd_link_hash_undefined and
      	bfd_link_hash_new if h->def_regular is set.
      
      ld/testsuite/
      
      	PR ld/19319
      	* ld-i386/i386.exp: Run pr19319 test.
      	* ld-x86-64/x86-64.exp: Likewise.
      	* ld-i386/pr19319.dd: New file.
      	* ld-i386/pr19319a.S: Likewise.
      	* ld-i386/pr19319b.S: Likewise.
      	* ld-x86-64/pr19319.dd: Likewise.
      	* ld-x86-64/pr19319a.S: Likewise.
      	* ld-x86-64/pr19319b.S: Likewise.
      ead3d542
    • Ulrich Weigand's avatar
      Avoid "operation may be undefined" warning in remote.c · 974eac9d
      Ulrich Weigand authored
      GCC 4.1 gives the following warning:
      gdb/remote.c: In function 'remote_parse_stop_reply':
      gdb/remote.c:6549: warning: operation on 'p' may be undefined
      on this line of code:
      
      	event->ptid = read_ptid (++p, &p);
      
      Since p actually isn't used afterwards anyway, simply use NULL.
      
      gdb/
      	* remote.c (remote_parse_stop_reply): Avoid GCC 4.1 "operation
      	may be undefined" warning.
      974eac9d
    • Ulrich Weigand's avatar
      Fix uninitialized variable warnings in remote.c · 2e3b657e
      Ulrich Weigand authored
      Fix a couple of places where a struct thread_item was added to a
      vector while the item.name field was uninitialized.
      
      gdb/
      	* remote.c (remote_newthread_step): Initialize item.name.
      	(remote_get_threads_with_qthreadinfo): Likewise.
      2e3b657e
  5. Dec 01, 2015
    • Yao Qi's avatar
      Run gdb.base/disp-step-syscall.exp for aarch64-linux · 99fd02d9
      Yao Qi authored
      This patch handles target aarch64*-*-linux* for syscall instruction.
      
      gdb/testsuite:
      
      2015-12-01  Yao Qi  <yao.qi@linaro.org>
      
      	* gdb.base/disp-step-syscall.exp: Define syscall instruction
      	for aarch64*-*-linux* target.
      99fd02d9
    • Alan Modra's avatar
      Trim unused params from aout adjust_sizes_and_vmas · 3a8c4a5b
      Alan Modra authored
      	* aoutx.h (adjust_sizes_and_vmas): Remove unused text_size and
      	text_end parameters.  Update callers.
      	* aout-tic30.c: Update adjust_sizes_and_vmas callers.
      	* hp300hpux.c: Likewise.
      	* i386lynx.c: Likewise.
      	* libaout.h: Likewise.
      	* netbsd.h: Likewise.
      	* pdp11.c: Likewise.
      	* riscix.c: Likewise.
      3a8c4a5b
    • Alan Modra's avatar
      Invoke aout N_* macros with pointer to struct internal_exec · bbb1afc8
      Alan Modra authored
      No functional changes here.
      
      BTW, some of these headers don't seem to be used anywhere:
      include/aout/dynix3.h, include/aout/encap.h, include/aout/hp.h,
      gas/config/aout_gnu.h
      
      bfd/
      	* aout-adobe.c: Invoke aout N_* macros with pointer to
      	struct internal_exec.
      	* aout-arm.c: Likewise.
      	* aout-cris.c: Likewise.
      	* aout-target.h: Likewise.
      	* aout-tic30.c: Likewise.
      	* aoutf1.h: Likewise.
      	* aoutx.h: Likewise.
      	* bout.c: Likewise.
      	* freebsd.h: Likewise.
      	* gen-aout.c: Likewise.
      	* hp300hpux.c: Likewise.
      	* i386aout.c: Likewise.
      	* i386linux.c: Likewise.
      	* i386lynx.c: Likewise.
      	* i386mach3.c: Likewise.
      	* i386os9k.c: Likewise.
      	* libaout.h: Likewise.
      	* m68klinux.c: Likewise.
      	* m88kmach3.c: Likewise.
      	* mipsbsd.c: Likewise.
      	* netbsd.h: Likewise.
      	* pc532-mach.c: Likewise.
      	* pdp11.c: Likewise.
      	* riscix.c: Likewise.
      	* sparclinux.c: Likewise.
      	* sparclynx.c: Likewise.
      gas/
      	* config/aout_gnu.h: Invoke aout N_* macros with pointer to
      	struct internal_exec.
      include/
      	* bout.h: Invoke aout N_* macros with pointer to
      	struct internal_exec.
      	* os9k.h: Likewise.
      include/aout/
      	* adobe.h: Invoke aout N_* macros with pointer to
      	struct internal_exec.
      	* aout64.h: Likewise.
      	* dynix3.h: Likewise.
      	* encap.h: Likewise.
      	* hp.h: Likewise.
      	* hp300hpux.h: Likewise.
      	* sun4.h: Likewise.
      bbb1afc8
    • Alan Modra's avatar
      Don't use BFD_TRADITIONAL_FORMAT flag in COFF support · b560e2ac
      Alan Modra authored
      info->traditional_format is available, or can be easily made
      available.  This relegates BFD_TRADITIONAL_FORMAT to AOUT use only.
      
      	* coff-rs6000.c (_bfd_xcoff_put_symbol_name): Replace abfd param
      	with info param.  Test info->traditional_format rather than
      	BFD_TRADITIONAL_FORMAT flag.
      	* coff64-rs6000.c (_bfd_xcoff64_put_symbol_name): Likewise.
      	* libxcoff.h (struct xcoff_backend_data_rec): Update
      	_xcoff_put_symbol_name prototype.
      	(bfd_xcoff_put_symbol_name): Add info param.
      	* xcofflink.c (xcoff_find_tc0): Update bfd_xcoff_put_symbol_name call.
      	(xcoff_write_global_symbol): Likewise.
      	(xcoff_link_input_bfd): Test info->traditional_format rather than
      	BFD_TRADITIONAL_FORMAT flag.
      	* cofflink.c (_bfd_coff_final_link): Likewise.
      	(_bfd_coff_link_input_bfd, _bfd_coff_write_global_sym): Likewise.
      b560e2ac
    • Alan Modra's avatar
      binutils/configure update · 23d61901
      Alan Modra authored
      Missed from f8c2a965.
      
      	* configure: Regenerate.
      23d61901
    • Alan Modra's avatar
      SRC-POTFILES.in update · 44c2e680
      Alan Modra authored
      	* po/SRC-POTFILES.in: Regenerate.
      44c2e680
    • Alan Modra's avatar
      Re: ARC port broken reloc processing · f26dd308
      Alan Modra authored
      	* elf32-arc.c (ARC_ELF_HOWTO): Delete.
      	(arc_elf_howto): New function.
      	(bfd_elf32_bfd_reloc_type_lookup): Use it in place of existing
      	init code.
      	(bfd_elf32_bfd_reloc_name_lookup): Use arc_elf_howto.
      	(arc_info_to_howto_rel, elf_arc_relocate_section): Likwise.
      	(elf_arc_check_relocs): Likewise.
      f26dd308
    • Alan Modra's avatar
      ARC port broken reloc processing · 0a5ff21b
      Alan Modra authored
      This initialises howto.dst_mask so that relocations in debug sections
      are applied by the generic reloc processing used by objdump to display
      debug sections.
      
      	* elf32-arc.c (arc_elf_howto_init): Init dst_mask.
      0a5ff21b
    • GDB Administrator's avatar
      Automatic date update in version.in · 56529cb3
      GDB Administrator authored
      56529cb3
    • Antoine Tremblay's avatar
      Remove too simple breakpoint_reinsert_addr implementations. · fbec8956
      Antoine Tremblay authored
      This patch removes too simple implementations of the breakpoint_reinsert_addr
      operation.
      
      The only reason to keep them around was to support thread events when
      PTRACE_EVENT_CLONE was not present but this support has been removed in a
      previous patch.
      
      No regressions, tested on ubuntu 14.04 ARMv7 and x86.
      With gdbserver-{native,extended} / { -marm -mthumb }
      
      Also compilation was tested on aarch64, bfin, cris, crisv32,
      m32r, mips, nios2, ppc, s390, sparc, tic6x, tile,  xtensa.
      
      gdb/gdbserver/ChangeLog:
      
      	* linux-arm-low.c (arm_reinsert_addr): Remove function.
      	(struct linux_target_ops <breakpoint_reinsert_addr>: Set to NULL.
      	* linux-cris-low.c (cris_reinsert_addr> Remove function.
      	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
      	* linux-crisv32-low.c (cris_reinsert_addr): Remove function.
      	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
      	* linux-mips-low.c (mips_reinsert_addr): Remove function.
      	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
      	* linux-nios2-low.c (nios2_reinsert_addr): Remove function.
      	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
      	* linux-sparc-low.c (sparc_reinsert_addr): Remove function.
      	(struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL.
      fbec8956
    • Antoine Tremblay's avatar
      Remove support for thread events without PTRACE_EVENT_CLONE in GDBServer. · 9b4c5f87
      Antoine Tremblay authored
      This patch removes support for thread events if PTRACE_EVENT_CLONE is not
      supported in GDBServer.
      
      Before, on systems that did not support PTRACE_EVENT_CLONE, both GDB and
      GDBServer coordinated with libthread_db.so to insert breakpoints at magic
      locations in libpthread.so, in order to break at thread creation and thread
      death.
      
      Simple software single stepping support was implemented to step over these
      breakpoints in case there was no hardware single stepping support. However,
      these simple software single stepping implementations were not fit for any other
      use as discussed in :
      https://sourceware.org/ml/gdb-patches/2015-04/msg01110.html
      
      These too simple implementations conflict with ongoing work to make proper
      implementations of software single stepping in GDBServer.
      
      The problem is that if some implementations are correct and others are not and
      only there for the thread magic breakpoint, we can't enable features based
      solely software single step support since some would be broken.
      
      To keep the incorrect implementations and allow the new proper ones at the same
      time we would need to implement fallback code and it quickly becomes ugly and
      confusing with multiple checks for legacy software single step or proper
      software single step.
      
      However, PTRACE_EVENT_CLONE was first introduced in Linux 2.5.46,
      released in November 2002.
      
      So I think it's reasonable to just remove support for kernels that don't support
      PTRACE_EVENT_CLONE, and sidestep the libthread_db breakpoints issues entirely.
      
      This thread on the mailling list discusses the issue :
      https://sourceware.org/ml/gdb/2015-10/msg00078.html
      
      No regressions, tested on ubuntu 14.04 ARMv7 and x86.
      With gdbserver-{native,extended} / { -marm -mthumb }
      
      gdb/gdbserver/ChangeLog:
      
      	* linux-low.c (linux_look_up_symbols): Don't call
      	linux_supports_traceclone.
      	* linux-low.h (thread_db_init): Remove use_events argument.
      	* thread-db.c (thread_db_use_event): Remove global variable.
      	(struct thread_db) <td_thr_event_enable_p>: Remove field.
      	(struct thread_db) <td_create_bp>: Remove field.
      	(thread_db_create_event): Remove function.
      	(thread_db_enable_reporting): Likewise.
      	(find_one_thread): Don't check for thread_db_use_events.
      	(attach_thread): Likewise.
      	(thread_db_load_search): Remove td_thr_event_enable_p initialization.
      	(try_thread_db_load_1): Don't check for thread_db_use_events.
      	(thread_db_init): Remove use_events argument and thread events
      	handling.
      	(remove_thread_event_breakpoints): Remove function.
      	(thread_db_detach): Remove call to remove_thred_event_breakpoints.
      9b4c5f87
    • Antoine Tremblay's avatar
      Refactor queries for hardware and software single stepping support in GDBServer. · 7d00775e
      Antoine Tremblay authored
      Before this patch there was only one call: can_hardware_single_step. Its
      implementation was a check on breakpoint_reinsert_addr if NULL it assumed
      that the target could hardware single step.
      
      This patch prepares for the case where this is not true anymore.
      
      In order to improve software single stepping in GDBServer the
      breakpoint_reinsert_addr operation of targets that had a very simple
      software implementation used only for stepping over thread creation events
      will be removed.
      
      This will create a case where a target does not support hardware single
      step and has the operation breakpoint_reinsert_addr set to NULL, thus
      can_hardware_single_step needs to be implemented another way.
      
      A new target operation supports_hardware_single_step is introduced and is
      to return true if the target does support such a feature, support for the
      feature is manually hardcoded.
      
      Note that the hardware single step support was enabled as per the current
      behavior, I did not check if tile for example really has ptrace singlestep
      support but since the current implementation assumed it had, I kept it
      that way.
      
      No regressions on Ubuntu 14.04 on ARMv7 and x86.
      With gdbserver-{native,extended} / { -marm -mthumb }
      
      Compilation tested on: aarch64,arm,bfind,crisv32,m32r,ppc,s390,tic6x,tile,
      xtensa.
      Not tested : sh.
      
      gdb/gdbserver/ChangeLog:
      
      	* linux-aarch64-low.c (aarch64_supports_hardware_single_step):
      	New function.
      	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
      	* linux-arm-low.c (arm_supports_hardware_single_step): New function.
      	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
      	* linux-bfin-low.c (bfin_supports_hardware_single_step): New function.
      	(struct linux_target_ops) <bfin_supports_hardware_single_step>:
      	Initialize.
      	* linux-crisv32-low.c (cris_supports_hardware_single_step):
      	New function.
      	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
      	* linux-low.c (can_hardware_single_step): Use
      	supports_hardware_single_step.
      	(can_software_single_step): New function.
      	(start_step_over): Call can_software_single_step.
      	(linux_supports_hardware_single_step): New function.
      	(struct target_ops) <supports_software_single_step>: Initialize.
      	* linux-low.h (struct linux_target_ops)
      	<supports_hardware_single_step>: Initialize.
      	* linux-m32r-low.c (m32r_supports_hardware_single_step): New function.
      	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
      	* linux-ppc-low.c (ppc_supports_hardware_single_step): New function.
      	(struct linux_target_ops) <supports_hardware_single_step> Initialize.
      	* linux-s390-low.c (s390_supports_hardware_single_step): New function.
      	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
      	* linux-sh-low.c (sh_supports_hardware_single_step): New function.
      	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
      	* linux-tic6x-low.c (tic6x_supports_hardware_single_step): New function.
      	(struct linux_target_ops) <tic6x_supports_hardware_single_step>:
      	Initialize.
      	* linux-tile-low.c (tile_supports_hardware_single_step): New function.
      	(struct linux_target_ops) <tile_supports_hardware_single_step>:
      	Initialize.
      	* linux-x86-low.c (x86_supports_hardware_single_step) New function.
      	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
      	* linux-xtensa-low.c (xtensa_supports_hardware_single_step):
      	New function.
      	(struct linux_target_ops) <supports_hardware_single_step>: Initialize.
      	* target.h (struct target_ops): <supports_software_single_step>:
      	New field.
      	(target_supports_software_single_step): New macro.
      7d00775e
    • Antoine Tremblay's avatar
      Fix instruction skipping when using software single step in GDBServer · 2d97cd35
      Antoine Tremblay authored
      Without this patch, when doing a software single step, with for example
      a conditional breakpoint, gdbserver would wrongly avance the pc of
      breakpoint_len and skips an instruction.
      
      This is due to gdbserver assuming that it's hardware single stepping.
      When it resumes from the breakpoint address it expects the trap to be
      caused by ptrace and if it's rather caused by a software breakpoint
      it assumes this is a permanent breakpoint and that it needs to skip
      over it.
      
      However when software single stepping, this breakpoint is legitimate as
      it's the reinsert breakpoint gdbserver has put in place to break at
      the next instruction. Thus gdbserver wrongly advances the pc and skips
      an instruction.
      
      This patch fixes this behavior so that gdbserver checks if it is a
      reinsert breakpoint from software single stepping. If it is it won't
      advance the pc. And if there's no reinsert breakpoint there we assume
      then that it's a permanent breakpoint and advance the pc.
      
      Here's a commented log of what would happen before and after the fix on
      gdbserver :
      
      /* Here there is a conditional breakpoint at 0x10428 that needs to be
      stepped over. */
      
      Need step over [LWP 11204]? yes, found breakpoint at 0x10428
      ...
      /* e7f001f0 is a breakpoint instruction on arm
         Here gdbserver writes the software breakpoint we would like to hit
      */
      Writing e7f001f0 to 0x0001042c in process 11204
      ...
      Resuming lwp 11220 (continue, signal 0, stop not expected)
        pending reinsert at 0x10428
      stop pc is 00010428
        continue from pc 0x10428
      ...
      
      /* Here gdbserver hit the software breakpoint that was in place
         for the step over */
      
      stop pc is 0001042c
      pc is 0x1042c
      step-over for LWP 11220.11220 executed software breakpoint
      Finished step over.
      Could not find fast tracepoint jump at 0x10428 in list (reinserting).
      
      /* Here gdbserver writes back the original instruction */
      Writing e50b3008 to 0x0001042c in process 11220
      Step-over finished.
      Need step over [LWP 11220]? No
      
      /* Here because gdbserver assumes this is a permenant breakpoint it advances
      the pc of breakpoint_len, in this case 4 bytes, so we have just skipped
      the instruction that was written back here :
      Writing e50b3008 to 0x0001042c in process 11220
      */
      
      stop pc is 00010430
      pc is 0x10430
      Need step over [LWP 11220]? No, no breakpoint found at 0x10430
      Proceeding, no step-over needed
      proceed_one_lwp: lwp 11220
      stop pc is 00010430
      
      This patch fixes this situation and we get the right behavior :
      
      Writing e50b3008 to 0x0001042c in process 11245
      Hit a gdbserver breakpoint.
      Hit a gdbserver breakpoint.
      Step-over finished.
      proceeding all threads.
      Need step over [LWP 11245]? No
      stop pc is 0001042c
      pc is 0x1042c
      Need step over [LWP 11245]? No, no breakpoint found at 0x1042c
      Proceeding, no step-over needed
      proceed_one_lwp: lwp 11245
      stop pc is 0001042c
      pc is 0x1042c
      Resuming lwp 11245 (continue, signal 0, stop not expected)
      stop pc is 0001042c
        continue from pc 0x1042c
      
      It also works if the value at 0x0001042c is a permanent breakpoint.
      If so gdbserver will finish the step over, remove the reinserted breakpoint,
      resume at that location and on the next SIGTRAP gdbserver will trigger
      the advance PC condition as reinsert_breakpoint_inserted_here will be false.
      
      I also tested this against bp-permanent.exp on arm (with a work in progress
      software single step patchset) without any regressions.
      
      It's also tested against x86 bp-permanent.exp without any regression.
      
      So both software and hardware single step are tested.
      
      No regressions on Ubuntu 14.04 on ARMv7 and x86.
      With gdbserver-{native,extended} / { -marm -mthumb }
      
      gdb/gdbserver/ChangeLog:
      
      	* linux-low.c (linux_wait_1): Fix pc advance condition.
      	* mem-break.c (reinsert_breakpoint_inserted_here): New function.
      	* mem-break.h (reinsert_breakpoint_inserted_here): New declaration.
      2d97cd35
    • Antoine Tremblay's avatar
      Fix breakpoint size when stepping over a permanent breakpoint in GDBServer. · 769ef81f
      Antoine Tremblay authored
      When manually stepping over a permanent breakpoint on ARM we need to fetch the
      right breakpoint size based on the current instruction set used.
      
      Since this is not encoded in the stop_pc, the instruction mode needs to be
      fetched from the CPSR register.
      
      This is done by introducing a new target operation called :
      breakpoint_kind_from_current_state.
      
      For other targets that do not need this, breakpoint_kind_from_pc is used.
      
      No regressions, tested on ubuntu 14.04 ARMv7 and x86.
      With gdbserver-{native,extended} / { -marm -mthumb }
      
      gdb/gdbserver/ChangeLog:
      
      	* linux-arm-low.c (arm_is_thumb_mode): New function.
      	(arm_breakpoint_at): Use arm_is_thumb_mode.
      	(arm_breakpoint_kind_from_current_state): New function.
      	(struct linux_target_ops) <breakpoint_kind_from_current_state>:
      	Initialize.
      	* linux-low.c (linux_wait_1): Call breakpoint_kind_from_current_state.
      	(linux_breakpoint_kind_from_current_state): New function.
      	(struct target_ops <breakpoint_kind_from_current_state>: Initialize.
      	* linux-low.h (struct linux_target_ops)
      	<breakpoint_kind_from_current_state>: New field.
      	* target.h (struct target_ops): Likewise.
      	(target_breakpoint_kind_from_current_state): New macro.
      769ef81f
    • Pedro Alves's avatar
      gdbserver: don't exit until GDB disconnects · fddedbe6
      Pedro Alves authored
      When testing with "target remote" with "maint set target-non-stop on",
      we regressions like this:
      
        Running /home/pedro/gdb/mygit/build/../src/gdb/testsuite/gdb.threads/continue-pending-after-query.exp ...
        FAIL: gdb.threads/continue-pending-after-query.exp: iter 4: continue until exit
        FAIL: gdb.threads/continue-pending-after-query.exp: iter 6: continue until exit
        FAIL: gdb.threads/continue-pending-after-query.exp: iter 10: continue until exit
      
      		  === gdb Summary ===
      
        # of expected passes            28
        # of unexpected failures        3
      
      where gdb.log shows:
      
        continue
        Continuing.
        Remote communication error.  Target disconnected.: Connection reset by peer.
        (gdb) FAIL: gdb.threads/continue-pending-after-query.exp: iter 4: continue until exit
      
      Enabling gdb + gdbserver debug logs we see:
      
        gdbserver:  <<<< exiting linux_wait_1
        gdbserver: handling possible serial event
        gdbserver: Writing resume reply for LWP 11089.11089:0
        gdbserver: handling possible serial event
        gdbserver: GDBserver exiting
      
      	GDB: Packet received: OK
      	GDB: infrun: prepare_to_wait
      	GDB: Sending packet: $vStopped#55...Packet received: W0;process:2b51
      	GDB: Sending packet: $vStopped#55...Packet received: OK
      	GDB: infrun: target_wait (-1.0.0, status) =
      	GDB: infrun:   -1.0.0 [Thread 0],
      	GDB: infrun:   status->kind = no-resumed
      	GDB: Sending packet: $Hgp2b51.2b51#41...Remote connection closed
          (gdb) FAIL: gdb.threads/continue-pending-after-query.exp: iter 1: continue until exit
      
      Notice the "Packet received: W0;process:2b51" followed by
      vStopped->OK.
      
      That means the process exit notification was successfully sent to GDB
      and GDB fetched it.  That makes gdbserver exit, in
      server.c:process_serial_event:
      
        if (!extended_protocol && have_ran && !target_running ())
          {
            /* In non-stop, defer exiting until GDB had a chance to query
      	 the whole vStopped list (until it gets an OK).  */
            if (QUEUE_is_empty (notif_event_p, notif_stop.queue))
      	{
      	  /* Be transparent when GDB is connected through stdio -- no
      	     need to spam GDB's console.  */
      	  if (!remote_connection_is_stdio ())
      	    fprintf (stderr, "GDBserver exiting\n");
      	  remote_close ();
      	  exit (0);
      	}
          }
      
      However, GDB is still busy processing an earlier "no-resumed" event,
      and sends a "Hg" packet, which errors out with "Remote connection
      closed".  IOW, it's not enough to wait for GDB to query the whole
      vStopped list, gdbserver needs to wait until the exit event is really
      processed.
      
      The fix is to make gdbserver not disconnect until gdb does.
      
      Tested on x86_64 Fedora, native gdbserver, remote + extended-remote +
      with and without "maint set target-non-stop on".
      
      gdb/gdbserver/ChangeLog:
      2015-10-14  Pedro Alves  <palves@redhat.com>
      
      	* remote-utils.c (readchar): Don't print "Got EOF" unless
      	debugging gdbserver.
      	* server.c (captured_main): Exit gdbserver if gdb disconnects when
      	in "target remote" mode and there are no processes left to debug.
      	(process_serial_event): Remove 'have_ran' static local and remove
      	logic that exits gdbserver in "target remote" mode.
      fddedbe6
    • Pedro Alves's avatar
      gdbserver/linux: Always wake up event loop after resume · 1bebeeca
      Pedro Alves authored
      Running killed-outside.exp in with "maint set target-non-stop on"
      hangs currently.  This test has the inferior process die with a
      SIGKILL while stopped.  gdbserver gets a SIGCHLD and reacts by
      retrieveing the SIGKILL events out of waitpid.  But because the
      process is not resumed from GDB's perspective, the event is left
      pending.  When GDB resumes the process afterwards, the process is not
      really resumed because it already has the event pending.  But nothing
      wakes up the event loop to consume the event.
      
      Handle this in the same way nat/linux-nat.c:linux_nat_resume handles
      this.
      
      gdb/gdbserver/ChangeLog:
      2015-11-30  Pedro Alves  <palves@redhat.com>
      
      	* linux-low.c (linux_resume): Wake up the event loop before
      	returning.
      1bebeeca
    • Pedro Alves's avatar
      gdbserver:prepare_access_memory: pick another thread · a67a9fae
      Pedro Alves authored
      Say GDB wants to access the inferior process's memory.  The current
      remote general thread is 3, but GDB's switched to thread 2.  Because
      both threads are of the same process, GDB skips making the remote
      thread be thread 2 as well (sending an Hg packet) before accessing
      memory (remote.c:set_general_process).  However, if thread 3 has
      exited meanwhile, thread 3 no longer exists on the server and
      gdbserver points current_thread to NULL.  The result is the memory
      access fails, even through the process still exists.
      
      Fix this by making prepare_to_access memory select the thread to
      access memory through.
      
      gdb/gdbserver/ChangeLog:
      2015-11-30  Pedro Alves  <palves@redhat.com>
      
      	* mem-break.c (check_gdb_bp_preconditions): Remove current_thread
      	check.
      	(set_gdb_breakpoint): If prepare_to_access_memory fails, set *ERR
      	to -1.
      	* target.c (struct thread_search): New structure.
      	(thread_search_callback): New function.
      	(prev_general_thread): New global.
      	(prepare_to_access_memory, done_accessing_memory): New functions.
      	* target.h (prepare_to_access_memory, done_accessing_memory):
      	Replace macros with function declarations.
      a67a9fae
    • Pedro Alves's avatar
      Implement TARGET_WAITKIND_NO_RESUMED in the remote protocol · f2faf941
      Pedro Alves authored
      Testing with "maint set target-non-stop on" causes regressions in
      tests that rely on TARGET_WAITKIND_NO_RESUMED, which isn't modelled on
      the RSP.  In real all-stop, gdbserver detects the situation and
      reporst error to GDB, and so the tests (e.g.,
      gdb.threads/no-unwaited-for-left.exp) at fail quickly.  But with
      "maint set target-non-stop on", GDB instead hangs forever waiting for
      a stop reply that never comes, and so the tests take longer to time
      out.
      
      This adds a new "N" stop reply packet that maps 1-1 to
      TARGET_WAITKIND_NO_RESUMED.
      
      gdb/ChangeLog:
      2015-11-30  Pedro Alves  <palves@redhat.com>
      
      	PR 14618
      	* NEWS (New remote packets): Mention the N stop reply.
      	* remote.c (remote_protocol_features): Add "no-resumed" entry.
      	(remote_query_supported): Report no-resumed+ support.
      	(remote_parse_stop_reply): Handle 'N'.
      	(process_stop_reply): Handle TARGET_WAITKIND_NO_RESUMED.
      	(remote_wait_as): Handle 'N' / TARGET_WAITKIND_NO_RESUMED.
      	(_initialize_remote): Register "set/show remote
      	no-resumed-stop-reply" commands.
      
      gdb/doc/ChangeLog:
      2015-11-30  Pedro Alves  <palves@redhat.com>
      
      	PR 14618
      	* gdb.texinfo (Stop Reply Packets): Document the N stop reply.
      	(Remote Configuration): Add the "set/show remote
      	no-resumed-stop-reply" to the available settings table.
      	(General Query Packets): Document the "no-resumed" qSupported
      	feature.
      
      gdb/gdbserver/ChangeLog:
      2015-11-30  Pedro Alves  <palves@redhat.com>
      
      	PR 14618
      	* linux-low.c (linux_wait_1): If the last resumed thread is gone,
      	report TARGET_WAITKIND_NO_RESUMED.
      	* remote-utils.c (prepare_resume_reply): Handle
      	TARGET_WAITKIND_NO_RESUMED.
      	* server.c (report_no_resumed): New global.
      	(handle_query) <qSupported>: Handle "no-resumed+".  Report
      	"no-resumed+" support.
      	(resume): When the target reports TARGET_WAITKIND_NO_RESUMED, only
      	return error if the client doesn't support no-resumed events.
      	(push_stop_notification): New function.
      	(handle_target_event): Use it.  Report TARGET_WAITKIND_NO_RESUMED
      	events if the client supports them.
      
      gdb/testsuite/ChangeLog:
      2015-11-30  Pedro Alves  <palves@redhat.com>
      
      	* gdb.threads/no-unwaited-for-left.exp: Remove setup_kfail calls.
      f2faf941
    • Pedro Alves's avatar
      infrun: Fix TARGET_WAITKIND_NO_RESUMED handling in non-stop mode · f4836ba9
      Pedro Alves authored
      Running the testsuite against gdbserver with "maint set target-non-stop on"
      stumbled on a set of problems.  See code comments for details.
      
      This handles my concerns expressed in PR14618.
      
      gdb/ChangeLog:
      2015-11-30  Pedro Alves  <palves@redhat.com>
      
      	PR 14618
      	* infrun.c (handle_no_resumed): New function.
      	(handle_inferior_event_1) <TARGET_WAITKIND_NO_RESUMED>: Defer to
      	handle_no_resumed.
      f4836ba9
    • Pedro Alves's avatar
      testsuite: Range stepping and non-stop mode · 04bf20c5
      Pedro Alves authored
      The range-stepping tests fail with "maint set target-non-stop on" mode
      because exec_cmd_expect_vCont_count doesn't know that in non-stop
      mode, vCont's reply is simply "OK".
      
      gdb/testsuite/ChangeLog:
      2015-11-30  Pedro Alves  <palves@redhat.com>
      
      	* lib/range-stepping-support.exp (exec_cmd_expect_vCont_count):
      	Handle non-stop mode vCont replies.
      04bf20c5