aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2016-07-21Enqueue signal even when resuming threadsYao Qi2-21/+27
Nowadays, we only enqueue signal when we leave thread pending in linux_resume_one_thread. If lwp->resume->sig isn't zero (GDB wants to resume with signal), we pass lwp->resume->sig to linux_resume_one_lwp. In order to reduce the difference between resuming thread with signal and proceeding thread with signal, when we resume thread, we can enqueue signal too, and proceed thread. The signal will be consumed in linux_resume_one_lwp_throw from lwp->pending_signals. gdb/gdbserver: 2016-07-21 Yao Qi <yao.qi@linaro.org> * linux-low.c (proceed_one_lwp): Declare. (linux_resume_one_thread): Remove local variable 'step'. Lift code enqueue signal. Call proceed_one_lwp instead of linux_resume_one_lwp.
2016-07-21Use enqueue_pending_signal in linux_resume_one_threadYao Qi2-11/+14
gdb/gdbserver: 2016-07-21 Yao Qi <yao.qi@linaro.org> * linux-low.c (linux_resume_one_thread): Call enqueue_pending_signal.
2016-07-21Switch current_thread to lwp's thread in ↵Yao Qi4-2/+30
install_software_single_step_breakpoints install_software_single_step_breakpoints has parameter lwp, but still need to switch to current_thread. In order to simplify its caller, we do the current_thread save/restore inside install_software_single_step_breakpoints. gdb/gdbserver: 2016-07-21 Yao Qi <yao.qi@linaro.org> * gdbthread.h (make_cleanup_restore_current_thread): Declare. * inferiors.c (do_restore_current_thread_cleanup): New function. (make_cleanup_restore_current_thread): Likewise. * linux-low.c (install_software_single_step_breakpoints): Call make_cleanup_restore_current_thread. Switch current_thread to thread.
2016-07-21Make reinsert_breakpoint thread specificYao Qi4-55/+92
This patch makes reinsert_breakpoint thread specific, which means we insert and remove reinsert_breakpoint breakpoints for a specific thread. This motivation of this change is that I'll use reinsert_breakpoint for vCont;s on software single step target, so that GDBserver may insert one reinsert_breakpoint for one thread doing step-over, and insert one reinsert_breakpoint for another thread doing vCont;s. After the operation of one thread is finished, GDBserver must remove reinsert_breakpoint for that thread only. On the other hand, reinsert_breakpoint is used for step-over nowadays. GDBserver inserts reinsert_breakpoint, and wait only from the thread doing step-over. After the step-over is done, GDBserver removes the reinsert_breakpoint. If there is still any threads need step-over, do the same again until all threads are finished step-over. In other words, reinsert_breakpoint is globally thread specific, but in an implicit way. It is natural to make it explicitly thread specific. gdb/gdbserver: 2016-07-21 Yao Qi <yao.qi@linaro.org> * mem-break.c (struct reinsert_breakpoint) <ptid>: New field. (set_reinsert_breakpoint): New parameter ptid. Callers updated. (clone_one_breakpoint): Likewise. (delete_reinsert_breakpoints): Change parameter to thread. Callers updated. (has_reinsert_breakpoints): Likewise. (uninsert_reinsert_breakpoints): Likewise. (reinsert_reinsert_breakpoints): Likewise. * mem-break.h (set_reinsert_breakpoint): Update declaration. (delete_reinsert_breakpoints): Likewise. (reinsert_reinsert_breakpoints): Likewise. (uninsert_reinsert_breakpoints): Likewise. (has_reinsert_breakpoints): Likewise.
2016-07-21Refactor clone_all_breakpointsYao Qi6-16/+24
This patch is to change the interface of clone_all_breakpoints, from lists of breakpoints and raw_breakpoints to child thread and parent thread. I choose child thread to pass because we need the ptid of the child thread in the following patch. gdb/gdbserver: 2016-07-21 Yao Qi <yao.qi@linaro.org> * inferiors.c (get_thread_process): Make parameter const. * inferiors.h (get_thread_process): Update declaration. * mem-break.c (clone_all_breakpoints): Remove all parameters. Add new parameters child_thread and parent_thread. Callers updated. * mem-break.h (clone_all_breakpoints): Update declaration.
2016-07-21Create sub classes of 'struct breakpoint'Yao Qi4-67/+188
Nowadays, there are three types of breakpoint in GDBserver, - gdb breakpoints, - reinsert breakpoints, used for software single step, - other breakpoints, used for tracepoint, but we only have one 'struct breakpoint' for all of them. Some fields are only useful to one type of breakpoint. For example, cond_list and command_list are only used by gdb breakpoints, while handler is only used by other breakpoints. This patch changes 'struct breakpoint' to a base class, which has fields needed by all breakpoint types, also add three sub-classes to 'struct breakpoint' to these three types of breakpoints. gdb/gdbserver: 2016-07-21 Yao Qi <yao.qi@linaro.org> * mem-break.c (struct breakpoint) <cond_list>: Remove. <command_list, handler>: Remove. (struct gdb_breakpoint): New. (struct other_breakpoint): New. (struct reinsert_breakpoint): New. (is_gdb_breakpoint): New function. (any_persistent_commands): Update command_list if is_gdb_breakpoint returns true. (set_breakpoint): Create breakpoints according to their types. (find_gdb_breakpoint): Return 'struct gdb_breakpoint *'. (set_gdb_breakpoint_1): Likewise. (set_gdb_breakpoint): Likewise. (clear_breakpoint_conditions): Change parameter type to 'struct gdb_breakpoint *'. (clear_breakpoint_commands): Likewise. (clear_breakpoint_conditions_and_commands): Likewise. (add_condition_to_breakpoint): Likewise. (add_breakpoint_condition): Likewise. (add_commands_to_breakpoint): Likewise. (check_breakpoints): Check other_breakpoint. (clone_one_breakpoint): Clone breakpopint according to its type. * mem-break.h (struct gdb_breakpoint): Declare. (set_gdb_breakpoint): Update declaration. (clear_breakpoint_conditions_and_commands): Likewise. (add_breakpoint_condition): Likewise. (add_breakpoint_commands): Likewise. * server.c (process_point_options): Change parameter type to 'struct gdb_breakpoint *'.
2016-07-21Pass breakpoint type in set_breakpoint_atYao Qi3-7/+24
Nowadays, set_breakpoint_at creates breakpoint of type other_breakpoint, but we also use set_breakpoint_at in set_reinsert_breakpoint to create breakpoint, so that we have to overwrite the breakpoint type like this, bp = set_breakpoint_at (stop_at, NULL); bp->type = reinsert_breakpoint; which looks not very good. This patch changes set_breakpoint_at to receive breakpoint type. Since set_breakpoint_at is used in many places, I rename it to set_breakpoint_type_at, and wrap it with set_breakpoint_at, and pass other_breakpoint. In this way, we can call set_breakpoint_type_at with reinsert_breakpoint in set_reinsert_breakpoint too, and code looks cleaner. gdb/gdbserver: 2016-07-21 Yao Qi <yao.qi@linaro.org> * mem-break.c (set_breakpoint_at): Rename it to ... (set_breakpoint_type_at): ... it. (set_breakpoint_at): Call set_breakpoint_type_at. (set_reinsert_breakpoint): Call set_breakpoint_type_at. * mem-break.h (set_breakpoint_at): Update comments.
2016-07-21Skip gdb.server/ tests if lack of XML supportYao Qi2-0/+19
I recently see some gdb.server/*.exp fails in my native gdb testing, in which libexpat isn't available, so GDB isn't able to parse xml file. It causes gdb.server/ tests fails because GDB can't get registers correctly from GDBserver. (gdb) PASS: gdb.server/connect-without-multi-process.exp: multiprocess=off: break main target remote localhost:2352^M Remote debugging using localhost:2352^M warning: Can not parse XML target description; XML support was disabled at compile time^M Reading /lib/ld-linux-armhf.so.3 from remote target...^M warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.^M Reading /lib/ld-linux-armhf.so.3 from remote target...^M Reading symbols from target:/lib/ld-linux-armhf.so.3...Reading /lib/ld-2.17.so.debug from remote target...^M Reading /lib/.debug/ld-2.17.so.debug from remote target...^M (no debugging symbols found)...done.^M Remote 'g' packet reply is too long: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000efffbe00000000808d0f4d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^ 0x4d0f8d80 in _start () from target:/lib/ld-linux-armhf.so.3^M Without XML support in GDB, it can't parse xml sent by GDBserver, and has to fall back to the oldest arch. However, GDBserver doesn't know this (IMO, this is a defect in RSP), and still choose the right target description to create regcache and 'g' packet. If the port only has one target description or coincidentally two sides choose the same target description, there is no such issue. Otherwise, GDB is broken on read registers. This patch is to skip gdbserver tests if XML is not support and the target has multiple target descriptions. gdb/testsuite: 2016-07-21 Yao Qi <yao.qi@linaro.org> * lib/gdbserver-support.exp (skip_gdbserver_tests): Return 1 if gdb_skip_xml_test is true on some targets.
2016-07-21Fix fail in gdb.server/solib-list.expYao Qi2-0/+9
If I run single test solib-list.exp, it is OK. If I run two, as below, there are fails, $ make check RUNTESTFLAGS="server-run.exp solib-list.exp" FAIL: gdb.server/solib-list.exp: non-stop 0: continue (the program exited) FAIL: gdb.server/solib-list.exp: non-stop 0: p libvar FAIL: gdb.server/solib-list.exp: non-stop 1: continue (the program exited) FAIL: gdb.server/solib-list.exp: non-stop 1: p libvar in gdb.log, /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/../../gdb/gdbserver/gdbserver --once :2347 /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.server/server-run/server-run /lib64/ld-linux-x86-64.so.2 /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.server/solib-list/solib-list server-run is spawned, which is wrong. If I only run solib-list.exp, ld-linux is spawned, which is right. /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/../../gdb/gdbserver/gdbserver --once :2346 /lib64/ld-linux-x86-64.so.2 /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/outputs/gdb.server/solib-list/solib-list in test, we spawn gdbserver this way, # Note we pass ${interp_system}, the program gdbserver spawns, as # argument here, instead of using gdb_load, because we don't want # to download the interpreter to the target (it's already there) # or to the test output directory. set res [gdbserver_spawn "${interp_system} ${remote_binfile}"] in gdbserver_spawn -> gdbserver_download_current_prog, if last_loaded_file is set (when you run multiple tests), it is returned. This patch is to unset last_loaded_file in solib-list.exp. gdb/testsuite: 2016-07-21 Yao Qi <yao.qi@linaro.org> * gdb.server/solib-list.exp: Unset last_loaded_file.
2016-07-20Use a real vfork done event on FreeBSD when available.John Baldwin2-3/+45
FreeBSD 12 recently added a new ptrace event to indicate when the vfork parent resumes after the child process stops sharing the address space. Use this event to report a proper TARGET_WAITKIND_VFORK_DONE rather than faking a vfork done event after a delay. gdb/ChangeLog: * fbsd-nat.c (fbsd_enable_proc_events): Enable "PTRACE_VFORK" events. (fbsd_pending_vfork_done): Only define if "PTRACE_VFORK" is not defined. (fbsd_add_vfork_done): Likewise. (fbsd_is_vfork_done_pending): Likewise. (fbsd_next_vfork_done): Likewise. (fbsd_resume): Only ignore pending vfork done events if "PTRACE_VFORK" is not defined. (fbsd_wait): Only look for pending vfork done events if "PTRACE_VFORK" is not defined. [PTRACE_VFORK]: Handle "PL_FLAG_VFORKED" and "PL_FLAG_VFORK_DONE" events. (fbsd_follow_fork): Only fake a vfork done event if "PTRACE_VFORK" is not defined.
2016-07-20Enable ptrace events on new child processes.John Baldwin2-0/+8
New child processes on FreeBSD do not inherit optional ptrace events such as fork and LWP events from the parent process. Instead, explicitly enable events on new children when reporting a fork event. gdb/ChangeLog: * fbsd-nat.c (fbsd_wait): Use "fbsd_enable_proc_events" on new child processes.
2016-07-20Consolidate code to enable optional FreeBSD native target event reporting.John Baldwin2-31/+36
Add a new function to enable optional event reporting for FreeBSD native targets. Specifically, use this to enable fork and LWP events. The bodies of fbsd_enable_follow_fork and fbsd_enable_lwp_events have been subsumed into the new function. In addition, use the PT_GET_EVENT_MASK and PT_EVENT_SET_MASK requests added in FreeBSD 12 when present to enable these events. gdb/ChangeLog: * fbsd-nat.c (fbsd_enable_lwp_events): Remove function. (fbsd_enable_proc_events): New function. (fbsd_enable_follow_fork): Remove function. (fbsd_post_startup_inferior): Use "fbsd_enable_proc_events". (fbsd_post_attach): Likewise.
2016-07-20testsuite: Fix gdb.gdb/selftest.exp for C++-O2-g-built GDBJan Kratochvil2-0/+13
tested on Fedora 24 x86_64 after: ./configure; make That is: CFLAGS='-g -O2' CXXFLAGS='-g -O2' FAIL: gdb.gdb/selftest.exp: unknown source line FAIL: gdb.gdb/selftest.exp: step into xmalloc call gdb/testsuite/ChangeLog 2016-07-20 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.gdb/selftest.exp (do_steps_and_nexts): Add "next over TRY" and "step into captured_main (args)".
2016-07-20testsuite: Fix gdb.btrace/tailcall-only.exp errors on x86_64-m32Jan Kratochvil2-2/+6
$ runtest 'CC_FOR_TARGET=gcc -m32' gdb.btrace/tailcall-only.exp Running ./gdb.btrace/tailcall-only.exp ... gdb compile failed, tailcall-only.c: Assembler messages: tailcall-only.c:142: Error: cannot represent relocation type BFD_RELOC_64 [...] tailcall-only.c:425: Error: cannot represent relocation type BFD_RELOC_64 It works for the other x86 arch combinations: On Mon, 11 Apr 2016 08:44:23 +0200, Metzger, Markus T wrote: I'm setting the target triplet to "i686-unknown-linux" in my m32 configuration. Like this: set target_triplet "i686-unknown-linux" set_board_info cflags "-m32" set_board_info cppflags "-m32" On Wed, 20 Jul 2016 16:02:20 +0200, Pedro Alves wrote: There's no reason you should _not_ set it. But, multilib-style testing with --target_board=unix\{-m64,-m32\} etc. should work _too_, IMO. gdb/testsuite/ChangeLog 2016-07-20 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.btrace/tailcall-only.exp: Use is_lp64_target check.
2016-07-20testsuite patch: Skip py-unwind.exp on x86_64 -m32Jan Kratochvil2-1/+5
(gdb) source /home/jkratoch/redhat/gdb-clean/gdb/testsuite/outputs/gdb.python/py-unwind/py-unwind.py^M Python script imported^M Python Exception <type 'exceptions.ValueError'> Bad register: ^M (gdb) FAIL: gdb.python/py-unwind.exp: import python scripts class TestUnwinder(Unwinder): AMD64_RBP = 6 AMD64_RSP = 7 AMD64_RIP = 16 On Tue, 19 Jul 2016 12:06:09 +0200, Yao Qi wrote: py-unwind.exp does nothing on arch specific thing, so py-unwind.exp shouldn't be aware of the arch difference, but py-unwind.py should. On Tue, 19 Jul 2016 20:04:33 +0200, Pedro Alves wrote: How about we handle this in the .exp file for now and leave something more complicated for when the test is first ported to some other arch. WDYT? gdb/testsuite/ChangeLog 2016-07-20 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.python/py-unwind.exp: Test also ![is_lp64_target].
2016-07-19Build gdb.opt/inline-*.exp tests at -O0, rely on __attribute__((always_inline))Pedro Alves6-5/+21
A test recently added to gdb.opt/inline-cmds.exp fails for arm-none-eabi targets because -O2 leads to instructions to be reordered widely. I guess it might have made sense years ago to enable optimization in these tests, but I fail to see the need for that nowadays. Using -O0 while relying on __attribute__((always_inline)), which is already used in the tests [1] [2], avoids this sort of trouble, while still exercising the inlining-related use cases that are the focus of these tests. I think that nowadays we can safely assume that all compilers we care about support __attribute__((always_inline)) or similar. [1] - Except one spot that missed it. [2] - Note that the .exp files make sure the frames that should have been inlined are indeed inlined, with "info frame". gdb/testsuite/ChangeLog: 2016-07-19 Pedro Alves <palves@redhat.com> * gdb.opt/inline-break.exp: Remove optimize=-O2. * gdb.opt/inline-bt.exp: Likewise. * gdb.opt/inline-cmds.exp: Remove optimize=-O2 and add additional_flags=-Winline. * gdb.opt/inline-locals.exp: Likewise. * gdb.opt/inline-markers.c (ATTR): Define. (inlined_fn): Use it.
2016-07-19Use do_self_tests in selftest.expYao Qi2-105/+9
This patch uses do_self_tests to simplify selftest.exp. It doesn't change the tests except the order, -PASS: gdb.gdb/selftest.exp: Disassemble main PASS: gdb.gdb/selftest.exp: breakpoint in captured_main +PASS: gdb.gdb/selftest.exp: run until breakpoint at captured_main +PASS: gdb.gdb/selftest.exp: Disassemble main PASS: gdb.gdb/selftest.exp: set interrupt character in test_with_self PASS: gdb.gdb/selftest.exp: set listsize to 1 -PASS: gdb.gdb/selftest.exp: run until breakpoint at captured_main gdb/testsuite: 2016-07-19 Yao Qi <yao.qi@linaro.org> * gdb.gdb/selftest.exp: Remove checks on is_remote and isnative. (test_with_self): Remove some code. Remove argument executable. (top-level): Use do_self_tests.
2016-07-15GDB testsuite: Escape paths used in regular expressionsDon Breazeal3-7/+17
This patch fixes problems with a few GDB testsuites when executing in a path that contains special characters (e.g. "++"). When such paths are used as a regular expression, the regular expression parser will choke and cause the tests to fail. This patch uses string_to_regexp to escape strings that will be used as regular expressions, in order to sanitize path names used in expect scripts. 2016-07-15 Zachary Welch <zwelch@codesourcery.com> Don Breazeal <donb@codesourcery.com> gdb/testsuite/ChangeLog: * gdb.base/maint.exp: Escape paths used in regular expressions. * gdb.stabs/weird.exp: Likewise.
2016-07-15Pass SIGLIBRT directly to child processes.John Baldwin4-0/+21
FreeBSD's librt uses SIGLIBRT as an internal signal to implement SIGEV_THREAD sigevent notifications. Similar to SIGLWP or SIGCANCEL this signal should be passed through to child processes by default. include/ChangeLog: * signals.def: Add GDB_SIGNAL_LIBRT. gdb/ChangeLog: * common/signals.c (gdb_signal_from_host): Handle SIGLIBRT. (do_gdb_signal_to_host): Likewise. * infrun.c (_initialize_infrun): Pass GDB_SIGNAL_LIBRT through to programs. * proc-events.c (signal_table): Add entry for SIGLIBRT.
2016-07-14Add missing newline to py-breakpoint.cTom Tromey2-0/+6
In https://sourceware.org/ml/gdb-patches/2016-07/msg00152.html, Yao noted that a patch of mine was missing a newline. I thought I had fixed this but when looking today I realized it was not fixed. This patch adds it. I'm checking this in as obvious. 2016-07-14 Tom Tromey <tom@tromey.com> * python/py-breakpoint.c (gdbpy_breakpoint_deleted): Add missing newline.
2016-07-14Remove unused variablesTom Tromey13-55/+29
This patch removes set-but-unused variables. This holds all the removals I consider to be simple and relatively uncontroversial. 2016-07-14 Tom Tromey <tom@tromey.com> * mips-tdep.c (micromips_scan_prologue): Remove "frame_addr". (mips_o32_push_dummy_call): Remove "stack_used_p". * aarch64-tdep.c (aarch64_record_data_proc_imm): Remove "insn_bit28". * rust-lang.c (rust_print_type): Remove "len". * rust-exp.y (super_name): Remove "current_len". * python/py-framefilter.c (py_print_type): Remove "type". * mdebugread.c (parse_partial_symbols): Remove "past_first_source_file". <N_SO>: Remove "valu", "first_so_symnum", "prev_textlow_not_set". * m2-valprint.c (m2_print_unbounded_array): Remove "content_type". (m2_val_print): Remove "i". * linespec.c (unexpected_linespec_error): Remove "cleanup". * f-valprint.c (f_val_print): Remove "i". * elfread.c (elf_symtab_read): Remove "offset". * dwarf2-frame.c (dwarf2_fetch_cfa_info): Remove "addr_size". * jit.c (jit_dealloc_cache): Remove "i" and "frame_arch".
2016-07-14Remove some variables but call functions for side effectsTom Tromey7-20/+28
This patch consolidates the (possibly-questionable) spots where we remove a declaration but continue to call some function for side effects. In a couple of cases it wasn't entirely clear to me that this mattered; and in some other cases it might be more aesthetically pleasing to use ATTRIBUTE_UNUSED. So, I broke this out into a separate patch for simpler review. 2016-07-14 Tom Tromey <tom@tromey.com> * arch-utils.c (default_skip_permanent_breakpoint): Remove "bp_insn". * disasm.c (do_assembly_only): Remove "num_displayed". * dwarf2read.c (read_abbrev_offset): Remove "length". (dwarf_decode_macro_bytes) <DW_MACINFO_vendor_ext>: Remove "constant". * m32c-tdep.c (make_regs): Remove "r2hl", "r3hl", and "intbhl". * microblaze-tdep.c (microblaze_frame_cache): Remove "func". * tracefile.c (trace_save): Remove "status".
2016-07-14Remove some unused overlay codeTom Tromey2-10/+11
This patch removes some unneeded initializations in overlay code in symfile.c. It also deletes some old commented-out code. 2016-07-14 Tom Tromey <tom@tromey.com> * symfile.c (simple_overlay_update_1): Remove initialization of "size", and commented-out code. (simple_overlay_update): Likewise.
2016-07-14Use getcurx in curses codeTom Tromey3-9/+15
As suggested by Pedro, this changes a few spots to use getcurx, rather than getyx. This avoids some unused variable warnings. 2016-07-14 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_show_source_line): Use getcurx. * tui/tui-io.c (tui_puts): Use getcurx. (tui_redisplay_readline): Likewise.
2016-07-14Add one use of ATTRIBUTE_UNUSEDTom Tromey2-1/+5
One spot needed ATTRIBUTE_UNUSED to cope with the new warnings. The case in inflow.c is just a mass of ifdefs; and while the only use of "result" is guarded by "#if 0", I thought it simplest to leave it all in place. 2016-07-14 Tom Tromey <tom@tromey.com> * inflow.c (child_terminal_ours_1): Use ATTRIBUTE_UNUSED.
2016-07-14Change reopen_exec_file to check result of statTom Tromey2-1/+6
This seems to be a real bug found by -Wunused-but-set-variable. If "stat" fails for some reason, gdb would use the uninitialized "st". 2016-07-14 Tom Tromey <tom@tromey.com> * corefile.c (reopen_exec_file): Only examine st.st_mtime if stat succeeded.
2016-07-13PR python/15620, PR python/18620 - breakpoint events in PythonTom Tromey8-0/+143
This patch adds some breakpoint events to Python. In particular, there is a creation event that is emitted when a breakpoint is created; a modification event that is emitted when a breakpoint changes somehow; and a deletion event that is emitted when a breakpoint is deleted. In this patch, the event's payload is the breakpoint itself. I considered making a new event type to hold the breakpoint, but I didn't see a need. Still, I thought I would mention this as a spot where some other choice is possible. Built and regtested on x86-64 Fedora 23. 2016-07-13 Tom Tromey <tom@tromey.com> PR python/15620, PR python/18620: * python/py-evts.c (gdbpy_initialize_py_events): Call add_new_registry for new events. * python/py-events.h (events_object) <breakpoint_created, breakpoint_deleted, breakpoint_modified>: New fields. * python/py-breakpoint.c (gdbpy_breakpoint_created): Emit the breakpoint changed event. (gdbpy_breakpoint_deleted): Emit the breakpoint deleted event. (gdbpy_breakpoint_modified): New function. (gdbpy_initialize_breakpoints): Attach to the breakpoint modified observer. 2016-07-13 Tom Tromey <tom@tromey.com> PR python/15620, PR python/18620: * python.texi (Events In Python): Document new breakpoint events. 2016-07-13 Tom Tromey <tom@tromey.com> PR python/15620, PR python/18620: * gdb.python/py-breakpoint.exp (connect_event, check_last_event) (test_bkpt_events): New procs.
2016-07-13PR python/17698 - add Breakpoint.pendingTom Tromey9-0/+76
This patch adds a "pending" attribute to gdb.Breakpoint. Built and regtested on x86-64 Fedora 23. 2016-07-13 Tom Tromey <tom@tromey.com> PR python/17698: * NEWS: Update. * python/py-breakpoint.c (bppy_get_pending): New function. (breakpoint_object_getset): Add entry for "pending". * breakpoint.h (pending_breakpoint_p): Declare. * breakpoint.c (pending_breakpoint_p): New function. 2016-07-13 Tom Tromey <tom@tromey.com> PR python/17698: * python.texi (Breakpoints In Python): Document Breakpoint.pending. 2016-07-13 Tom Tromey <tom@tromey.com> PR python/17698: * gdb.python/py-breakpoint.exp (test_bkpt_basic): Add "pending" test. (test_watchpoints): Likewise. (test_bkpt_pending): New proc.
2016-07-13use user_breakpoint_p in python codeTom Tromey2-4/+9
I noticed that bppy_get_visibility and gdbpy_breakpoint_created implemented their own visibility checks, but subtly different from user_breakpoint_p. I think the latter is more correct, and so changed the Python code to use it. I suspect there isn't a decent way to test this, so no new test. Built and regtested on x86-64 Fedora 23. 2016-07-13 Tom Tromey <tom@tromey.com> * python/py-breakpoint.c (bppy_get_visibility) (gdbpy_breakpoint_created): Use user_breakpoint_p.
2016-07-13Rearrange Python breakpoint node in documentationTom Tromey2-42/+47
I noticed that the Python breakpoint documentation was ordered a bit oddly. It documented the constructor; then the stop method; then the watchpoint constants (used for the constructor); then various other methods and attributes; then the other constants used by the constructor; and then finally some more methods and attributes. This patch rearranges the node a little to move the constants to just after the constructor and before the other methods and attributes. 2016-07-13 Tom Tromey <tom@tromey.com> * python.texi (Breakpoints In Python): Move table of types and table of watchpoint types earlier in node.
2016-07-13Fix PR cli/18053Tom Tromey4-6/+38
PR cli/18053 concerns a couple of minor bugs in the JIT debuginfo support. First, jit-reader-load should use filename completion and support tilde expansion. Second, the help for jit-reader-unload is incorrect. While working on this I also realized that jit-reader-unload should use the no-op completer, so I've included that as well. Built and regtested on x86-64 Fedora 23. A completer test for jit-reader-load is included, but not a tilde-expansion test, as I couldn't think of a reliable way to test that. 2016-07-13 Tom Tromey <tom@tromey.com> PR cli/18053: * jit.c (jit_reader_load_command): Use tilde_expand. (_initialize_jit): Fix help for jit-reader-unload. Set completer for new commands. 2016-07-13 Tom Tromey <tom@tromey.com> PR cli/18053: * gdb.base/jit-so.exp (one_jit_test): Add jit-reader-load completion test.
2016-07-13[ppc64] Fix for function descriptorsJan Kratochvil6-13/+46
Marin Cermak has found various testcases (or one of them) of GDB FAIL on ppc64. https://sourceware.org/bugzilla/show_bug.cgi?id=20328 .o contained only the function descriptor address. The DWARF as produced by Tcl Dwarf::assemble: <1><27>: Abbrev Number: 4 (DW_TAG_subprogram) <28> DW_AT_name : main <2d> DW_AT_external : 1 <2e> DW_AT_low_pc : 0x1001ff98 <36> DW_AT_high_pc : 0x1002ff98 <2><3e>: Abbrev Number: 5 (DW_TAG_lexical_block) Runtime info: $2 = {<text variable, no debug info>} 0x10000674 <.main> $3 = {void ()} 0x1001ff98 <main> On Tue, 12 Jul 2016 15:22:49 +0200, Ulrich Weigand wrote: Well, most of the gdb.dwarf2 test cases simply use explicitly placed labels for the DW_AT_low_pc / DW_AT_high_pc attributes. See e.g. dw2-unresolved-main.c: asm (".globl cu_text_start"); asm ("cu_text_start:"); On Wed, 13 Jul 2016 10:54:00 +0200, Jan Kratochvil wrote: Now I see I should not do that because: lib/dwarf.exp: proc function_range { func src } { So I am providing this patch. gdb/testsuite/ChangeLog 2016-07-13 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.dwarf2/atomic-type.exp: Use function_range for low_pc and high_pc. * gdb.dwarf2/atomic.c (f): Rename f_end_lbl to f_label. * gdb.dwarf2/dw2-bad-mips-linkage-name.c (f): Rename f_end_lbl to f_label. (g): Rename g_end_lbl to g_label. * gdb.dwarf2/dw2-bad-mips-linkage-name.exp: Use function_range for low_pc and high_pc. * gdb.dwarf2/dw2-lexical-block-bare.exp: Likewise.
2016-07-12PR python/19293 - invalidate frame cache when unwinders changeTom Tromey8-2/+57
PR python/19293 notes that when a Python unwinder is disabled, the frame cache is not invalidated. This means that disabling an unwinder doesn't have any immediate effect -- but in my experience it's often the case that I want to enable or disable an unwinder in order to see what happens. This patch adds a new gdb.invalidate_cached_frames function and arranges for the relevant bits of library code to call it. I've only partially documented this function, considering a warning sufficient without going into all the reasons ordinary code should not call it. The name of the new function was taken from a comment in frame.h next to reinit_frame_cache. No new test as I think the updates to the existing test are sufficient to show that the code is working as intended. Built and regtested on x86-64 Fedora 23. 2016-07-12 Tom Tromey <tom@tromey.com> PR python/19293: * python/lib/gdb/command/unwinders.py (do_enable_unwinder): Call gdb.invalidate_cached_frames. * python/lib/gdb/unwinder.py (register_unwinder): Call gdb.invalidate_cached_frames. * python/python.c (gdbpy_invalidate_cached_frames): New function. (python_GdbMethods): Add entry for invalidate_cached_frames. 2016-07-12 Tom Tromey <tom@tromey.com> PR python/19293: * python.texi (Frames In Python): Document gdb.invalidate_cached_frames. 2016-07-12 Tom Tromey <tom@tromey.com> PR python/19293: * gdb.python/py-unwind-maint.exp: Update tests.
2016-07-12Match the selftest output when captured_main is inlinedYao Qi2-0/+10
In gdb.gdb/observer.exp, I see the following fail, (gdb) break captured_main^M Breakpoint 1 at 0x57e409: file ../../binutils-gdb/gdb/main.c, line 492.^M (gdb) PASS: gdb.gdb/observer.exp: breakpoint in captured_main run -nw -nx -data-directory /home/yao.qi/SourceCode/gnu/build/gdb/testsuite/../data-directory^M Starting program: /home/yao.qi/SourceCode/gnu/build/gdb/testsuite/outputs/gdb.gdb/observer/xgdb -nw -nx -data-directory /home/yao.qi/SourceCode/gnu/build/gdb/testsuite/../data-directory^M [Thread debugging using libthread_db enabled]^M Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".^M ^M Breakpoint 1, gdb_main (args=args@entry=0x7fffffffdca0) at ../../binutils-gdb/gdb/main.c:1157^M 1157 captured_main (args);^M (gdb) FAIL: gdb.gdb/observer.exp: run until breakpoint at captured_main looks the test sets breakpoint on captured_main, and expects program stops at captured_main. However, program stops at the place where captured_main is called, because captured_main is inlined, <1><8519e3>: Abbrev Number: 58 (DW_TAG_subprogram) <8519e4> DW_AT_name : (indirect string, offset: 0x880d3): captured_main <8519e8> DW_AT_decl_file : 1 <8519e9> DW_AT_decl_line : 444 <8519eb> DW_AT_type : <0x846e48> <8519ef> DW_AT_inline : 1 (inlined) <8519f0> DW_AT_sibling : <0x851c01> The test passes if I build GDB with '-O0 -g3', because captured_main isn't inlined. This patch is to match the output when captured_main is inlined. gdb/testsuite: 2016-07-12 Yao Qi <yao.qi@linaro.org> * lib/selftest-support.exp (selftest_setup): Match the output when captured_main is inlined.
2016-07-12Add type casts to allow C++ compile.Chung-Lin Tang2-2/+8
gdb/gdbserver/ * linux-nios2-low.c (nios2_fill_gregset): Add type cast to buf parameter. (nios2_store_gregset): Likewise.
2016-07-07[obv] Fix broken build on Fedora 23.Walfred Tedeschi2-0/+7
Compiler complains about possible utilization of "symbol" which is member of lang_def. Initialization was added. 2016-07-07 Walfred Tedeschi <walfred.tedeschi@intel.com> gdb/ChangeLog: * cp-namespace.c (cp_lookup_bare_symbol): Initialize lang_this.symbol.
2016-07-07Fix of default lookup for "this" symbol.Walfred Tedeschi5-4/+57
Using the default lookup for the symbol "this" might lead to segmentation fault in GDB. Some languages, e.g. Fortran, use as default lookup routine the C++ routines. For those languages "this" can be the instance of a class or even the definition of a class. When an instance of a class having the name "this" is evaluated in GDB a segmentation fault was observed. As example of the issue take into consideration the Fortran code: type foo real :: a type(bar) :: x character*7 :: b end type foo type(foo) :: this Issue appears when evaluating the variable "this" in GDB. Within the language definition structure there is a field that represents the name of the special symbol used for the C++ "this" for the language being described. The fix presented here takes into account the aforementioned field. In the case the aforementioned field is NULL "this" is not represented in the language described and the lookup should return a null_block_symbol. Tests: Performed tests with gfortran and ifort. Reviewed: https://sourceware.org/ml/gdb-patches/2016-04/msg00068.html After the commited patch: https://sourceware.org/ml/gdb-patches/2016-06/msg00364.html Patch can be applied. 2016-06-16 Walfred Tedeschi <walfred.tedeschi@intel.com> gdb/ChangeLog: * cp-namespace.c (cp_lookup_bare_symbol): Use language passed as parameter to look for the symbol "this". gdb/testsuite/ChangeLog: * gdb.fortran/derived-types.exp (result_line, result_line_2): New variables. (print this%a, print this%b, print this): New tests. * gdb.fortran/derived-types.f90 (this): New object and initialization.
2016-07-06gdb.ada/arraydim.exp: Fix directory layoutSimon Marchi2-2/+7
I forgot to fix this one in the previous commit. gdb/testsuite/ChangeLog: * gdb.ada/arraydim.exp: Remove extra directory level in build directory.
2016-07-06Remove extra output directory level for Ada testsSimon Marchi5-12/+17
The output of Ada tests create a layout where the test name ("formatted_ref" in this example) appears twice: outputs └── gdb.ada └── formatted_ref └── formatted_ref ├── b~formatted_ref.adb ├── b~formatted_ref.ads ├── b~formatted_ref.ali ├── b~formatted_ref.o ├── defs.ali ├── defs.o ├── formatted_ref ├── formatted_ref.ali └── formatted_ref.o This causes a problem when testing with the native-gdbserver board, when the binary has the same name as the test. When gdb_remote_download is called to upload the compiled binary, the implementation for native-gdbserver copies it in the standard output directory (in outputs/gdb.ada/formatted_ref). However, there is already a directory named formatted_ref in there, so the copy fails and gdbserver isn't able to load the binary. This patch bypasses the problem by removing the extra directory level. The compiled binary will already be in its final location in the standard output directory, so the copy will effectively be a no-op. gdb/testsuite/ChangeLog: * lib/ada.exp: Remove extra directory level in build directory. * gdb.ada/cond_lang.exp: Likewise. * gdb.ada/exec_changed.exp: Likewise. * gdb.ada/lang_switch.exp: Likewise.
2016-07-06Remove extraneous parentheses.John Baldwin2-1/+5
gdb/ChangeLog: * h8300-tdep.c (h8300_print_register): Remove extraneous parentheses.
2016-07-06Use unsigned integer constant with left shifts.John Baldwin2-2/+7
This avoids undefined behavior. gdb/ChangeLog: * ada-lang.c (ada_unpack_from_contents): Use unsigned constants with left shifts.
2016-07-06Set uses_fp for frames with a valid FP register explicitly.John Baldwin2-11/+23
Since CORE_ADDR is unsigned, the saved FP register is always greater than or equal to zero. Replace the comparison by explicitly setting uses_fp to 1 for frames with a valid FP register. gdb/ChangeLog: * sh64-tdep.c (sh64_analyze_prologue): Set "uses_fp" when setting the MEDIA_FP_REGNUM register.
2016-07-06Remove check for negative size.John Baldwin2-7/+6
Since CORE_ADDR is unsigned, this value can never be negative. gdb/ChangeLog: * score-tdep.c (score7_malloc_and_get_memblock): Remove check for negative size.
2016-07-06Use 'ptid_t' instead of 'ptid' for fbsd_next_vfork_done's return type.John Baldwin2-1/+5
'ptid' compiles in C++, but not C. gdb/ChangeLog: * fbsd-nat.c (fbsd_is_vfork_done_pending): Fix return type.
2016-07-06[ARM] Fix endless recursion on calculating CPRC candidateYao Qi2-2/+10
When GDB determines whether type T can be part of candidate for passing and returning in VFP registers, it calls arm_vfp_cprc_sub_candidate recursively. However, if type T has self-reference field, like, class C { static C s; }; arm_vfp_cprc_sub_candidate won't return. This fix is to skip calling arm_vfp_cprc_sub_candidate if the field is static. gdb: 2016-07-06 Yao Qi <yao.qi@linaro.org> * arm-tdep.c (arm_vfp_cprc_sub_candidate): Don't call arm_vfp_cprc_sub_candidate for static field.
2016-07-06Allow subscripting raw pointersManish Goregaokar5-0/+17
This will be useful for dealing with vectors; regardless of our final solution for the Index trait. 2016-07-06 Manish Goregaokar <manish@mozilla.com> gdb/ChangeLog: * rust-lang.c (rust_subscript): Allow subscripting pointers gdb/testsuite/ChangeLog: * simple.rs: Add test for raw pointer subscripting * simple.exp: Add test expectations
2016-07-05Fix fail in gdb.mi/mi-reverse.expYao Qi2-1/+5
Commit 38b022b4452f996fb5a8598f80d850b594621bcf adds "method" and "format" fields in =record-started, but doesn't update test case gdb.mi/mi-reverse.exp, so it causes the fail like this, PASS: gdb.mi/mi-reverse.exp: mi runto main Expecting: ^(-interpreter-exec console record[^M ]+)?(=record-started,thread-group="i1"^M \^done[^M ]+[(]gdb[)] ^M [ ]*) -interpreter-exec console record^M =record-started,thread-group="i1",method="full"^M ^done^M (gdb) ^M FAIL: gdb.mi/mi-reverse.exp: Turn on process record and regression was found by buildbot too https://sourceware.org/ml/gdb-testers/2016-q2/msg04492.html gdb/testsuite: 2016-07-05 Yao Qi <yao.qi@linaro.org> * gdb.mi/mi-reverse.exp: Match =record-started output.
2016-07-05babeltrace compilation regressionJan Kratochvil3-2/+7
Since: commit 2d681be471cf8aff8f296cb7713c39e9aa4fc2bb Author: Andreas Arnez <arnez@linux.vnet.ibm.com> Date: Wed Apr 27 15:52:16 2016 +0200 Avoid non-C++-enabled babeltrace versions tested with: libbabeltrace-devel-1.2.4-4.fc24.x86_64 libbabeltrace-devel-1.4.0-2.fc25.x86_64 it can no longer build due to: configure:16435: gcc -o conftest -m64 -g3 -pipe -Wall -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -fno-diagno stics-show-caret -Werror -static-libstdc++ -static-libgcc conftest.c -ldl -ldl -lncurses -lm -ldl -lbabeltrace -lbabeltrace-ctf >&5 conftest.c: In function 'main': conftest.c:208:7: error: 'pos' is a pointer; did you mean to use '->'? gdb/ChangeLog 2016-07-05 Jan Kratochvil <jan.kratochvil@redhat.com> * configure: Regenerate. * configure.ac (HAVE_LIBBABELTRACE): Fix pos variable dereference.
2016-07-01Optimize memory_xfer_partial for remoteDon Breazeal5-2/+58
Some analysis we did here showed that increasing the cap on the transfer size in target.c:memory_xfer_partial could give 20% or more improvement in remote load across JTAG. Transfer sizes were capped to 4K bytes because of performance problems encountered with the restore command, documented here: https://sourceware.org/ml/gdb-patches/2013-07/msg00611.html and in commit 67c059c29e1f ("Improve performance of large restore commands"). The 4K cap was introduced because in a case where the restore command requested a 100MB transfer, memory_xfer_partial would repeatedy allocate and copy an entire 100MB buffer in order to properly handle breakpoint shadow instructions, even though memory_xfer_partial would actually only write a small portion of the buffer contents. A couple of alternative solutions were suggested: * change the algorithm for handling the breakpoint shadow instructions * throttle the transfer size up or down based on the previous actual transfer size I tried implementing the throttling approach, and my implementation reduced the performance in some cases. This patch implements a new target function that returns that target's limit on memory transfer size. It defaults to ULONGEST_MAX bytes, because for native targets there is no marshaling and thus no limit is needed. For remote targets it uses get_memory_write_packet_size. gdb/ChangeLog: * remote.c (remote_get_memory_xfer_limit): New function. * target-delegates.c: Regenerate. * target.c (memory_xfer_partial): Call target_ops.to_get_memory_xfer_limit. * target.h (struct target_ops) <to_get_memory_xfer_limit>: New member.
2016-07-01Fake VFORK_DONE events when following only the parent after a vfork.John Baldwin2-9/+121
FreeBSD does not currently report a ptrace event for a parent process after it resumes due to the child exiting the shared memory region after a vfork. Take the same approach used in linux-nat.c in this case of sleeping for a while and then reporting a fake VFORK_DONE event. gdb/ChangeLog: * fbsd-nat.c (struct fbsd_fork_child_info): Rename to ... (struct fbsd_fork_info): ... this. (struct fbsd_fork_info) <child>: Rename to ... (struct fbsd_fork_info) <ptid>: ... this. (fbsd_pending_children): Update type. (fbsd_remember_child): Update type and field name. (fbsd_is_child_pending): Likewise. (fbsd_pending_vfork_done): New variable. (fbsd_is_vfork_done_pending): New function. (fbsd_next_vfork_done): New function. (fbsd_resume): Don't resume processes with a pending vfork done event. (fbsd_wait): Report pending vfork done events. (fbsd_follow_fork): Delay and record a pending vfork done event for a vfork parent when detaching the child.