1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-11-21 23:27:39 +01:00

ptrace: add more Debug to access_reg

This was useful in debugging issues with the libunwind-ptrace code on
ppc64.
This commit is contained in:
Cody P Schafer 2012-09-14 17:12:02 -07:00 committed by Arun Sharma
parent 3d6f7479b0
commit 9184535486

View file

@ -43,6 +43,8 @@ _UPT_access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val,
pid_t pid = ui->pid; pid_t pid = ui->pid;
#if UNW_DEBUG #if UNW_DEBUG
Debug(16, "using pokeuser: reg: %s [%u], val: %lx, write: %d\n", unw_regname(reg), (unsigned) reg, (long) val, write);
if (write) if (write)
Debug (16, "%s <- %lx\n", unw_regname (reg), (long) *val); Debug (16, "%s <- %lx\n", unw_regname (reg), (long) *val);
#endif #endif
@ -221,10 +223,13 @@ _UPT_access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val,
} }
break; break;
} }
#endif #endif /* End of IA64 */
if ((unsigned) reg >= sizeof (_UPT_reg_offset) / sizeof (_UPT_reg_offset[0])) if ((unsigned) reg >= sizeof (_UPT_reg_offset) / sizeof (_UPT_reg_offset[0]))
{ {
#if UNW_DEBUG
Debug(2, "register out of range: >= %zu / %zu\n", sizeof(_UPT_reg_offset), sizeof(_UPT_reg_offset[0]));
#endif
errno = EINVAL; errno = EINVAL;
goto badreg; goto badreg;
} }
@ -235,10 +240,19 @@ _UPT_access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val,
errno = 0; errno = 0;
if (write) if (write)
ptrace (PTRACE_POKEUSER, pid, _UPT_reg_offset[reg], *val); ptrace (PTRACE_POKEUSER, pid, _UPT_reg_offset[reg], *val);
else else {
#if UNW_DEBUG
Debug(16, "ptrace PEEKUSER pid: %lu , reg: %lu , offs: %lu\n", (unsigned long)pid, (unsigned long)reg,
(unsigned long)_UPT_reg_offset[reg]);
#endif
*val = ptrace (PTRACE_PEEKUSER, pid, _UPT_reg_offset[reg], 0); *val = ptrace (PTRACE_PEEKUSER, pid, _UPT_reg_offset[reg], 0);
if (errno) }
if (errno) {
#if UNW_DEBUG
Debug(2, "ptrace failure\n");
#endif
goto badreg; goto badreg;
}
#endif #endif
#ifdef UNW_TARGET_IA64 #ifdef UNW_TARGET_IA64
@ -246,7 +260,7 @@ _UPT_access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val,
#endif #endif
#if UNW_DEBUG #if UNW_DEBUG
if (!write) if (!write)
Debug (16, "%s -> %lx\n", unw_regname (reg), (long) *val); Debug (16, "%s[%u] -> %lx\n", unw_regname (reg), (unsigned) reg, (long) *val);
#endif #endif
return 0; return 0;
@ -265,8 +279,10 @@ _UPT_access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val,
char *r; char *r;
#if UNW_DEBUG #if UNW_DEBUG
Debug(16, "using getregs: reg: %s [%u], val: %lx, write: %u\n", unw_regname(reg), (unsigned) reg, (long) val, write);
if (write) if (write)
Debug (16, "%s <- %lx\n", unw_regname (reg), (long) *val); Debug (16, "%s [%u] <- %lx\n", unw_regname (reg), (unsigned) reg, (long) *val);
#endif #endif
if ((unsigned) reg >= sizeof (_UPT_reg_offset) / sizeof (_UPT_reg_offset[0])) if ((unsigned) reg >= sizeof (_UPT_reg_offset) / sizeof (_UPT_reg_offset[0]))
{ {