* rs6000-tdep.c (rs6000_software_single_step): Use
authorKevin Buettner <kevinb@redhat.com>
Tue, 9 Apr 2002 01:41:46 +0000 (01:41 +0000)
committerKevin Buettner <kevinb@redhat.com>
Tue, 9 Apr 2002 01:41:46 +0000 (01:41 +0000)
rs6000_breakpoint_from_pc() to fetch breakpoint instruction
and size.  Use target_insert_breakpoint() and
target_remove_breakpoint() to insert and remove breakpoints
instead of explicit memory reads and writes.

gdb/ChangeLog
gdb/rs6000-tdep.c

index 70ef97c8f4ec65e44de615d6fc726a711e0c68f6..87471756f9e5d4aabc09a77e9565dbde326eece0 100644 (file)
@@ -1,3 +1,12 @@
+2002-04-08  Kevin Buettner  <kevinb@redhat.com>
+
+       From Jimi X <jimix@watson.ibm.com>:
+       * rs6000-tdep.c (rs6000_software_single_step): Use
+       rs6000_breakpoint_from_pc() to fetch breakpoint instruction
+       and size.  Use target_insert_breakpoint() and
+       target_remove_breakpoint() to insert and remove breakpoints
+       instead of explicit memory reads and writes.
+
 2002-04-08  Kevin Buettner  <kevinb@redhat.com>
 
        * config/powerpc/tm-ppc-eabi.h (ELF_OBJECT_FORMAT): Delete.
index 18e6619bf931a8da9a9ce9272001a260f480cc01..7f768c0116bd749747c172bcdb4aed79c84feb3f 100644 (file)
@@ -299,11 +299,9 @@ void
 rs6000_software_single_step (enum target_signal signal,
                             int insert_breakpoints_p)
 {
-#define        INSNLEN(OPCODE)  4
-
-  static char le_breakp[] = LITTLE_BREAKPOINT;
-  static char be_breakp[] = BIG_BREAKPOINT;
-  char *breakp = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? be_breakp : le_breakp;
+  CORE_ADDR dummy;
+  int breakp_sz;
+  char *breakp = rs6000_breakpoint_from_pc (&dummy, &breakp_sz);
   int ii, insn;
   CORE_ADDR loc;
   CORE_ADDR breaks[2];
@@ -316,7 +314,7 @@ rs6000_software_single_step (enum target_signal signal,
 
       insn = read_memory_integer (loc, 4);
 
-      breaks[0] = loc + INSNLEN (insn);
+      breaks[0] = loc + breakp_sz;
       opcode = insn >> 26;
       breaks[1] = branch_dest (opcode, insn, loc, breaks[0]);
 
@@ -332,10 +330,7 @@ rs6000_software_single_step (enum target_signal signal,
          /* ignore invalid breakpoint. */
          if (breaks[ii] == -1)
            continue;
-
-         read_memory (breaks[ii], stepBreaks[ii].data, 4);
-
-         write_memory (breaks[ii], breakp, 4);
+         target_insert_breakpoint (breaks[ii], stepBreaks[ii].data);
          stepBreaks[ii].address = breaks[ii];
        }
 
@@ -346,9 +341,8 @@ rs6000_software_single_step (enum target_signal signal,
       /* remove step breakpoints. */
       for (ii = 0; ii < 2; ++ii)
        if (stepBreaks[ii].address != 0)
-         write_memory
-           (stepBreaks[ii].address, stepBreaks[ii].data, 4);
-
+         target_remove_breakpoint (stepBreaks[ii].address,
+                                   stepBreaks[ii].data);
     }
   errno = 0;                   /* FIXME, don't ignore errors! */
   /* What errors?  {read,write}_memory call error().  */