|
|
|
@ -160,11 +160,11 @@ static int special_regs[] = |
|
|
|
/* Call ptrace(REQ, ID, ADDR, DATA, BUF). */ |
|
|
|
|
|
|
|
static int |
|
|
|
ptrace32 (int req, int id, int *addr, int data, int *buf) |
|
|
|
rs6000_ptrace32 (int req, int id, int *addr, int data, int *buf) |
|
|
|
{ |
|
|
|
int ret = ptrace (req, id, (int *)addr, data, buf); |
|
|
|
#if 0 |
|
|
|
printf ("ptrace32 (%d, %d, 0x%x, %08x, 0x%x) = 0x%x\n", |
|
|
|
printf ("rs6000_ptrace32 (%d, %d, 0x%x, %08x, 0x%x) = 0x%x\n", |
|
|
|
req, id, (unsigned int)addr, data, (unsigned int)buf, ret); |
|
|
|
#endif |
|
|
|
return ret; |
|
|
|
@ -173,7 +173,7 @@ ptrace32 (int req, int id, int *addr, int data, int *buf) |
|
|
|
/* Call ptracex(REQ, ID, ADDR, DATA, BUF). */ |
|
|
|
|
|
|
|
static int |
|
|
|
ptrace64 (int req, int id, long long addr, int data, int *buf) |
|
|
|
rs6000_ptrace64 (int req, int id, long long addr, int data, int *buf) |
|
|
|
{ |
|
|
|
#ifdef ARCH3264 |
|
|
|
int ret = ptracex (req, id, addr, data, buf); |
|
|
|
@ -181,7 +181,7 @@ ptrace64 (int req, int id, long long addr, int data, int *buf) |
|
|
|
int ret = 0; |
|
|
|
#endif |
|
|
|
#if 0 |
|
|
|
printf ("ptrace64 (%d, %d, 0x%llx, %08x, 0x%x) = 0x%x\n", |
|
|
|
printf ("rs6000_ptrace64 (%d, %d, 0x%llx, %08x, 0x%x) = 0x%x\n", |
|
|
|
req, id, addr, data, (unsigned int)buf, ret); |
|
|
|
#endif |
|
|
|
return ret; |
|
|
|
@ -202,7 +202,7 @@ fetch_register (int regno) |
|
|
|
if (regno >= FP0_REGNUM && regno <= FPLAST_REGNUM) |
|
|
|
{ |
|
|
|
nr = regno - FP0_REGNUM + FPR0; |
|
|
|
ptrace32 (PT_READ_FPR, PIDGET (inferior_ptid), addr, nr, 0); |
|
|
|
rs6000_ptrace32 (PT_READ_FPR, PIDGET (inferior_ptid), addr, nr, 0); |
|
|
|
} |
|
|
|
|
|
|
|
/* Bogus register number. */ |
|
|
|
@ -223,13 +223,13 @@ fetch_register (int regno) |
|
|
|
nr = regno; |
|
|
|
|
|
|
|
if (!ARCH64 ()) |
|
|
|
*addr = ptrace32 (PT_READ_GPR, PIDGET (inferior_ptid), (int *)nr, 0, 0); |
|
|
|
*addr = rs6000_ptrace32 (PT_READ_GPR, PIDGET (inferior_ptid), (int *)nr, 0, 0); |
|
|
|
else |
|
|
|
{ |
|
|
|
/* PT_READ_GPR requires the buffer parameter to point to long long,
|
|
|
|
even if the register is really only 32 bits. */ |
|
|
|
long long buf; |
|
|
|
ptrace64 (PT_READ_GPR, PIDGET (inferior_ptid), nr, 0, (int *)&buf); |
|
|
|
rs6000_ptrace64 (PT_READ_GPR, PIDGET (inferior_ptid), nr, 0, (int *)&buf); |
|
|
|
if (REGISTER_RAW_SIZE (regno) == 8) |
|
|
|
memcpy (addr, &buf, 8); |
|
|
|
else |
|
|
|
@ -264,7 +264,7 @@ store_register (int regno) |
|
|
|
if (regno >= FP0_REGNUM && regno <= FPLAST_REGNUM) |
|
|
|
{ |
|
|
|
nr = regno - FP0_REGNUM + FPR0; |
|
|
|
ptrace32 (PT_WRITE_FPR, PIDGET (inferior_ptid), addr, nr, 0); |
|
|
|
rs6000_ptrace32 (PT_WRITE_FPR, PIDGET (inferior_ptid), addr, nr, 0); |
|
|
|
} |
|
|
|
|
|
|
|
/* Bogus register number. */ |
|
|
|
@ -293,7 +293,7 @@ store_register (int regno) |
|
|
|
nr = regno; |
|
|
|
|
|
|
|
if (!ARCH64 ()) |
|
|
|
ptrace32 (PT_WRITE_GPR, PIDGET (inferior_ptid), (int *)nr, *addr, 0); |
|
|
|
rs6000_ptrace32 (PT_WRITE_GPR, PIDGET (inferior_ptid), (int *)nr, *addr, 0); |
|
|
|
else |
|
|
|
{ |
|
|
|
/* PT_WRITE_GPR requires the buffer parameter to point to an 8-byte
|
|
|
|
@ -303,7 +303,7 @@ store_register (int regno) |
|
|
|
memcpy (&buf, addr, 8); |
|
|
|
else |
|
|
|
buf = *addr; |
|
|
|
ptrace64 (PT_WRITE_GPR, PIDGET (inferior_ptid), nr, 0, (int *)&buf); |
|
|
|
rs6000_ptrace64 (PT_WRITE_GPR, PIDGET (inferior_ptid), nr, 0, (int *)&buf); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -377,9 +377,9 @@ read_word (CORE_ADDR from, int *to, int arch64) |
|
|
|
errno = 0; |
|
|
|
|
|
|
|
if (arch64) |
|
|
|
*to = ptrace64 (PT_READ_I, PIDGET (inferior_ptid), from, 0, NULL); |
|
|
|
*to = rs6000_ptrace64 (PT_READ_I, PIDGET (inferior_ptid), from, 0, NULL); |
|
|
|
else |
|
|
|
*to = ptrace32 (PT_READ_I, PIDGET (inferior_ptid), (int *)(long) from, |
|
|
|
*to = rs6000_ptrace32 (PT_READ_I, PIDGET (inferior_ptid), (int *)(long) from, |
|
|
|
0, NULL); |
|
|
|
|
|
|
|
return !errno; |
|
|
|
@ -449,9 +449,9 @@ child_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, |
|
|
|
for (i = 0, errno = 0; i < count; i++, addr += sizeof (int)) |
|
|
|
{ |
|
|
|
if (arch64) |
|
|
|
ptrace64 (PT_WRITE_D, PIDGET (inferior_ptid), addr, buf[i], NULL); |
|
|
|
rs6000_ptrace64 (PT_WRITE_D, PIDGET (inferior_ptid), addr, buf[i], NULL); |
|
|
|
else |
|
|
|
ptrace32 (PT_WRITE_D, PIDGET (inferior_ptid), (int *)(long) addr, |
|
|
|
rs6000_ptrace32 (PT_WRITE_D, PIDGET (inferior_ptid), (int *)(long) addr, |
|
|
|
buf[i], NULL); |
|
|
|
|
|
|
|
if (errno) |
|
|
|
@ -490,9 +490,9 @@ exec_one_dummy_insn (void) |
|
|
|
prev_pc = read_pc (); |
|
|
|
write_pc (DUMMY_INSN_ADDR); |
|
|
|
if (ARCH64 ()) |
|
|
|
ret = ptrace64 (PT_CONTINUE, PIDGET (inferior_ptid), 1, 0, NULL); |
|
|
|
ret = rs6000_ptrace64 (PT_CONTINUE, PIDGET (inferior_ptid), 1, 0, NULL); |
|
|
|
else |
|
|
|
ret = ptrace32 (PT_CONTINUE, PIDGET (inferior_ptid), (int *)1, 0, NULL); |
|
|
|
ret = rs6000_ptrace32 (PT_CONTINUE, PIDGET (inferior_ptid), (int *)1, 0, NULL); |
|
|
|
|
|
|
|
if (ret != 0) |
|
|
|
perror ("pt_continue"); |
|
|
|
@ -987,9 +987,9 @@ xcoff_relocate_symtab (unsigned int pid) |
|
|
|
#endif |
|
|
|
|
|
|
|
if (arch64) |
|
|
|
rc = ptrace64 (PT_LDINFO, pid, (unsigned long) ldi, size, NULL); |
|
|
|
rc = rs6000_ptrace64 (PT_LDINFO, pid, (unsigned long) ldi, size, NULL); |
|
|
|
else |
|
|
|
rc = ptrace32 (PT_LDINFO, pid, (int *) ldi, size, NULL); |
|
|
|
rc = rs6000_ptrace32 (PT_LDINFO, pid, (int *) ldi, size, NULL); |
|
|
|
|
|
|
|
if (rc == -1) |
|
|
|
{ |
|
|
|
|