diff options
| author | Minsoo Choo <minsoochoo0122@proton.me> | 2026-02-06 20:03:53 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2026-02-09 04:17:16 +0000 |
| commit | 8f23665fed2fbaf4481359b4d2fcdd7b9feb40e3 (patch) | |
| tree | 94ad4006ebf97f623a37d5fc08d899204ef6a3cd | |
| parent | 2088e742013bb1b9ca237a79767362efe92d9da8 (diff) | |
pcb.h: mark struct pcb to be preserved
There are programs that depend on this structure (e.g. kernel debuggers)
that breaks when the ABI changes.
Signed-off-by: Minsoo Choo <minsoochoo0122@proton.me>
Reviewed by: kib
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D55149
| -rw-r--r-- | sys/amd64/include/pcb.h | 21 | ||||
| -rw-r--r-- | sys/arm/include/pcb.h | 4 | ||||
| -rw-r--r-- | sys/arm64/include/pcb.h | 5 | ||||
| -rw-r--r-- | sys/i386/include/pcb.h | 17 | ||||
| -rw-r--r-- | sys/powerpc/include/pcb.h | 5 | ||||
| -rw-r--r-- | sys/riscv/include/pcb.h | 5 |
6 files changed, 39 insertions, 18 deletions
diff --git a/sys/amd64/include/pcb.h b/sys/amd64/include/pcb.h index 27e1dce08ee1..5a1e8529ad8b 100644 --- a/sys/amd64/include/pcb.h +++ b/sys/amd64/include/pcb.h @@ -44,18 +44,19 @@ #ifdef __amd64__ /* - * NB: The fields marked with (*) are used by kernel debuggers. Their - * ABI should be preserved. + * struct pcb is known to and used by kernel debuggers. Its layout must be kept + * stable. When adding extra fields that are accessed by kernel debuggers, + * debuggers should be backward compatible by using osreldate. */ struct pcb { - register_t pcb_r15; /* (*) */ - register_t pcb_r14; /* (*) */ - register_t pcb_r13; /* (*) */ - register_t pcb_r12; /* (*) */ - register_t pcb_rbp; /* (*) */ - register_t pcb_rsp; /* (*) */ - register_t pcb_rbx; /* (*) */ - register_t pcb_rip; /* (*) */ + register_t pcb_r15; + register_t pcb_r14; + register_t pcb_r13; + register_t pcb_r12; + register_t pcb_rbp; + register_t pcb_rsp; + register_t pcb_rbx; + register_t pcb_rip; register_t pcb_fsbase; register_t pcb_gsbase; register_t pcb_kgsbase; diff --git a/sys/arm/include/pcb.h b/sys/arm/include/pcb.h index fd77544c22c1..810b1e665b19 100644 --- a/sys/arm/include/pcb.h +++ b/sys/arm/include/pcb.h @@ -42,6 +42,10 @@ #include <machine/vfp.h> /* + * struct pcb is known to and used by kernel debuggers. Its layout must be kept + * stable. When adding extra fields that are accessed by kernel debuggers, + * debuggers should be backward compatible by using osreldate. + * * WARNING! * Keep pcb_regs first for faster access in switch.S */ diff --git a/sys/arm64/include/pcb.h b/sys/arm64/include/pcb.h index c0feb1149cf5..9955f5b22714 100644 --- a/sys/arm64/include/pcb.h +++ b/sys/arm64/include/pcb.h @@ -46,6 +46,11 @@ struct trapframe; #define PCB_FP 10 #define PCB_LR 11 +/* + * struct pcb is known to and used by kernel debuggers. Its layout must be kept + * stable. When adding extra fields that are accessed by kernel debuggers, + * debuggers should be backward compatible by using osreldate. + */ struct pcb { uint64_t pcb_x[12]; /* These two need to be in order as we access them together */ diff --git a/sys/i386/include/pcb.h b/sys/i386/include/pcb.h index 1b14efa425b5..1385bfeeef31 100644 --- a/sys/i386/include/pcb.h +++ b/sys/i386/include/pcb.h @@ -44,16 +44,17 @@ #include <machine/npx.h> /* - * NB: The fields marked with (*) are used by kernel debuggers. Their - * ABI should be preserved. + * struct pcb is known to and used by kernel debuggers. Its layout must be kept + * stable. When adding extra fields that are accessed by kernel debuggers, + * debuggers should be backward compatible by using osreldate. */ struct pcb { - int pcb_edi; /* (*) */ - int pcb_esi; /* (*) */ - int pcb_ebp; /* (*) */ - int pcb_esp; /* (*) */ - int pcb_ebx; /* (*) */ - int pcb_eip; /* (*) */ + int pcb_edi; + int pcb_esi; + int pcb_ebp; + int pcb_esp; + int pcb_ebx; + int pcb_eip; struct segment_descriptor pcb_fsd; struct segment_descriptor pcb_gsd; int pcb_ds; diff --git a/sys/powerpc/include/pcb.h b/sys/powerpc/include/pcb.h index 0230cf78aba7..7ebd13dd0ed1 100644 --- a/sys/powerpc/include/pcb.h +++ b/sys/powerpc/include/pcb.h @@ -41,6 +41,11 @@ #include <machine/setjmp.h> #ifndef _STANDALONE +/* + * struct pcb is known to and used by kernel debuggers. Its layout must be kept + * stable. When adding extra fields that are accessed by kernel debuggers, + * debuggers should be backward compatible by using osreldate. + */ struct pcb { register_t pcb_context[20]; /* non-volatile r12-r31 */ register_t pcb_cr; /* Condition register */ diff --git a/sys/riscv/include/pcb.h b/sys/riscv/include/pcb.h index bb88516a1385..bcec4c3fd478 100644 --- a/sys/riscv/include/pcb.h +++ b/sys/riscv/include/pcb.h @@ -39,6 +39,11 @@ struct trapframe; +/* + * struct pcb is known to and used by kernel debuggers. Its layout must be kept + * stable. When adding extra fields that are accessed by kernel debuggers, + * debuggers should be backward compatible by using osreldate. + */ struct pcb { uint64_t pcb_ra; /* Return address */ uint64_t pcb_sp; /* Stack pointer */ |
