* testsuite/gdb.base/break.exp: Make backtrace from factorial
authorStu Grossman <grossman@cygnus>
Thu, 17 Oct 1996 02:12:24 +0000 (02:12 +0000)
committerStu Grossman <grossman@cygnus>
Thu, 17 Oct 1996 02:12:24 +0000 (02:12 +0000)
errors unique.
* testsuite/gdb.base/nodebug.exp:  Whack out all -g options
explicitly.

* v850-tdep.c (v850_init_extra_frame_info v850_frame_chain):  Fix
sign bugs with scanning prologues.  Get a little smarter about
calculating the length of uninteresting instructions.

gdb/ChangeLog
gdb/testsuite/gdb.base/nodebug.exp
gdb/v850-tdep.c

index a62393756ebc0c6e8a717a6c29d9fc066880f391..e221d1556b30376be795b8ca7c751af125937cd3 100644 (file)
@@ -1,3 +1,16 @@
+Wed Oct 16 19:03:54 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * testsuite/gdb.base/break.exp:  Make backtrace from factorial
+       errors unique.
+       * testsuite/gdb.base/nodebug.exp:  Whack out all -g options
+       explicitly.
+
+start-sanitize-v850
+       * v850-tdep.c (v850_init_extra_frame_info v850_frame_chain):  Fix
+       sign bugs with scanning prologues.  Get a little smarter about
+       calculating the length of uninteresting instructions.
+
+end-sanitize-v850
 Wed Oct 16 17:46:03 1996  Stan Shebs  <shebs@andros.cygnus.com>
 
        * breakpoint.c (must_shift_inst_regs): New global.
index 4ad7f89b14b4b9a1d61bf13765603eaeb1099af0..1d95c88e2441711cfa8db3feb8a449b8e4950217 100644 (file)
@@ -8,21 +8,28 @@ set prms_id 0
 set bug_id 0
 
 set testfile nodebug
-set srcfile ${srcdir}/$subdir/${testfile}.c
+set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
-if  { [compile "${srcfile} -o ${binfile}"] != "" } {
+
+# Get rid of any -g options (including -gstabs, -gdwarf, etc...
+regsub -all -- {[      ]-g[^   ]*} $target_info(target,cflags) { } target_info(target,cflags)
+
+if  { [compile "${srcdir}/${subdir}/${srcfile} -o ${binfile}"] != "" } {
     perror "Couldn't compile ${srcfile}"
     return -1
 }
 
+# Create and source the file that provides information about the compiler
+# used to compile the test case.
 execute_anywhere "rm -f ${binfile}.ci"
 if  { [compile "-E ${srcdir}/${subdir}/compiler.c > ${binfile}.ci"] != "" } {
-    perror "Couldn't make ${testfile}.ci file"
+    perror "Couldn't make ${binfile}.ci file"
     return -1
 }
+source ${binfile}.ci
+
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load $binfile
-source ${binfile}.ci
 
 if [runto inner] then {
     
@@ -110,11 +117,14 @@ if [runto inner] then {
     
     # This test is not as obscure as it might look.  `p getenv ("TERM")'
     # is a real-world example, at least on many systems.
+    setup_xfail "h8300*-*-*"
+    if {!$gcc_compiled} then { setup_xfail "hppa*-*-hpux*" }
     gdb_test {p/c array_index("abcdef",2)} " = 99 'c'"
     
     # Now, try that we can give names of file-local symbols which happen
     # to be unique, and have it still work
     if [runto middle] then {
+       setup_xfail "h8300*-*-*"
        gdb_test "backtrace" "#0.*middle.*#1.*top.*#2.*main.*" \
            "backtrace from middle in nodebug.exp"
     }
index 1b1f5c8104108462d94fe7ece822c68b7e978baa..25e607dd1cf87a26af3a085d37ac3e5e053a4b9f 100644 (file)
@@ -86,36 +86,33 @@ v850_init_extra_frame_info (fi)
     {
       int insn;
 
-      insn = read_memory_integer (current_pc, 2);
+      insn = read_memory_unsigned_integer (current_pc, 2);
 
       if ((insn & 0xffe0) == ((SP_REGNUM << 11) | 0x0240)) /* add <imm>,sp */
-       frameoffset = (insn & 0x1f) | ~0x1f;
+       frameoffset = ((insn & 0x1f) ^ 0x10) - 0x10;
       else if (insn == ((SP_REGNUM << 11) | 0x0600 | SP_REGNUM)) /* addi <imm>,sp,sp */
-       {
-         current_pc += 2;
-
-         frameoffset = read_memory_integer (current_pc, 2);
-       }
+         frameoffset = read_memory_integer (current_pc + 2, 2);
       else if (insn == ((FP_REGNUM << 11) | 0x0000 | 12)) /* mov r12,r2 */
        framereg = FP_REGNUM;   /* Setting up fp */
       else if ((insn & 0x07ff) == (0x0760 | SP_REGNUM))        /* st.w <reg>,<offset>[sp] */
        {
          reg = (insn >> 11) & 0x1f;    /* Extract <reg> */
-         current_pc += 2;
 
-         insn = read_memory_integer (current_pc, 2) & ~1;
+         insn = read_memory_integer (current_pc + 2, 2) & ~1;
 
          fi->fsr.regs[reg] = insn + frameoffset;
        }
       else if ((insn & 0x07ff) == (0x0760 | FP_REGNUM))        /* st.w <reg>,<offset>[fp] */
        {
          reg = (insn >> 11) & 0x1f;    /* Extract <reg> */
-         current_pc += 2;
 
-         insn = read_memory_integer (current_pc, 2) & ~1;
+         insn = read_memory_integer (current_pc + 2, 2) & ~1;
 
          fi->fsr.regs[reg] = insn;
        }
+
+      if ((insn & 0x0780) >= 0x0600) /* Four byte instruction? */
+       current_pc += 2;
     }
 
   if (PC_IN_CALL_DUMMY (fi->pc, NULL, NULL))
@@ -208,21 +205,16 @@ v850_frame_chain (fi)
     {
       int insn;
 
-      insn = read_memory_integer (current_pc, 2);
+      insn = read_memory_unsigned_integer (current_pc, 2);
 
       if ((insn & 0xffe0) == ((SP_REGNUM << 11) | 0x0240)) /* add <imm>,sp */
-       frameoffset = (insn & 0x1f) | ~0x1f;
+       frameoffset = ((insn & 0x1f) ^ 0x10) - 0x10;
       else if (insn == ((SP_REGNUM << 11) | 0x0600 | SP_REGNUM)) /* addi <imm>,sp,sp */
-       {
-         current_pc += 2;
-
-         frameoffset = read_memory_integer (current_pc, 2);
-       }
+       frameoffset = read_memory_integer (current_pc + 2, 2);
       else if (insn == ((FP_REGNUM << 11) | 0x0000 | 12)) /* mov r12,r2 */
        return v850_find_callers_reg (fi, FP_REGNUM); /* It's using a frame pointer reg */
-      else if ((insn & 0x07ff) == (0x0760 | SP_REGNUM))        /* st.w <reg>,<offset>[sp] */
-       current_pc += 2;
-      else if ((insn & 0x07ff) == (0x0760 | FP_REGNUM))        /* st.w <reg>,<offset>[fp] */
+
+      if ((insn & 0x0780) >= 0x0600) /* Four byte instruction? */
        current_pc += 2;
     }