* 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.
This commit is contained in:
Kevin Buettner 2002-04-09 01:41:46 +00:00
parent cc9836a8aa
commit 7c40d5414c
2 changed files with 16 additions and 13 deletions

View 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.

View 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(). */