diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c index 8d8bdd6fbb6e..19b0c5065e68 100644 --- a/sys/amd64/amd64/trap.c +++ b/sys/amd64/amd64/trap.c @@ -1011,7 +1011,7 @@ cpu_fetch_syscall_args_fallback(struct thread *td, struct syscall_args *sa) { struct proc *p; struct trapframe *frame; - register_t *argp; + syscallarg_t *argp; caddr_t params; int reg, regcnt, error; diff --git a/sys/arm/arm/syscall.c b/sys/arm/arm/syscall.c index a635de0ec716..c083bf552eb5 100644 --- a/sys/arm/arm/syscall.c +++ b/sys/arm/arm/syscall.c @@ -100,7 +100,7 @@ int cpu_fetch_syscall_args(struct thread *td) { struct proc *p; - register_t *ap; + syscallarg_t *ap; struct syscall_args *sa; u_int nap; int error; @@ -124,10 +124,10 @@ cpu_fetch_syscall_args(struct thread *td) else sa->callp = &p->p_sysent->sv_table[sa->code]; error = 0; - memcpy(sa->args, ap, nap * sizeof(register_t)); + memcpy(sa->args, ap, nap * sizeof(*sa->args)); if (sa->callp->sy_narg > nap) { error = copyin((void *)td->td_frame->tf_usr_sp, sa->args + - nap, (sa->callp->sy_narg - nap) * sizeof(register_t)); + nap, (sa->callp->sy_narg - nap) * sizeof(*sa->args)); } if (error == 0) { td->td_retval[0] = 0; diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c index 226f69592952..b664501b62fa 100644 --- a/sys/arm64/arm64/trap.c +++ b/sys/arm64/arm64/trap.c @@ -134,7 +134,7 @@ int cpu_fetch_syscall_args(struct thread *td) { struct proc *p; - register_t *ap, *dst_ap; + syscallarg_t *ap, *dst_ap; struct syscall_args *sa; p = td->td_proc; @@ -159,7 +159,7 @@ cpu_fetch_syscall_args(struct thread *td) KASSERT(sa->callp->sy_narg <= nitems(sa->args), ("Syscall %d takes too many arguments", sa->code)); - memcpy(dst_ap, ap, (nitems(sa->args) - 1) * sizeof(register_t)); + memcpy(dst_ap, ap, (nitems(sa->args) - 1) * sizeof(*dst_ap)); td->td_retval[0] = 0; td->td_retval[1] = 0; diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c index f102f7e7b0a4..be3081ac9983 100644 --- a/sys/kern/kern_ktrace.c +++ b/sys/kern/kern_ktrace.c @@ -524,7 +524,7 @@ ktr_get_tracevp(struct proc *p, bool ref) } void -ktrsyscall(int code, int narg, register_t args[]) +ktrsyscall(int code, int narg, syscallarg_t args[]) { struct ktr_request *req; struct ktr_syscall *ktp; diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index 965e22a38598..ce8529bee256 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -596,7 +596,7 @@ sys_ptrace(struct thread *td, struct ptrace_args *uap) struct fpreg fpreg; struct reg reg; struct iovec vec; - char args[sizeof(td->td_sa.args)]; + syscallarg_t args[nitems(td->td_sa.args)]; struct ptrace_sc_ret psr; int ptevents; } r; @@ -1143,7 +1143,7 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) /* See the explanation in linux_ptrace_get_syscall_info(). */ bcopy(td2->td_sa.args, addr, SV_PROC_ABI(td->td_proc) == SV_ABI_LINUX ? sizeof(td2->td_sa.args) : - td2->td_sa.callp->sy_narg * sizeof(register_t)); + td2->td_sa.callp->sy_narg * sizeof(syscallarg_t)); break; case PT_GET_SC_RET: diff --git a/sys/riscv/riscv/trap.c b/sys/riscv/riscv/trap.c index b89eae325e0c..0744f5a25fb3 100644 --- a/sys/riscv/riscv/trap.c +++ b/sys/riscv/riscv/trap.c @@ -94,7 +94,7 @@ int cpu_fetch_syscall_args(struct thread *td) { struct proc *p; - register_t *ap, *dst_ap; + syscallarg_t *ap, *dst_ap; struct syscall_args *sa; p = td->td_proc; @@ -119,7 +119,7 @@ cpu_fetch_syscall_args(struct thread *td) KASSERT(sa->callp->sy_narg <= nitems(sa->args), ("Syscall %d takes too many arguments", sa->code)); - memcpy(dst_ap, ap, (NARGREG - 1) * sizeof(register_t)); + memcpy(dst_ap, ap, (NARGREG - 1) * sizeof(*dst_ap)); td->td_retval[0] = 0; td->td_retval[1] = 0; diff --git a/sys/sys/ktrace.h b/sys/sys/ktrace.h index 283a95c36d6c..d00981a93d24 100644 --- a/sys/sys/ktrace.h +++ b/sys/sys/ktrace.h @@ -284,7 +284,7 @@ void ktrpsig(int, sig_t, sigset_t *, int); void ktrfault(vm_offset_t, int); void ktrfaultend(int); void ktrgenio(int, enum uio_rw, struct uio *, int); -void ktrsyscall(int, int narg, register_t args[]); +void ktrsyscall(int, int narg, syscallarg_t args[]); void ktrsysctl(int *name, u_int namelen); void ktrsysret(int, int, register_t); void ktrprocctor(struct proc *); diff --git a/sys/sys/proc.h b/sys/sys/proc.h index 71105239e40e..2556fd574d84 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -357,7 +357,7 @@ struct thread { } td_state; /* (t) thread state */ /* Note: td_state must be accessed using TD_{GET,SET}_STATE(). */ union { - register_t tdu_retval[2]; + syscallarg_t tdu_retval[2]; off_t tdu_off; } td_uretoff; /* (k) Syscall aux returns. */ #define td_retval td_uretoff.tdu_retval diff --git a/sys/sys/ptrace.h b/sys/sys/ptrace.h index 197ac1692dfb..80797f290a41 100644 --- a/sys/sys/ptrace.h +++ b/sys/sys/ptrace.h @@ -162,7 +162,7 @@ struct ptrace_lwpinfo32 { /* Argument structure for PT_GET_SC_RET. */ struct ptrace_sc_ret { - register_t sr_retval[2]; /* Only valid if sr_error == 0. */ + syscallarg_t sr_retval[2]; /* Only valid if sr_error == 0. */ int sr_error; }; diff --git a/sys/sys/types.h b/sys/sys/types.h index 66f11aa3e31d..d37ab8b823dc 100644 --- a/sys/sys/types.h +++ b/sys/sys/types.h @@ -270,6 +270,8 @@ typedef __vm_size_t vm_size_t; typedef __rman_res_t rman_res_t; +typedef __register_t syscallarg_t; + #ifdef _KERNEL typedef int boolean_t; typedef struct _device *device_t; diff --git a/sys/tools/makesyscalls.lua b/sys/tools/makesyscalls.lua index 178869d03b0e..ec79ae30d130 100644 --- a/sys/tools/makesyscalls.lua +++ b/sys/tools/makesyscalls.lua @@ -860,7 +860,7 @@ local function handle_noncompat(sysnum, thr_flag, flags, sysflags, rettype, write_line("sysarg", "};\n") else write_line("sysarg", string.format( - "struct %s {\n\tregister_t dummy;\n};\n", argalias)) + "struct %s {\n\tsyscallarg_t dummy;\n};\n", argalias)) end end @@ -986,7 +986,7 @@ local function handle_compat(sysnum, thr_flag, flags, sysflags, rettype, write_line(out, "};\n") elseif flags & nargflags == 0 then write_line("sysarg", string.format( - "struct %s {\n\tregister_t dummy;\n};\n", argalias)) + "struct %s {\n\tsyscallarg_t dummy;\n};\n", argalias)) end if flags & dprotoflags == 0 then write_line(outdcl, string.format( @@ -1439,8 +1439,8 @@ struct proc; struct thread; -#define PAD_(t) (sizeof(register_t) <= sizeof(t) ? \ - 0 : sizeof(register_t) - sizeof(t)) +#define PAD_(t) (sizeof(syscallarg_t) <= sizeof(t) ? \ + 0 : sizeof(syscallarg_t) - sizeof(t)) #if BYTE_ORDER == LITTLE_ENDIAN #define PADL_(t) 0 @@ -1530,7 +1530,7 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz) process_sysfile(sysfile) write_line("sysinc", - "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n") + "\n#define AS(name) (sizeof(struct name) / sizeof(syscallarg_t))\n") for _, v in pairs(compat_options) do if v["count"] > 0 then diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c index 8ad049ed6d5e..db9a32d1c9bc 100644 --- a/sys/vm/vm_mmap.c +++ b/sys/vm/vm_mmap.c @@ -420,7 +420,7 @@ kern_mmap(struct thread *td, const struct mmap_req *mrp) } if (error == 0) - td->td_retval[0] = (register_t) (addr + pageoff); + td->td_retval[0] = addr + pageoff; done: if (fp) fdrop(fp, td); diff --git a/usr.bin/truss/setup.c b/usr.bin/truss/setup.c index b5a1d4e32d2b..db5361a88e86 100644 --- a/usr.bin/truss/setup.c +++ b/usr.bin/truss/setup.c @@ -561,7 +561,7 @@ exit_syscall(struct trussinfo *info, struct ptrace_lwpinfo *pl) */ if (psr.sr_error != 0) { asprintf(&temp, "0x%lx", - t->cs.args[sc->decode.args[i].offset]); + (long)t->cs.args[sc->decode.args[i].offset]); } else { temp = print_arg(&sc->decode.args[i], t->cs.args, psr.sr_retval, info); diff --git a/usr.bin/truss/syscall.h b/usr.bin/truss/syscall.h index 53a1fd6ee8d7..c16aed732230 100644 --- a/usr.bin/truss/syscall.h +++ b/usr.bin/truss/syscall.h @@ -228,7 +228,7 @@ struct syscall { }; struct syscall *get_syscall(struct threadinfo *, u_int, u_int); -char *print_arg(struct syscall_arg *, unsigned long *, register_t *, +char *print_arg(struct syscall_arg *, syscallarg_t *, syscallarg_t *, struct trussinfo *); /* @@ -252,8 +252,8 @@ char *print_arg(struct syscall_arg *, unsigned long *, register_t *, #define LINUX_SENDMSG 16 #define LINUX_RECVMSG 17 -#define PAD_(t) (sizeof(register_t) <= sizeof(t) ? \ - 0 : sizeof(register_t) - sizeof(t)) +#define PAD_(t) (sizeof(syscallarg_t) <= sizeof(t) ? \ + 0 : sizeof(syscallarg_t) - sizeof(t)) #if BYTE_ORDER == LITTLE_ENDIAN #define PADL_(t) 0 @@ -272,5 +272,5 @@ struct linux_socketcall_args { }; void print_syscall(struct trussinfo *); -void print_syscall_ret(struct trussinfo *, int, register_t *); +void print_syscall_ret(struct trussinfo *, int, syscallarg_t *); void print_summary(struct trussinfo *trussinfo); diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c index d611f3f73471..bd055fb687ed 100644 --- a/usr.bin/truss/syscalls.c +++ b/usr.bin/truss/syscalls.c @@ -1558,7 +1558,7 @@ user_ptr32_to_psaddr(int32_t user_pointer) * an array of all of the system call arguments. */ char * -print_arg(struct syscall_arg *sc, unsigned long *args, register_t *retval, +print_arg(struct syscall_arg *sc, syscallarg_t *args, syscallarg_t *retval, struct trussinfo *trussinfo) { FILE *fp; @@ -1592,10 +1592,10 @@ print_arg(struct syscall_arg *sc, unsigned long *args, register_t *retval, break; } case LongHex: - fprintf(fp, "0x%lx", args[sc->offset]); + fprintf(fp, "0x%lx", (long)args[sc->offset]); break; case Long: - fprintf(fp, "%ld", args[sc->offset]); + fprintf(fp, "%ld", (long)args[sc->offset]); break; case Sizet: fprintf(fp, "%zu", (size_t)args[sc->offset]); @@ -2734,7 +2734,7 @@ print_syscall(struct trussinfo *trussinfo) } void -print_syscall_ret(struct trussinfo *trussinfo, int error, register_t *retval) +print_syscall_ret(struct trussinfo *trussinfo, int error, syscallarg_t *retval) { struct timespec timediff; struct threadinfo *t; diff --git a/usr.bin/truss/truss.h b/usr.bin/truss/truss.h index a3ce8f27d953..4d2680cd4913 100644 --- a/usr.bin/truss/truss.h +++ b/usr.bin/truss/truss.h @@ -81,7 +81,7 @@ struct current_syscall { struct syscall *sc; unsigned int number; unsigned int nargs; - unsigned long args[10]; + syscallarg_t args[10]; char *s_args[10]; /* the printable arguments */ };