This is the mail archive of the gdb-patches@sourceware.org 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]

Re: [PATCH] PPC Call-clobbered registers testcase


Hi,

I've modified the patch to reflect the behaviour on x86 systems. On x86
it shows the values, but they're incorrectly shown as being equal, and
they shouldn't be.

On ppc they're expected to be "optmized out".

This patch includes a new directory, "gdb.opt", for testing optimized
binaries.

Does this look OK?

Regards,

On Mon, 2007-10-08 at 15:14 -0400, Daniel Jacobowitz wrote:
> On Mon, Oct 08, 2007 at 04:06:39PM -0300, Luis Machado wrote:
> > > I think this won't work without a bit of extra work to add the new
> > > directory, e.g. during configure.  But I can take care of that.
> > 
> > > Yes.  If the test runs on x86, they may not be in registers - so they
> > > may still be known, if they were stored on the stack.
> > 
> > It makes sense. I'll re-work this bit then. While at it i might go for
> > the configure script changes as well.
> 
> Thanks.  If you want to take care of that, just look at Pierre's patch
> for gdb.pascal.
> 
-- 
Luis Machado
IBM Linux Technology Center
e-mail: luisgpm@linux.vnet.ibm.com
2007-10-23  Luis Machado  <luisgpm@br.ibm.com>

    * gdb.opt/clobbered-registers-O2.c: New testcase source file.
    * gdb.opt/clobbered-registers-O2.exp: New testcase expect file.
    * gdb.opt/Makefile.in: New makefile
    * Makefile.in: Create new directory "gdb.opt"
    * configure.ac: Add "gdb.opt" directory
    * configure: Add "gdb.opt" directory

Index: gdb/testsuite/gdb.opt/clobbered-registers-O2.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ gdb/testsuite/gdb.opt/clobbered-registers-O2.c	2007-10-22 05:23:18.000000000 -0700
@@ -0,0 +1,44 @@
+/* This file is part of GDB, the GNU debugger.
+
+   Copyright 2007 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 3 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, see <http://www.gnu.org/licenses/>.
+
+   Please email any bugs, comments, and/or additions to this file to:
+   bug-gdb@prep.ai.mit.edu  */
+
+#ifndef __GNUC__
+#define __attribute__(x)
+#endif
+
+unsigned * __attribute__((noinline))
+start_sequence (unsigned * x, unsigned * y)
+{
+	return (unsigned *)0xdeadbeef;
+};
+
+unsigned __attribute__((noinline))
+gen_movsd (unsigned * operand0, unsigned * operand1)
+{
+	return *start_sequence(operand0, operand1);
+}
+
+int main(void)
+{
+  unsigned x, y;
+
+  x = 13;
+  y = 14;
+  return (int)gen_movsd (&x, &y);
+}
Index: gdb/testsuite/gdb.opt/clobbered-registers-O2.exp
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ gdb/testsuite/gdb.opt/clobbered-registers-O2.exp	2007-10-23 12:50:14.000000000 -0700
@@ -0,0 +1,113 @@
+# Copyright 2007 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.
+#
+# This file is part of the gdb testsuite.
+
+if $tracelevel then {
+    strace $tracelevel
+}
+
+# Test displaying call clobbered registers in optimized binaries.
+# GDB should not show incorrect values.
+
+set testfile clobbered-registers-O2
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+# What compiler are we using?
+#
+if [get_compiler_info ${binfile}] {
+    return -1
+}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [concat debug optimize=-O2 nowarnings]] != "" } {
+     untested clobbered-registers-O2.exp
+     return -1
+}
+
+# use this to debug:
+#log_user 1
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+if { ![runto start_sequence] } then {
+   fail "run to start_sequence"
+   return
+}
+
+send_gdb "frame 1\n"
+
+gdb_expect 10 {
+    -re "#1.*in gen_movsd.*" { pass "frame 1 backtrace" }
+    default { fail "frame 1 backtrace error" }
+}
+
+set operand0 0
+set operand1 0
+send_gdb "p operand0\n"
+
+gdb_expect 5 {
+    -re "\\$\[0-9\]* = <(.*)>.*$gdb_prompt $" {
+        set operand0 "optimized"
+    }
+
+    -re "\\$\[0-9\]* = \\(unsigned int \*.*0x(.*)\[ \]*$gdb_prompt $" {
+        set operand0 $expect_out(1,string)
+    }
+
+    default {
+        fail "Operand0 doesn't have expected values"
+    }
+}
+
+send_gdb "p operand1\n"
+
+gdb_expect 5 {
+    -re "\\$\[0-9\]* = <(.*)>.*$gdb_prompt $" {
+        set operand1 "optimized"
+    }
+
+    -re "\\$\[0-9\]* = \\(unsigned int \*.*0x(.*)\[ \]*$gdb_prompt $" {
+        set operand1 $expect_out(1,string)
+    }
+
+    default {
+        fail "Operand1 doesn't have expected values"
+    }
+}
+
+set result1 [string compare $operand0 "optimized"]
+set result2 [string compare $operand1 "optimized"]
+
+# The PowerPC test ends here. If both values are optimized, then
+# we are fine with it.
+if {!$result1 && !$result2} {
+    pass "Both values were optimized"
+    return
+}
+
+# This is a x86-specific test since it doesn't show the values
+# as optimized, but they appear as equal values. That is
+# incorrect.
+set result1 [string compare $operand0 $operand1]
+
+if {!$result1} {
+    fail "Values are displayed but are incorrect"
+    return -1
+}
Index: gdb/testsuite/Makefile.in
===================================================================
--- gdb.orig/testsuite/Makefile.in	2007-10-22 05:00:22.000000000 -0700
+++ gdb/testsuite/Makefile.in	2007-10-22 05:00:26.000000000 -0700
@@ -37,7 +37,8 @@
 ALL_SUBDIRS = gdb.ada gdb.arch gdb.asm gdb.base gdb.cp gdb.disasm \
 	gdb.dwarf2 \
 	gdb.fortran gdb.server gdb.java gdb.mi \
