PR tdep/2029
authorDaniel Jacobowitz <drow@false.org>
Mon, 23 Jan 2006 01:49:43 +0000 (01:49 +0000)
committerDaniel Jacobowitz <drow@false.org>
Mon, 23 Jan 2006 01:49:43 +0000 (01:49 +0000)
Suggested by Till Straumann <strauman@slac.stanford.edu>:
* rs6000-tdep.c (skip_prologue): Update check for later mtlr
instructions.  Handle PIC bcl.

gdb/ChangeLog
gdb/rs6000-tdep.c

index ba5ea4cbca5eba9fecc453d1928c1009d1d94807..b8c504f7b9ebe73bfe89886b8e1b331943e606ed 100644 (file)
@@ -1,3 +1,10 @@
+2006-01-22  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       PR tdep/2029
+       Suggested by Till Straumann <strauman@slac.stanford.edu>:
+       * rs6000-tdep.c (skip_prologue): Update check for later mtlr
+       instructions.  Handle PIC bcl.
+
 2006-01-22  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * config/djgpp/README: Typo fix.
index 54b33b36da9d0213f9cfe59ae6d0919ae3c78611..1d4a437ac599e18336984cb79aa43bcb46d34951 100644 (file)
@@ -1,8 +1,8 @@
 /* Target-dependent code for GDB, the GNU debugger.
 
    Copyright (C) 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
-   1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
-   Foundation, Inc.
+   1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -1013,7 +1013,7 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
 
             remember just the first one, but skip over additional
             ones.  */
-         if (lr_reg < 0)
+         if (lr_reg == -1)
            lr_reg = (op & 0x03e00000);
           if (lr_reg == 0)
             r0_contains_arg = 0;
@@ -1126,6 +1126,13 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
          continue;
 
        }
+      else if ((op & 0xfe80ffff) == 0x42800005 && lr_reg != -1)
+       {
+         /* bcl 20,xx,.+4 is used to get the current PC, with or without
+            prediction bits.  If the LR has already been saved, we can
+            skip it.  */
+         continue;
+       }
       else if (op == 0x48000005)
        {                       /* bl .+4 used in 
                                   -mrelocatable */