Home | History | Annotate | Line # | Download | only in gdb.base
annota3.exp revision 1.1.1.8
      1  1.1.1.8  christos # Copyright 2003-2024 Free Software Foundation, Inc.
      2      1.1  christos 
      3      1.1  christos # This program is free software; you can redistribute it and/or modify
      4      1.1  christos # it under the terms of the GNU General Public License as published by
      5      1.1  christos # the Free Software Foundation; either version 3 of the License, or
      6      1.1  christos # (at your option) any later version.
      7      1.1  christos #
      8      1.1  christos # This program is distributed in the hope that it will be useful,
      9      1.1  christos # but WITHOUT ANY WARRANTY; without even the implied warranty of
     10      1.1  christos # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11      1.1  christos # GNU General Public License for more details.
     12      1.1  christos #
     13      1.1  christos # You should have received a copy of the GNU General Public License
     14      1.1  christos # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15      1.1  christos 
     16      1.1  christos # This file was written by Elena Zannoni (ezannoni (at) cygnus.com)
     17      1.1  christos 
     18      1.1  christos 
     19  1.1.1.5  christos # This testcase cannot use runto_main because of the different prompt
     20  1.1.1.5  christos # we get when using annotation level 2.
     21      1.1  christos #
     22  1.1.1.8  christos require target_can_use_run_cmd
     23      1.1  christos 
     24      1.1  christos 
     25      1.1  christos #
     26      1.1  christos # test running programs
     27      1.1  christos #
     28      1.1  christos 
     29      1.1  christos standard_testfile .c
     30      1.1  christos 
     31      1.1  christos if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
     32  1.1.1.4  christos     untested "failed to compile"
     33      1.1  christos     return -1
     34      1.1  christos }
     35      1.1  christos 
     36      1.1  christos 
     37      1.1  christos clean_restart ${binfile}
     38      1.1  christos 
     39      1.1  christos # The commands we test here produce many lines of output; disable "press
     40      1.1  christos # <return> to continue" prompts.
     41      1.1  christos gdb_test_no_output "set height 0"
     42      1.1  christos 
     43      1.1  christos #
     44  1.1.1.3  christos # break in main
     45      1.1  christos #
     46      1.1  christos 
     47      1.1  christos set main_line [gdb_get_line_number "break main"]
     48      1.1  christos 
     49  1.1.1.3  christos gdb_test "break ${srcfile}:${main_line}" \
     50      1.1  christos     "Breakpoint.*at.* file .*$srcfile, line $main_line\\." \
     51      1.1  christos     "breakpoint main"
     52      1.1  christos 
     53      1.1  christos 
     54      1.1  christos # NOTE: this prompt is OK only when the annotation level is > 1
     55      1.1  christos 
     56      1.1  christos # NOTE: When this prompt is in use the gdb_test procedure cannot be
     57      1.1  christos # used because it assumes that the last char after the gdb_prompt is a
     58      1.1  christos # white space. This is not true with this annotated prompt. So we must
     59      1.1  christos # use send_gdb and gdb_expect or gdb_expect_list.
     60      1.1  christos 
     61      1.1  christos set old_gdb_prompt $gdb_prompt
     62      1.1  christos set gdb_prompt "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n"
     63      1.1  christos 
     64      1.1  christos 
     65      1.1  christos 
     66      1.1  christos #
     67      1.1  christos # set the annotation level to 3
     68      1.1  christos #
     69      1.1  christos # of course, this will test:
     70      1.1  christos # annotate-pre-prompt
     71      1.1  christos # annotate-prompt
     72      1.1  christos # annotate-post-prompt (in the next block)
     73      1.1  christos #
     74      1.1  christos send_gdb "set annotate 3\n"
     75      1.1  christos gdb_expect_list "annotation set at level 3" "\r\n$gdb_prompt$" {
     76      1.1  christos     "set annotate 3"
     77      1.1  christos }
     78      1.1  christos 
     79      1.1  christos #
     80      1.1  christos # if construct:
     81      1.1  christos #
     82      1.1  christos gdb_test_multiple "if 1" "start if construct" {
     83      1.1  christos     -re "^if 1\r\n\r\n\032\032post-prompt\r\n\r\n\032\032pre-commands\r\n >\r\n\032\032commands\r\n$" {
     84      1.1  christos 	pass "start if construct"
     85      1.1  christos     }
     86      1.1  christos }
     87      1.1  christos 
     88      1.1  christos gdb_test_multiple "end" "end if construct" {
     89      1.1  christos     -re "^end\r\n\r\n\032\032post-commands\r\n$gdb_prompt$" {
     90      1.1  christos  	pass "end if construct"
     91      1.1  christos     }
     92      1.1  christos }
     93      1.1  christos 
     94      1.1  christos #
     95      1.1  christos # info break:
     96      1.1  christos #
     97      1.1  christos send_gdb "info break\n"
     98      1.1  christos gdb_expect_list "breakpoint info" "$gdb_prompt$" [concat {
     99      1.1  christos     "\r\n\032\032post-prompt\r\n"
    100      1.1  christos     "Num     Type           Disp Enb Address    +What\r\n" } [list \
    101      1.1  christos     "1       breakpoint     keep y   0x\[0-9a-zA-Z\]+ +in main at .*annota3.c:$main_line\r\n"]]
    102      1.1  christos 
    103      1.1  christos 
    104      1.1  christos #
    105      1.1  christos # run to a break point will test:
    106      1.1  christos #
    107      1.1  christos #exp_internal 1
    108      1.1  christos send_gdb "run\n"
    109      1.1  christos gdb_expect_list "run until main breakpoint" "$gdb_prompt$" [concat {
    110      1.1  christos     "\r\n\032\032post-prompt\r\n"
    111      1.1  christos     "Starting program: .*annota3(|\.exe) \r\n"
    112      1.1  christos     "\r\n\032\032starting\r\n"
    113      1.1  christos     "\r\n\032\032breakpoint 1\r\n"
    114      1.1  christos     "\r\n"
    115      1.1  christos     "Breakpoint 1, "
    116      1.1  christos     "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
    117      1.1  christos     "main \\(\\) at .*annota3.c:$main_line\r\n"] [list \
    118      1.1  christos     "\r\n\032\032source.*annota3.c:$main_line:.*:beg:0x\[0-9a-z\]+\r\n"] {
    119      1.1  christos     "\r\n\032\032stopped\r\n"
    120      1.1  christos }]
    121      1.1  christos #exp_internal 0
    122      1.1  christos #exit 0
    123      1.1  christos 
    124      1.1  christos #
    125      1.1  christos # Let's do a next, to get to a point where the array is initialized
    126      1.1  christos # We don't care about the annotated output for this operation, it is the same as
    127      1.1  christos # the one produced by run above
    128      1.1  christos #
    129      1.1  christos send_gdb "next\n"
    130      1.1  christos gdb_expect_list "go after array init line" "$gdb_prompt$" {
    131      1.1  christos     "\r\n\032\032post-prompt\r\n"
    132      1.1  christos     "\r\n\032\032starting\r\n"
    133      1.1  christos     "\r\n\032\032source .*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
    134      1.1  christos     "\r\n\032\032stopped\r\n"
    135      1.1  christos }
    136      1.1  christos 
    137      1.1  christos 
    138      1.1  christos #
    139      1.1  christos # printing the array:
    140      1.1  christos #
    141      1.1  christos send_gdb "print my_array\n"
    142      1.1  christos gdb_expect_list "print array" "$gdb_prompt$" {
    143      1.1  christos     "\r\n\032\032post-prompt\r\n"
    144      1.1  christos     ".*= .1, 2, 3.\r\n"
    145      1.1  christos }
    146      1.1  christos 
    147      1.1  christos 
    148      1.1  christos #
    149      1.1  christos # this should generate an error message, so to test:
    150      1.1  christos # annotate-error-begin
    151      1.1  christos # FIXME: annotate-error not tested
    152      1.1  christos #
    153      1.1  christos 
    154      1.1  christos #exp_internal 1
    155      1.1  christos send_gdb "print non_existent_value\n"
    156      1.1  christos gdb_expect_list "print non_existent_value" "$gdb_prompt$" {
    157      1.1  christos     "\r\n\032\032post-prompt\r\n"
    158      1.1  christos     "\r\n\032\032error-begin\r\n"
    159      1.1  christos     "No symbol \"non_existent_value\" in current context.\r\n"
    160      1.1  christos     "\r\n\032\032error\r\n"
    161      1.1  christos }
    162      1.1  christos 
    163      1.1  christos 
    164      1.1  christos #
    165      1.1  christos # break at signal handler
    166      1.1  christos #
    167      1.1  christos send_gdb "break handle_USR1\n"
    168      1.1  christos gdb_expect_list "breakpoint handle_USR1" "$gdb_prompt$" {
    169      1.1  christos     "\r\n\032\032post-prompt\r\n"
    170      1.1  christos     "Breakpoint.*at 0x\[0-9a-z\]+: file.*annota3.c, line.*\r\n"
    171      1.1  christos }
    172      1.1  christos 
    173      1.1  christos #
    174      1.1  christos # break at printf. When we are stopped at printf, we can test
    175      1.1  christos #
    176      1.1  christos send_gdb "break printf\n"
    177      1.1  christos gdb_expect_list "breakpoint printf" "$gdb_prompt$" {
    178      1.1  christos     "\r\n\032\032post-prompt\r\n"
    179      1.1  christos     "Breakpoint.*at 0x\[0-9a-z\]+.*"
    180      1.1  christos }
    181      1.1  christos 
    182      1.1  christos #
    183      1.1  christos # get to printf
    184      1.1  christos #
    185      1.1  christos send_gdb "continue\n"
    186      1.1  christos gdb_expect_list "continue to printf" "$gdb_prompt$" {
    187      1.1  christos     "\r\n\032\032post-prompt\r\n"
    188      1.1  christos     "Continuing.\r\n"
    189      1.1  christos     "\r\n\032\032starting\r\n"
    190      1.1  christos     "\r\n\032\032breakpoint 3\r\n"
    191      1.1  christos     "\r\n"
    192      1.1  christos     "Breakpoint 3, \[^\r\n\]*\r\n"
    193      1.1  christos     "\r\n\032\032stopped\r\n"
    194      1.1  christos }
    195      1.1  christos 
    196      1.1  christos send_gdb "backtrace\n"
    197      1.1  christos gdb_expect_list "backtrace from shlibrary" "$gdb_prompt$" {
    198      1.1  christos     "\r\n\032\032post-prompt\r\n"
    199      1.1  christos     "#0 .* .*printf(@\[^ ]*)? \[^\r\n\]*\r\n"
    200      1.1  christos     "#1 .* main \[^\r\n\]*\r\n"
    201      1.1  christos }
    202      1.1  christos 
    203      1.1  christos 
    204      1.1  christos #
    205      1.1  christos # test printing a frame with some arguments:
    206      1.1  christos #
    207      1.1  christos 
    208      1.1  christos if [target_info exists gdb,nosignals] {
    209      1.1  christos     unsupported "send SIGUSR1"
    210      1.1  christos     unsupported "backtrace @ signal handler"
    211      1.1  christos } else {
    212      1.1  christos     send_gdb "signal SIGUSR1\n"
    213      1.1  christos     gdb_expect_list "send SIGUSR1" "$gdb_prompt$" {
    214      1.1  christos 	"\r\n\032\032post-prompt\r\n"
    215      1.1  christos 	"Continuing with signal SIGUSR1.\r\n"
    216      1.1  christos 	"\r\n\032\032starting\r\n"
    217      1.1  christos 	"\r\n\032\032breakpoint 2\r\n"
    218      1.1  christos 	"\r\n"
    219      1.1  christos 	"Breakpoint 2, "
    220      1.1  christos 	"\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n"
    221      1.1  christos 	"handle_USR1 \\(sig=\[0-9\]+\\) at .*annota3.c:\[0-9\]+\r\n"
    222      1.1  christos 	"\r\n\032\032source .*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
    223      1.1  christos 	"\r\n\032\032stopped\r\n"
    224      1.1  christos     }
    225      1.1  christos 
    226      1.1  christos     #
    227      1.1  christos     # test:
    228      1.1  christos     #
    229      1.1  christos     send_gdb "backtrace\n"
    230      1.1  christos     gdb_expect_list "backtrace @ signal handler" "$gdb_prompt$" {
    231      1.1  christos 	"#0 +handle_USR1 \[^\r\n\]+\r\n"
    232      1.1  christos 	"#1 +.signal handler called.\r\n"
    233      1.1  christos 	"#2 .* .*printf(@\[^ \]*)? \[^\r\n\]+\r\n"
    234      1.1  christos 	"#3 .* main \[^\r\n\]+\r\n"
    235      1.1  christos     }
    236      1.1  christos }
    237      1.1  christos 
    238      1.1  christos #
    239      1.1  christos # delete all the breakpoints
    240      1.1  christos #
    241      1.1  christos send_gdb "delete 1\n"
    242      1.1  christos gdb_expect_list "delete bp 1" "$gdb_prompt$" {
    243      1.1  christos     "\r\n\032\032post-prompt\r\n"
    244      1.1  christos }
    245      1.1  christos 
    246      1.1  christos send_gdb "delete 2\n"
    247      1.1  christos gdb_expect_list "delete bp 2" "$gdb_prompt$" {
    248      1.1  christos     "\r\n\032\032post-prompt\r\n"
    249      1.1  christos }
    250      1.1  christos 
    251      1.1  christos send_gdb "delete 3\n"
    252      1.1  christos gdb_expect_list "delete bp 3" "$gdb_prompt$" {
    253      1.1  christos     "\r\n\032\032post-prompt\r\n"
    254      1.1  christos }
    255      1.1  christos 
    256      1.1  christos #
    257  1.1.1.3  christos # break in main, after value is initialized. This is in preparation
    258      1.1  christos # to test the annotate output for the display command.
    259      1.1  christos #
    260  1.1.1.3  christos send_gdb "break ${srcfile}:${main_line}\n"
    261  1.1.1.3  christos gdb_expect_list "break in main" "$gdb_prompt$" [concat {
    262      1.1  christos     "\r\n\032\032post-prompt\r\n" } [list \
    263      1.1  christos     "Breakpoint 4 at 0x\[0-9a-z\]+: file .*annota3.c, line $main_line.\r\n"]]
    264      1.1  christos 
    265      1.1  christos #
    266      1.1  christos # display the value
    267      1.1  christos #
    268      1.1  christos send_gdb "display value\n"
    269      1.1  christos gdb_expect_list "set up display" "$gdb_prompt$" {
    270      1.1  christos     "\r\n\032\032post-prompt\r\n"
    271      1.1  christos     "1: value = 7\r\n"
    272      1.1  christos }
    273      1.1  christos 
    274  1.1.1.7  christos # Get the core into the output directory.
    275  1.1.1.7  christos if {![is_remote host]} {
    276  1.1.1.7  christos     gdb_test -prompt "$gdb_prompt$" \
    277  1.1.1.7  christos 	"set cwd [file dirname $binfile]" "" \
    278  1.1.1.7  christos 	"set inferior cwd to test directory"
    279  1.1.1.7  christos }
    280      1.1  christos 
    281      1.1  christos # should ask query. Test annotate-query.
    282      1.1  christos # we don't care about anything else here, only the query.
    283      1.1  christos 
    284      1.1  christos send_gdb "run\n"
    285      1.1  christos gdb_expect {
    286      1.1  christos   -re "pre-query.*already.*\\(y or n\\).*query\r\n" {
    287      1.1  christos          send_gdb "y\n"
    288      1.1  christos          gdb_expect {
    289      1.1  christos 	     -re ".*post-query.*$gdb_prompt$" \
    290      1.1  christos 		     { pass "re-run" }
    291      1.1  christos 	     -re ".*$gdb_prompt$"  { fail "re-run" }
    292      1.1  christos 	     timeout { fail "re-run (timeout)" }
    293      1.1  christos 	 }
    294      1.1  christos      }
    295      1.1  christos   -re ".*$gdb_prompt$"  { fail "re-run" }
    296      1.1  christos   timeout { fail "re-run (timeout)" }
    297      1.1  christos }
    298      1.1  christos 
    299      1.1  christos #
    300      1.1  christos # Test that breakpoints-invalid is issued once and only once for
    301      1.1  christos # breakpoint ignore count changes, after annotation stopped.
    302      1.1  christos # NOTE: breakpoints-invalid annotations have been removed from
    303      1.1  christos # level 3 but keep these tests for continuity and comparison
    304      1.1  christos # with annota1.exp.
    305      1.1  christos 
    306      1.1  christos set value_inc_line [gdb_get_line_number "increment value"]
    307      1.1  christos 
    308      1.1  christos send_gdb "break $value_inc_line\n"
    309      1.1  christos gdb_expect_list  "break at value++" "$gdb_prompt$" [concat {
    310      1.1  christos     "\r\n\032\032post-prompt\r\n" } [list \
    311      1.1  christos     "Breakpoint 5 at 0x\[0-9a-z\]+: file .*annota3.c, line $value_inc_line.\r\n"]]
    312      1.1  christos 
    313      1.1  christos send_gdb "ignore 5 4\n"
    314      1.1  christos gdb_expect_list "ignore 5 4" "$gdb_prompt$" {
    315      1.1  christos     "\r\n\032\032post-prompt\r\n"
    316      1.1  christos     "Will ignore next 4 crossings of breakpoint 5"
    317      1.1  christos     "\r\n"
    318      1.1  christos }
    319      1.1  christos 
    320      1.1  christos send_gdb "continue\n"
    321      1.1  christos gdb_expect_list "annotate ignore count change" "$gdb_prompt$" [concat {
    322      1.1  christos     "\r\n\032\032post-prompt\r\n"
    323      1.1  christos     "\r\n\032\032breakpoint 5\r\n"
    324      1.1  christos     "\r\n"
    325      1.1  christos     "Breakpoint 5, "
    326      1.1  christos     "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
    327      1.1  christos     "main \\(\\) at .*annota3.c:$value_inc_line\r\n"] [list \
    328      1.1  christos     "\r\n\032\032source .*annota3.c:$value_inc_line:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"] {
    329      1.1  christos     "1: value = 11\r\n"
    330      1.1  christos     "\r\n\032\032stopped\r\n"
    331      1.1  christos }]
    332      1.1  christos 
    333      1.1  christos # check that ignore command is working, or the above can provide
    334      1.1  christos # misleading assurance ...
    335      1.1  christos 
    336      1.1  christos send_gdb "next\n"
    337      1.1  christos gdb_expect_list "next to exit loop" "$gdb_prompt$"  {
    338      1.1  christos     "\r\n\032\032post-prompt\r\n"
    339      1.1  christos     "\r\n\032\032starting\r\n"
    340      1.1  christos     "\r\n\032\032source.*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
    341      1.1  christos     "1: value = 12\r\n"
    342      1.1  christos     "\r\n\032\032stopped\r\n"
    343      1.1  christos }
    344      1.1  christos 
    345      1.1  christos set after_loop_line [gdb_get_line_number "after loop"]
    346      1.1  christos 
    347      1.1  christos send_gdb "next\n"
    348      1.1  christos gdb_expect_list "breakpoint ignore count" "$gdb_prompt$" [concat {
    349      1.1  christos     "\r\n\032\032post-prompt\r\n"
    350      1.1  christos     "\r\n\032\032starting\r\n" } [list \
    351      1.1  christos     "\r\n\032\032source.*annota3.c:$after_loop_line:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"] {
    352      1.1  christos     "1: value = 12\r\n"
    353      1.1  christos     "\r\n\032\032stopped\r\n"
    354      1.1  christos }]
    355      1.1  christos 
    356      1.1  christos # Get the inferior's PID for later.
    357      1.1  christos 
    358      1.1  christos set test "get inferior pid"
    359      1.1  christos set pid -1
    360      1.1  christos gdb_test_multiple "info inferior 1" "$test" {
    361      1.1  christos     -re "process (\[0-9\]*).*$gdb_prompt$" {
    362      1.1  christos 	set pid $expect_out(1,string)
    363      1.1  christos 	pass "$test"
    364      1.1  christos     }
    365      1.1  christos }
    366      1.1  christos 
    367      1.1  christos # Send a signal that is not handled
    368      1.1  christos 
    369      1.1  christos if [target_info exists gdb,nosignals] {
    370      1.1  christos     unsupported "signal sent"
    371      1.1  christos } else {
    372      1.1  christos     send_gdb "signal SIGTRAP\n"
    373      1.1  christos     gdb_expect_list "signal sent" "$gdb_prompt$" {
    374      1.1  christos 	"\r\n\032\032post-prompt\r\n"
    375      1.1  christos 	"Continuing with signal SIGTRAP.\r\n"
    376      1.1  christos 	"\r\n\032\032starting\r\n"
    377      1.1  christos 	"\r\n\032\032signalled\r\n"
    378      1.1  christos 	"\r\nProgram terminated with signal SIGTRAP, Trace.breakpoint trap.\r\n"
    379      1.1  christos 	"The program no longer exists.\r\n"
    380      1.1  christos 	"\r\n\032\032stopped\r\n"
    381      1.1  christos     }
    382      1.1  christos }
    383      1.1  christos 
    384      1.1  christos 
    385      1.1  christos # Check for production of a core file and remove it!
    386  1.1.1.7  christos remove_core $pid
    387      1.1  christos 
    388      1.1  christos # restore the original prompt for the rest of the testsuite
    389      1.1  christos 
    390      1.1  christos set gdb_prompt $old_gdb_prompt
    391