aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrooks Davis <brooks@FreeBSD.org>2026-07-15 08:44:03 +0000
committerBrooks Davis <brooks@FreeBSD.org>2026-07-15 09:32:16 +0000
commit844009378da9723180923bb5fc2008d137190b62 (patch)
tree2755ad823e7b4fd660abd0eadd8fc405db0e1933
parentdb3eca2be2067f7e81d65686b33dcbd475aed363 (diff)
exterr: allow exterr to fit pointers on CHERI targets
Switch to uint64ptr_t which is a uint64_t on traditional architectures and a uintptr_t on CHERI architectures. This has no ABI impact on non-CHERI kernels. Fix truncation of 64-bit values on 32-bit kernels. Reviewed by: kib Effort: CHERI upstreaming Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D58056
-rw-r--r--sys/sys/_exterr.h4
-rw-r--r--sys/sys/_uexterror.h6
-rw-r--r--sys/sys/exterrvar.h6
3 files changed, 8 insertions, 8 deletions
diff --git a/sys/sys/_exterr.h b/sys/sys/_exterr.h
index 4423d6a34bdb..8f5e66ae4601 100644
--- a/sys/sys/_exterr.h
+++ b/sys/sys/_exterr.h
@@ -16,8 +16,8 @@
struct kexterr {
int error;
const char *msg;
- __uint64_t p1;
- __uint64_t p2;
+ __uint64ptr_t p1;
+ __uint64ptr_t p2;
unsigned cat;
unsigned src_line;
};
diff --git a/sys/sys/_uexterror.h b/sys/sys/_uexterror.h
index 7951b2c5b26d..a0a1ed24f1fc 100644
--- a/sys/sys/_uexterror.h
+++ b/sys/sys/_uexterror.h
@@ -20,9 +20,9 @@ struct uexterror {
__uint32_t src_line;
__uint32_t flags;
__uint32_t rsrv0;
- __uint64_t p1;
- __uint64_t p2;
- __uint64_t rsrv1[4];
+ __uint64ptr_t p1;
+ __uint64ptr_t p2;
+ __uint64ptr_t rsrv1[4];
char msg[128];
};
diff --git a/sys/sys/exterrvar.h b/sys/sys/exterrvar.h
index 6c75a2d01174..0a34280ff711 100644
--- a/sys/sys/exterrvar.h
+++ b/sys/sys/exterrvar.h
@@ -59,7 +59,7 @@
#define _SET_ERROR2(eerror, mmsg, pp1, pp2) \
exterr_set(eerror, EXTERR_CATEGORY, SET_ERROR_MSG(mmsg), \
- (uintptr_t)(pp1), (uintptr_t)(pp2), __LINE__)
+ (uint64ptr_t)(pp1), (uint64ptr_t)(pp2), __LINE__)
#define _SET_ERROR0(eerror, mmsg) _SET_ERROR2(eerror, mmsg, 0, 0)
#define _SET_ERROR1(eerror, mmsg, pp1) _SET_ERROR2(eerror, mmsg, pp1, 0)
@@ -72,8 +72,8 @@
void exterr_clear(struct kexterr *ke);
void exterr_db_print(struct kexterr *ke);
int exterr_set_from(const struct kexterr *ke);
-int exterr_set(int eerror, int category, const char *mmsg, uintptr_t pp1,
- uintptr_t pp2, int line);
+int exterr_set(int eerror, int category, const char *mmsg, uint64ptr_t pp1,
+ uint64ptr_t pp2, int line);
int exterr_to_ue(struct thread *td, struct uexterror *ue);
void ktrexterr(struct thread *td);