This is the mail archive of the gdb-prs@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

pending/1093: [rfa] new test, pr-1090.exp, multi-register variables


>Number:         1093
>Category:       pending
>Synopsis:       [rfa] new test, pr-1090.exp, multi-register variables
>Confidential:   yes
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          change-request
>Submitter-Id:   unknown
>Arrival-Date:   Tue Feb 25 16:08:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     
>Release:        
>Organization:
>Environment:
>Description:
 This is a new test script for pr gdb/1090, which is about register
 variables which occupy several registers.  Both gdb 5.3 and gdb
 HEAD%20030223 get this wrong.  In my testbed, this happens with
 gcc 2.95.3; gcc v3 compilers don't allocate multi-register variables.
 
 The symptom of this bug is that gdb prints the first word of a
 structure correctly but botches the second word.  The test has a nice
 KFAIL for this.
 
 Okay to commit?
 
 Michael C
 
 === pr-1090.c
 
 /* 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 at shout dot 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 ();
 }
 
 === pr-1090.exp
 
 # 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 <mec at shout dot net>
 
 # 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 "pr-1090"
 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)"
     }
 }
 
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]