STRUCT USER_REGSET(9)
π NAME
struct user_regset β the accessible thread CPU state, bestie. That's the whole vibe. β¨
(oh and hiii, this is a page from the Kernel API Manual, welcome to the group chat π«Ά)
β¨ SYNOPSIS β¨
struct user_regset {
user_regset_get2_fn *regset_get;
user_regset_set_fn *set;
user_regset_active_fn *active;
user_regset_writeback_fn *writeback;
unsigned int n;
unsigned int size;
unsigned int align;
unsigned int bias;
unsigned int core_note_type;
const char *core_note_name;
};
Look at her. Iconic. No notes. π₯
π MEMBERS π
Okay so each of these fields is a whole personality, let me introduce you π
regset_getβ Function to fetch values. Get you a function that can do both etc etc.setβ Function to store values. The getter's other half, we love a duo πactiveβ Function to report if the regset is active, orNULL. Yes she can beNULL, it's called range πwritebackβ Function to write data back to user memory, orNULL. Optional queen.nβ Number of slots (registers). Count 'em.sizeβ Size in bytes of a slot (register).alignβ Required alignment, in bytes.biasβ Bias from natural indexing. Very "which index are you actually" energy ngl.core_note_typeβ ELF noten_typevalue used in core dumps.core_note_nameβ ELF note name to qualify the note type.
π DESCRIPTION π
So. This data structure describes a machine resource we call a register set. And before you come for me β this is part of the state of an individual thread, not necessarily actual CPU registers per se, okay? Words matter. πΈ
A register set consists of a number of similar slots, given by n. Each slot is size bytes, and aligned to align bytes (which is at least size). And for dynamically-sized regsets, n must contain the maximum possible number of slots for the regset β no shrinking, bestie, we plan ahead π
For backward compatibility, the get and set methods must pad to, or accept, n * size bytes, even if the current regset size is smaller. The precise semantics of these operations depend on the regset being accessed. So basically: know your regset. π§
Okay this next part is the serious part, so listen up fr fr. The functions to whichstruct user_regsetmembers point must be called only on the current thread or on a thread that is inTASK_STOPPEDorTASK_TRACEDstate, that we are guaranteed will not be woken up and return to user mode, and that we have calledwait_task_inactiveon. (The target thread always might wake up forSIGKILLwhile these functions are working, in which case that thread'suser_regsetstate might be scrambled.) π Yes. Scrambled. Do not test her.
The pos argument must be aligned according to align; the count argument must be a multiple of size. And heads up β these functions are not responsible for checking for invalid arguments. That's on you, boo. π
When there is a natural value to use as an index, bias gives the difference between the natural index and the slot index for the register set. Example time, and it's a good one: x86 GDT segment descriptors form a regset; the segment selector produces a natural index, but only a subset of that index space is available as a regset (the TLS slots); subtracting bias from a segment selector index value computes the regset slot. Math ate, honestly. π₯
If nonzero, core_note_type gives the n_type field (NT_* value) of the core file note in which this regset's data appears. And core_note_name specifies the note name. The preferred way to specify these two fields is to use the USER_REGSET_NOTE_TYPE macro β use the macro, it's literally right there π
NT_PRSTATUS is a special case in that the regset data starts at offsetof(struct elf_prstatus, pr_reg) into the note data; that is part of the per-machine ELF formats userland knows about. In other cases, the core file note contains exactly the whole regset (n * size) and nothing else. And the core file note is normally omitted when there is an active function and it returns zero. Periodt. π
π SEE ALSO π
Go read these next, iykyk π
Kernel file ./include/linux/regset.h user_regset_active_fn(9), user_regset_set_fn(9), user_regset_writeback_fn(9), struct user_regset_view(9), task_user_regset_view(9), copy_regset_from_user(9)
Okay that's the whole page, you ate that ngl π This lil legend came out of ./include/linux β October 2026, kernel API manual, mwah π stay hydrated and may all your regsets be aligned β¨π¦
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms