summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2017-07-21 18:06:57 +0000
committerkib <kib@FreeBSD.org>2017-07-21 18:06:57 +0000
commit985b26c6741218c134a15526fd32b736bd73fa8a (patch)
treed36644ddbfdb88f2f1d5c702efa9e0eb21ffa94f /sys/kern
parent58ea6bbff153cb15e74f6ea19756c4a1013bfb41 (diff)
downloadFreeBSD-src-985b26c6741218c134a15526fd32b736bd73fa8a.zip
FreeBSD-src-985b26c6741218c134a15526fd32b736bd73fa8a.tar.gz
MFC r319873:
Move struct syscall_args syscall arguments parameters container into struct thread.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/init_main.c3
-rw-r--r--sys/kern/kern_fork.c3
-rw-r--r--sys/kern/kern_kthread.c1
-rw-r--r--sys/kern/kern_thr.c1
-rw-r--r--sys/kern/subr_syscall.c18
-rw-r--r--sys/kern/sys_process.c4
6 files changed, 15 insertions, 15 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index a1d9846..2599ff4 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -369,8 +369,7 @@ SYSINIT(diagwarn2, SI_SUB_LAST, SI_ORDER_THIRD + 2,
#endif
static int
-null_fetch_syscall_args(struct thread *td __unused,
- struct syscall_args *sa __unused)
+null_fetch_syscall_args(struct thread *td __unused)
{
panic("null_fetch_syscall_args");
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index c7680aa..b63bc65 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -478,6 +478,7 @@ do_fork(struct thread *td, struct fork_req *fr, struct proc *p2, struct thread *
bcopy(&td->td_startcopy, &td2->td_startcopy,
__rangeof(struct thread, td_startcopy, td_endcopy));
+ td2->td_sa = td->td_sa;
bcopy(&p2->p_comm, &td2->td_name, sizeof(td2->td_name));
td2->td_sigstk = td->td_sigstk;
@@ -1103,7 +1104,7 @@ fork_return(struct thread *td, struct trapframe *frame)
*/
PROC_LOCK(p);
td->td_dbgflags |= TDB_SCX;
- _STOPEVENT(p, S_SCX, td->td_dbg_sc_code);
+ _STOPEVENT(p, S_SCX, td->td_sa.code);
if ((p->p_ptevents & PTRACE_SCX) != 0 ||
(td->td_dbgflags & TDB_BORN) != 0)
ptracestop(td, SIGTRAP, NULL);
diff --git a/sys/kern/kern_kthread.c b/sys/kern/kern_kthread.c
index 520bf97..69c1140 100644
--- a/sys/kern/kern_kthread.c
+++ b/sys/kern/kern_kthread.c
@@ -276,6 +276,7 @@ kthread_add(void (*func)(void *), void *arg, struct proc *p,
newtd->td_sleeptimo = 0;
bcopy(&oldtd->td_startcopy, &newtd->td_startcopy,
__rangeof(struct thread, td_startcopy, td_endcopy));
+ newtd->td_sa = oldtd->td_sa;
/* set up arg0 for 'ps', et al */
va_start(ap, fmt);
diff --git a/sys/kern/kern_thr.c b/sys/kern/kern_thr.c
index c39986d..6bebac9 100644
--- a/sys/kern/kern_thr.c
+++ b/sys/kern/kern_thr.c
@@ -235,6 +235,7 @@ thread_create(struct thread *td, struct rtprio *rtp,
newtd->td_sleeptimo = 0;
bcopy(&td->td_startcopy, &newtd->td_startcopy,
__rangeof(struct thread, td_startcopy, td_endcopy));
+ newtd->td_sa = td->td_sa;
newtd->td_proc = td->td_proc;
newtd->td_rb_list = newtd->td_rbp_list = newtd->td_rb_inact = 0;
thread_cow_get(newtd, td);
diff --git a/sys/kern/subr_syscall.c b/sys/kern/subr_syscall.c
index 2bcad34..0182884 100644
--- a/sys/kern/subr_syscall.c
+++ b/sys/kern/subr_syscall.c
@@ -52,13 +52,15 @@ __FBSDID("$FreeBSD$");
#include <security/audit/audit.h>
static inline int
-syscallenter(struct thread *td, struct syscall_args *sa)
+syscallenter(struct thread *td)
{
struct proc *p;
+ struct syscall_args *sa;
int error, traced;
PCPU_INC(cnt.v_syscall);
p = td->td_proc;
+ sa = &td->td_sa;
td->td_pticks = 0;
if (td->td_cowgen != p->p_cowgen)
@@ -71,7 +73,7 @@ syscallenter(struct thread *td, struct syscall_args *sa)
td->td_dbgflags |= TDB_SCE;
PROC_UNLOCK(p);
}
- error = (p->p_sysent->sv_fetch_syscall_args)(td, sa);
+ error = (p->p_sysent->sv_fetch_syscall_args)(td);
#ifdef KTRACE
if (KTRPOINT(td, KTR_SYSCALL))
ktrsyscall(sa->code, sa->narg, sa->args);
@@ -85,8 +87,6 @@ syscallenter(struct thread *td, struct syscall_args *sa)
STOPEVENT(p, S_SCE, sa->narg);
if (p->p_flag & P_TRACED) {
PROC_LOCK(p);
- td->td_dbg_sc_code = sa->code;
- td->td_dbg_sc_narg = sa->narg;
if (p->p_ptevents & PTRACE_SCE)
ptracestop((td), SIGTRAP, NULL);
PROC_UNLOCK(p);
@@ -96,11 +96,7 @@ syscallenter(struct thread *td, struct syscall_args *sa)
* Reread syscall number and arguments if
* debugger modified registers or memory.
*/
- error = (p->p_sysent->sv_fetch_syscall_args)(td, sa);
- PROC_LOCK(p);
- td->td_dbg_sc_code = sa->code;
- td->td_dbg_sc_narg = sa->narg;
- PROC_UNLOCK(p);
+ error = (p->p_sysent->sv_fetch_syscall_args)(td);
#ifdef KTRACE
if (KTRPOINT(td, KTR_SYSCALL))
ktrsyscall(sa->code, sa->narg, sa->args);
@@ -162,9 +158,10 @@ syscallenter(struct thread *td, struct syscall_args *sa)
}
static inline void
-syscallret(struct thread *td, int error, struct syscall_args *sa)
+syscallret(struct thread *td, int error)
{
struct proc *p, *p2;
+ struct syscall_args *sa;
ksiginfo_t ksi;
int traced, error1;
@@ -172,6 +169,7 @@ syscallret(struct thread *td, int error, struct syscall_args *sa)
("fork() did not clear TDP_FORKING upon completion"));
p = td->td_proc;
+ sa = &td->td_sa;
if ((trap_enotcap || (p->p_flag2 & P2_TRAPCAP) != 0) &&
IN_CAPABILITY_MODE(td)) {
error1 = (td->td_pflags & TDP_NERRNO) == 0 ? error :
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index ded874a..cc415e7 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -1347,8 +1347,8 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data)
pl->pl_siglist = td2->td_siglist;
strcpy(pl->pl_tdname, td2->td_name);
if ((td2->td_dbgflags & (TDB_SCE | TDB_SCX)) != 0) {
- pl->pl_syscall_code = td2->td_dbg_sc_code;
- pl->pl_syscall_narg = td2->td_dbg_sc_narg;
+ pl->pl_syscall_code = td2->td_sa.code;
+ pl->pl_syscall_narg = td2->td_sa.narg;
} else {
pl->pl_syscall_code = 0;
pl->pl_syscall_narg = 0;
OpenPOWER on IntegriCloud