2005-06-06 Roland McGrath <roland@redhat.com>
* defs.h (struct sysent): New member `native_scno'. (known_scno): Declare new function. * linux/syscallent.h: Add new final field to interesting syscalls. * syscall.c (known_scno): New function. (dumpio, internal_syscall, syscall_fixup, trace_syscall): Use it. * process.c (internal_fork, internal_exit): Likewise. [IA64] (ARG_STACKSIZE, ARG_PTID, ARG_CTID, ARG_TLS): Likewise. * strace.c (proc_open): Likewise. * util.c [LINUX] (setbpt): Likewise. * linux/syscall.h: Remove [!defined(X86_64)] from conditional for defining SYS_socket_subcall et al. * linux/syscallent.h: Likewise for #error check. * syscall.c (trace_syscall): Likewise for SYS_{socketcall,ipc} cases. Fixes RH#158934.
This commit is contained in:
parent
e69b627099
commit
76989d7a16
2
defs.h
2
defs.h
@ -424,6 +424,7 @@ extern void set_overhead P((int));
|
||||
extern void qualify P((char *));
|
||||
extern void newoutf P((struct tcb *));
|
||||
extern int get_scno P((struct tcb *));
|
||||
extern long known_scno P((struct tcb *));
|
||||
extern int trace_syscall P((struct tcb *));
|
||||
extern void printxval P((const struct xlat *, int, const char *));
|
||||
extern int printargs P((struct tcb *));
|
||||
@ -526,6 +527,7 @@ struct sysent {
|
||||
int sys_flags;
|
||||
int (*sys_func)();
|
||||
const char *sys_name;
|
||||
long native_scno; /* Match against SYS_* constants. */
|
||||
};
|
||||
|
||||
extern const struct sysent *sysent;
|
||||
|
2
strace.c
2
strace.c
@ -1002,7 +1002,7 @@ int attaching;
|
||||
if (tcp->status.PR_WHY == PR_SYSENTRY) {
|
||||
tcp->flags &= ~TCB_INSYSCALL;
|
||||
get_scno(tcp);
|
||||
if (tcp->scno == SYS_execve)
|
||||
if (known_scno(tcp) == SYS_execve)
|
||||
break;
|
||||
}
|
||||
/* Set it running: maybe execve will be next. */
|
||||
|
16
util.c
16
util.c
@ -1205,6 +1205,9 @@ struct tcb *tcp;
|
||||
#ifndef CLONE_PTRACE
|
||||
# define CLONE_PTRACE 0x00002000
|
||||
#endif
|
||||
#ifndef CLONE_STOPPED
|
||||
# define CLONE_STOPPED 0x02000000
|
||||
#endif
|
||||
|
||||
#ifdef IA64
|
||||
|
||||
@ -1369,7 +1372,16 @@ typedef int arg_setup_state;
|
||||
static int
|
||||
set_arg0 (struct tcb *tcp, void *cookie, long val)
|
||||
{
|
||||
return ptrace (PTRACE_POKEUSER, tcp->pid, (char*)arg0_offset, val);
|
||||
long oldval,newval;
|
||||
if (get_arg0(tcp, cookie, &oldval) < 0)
|
||||
abort ();
|
||||
if (ptrace (PTRACE_POKEUSER, tcp->pid, (char*)arg0_offset, val) < 0)
|
||||
return -1;
|
||||
if (get_arg0(tcp, cookie, &newval) < 0)
|
||||
abort ();
|
||||
fprintf(stderr, "XXX old %lx set %lx new %lx\n",
|
||||
oldval,val,newval);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -1404,7 +1416,7 @@ struct tcb *tcp;
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (tcp->scno) {
|
||||
switch (known_scno(tcp)) {
|
||||
#ifdef SYS_vfork
|
||||
case SYS_vfork:
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user