aboutsummaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorBrooks Davis <brooks@FreeBSD.org>2022-03-28 18:43:03 +0000
committerBrooks Davis <brooks@FreeBSD.org>2022-03-28 18:43:03 +0000
commitb1ad6a9000c3fc58d4373fa5a4733d46a9a365ca (patch)
tree8d6b53e920242b9a1bffd6cf7a9bf06ae75d3008 /usr.bin
parentcd8796cee0e5c5dc3a39551b9d1dce53f6dbdf6a (diff)
downloadsrc-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.c2
-rw-r--r--usr.bin/truss/syscall.h8
-rw-r--r--usr.bin/truss/syscalls.c8
-rw-r--r--usr.bin/truss/truss.h2
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 */
};