aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/lib
AgeCommit message (Collapse)AuthorFilesLines
2020-03-16[gdb/testsuite] Add cache_verify option for gdb_caching_procsTom de Vries1-5/+32
Test-case gdb.base/gdb-caching-proc.exp tests whether procs declared using gdb_caching_proc give the same results when called more than once. While this tests consistency of the procs in the context of that test-case, it doesn't test consistency across the call sites. Add a local variable cache_verify to proc gdb_do_cache, that can be set to 1 to verify gdb_caching_proc consistency across the call sites. Likewise, add a local variable cache_verify_proc to set to the name of the gdb_caching_proc to verify. This can f.i. be used when changing an existing proc into a gdb_caching_proc. Tested on x86_64-linux, with cache_verify set to both 0 and 1. gdb/testsuite/ChangeLog: 2020-03-16 Tom de Vries <tdevries@suse.de> * lib/cache.exp (gdb_do_cache): Add and handle local variables cache_verify and cache_verify_proc.
2020-03-14[gdb/testsuite] Fix unrecognized debug output level 'statement-frontiers' ↵Tom de Vries1-0/+11
message When running testcase gdb.cp/step-and-next-inline.exp, I get: ... Running src/gdb/testsuite/gdb.cp/step-and-next-inline.exp ... gdb compile failed, g++: error: unrecognized debug output level \ 'statement-frontiers' gdb compile failed, g++: error: unrecognized debug output level \ 'statement-frontiers' === gdb Summary === # of untested testcases 2 ... Fix this by using a new gdb_caching_proc supports_statement_frontiers. Tested on x86_64-linux, with gcc 7.5.0 (which does not support -gstatement-frontiers) and with gcc 8.4.0 (which does support -gstatement-frontiers). gdb/testsuite/ChangeLog: 2020-03-14 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (supports_statement_frontiers): New proc. * gdb.cp/step-and-next-inline.exp: Use supports_statement_frontiers.
2020-03-13[gdb/testsuite] Fix check-read1 FAIL in gdb.tui/corefile-run.expTom de Vries1-2/+13
With test-case gdb.tui/corefile-run.exp and make target check-read1, I run into: ... FAIL: gdb.tui/corefile-run.exp: run until the end ... In more detail, using -v: ... PASS: gdb.tui/corefile-run.exp: load corefile ^M+++ _ctl_0x0d ^[[17d+++ _csi_d <<<17>>> ^[[M+++ _csi_M <<<>>> ^[[24d+++ _csi_d <<<24>>> (INSERT <<(>> gINSERT <<g>> dINSERT <<d>> bINSERT <<b>> )INSERT <<)>> INSERT << >> FAIL: gdb.tui/corefile-run.exp: run until the end ... With some debugging code added in wait_for, what happens becomes more clear: ... if {[regexp -- $wait_for $prev]} { + verbose -log "\nwait_for: MATCHED line ($_cur_y): \"$prev\"" + verbose -log "wait_for: AGAINST regexp: \"$wait_for\"" ... In corefile-run.exp, we execute: ... Term::command "run" ... and in proc Term::command, we send the command, and then call wait_for: ... proc command {cmd} { send_gdb "$cmd\n" wait_for [string_to_regexp $cmd] } ... which first waits for the command string, and then for the prompt. In this case however, the matching of the command string triggers on a previous line: ... wait_for: MATCHED line (16): \ "(gdb) core-file corefile-run.core[New LWP 6426] <lots-of-spaces>" wait_for: AGAINST regexp: "run" ... and from there on things go out of sync, eventually resulting in the FAIL. Fix this in proc command by more precisely specifying the expected pattern: adding a ^$gdb_prompt prefix. Add a command_no_prompt_prefix variant to use for initial terminal commands where there's no prompt yet. Tested gdb.tui/*.exp on x86_64-linux, with make target check and check-read1. gdb/testsuite/ChangeLog: 2020-03-13 Tom de Vries <tdevries@suse.de> * lib/tuiterm.exp (Term::command_no_prompt_prefix): New proc. (Term::command): Use prompt prefix. (Term::enter_tui): Use command_no_prompt_prefix instead of prefix. * gdb.tui/tui-layout-asm-short-prog.exp: Use command_no_prompt_prefix instead of prefix. * gdb.tui/tui-layout-asm.exp: Same.
2020-03-12[gdb/testsuite] Use string_to_regexp on core filename in gdb_core_cmdTom de Vries1-1/+1
In commit 1281424ccf "[gdb/testsuite] Fix core file load FAIL in tls-core.exp", I've made this change: ... - -re ": No such file or directory.*\r\n$gdb_prompt $" { + -re "$core: No such file or directory.*\r\n$gdb_prompt $" { ... However, the $core variable contains a filename which needs to be matched as a literal string, not as a regexp. Fix this by using string_to_regexp. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-03-12 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (gdb_core_cmd): Use string_to_regexp for regexp-matching $core.
2020-03-12[gdb/testsuite] Fix core file load FAIL in tls-core.expTom de Vries1-1/+1
After deinstalling package glibc-debugsource, I run into the following FAIL with test-case gdb.threads/tls-core.exp: ... (gdb) core gdb/testsuite/outputs/gdb.threads/tls-core/tls-core.core^M [New LWP 30081]^M [New LWP 30080]^M [Thread debugging using libthread_db enabled]^M Using host libthread_db library "/lib64/libthread_db.so.1".^M Core was generated by `gdb/testsuite/outputs/gdb.threads/tls-core/tls-c'.^M Program terminated with signal SIGABRT, Aborted.^M 51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.^M [Current thread is 1 (Thread 0x7fb568d4b700 (LWP 30081))]^M (gdb) FAIL: gdb.threads/tls-core.exp: native: load core file (file not found) ... The problem is that this gdb_test_multiple clause in gdb_core_cmd: ... -re ": No such file or directory.*\r\n$gdb_prompt $" { fail "$test (file not found)" return -1 } ... triggers on the message about raise.c, while it is intended to catch: ... $ gdb (gdb) core bla /home/vries/bla: No such file or directory. ... Fix this by making the regexp more precise: ... - -re ": No such file or directory.*\r\n$gdb_prompt $" { + -re "$core: No such file or directory.*\r\n$gdb_prompt $" { ... Tested on x86_64-linux. Also tested the test-case with this patch in place to verify that the regexp still triggers: ... - set core_loaded [gdb_core_cmd $corefile $test] + set core_loaded [gdb_core_cmd $corefile/bla $test] ... gdb/testsuite/ChangeLog: 2020-03-12 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (gdb_core_cmd): Make "No such file or directory" regexp more precise.
2020-03-11testsuite: use `pwd -W` to convert from Unix to Windows pathsSimon Marchi1-1/+1
When on a MinGW host, standard_output_file uses a regular expression to convert Unix-style paths of the form "/c/foo" to "c:/foo". This is needed because the paths we pass to GDB (for example, with the "file" command) need to be in the Windows form. However, the regexp only works if your binutils-gdb repo is under a `/[a-z]/...` path (the Unix paths mapping to Windows drives). Presumably, that works if you clone the repo in Windows, then access it through `/c/...`. In my case, I've cloned the repository directly inside my MinGW shell, so in /home/smarchi. The regexp therefore doesn't work for me. The path doesn't get transformed, and the file command fails when running any test: (gdb) file /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.arch/i386-bp_permanent/i386-bp_permanent /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.arch/i386-bp_permanent/i386-bp_permanent: No such file or directory. A safer way to do this is to execute `pwd -W` while in the directory we want the path for, this is what this patch does. I have also considered using the using the cygpath utility to do the conversion. It can be used to convert any MinGW path into its Windows equivalent. Despite originally coming from Cygwin, the cygpath utility is distributed by MinGW-w64 and can be used in that environment. However, it's not distributed with the non-MinGW-w64 MinGW. The `pwd -W` trick only works with directories that exist, which is the case here, so it's sufficient. With this, the file command in the test succeeds: (gdb) file C:/msys64/home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.arch/i386-bp_permanent/i386-bp_permanent Reading symbols from C:/msys64/home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.arch/i386-bp_permanent/i386-bp_permanent... gdb/testsuite/ChangeLog: * lib/gdb.exp (standard_output_file): Use `pwd -W` to convert from Unix to Windows path.
2020-03-10gdb/testsuite: Add is-stmt support to the DWARF compilerAndrew Burgess1-1/+7
This commit adds the ability to set and toggle the DWARF line table is-stmt flag. A DWARF line table can now be created with the attribute 'default_is_stmt' like this: lines {version 2 default_is_stmt 0} label { ... } If 'default_is_stmt' is not specified then the current default is 1, which matches the existing behaviour. Inside the DWARF line table program you can now make use of {DW_LNS_negate_stmt} to toggle the is-stmt flag, for example this meaningless program: lines {version 2 default_is_stmt 0} label { include_dir "some_directory" file_name "some_filename" 1 program { {DW_LNS_negate_stmt} {DW_LNE_end_sequence} } } This new functionality will be used in a later commit. gdb/testsuite/ChangeLog: * lib/dwarf.exp (Dwarf::lines) Add support for modifying the is-stmt flag in the line table. Change-Id: Ia3f61d523826382dd2333f65b9aae368ad29c4a5
2020-03-09[gdb/testsuite] Fix tcl error in cached_fileTom de Vries1-0/+3
When trying to run tests using target board cc-with-dwz after a clean build, I run into: ... ERROR: tcl error sourcing board description file for target cc-with-tweaks.exp. couldn't open "build/gdb/testsuite/cache/gdb.sh.17028": \ no such file or directory couldn't open "build/gdb/testsuite/cache/gdb.sh.17028": \ no such file or directory while executing "open $tmp_filename w" (procedure "cached_file" line 9) invoked from within "cached_file gdb.sh "$GDB $INTERNAL_GDBFLAGS $GDBFLAGS \"\$@\"" 1" ... The problem is that cached_file is trying to create a file build/gdb/testsuite/cache/gdb.sh.17028 in a non-existing directory. Fix this by creating the cache dir in cached_file. Tested on x86_64-linux, with target board cc-with-tweaks, and native. gdb/testsuite/ChangeLog: 2020-03-09 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (cached_file): Create cache dir.
2020-03-06[gdb/testsuite] Fix "text file busy" errors with cc-with-tweaks.expTom de Vries1-0/+42
When using target board cc-with-gdb-index.exp and running tests in parallel, we run into: ... gdb compile failed, gdb/contrib/gdb-add-index.sh: line 86: \ build/gdb/testsuite/gdb.sh: Text file busy ... The problem is that because of the parallel test run, gdb.sh is created for every single test-case, and eventually gdb.sh is overwritten while being executed. Fix this by creating gdb.sh only once. Tested on x86_64-linux with target board cc-with-gdb-index.exp, using both a serial and parallel -j 5 test run. gdb/testsuite/ChangeLog: 2020-03-06 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (tentative_rename, cached_file): New proc. * boards/cc-with-tweaks.exp: Use cached_file to create gdb.sh.
2020-03-04gdb.fortran: Allow Flang kind printing in fortran testingAlok Kumar Sharma1-14/+21
In lib/fortran.exp, in the helper function fortran_int4, kind parameter is expected to be printed as (kind=4) for the LLVM Fortran compiler, Flang along with gfortran. And in the helper function fortran_int8 kind parameter is expected to be printed as (kind=8). But for the Flang compiler default kind is not printed and non default kind is printed differently than gfortran as below. integer(kind=4) => integer integer(kind=8) => integer*8 real(kind=4) => real real(kind=8) => double precision complex(kind=4) => complex logical(kind=4) => logical character(kind=1) => character This commit adds support for printing of kind parameter for the Flang. There should be no change when testing with gfortran. Note: The current patch overrides earlier patch with below details. commit c3b149eb7697b376df1b3a47d0102afda389ee6d Author Alok Kumar Sharma (alokkumar.sharma@amd.com) Earlier patch was incomplete and based on assumption that flang should be changed to dump a type with kind like the way gfortan does. Later it was realized that the way flang dumps this info is not incorrect but different. And changes in gdb test framework are finalized. gdb/testsuite/ChangeLog: * lib/fortran.exp (fortran_int4): Handle flang kind printing. (fortran_int8): Likewise. (fortran_real4): Likewise. (fortran_real8): Likewise. (fortran_complex4): Likewise. (fortran_logical4): Likewise. (fortran_character1): Likewise.
2020-03-02gdb: Allow GDB to _not_ load a previous command historyAndrew Burgess1-0/+6
This commit aims to give a cleaner mechanism by which the user can prevent GDB from trying to load any previous command history. Currently the user can change the path to the history file, either using a command line flag, or by setting the GDBHISTFILE environment variable, and if the path is set to a non-existent file, then obviously GDB wont load any command history. However, this feels like a bit of a bodge, I'd like to add an official mechanism by which we can disable command history loading. Why would we want to prevent command history loading? The specific use case I have is GDB starting with a CWD that is a network mounted directory, and there is no command history present. Still GDB will access the network in order to check for the file. In my particular use case I'm actually starting a large number of GDB instances in parallel, all in the same network mounted directory, the large number of network accesses looking for this file introduces a noticeable delay at GDB startup. The approach I'm proposing here is a slight adjustment to the current rules for setting up the history filename. Currently, if a user does this, they see an error: (gdb) set history filename Argument required (filename to set it to.). However, if a user does this: $ GDBHISTFILE= gdb --quiet (gdb) set history save on (gdb) q warning: Could not rename -gdb18416~ to : No such file or directory So, we already have a bug in this area. My plan is to allow the empty filename to be accepted, and for this to mean, neither load, nor save the command history. This does mean that we now have two mechanisms to prevent saving the command history: (gdb) set history filename or (gdb) set history save off But the only way to prevent loading the command history is to set the filename to the empty string _before_ you get to a GDB prompt, either using a command line option, or the environment variable. I've updated some of the show commands, for example this session: (gdb) set history filename (gdb) show history filename There is no filename currently set for recording the command history in. (gdb) show history save Saving of the history record on exit is off. (gdb) set history save on (gdb) show history save Saving of the history is disabled due to the value of 'history filename'. (gdb) set history filename /tmp/hist (gdb) show history save Saving of the history record on exit is on. I've updated the manual, and added some tests. gdb/ChangeLog: * NEWS: Mention new behaviour of the history filename. * top.c (write_history_p): Add comment. (show_write_history_p): Add header comment, give a different message when history writing is on, but the history filename is empty. (history_filename): Add comment. (history_filename_empty): New function. (show_history_filename): Add header comment, give a different message when the filename is empty. (init_history): Compare history_filename against nullptr, and only read history if the filename is not empty. (set_history_filename): Add header comment, and only make non-empty filenames absolute. (init_main): Make the filename argument to 'set history filename' optional. gdb/doc/ChangeLog: * gdb.texinfo (Command History): Extend description for GDBHISTFILE and GDBHISTSIZE, add detail about the filename for 'set history filename' being optional. Describe the effect of an empty history filename on 'set history save on'. gdb/testsuite/ChangeLog: * gdb.base/default.exp: Remove test of 'set history filename'. * gdb.base/gdbinit-history.exp: Add tests for setting the history filename to the empty string. * lib/gdb.exp (gdb_init): Unset environment variables GDBHISTFILE and GDBHISTSIZE. Change-Id: Ia586e4311182fac99113b60f11ef8a11fbd5450b
2020-03-02[gdb/testsuite] Add -lbl option in gdb_test_multipleTom de Vries1-32/+66
Add gdb_test_multiple option -lbl, that adds a regexp after the user code that reads one line, and discards it: ... -re "\r\n\[^\r\n\]*(?=\r\n)" { exp_continue } ... In order to be able to write: ... gdb_test_multiple "command" "testname" -lbl { ... } ... rewrite the promp_regexp argument usage into the similar: ... gdb_test_multiple "command" "testname" -prompt $prompt_regexp { ... } ... Build and reg-tested on x86_64-linux. Tested gdb.base/corefile-buildid.exp with both make targets check and check-read1. gdb/testsuite/ChangeLog: 2020-03-02 Pedro Alves <palves@redhat.com> Tom de Vries <tdevries@suse.de> * lib/gdb.exp (gdb_test_multiple): Handle prompt_regexp option using -prompt prefix, before user_code argument. Add -lbl option likewise. (skip_python_tests_prompt, skip_libstdcxx_probe_tests_prompt) (gdb_is_target_1): Add -prompt prefix and move to before user_code argument. * gdb.base/corefile-buildid.exp: Use -lbl option. Rewrite regexps to have "\r\n" at start-of-line, instead of at end-of-line.
2020-02-28Update libinproctrace.so path in lib/trace-support.expSimon Marchi1-1/+1
Following the move to gdbserver to the top-level, the path to libinproctrace.so in testsuite/lib/trace-support.exp is no longer valid. This can be observed by running: $ make check TESTS="gdb.trace/ftrace.exp" RUNTESTFLAGS="--target_board=native-gdbserver" ... ERROR: error copying "/home/smarchi/build/binutils-gdb/gdb/testsuite/../gdbserver/libinproctrace.so": no such file or directory Adjust the path to libinproctrace.so by adding a "..". With this patch, the test mentioned above runs fine. gdb/testsuite/ChangeLog: * lib/trace-support.exp (get_in_proc_agent): Adjust path to libinproctrace.so.
2020-02-27[gdb/testsuite] Remove unused globalsTom de Vries3-9/+1
Remove unused global variable declarations. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-27 Tom de Vries <tdevries@suse.de> * config/sid.exp: Remove unused globals. * gdb.base/attach.exp: Same. * gdb.base/catch-load.exp: Same. * gdb.base/dbx.exp: Same. * lib/gdb.exp: Same. * lib/mi-support.exp: Same. * lib/prompt.exp: Same.
2020-02-27[gdb/testsuite] Fix spawn in tuiterm.expTom de Vries1-1/+5
When running gdb.stabs/weird.exp by itself it passes, but if we run a gdb.tui test before it, we get: ... $ make check RUNTESTFLAGS="gdb.stabs/weird.exp gdb.tui/basic.exp" Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.tui/basic.exp ... Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.stabs/weird.exp ... ERROR: Couldn't make test case. -1 {spawn failed} ... In more detail, using -v: ... Executing on build: sed -f aout.sed weird.def weird.s (timeout = 300) builtin_spawn [open ...]^M pid is 19060 19061 -19060 -19061 spawn -open file10 failed, 1 can't read "spawn_out(slave,name)": \ no such variable, can't read "spawn_out(slave,name)": no such variable while executing "set gdb_spawn_name $spawn_out(slave,name)" (procedure "spawn" line 5) invoked from within "spawn -ignore SIGHUP -leaveopen file10" invoked from within "catch "spawn -ignore SIGHUP -leaveopen $id" result2" ERROR: Couldn't make test case. -1 {spawn failed} ... When running the gdb.tui test, spawn gets renamed to a local version from lib/tuiterm.exp. The local version calls expect's spawn, and then makes the local spawn_out(slave,name) variable accessible in the global variable gdb_spawn_name. However, the weird.exp test-case uses remote_exec build, which ends up using local_exec, which given that there's input/output redirection uses open: ... set result [catch {open "| ${commandline} $inp |& tee $outpf" RDONLY} id] ... followed by spawn using the -leaveopen option: ... set result [catch "spawn -ignore SIGHUP -leaveopen $id" result2] ... which apparently has the effect that spawn_out(slave,name) is not set. Fix this in the lib/tuiterm.exp local spawn proc by detecting the case that spawn_out(slave,name) is not set, and handling it accordingly. Tested gdb.stabs/weird.exp and gdb.tui/*.exp on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-27 Tom de Vries <tdevries@suse.de> * lib/tuiterm.exp (spawn): Handle case that spawn_out(slave,name) is not set.
2020-02-21gdb/testsuite: Regenerate the testglue if it is not inShahab Vahedi1-2/+11
For running the DejaGnu tests, some esoteric configurations may require a testglue. This, for instance, is true about testing ARC targets which uses its own DejaGnu board and a simulator which does not support returning the program's exit code. Therefore, for those tests that use "gdb_compile", a "gdb_tg.o" file is compiled and linked into the final executable. There are tests that invoke "gdb_compile" from different directories. Let's take a look at an example test: gdb.base/fullname.exp. The purpose of this test is to build the executable from different directories (absolute vs. relative vs. other) and then check if gdb can handle setting breakpoints accordingly. When "gdb_compile" generates the "gdb_tg.o", it does not do it again for the same test. Although this might seem efficient, it can lead to problems when changing directories before the next compile: gdb compile failed, arc-elf32-gcc: error: gdb_tg.o: No such file or directory This patch checks if the wrapper file ("gdb_tg.o") is still in reach and if it is not, it will stimulate the regeneration of the wrapper. It is worth mentioning that GCC's DejaGnu tests handle these scenarios as well and they seem to be more efficient in doing so by saving the library paths and manipulating them if necessary [1]. However, for GDB tests, that require less compilations, I think the proposed solution should be fine compared to a more full fledged solution from GCC. The glue file in our case is only 2 KiB. Last but not least, I ran the x86_64 tests on an x86_64 host and found no regression. [1] Avid coders may look for "set_ld_library_path_env_vars" in gcc/testsuite/lib/target-libpath.exp. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_wrapper_init): Reset "gdb_wrapper_initialized" to 0 if "wrapper_file" does not exist.
2020-02-20[gdb/testsuite] Handle missing gccgoTom de Vries1-1/+20
Without gccgo installed I see in stdout/stderr: ... Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/print.exp ... Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/handcall.exp ... gdb compile failed, default_target_compile: Can't find gccgo. Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/max-depth.exp ... gdb compile failed, default_target_compile: Can't find gccgo. Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/integers.exp ... gdb compile failed, default_target_compile: Can't find gccgo. Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/unsafe.exp ... gdb compile failed, default_target_compile: Can't find gccgo. Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/package.exp ... gdb compile failed, default_target_compile: Can't find gccgo. Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/types.exp ... gdb compile failed, default_target_compile: Can't find gccgo. Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/chan.exp ... gdb compile failed, default_target_compile: Can't find gccgo. Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/strings.exp ... gdb compile failed, default_target_compile: Can't find gccgo. Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/basic-types.exp ... Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/hello.exp ... gdb compile failed, default_target_compile: Can't find gccgo. Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.go/methods.exp ... gdb compile failed, default_target_compile: Can't find gccgo. ... Fix this by introducing a gdb_caching_proc support_go_compile, and using it in the complaining test-cases. Tested on x86_64-linux, with and without gccgo installed. gdb/testsuite/ChangeLog: 2020-02-20 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (support_go_compile): New gdb_caching_proc. (gdb_simple_compile): Handle compile_flags go by using .go extension for source file. * gdb.go/chan.exp: Use support_go_compile. * gdb.go/handcall.exp: Same. * gdb.go/hello.exp: Same. * gdb.go/integers.exp: Same. * gdb.go/max-depth.exp: Same. * gdb.go/methods.exp: Same. * gdb.go/package.exp: Same. * gdb.go/strings.exp: Same. * gdb.go/types.exp: Same. * gdb.go/unsafe.exp: Same.
2020-02-19[gdb/testsuite] Ignore pass in gdb_caching_procTom de Vries1-1/+30
Before commit d4295de4f3 "[gdb/testsuite] Handle missing gnatmake in gnat_runtime_has_debug_info", calling the gdb_caching_proc gnat_runtime_has_debug_info could generate a pass because of using gdb_compile_ada. This has been fixed in that commit by using a factored out variant gdb_compile_ada_1, which does not call pass. Additionally, fix cases like this in more generic way: by ignoring pass calls during execution of a gdb_caching_proc. Build and reg-tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-19 Tom de Vries <tdevries@suse.de> * lib/cache.exp (ignore_pass, gdb_do_cache_wrap): New proc. (gdb_do_cache): Use gdb_do_cache_wrap. * gdb.base/gdb-caching-proc.exp (test_proc): Use gdb_do_cache_wrap.
2020-02-19[gdb/testsuite] Be quiet about untested dtrace-prob.expTom de Vries1-2/+4
When running gdb.base/dtrace-probe.exp, I get this on stdout/stderr: ... Running src/gdb/testsuite/gdb.base/dtrace-probe.exp ... gdb compile failed, ld: error in \ build/gdb/testsuite/outputs/gdb.base/dtrace-probe/dtrace-probe.o\ (.eh_frame); no .eh_frame_hdr table will be created ld: crt1.o: in function `_start': start.S:110: undefined reference to `main' ld: build/gdb/testsuite/outputs/gdb.base/dtrace-probe/dtrace-probe-p.o:\ (.SUNW_dof+0x88): undefined reference to `main' ld: build/gdb/testsuite/outputs/gdb.base/dtrace-probe/dtrace-probe-p.o:\ (.SUNW_dof+0xb8): undefined reference to `main' collect2: error: ld returned 1 exit status === gdb Summary === nr of untested testcases 1 ... There is no reason to be this verbose about the failure to compile. Fix this by using quiet as additional option to gdb_compile in dtrace_build_usdt_test_program. Note that the error message still occurs in gdb.log. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-19 Tom de Vries <tdevries@suse.de> * lib/dtrace.exp (dtrace_build_usdt_test_program): Use quiet as gdb_compile option.
2020-02-18[gdb/testsuite] Handle missing gnatmake in gnat_runtime_has_debug_infoTom de Vries1-4/+12
After de-installing gnatmake, I get on stdout/stderr: ... Running src/gdb/testsuite/gdb.base/gdb-caching-proc.exp ... FAIL: gdb-caching-proc.exp: failed to compile gnat-debug-info test binary ... FAIL: gdb-caching-proc.exp: failed to compile gnat-debug-info test binary ... In gdb.sum, we see these FAILs (each paired with an UNSUPPORTED as well) followed by: ... PASS: gdb-caching-proc.exp: gnat_runtime_has_debug_info consistency ... Likewise, after re-installing gnatmake, I get a PASS for each of the UNSUPPORTEDs, and the FAILs disappear. The FAIL comes from gnat_runtime_has_debug_info, the PASS/UNSUPPORTED comes from gdb_compile_ada. Fix this by removing the corresponding fail call in gnat_runtime_has_debug_info, as well as using a new variant gdb_compile_ada_1 that doesn't call pass/unsupported. Tested on x86_64-linux, with gnatmake installed and de-installed. gdb/testsuite/ChangeLog: 2020-02-18 Tom de Vries <tdevries@suse.de> * lib/ada.exp (gdb_compile_ada_1): Factor out of ... (gdb_compile_ada): ... here. (gnat_runtime_has_debug_info): Remove fail call for gdb_compile_ada failure. Use gdb_compile_ada_1 instead of gdb_compile_ada.
2020-02-14Have testsuite find gdbserver in new locationTom Tromey1-6/+8
This updates the gdb testsuite to look for gdbserver in its new location. The old location is also checked for, on the theory that perhaps someone sets GDB to a full path for install testing. gdb/testsuite/ChangeLog 2020-02-14 Tom Tromey <tom@tromey.com> * lib/gdbserver-support.exp (find_gdbserver): Find gdbserver in build directory. * boards/gdbserver-base.exp: Update path to gdbserver. Change-Id: If03db762ba53882ddfaf2d2d516de14c3fa03938
2020-02-13[gdb/testsuite] Remove stale exec in gdb_compile_adaTom de Vries1-0/+2
When running test-case gdb.ada/ptype_tagged_param.exp, I get: ... PASS: gdb.ada/ptype_tagged_param.exp: compilation foo.adb ... However, when I then de-install gnatmake and run again, I get the same result. This is due to a stale exec. After removing the stale exec, I get: ... UNSUPPORTED: gdb.ada/ptype_tagged_param.exp: compilation foo.adb ... Fix this removing the stale exec in gdb_compile_ada before compilation. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-13 Tom de Vries <tdevries@suse.de> * lib/ada.exp (gdb_compile_ada): Delete stale exec before compilation.
2020-02-13[gdb/testsuite] Fix gnatmake_version_at_leastTom de Vries1-1/+3
After de-installing gnatmake, I get: ... Running src/gdb/testsuite/gdb.ada/rename_subscript_param.exp ... ERROR: tcl error sourcing src/gdb/testsuite/gdb.ada/rename_subscript_param.exp. ERROR: couldn't execute "gnatmake": no such file or directory while executing "exec $gnatmake --version" (procedure "gnatmake_version_at_least" line 4) ... Fix this by wrapping the exec call in a catch call. Tested with and withouth gnatmake installed on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-13 Tom de Vries <tdevries@suse.de> * lib/ada.exp (gnatmake_version_at_least): Wrap exec call in a catch call.
2020-02-11[gdb/testsuite] Fix UNRESOLVED in gdb.server/server-kill-python.expTom de Vries1-0/+4
The test-case gdb.server/server-kill-python.exp runs fine by itself: ... Running src/gdb/testsuite/gdb.server/server-kill-python.exp ... === gdb Summary === nr of expected passes 3 ... But if we run f.i. gdb.server/file-transfer.exp before it, we get instead: ... Running src/gdb/testsuite/gdb.server/server-kill-python.exp ... ERROR: GDB process no longer exists === gdb Summary === nr of expected passes 13 nr of unresolved testcases 1 ... We can see the origin of the problem here: ... spawn gdbserver --once localhost:2347 \ build/gdb/testsuite/outputs/gdb.server/file-transfer/file-transfer \ build/gdb/testsuite/outputs/gdb.server/server-kill-python/server-kill-python^M Process build/gdb/testsuite/outputs/gdb.server/file-transfer/file-transfer \ created; pid = 9464^M Listening on port 2347^M ... The spawn of the gdbserver for the server-kill-python test-case gets as executable argument the file-transfer binary. This is caused by proc gdbserver_spawn attempting to load the exec file in $file_last_loaded. This is something that is meant to load the same exec in the gdbserver that was earlier loaded into gdb. In this test-case however, nothing has been loaded into gdb by the test-case, and consequently we load the file that was loaded into gdb in the previous test-case. Fix this by unsetting $file_last_loaded in gdb_init. Build and reg-tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-11 Tom de Vries <tdevries@suse.de> PR testsuite/25488 * lib/gdb.exp (gdb_init): Unset $file_last_loaded. Change-Id: Ic385e08cbd34cbf85518720cf5695b4ff6619f4b
2020-02-04gdb/fortran: Allow for using Flang in Fortran testingAlok Kumar Sharma1-7/+14
In lib/fortran.exp, in the helper function fortran_int4, there is currently no support for the LLVM Fortran compiler, Flang. As a result we return the default pattern 'unknown' to match against all 4-byte integer types, which causes many tests to fail. The same is true for all of the other helper functions related to finding a suitable type pattern. This commit adds support for Flang. There should be no change when testing with gfortran. gdb/testsuite/ChangeLog: * lib/fortran.exp (fortran_int4): Handle clang. (fortran_int8): Likewise. (fortran_real4): Likewise. (fortran_real8): Likewise. (fortran_complex4): Likewise. (fortran_logical4): Likewise. (fortran_character1): Likewise. Change-Id: Ife0d9828f78361fbd992bf21af746042b017dafc
2020-02-04[gdb/testsuite] Make inferior_exited_re match a single lineTom de Vries1-1/+1
The current inferior_exited_re regexp contains a '.*': ... set inferior_exited_re "(?:\\\[Inferior \[0-9\]+ \\(.*\\) exited)" ... This means that while matching a single line: ... $ tclsh % set re "(?:\\\[Inferior \[0-9\]+ \\(.*\\) exited)" (?:\[Inferior [0-9]+ \(.*\) exited) % set line "\[Inferior 1 (process 33) exited\]\n" [Inferior 1 (process 33) exited] % regexp $re $line 1 ... it also matches more than one line: ... $ tclsh % set re "(?:\\\[Inferior \[0-9\]+ \\(.*\\) exited)" (?:\[Inferior [0-9]+ \(.*\) exited) % set line "\[Inferior 1 (process 33) exited\]\n\[Inferior 2 (process 44) exited\]\n" [Inferior 1 (process 33) exited] [Inferior 2 (process 44) exited] % regexp $re $line 1 ... Fix this by using "\[^\n\r\]*" instead of ".*". Build and reg-tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-04 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (inferior_exited_re): Use "\[^\n\r\]*" instead of ".*". Change-Id: Id7b1dcecd8c7fda3d1ab34b4fa1364d301748333
2020-02-04[gdb/testsuite] Use non-capturing parentheses for inferior_exited_reTom de Vries1-1/+1
The inferior_exited_re regexp uses capturing parentheses by default: ... set inferior_exited_re "(\\\[Inferior \[0-9\]+ \\(.*\\) exited)" ... The parentheses are there to be able to use the expression as an atom, f.i., to have '+' apply to the whole regexp in "${inferior_exited_re}+". But the capturing is not necessary, and it can be confusing because it's not obvious in a regexp using "$inferior_exited_re (bla|bli)" that the first captured expression is in $inferior_exited_re. Replace by non-capturing parentheses. If we still want to capture the expression, we can simply (and more clearly) use "($inferior_exited_re)". Build and reg-tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-04 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (inferior_exited_re): Use non-capturing parentheses. Change-Id: I7640c6129b1ada617424d6a63730d4b119c58ef3
2020-01-16Fix some spelling errors.Christian Biesinger1-1/+1
I noticed those from a lintian run: https://salsa.debian.org/cbiesinger-guest/gdb/-/jobs/514119 gdb/ChangeLog: 2020-01-16 Christian Biesinger <cbiesinger@google.com> * btrace.c (btrace_compute_ftrace_1): Fix spelling error (Unkown). (btrace_stitch_trace): Likewise. * charset.c (intermediate_encoding): Likewise (vaild). * nat/linux-btrace.c (linux_read_pt): Likewise (Unkown). * python/py-record-btrace.c (struct PyMethodDef): Likewise (occurences). * record-btrace.c (record_btrace_print_conf): Likewise (unkown). gdb/testsuite/ChangeLog: 2020-01-16 Christian Biesinger <cbiesinger@google.com> * lib/gdb.exp: Fix spelling error (seperatelly). Change-Id: I2a44936bac295020f217fb6c78b99b0a8d09cf9a
2020-01-13gdb/testsuite: Allow DWARF assembler to create multiple line tablesAndrew Burgess1-0/+2
Fixes a bug in the DWARF assembler that prevents multiple line tables from being created in a test. We currently don't initialise a couple of flags, as a result we will only ever generate one end of file list, and one end of header, in the first line table. Any additional line tables will be missing these parts, and will therefore be corrupt. This fix will be required for a later commit. There should be no change in the testsuite after this commit. gdb/testsuite/ChangeLog: * lib/dwarf.exp (Dwarf::lines): Reset _line_saw_program and _line_saw_file. Change-Id: Id7123f217a036f26ee32d608db3064dd43164596
2020-01-13gdb/tui: Place window titles in the center of the borderAndrew Burgess1-3/+14
In tui-wingeneral.c:box_win () a comment suggest we should display titles like this: +-WINDOW TITLE GOES HERE-+ However, we actually display them like this: +--WINDOW TITLE GOES HERE+ The former seems nicer to me, so that's what this commit does. Short titles will appear as: +-SHORT TITLE------------+ We previously didn't test the horizontal windows borders in the test suite, however, I've updated things so that we do now check for the '+-' and '-+' on the upper border, this will give us some protection. gdb/ChangeLog: * tui/tui-wingeneral.c (box_win): Position the title in the center of the border. gdb/testsuite/ChangeLog: * lib/tuiterm.exp (Term::_check_box): Check some parts of the top border. Change-Id: Iead6910e3b4e68bdf6871f861f23d2efd699faf0
2020-01-10Add multi-target testsPedro Alves1-0/+4
This adds a testcase exercising multi-target features. It spawns 6 inferiors, like this: inferior 1 -> native inferior 2 -> extended-remote 1 inferior 3 -> core inferior 4 -> native inferior 5 -> extended-remote 2 inferior 6 -> core and then tests various details, including: - running to breakpoints - interrupting with Ctrl-C and "interrupt -a" - "next" bouncing between two breakpoints in two threads running in different targets. - since we have cores and live inferiors mixed in the same session, this makes sure that gdb doesn't try to remove a core dump's threads. - all-stop and non-stop modes. This testcase caught a _lot_ of bugs in development. gdb/testsuite/ChangeLog: 2020-01-10 Pedro Alves <palves@redhat.com> * gdb.multi/multi-target.c: New file. * gdb.multi/multi-target.exp: New file. * lib/gdbserver-support.exp (gdb_target_cmd): Handle "Non-stop mode requested, but remote does not support non-stop".
2020-01-09gdb: Fix scrolling in TUITom Tromey1-6/+10
Hannes Domani pointed out that my previous patch to fix the "list" command in the TUI instead broke vertical scrolling. While looking at this, I found that do_scroll_vertical calls print_source_lines, which seems like a very roundabout way to change the source window. This patch removes this oddity and fixes the bug at the same time. I've added a new test case. This is somewhat tricky, because the obvious approach of sending a dummy command after the scroll did not work -- due to how the TUI works, sennding a command causes the scroll to take effect. gdb/ChangeLog 2019-12-22 Tom Tromey <tom@tromey.com> PR tui/18932: * tui/tui-source.c (tui_source_window::do_scroll_vertical): Call update_source_window, not print_source_lines. gdb/testsuite/ChangeLog 2019-12-22 Tom Tromey <tom@tromey.com> PR tui/18932: * lib/tuiterm.exp (Term::wait_for): Rename from _accept. Return a meangingful value. (Term::command, Term::resize): Update. * gdb.tui/basic.exp: Add scrolling test. Change-Id: I9636a7c8a8cade37431c6165ee996a9d556ef1c8
2020-01-09gdb/testsuite/tui: Introduce check_box_contentsAndrew Burgess1-0/+31
A new test procedure for matching the contents of one screen box against a regexp. This can be used to match the contents of one TUI window against a regexp without any of the borders, or other windows being included in the matched output (as is currently the case with check_contents). This will be used in a later commit. gdb/testsuite/ChangeLog: * lib/tuiterm.exp (Term::check_box_contents): New proc. Change-Id: Icf795bf38dd9295e282a34eecc318a9cdbc73926
2020-01-09gdb/testsuite/tui: Split enter_tui into two procsAndrew Burgess1-3/+13
Split Term::enter_tui into two procedures, a core which does the setup, but doesn't actually enable tui mode, and the old enter_tui that calls the new core, and then enables tui mode. This is going to be useful in a later commit. gdb/testsuite/ChangeLog: * lib/tuiterm.exp (Term::prepare_for_tui): New proc. (Term::enter_tui): Use Term::prepare_for_tui. Change-Id: I501dfb2ddaa4a4e7246a5ad319ab428e4f42b3af
2020-01-09gdb/testsuite/tui: Always dump_screen when askedAndrew Burgess1-2/+2
The Term::dump_screen routine currently dumps the screen using calls to 'verbose', this means it will only dump the screen when the testsuite is running in verbose mode. However, the Term::dump_screen is most often called when a test fails, in this case I think it is useful to have the screen dumped even when we're not in verbose mode. This commit changes the calls to 'verbose' to be 'verbose -log' so we always get the screen dump. gdb/testsuite/ChangeLog: * lib/tuiterm.exp (Term::dump_screen): Always dump the screen when called. Change-Id: I5f0a7f5ac2ece04d6fe6e9c5a28ea2a0dda38955
2020-01-01Update copyright year range in all GDB files.Joel Brobecker44-44/+44
gdb/ChangeLog: Update copyright year range in all GDB files.
2019-12-27[PATCH] Adjust test gdb.ada/ptype_tagged_param.exp for when GNAT runtime ↵Simon Marchi2-0/+42
does not have debug info This test verifies that GDB correctly identifies the run-time type of "s" as being the type "Circle". However, that can only be done correctly if the GNAT runtime has been compiled and shipped with debug information, so that GDB can poke in its internal data structures. Currently the test fails when when running against a GNAT runtime without debug info. This is the case, for example, on Arch Linux using the distribution package. This patch adds a helper in lib/ada.exp to check whether the GNAT runtime has debug info or not. It then uses it in gdb.ada/ptype_tagged_param.exp to expect a different result, depending on whether we have debug info or not in the runtime. At first, I made it so we would XFAIL the test, in the absence of debug info, but then I thought that we might as well test for the output we expect in the absence of debug info instead. gdb/testsuite/ChangeLog: * lib/ada.exp (gnat_runtime_has_debug_info): New proc. * lib/gnat_debug_info_test.adb: New file. * gdb.ada/ptype_tagged_param.exp: Use gnat_runtime_has_debug_info, expect a different output if runtime does not have debug info.
2019-12-20sym-info-cmds.exp: add yet another missing quote in test nameSimon Marchi1-1/+1
In my previous commit, I missed this other spot that is missing a quote... gdb/testsuite/ChangeLog: * lib/sym-info-cmds.exp (GDBInfoSymbols::check_no_entry): Add (another) quote in test name.
2019-12-20sym-info-cmds.exp: add missing quote in test nameSimon Marchi1-1/+1
gdb/testsuite/ChangeLog: * lib/sym-info-cmds.exp (GDBInfoModuleSymbols::check_no_entry): Add quote in test name.
2019-12-11First use of tui_layoutTom Tromey1-7/+3
This patch introduces the first use of tui_layout, by changing show_layout to clone and use the appropriate tui_layout. This resulted in one minor layout change, and also in the unintended -- but good -- side effect that the title of each boxed window is now visible. gdb/ChangeLog 2019-12-11 Tom Tromey <tom@tromey.com> * tui/tui-layout.h (tui_apply_current_layout): Declare. * tui/tui-layout.c (standard_layouts, applied_layout): New globals. (tui_apply_current_layout): New function. (show_layout): Set applied_layout. Call tui_apply_current_layout. (show_source_command, show_disasm_command) (show_source_disasm_command, show_data) (show_source_or_disasm_and_command): Remove. (initialize_layouts): New function. (_initialize_tui_layout): Call initialize_layouts. gdb/testsuite/ChangeLog 2019-12-11 Tom Tromey <tom@tromey.com> * gdb.tui/regs.exp: Update. * gdb.tui/empty.exp (layouts): Update. * gdb.tui/basic.exp: Update. * lib/tuiterm.exp (_check_box): Don't check bottom border. Change-Id: If1ee06ee58f4803e8c213f4ab0f5bb59f4650ec2
2019-12-10Add gdb_caching_proc support_nested_function_tests to lib/gdb.expKevin Buettner1-0/+15
This commit adds the gdb_caching_proc, support_nested_function_tests, to lib/gdb.exp. It tests to see whether or not the C compiler has support for nested function calls. gdb/testsuite/ChangeLog: * lib/gdb.exp (support_nested_function_tests): New proc. Change-Id: Ic2c93bc4cc200e07e104a2398f89a9c0514bdc75
2019-12-10Add gdb_compile_openmp to lib/gdb.expKevin Buettner1-2/+13
gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_compile_openmp): New proc. (build_executable_from_specs): Add an "openmp" option. (gdb_compile_pthreads): Add non-executable case. Change-Id: I94048b8b0940c707ce0529a6bcfa6e4eace49101
2019-12-10Normalize Ada ptype to use a single "?"Tom Tromey1-1/+1
Sometimes -- notably with unchecked unions -- the Ada "ptype" code will print a "?" or "??" to indicate something unknown. The choice of what was printed was somewhat arbitrary, and in one case, Ada would print an empty string rather than "?". This patch normalizes the Ada code to use "?" rather than an empty string or "??". My reasoning here is that a single question mark is enough to convey unknown-ness. gdb/ChangeLog 2019-12-10 Tom Tromey <tromey@adacore.com> * ada-typeprint.c (print_choices): Use a single "?". (print_variant_part): Print "?" if the discriminant name is not known. gdb/testsuite/ChangeLog 2019-12-10 Tom Tromey <tromey@adacore.com> * gdb.ada/unchecked_union.exp: New file. * gdb.ada/unchecked_union/pck.adb: New file. * gdb.ada/unchecked_union/pck.ads: New file. * gdb.ada/unchecked_union/unchecked_union.adb: New file. * gdb-utils.exp (string_to_regexp): Also quote "?". Change-Id: I3403040780a155ffa2c44c8e6a04ba86bc810e29
2019-12-09gdb/testsuite/fortran: Fix info-modules/info-types for gfortran 8+Andrew Burgess1-0/+507
The gdb.fortran/info-modules.exp and gdb.fortran/info-types.exp tests are failing on versions of gfortran after 7.3 due to the inclusion of extra "system" modules and type that were not being matched by the current test patterns. Rather than building increasingly complex patterns that would always be at risk of breaking with future versions of GCC I have instead added a new library that parses the output of the following commands: info types info variables info functions info modules info module functions info module variables into a data structure, the test can than run checks against the contents of this data structure. The benefit is that we can simply ignore extra results that we don't care about. There is a small risk that a bug in GDB might allow us to start reporting incorrect results in such a way that the new library will not spot the error. However, I have tried to mitigate this risk by adding extra procedures into the test library (see check_no_entry) and we can add more in future if we wanted to be even more defensive. I tested this test file with gFortran 7.3.1, 8.3.0, and 9.2.0, I now see 100% pass in all cases. gdb/testsuite/ChangeLog: * gdb.fortran/info-modules.exp: Rewrite to make use of new sym-info-cmds library. * gdb.fortran/info-types.exp: Likewise. * lib/sym-info-cmds.exp: New file. Change-Id: Iff81624f51b5afb6c95393932f3d94472d7c2970
2019-12-04gdb/testsuite: Use -J option when compiling Fortran testsAndrew Burgess1-0/+10
When compiling Fortran tests (e.g. gdb.fortran/info-modules.exp), the Fotran compile produces .mod files. These files contain details of compiled modules that are then consumed by the compiler when compiling other files that USE a module. Currently the compiler writes the .mod files into its current directory, so for us this turns out to be 'build/gdb/testsuite/'. This means that .mod files can be shared between tests, which seems against the spirit of the GDB testsuite; source files should be compiled fresh for each test. This commit adds the -J option to the compiler flags whenever we compile a Fortran file, this option tells the compiler where to write, and look for, .mod files. After this commit there was one Fortran test that needed fixing, with that fix in place all of the Fortran tests pass again, but now the .mod files are now produced in the per-test output directories. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_compile): Add -J compiler option when building Fortran tests. * gdb.mi/mi-fortran-modules.exp: Compile source files in correct order. Change-Id: I99444cf22d80e320093d3f3ed9abb8825f378e0b
2019-11-28gdb/testsuite: Fix minor bug in skip_btrace*tests procsAndrew Burgess1-2/+2
The two guard functions skip_btrace_tests and skip_btrace_pt_tests have a minor bug, if the check function fails to compile then surely we should skip the btrace tests - currently we return 0 to indicate don't skip. gdb/testsuite/ChangeLog: * lib/gdb.exp (skip_btrace_tests): Return 1 if the test fails to compile. (skip_btrace_pt_tests): Likewise. Change-Id: I6dfc04b4adcf5b9424fb542ece7ddbe751bee301
2019-11-19gdb/testsuite: Introduce skip_ctf_tests guard functionAndrew Burgess1-0/+11
Most versions of GCC in the wild don't support CTF debug format right now, so, rather than attempting to compile the tests and failing each time, this patch introduces a guard function to check if the compiler supports CTF. If we don't have CTF support then the CTF tests are skipped. This patch only updates 3 of the 4 CTF tests, the fourth will be handled in the next patch. gdb/testsuite/ChangeLog: * gdb.base/ctf-constvars.exp: Skip test if CTF is not supported in the compiler. Clean up header comment a little. * gdb.base/ctf-ptype.exp: Likewise. * gdb.base/ctf-whatis.exp: Likewise. * lib/gdb.exp (skip_ctf_tests): New proc. Change-Id: I505c11169a9bc9871a31fc0c61e119f92f32cc63
2019-11-12Make TUI resizing tests more robustTom Tromey1-35/+85
As Sergio pointed out, the TUI resizing tests are flaky. Debugging this showed three main problems. 1. expect's "stty" command processes its arguments one-by-one. So, rather than requesting a single resize, it sends two separate resize requests (one for rows and one for columns). This means gdb sees two SIGWINCH signals and resizes the terminal twice. I consider this a bug in expect, but I couldn't readily see how to report a bug; and anyway the fix wouldn't propagate very quickly. This patch works around this problem by explicitly doing two separate resizes (so it will be robust if expect ever does change); and then by waiting for each resize to complete before continuing. 2. gdb uses curses to drive the console rendering. Currently the test suite looks for terminal text insertion sequences to decide when a command has completed. However, it turns out that, sometimes, curses can output things in non-obvious ways. I didn't debug into curses but I guess this can happen due to output optimizations. No matter the reason, sometimes the current approach of only tracking text insertions is not enough to detect that gdb has finished rendering. This patch fixes this problem by arranging to detect the termination output after any curses command, not just insertion. 3. Detecting when a resize has completed is tricky. In fact, I could not find a way to reliably do this. This patch fixes this problem by adding a special maint "tui-resize-message" setting to gdb. When this is enabled, gdb will print a message after each SIGWINCH has been fully processed. The test suite enables this mode and then waits for the message in order to know when control can be returned to the calling test. This patch also adds a timeout, to avoid the situation where the terminal code fails to notice a change for some reason. This lets the test at least try to continue. gdb/ChangeLog 2019-11-12 Tom Tromey <tom@tromey.com> * tui/tui-win.c (resize_message): New global. (show_tui_resize_message): New function. (tui_async_resize_screen): Print message if requested. (_initialize_tui_win): Add tui-resize-message setting. * NEWS: Add entry for new commands. gdb/doc/ChangeLog 2019-11-12 Tom Tromey <tom@tromey.com> * gdb.texinfo (Maintenance Commands): Document new command. gdb/testsuite/ChangeLog 2019-11-12 Tom Tromey <tom@tromey.com> * lib/tuiterm.exp (_accept): Add wait_for parameter. Check output after any command. Expect prompt after WAIT_FOR is seen. (enter_tui): Enable resize messages. (command): Expect command in output. (get_line): Avoid error when cursor appears to be off-screen. (dump_screen): Include screen size in title. (_do_resize): New proc, from "resize". (resize): Rewrite. Do resize in two steps. * gdb.tui/empty.exp (layouts): Fix entries. (check_boxes): Remove xfail. (check_text): Dump screen on failure. Change-Id: I420e0259cb99b21adcd28f671b99161eefa7a51d
2019-10-31[gdb/testsuite] Remove superfluous 3rd argument from gdb_test call (2)Tom de Vries1-9/+8
There's a pattern: ... gdb_test <command> <pattern> <command> ... that can be written shorter as: ... gdb_test <command> <pattern> ... Detect this pattern in proc gdb_test: ... global gdb_prompt upvar timeout timeout if [llength $args]>2 then { set message [lindex $args 2] + if { $message == [lindex $args 0] && [llength $args] == 3 } { + error "HERE" + } } else { set message [lindex $args 0] } ... and fix all occurrences in some gdb testsuite subdirs. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-10-31 Tom de Vries <tdevries@suse.de> * gdb.arch/amd64-disp-step-avx.exp: Drop superfluous 3rd argument to gdb_test. * gdb.arch/amd64-disp-step.exp: Same. * gdb.asm/asm-source.exp: Same. * gdb.btrace/buffer-size.exp: Same. * gdb.btrace/cpu.exp: Same. * gdb.btrace/enable.exp: Same. * gdb.dwarf2/count.exp: Same. * gdb.dwarf2/dw2-ranges-func.exp: Same. * gdb.dwarf2/dw2-ranges-psym.exp: Same. * gdb.fortran/vla-datatypes.exp: Same. * gdb.fortran/vla-history.exp: Same. * gdb.fortran/vla-ptype.exp: Same. * gdb.fortran/vla-value.exp: Same. * gdb.fortran/whatis_type.exp: Same. * gdb.guile/guile.exp: Same. * gdb.multi/tids.exp: Same. * gdb.python/py-finish-breakpoint.exp: Same. * gdb.python/py-framefilter.exp: Same. * gdb.python/py-pp-registration.exp: Same. * gdb.python/py-xmethods.exp: Same. * gdb.python/python.exp: Same. * gdb.server/connect-with-no-symbol-file.exp: Same. * gdb.server/no-thread-db.exp: Same. * gdb.server/run-without-local-binary.exp: Same. * gdb.stabs/weird.exp: Same. * gdb.threads/attach-many-short-lived-threads.exp: Same. * gdb.threads/thread-find.exp: Same. * gdb.threads/tls-shared.exp: Same. * gdb.threads/tls.exp: Same. * gdb.threads/wp-replication.exp: Same. * gdb.trace/ax.exp: Same. * lib/gdb.exp (gdb_test_exact, help_test_raw): Same. Change-Id: I2fa544c68f8c0099a77e03ff04ddc010eb2b6c7c
2019-10-30[gdb/testsuite] Add -early pattern flag for gdb_test_multipleTom de Vries1-9/+37
Proc gdb_test_multiple builds up and executes a gdb_expect expression with pattern/action clauses. The clauses are either implicit (added by gdb_test_multiple) or explicit (passed via the gdb_test_multiple parameter user_code). However, there are a few implicit clauses which are inserted before the explicit ones, making sure those take precedence. Add an -early pattern flag for a gdb_test_multiple user_code clause to specify that the clause needs to be inserted before any implicit clause. Using this pattern flag, we can f.i. setup a kfail for an assertion failure <assert> during gdb_continue_to_breakpoint by the rewrite: ... gdb_continue_to_breakpoint <msg> <pattern> ... into: ... set breakpoint_pattern "(?:Breakpoint|Temporary breakpoint) .* (at|in)" gdb_test_multiple "continue" "continue to breakpoint: <msg>" { -early -re "internal-error: <assert>" { setup_kfail gdb/nnnnn "*-*-*" exp_continue } -re "$breakpoint_pattern <pattern>\r\n$gdb_prompt $" { pass $gdb_test_name } } Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-10-30 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (gdb_test_multiple): Handle -early pattern flag. Change-Id: I376c636b0812be52e7137634b1a4f50bf2b999b6