From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29516 invoked by alias); 7 May 2002 00:48:23 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 29508 invoked from network); 7 May 2002 00:48:20 -0000 Received: from unknown (HELO cygnus.com) (205.180.83.203) by sources.redhat.com with SMTP; 7 May 2002 00:48:20 -0000 Received: from reddwarf.sfbay.redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id RAA29497; Mon, 6 May 2002 17:48:19 -0700 (PDT) Received: (from msnyder@localhost) by reddwarf.sfbay.redhat.com (8.11.2/8.11.2) id g470ZL426477; Mon, 6 May 2002 17:35:21 -0700 Date: Mon, 06 May 2002 17:48:00 -0000 From: Michael Snyder Message-Id: <200205070035.g470ZL426477@reddwarf.sfbay.redhat.com> To: gdb-patches@sources.redhat.com Subject: [PATCH] Add "needs_status_wrapper" feature to gdb testsuite. Cc: fnasser@redhat.com X-SW-Source: 2002-05/txt/msg00140.txt.bz2 This is a feature that has been being used in the GCC testsuite, but I was completely unaware of it before now. This enables tests that look for an exit status to succeed even on targets that don't implement the exit status. I think it's pretty cool! I've modified two tests from gdb/testsuite to take advantage of it. I'm not sure which other tests may also need modification, but now there are a couple of examples to look at. Index: lib/gdb.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v retrieving revision 1.15 diff -p -r1.15 gdb.exp *** lib/gdb.exp 3 Apr 2002 16:17:11 -0000 1.15 --- lib/gdb.exp 7 May 2002 00:10:06 -0000 *************** proc gdb_preprocess {source dest args} { *** 1092,1099 **** --- 1092,1125 ---- return $result; } + set gdb_wrapper_initialized 0 + + proc gdb_wrapper_init { args } { + global gdb_wrapper_initialized; + global gdb_wrapper_file; + global gdb_wrapper_flags; + + if { $gdb_wrapper_initialized == 1 } { return; } + + if {[target_info exists needs_status_wrapper] && \ + [target_info needs_status_wrapper] != "0" && \ + ![info exists gdb_wrapper_file]} { + set result [build_wrapper "testglue.o"]; + if { $result != "" } { + set gdb_wrapper_file [lindex $result 0]; + set gdb_wrapper_flags [lindex $result 1]; + } else { + warning "Status wrapper failed to build." + } + } + set gdb_wrapper_initialized 1 + } + proc gdb_compile {source dest type options} { global GDB_TESTCASE_OPTIONS; + global gdb_wrapper_file; + global gdb_wrapper_flags; + global gdb_wrapper_initialized; if [target_info exists gdb_stub] { set options2 { "additional_flags=-Dusestubs" } *************** proc gdb_compile {source dest type optio *** 1110,1115 **** --- 1136,1150 ---- } verbose "options are $options" verbose "source is $source $dest $type $options" + + if { $gdb_wrapper_initialized == 0 } { gdb_wrapper_init } + + if {[target_info exists needs_status_wrapper] && \ + [target_info needs_status_wrapper] != "0" && \ + [info exists gdb_wrapper_file]} { + lappend options "libs=${gdb_wrapper_file}" + lappend options "ldflags=${gdb_wrapper_flags}" + } set result [target_compile $source $dest $type $options]; regsub "\[\r\n\]*$" "$result" "" result; Index: gdb.base/a2-run.exp 2002-05-06 Michael Snyder Enable the "needs_status_wrapper" testsuite feature. * lib/gdb.exp (gdb_wrapper_init): New procedure. (gdb_compile): Conditionally call gdb_wrapper_init. * gdb.base/a2-run.exp: Recognize output from status wrapper. * gdb.c++/method.exp: Recognize output from status wrapper. =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/a2-run.exp,v retrieving revision 1.4 diff -p -r1.4 a2-run.exp *** gdb.base/a2-run.exp 14 Feb 2002 06:25:18 -0000 1.4 --- gdb.base/a2-run.exp 7 May 2002 00:10:06 -0000 *************** if [istarget "*-*-vxworks*"] then { *** 80,85 **** --- 80,88 ---- -re ".*usage: factorial .*Program exited with code 01.*$gdb_prompt $" { pass "run \"$testfile\" with no args" } + -re ".*usage: factorial .* EXIT code 1.*Program exited normally.*$gdb_prompt $" { + pass "run \"$testfile\" with no args (exit wrapper)" + } -re ".*$gdb_prompt $" { fail "run \"$testfile\" with no args" verbose "expect_out is $expect_out(buffer)" 2 Index: gdb.c++/method.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.c++/method.exp,v retrieving revision 1.7 diff -p -r1.7 method.exp *** gdb.c++/method.exp 8 Apr 2002 22:41:46 -0000 1.7 --- gdb.c++/method.exp 7 May 2002 00:10:06 -0000 *************** gdb_expect { *** 180,185 **** timeout { fail "(timeout) ptype A" } } ! gdb_test "cont" \ ! "Continuing.\r\n\r\nProgram exited normally." \ ! "finish program" --- 180,194 ---- timeout { fail "(timeout) ptype A" } } ! send_gdb "cont\n" ! gdb_expect { ! -re "Continuing\r\n\r\nProgram exited normally.*$gdb_prompt $" { ! pass "finish program" ! } ! -re "Continuing.* EXIT code 0.*Program exited normally.*$gdb_prompt $" { ! pass "finish program (exit wrapper)" ! } ! -re ".*$gdb_prompt $" { fail "finish program" } ! default:{ fail "finish program (timeout)" } ! } !