aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite
AgeCommit message (Collapse)AuthorFilesLines
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-13PR python/15620, PR python/18620 - breakpoint events in PythonTom Tromey2-0/+47
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 Tromey2-0/+19
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-13Fix PR cli/18053Tom Tromey2-0/+13
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 Tromey2-2/+14
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-07Fix of default lookup for "this" symbol.Walfred Tedeschi3-3/+47
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-06Allow subscripting raw pointersManish Goregaokar3-0/+7
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-01Extend JIT-reader test and fix GDB problems that exposesPedro Alves5-20/+272
The jit-reader.exp test isn't really exercising the jit-reader's unwinder API at all. This commit address that, and then fixes GDB problems exposed. - The custom JIT reader provided for the jit-reader.exp testcase always rejects the jitted function's frame... This is because the custom JIT reader in the testcase never ever sets state->code_begin/end, so the bounds check in gdb.base/jitreader.c:unwind_frame: if (this_ip >= state->code_end || this_ip < state->code_begin) return GDB_FAIL; tends to fail, unless you're "lucky" (because it references uninitialized data). The result is that GDB is always actually using a built-in unwinder for the jitted function. - The provided unwinder doesn't do anything that GDB's built-in unwinder can't do. IOW, we can't really tell whether the JIT reader's unwinder is working or not. I fixed that by making the jitted function mangle its own stack pointer with a xor, and then teaching the jit unwinder to demangle it back (another xor). So now "backtrace" with GDB's built-in unwinder fails while with the jit unwinder, it succeeds. - GDB crashes after unloading the JIT reader, and flushing frames... I made the testcase use the "flushregs" command after unloading the JIT reader, to force the JIT frames to be flushed. However, that crashes GDB... When reinit_frame_cache tears down a frame's cache, it calls its unwinder's dealloc_cache method, which for JIT frames ends up in jit.c:jit_dealloc_cache. This function calls each of the frame's gdb_reg_value's "free" pointer: for (i = 0; i < gdbarch_num_regs (frame_arch); i++) if (priv_data->registers[i] && priv_data->registers[i]->free) priv_data->registers[i]->free (priv_data->registers[i]); and the problem is these gdb_reg_value instances have been returned by the JIT reader that has been already unloaded, and their "free" function pointers likely point to functions in the DSO that has already been unloaded... A fix for that could be to call reinit_frame_cache in jit_reader_unload_command _before_ unloading the jit reader DSO so that the jit reader is given a chance to clean up the gdb_reg_values before it is unloaded. However, the fix for the point below makes this unnecessary, because it stops jit.c from keeping around gdb_reg_values in the first place. - However, it still makes sense to clear the frame cache when loading or unloading a JIT unwinder. This makes testing a JIT unwinder a bit simpler. - Not only the frame cache actually -- gdb is not unloading the jit-registered objfiles when the JIT reader is unloaded, and not loading the already-registered descriptors when a JIT reader is loaded. The new test exercises unloading the jit reader, loading it back again, and then making sure the JIT reader's unwinder works again. Without the unload/re-load of already-read descriptors, the newly loaded JIT would have no idea where the new function is, because it's stored at symbol read time. - I added a couple "info frame" calls to the test, and that crashes GDB... The problem is that jit_frame_prev_register assumes it'll only be called for raw registers, so when it gets a pseudo register number, the "priv->registers[reg]" access is really an out-of-bounds access. To fix that, I made jit_frame_prev_register use gdbarch_pseudo_register_read_value for reading the pseudo-registers. However, that works with a regcache and we don't have one. To fix that, I made the JIT unwinder store a regcache in its cache instead of an array of gdb_reg_value pointers. gdb/ChangeLog: 2016-07-01 Pedro Alves <palves@redhat.com> Tom Tromey <tom@tromey.com> * jit.c (jit_reader_load_command): Call reinit_frame_cache and jit_inferior_created_hook. (jit_reader_unload_command): Call reinit_frame_cache and jit_inferior_exit_hook. * jit.c (struct jit_unwind_private) <registers>: Delete field. <regcache>: New field. (jit_unwind_reg_set_impl): Set the register's value in the regcache. Free the passed-in gdb_reg_value. (jit_dealloc_cache): Adjust to free the regcache. (jit_frame_sniffer): Allocate a regcache instead of an array of gdb_reg_value pointers. (jit_frame_this_id): Adjust. (jit_frame_prev_register): Read raw registers off of the regcache instead of from the gdb_reg_value pointer array. Use gdbarch_pseudo_register_read_value to read pseudo registers. * regcache.c (regcache_raw_set_cached_value): New function, factored out from ... (regcache_raw_write): ... here. * regcache.h (regcache_raw_set_cached_value): Declare. gdb/testsuite/ChangeLog: 2016-07-01 Pedro Alves <palves@redhat.com> * gdb.base/jit-reader.exp (info_registers_current_frame): New procedure. (jit_reader_test): Test the jit reader's unwinder. * gdb.base/jithost.c (jit_function_00_code): New global. (main): Use memcpy to fill in the mmapped code, instead of poking bytes manually here. * gdb.base/jitreader.c (enum register_mapping) <AMD64_RBP>: New value. (read_debug_info): Save the function's range. (read_sp): New function. (unwind_frame): Use it. Also unwind RBP. (get_frame_id): Use read_sp. (gdb_init_reader): Use calloc instead of malloc. * lib/gdb.exp (get_hexadecimal_valueof): Add optional 'test' parameter. Use gdb_test_multiple.
2016-07-01Fix failure to detach if process exits while detaching on LinuxPedro Alves3-0/+449
This commit fixes detaching on Linux when some thread exits the whole thread group (process) just while we're detaching. On Linux, a ptracer must detach from each LWP individually, with PTRACE_DETACH. Since PTRACE_DETACH sets the thread running free, if one of the already-detached threads causes the whole thread group to exit (e.g., simply calls exit), the kernel force-kills the other threads in the group, making them zombie, just as we're still detaching them. Since PTRACE_DETACH against a zombie thread fails with ESRCH, and gdb/gdbserver are not expecting this, the detach fails with an error like: "Can't detach process: No such process.". This patch detects this detach failure as normal, and instead of erroring out, reaps the now-dead thread. New test included, that exercises several different scenarios that cause GDB/GDBserver to error out when it should not. Tested on x86-64 GNU/Linux with {unix, native-gdbserver, native-extended-gdbserver} Note: without the previous fix, the "single-process + continue" variant of the new test would fail with: (gdb) PASS: gdb.threads/process-dies-while-detaching.exp: single-process: continue: watchpoint: switch to parent continue Continuing. Warning: Could not insert hardware watchpoint 3. Could not insert hardware breakpoints: You may have requested too many hardware breakpoints/watchpoints. Command aborted. (gdb) FAIL: gdb.threads/process-dies-while-detaching.exp: single-process: continue: watchpoint: continue gdb/gdbserver/ChangeLog: 2016-07-01 Pedro Alves <palves@redhat.com> Antoine Tremblay <antoine.tremblay@ericsson.com> * linux-low.c: Change interface to take the target lwp_info pointer directly and return void. Handle detaching from a zombie thread. (linux_detach_lwp_callback): New function. (linux_detach): Detach from the leader thread after detaching from the clone threads. gdb/ChangeLog: 2016-07-01 Pedro Alves <palves@redhat.com> Antoine Tremblay <antoine.tremblay@ericsson.com> * inf-ptrace.c (inf_ptrace_detach_success): New function, factored out from ... (inf_ptrace_detach): ... here. * inf-ptrace.h (inf_ptrace_detach_success): New declaration. * linux-nat.c (get_pending_status): Rename to ... (get_detach_signal): ... this, and return a host signal instead of filling in a wait status. (detach_one_lwp): New function, factored out from detach_callback and adjusted to handle detaching from a zombie thread. (detach_callback): Skip the leader thread. (linux_nat_detach): No longer defer to inf_ptrace_detach to detach the leader thread, nor build a signal string to pass down. Instead, use target_announce_detach, detach_one_lwp and inf_ptrace_detach_success. gdb/testsuite/ChangeLog: 2016-07-01 Pedro Alves <palves@redhat.com> Antoine Tremblay <antoine.tremblay@ericsson.com> * gdb.threads/process-dies-while-detaching.c: New file. * gdb.threads/process-dies-while-detaching.exp: New file.
2016-07-01Forget watchpoint locations when inferior exits or is killed/detachedPedro Alves3-0/+158
If you have two inferiors (or more), set watchpoints in one of the inferiors, and then that inferior exits, until you manually delete the watchpoint (or something forces a breakpoint re-set), you can't resume the other inferior. This is exercised by the test added by this commit. Without the GDB fix, this test fails like this: FAIL: gdb.multi/watchpoint-multi-exit.exp: dispose=kill: continue to marker in inferior 1 FAIL: gdb.multi/watchpoint-multi-exit.exp: dispose=detach: continue to marker in inferior 1 FAIL: gdb.multi/watchpoint-multi-exit.exp: dispose=exit: continue to marker in inferior 1 and gdb.log shows (in all three cases): (gdb) continue Continuing. Warning: Could not insert hardware watchpoint 2. Could not insert hardware breakpoints: You may have requested too many hardware breakpoints/watchpoints. Command aborted. (gdb) FAIL: gdb.multi/watchpoint-multi-exit.exp: dispose=kill: continue to marker in inferior 1 The problem is that GDB doesn't forget about the locations of watchpoints set in the inferior that is now dead. When we try to continue the inferior that is still alive, we reach insert_breakpoint_locations, which has the the loop that triggers the error: /* If we failed to insert all locations of a watchpoint, remove them, as half-inserted watchpoint is of limited use. */ That loop finds locations that are not marked inserted, but which according to should_be_inserted should have been inserted, and so errors out. gdb/ChangeLog: 2016-07-01 Pedro Alves <palves@redhat.com> * breakpoint.c (breakpoint_init_inferior): Discard watchpoint locations. * infcmd.c (detach_command): Call breakpoint_init_inferior. gdb/testsuite/ChangeLog: 2016-07-01 Pedro Alves <palves@redhat.com> * gdb.multi/watchpoint-multi-exit.c: New file. * gdb.multi/watchpoint-multi-exit.exp: New file.
2016-07-01Fix formatting of some previous gdb/testsuite/ChangeLog entriesPedro Alves1-10/+15
2016-06-30Fix gdbserver/MI testing regressionPedro Alves2-4/+7
Commit 51f77c3704a6 ("Add testing infrastruture bits for running with MI on a separate UI") broke MI testing with native-gdbserver: $ make check RUNTESTFLAGS="--target_board=native-gdbserver mi-var-child.exp" ... Running .../src/binutils-gdb/gdb/testsuite/gdb.mi/mi-var-child.exp ... can't unset "inferior_spawn_id": no such variable while executing "unset inferior_spawn_id" (procedure "close_gdbserver" line 20) invoked from within "close_gdbserver" ... When testing with gdbserver, gdb_exit is overridden with a special version that calls close_gdbserver, which clears inferior_spawn_id. The problem is that the commit mentioned above made gdb_exit/mi_gdb_exit clear inferior_spawn_id too, and clearing a non-existing variable is a tcl error. Since gdb_exit/mi_gdb_exit always clears inferior_spawn_id now, the fix is simply to stop clearing it in close_gdbserver. gdb/testsuite/ 2016-06-30 Pedro Alves <palves@redhat.com> * lib/gdbserver-support.exp (close_gdbserver, gdb_exit): Don't unset inferior_spawn_id.
2016-06-30Make testing gdb with FORCE_SEPARATE_MI_TTY=1 actually workPedro Alves2-1/+6
Runing the whole gdb testsuite with MI on a separate tty, with: make check RUNTESTFLAGS="FORCE_SEPARATE_MI_TTY=1" Doesn't actually work because commit 51f77c3704a6 ("Add testing infrastruture bits for running with MI on a separate UI") included a last-minute rename typo, now fixed with this commit. gdb/testsuite/ChangeLog: 2016-06-30 Pedro Alves <palves@redhat.com> * lib/mi-support.exp (default_mi_gdb_start): Declare global FORCE_SEPARATE_MI_TTY, not SEPARATE_MI_TTY.
2016-06-29Add copyright header in gdb.base/return.cYao Qi2-0/+21
gdb/testsuite: 2016-06-29 Yao Qi <yao.qi@linaro.org> * gdb.base/return.c: Add copyright header.
2016-06-29Fix PR python/20129 - use of non-existing variableTom Tromey2-0/+12
PR python/20129 concerns the error message one gets from a command like "disable frame-filter global NoSuchFilter". Currently this throws a second, unexpected, exception due to the use of a non-existing variable named "name". This patch adds regression tests and fixes a couple of spots to use the correct variable name. Built and regtested on x86-64 Fedora 23. 2016-06-29 Tom Tromey <tom@tromey.com> PR python/20129: * python/lib/gdb/command/frame_filters.py (_do_enable_frame_filter) (SetFrameFilterPriority._set_filter_priority): Use "frame_filter", not "name". 2016-06-29 Tom Tromey <tom@tromey.com> PR python/20129: * gdb.python/py-framefilter.exp: Add tests for setting priority and disabling of non-existent frame filter.
2016-06-29Set unknown_syscall differently on arm linuxYao Qi2-0/+13
Currently, we use 123456789 as unknown or illegal syscall number, and expect program return ENOSYS. Although 123456789 is an illegal syscall number on arm linux, kernel sends SIGILL rather than returns -ENOSYS. However, arm linux kernel returns -ENOSYS if syscall number is within 0xf0001..0xf07ff, so we can use 0xf07ff for unknown_syscall in test. gdb/testsuite: 2016-06-29 Yao Qi <yao.qi@linaro.org> * gdb.base/catch-syscall.c [__arm__]: Set unknown_syscall to 0x0f07ff.
2016-06-28Probe catch syscall supportYao Qi2-14/+35
In 82075af2c14b1f8a54fa5796fb63f7ef23f98d9d (Implement 'catch syscall' for gdbserver), only x86 is supported, but the test can still be run on other linux targets, like aarch64 and ppc, with native-gdbserver. This causes many new fails. This patch removes the check on isnative and on target triplets. Instead, we can insert catch point, and resume the program to see whether catch syscall is supported or not. gdb/testsuite: 2016-06-28 Yao Qi <yao.qi@linaro.org> * gdb.base/catch-syscall.exp: Remove check on isnative and target triplets. Start gdb, execute catch syscall, and continue. Check gdb's output to determine catch syscall is supported.
2016-06-27Print void types correctly in RustManish Goregaokar3-0/+13
Rust prefers to not specify the return type of a function when it is unit (`()`). The type is also referred to as "void" in debuginfo but not in actual usage, so we should never be printing "void" when the language is Rust. 2016-06-27 Manish Goregaokar <manish@mozilla.com> gdb/ChangeLog: * rust-lang.c (rust_print_type): Print unit types as "()" * rust-lang.c (rust_print_type): Omit return type for functions returning unit gdb/testsuite/ChangeLog: * gdb.rust/simple.rs: Add test for returning unit in a function * gdb.rust/simple.exp: Add expectation for functions returning unit
2016-06-27Fix use of a dangling pointer for Python breakpoint objectsPierre-Marie de Rodat4-0/+121
When a Python script tries to create a breakpoint but fails to do so, gdb.Breakpoint.__init__ raises an exception and the breakpoint does not exist anymore in the Python interpreter. However, GDB still keeps a reference to the Python object to be used for a later hook, which is wrong. This commit adds the necessary cleanup code so that there is no stale reference to this Python object. It also adds a new testcase to reproduce the bug and check the fix. 2016-06-25 Pierre-Marie de Rodat <derodat@adacore.com> gdb/ * python/py-breakpoint.c (bppy_init): Clear bppy_pending_object when there is an error during the breakpoint creation. gdb/testsuite * gdb.python/py-breakpoint-create-fail.c, gdb.python/py-breakpoint-create-fail.exp, gdb.python/py-breakpoint-create-fail.py: New testcase.
2016-06-25Add tests for printing of NonZero-optimized enums in RustManish Goregaokar3-0/+34
gdb/testsuite/ChangeLog: 2016-06-25 Manish Goregaokar <manish@mozilla.com> PR gdb/20239 * gdb.rust/simple.rs: Add more tests for printing NonZero enums. * gdb.rust/simple.exp: Add test expectations for new NonZero tests.
2016-06-24Support structure offsets that are 512K or larger.David Taylor3-0/+78
GDB computes structure byte offsets using a 32 bit integer. And, first it computes the offset in bits and then converts to bytes. The result is that any offset that if 512K bytes or larger overflows. This patch changes GDB to use LONGEST for such calculations. PR gdb/17520 Structure offset wrong when 1/4 GB or greater. * c-lang.h: Change all parameters, variables, and struct or union members used as struct or union fie3ld offsets from int to LONGEST. * c-valprint.c: Likewise. * cp-abi.c: Likewise. * cp-abi.h: Likewise. * cp-valprint.c: Likewise. * d-valprint.c: Likewise. * dwarf2loc.c: Likewise. * eval.c: Likewise. * extension-priv.h: Likewise. * extension.c: Likewise. * extension.h: Likewise. * findvar.c: Likewise. * gdbtypes.h: Likewise. * gnu-v2-abi.c: Likewise. * gnu-v3-abi.c: Likewise. * go-valprint.c: Likewise. * guile/guile-internal.h: Likewise. * guile/scm-pretty-print.c: Likewise. * jv-valprint.c Likewise. * opencl-lang.c: Likewise. * p-lang.h: Likewise. * python/py-prettyprint.c: Likewise. * python/python-internal.h: Likewise. * spu-tdep.c: Likewise. * typeprint.c: Likewise. * valarith.c: Likewise. * valops.c: Likewise. * valprint.c: Likewise. * valprint.h: Likewise. * value.c: Likewise. * value.h: Likewise. * p-valprint.c: Likewise. * c-typeprint.c (c_type_print_base): When printing offset, use plongest, not %d. * gdbtypes.c (recursive_dump_type): Ditto.
2016-06-23PR gdb/16483 - simplify "info frame-filters" outputTom Tromey2-0/+10
PR gdb/16483 notes that the output of "info frame-filters" is quite voluminous. In particular it prints an entry for each objfile, even if only to say that the objfile does not have any associated frame filters. I think it's better to only print output when there is a frame filter. There's nothing worth doing with the no-frame-filter information, and limiting the output makes it much more readable. Built and regtested on x86-64 Fedora 23. 2016-06-23 Tom Tromey <tom@tromey.com> PR gdb/16483: * python/lib/gdb/command/frame_filters.py (InfoFrameFilter.list_frame_filters): Rename to print_list. Print nothing if no filters found. Return value indicating whether filters were printed. (InfoFrameFilter.print_list): Remove. (InfoFrameFilter.invoke): Print message if no frame filters found. 2016-06-23 Tom Tromey <tom@tromey.com> PR gdb/16483: * gdb.python/py-framefilter.exp: Add "info frame-filter" test before any filters are loaded.
2016-06-21Improve user experience in printing Fortran derived types.Walfred Tedeschi5-5/+114
Output for Fortran derived classes is like: "( 9, 'abc')" with this changes the output is changed to: "( lucky_number = 9, letters = 'abc')" 2016-06-21 Walfred Tedeschi <walfred.tedeschi@intel.com> * f-valprint.c (f_val_print): Add field names for printing derived types fields. gdb/testsuite: * gdb.fortran/derived-type.exp (print q): Add fields to the output. * gdb.fortran/vla-type.exp (print twov): Fix vla tests with structs. * gdb.fortran/derived-type-function.exp: New file. * gdb.fortran/derived-type-function.f90: New file.
2016-06-21Add "new-ui console" testsPedro Alves5-12/+227
This adds a test that uses new-ui to create a secondary console, and then runs some basic smoke tests. It ensures that: - synchronous commands send output to the UI that initiated it - asynchronous events like breakpoint hits are reported on all consoles. - "new-ui" without arguments doesn't crash. - The "new-ui" command doesn't repeat. gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * gdb.base/new-ui.exp: New file. * lib/mi-support.exp (switch_gdb_spawn_id): Move to ... * lib/gdb.exp (switch_gdb_spawn_id): ... here. (with_spawn_id): New procedure.
2016-06-21Always switch fork child to the main UIPedro Alves2-0/+162
The following scenario: - gdb started in normal CLI mode. - separate MI channel created with new-ui - inferior output redirected with the "set inferior-tty" command. - use -exec-run in the MI channel to run the inferior is presently mishandled. When we create the inferior, in fork-child.c, right after vfork, we'll close all the file descriptors in the vfork child, and then dup the tty to file descriptors 0/1/2, create a session, etc. Note that when we close all descriptors, we close the file descriptors behind gdb_stdin/gdb_stdout/gdb_stderr of all secondary UIs... So if anything goes wrong in the child and it calls warning/error, it'll end up writting to the current UI's stdout/stderr streams, which are backed by file descriptors that have since been closed. Because this happens in a vfork region, the corresponding stdin/stdout/stderr in the parent/gdb end up corrupted. The fix is to switch to the main UI right after the vfork, so that gdb_stdin/gdb_stdout/gdb_stderr are correctly mapped to stdin/stdout/stderr (and thus to file descriptors 0/1/2), so this code works as it has always worked. (Technically, we're doing a lot of stuff we shouldn't be doing after a vfork, while we should only be calling async-signal-safe functions.) gdb/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * fork-child.c (fork_inferior): Switch the child to the main UI right after vfork. Save/restore the current UI in the parent. Flush outputs of the main UI instead of the current UI. gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * gdb.mi/mi-exec-run.exp: New file.
2016-06-21Make mi-break.exp always expect breakpoint commands output on the main UIPedro Alves2-21/+57
mi-break.exp regresses when tested with MI running on a secondary UI, with RUNTESTFLAGS="FORCE_SEPARATE_MI_TTY=1". The problem is simply that the test sets a breakpoint, and attaches "print" commands to the breakpoint. Since breakpoint commands always run with the main UI as current UI, the breakpoint command's output goes to the main UI. So we need to tweak the test to expect it there. gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * gdb.mi/mi-break.exp (test_breakpoint_commands): Always expect breakpoint command's output on the main UI. (test_break): New procedure, factored out from calls in the top level. (top level): Use foreach_with_prefix to test MI as main UI and as separate UI.
2016-06-21Send deleted watchpoint-scope output to all UIsPedro Alves2-41/+55
Testing with: make check RUNTESTFLAGS="SEPARATE_MI_TTY=1" shows this, in gdb.mi/mi-watch.exp: -*stopped,reason="watchpoint-scope",wpnum="2",frame={addr="0x00000000004005cb", +*stopped,frame={addr="0x00000000004005cb", (...) -PASS: gdb.mi/mi-watch.exp: hw: watchpoint trigger +FAIL: gdb.mi/mi-watch.exp: hw: watchpoint trigger (unknown output after running) That is, we lose the "watchpoint-scope" output on the MI UI. This commit fixes it, and makes the test run with MI running as both main UI and separate UI. gdb/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * breakpoint.c (watchpoint_check): Send watchpoint-deleted output to all UIs. gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * gdb.mi/mi-watch.exp (test_watchpoint_creation_and_listing) (test_awatch_creation_and_listing) (test_rwatch_creation_and_listing, test_watchpoint_triggering): Remove 'type' parameter. (test_watchpoint_all): New parameter mi_mode. Remove with_test_prefix. (top level): Use foreach_with_prefix, and add main/separate UI MI testing axis.
2016-06-21Add testing infrastruture bits for running with MI on a separate UIPedro Alves4-29/+156
With this, a specific test may can start GDB with MI on a separate UI by using: mi_gdb_start separate-mi-tty In addition, it's also possible to run the whole testsuite with MI on a separate tty, with: make check RUNTESTFLAGS="FORCE_SEPARATE_MI_TTY=1" gdb_main_spawn_id and mi_spawn_id are added so that tests may expect output from either channel. While at it, inferior_spawn_id was not being cleared when gdb exits, unlike the other spawn ids, thus a test that starts gdb more than once would end up using a stale spawn id. gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * README (Testsuite Parameters): Document FORCE_SEPARATE_MI_TTY. * lib/gdb.exp (default_gdb_exit): Clear inferior_spawn_id. * lib/mi-support.exp (mi_uncatched_gdb_exit): Unset gdb_main_spawn_id, mi_spawn_id, unset inferior_spawn_id. (gdb_main_spawn_id, mi_spawn_id): Declare and comment. (mi_create_inferior_pty): New procedure, factored out from default_mi_gdb_start. (switch_gdb_spawn_id, mi_gdb_start_separate_mi_tty): New procedures. (default_mi_gdb_start): Call mi_gdb_start_separate_mi_tty if the separate-mi-tty option is specified, or SEPARATE_MI_TTY is set. Use mi_create_inferior_pty. (mi_gdb_start): Use eval to pass down args list.
2016-06-21Push thread->control.command_interp to the struct thread_fsmPedro Alves3-1/+68
I noticed that if we step into an inline function, step_1 never reaches proceed, and thus nevers sets the thread's tp->control.command_interp. Because of that, should_print_stop_to_console fails to determine that is should print stop output to the console. The fix is to set the thread's command_interp earlier. However, I realized that we can move that field to the thread_fsm, given that its lifetime is exactly the same as thread_fsm. So the patch plumbs all fsms constructors to take the command interp and store it in the thread_fsm. We can see the fix in action, with e.g., the gdb.opt/inline-cmds.exp test, and issuing a step when stopped at line 67: &"s\n" ^running *running,thread-id="all" (gdb) ~"67\t result = func2 ();\n" *stopped,reason="end-stepping-range",frame={addr="0x00000000004004d0",func="main",args=[],file="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c",fullname="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c",line="67"},thread-id="1",stopped-threads="all",core="0" (gdb) s &"s\n" ^running *running,thread-id="all" (gdb) + ~"func2 () at /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c:67\n" + ~"67\t result = func2 ();\n" *stopped,reason="end-stepping-range",frame={addr="0x00000000004004d0",func="func2",args=[],file="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c",fullname="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.opt/inline-cmds.c",line="67"},thread-id="1",stopped-threads="all",core="0" (gdb) (The inline-cmds.exp command is adjusted to exercise this.) (Due to the follow_fork change, this also fixes "next N" across a fork with "set follow-fork child" with "set detach-on-fork on". Commands that rely on internal breakpoints, like "finish" will still require more work to migrate breakpoints etc. to the child thread.) gdb/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * breakpoint.c (new_until_break_fsm): Add 'cmd_interp' parameter. (until_break_fsm_should_stop, until_break_fsm_clean_up): Add thread parameter. (until_break_command): Pass command interpreter to thread fsm ctor. * cli/cli-interp.c (should_print_stop_to_console): Adjust. * gdbthread.h (struct thread_control_state) <command_interp>: Delete field. * infcall.c (new_call_thread_fsm): Add 'cmd_interp' parameter. Pass it down. (call_thread_fsm_should_stop): Add thread parameter. (call_function_by_hand_dummy): Pass command interpreter to thread fsm ctor. Pass thread pointer to fsm clean up method. * infcmd.c: Include interps.h. (struct step_command_fsm) <thread>: Delete field. (new_step_command_fsm): Add 'cmd_interp' parameter. Pass it down. (step_command_fsm_prepare): Remove references to fsm's thread field. (step_1): Pass command interpreter to thread fsm ctor. Pass thread pointer to fsm clean up method. (step_command_fsm_should_stop, step_command_fsm_clean_up): Add thread parameter and use it. (new_until_next_fsm): Add 'cmd_interp' parameter. Pass it down. (until_next_fsm_should_stop, until_next_fsm_clean_up): Add thread parameter and use it. (until_next_command): Pass command interpreter to thread fsm ctor. (struct finish_command_fsm) <thread>: Delete field. (finish_command_fsm_ops): Add NULL slot for should_notify_stop. (new_finish_command_fsm): Add 'cmd_interp' parameter and pass it down. Remove thread parameter and adjust. (finish_command_fsm_should_stop, finish_command_fsm_clean_up): Add thread parameter and use it. (finish_command): Pass command interpreter to thread fsm ctor. Don't pass thread. * infrun.c (follow_fork): Move thread fsm to child fork instead of command interpreter, only. (clear_proceed_status_thread): Remove reference to command_interp. (proceed): Don't record the thread's command interpreter. (clean_up_just_stopped_threads_fsms): Pass thread to fsm clean_up method. (fetch_inferior_event): Pass thread to fsm should_stop method. * thread-fsm.c (thread_fsm_ctor): Add 'cmd_interp' parameter. Store it. (thread_fsm_clean_up, thread_fsm_should_stop): Add thread parameter and pass it down. * thread-fsm.h (struct thread_fsm) <command_interp>: New field. (struct thread_fsm_ops) <clean_up, should_stop>: Add thread parameter. (thread_fsm_ctor): Add 'cmd_interp' parameter. (thread_fsm_clean_up, thread_fsm_should_stop): Add thread parameter. * thread.c (thread_cancel_execution_command): Pass thread to thread fsm clean_up method. gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * gdb.opt/inline-cmds.c: Add "set mi break here" marker. * gdb.opt/inline-cmds.exp: Add MI tests.
2016-06-21Make command line editing (use of readline) be per UIPedro Alves1-0/+37
Due to the way that readline's API works (based on globals), we can only have one instance of readline in a process. So the goal of this patch is to only allow editing in the main UI, and make sure that only one UI calls into readline. Some MI paths touch readline variables currently, which is bad as that is changing variables that matter for the main console UI. This patch fixes those. This actually fixes a nasty bug -- starting gdb in MI mode ("gdb -i=mi"), and then doing "set editing on" crashes GDB, because MI is not prepared to use readline: set editing on &"set editing on\n" =cmd-param-changed,param="editing",value="on" ^done (gdb) p 1 readline: readline_callback_read_char() called with no handler! Aborted (core dumped) The fix for that was to add an interp_proc method to query the interpreter whether it actually supports editing. New test included. gdb/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> PR mi/20034 * cli/cli-interp.c: Include cli-interp.h and event-top.h. (cli_interpreter_resume): Pass 1 to gdb_setup_readline. Set the UI's input_handler here. (cli_interpreter_supports_command_editing): New function. (cli_interp_procs): Install it. * cli/cli-interp.h: New file. * event-top.c (async_command_editing_p): Rename to ... (set_editing_cmd_var): ... this. (change_line_handler): Add parameter 'editing', and use it. Bail early if the interpreter doesn't support editing. Don't touch readline state if editing is off. (gdb_rl_callback_handler_remove, gdb_rl_callback_handler_install) (gdb_rl_callback_handler_reinstall): Assert the current UI is the main UI. (display_gdb_prompt): Don't call gdb_rl_callback_handler_remove if not using readline. Check whether the current UI is using command editing instead of checking the async_command_editing_p global. (set_async_editing_command): Delete. (gdb_setup_readline): Add 'editing' parameter. Only allow editing on the main UI. Don't touch readline state if editing is off. (gdb_disable_readline): Don't touch readline state if editing is off. * event-top.h (gdb_setup_readline): Add 'int' parameter. (set_async_editing_command): Delete declaration. (change_line_handler, command_line_handler): Declare. (async_command_editing_p): Rename to ... (set_editing_cmd_var): ... this. * infrun.c (reinstall_readline_callback_handler_cleanup): Check whether the current UI has editing enabled rather than checking the async_command_editing_p global. * interps.c (interp_supports_command_editing): New function. * interps.h (interp_supports_command_editing_ftype): New typedef. (struct interp_procs) <supports_command_editing_proc>: New field. (interp_supports_command_editing): Declare. * mi/mi-interp.c (mi_interpreter_resume): Pass 0 to gdb_setup_readline. Don't clear the async_command_editing_p global. Update comments. * top.c (gdb_readline_wrapper_line, gdb_readline_wrapper): Check whether the current UI has editing enabled rather than checking the async_command_editing_p global. Don't touch readline state if editing is off. (undo_terminal_modifications_before_exit): Switch to the main UI. Unconditionally call gdb_disable_readline. (set_editing): New function. (show_async_command_editing_p): Rename to ... (show_editing): ... this. Show the state of the current UI. (_initialize_top): Adjust. * top.h (struct ui) <command_editing>: New field. * tui/tui-interp.c: Include cli/cli-interp.h. (tui_resume): Pass 1 to gdb_setup_readline. Set the UI's input_handler. (tui_interp_procs): Install cli_interpreter_supports_command_editing. * tui/tui-io.c (tui_getc): Check whether the current UI has editing enabled rather than checking the async_command_editing_p global. gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> PR mi/20034 * gdb.mi/mi-editing.exp: New file.
2016-06-21Make instream be per UIPedro Alves2-0/+8
gdb/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * cli/cli-script.c (execute_user_command, read_next_line) (read_next_line): Adjust to per-UI instream. * event-top.c (stdin_event_handler, command_handler) (handle_line_of_input, command_line_handler) (gdb_readline_no_editing_callback, async_sigterm_handler) (gdb_setup_readline): Likewise. * inflow.c: Include top.h. (gdb_has_a_terminal, child_terminal_init_with_pgrp) (gdb_save_tty_state, child_terminal_inferior) (child_terminal_ours_1, copy_terminal_info): Use the main UI. (initialize_stdin_serial): Adjust to per-UI instream. * main.c (captured_command_loop, captured_main): Adjust to per-UI instream. * mi/mi-interp.c (mi_execute_command_wrapper): Likewise. * python/python.c (python_interactive_command): Likewise. * terminal.h (struct ui): Forward declare. (initialize_stdin_serial): Add struct ui parameter. * top.c (instream): Delete. (do_restore_instream_cleanup, read_command_file, dont_repeat) (gdb_readline_no_editing, command_line_input) (input_from_terminal_p, gdb_init): Adjust to per-UI instream. * top.h (struct ui) <instream>: New field. (instream): Delete declaration. (quit): Adjust to per-UI instream. gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * gdb.gdb/selftest.exp (do_steps_and_nexts): Add new regexp.
2016-06-21[Ada catchpoints] Fix "warning: failed to get exception name: No definition ↵Pedro Alves2-10/+36
of \"e.full_name\" in current context" Looking at testsuite results, I noticed this warning in an MI test: ~"\nCatchpoint " ~"2, " &"warning: failed to get exception name: No definition of \"e.full_name\" in current context.\n" ~"exception at 0x000000000040192d in foo () at /home/pedro/brno/pedro/gdb/mygit/src/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb:20\n" ~"20\t raise Constraint_Error; -- SPOT1\n" *stopped,reason="breakpoint-hit",disp="keep",bkptno="2",exception-name="CONSTRAINT_ERROR",frame={addr="0x000000000040192d",func="foo",args=[],file="/home/pedro/brno/pedro/gdb/mygit/src/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb",fullname="/home/pedro/brno/pedro/gdb/mygit/src/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb",line="20"},thread-id="1",stopped-threads="all",core="5" (gdb) PASS: gdb.ada/mi_catch_ex.exp: continue until CE caught by all-exceptions catchpoint The problem is that: - MI prints the breakpoint hit twice: once on the MI stream; another time on the console stream. - After printing the Ada catchpoint hit, gdb selects a non-current frame, from within the catchpoint's print_it routine. So the second time the breakpoint is printed, the selected frame is no longer the current frame, and then evaluating e.full_name in ada_exception_name_addr fails. This commit fixes the problem and enhances the gdb.ada/mi_catch_ex.exp test to make sure the catchpoint hit is printed correctly on the console stream too. gdb/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * ada-lang.c (ada_exception_name_addr_1): Add comment. (print_it_exception): Select the current frame. gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * gdb.ada/mi_catch_ex.exp (continue_to_exception): New procedure. (top level): Use it instead of mi_execute_to.
2016-06-21Prepare gdb.python/mi-py-events.exp for Python/MI in separate channelsPedro Alves3-13/+33
Similarly to 5068630ad34dce5fefbe68d70d3a50cd8b92f71e (gdb.python/py-events.exp and normal_stop observers ordering) [1], this commit makes the gdb.python/py-mi-events.exp test not rely on order in which MI and Python observers run, or even on where each observer sends its output to. This shows up as a problem when testing with MI running as a separate terminal, for example, where Python event output and MI output go to different channels, even. But in any case, relying on the order in which observers run is always going to be fragile. The fix is to save the string output in the handlers in some variables and then having MI print them explicitly, instead of printing them directly from the Python events. Tested on x86_64 Fedora 23. https://sourceware.org/ml/gdb-patches/2015-07/msg00290.html gdb/testsuite/ChangeLog: 2016-06-21 Pedro Alves <palves@redhat.com> * gdb.python/py-mi-events-gdb.py (stop_handler_str) (cont_handler_str): New. (signal_stop_handler): Set stop_handler_str instead of printing to stdout. (continue_handler): Set cont_handler_str instead of printing to stdout. * gdb.python/py-mi-events.exp: Ues mi_execute_to instead of mi_send_resuming_command. Print stop_handler_str and cont_handler_str instead of expecting the python events print directly.
2016-06-17Add a test case for the jit-reader interfaceSanjoy Das7-9/+385
Originally intended to be committed on 2013-01-17 in 675921c059dbaddd02ab2eb8a1eaf77b3ac727dd (Test case for the jit-reader), but by mistake the files were not added. Fortunately they still work. gdb/testsuite/ChangeLog: 2016-06-17 Sanjoy Das <sanjoy@playingwithpointers.com> * gdb.base/jit-reader.exp: New file. * gdb.base/jithost.c: New file. * gdb.base/jithost.h: New file. * gdb.base/jitreader.c : New file. * gdb.base/jit-protocol.h: New file.
2016-06-17Extend step-over-syscall.exp with different detach-on-fork and follow-fork modesYao Qi2-8/+53
This patch extends step-over-syscall.exp by setting different values to detach-on-fork and follow-fork. gdb/testsuite: 2016-06-17 Yao Qi <yao.qi@linaro.org> * gdb.base/step-over-syscall.exp (break_cond_on_syscall): New parameters follow_fork and detach_on_fork. Set follow-fork-mode and detach-on-fork. Adjust tests. (top level): Invoke break_cond_on_syscall with combinations of syscall, follow-fork-mode and detach-on-fork.
2016-06-17Step over exit with reinsert breakpointsYao Qi3-0/+182
This patch fixes a GDBserver crash when one thread is stepping over a syscall instruction which is exit. Step-over isn't finished due to the exit, but GDBserver doesn't clean up the state of step-over, so in the wait next time, GDBserver will wait on step_over_bkpt, which is already exited, and GDBserver crashes because 'requested_child' is NULL. See gdbserver logs below, Need step over [LWP 14858]? yes, found breakpoint at 0x2aaaaad91307^M proceed_all_lwps: found thread 14858 needing a step-over^M Starting step-over on LWP 14858. Stopping all threads^M >>>> entering void stop_all_lwps(int, lwp_info*) .... <<<< exiting void stop_all_lwps(int, lwp_info*)^M Done stopping all threads for step-over.^M pc is 0x2aaaaad91307^M Writing 0f to 0x2aaaaad91307 in process 14858^M Could not find fast tracepoint jump at 0x2aaaaad91307 in list (uninserting).^M pending reinsert at 0x2aaaaad91307^M step from pc 0x2aaaaad91307^M Resuming lwp 14858 (step, signal 0, stop not expected)^M # Start step-over for LWP 14858 >>>> entering ptid_t linux_wait_1(ptid_t, target_waitstatus*, int) .... LLFE: 14858 exited. ... <<<< exiting ptid_t linux_wait_1(ptid_t, target_waitstatus*, int) # LWP 14858 exited ..... >>>> entering ptid_t linux_wait_1(ptid_t, target_waitstatus*, int)^M linux_wait_1: [<all threads>]^M step_over_bkpt set [LWP 14858.14858], doing a blocking wait # but step_over_bkpt is still LWP 14858, which is wrong The fix is to finish step-over if it is ongoing, and unsuspend other threads. Without the fix in linux-low.c, GDBserver will crash in with running gdb.base/step-over-exit.exp. gdb/gdbserver: 2016-06-17 Yao Qi <yao.qi@linaro.org> * linux-low.c (unsuspend_all_lwps): Declare. (linux_low_filter_event): If thread exited, call finish_step_over. If step-over is finished, unsuspend other threads. gdb/testsuite: 2016-06-17 Yao Qi <yao.qi@linaro.org> * gdb.base/step-over-exit.c: New. * gdb.base/step-over-exit.exp: New.
2016-06-17gdb: new AndesTech NDS32 portYan-Ting Lin3-0/+17
gdb/ChangeLog: * Makefile.in (ALL_TARGET_OBS): Add nds32-tdep.o. (HFILES_NO_SRCDIR): Add nds32-tdep.h. (ALLDEPFILES): Add nds32-tdep.c. * NEWS: Mention new NDS32 port. * configure.tgt: Add NDS32. * nds32-tdep.c: New file. * nds32-tdep.h: New file. * features/Makefile (XMLTOC): Add nds32.xml. * features/nds32-core.xml: New file. * features/nds32-fpu.xml: New file. * features/nds32-system.xml: New file. * features/nds32.c: New file (generated). * features/nds32.xml: New file. gdb/doc/ChangeLog: * gdb.texinfo (Standard Target Features): Document NDS32 features. (NDS32 Features): New Section. gdb/testsuite/ChangeLog: * gdb.base/float.exp: Add target check for nds32*-*-*. * gdb.xml/tdesc-regs.exp: Set core-regs for nds32*-*-*.
2016-06-13gdb: Use UNSUPPORTED not XFAIL for unsupported target featuresAndrew Burgess19-41/+41
If a target does not support making function calls from GDB then in a number of test files, we currently report an XFAIL and skip some, or all of the tests. This commit changes the XFAIL to an UNSUPPORTED as this seems more appropriate in these cases. Some of the tests used bug ID 2416 to be reported in the XFAIL. In the current GDB bugzilla bug 2416 has nothing to do with calling target functions from GDB. gdb/testsuite/ChangeLog: * gdb.base/call-ar-st.exp: Report unsupported rather than xfail for unsupported target features. * gdb.base/call-rt-st.exp: Likewise. * gdb.base/call-sc.exp: Likewise. * gdb.base/call-signal-resume.exp: Likewise. * gdb.base/call-strs.exp: Likewise. * gdb.base/callexit.exp: Likewise. * gdb.base/callfuncs.exp: Likewise. * gdb.base/nodebug.exp: Likewise. * gdb.base/printcmds.exp: Likewise. * gdb.base/ptype.exp: Likewise. * gdb.base/structs.exp: Likewise. * gdb.base/unwindonsignal.exp: Likewise. * gdb.cp/gdb2495.exp: Likewise. * gdb.cp/templates.exp: Likewise. * gdb.cp/virtfunc.exp: Likewise. * gdb.threads/hand-call-in-threads.exp: Likewise. * gdb.threads/interrupted-hand-call.exp: Likewise. * gdb.threads/thread-unwindonsignal.exp: Likewise.
2016-06-10Fix PR rust/20110Tom Tromey2-0/+8
PR rust/20110 concerns the type of an integer constant that is too large for "i32", the default integer type. This patch changes the type of such a constant to i64. This is important because such values are often addresses, so truncating them by default is unfriendly. Built and regtested on x86-64 Fedora 23. 2016-06-10 Tom Tromey <tom@tromey.com> PR rust/20110: * rust-exp.y (lex_number): Don't truncate large numbers to i32. 2016-06-10 Tom Tromey <tom@tromey.com> PR rust/20110: * gdb.rust/expr.exp: Add test for integer constant larger than i32.
2016-06-10Fortran: Testsuite, non-local references in nested functions.Bernhard Heckel3-0/+119
Non-local references in nested functions are usually implemented by using DWARF static link. This feature was added with commit 63e43d3aedb8b1112899c2d0ad74cbbee687e5d6 (DWARF: handle non-local references in nested functions) but a testcase was missing in Fortran. 2016-06-10 Bernhard Heckel <bernhard.heckel@intel.com> gdb/Testsuite/Changelog: * gdb.fortran/nested-funcs.exp: New. * gdb.fortran/nested-funcs.f90: New.
2016-06-09Add negative repeat count to 'x' commandToshihito Kikuchi3-0/+435
This change adds support for specifying a negative repeat count to all the formats of the 'x' command to examine memory backward. A new testcase 'examine-backward' is added to cover this new feature. Here's the example output from the new feature: <format 'i'> (gdb) bt #0 Func1 (n=42, p=0x40432e "hogehoge") at main.cpp:5 #1 0x00000000004041fa in main (argc=1, argv=0x7fffffffdff8) at main.cpp:19 (gdb) x/-4i 0x4041fa 0x4041e5 <main(int, char**)+11>: mov %rsi,-0x10(%rbp) 0x4041e9 <main(int, char**)+15>: lea 0x13e(%rip),%rsi 0x4041f0 <main(int, char**)+22>: mov $0x2a,%edi 0x4041f5 <main(int, char**)+27>: callq 0x404147 <format 'x'> (gdb) x/-4xw 0x404200 0x4041f0 <main(int, char**)+22>: 0x00002abf 0xff4de800 0x76e8ffff 0xb8ffffff (gdb) x/-4 0x4041e0 <main(int, char**)+6>: 0x7d8910ec 0x758948fc 0x358d48f0 0x0000013e gdb/ChangeLog: * NEWS: Mention that GDB now supports a negative repeat count in the 'x' command. * printcmd.c (decode_format): Allow '-' in the parameter "string_ptr" to accept a negative repeat count. (find_instruction_backward): New function. (read_memory_backward): New function. (integer_is_zero): New function. (find_string_backward): New function. (do_examine): Use new functions to examine memory backward. (_initialize_printcmd): Mention that 'x' command supports a negative repeat count. gdb/doc/ChangeLog: * gdb.texinfo (Examining Memory): Document negative repeat count in the 'x' command. gdb/testsuite/ChangeLog: * gdb.base/examine-backward.c: New file. * gdb.base/examine-backward.exp: New file.
2016-06-06Add method/format information to =record-startedSimon Marchi2-2/+7
Eclipse CDT now supports enabling execution recording using two methods (full and btrace) and both formats for btrace (bts and pt). In the event that recording is enabled behind the back of the GUI (by the user on the command line, or a script), we need to know which method/format are being used, so it can be correctly reflected in the interface. This patch adds this information to the =record-started async record. Before: =record-started,thread-group="i1" After: =record-started,thread-group="i1",method="btrace",format="bts" =record-started,thread-group="i1",method="btrace",format="pt" =record-started,thread-group="i1",method="full" The "format" field is only present when the current method supports multiple formats (only the btrace method as of now). gdb/ChangeLog: * NEWS: Mention the new fields in =record-started. * common/btrace-common.h (btrace_format_short_string): New function declaration. * common/btrace-common.c (btrace_format_short_string): New function. * mi/mi-interp.c (mi_record_changed): Output method and format fields in the =record-started record. * record-btrace.c (record_btrace_open): Adapt record_changed notification. * record-full.c (record_full_open): Likewise. * record.c (cmd_record_stop): Likewise. gdb/doc/ChangeLog: * gdb.texinfo (GDB/MI Async Records): Document method and format fields in =record-started. * observer.texi (record_changed): Add method and format parameters. gdb/testsuite/ChangeLog: * gdb.mi/mi-record-changed.exp: Adjust =record-started output matching.
2016-06-02Fix PR python/18984Tom Tromey2-0/+9
This fixes PR python/18984. The bug is that gdbpy_solib_name uses GDB_PY_LL_ARG, whereas it should use GDB_PY_LLU_ARG to avoid overflow. Built and tested on x86-64 Fedora 23. 2016-06-02 Tom Tromey <tom@tromey.com> PR python/18984: * python/python.c (gdbpy_solib_name): Use GDB_PY_LLU_ARG. 2016-06-02 Tom Tromey <tom@tromey.com> PR python/18984: * gdb.python/py-shared.exp: Add solib_name test.
2016-06-02mi-memory-changed.exp: Fix filename passed to untestedSimon Marchi2-1/+5
gdb/testsuite/ChangeLog: * gdb.mi/mi-memory-changed.exp: Fix filename passed to untested.
2016-05-31[PR gdb/19893] Fix handling of synthetic C++ referencesMartin Galvan8-16/+628
https://sourceware.org/bugzilla/show_bug.cgi?id=19893 I've traced the main source of the problem to pieced_value_funcs.coerce_ref not being implemented. Since gdb always assumes references are implemented as pointers, this causes it to think that it's dealing with a NULL pointer, thus breaking any operations involving synthetic references. What I did here was implementing pieced_value_funcs.coerce_ref using some of the synthetic pointer handling code from indirect_pieced_value, as Pedro suggested. I also made a few adjustments to the reference printing code so that it correctly shows either the address of the referenced value or (if it's non-addressable) the "<synthetic pointer>" string. I also wrote some unit tests based on Dwarf::assemble; these took a while to make because in most cases I needed a synthetic reference to a physical variable. Additionally, I started working on a unit test for classes that have a vtable, but ran into a few issues so that'll probably go in a future patch. One thing that should definitely be fixed is that proc function_range (called for MACRO_AT_func) will always try to compile/link using gcc with the default options instead of g++, thus breaking C++ compilations that require e.g. libstdc++. gdb/ChangeLog: * dwarf2loc.c (coerce_pieced_ref, indirect_synthetic_pointer, fetch_const_value_from_synthetic_pointer): New functions. (indirect_pieced_value): Move lower half to indirect_synthetic_pointer. (pieced_value_funcs): Implement coerce_ref. * valops.c (value_addr): Call coerce_ref for synthetic references. * valprint.c (valprint_check_validity): Return true for synthetic references. Also, don't show "<synthetic pointer>" if they reference addressable values. (generic_val_print_ref): Handle synthetic references. Also move some code to print_ref_address. (print_ref_address, get_value_addr_contents): New functions. gdb/testsuite/ChangeLog: * gdb.dwarf2/implref.exp: Rename to... * gdb.dwarf2/implref-const.exp: ...this. Also add more test statements. * gdb.dwarf2/implref-array.c: New file. * gdb.dwarf2/implref-array.exp: Likewise. * gdb.dwarf2/implref-global.c: Likewise. * gdb.dwarf2/implref-global.exp: Likewise. * gdb.dwarf2/implref-struct.c: Likewise. * gdb.dwarf2/implref-struct.exp: Likewise.