* gdb/defs.h: unconditionally include <fcntl.h>, and
[deliverable/binutils-gdb.git] / gdb / rs6000-tdep.c
index 54b33b36da9d0213f9cfe59ae6d0919ae3c78611..f78280009a1a81ed56292f0ebea00dfbcbd904b5 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.
 
@@ -60,6 +60,7 @@
 #include "frame-base.h"
 
 #include "reggroups.h"
+#include "rs6000-tdep.h"
 
 /* If the kernel has to deliver a signal, it pushes a sigcontext
    structure on the stack and then calls the signal handler, passing
@@ -1013,7 +1014,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 +1127,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 */
@@ -3380,6 +3388,8 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
                     _("rs6000_gdbarch_init: "
                     "received unexpected BFD 'arch' value"));
 
+  set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
+
   /* Sanity check on registers.  */
   gdb_assert (strcmp (tdep->regs[tdep->ppc_gp0_regnum].name, "r0") == 0);
 
@@ -3509,16 +3519,6 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       frame_base_append_sniffer (gdbarch, rs6000_frame_base_sniffer);
     }
 
-  if (from_xcoff_exec)
-    {
-      /* NOTE: jimix/2003-06-09: This test should really check for
-        GDB_OSABI_AIX when that is defined and becomes
-        available. (Actually, once things are properly split apart,
-        the test goes away.) */
-       /* RS6000/AIX does not support PT_STEP.  Has to be simulated.  */
-       set_gdbarch_software_single_step (gdbarch, rs6000_software_single_step);
-    }
-
   init_sim_regno_table (gdbarch);
 
   return gdbarch;
This page took 0.024491 seconds and 4 git commands to generate.