From 27001c664dddac8910b0a9ed55a94d6307e8a9e9 Mon Sep 17 00:00:00 2001 From: Michael Snyder Date: Tue, 15 Sep 1998 22:25:01 +0000 Subject: Mon Sep 14 20:00:04 1998 Michael Snyder * lib/" { + if { [llength $args] > 0 } { + set lastcommand "[lindex $args $state]"; + send_gdb "[lindex $args $state]\n"; + incr state; + set expected_result [lindex $args $state]; + incr state; + } else { + send_gdb "end\n"; + } + exp_continue; + } + -re "\(.*\)\[\r\n\]+\[ \t]*> $" { + if { $expected_result != "" } { + regsub "^\[^\r\n\]+\[\r\n\]+" "$expect_out(1,string)" "" out; + if ![regexp $expected_result $out] { + set passfail "fail"; + } + set expected_result ""; + } + if { $state < [llength $args] } { + send_gdb "[lindex $args $state]\n"; + incr state; + set expected_result [lindex $args $state]; + incr state; + } else { + send_gdb "end\n"; + set expected_result ""; + } + exp_continue; + } + -re "\(.*\)$gdb_prompt $" { + if { $expected_result != "" } { + if ![regexp $expected_result $expect_out(1,string)] { + set passfail "fail"; + } + set expected_result ""; + } + if { [llength $args] < $state } { + set passfail "fail"; + } + } + default { + set passfail "fail"; + } + } + if { $testname != "" } { + $passfail $testname; + } + if { $passfail == "pass" } then { + return 0; + } else { + return 1; + } +} + +# +# Procedure: gdb_tfind_test +# Find a specified trace frame. +# Arguments: +# testname -- identifying string for pass/fail output +# tfind_arg -- frame (line, PC, etc.) identifier +# exp_res -- Expected result of frame test +# args -- Test expression +# Returns: +# zero -- success +# non-zero -- failure +# + +proc gdb_tfind_test { testname tfind_arg exp_res args } { + global gdb_prompt; + + if { "$args" != "" } { + set expr "$exp_res"; + set exp_res "$args"; + } else { + set expr "(int) \$trace_frame"; + } + set passfail "fail"; + + gdb_test "tfind $tfind_arg" "" "" + send_gdb "printf \"x \%d x\\n\", $expr\n"; + gdb_expect 10 { + -re "x (-*\[0-9\]+) x" { + if { $expect_out(1,string) == $exp_res } { + set passfail "pass"; + } + exp_continue; + } + -re "$gdb_prompt $" { } + } + $passfail "$testname"; + if { $passfail == "pass" } then { + return 0; + } else { + return 1; + } +} + +# +# Procedure: gdb_readexpr +# Arguments: +# gdb_expr -- the expression whose value is desired +# Returns: +# the value of gdb_expr, as evaluated by gdb. +# [FIXME: returns -1 on error, which is sometimes a legit value] +# + +proc gdb_readexpr { gdb_expr } { + global gdb_prompt; + + set result -1; + send_gdb "print $gdb_expr\n" + gdb_expect 5 { + -re "\[$\].*= (\[0-9\]+).*$gdb_prompt $" { + set result $expect_out(1,string); + } + -re "$gdb_prompt $" { } + default { } + } + return $result; +} + +# +# Procedure: gdb_gettpnum +# Arguments: +# tracepoint (optional): if supplied, set a tracepoint here. +# Returns: +# the tracepoint ID of the most recently set tracepoint. +# + +proc gdb_gettpnum { tracepoint } { + global gdb_prompt; + + if { $tracepoint != "" } { + gdb_test "trace $tracepoint" "" "" + } + return [gdb_readexpr "\$tpnum"]; +} + + +# +# Procedure: gdb_find_function_baseline +# Arguments: +# func_name -- name of source function +# Returns: +# Sourcefile line of function definition (open curly brace), +# or -1 on failure. Caller must check return value. +# Note: +# Works only for open curly brace at beginning of source line! +# + +proc gdb_find_function_baseline { func_name } { + global gdb_prompt; + + set baseline -1; + + send_gdb "list $func_name\n" +# gdb_expect { +# -re "\[\r\n\]\[\{\].*$gdb_prompt $" { +# set baseline 1 +# } +# } +} + +# +# Procedure: gdb_find_function_baseline +# Arguments: +# filename: name of source file of desired function. +# Returns: +# Sourcefile line of function definition (open curly brace), +# or -1 on failure. Caller must check return value. +# Note: +# Works only for open curly brace at beginning of source line! +# + +proc gdb_find_recursion_test_baseline { filename } { + global gdb_prompt; + + set baseline -1; + + gdb_test "list $filename:1" "" "" + send_gdb "search gdb_recursion_test line 0\n" + gdb_expect { + -re "(\[0-9\]+)\[\t \]+\{.*line 0.*$gdb_prompt $" { + set baseline $expect_out(1,string); + } + -re "$gdb_prompt $" { } + default { } + } + return $baseline; +} -- cgit v1.1