arch/um/os-Linux/signal.c
Source file repositories/reference/linux-study-clean/arch/um/os-Linux/signal.c
File Facts
- System
- Linux kernel
- Corpus path
arch/um/os-Linux/signal.c- Extension
.c- Size
- 12184 bytes
- Lines
- 507
- Domain
- Architecture Layer
- Bucket
- arch/um
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
stdlib.hstdarg.hstdbool.herrno.hsignal.hstring.hstrings.has-layout.hkern_util.hos.hskas.hsysdep/mcontext.hum_malloc.hsys/ucontext.htimetravel.hinternal.h
Detected Declarations
function sig_handler_commonfunction sig_handlerfunction __atomic_load_nfunction timer_real_alarm_handlerfunction timer_alarm_handlerfunction deliver_alarmfunction timer_set_signal_handlerfunction timer_alarm_pendingfunction set_sigstackfunction sigusr1_handlerfunction register_pm_wake_signalfunction hard_handlerfunction set_handlerfunction send_sigio_to_selffunction change_sigfunction __block_signalsfunction __unblock_signalsfunction block_signalsfunction unblock_signalsfunction um_get_signalsfunction um_set_signalsfunction um_set_signals_tracefunction mark_sigio_pendingfunction block_signals_hardfunction unblock_signals_hard
Annotated Snippet
void deliver_alarm(void) {
timer_alarm_handler(SIGALRM, NULL, NULL);
}
void timer_set_signal_handler(void)
{
set_handler(SIGALRM);
}
int timer_alarm_pending(void)
{
return !!(signals_pending & SIGALRM_MASK);
}
void set_sigstack(void *sig_stack, int size)
{
stack_t stack = {
.ss_flags = 0,
.ss_sp = sig_stack,
.ss_size = size
};
if (sigaltstack(&stack, NULL) != 0)
panic("enabling signal stack failed, errno = %d\n", errno);
}
static void sigusr1_handler(int sig, struct siginfo *unused_si, mcontext_t *mc)
{
uml_pm_wake();
}
void register_pm_wake_signal(void)
{
set_handler(SIGUSR1);
}
static void (*handlers[_NSIG])(int sig, struct siginfo *si, mcontext_t *mc) = {
[SIGSEGV] = sig_handler,
[SIGBUS] = sig_handler,
[SIGILL] = sig_handler,
[SIGFPE] = sig_handler,
[SIGTRAP] = sig_handler,
[SIGIO] = sig_handler,
[SIGWINCH] = sig_handler,
/* SIGCHLD is only actually registered in seccomp mode. */
[SIGCHLD] = sig_handler,
[SIGALRM] = timer_alarm_handler,
[SIGUSR1] = sigusr1_handler,
};
static void hard_handler(int sig, siginfo_t *si, void *p)
{
ucontext_t *uc = p;
mcontext_t *mc = &uc->uc_mcontext;
int save_errno = errno;
(*handlers[sig])(sig, (struct siginfo *)si, mc);
errno = save_errno;
}
void set_handler(int sig)
{
struct sigaction action;
int flags = SA_SIGINFO | SA_ONSTACK;
sigset_t sig_mask;
action.sa_sigaction = hard_handler;
/* block irq ones */
sigemptyset(&action.sa_mask);
sigaddset(&action.sa_mask, SIGIO);
sigaddset(&action.sa_mask, SIGWINCH);
sigaddset(&action.sa_mask, SIGALRM);
if (using_seccomp)
sigaddset(&action.sa_mask, SIGCHLD);
if (sig == SIGSEGV)
flags |= SA_NODEFER;
if (sigismember(&action.sa_mask, sig))
flags |= SA_RESTART; /* if it's an irq signal */
action.sa_flags = flags;
action.sa_restorer = NULL;
if (sigaction(sig, &action, NULL) < 0)
panic("sigaction failed - errno = %d\n", errno);
Annotation
- Immediate include surface: `stdlib.h`, `stdarg.h`, `stdbool.h`, `errno.h`, `signal.h`, `string.h`, `strings.h`, `as-layout.h`.
- Detected declarations: `function sig_handler_common`, `function sig_handler`, `function __atomic_load_n`, `function timer_real_alarm_handler`, `function timer_alarm_handler`, `function deliver_alarm`, `function timer_set_signal_handler`, `function timer_alarm_pending`, `function set_sigstack`, `function sigusr1_handler`.
- Atlas domain: Architecture Layer / arch/um.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.