1This is a collection of tests for GDB. 2 3The file gdb/README contains basic instructions on how to run the 4testsuite, while this file documents additional options and controls 5that are available. The GDB wiki may also have some pages with ideas 6and suggestions. 7 8 9Running the Testsuite 10********************* 11 12There are two ways to run the testsuite and pass additional parameters 13to DejaGnu. The first is to do `make check' in the main build 14directory and specifying the makefile variable `RUNTESTFLAGS': 15 16 make check RUNTESTFLAGS='TRANSCRIPT=y gdb.base/a2-run.exp' 17 18The second is to cd to the testsuite directory and invoke the DejaGnu 19`runtest' command directly. 20 21 cd testsuite 22 make site.exp 23 runtest TRANSCRIPT=y 24 25(The `site.exp' file contains a handful of useful variables like host 26and target triplets, and pathnames.) 27 28Parallel testing 29**************** 30 31If not testing with a remote host (in DejaGnu's sense), you can run 32the GDB test suite in a fully parallel mode. In this mode, each .exp 33file runs separately and maybe simultaneously. The test suite ensures 34that all the temporary files created by the test suite do not clash, 35by putting them into separate directories. This mode is primarily 36intended for use by the Makefile. 37 38For GNU make, the Makefile tries to run the tests in parallel mode if 39any -j option is given. For a non-GNU make, tests are not 40parallelized. 41 42If RUNTESTFLAGS is not empty, then by default the tests are 43serialized. This can be overridden by either using the 44`check-parallel' target in the Makefile, or by setting FORCE_PARALLEL 45to any non-empty value: 46 47 make check-parallel RUNTESTFLAGS="--target_board=native-gdbserver" 48 make check RUNTESTFLAGS="--target_board=native-gdbserver" FORCE_PARALLEL=1 49 50If you want to use runtest directly instead of using the Makefile, see 51the description of GDB_PARALLEL below. 52 53Racy testcases 54************** 55 56Sometimes, new testcases are added to the testsuite that are not 57entirely deterministic, and can randomly pass or fail. We call them 58"racy testcases", and they can be bothersome when one is comparing 59different testsuite runs. In order to help identifying them, it is 60possible to run the tests several times in a row and ask the testsuite 61machinery to analyze the results. To do that, you need to specify the 62RACY_ITER environment variable to make: 63 64 make check RACY_ITER=5 -j4 65 66The value assigned to RACY_ITER represents the number of times you 67wish to run the tests in sequence (in the example above, the entire 68testsuite will be executed 5 times in a row, in parallel). It is also 69possible to check just a specific test: 70 71 make check TESTS='gdb.base/default.exp' RACY_ITER=3 72 73One can also decide to call the Makefile rules by hand inside the 74gdb/testsuite directory, e.g.: 75 76 make check-paralell-racy -j4 77 78In which case the value of the DEFAULT_RACY_ITER variable (inside 79gdb/testsuite/Makefile.in) will be used to determine how many 80iterations will be run. 81 82After running the tests, you shall see a file name 'racy.sum' in the 83gdb/testsuite directory. You can also inspect the generated *.log and 84*.sum files by looking into the gdb/testsuite/racy_ouputs directory. 85 86If you already have *.sum files generated from previous testsuite runs 87and you would like to analyze them without having to run the testsuite 88again, you can also use the 'analyze-racy-logs.py' script directly. 89It is located in the gdb/testsuite/ directory, and it expects a list 90of two or more *.sum files to be provided as its argument. For 91example: 92 93 ./gdb/testsuite/analyze-racy-logs.py testsuite-01/gdb.sum \ 94 testsuite-02/gdb.sum testsuite-03/gdb.sum 95 96The script will output its analysis report to the standard output. 97 98Running the Performance Tests 99***************************** 100 101GDB Testsuite includes performance test cases, which are not run together 102with other test cases, because performance test cases are slow and need 103a quiet system. There are two ways to run the performance test cases. 104The first is to do `make check-perf' in the main build directory: 105 106 make check-perf RUNTESTFLAGS="solib.exp SOLIB_COUNT=8" 107 108The second is to cd to the testsuite directory and invoke the DejaGnu 109`runtest' command directly. 110 111 cd testsuite 112 make site.exp 113 runtest GDB_PERFTEST_MODE=both GDB_PERFTEST_TIMEOUT=4000 --directory=gdb.perf solib.exp SOLIB_COUNT=8 114 115Only "compile", "run" and "both" are valid to GDB_PERFTEST_MODE. They 116stand for "compile tests only", "run tests only", and "compile and run 117tests" respectively. "both" is the default. GDB_PERFTEST_TIMEOUT 118specify the timeout, which is 3000 in default. The result of 119performance test is appended in `testsuite/perftest.log'. 120 121Testsuite Parameters 122******************** 123 124The following parameters are DejaGNU variables that you can set to 125affect the testsuite run globally. 126 127TRANSCRIPT 128 129You may find it useful to have a transcript of the commands that the 130testsuite sends to GDB, for instance if GDB crashes during the run, 131and you want to reconstruct the sequence of commands. 132 133If the DejaGNU variable TRANSCRIPT is set (to any value), each 134invocation of GDB during the test run will get a transcript file 135written into the DejaGNU output directory. The file will have the 136name transcript.<n>, where <n> is an integer. The first line of the 137file shows the invocation command with all the options passed to it, 138while subsequent lines are the GDB commands. A `make check' might 139look like this: 140 141 make check RUNTESTFLAGS=TRANSCRIPT=y 142 143The transcript may not be complete, as for instance tests of command 144completion may show only partial command lines. 145 146GDB 147 148By default, the testsuite exercises the GDB in the build directory, 149but you can set GDB to be a pathname to a different version. For 150instance, 151 152 make check RUNTESTFLAGS=GDB=/usr/bin/gdb 153 154runs the testsuite on the GDB in /usr/bin. 155 156GDBSERVER 157 158You can set GDBSERVER to be a particular GDBserver of interest, so for 159instance 160 161 make check RUNTESTFLAGS="GDB=/usr/bin/gdb GDBSERVER=/usr/bin/gdbserver" 162 163checks both the installed GDB and GDBserver. 164 165INTERNAL_GDBFLAGS 166 167Command line options passed to all GDB invocations. 168 169The default is "-nw -nx". 170 171`-nw' disables any of the windowed interfaces. 172`-nx' disables ~/.gdbinit, so that it doesn't interfere with 173the tests. 174 175This is actually considered an internal variable, and you 176won't normally want to change it. However, in some situations, 177this may be tweaked as a last resort if the testsuite doesn't 178have direct support for the specifics of your environment. 179The testsuite does not override a value provided by the user. 180 181As an example, when testing an installed GDB that has been 182configured with `--with-system-gdbinit', like by default, 183you do not want ~/.gdbinit to interfere with tests, but, you 184may want the system .gdbinit file loaded. As there's no way to 185ask the testsuite, or GDB, to load the system gdbinit but 186not ~/.gdbinit, a workaround is then to remove `-nx' from 187INTERNAL_GDBFLAGS, and point $HOME at a directory without 188a .gdbinit. For example: 189 190 cd testsuite 191 HOME=`pwd` runtest \ 192 GDB=/usr/bin/gdb \ 193 GDBSERVER=/usr/bin/gdbserver \ 194 INTERNAL_GDBFLAGS=-nw 195 196GDB_PARALLEL 197 198To use parallel testing mode without using the the Makefile, set 199GDB_PARALLEL on the runtest command line to "yes". Before starting 200the tests, you must ensure that the directories cache, outputs, and 201temp in the test suite build directory are either empty or have been 202deleted. cache in particular is used to share data across invocations 203of runtest, and files there may affect the test results. The Makefile 204automatically does these deletions. 205 206FORCE_PARALLEL 207 208Setting FORCE_PARALLEL to any non-empty value forces parallel testing 209mode even if RUNTESTFLAGS is not empty. 210 211FORCE_SEPARATE_MI_TTY 212 213Setting FORCE_MI_SEPARATE_UI to 1 forces all MI testing to start GDB 214in console mode, with MI running on a separate TTY, on a secondary UI 215started with "new-ui". 216 217GDB_INOTIFY 218 219For debugging parallel mode, it is handy to be able to see when a test 220case writes to a file outside of its designated output directory. 221 222If you have the inotify-tools package installed, you can set the 223GDB_INOTIFY variable on the runtest command line. This will cause the 224test suite to watch for parallel-unsafe file creations and report 225them, both to stdout and in the test suite log file. 226 227This setting is only meaningful in conjunction with GDB_PARALLEL. 228 229TESTS 230 231This variable is used to specify which set of tests to run. 232It is passed to make (not runtest) and its contents are a space separated 233list of tests to run. 234 235If using GNU make then the contents are wildcard-expanded using 236GNU make's $(wildcard) function. Test paths must be fully specified, 237relative to the "testsuite" subdirectory. This allows one to run all 238tests in a subdirectory by passing "gdb.subdir/*.exp", or more simply 239by using the check-gdb.subdir target in the Makefile. 240 241If for some strange reason one wanted to run all tests that begin with 242the letter "d" that is also possible: TESTS="*/d*.exp". 243 244Do not write */*.exp to specify all tests (assuming all tests are only 245nested one level deep, which is not necessarily true). This will pick up 246.exp files in ancillary directories like "lib" and "config". 247Instead write gdb.*/*.exp. 248 249Example: 250 251 make -j10 check TESTS="gdb.server/[s-w]*.exp */x*.exp" 252 253If not using GNU make then the value is passed directly to runtest. 254If not specified, all tests are run. 255 256READ1 257 258This make (not runtest) variable is used to specify whether the 259testsuite preloads the read1.so library into expect. Any non-empty 260value means true. See "Race detection" below. 261 262Race detection 263************** 264 265The testsuite includes a mechanism that helps detect test races. 266 267For example, say the program running under expect outputs "abcd", and 268a test does something like this: 269 270 expect { 271 "a.*c" { 272 } 273 "b" { 274 } 275 "a" { 276 } 277 } 278 279Which case happens to match depends on what expect manages to read 280into its internal buffer in one go. If it manages to read three bytes 281or more, then the first case matches. If it manages to read two 282bytes, then the second case matches. If it manages to read only one 283byte, then the third case matches. 284 285To help detect these cases, the race detection mechanism preloads a 286library into expect that forces the `read' system call to always 287return at most 1 byte. 288 289To enable this, either pass a non-empty value in the READ1 make 290variable, or use the check-read1 make target instead of check. 291 292Examples: 293 294 make -j10 check-read1 TESTS="*/paginate-*.exp" 295 make -j10 check READ1="1" 296 297Testsuite Configuration 298*********************** 299 300It is possible to adjust the behavior of the testsuite by defining 301the global variables listed below, either in a `site.exp' file, 302or in a board file. 303 304gdb_test_timeout 305 306Defining this variable changes the default timeout duration used 307during communication with GDB. More specifically, the global variable 308used during testing is `timeout', but this variable gets reset to 309`gdb_test_timeout' at the beginning of each testcase, which ensures 310that any local change to `timeout' in a testcase does not affect 311subsequent testcases. 312 313This global variable comes in handy when the debugger is slower than 314normal due to the testing environment, triggering unexpected `TIMEOUT' 315test failures. Examples include when testing on a remote machine, or 316against a system where communications are slow. 317 318If not specifically defined, this variable gets automatically defined 319to the same value as `timeout' during the testsuite initialization. 320The default value of the timeout is defined in the file 321`testsuite/config/unix.exp' (at least for Unix hosts; board files may 322have their own values). 323 324gdb_reverse_timeout 325 326Defining this variable changes the default timeout duration when tests 327under gdb.reverse directory are running. Process record and reverse 328debugging is so slow that its tests have unexpected `TIMEOUT' test 329failures. This global variable is useful to bump up the value of 330`timeout' for gdb.reverse tests and doesn't cause any delay where 331actual failures happen in the rest of the testsuite. 332 333 334Board Settings 335************** 336 337DejaGNU includes the concept of a "board file", which specifies 338testing details for a particular target (which are often bare circuit 339boards, thus the name). 340 341In the GDB testsuite specifically, the board file may include a 342number of "board settings" that test cases may check before deciding 343whether to exercise a particular feature. For instance, a board 344lacking any I/O devices, or perhaps simply having its I/O devices 345not wired up, should set `noinferiorio'. 346 347Here are the supported board settings: 348 349gdb,cannot_call_functions 350 351 The board does not support inferior call, that is, invoking inferior 352 functions in GDB. 353 354gdb,can_reverse 355 356 The board supports reverse execution. 357 358gdb,no_hardware_watchpoints 359 360 The board does not support hardware watchpoints. 361 362gdb,nofileio 363 364 GDB is unable to intercept target file operations in remote and 365 perform them on the host. 366 367gdb,noinferiorio 368 369 The board is unable to provide I/O capability to the inferior. 370 371gdb,noresults 372 373 A program will not return an exit code or result code (or the value 374 of the result is undefined, and should not be looked at). 375 376gdb,nosignals 377 378 The board does not support signals. 379 380gdb,skip_huge_test 381 382 Skip time-consuming tests on the board with slow connection. 383 384gdb,skip_float_tests 385 386 Skip tests related to floating point. 387 388gdb,use_precord 389 390 The board supports process record. 391 392gdb_init_command 393gdb_init_commands 394 395 Commands to send to GDB every time a program is about to be run. The 396 first of these settings defines a single command as a string. The 397 second defines a TCL list of commands being a string each. The commands 398 are sent one by one in a sequence, first from `gdb_init_command', if any, 399 followed by individual commands from `gdb_init_command', if any, in this 400 list's order. 401 402gdb_server_prog 403 404 The location of GDBserver. If GDBserver somewhere other than its 405 default location is used in test, specify the location of GDBserver in 406 this variable. The location is a file name for GDBserver, and may be 407 either absolute or relative to the testsuite subdirectory of the build 408 directory. 409 410in_proc_agent 411 412 The location of the in-process agent (used for fast tracepoints and 413 other special tests). If the in-process agent of interest is anywhere 414 other than its default location, set this variable. The location is a 415 filename, and may be either absolute or relative to the testsuite 416 subdirectory of the build directory. 417 418noargs 419 420 GDB does not support argument passing for inferior. 421 422no_long_long 423 424 The board does not support type long long. 425 426use_cygmon 427 428 The board is running the monitor Cygmon. 429 430use_gdb_stub 431 432 The tests are running with a GDB stub. 433 434exit_is_reliable 435 436 Set to true if GDB can assume that letting the program run to end 437 reliably results in program exits being reported as such, as opposed 438 to, e.g., the program ending in an infinite loop or the board 439 crashing/resetting. If not set, this defaults to $use_gdb_stub. In 440 other words, native targets are assumed reliable by default, and 441 remote stubs assumed unreliable. 442 443gdb,predefined_tsv 444 445 The predefined trace state variables the board has. 446 447gdb,no_thread_names 448 449 The target doesn't support thread names. 450 451Testsuite Organization 452********************** 453 454The testsuite is entirely contained in `gdb/testsuite'. The main 455directory of the testsuite includes some makefiles and configury, but 456these are minimal, and used for little besides cleaning up, since the 457tests themselves handle the compilation of the programs that GDB will 458run. 459 460The file `testsuite/lib/gdb.exp' contains common utility procs useful 461for all GDB tests, while the directory testsuite/config contains 462configuration-specific files, typically used for special-purpose 463definitions of procs like `gdb_load' and `gdb_start'. 464 465The tests themselves are to be found in directories named 466'testsuite/gdb.* and subdirectories of those. The names of the test 467files must always end with ".exp". DejaGNU collects the test files by 468wildcarding in the test directories, so both subdirectories and 469individual files typically get chosen and run in alphabetical order. 470 471The following lists some notable types of subdirectories and what they 472are for. Since DejaGNU finds test files no matter where they are 473located, and since each test file sets up its own compilation and 474execution environment, this organization is simply for convenience and 475intelligibility. 476 477gdb.base 478 479This is the base testsuite. The tests in it should apply to all 480configurations of GDB (but generic native-only tests may live here). 481The test programs should be in the subset of C that is both valid 482ANSI/ISO C, and C++. 483 484gdb.<lang> 485 486Language-specific tests for any language besides C. Examples are 487gdb.cp for C++ and gdb.java for Java. 488 489gdb.<platform> 490 491Non-portable tests. The tests are specific to a specific 492configuration (host or target), such as eCos. 493 494gdb.arch 495 496Architecture-specific tests that are (usually) cross-platform. 497 498gdb.<subsystem> 499 500Tests that exercise a specific GDB subsystem in more depth. For 501instance, gdb.disasm exercises various disassemblers, while 502gdb.stabs tests pathways through the stabs symbol reader. 503 504gdb.perf 505 506GDB performance tests. 507 508Writing Tests 509************* 510 511In many areas, the GDB tests are already quite comprehensive; you 512should be able to copy existing tests to handle new cases. Be aware 513that older tests may use obsolete practices but have not yet been 514updated. 515 516You should try to use `gdb_test' whenever possible, since it includes 517cases to handle all the unexpected errors that might happen. However, 518it doesn't cost anything to add new test procedures; for instance, 519gdb.base/exprs.exp defines a `test_expr' that calls `gdb_test' 520multiple times. 521 522Only use `send_gdb' and `gdb_expect' when absolutely necessary. Even 523if GDB has several valid responses to a command, you can use 524`gdb_test_multiple'. Like `gdb_test', `gdb_test_multiple' recognizes 525internal errors and unexpected prompts. 526 527Do not write tests which expect a literal tab character from GDB. On 528some operating systems (e.g. OpenBSD) the TTY layer expands tabs to 529spaces, so by the time GDB's output reaches `expect' the tab is gone. 530 531The source language programs do *not* need to be in a consistent 532style. Since GDB is used to debug programs written in many different 533styles, it's worth having a mix of styles in the testsuite; for 534instance, some GDB bugs involving the display of source lines might 535never manifest themselves if the test programs used GNU coding style 536uniformly. 537 538Some testcase results need more detailed explanation: 539 540KFAIL 541 542Use KFAIL for known problem of GDB itself. You must specify the GDB 543bug report number, as in these sample tests: 544 545 kfail "gdb/13392" "continue to marker 2" 546 547or 548 549 setup_kfail gdb/13392 "*-*-*" 550 kfail "continue to marker 2" 551 552 553XFAIL 554 555Short for "expected failure", this indicates a known problem with the 556environment. This could include limitations of the operating system, 557compiler version, and other components. 558 559This example from gdb.base/attach-pie-misread.exp is a sanity check 560for the target environment: 561 562 # On x86_64 it is commonly about 4MB. 563 if {$stub_size > 25000000} { 564 xfail "stub size $stub_size is too large" 565 return 566 } 567 568You should provide bug report number for the failing component of the 569environment, if such bug report is available, as with this example 570referring to a GCC problem: 571 572 if {[test_compiler_info {gcc-[0-3]-*}] 573 || [test_compiler_info {gcc-4-[0-5]-*}]} { 574 setup_xfail "gcc/46955" *-*-* 575 } 576 gdb_test "python print ttype.template_argument(2)" "&C::c" 577 578Note that it is also acceptable, and often preferable, to avoid 579running the test at all. This is the better option if the limitation 580is intrinsic to the environment, rather than a bug expected to be 581fixed in the near future. 582