-	gdb.objc gdb.pascal gdb.threads gdb.trace gdb.xml \
+	gdb.objc gdb.opt gdb.pascal gdb.threads gdb.trace \
+	gdb.xml \
 	$(SUBDIRS)
 
 EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
Index: gdb/testsuite/configure.ac
===================================================================
--- gdb.orig/testsuite/configure.ac	2007-10-22 05:00:22.000000000 -0700
+++ gdb/testsuite/configure.ac	2007-10-22 05:00:26.000000000 -0700
@@ -116,5 +116,5 @@
   gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
   gdb.fortran/Makefile gdb.server/Makefile \
   gdb.java/Makefile gdb.mi/Makefile gdb.modula2/Makefile \
-  gdb.objc/Makefile gdb.pascal/Makefile gdb.threads/Makefile \
-  gdb.trace/Makefile gdb.xml/Makefile])
+  gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile \
+  gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile])
Index: gdb/testsuite/gdb.opt/Makefile.in
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ gdb/testsuite/gdb.opt/Makefile.in	2007-10-22 05:00:26.000000000 -0700
@@ -0,0 +1,24 @@
+VPATH = @srcdir@
+srcdir = @srcdir@
+
+EXECUTABLES = hello/hello
+
+MISCELLANEOUS =
+
+all info install-info dvi install uninstall installcheck check:
+       @echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+       -find . -name '*.o' -print | xargs rm -f
+       -find . -name '*.ali' -print | xargs rm -f
+       -find . -name 'b~*.ad[sb]' -print | xargs rm -f
+       -rm -f *~ a.out xgdb *.x *.ci *.tmp
+       -rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+       -rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+       -rm -f $(MISCELLANEOUS) twice-tmp.c
+
+distclean maintainer-clean realclean: clean
+       -rm -f *~ core
+       -rm -f Makefile config.status config.log
+       -rm -f *-init.exp
+       -rm -fr *.log summary detail *.plog *.sum *.psum site.*
Index: gdb/testsuite/configure
===================================================================
--- gdb.orig/testsuite/configure	2007-10-22 05:00:22.000000000 -0700
+++ gdb/testsuite/configure	2007-10-22 05:00:26.000000000 -0700
@@ -3104,7 +3104,7 @@
 
 
 
-                                                                                                                                                                          ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
+                                                                                                                                                                          ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
 # tests run on this system so they can be shared between configure
@@ -3668,6 +3668,7 @@
   "gdb.java/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.java/Makefile" ;;
   "gdb.mi/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.mi/Makefile" ;;
   "gdb.objc/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.objc/Makefile" ;;
+  "gdb.opt/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.opt/Makefile" ;;
   "gdb.threads/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.threads/Makefile" ;;
   "gdb.trace/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.trace/Makefile" ;;
   "gdb.xml/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.xml/Makefile" ;;

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