summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2008-12-16 18:18:40 +0000
committerRoland McGrath <roland@redhat.com>2009-06-02 16:28:09 -0700
commitbc45ffb2d06794b2d613d22676d43c93650fb341 (patch)
treebc7c2b5d666cd82467803f837142fc5a8b3a5b5b
parentfba591c19543112834bbcd1bbc2128ee78e5b3d3 (diff)
downloadstrace-bc45ffb2d06794b2d613d22676d43c93650fb341.tar.gz
This patch does not change any logic.
It merely passes tcp pointer to upeek instead of pid. This is needed if one wants to check or change some tcp fields. I have patches which require this. I can imagine someone else eventually needing to look at tcp for completely orthogonal reasons.
-rw-r--r--ChangeLog10
-rw-r--r--defs.h2
-rw-r--r--process.c4
-rw-r--r--signal.c16
-rw-r--r--strace.c4
-rw-r--r--syscall.c139
-rw-r--r--util.c120
7 files changed, 150 insertions, 145 deletions
diff --git a/ChangeLog b/ChangeLog
index 1d2cc4aff..0b05a5465 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-12-16 Denys Vlasenko <dvlasenk@redhat.com>
+
+ * defs.h: Modify declaration of upeek to take struct tcb *
+ parameter instead of pid_t.
+ * process.c: Change all upeek calls accordingly.
+ * signal.c: Likewise.
+ * strace.c: Likewise.
+ * syscall.c: Likewise.
+ * util.c: Likewise.
+
2008-11-11 Dmitry V. Levin <ldv@altlinux.org>
* sock.c [LINUX] (sock_ioctl): Parse more SIOCS* ioctls.
diff --git a/defs.h b/defs.h
index 9c8dc4aab..e34988559 100644
--- a/defs.h
+++ b/defs.h
@@ -475,7 +475,7 @@ extern int printflags P((const struct xlat *, int, const char *));
extern const char *sprintflags P((const char *, const struct xlat *, int));
extern int umoven P((struct tcb *, long, int, char *));
extern int umovestr P((struct tcb *, long, int, char *));
-extern int upeek P((int, long, long *));
+extern int upeek P((struct tcb *, long, long *));
extern void dumpiov P((struct tcb *, int, long));
extern void dumpstr P((struct tcb *, long, int));
extern void printstr P((struct tcb *, long, int));
diff --git a/process.c b/process.c
index f95add37b..8653c885c 100644
--- a/process.c
+++ b/process.c
@@ -812,7 +812,7 @@ setarg(tcp, argnum)
{
unsigned long *bsp, *ap;
- if (upeek(tcp->pid, PT_AR_BSP, (long *) &bsp) , 0)
+ if (upeek(tcp, PT_AR_BSP, (long *) &bsp) , 0)
return -1;
ap = ia64_rse_skip_regs(bsp, argnum);
@@ -854,7 +854,7 @@ setarg(tcp, argnum)
else {
unsigned long *sp;
- if (upeek(tcp->pid, REG_SP, (long *) &sp) , 0)
+ if (upeek(tcp, REG_SP, (long *) &sp) , 0)
return -1;
ptrace(PTRACE_POKEDATA, tcp->pid,
diff --git a/signal.c b/signal.c
index 8a26e67c2..d63fae459 100644
--- a/signal.c
+++ b/signal.c
@@ -921,7 +921,7 @@ int sig;
#ifdef SUNOS4
void (*u_signal)();
- if (upeek(tcp->pid, uoff(u_signal[0]) + sig*sizeof(u_signal),
+ if (upeek(tcp, uoff(u_signal[0]) + sig*sizeof(u_signal),
(long *) &u_signal) < 0) {
return 0;
}
@@ -1266,7 +1266,7 @@ struct tcb *tcp;
if (entering(tcp)) {
tcp->u_arg[0] = 0;
- if (upeek(tcp->pid,PT_GPR15,&usp)<0)
+ if (upeek(tcp,PT_GPR15,&usp)<0)
return 0;
if (umove(tcp, usp+__SIGNAL_FRAMESIZE, &sc) < 0)
return 0;
@@ -1287,7 +1287,7 @@ struct tcb *tcp;
if (entering(tcp)) {
tcp->u_arg[0] = 0;
- if (upeek(tcp->pid, 4*UESP, &esp) < 0)
+ if (upeek(tcp, 4*UESP, &esp) < 0)
return 0;
if (umove(tcp, esp, &sc) < 0)
return 0;
@@ -1313,7 +1313,7 @@ struct tcb *tcp;
/* offset of sigcontext in the kernel's sigframe structure: */
# define SIGFRAME_SC_OFFSET 0x90
tcp->u_arg[0] = 0;
- if (upeek(tcp->pid, PT_R12, &sp) < 0)
+ if (upeek(tcp, PT_R12, &sp) < 0)
return 0;
if (umove(tcp, sp + 16 + SIGFRAME_SC_OFFSET, &sc) < 0)
return 0;
@@ -1338,7 +1338,7 @@ struct tcb *tcp;
if (entering(tcp)) {
tcp->u_arg[0] = 0;
- if (upeek(tcp->pid, sizeof(unsigned long)*PT_R1, &esp) < 0)
+ if (upeek(tcp, sizeof(unsigned long)*PT_R1, &esp) < 0)
return 0;
if (umove(tcp, esp, &sc) < 0)
return 0;
@@ -1362,7 +1362,7 @@ struct tcb *tcp;
if (entering(tcp)) {
tcp->u_arg[0] = 0;
- if (upeek(tcp->pid, 4*PT_USP, &usp) < 0)
+ if (upeek(tcp, 4*PT_USP, &usp) < 0)
return 0;
if (umove(tcp, usp, &sc) < 0)
return 0;
@@ -1386,7 +1386,7 @@ struct tcb *tcp;
if (entering(tcp)) {
tcp->u_arg[0] = 0;
- if (upeek(tcp->pid, REG_FP, &fp) < 0)
+ if (upeek(tcp, REG_FP, &fp) < 0)
return 0;
if (umove(tcp, fp, &sc) < 0)
return 0;
@@ -1441,7 +1441,7 @@ struct tcb *tcp;
if(entering(tcp)) {
tcp->u_arg[0] = 0;
- if (upeek(tcp->pid, REG_SP, &sp) < 0)
+ if (upeek(tcp, REG_SP, &sp) < 0)
return 0;
/* There are six words followed by a 128-byte siginfo. */
sp = sp + 6 * 4 + 128;
diff --git a/strace.c b/strace.c
index 9f3c7247c..29eb9cb50 100644
--- a/strace.c
+++ b/strace.c
@@ -2446,8 +2446,8 @@ Process %d attached (waiting for parent)\n",
struct siginfo si;
long psr;
- upeek(pid, PT_CR_IPSR, &psr);
- upeek(pid, PT_CR_IIP, &pc);
+ upeek(tcp, PT_CR_IPSR, &psr);
+ upeek(tcp, PT_CR_IIP, &pc);
pc += (psr >> PSR_RI) & 0x3;
ptrace(PT_GETSIGINFO, pid, 0, (long) &si);
diff --git a/syscall.c b/syscall.c
index 16d6288d7..c2940c396 100644
--- a/syscall.c
+++ b/syscall.c
@@ -811,7 +811,7 @@ struct tcb *tcp;
return 0;
}
- if (upeek(pid, PT_GPR2, &syscall_mode) < 0)
+ if (upeek(tcp, PT_GPR2, &syscall_mode) < 0)
return -1;
if (syscall_mode != -ENOSYS) {
@@ -831,7 +831,7 @@ struct tcb *tcp;
PT_GPR8, PT_GPR9, PT_GPR10, PT_GPR11,
PT_GPR12, PT_GPR13, PT_GPR14, PT_GPR15};
- if (upeek(pid, PT_PSWADDR, &pc) < 0)
+ if (upeek(tcp, PT_PSWADDR, &pc) < 0)
return -1;
errno = 0;
opcode = ptrace(PTRACE_PEEKTEXT, pid, (char *)(pc-sizeof(long)), 0);
@@ -865,13 +865,13 @@ struct tcb *tcp;
tmp = 0;
offset_reg = (opcode & 0x000f0000) >> 16;
- if (offset_reg && (upeek(pid, gpr_offset[offset_reg], &tmp) < 0))
+ if (offset_reg && (upeek(tcp, gpr_offset[offset_reg], &tmp) < 0))
return -1;
svc_addr += tmp;
tmp = 0;
offset_reg = (opcode & 0x0000f000) >> 12;
- if (offset_reg && (upeek(pid, gpr_offset[offset_reg], &tmp) < 0))
+ if (offset_reg && (upeek(tcp, gpr_offset[offset_reg], &tmp) < 0))
return -1;
svc_addr += tmp;
@@ -885,14 +885,14 @@ struct tcb *tcp;
#endif
tmp = 0;
offset_reg = (opcode & 0x00f00000) >> 20;
- if (offset_reg && (upeek(pid, gpr_offset[offset_reg], &tmp) < 0))
+ if (offset_reg && (upeek(tcp, gpr_offset[offset_reg], &tmp) < 0))
return -1;
scno = (scno | tmp) & 0xff;
}
}
#elif defined (POWERPC)
- if (upeek(pid, sizeof(unsigned long)*PT_R0, &scno) < 0)
+ if (upeek(tcp, sizeof(unsigned long)*PT_R0, &scno) < 0)
return -1;
if (!(tcp->flags & TCB_INSYSCALL)) {
/* Check if we return from execve. */
@@ -902,16 +902,16 @@ struct tcb *tcp;
}
}
#elif defined(BFIN)
- if (upeek(pid, PT_ORIG_P0, &scno))
+ if (upeek(tcp, PT_ORIG_P0, &scno))
return -1;
/* Check if we return from execve. */
if (tcp->flags & TCB_WAITEXECVE && tcp->flags & TCB_INSYSCALL)
tcp->flags &= ~(TCB_INSYSCALL | TCB_WAITEXECVE);
#elif defined (I386)
- if (upeek(pid, 4*ORIG_EAX, &scno) < 0)
+ if (upeek(tcp, 4*ORIG_EAX, &scno) < 0)
return -1;
#elif defined (X86_64)
- if (upeek(pid, 8*ORIG_RAX, &scno) < 0)
+ if (upeek(tcp, 8*ORIG_RAX, &scno) < 0)
return -1;
if (!(tcp->flags & TCB_INSYSCALL)) {
@@ -924,7 +924,7 @@ struct tcb *tcp;
* It takes only one ptrace and thus doesn't need
* to be cached.
*/
- if (upeek(pid, 8*CS, &val) < 0)
+ if (upeek(tcp, 8*CS, &val) < 0)
return -1;
switch(val)
{
@@ -944,7 +944,7 @@ struct tcb *tcp;
*/
unsigned long val, rip, i;
- if(upeek(pid, 8*RIP, &rip)<0)
+ if(upeek(tcp, 8*RIP, &rip)<0)
perror("upeek(RIP)");
/* sizeof(syscall) == sizeof(int 0x80) == 2 */
@@ -980,14 +980,14 @@ struct tcb *tcp;
}
#elif defined(IA64)
# define IA64_PSR_IS ((long)1 << 34)
- if (upeek (pid, PT_CR_IPSR, &psr) >= 0)
+ if (upeek (tcp, PT_CR_IPSR, &psr) >= 0)
ia32 = (psr & IA64_PSR_IS) != 0;
if (!(tcp->flags & TCB_INSYSCALL)) {
if (ia32) {
- if (upeek(pid, PT_R1, &scno) < 0) /* orig eax */
+ if (upeek(tcp, PT_R1, &scno) < 0) /* orig eax */
return -1;
} else {
- if (upeek (pid, PT_R15, &scno) < 0)
+ if (upeek (tcp, PT_R15, &scno) < 0)
return -1;
}
/* Check if we return from execve. */
@@ -997,9 +997,9 @@ struct tcb *tcp;
}
} else {
/* syscall in progress */
- if (upeek (pid, PT_R8, &r8) < 0)
+ if (upeek (tcp, PT_R8, &r8) < 0)
return -1;
- if (upeek (pid, PT_R10, &r10) < 0)
+ if (upeek (tcp, PT_R10, &r10) < 0)
return -1;
}
#elif defined (ARM)
@@ -1083,7 +1083,7 @@ struct tcb *tcp;
}
}
#elif defined (M68K)
- if (upeek(pid, 4*PT_ORIG_D0, &scno) < 0)
+ if (upeek(tcp, 4*PT_ORIG_D0, &scno) < 0)
return -1;
#elif defined (LINUX_MIPSN32)
unsigned long long regs[38];
@@ -1111,10 +1111,10 @@ struct tcb *tcp;
}
}
#elif defined (MIPS)
- if (upeek(pid, REG_A3, &a3) < 0)
+ if (upeek(tcp, REG_A3, &a3) < 0)
return -1;
if(!(tcp->flags & TCB_INSYSCALL)) {
- if (upeek(pid, REG_V0, &scno) < 0)
+ if (upeek(tcp, REG_V0, &scno) < 0)
return -1;
/* Check if we return from execve. */
@@ -1131,15 +1131,15 @@ struct tcb *tcp;
}
}
} else {
- if (upeek(pid, REG_V0, &r2) < 0)
+ if (upeek(tcp, REG_V0, &r2) < 0)
return -1;
}
#elif defined (ALPHA)
- if (upeek(pid, REG_A3, &a3) < 0)
+ if (upeek(tcp, REG_A3, &a3) < 0)
return -1;
if (!(tcp->flags & TCB_INSYSCALL)) {
- if (upeek(pid, REG_R0, &scno) < 0)
+ if (upeek(tcp, REG_R0, &scno) < 0)
return -1;
/* Check if we return from execve. */
@@ -1161,7 +1161,7 @@ struct tcb *tcp;
}
}
else {
- if (upeek(pid, REG_R0, &r0) < 0)
+ if (upeek(tcp, REG_R0, &r0) < 0)
return -1;
}
#elif defined (SPARC) || defined (SPARC64)
@@ -1231,7 +1231,7 @@ struct tcb *tcp;
}
}
#elif defined(HPPA)
- if (upeek(pid, PT_GR20, &scno) < 0)
+ if (upeek(tcp, PT_GR20, &scno) < 0)
return -1;
if (!(tcp->flags & TCB_INSYSCALL)) {
/* Check if we return from execve. */
@@ -1244,7 +1244,7 @@ struct tcb *tcp;
/*
* In the new syscall ABI, the system call number is in R3.
*/
- if (upeek(pid, 4*(REG_REG0+3), &scno) < 0)
+ if (upeek(tcp, 4*(REG_REG0+3), &scno) < 0)
return -1;
if (scno < 0) {
@@ -1270,7 +1270,7 @@ struct tcb *tcp;
}
}
#elif defined(SH64)
- if (upeek(pid, REG_SYSCALL, &scno) < 0)
+ if (upeek(tcp, REG_SYSCALL, &scno) < 0)
return -1;
scno &= 0xFFFF;
@@ -1284,15 +1284,15 @@ struct tcb *tcp;
#endif /* SH64 */
#endif /* LINUX */
#ifdef SUNOS4
- if (upeek(pid, uoff(u_arg[7]), &scno) < 0)
+ if (upeek(tcp, uoff(u_arg[7]), &scno) < 0)
return -1;
#elif defined(SH)
/* new syscall ABI returns result in R0 */
- if (upeek(pid, 4*REG_REG0, (long *)&r0) < 0)
+ if (upeek(tcp, 4*REG_REG0, (long *)&r0) < 0)
return -1;
#elif defined(SH64)
/* ABI defines result returned in r9 */
- if (upeek(pid, REG_GENERAL(9), (long *)&r9) < 0)
+ if (upeek(tcp, REG_GENERAL(9), (long *)&r9) < 0)
return -1;
#endif
@@ -1341,9 +1341,7 @@ static int
syscall_fixup(tcp)
struct tcb *tcp;
{
-#ifndef USE_PROCFS
- int pid = tcp->pid;
-#else /* USE_PROCFS */
+#ifdef USE_PROCFS
int scno = known_scno(tcp);
if (!(tcp->flags & TCB_INSYSCALL)) {
@@ -1407,7 +1405,7 @@ struct tcb *tcp;
#endif /* SUNOS4 */
#ifdef LINUX
#if defined (I386)
- if (upeek(pid, 4*EAX, &eax) < 0)
+ if (upeek(tcp, 4*EAX, &eax) < 0)
return -1;
if (eax != -ENOSYS && !(tcp->flags & TCB_INSYSCALL)) {
if (debug)
@@ -1415,7 +1413,7 @@ struct tcb *tcp;
return 0;
}
#elif defined (X86_64)
- if (upeek(pid, 8*RAX, &rax) < 0)
+ if (upeek(tcp, 8*RAX, &rax) < 0)
return -1;
if (current_personality == 1)
rax = (long int)(int)rax; /* sign extend from 32 bits */
@@ -1425,7 +1423,7 @@ struct tcb *tcp;
return 0;
}
#elif defined (S390) || defined (S390X)
- if (upeek(pid, PT_GPR2, &gpr2) < 0)
+ if (upeek(tcp, PT_GPR2, &gpr2) < 0)
return -1;
if (syscall_mode != -ENOSYS)
syscall_mode = tcp->scno;
@@ -1445,14 +1443,14 @@ struct tcb *tcp;
}
#elif defined (POWERPC)
# define SO_MASK 0x10000000
- if (upeek(pid, sizeof(unsigned long)*PT_CCR, &flags) < 0)
+ if (upeek(tcp, sizeof(unsigned long)*PT_CCR, &flags) < 0)
return -1;
- if (upeek(pid, sizeof(unsigned long)*PT_R3, &result) < 0)
+ if (upeek(tcp, sizeof(unsigned long)*PT_R3, &result) < 0)
return -1;
if (flags & SO_MASK)
result = -result;
#elif defined (M68K)
- if (upeek(pid, 4*PT_D0, &d0) < 0)
+ if (upeek(tcp, 4*PT_D0, &d0) < 0)
return -1;
if (d0 != -ENOSYS && !(tcp->flags & TCB_INSYSCALL)) {
if (debug)
@@ -1464,15 +1462,15 @@ struct tcb *tcp;
* Nothing required
*/
#elif defined(BFIN)
- if (upeek(pid, PT_R0, &r0) < 0)
+ if (upeek(tcp, PT_R0, &r0) < 0)
return -1;
#elif defined (HPPA)
- if (upeek(pid, PT_GR28, &r28) < 0)
+ if (upeek(tcp, PT_GR28, &r28) < 0)
return -1;
#elif defined(IA64)
- if (upeek(pid, PT_R10, &r10) < 0)
+ if (upeek(tcp, PT_R10, &r10) < 0)
return -1;
- if (upeek(pid, PT_R8, &r8) < 0)
+ if (upeek(tcp, PT_R8, &r8) < 0)
return -1;
if (ia32 && r8 != -ENOSYS && !(tcp->flags & TCB_INSYSCALL)) {
if (debug)
@@ -1687,12 +1685,12 @@ struct tcb *tcp;
#endif /* LINUX */
#ifdef SUNOS4
/* get error code from user struct */
- if (upeek(pid, uoff(u_error), &u_error) < 0)
+ if (upeek(tcp, uoff(u_error), &u_error) < 0)
return -1;
u_error >>= 24; /* u_error is a char */
/* get system call return value */
- if (upeek(pid, uoff(u_rval1), &tcp->u_rval) < 0)
+ if (upeek(tcp, uoff(u_rval1), &tcp->u_rval) < 0)
return -1;
#endif /* SUNOS4 */
#ifdef SVR4
@@ -1822,7 +1820,7 @@ force_result(tcp, error, rval)
return -1;
#else
#ifdef POWERPC
- if (upeek(tcp->pid, sizeof(unsigned long)*PT_CCR, &flags) < 0)
+ if (upeek(tcp, sizeof(unsigned long)*PT_CCR, &flags) < 0)
return -1;
if (error) {
flags |= SO_MASK;
@@ -1956,9 +1954,6 @@ static int
syscall_enter(tcp)
struct tcb *tcp;
{
-#ifndef USE_PROCFS
- int pid = tcp->pid;
-#endif /* !USE_PROCFS */
#ifdef LINUX
#if defined(S390) || defined(S390X)
{
@@ -1968,7 +1963,7 @@ struct tcb *tcp;
else
tcp->u_nargs = MAX_ARGS;
for (i = 0; i < tcp->u_nargs; i++) {
- if (upeek(pid,i==0 ? PT_ORIGGPR2:PT_GPR2+i*sizeof(long), &tcp->u_arg[i]) < 0)
+ if (upeek(tcp,i==0 ? PT_ORIGGPR2:PT_GPR2+i*sizeof(long), &tcp->u_arg[i]) < 0)
return -1;
}
}
@@ -1983,7 +1978,7 @@ struct tcb *tcp;
/* WTA: if scno is out-of-bounds this will bomb. Add range-check
* for scno somewhere above here!
*/
- if (upeek(pid, REG_A0+i, &tcp->u_arg[i]) < 0)
+ if (upeek(tcp, REG_A0+i, &tcp->u_arg[i]) < 0)
return -1;
}
}
@@ -1997,9 +1992,9 @@ struct tcb *tcp;
# define PT_RBS_END PT_AR_BSP
# endif
- if (upeek(pid, PT_RBS_END, &rbs_end) < 0)
+ if (upeek(tcp, PT_RBS_END, &rbs_end) < 0)
return -1;
- if (upeek(pid, PT_CFM, (long *) &cfm) < 0)
+ if (upeek(tcp, PT_CFM, (long *) &cfm) < 0)
return -1;
sof = (cfm >> 0) & 0x7f;
@@ -2020,17 +2015,17 @@ struct tcb *tcp;
int i;
if (/* EBX = out0 */
- upeek(pid, PT_R11, (long *) &tcp->u_arg[0]) < 0
+ upeek(tcp, PT_R11, (long *) &tcp->u_arg[0]) < 0
/* ECX = out1 */
- || upeek(pid, PT_R9, (long *) &tcp->u_arg[1]) < 0
+ || upeek(tcp, PT_R9, (long *) &tcp->u_arg[1]) < 0
/* EDX = out2 */
- || upeek(pid, PT_R10, (long *) &tcp->u_arg[2]) < 0
+ || upeek(tcp, PT_R10, (long *) &tcp->u_arg[2]) < 0
/* ESI = out3 */
- || upeek(pid, PT_R14, (long *) &tcp->u_arg[3]) < 0
+ || upeek(tcp, PT_R14, (long *) &tcp->u_arg[3]) < 0
/* EDI = out4 */
- || upeek(pid, PT_R15, (long *) &tcp->u_arg[4]) < 0
+ || upeek(tcp, PT_R15, (long *) &tcp->u_arg[4]) < 0
/* EBP = out5 */
- || upeek(pid, PT_R13, (long *) &tcp->u_arg[5]) < 0)
+ || upeek(tcp, PT_R13, (long *) &tcp->u_arg[5]) < 0)
return -1;
for (i = 0; i < 6; ++i)
@@ -2075,17 +2070,17 @@ struct tcb *tcp;
else
nargs = tcp->u_nargs = MAX_ARGS;
if(nargs > 4) {
- if(upeek(pid, REG_SP, &sp) < 0)
+ if(upeek(tcp, REG_SP, &sp) < 0)
return -1;
for(i = 0; i < 4; i++) {
- if (upeek(pid, REG_A0 + i, &tcp->u_arg[i])<0)
+ if (upeek(tcp, REG_A0 + i, &tcp->u_arg[i])<0)
return -1;
}
umoven(tcp, sp+16, (nargs-4) * sizeof(tcp->u_arg[0]),
(char *)(tcp->u_arg + 4));
} else {
for(i = 0; i < nargs; i++) {
- if (upeek(pid, REG_A0 + i, &tcp->u_arg[i]) < 0)
+ if (upeek(tcp, REG_A0 + i, &tcp->u_arg[i]) < 0)
return -1;
}
}
@@ -2101,7 +2096,7 @@ struct tcb *tcp;
else
tcp->u_nargs = MAX_ARGS;
for (i = 0; i < tcp->u_nargs; i++) {
- if (upeek(pid, (i==0) ?
+ if (upeek(tcp, (i==0) ?
(sizeof(unsigned long)*PT_ORIG_R3) :
((i+PT_R3)*sizeof(unsigned long)),
&tcp->u_arg[i]) < 0)
@@ -2128,7 +2123,7 @@ struct tcb *tcp;
else
tcp->u_nargs = MAX_ARGS;
for (i = 0; i < tcp->u_nargs; i++) {
- if (upeek(pid, PT_GR26-4*i, &tcp->u_arg[i]) < 0)
+ if (upeek(tcp, PT_GR26-4*i, &tcp->u_arg[i]) < 0)
return -1;
}
}
@@ -2154,7 +2149,7 @@ struct tcb *tcp;
tcp->u_nargs = sizeof(argreg) / sizeof(argreg[0]);
for (i = 0; i < tcp->u_nargs; ++i)
- if (upeek(pid, argreg[i], &tcp->u_arg[i]) < 0)
+ if (upeek(tcp, argreg[i], &tcp->u_arg[i]) < 0)
return -1;
}
#elif defined(SH)
@@ -2167,7 +2162,7 @@ struct tcb *tcp;
tcp->u_nargs = sysent[tcp->scno].nargs;
for (i = 0; i < tcp->u_nargs; i++) {
- if (upeek(pid, 4*syscall_regs[i], &tcp->u_arg[i]) < 0)
+ if (upeek(tcp, 4*syscall_regs[i], &tcp->u_arg[i]) < 0)
return -1;
}
}
@@ -2188,7 +2183,7 @@ struct tcb *tcp;
tcp->u_nargs = sysent[tcp->scno].nargs;
for (i = 0; i < tcp->u_nargs; i++) {
- if (upeek(pid, REG_GENERAL(syscall_regs[i]), &tcp->u_arg[i]) < 0)
+ if (upeek(tcp, REG_GENERAL(syscall_regs[i]), &tcp->u_arg[i]) < 0)
return -1;
}
}
@@ -2206,7 +2201,7 @@ struct tcb *tcp;
else
tcp->u_nargs = MAX_ARGS;
for (i = 0; i < tcp->u_nargs; i++) {
- if (upeek(pid, argreg[current_personality][i]*8, &tcp->u_arg[i]) < 0)
+ if (upeek(tcp, argreg[current_personality][i]*8, &tcp->u_arg[i]) < 0)
return -1;
}
}
@@ -2218,7 +2213,7 @@ struct tcb *tcp;
else
tcp->u_nargs = MAX_ARGS;
for (i = 0; i < tcp->u_nargs; i++) {
- if (upeek(pid, i*4, &tcp->u_arg[i]) < 0)
+ if (upeek(tcp, i*4, &tcp->u_arg[i]) < 0)
return -1;
}
}
@@ -2234,7 +2229,7 @@ struct tcb *tcp;
for (i = 0; i < tcp->u_nargs; i++) {
struct user *u;
- if (upeek(pid, uoff(u_arg[0]) +
+ if (upeek(tcp, uoff(u_arg[0]) +
(i*sizeof(u->u_arg[0])), &tcp->u_arg[i]) < 0)
return -1;
}
@@ -2625,16 +2620,16 @@ struct tcb *tcp;
return -1;
val = regs.r_o1;
#elif defined(SH)
- if (upeek(tcp->pid, 4*(REG_REG0+1), &val) < 0)
+ if (upeek(tcp, 4*(REG_REG0+1), &val) < 0)
return -1;
#elif defined(IA64)
- if (upeek(tcp->pid, PT_R9, &val) < 0)
+ if (upeek(tcp, PT_R9, &val) < 0)
return -1;
#endif /* SPARC || SPARC64 */
#endif /* LINUX */
#ifdef SUNOS4
- if (upeek(tcp->pid, uoff(u_rval2), &val) < 0)
+ if (upeek(tcp, uoff(u_rval2), &val) < 0)
return -1;
#endif /* SUNOS4 */
diff --git a/util.c b/util.c
index 4066e0783..d64dd840f 100644
--- a/util.c
+++ b/util.c
@@ -1046,8 +1046,8 @@ char *laddr;
#ifndef USE_PROCFS
int
-upeek(pid, off, res)
-int pid;
+upeek(tcp, off, res)
+struct tcb *tcp;
long off;
long *res;
{
@@ -1078,10 +1078,10 @@ long *res;
}
#endif /* SUNOS4_KERNEL_ARCH_KLUDGE */
errno = 0;
- val = ptrace(PTRACE_PEEKUSER, pid, (char *) off, 0);
+ val = ptrace(PTRACE_PEEKUSER, tcp->pid, (char *) off, 0);
if (val == -1 && errno) {
char buf[60];
- sprintf(buf,"upeek: ptrace(PTRACE_PEEKUSER,%d,%lu,0)",pid,off);
+ sprintf(buf,"upeek: ptrace(PTRACE_PEEKUSER,%d,%lu,0)", tcp->pid, off);
perror(buf);
return -1;
}
@@ -1100,31 +1100,31 @@ struct tcb *tcp;
#ifdef LINUX
long pc;
#if defined(I386)
- if (upeek(tcp->pid, 4*EIP, &pc) < 0)
+ if (upeek(tcp, 4*EIP, &pc) < 0)
return -1;
#elif defined(X86_64)
- if (upeek(tcp->pid, 8*RIP, &pc) < 0)
+ if (upeek(tcp, 8*RIP, &pc) < 0)
return -1;
#elif defined(IA64)
- if (upeek(tcp->pid, PT_B0, &pc) < 0)
+ if (upeek(tcp, PT_B0, &pc) < 0)
return -1;
#elif defined(ARM)
- if (upeek(tcp->pid, 4*15, &pc) < 0)
+ if (upeek(tcp, 4*15, &pc) < 0)
return -1;
#elif defined(BFIN)
- if (upeek(tcp->pid, REG_PC, &pc) < 0)
+ if (upeek(tcp, REG_PC, &pc) < 0)
return -1;
#elif defined(POWERPC)
- if (upeek(tcp->pid, sizeof(unsigned long)*PT_NIP, &pc) < 0)
+ if (upeek(tcp, sizeof(unsigned long)*PT_NIP, &pc) < 0)
return -1;
#elif defined(M68K)
- if (upeek(tcp->pid, 4*PT_PC, &pc) < 0)
+ if (upeek(tcp, 4*PT_PC, &pc) < 0)
return -1;
#elif defined(ALPHA)
- if (upeek(tcp->pid, REG_PC, &pc) < 0)
+ if (upeek(tcp, REG_PC, &pc) < 0)
return -1;
#elif defined(MIPS)
- if (upeek(tcp->pid, REG_EPC, &pc) < 0)
+ if (upeek(tcp, REG_EPC, &pc) < 0)
return -1;
#elif defined(SPARC) || defined(SPARC64)
struct regs regs;
@@ -1132,16 +1132,16 @@ struct tcb *tcp;
return -1;
pc = regs.r_pc;
#elif defined(S390) || defined(S390X)
- if(upeek(tcp->pid,PT_PSWADDR,&pc) < 0)
+ if(upeek(tcp,PT_PSWADDR,&pc) < 0)
return -1;
#elif defined(HPPA)
- if(upeek(tcp->pid,PT_IAOQ0,&pc) < 0)
+ if(upeek(tcp,PT_IAOQ0,&pc) < 0)
return -1;
#elif defined(SH)
- if (upeek(tcp->pid, 4*REG_PC ,&pc) < 0)
+ if (upeek(tcp, 4*REG_PC ,&pc) < 0)
return -1;
#elif defined(SH64)
- if (upeek(tcp->pid, REG_PC ,&pc) < 0)
+ if (upeek(tcp, REG_PC ,&pc) < 0)
return -1;
#endif
return pc;
@@ -1186,7 +1186,7 @@ struct tcb *tcp;
#ifdef I386
long eip;
- if (upeek(tcp->pid, 4*EIP, &eip) < 0) {
+ if (upeek(tcp, 4*EIP, &eip) < 0) {
PRINTBADPC;
return;
}
@@ -1194,7 +1194,7 @@ struct tcb *tcp;
#elif defined(S390) || defined(S390X)
long psw;
- if(upeek(tcp->pid,PT_PSWADDR,&psw) < 0) {
+ if(upeek(tcp,PT_PSWADDR,&psw) < 0) {
PRINTBADPC;
return;
}
@@ -1207,7 +1207,7 @@ struct tcb *tcp;
#elif defined(X86_64)
long rip;
- if (upeek(tcp->pid, 8*RIP, &rip) < 0) {
+ if (upeek(tcp, 8*RIP, &rip) < 0) {
PRINTBADPC;
return;
}
@@ -1215,7 +1215,7 @@ struct tcb *tcp;
#elif defined(IA64)
long ip;
- if (upeek(tcp->pid, PT_B0, &ip) < 0) {
+ if (upeek(tcp, PT_B0, &ip) < 0) {
PRINTBADPC;
return;
}
@@ -1223,7 +1223,7 @@ struct tcb *tcp;
#elif defined(POWERPC)
long pc;
- if (upeek(tcp->pid, sizeof(unsigned long)*PT_NIP, &pc) < 0) {
+ if (upeek(tcp, sizeof(unsigned long)*PT_NIP, &pc) < 0) {
tprintf ("[????????] ");
return;
}
@@ -1231,7 +1231,7 @@ struct tcb *tcp;
#elif defined(M68K)
long pc;
- if (upeek(tcp->pid, 4*PT_PC, &pc) < 0) {
+ if (upeek(tcp, 4*PT_PC, &pc) < 0) {
tprintf ("[????????] ");
return;
}
@@ -1239,7 +1239,7 @@ struct tcb *tcp;
#elif defined(ALPHA)
long pc;
- if (upeek(tcp->pid, REG_PC, &pc) < 0) {
+ if (upeek(tcp, REG_PC, &pc) < 0) {
tprintf ("[????????????????] ");
return;
}
@@ -1254,7 +1254,7 @@ struct tcb *tcp;
#elif defined(HPPA)
long pc;
- if(upeek(tcp->pid,PT_IAOQ0,&pc) < 0) {
+ if(upeek(tcp,PT_IAOQ0,&pc) < 0) {
tprintf ("[????????] ");
return;
}
@@ -1262,7 +1262,7 @@ struct tcb *tcp;
#elif defined(MIPS)
long pc;
- if (upeek(tcp->pid, REG_EPC, &pc) < 0) {
+ if (upeek(tcp, REG_EPC, &pc) < 0) {
tprintf ("[????????] ");
return;
}
@@ -1270,7 +1270,7 @@ struct tcb *tcp;
#elif defined(SH)
long pc;
- if (upeek(tcp->pid, 4*REG_PC, &pc) < 0) {
+ if (upeek(tcp, 4*REG_PC, &pc) < 0) {
tprintf ("[????????] ");
return;
}
@@ -1278,7 +1278,7 @@ struct tcb *tcp;
#elif defined(SH64)
long pc;
- if (upeek(tcp->pid, REG_PC, &pc) < 0) {
+ if (upeek(tcp, REG_PC, &pc) < 0) {
tprintf ("[????????????????] ");
return;
}
@@ -1286,7 +1286,7 @@ struct tcb *tcp;
#elif defined(ARM)
long pc;
- if (upeek(tcp->pid, 4*15, &pc) < 0) {
+ if (upeek(tcp, 4*15, &pc) < 0) {
PRINTBADPC;
return;
}
@@ -1294,7 +1294,7 @@ struct tcb *tcp;
#elif defined(BFIN)
long pc;
- if (upeek(tcp->pid, PT_PC, &pc) < 0) {
+ if (upeek(tcp, PT_PC, &pc) < 0) {
PRINTBADPC;
return;
}
@@ -1366,9 +1366,9 @@ arg_setup(struct tcb *tcp, arg_setup_state *state)
return 0;
}
- if (upeek(tcp->pid, PT_AR_BSP, &bsp) < 0)
+ if (upeek(tcp, PT_AR_BSP, &bsp) < 0)
return -1;
- if (upeek(tcp->pid, PT_CFM, (long *) &cfm) < 0)
+ if (upeek(tcp, PT_CFM, (long *) &cfm) < 0)
return -1;
sof = (cfm >> 0) & 0x7f;
@@ -1388,7 +1388,7 @@ get_arg0 (struct tcb *tcp, arg_setup_state *state, long *valp)
int ret;
if (ia32)
- ret = upeek (tcp->pid, PT_R11, valp);
+ ret = upeek (tcp, PT_R11, valp);
else
ret = umoven (tcp,
(unsigned long) ia64_rse_skip_regs(*state, 0),
@@ -1402,7 +1402,7 @@ get_arg1 (struct tcb *tcp, arg_setup_state *state, long *valp)
int ret;
if (ia32)
- ret = upeek (tcp->pid, PT_R9, valp);
+ ret = upeek (tcp, PT_R9, valp);
else
ret = umoven (tcp,
(unsigned long) ia64_rse_skip_regs(*state, 1),
@@ -1511,9 +1511,9 @@ typedef int arg_setup_state;
# define arg_setup(tcp, state) (0)
# define arg_finish_change(tcp, state) 0
# define get_arg0(tcp, cookie, valp) \
- (upeek ((tcp)->pid, arg0_offset, (valp)))
+ (upeek ((tcp), arg0_offset, (valp)))
# define get_arg1(tcp, cookie, valp) \
- (upeek ((tcp)->pid, arg1_offset, (valp)))
+ (upeek ((tcp), arg1_offset, (valp)))
static int
set_arg0 (struct tcb *tcp, void *cookie, long val)
@@ -1700,7 +1700,7 @@ struct tcb *tcp;
tcp->pid);
return -1;
}
- if (upeek(tcp->pid, PT_CR_IIP, &tcp->baddr) < 0)
+ if (upeek(tcp, PT_CR_IIP, &tcp->baddr) < 0)
return -1;
if (debug)
fprintf(stderr, "[%d] setting bpt at %lx\n",
@@ -1734,9 +1734,9 @@ struct tcb *tcp;
pid_t pid;
pid = tcp->pid;
- if (upeek(pid, PT_CR_IPSR, &ipsr) < 0)
+ if (upeek(tcp, PT_CR_IPSR, &ipsr) < 0)
return -1;
- if (upeek(pid, PT_CR_IIP, &addr) < 0)
+ if (upeek(tcp, PT_CR_IIP, &addr) < 0)
return -1;
/* store "ri" in low two bits */
tcp->baddr = addr | ((ipsr >> 41) & 0x3);
@@ -1795,13 +1795,13 @@ struct tcb *tcp;
return -1;
}
#if defined (I386)
- if (upeek(tcp->pid, 4*EIP, &tcp->baddr) < 0)
+ if (upeek(tcp, 4*EIP, &tcp->baddr) < 0)
return -1;
#elif defined (X86_64)
- if (upeek(tcp->pid, 8*RIP, &tcp->baddr) < 0)
+ if (upeek(tcp, 8*RIP, &tcp->baddr) < 0)
return -1;
#elif defined (M68K)
- if (upeek(tcp->pid, 4*PT_PC, &tcp->baddr) < 0)
+ if (upeek(tcp, 4*PT_PC, &tcp->baddr) < 0)
return -1;
#elif defined (ALPHA)
return -1;
@@ -1810,17 +1810,17 @@ struct tcb *tcp;
#elif defined (MIPS)
return -1; /* FIXME: I do not know what i do - Flo */
#elif defined (POWERPC)
- if (upeek(tcp->pid, sizeof(unsigned long)*PT_NIP, &tcp->baddr) < 0)
+ if (upeek(tcp, sizeof(unsigned long)*PT_NIP, &tcp->baddr) < 0)
return -1;
#elif defined(S390) || defined(S390X)
- if (upeek(tcp->pid,PT_PSWADDR, &tcp->baddr) < 0)
+ if (upeek(tcp,PT_PSWADDR, &tcp->baddr) < 0)
return -1;
#elif defined(HPPA)
- if (upeek(tcp->pid, PT_IAOQ0, &tcp->baddr) < 0)
+ if (upeek(tcp, PT_IAOQ0, &tcp->baddr) < 0)
return -1;
tcp->baddr &= ~0x03;
#elif defined(SH)
- if (upeek(tcp->pid, 4*REG_PC, &tcp->baddr) < 0)
+ if (upeek(tcp, 4*REG_PC, &tcp->baddr) < 0)
return -1;
#else
#error unknown architecture
@@ -1946,7 +1946,7 @@ struct tcb *tcp;
}
tcp->flags &= ~TCB_BPTSET;
- if (upeek(tcp->pid, PT_CR_IIP, &addr) < 0)
+ if (upeek(tcp, PT_CR_IIP, &addr) < 0)
return -1;
if (addr != tcp->baddr) {
/* The breakpoint has not been reached yet. */
@@ -1962,9 +1962,9 @@ struct tcb *tcp;
pid = tcp->pid;
- if (upeek(pid, PT_CR_IPSR, &ipsr) < 0)
+ if (upeek(tcp, PT_CR_IPSR, &ipsr) < 0)
return -1;
- if (upeek(pid, PT_CR_IIP, &addr) < 0)
+ if (upeek(tcp, PT_CR_IIP, &addr) < 0)
return -1;
/* restore original bundle: */
@@ -2012,7 +2012,7 @@ struct tcb *tcp;
tcp->flags &= ~TCB_BPTSET;
#ifdef I386
- if (upeek(tcp->pid, 4*EIP, &eip) < 0)
+ if (upeek(tcp, 4*EIP, &eip) < 0)
return -1;
if (eip != tcp->baddr) {
/* The breakpoint has not been reached yet. */
@@ -2023,7 +2023,7 @@ struct tcb *tcp;
return 0;
}
#elif defined(X86_64)
- if (upeek(tcp->pid, 8*RIP, &eip) < 0)
+ if (upeek(tcp, 8*RIP, &eip) < 0)
return -1;
if (eip != tcp->baddr) {
/* The breakpoint has not been reached yet. */
@@ -2034,7 +2034,7 @@ struct tcb *tcp;
return 0;
}
#elif defined(POWERPC)
- if (upeek(tcp->pid, sizeof(unsigned long)*PT_NIP, &pc) < 0)
+ if (upeek(tcp, sizeof(unsigned long)*PT_NIP, &pc) < 0)
return -1;
if (pc != tcp->baddr) {
/* The breakpoint has not been reached yet. */
@@ -2044,7 +2044,7 @@ struct tcb *tcp;
return 0;
}
#elif defined(M68K)
- if (upeek(tcp->pid, 4*PT_PC, &pc) < 0)
+ if (upeek(tcp, 4*PT_PC, &pc) < 0)
return -1;
if (pc != tcp->baddr) {
/* The breakpoint has not been reached yet. */
@@ -2054,7 +2054,7 @@ struct tcb *tcp;
return 0;
}
#elif defined(ALPHA)
- if (upeek(tcp->pid, REG_PC, &pc) < 0)
+ if (upeek(tcp, REG_PC, &pc) < 0)
return -1;
if (pc != tcp->baddr) {
/* The breakpoint has not been reached yet. */
@@ -2064,7 +2064,7 @@ struct tcb *tcp;
return 0;
}
#elif defined(HPPA)
- if (upeek(tcp->pid, PT_IAOQ0, &iaoq) < 0)
+ if (upeek(tcp, PT_IAOQ0, &iaoq) < 0)
return -1;
iaoq &= ~0x03;
if (iaoq != tcp->baddr && iaoq != tcp->baddr + 4) {
@@ -2082,7 +2082,7 @@ struct tcb *tcp;
ptrace(PTRACE_POKEUSER, tcp->pid, (void *)PT_IAOQ0, iaoq);
ptrace(PTRACE_POKEUSER, tcp->pid, (void *)PT_IAOQ1, iaoq);
#elif defined(SH)
- if (upeek(tcp->pid, 4*REG_PC, &pc) < 0)
+ if (upeek(tcp, 4*REG_PC, &pc) < 0)
return -1;
if (pc != tcp->baddr) {
/* The breakpoint has not been reached yet. */
@@ -2156,15 +2156,15 @@ struct tcb *tcp;
#ifdef SUNOS4
static int
-getex(pid, hdr)
-int pid;
+getex(tcp, hdr)
+struct tcb *tcp;
struct exec *hdr;
{
int n;
for (n = 0; n < sizeof *hdr; n += 4) {
long res;
- if (upeek(pid, uoff(u_exdata) + n, &res) < 0)
+ if (upeek(tcp, uoff(u_exdata) + n, &res) < 0)
return -1;
memcpy(((char *) hdr) + n, &res, 4);
}
@@ -2192,7 +2192,7 @@ struct tcb *tcp;
struct link_dynamic_2 ld;
char *strtab, *cp;
- if (getex(pid, &hdr) < 0)
+ if (getex(tcp, &hdr) < 0)
return -1;
if (!hdr.a_dynamic)
return -1;