From c0655a1649e1a8cb5393c22589683972af9c9a30 Mon Sep 17 00:00:00 2001 From: Michael Chastain Date: Thu, 27 Mar 2003 21:29:49 +0000 Subject: [PATCH] 2003-03-27 Michael Chastain * gdb.base/gdb1090.exp: New file. * gdb.base/gdb1090.cc: New file. --- gdb/testsuite/ChangeLog | 5 +++ gdb/testsuite/gdb.base/gdb1090.c | 48 +++++++++++++++++++++ gdb/testsuite/gdb.base/gdb1090.exp | 67 ++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 gdb/testsuite/gdb.base/gdb1090.c create mode 100644 gdb/testsuite/gdb.base/gdb1090.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e44bc1357d..7cb22bd5b4 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-03-27 Michael Chastain + + * gdb.base/gdb1090.exp: New file. + * gdb.base/gdb1090.cc: New file. + 2003-03-27 J. Brobecker * gdb.gdb/observer.exp: New regression test. diff --git a/gdb/testsuite/gdb.base/gdb1090.c b/gdb/testsuite/gdb.base/gdb1090.c new file mode 100644 index 0000000000..cd9e2cdecb --- /dev/null +++ b/gdb/testsuite/gdb.base/gdb1090.c @@ -0,0 +1,48 @@ +/* Test program for multi-register variable. + Copyright 2003 Free Software Foundation, Inc. + + This file is part of the gdb testsuite. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + This file was written by Michael Elizabeth Chastain (mec@shout.net). */ + +struct s_2_by_4 +{ + int field_0; + int field_1; +}; + +void marker (struct s_2_by_4 s_whatever) +{ + s_whatever = s_whatever; + return; +} + +void foo () +{ + /* I want this variable in a register but I can't really force it */ + register struct s_2_by_4 s24; + s24.field_0 = 1170; + s24.field_1 = 64701; + marker (s24); + return; +} + +int main () +{ + foo (); +} diff --git a/gdb/testsuite/gdb.base/gdb1090.exp b/gdb/testsuite/gdb.base/gdb1090.exp new file mode 100644 index 0000000000..20da3b1283 --- /dev/null +++ b/gdb/testsuite/gdb.base/gdb1090.exp @@ -0,0 +1,67 @@ +# Copyright 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Tests for PR gdb/1090. +# 2003-02-23 Michael Chastain + +# This file is part of the gdb testsuite. + +if $tracelevel then { + strace $tracelevel + } + +# +# test running programs +# +set prms_id 0 +set bug_id 0 + +set testfile "gdb1090" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +if ![runto marker] then { + perror "couldn't run to breakpoint" + continue +} +gdb_test "up" ".*foo.*" "up from marker" + +send_gdb "print s24\n" +gdb_expect { + -re "\\\$\[0-9\]* = \\{field_0 = 1170, field_1 = 64701\\}\r\n$gdb_prompt $" { + pass "print s24" + } + -re "\\\$\[0-9\]* = \\{field_0 = 1170, field_1 = .*\\}\r\n$gdb_prompt $" { + # happens with gcc 2.95.3, which actually puts s24 in registers. + # gdb cannot find the second register and prints garbage. + kfail "gdb/1090" "print s24" + } + -re ".*$gdb_prompt $" { + fail "print s24" + } + timeout { + fail "print s24 (timeout)" + } +}