Linux kernel code reading
Linux Signal Delivery
Notes on linux signal delivery on the low level: regarding context, pt_regs
and stacks
Places to look at
arch/xyz/include/uapi/asm/ucontext.h
struct ucontext
arch/arm64/include/uapi/asm/sisgcontext.h
struct sigcontext
include/linux/signal_types.h
struct ksignal
kernel/signal.c
int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
kernel/signal.c
arch/xyz/kernel/signal.c
man pages: signal (7) : signal - overview of signals
“important” places in the source tree:
arch/xyz/include/asm/processor.h
processor specific structs like `struct thread_struct`
include/linux/sched.h
struct task_struct
arch/arm64/kernel/signal.c
struct rt_sigframe {
struct siginfo info;
struct ucontext uc;
};
struct rt_sigframe_user_layout {
struct rt_sigframe __user *sigframe;
struct frame_record __user *next_frame;
unsigned long size; /* size of allocated sigframe data */
unsigned long limit; /* largest allowed size */
unsigned long fpsimd_offset;
unsigned long esr_offset;
unsigned long sve_offset;
unsigned long tpidr2_offset;
unsigned long za_offset;
unsigned long zt_offset;
unsigned long extra_offset;
unsigned long end_offset;
};
Some random stuffs in the linux kernel source code.
task_struct
in sched.h
/*
* WARNING: on x86, 'thread_struct' contains a variable-sized
* structure. It *MUST* be at the end of 'task_struct'.
*
* Do not put anything below here!
*/