diff options
| author | Brooks Davis <brooks@FreeBSD.org> | 2026-07-15 08:44:03 +0000 |
|---|---|---|
| committer | Brooks Davis <brooks@FreeBSD.org> | 2026-07-15 09:32:16 +0000 |
| commit | 844009378da9723180923bb5fc2008d137190b62 (patch) | |
| tree | 2755ad823e7b4fd660abd0eadd8fc405db0e1933 | |
| parent | db3eca2be2067f7e81d65686b33dcbd475aed363 (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.h | 4 | ||||
| -rw-r--r-- | sys/sys/_uexterror.h | 6 | ||||
| -rw-r--r-- | sys/sys/exterrvar.h | 6 |
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); |
