diff options
author | Brooks Davis <brooks@FreeBSD.org> | 2022-03-28 18:43:03 +0000 |
---|---|---|
committer | Brooks Davis <brooks@FreeBSD.org> | 2022-03-28 18:43:03 +0000 |
commit | b1ad6a9000c3fc58d4373fa5a4733d46a9a365ca (patch) | |
tree | 8d6b53e920242b9a1bffd6cf7a9bf06ae75d3008 /usr.bin | |
parent | cd8796cee0e5c5dc3a39551b9d1dce53f6dbdf6a (diff) | |
download | src-b1ad6a9000c3fc58d4373fa5a4733d46a9a365ca.tar.gz src-b1ad6a9000c3fc58d4373fa5a4733d46a9a365ca.zip |
syscallarg_t: Add a type for system call arguments
This more clearly differentiates system call arguments from integer
registers and return values. On current architectures it has no effect,
but on architectures where pointers are not integers (CHERI) and may
not even share registers (CHERI-MIPS) it is necessiary to differentiate
between system call arguments (syscallarg_t) and integer register values
(register_t).
Obtained from: CheriBSD
Reviewed by: imp, kib
Differential Revision: https://reviews.freebsd.org/D33780
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/truss/setup.c | 2 | ||||
-rw-r--r-- | usr.bin/truss/syscall.h | 8 | ||||
-rw-r--r-- | usr.bin/truss/syscalls.c | 8 | ||||
-rw-r--r-- | usr.bin/truss/truss.h | 2 |
4 files changed, 10 insertions, 10 deletions
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 */ }; |