arch/arm64/include/asm/stacktrace.h
Source file repositories/reference/linux-study-clean/arch/arm64/include/asm/stacktrace.h
File Facts
- System
- Linux kernel
- Corpus path
arch/arm64/include/asm/stacktrace.h- Extension
.h- Size
- 2905 bytes
- Lines
- 121
- Domain
- Architecture Layer
- Bucket
- arch/arm64
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/percpu.hlinux/sched.hlinux/sched/task_stack.hlinux/llist.hasm/memory.hasm/pointer_auth.hasm/ptrace.hasm/sdei.hasm/stacktrace/common.h
Detected Declarations
function stackinfo_get_irqfunction on_irq_stackfunction stackinfo_get_taskfunction on_task_stackfunction stackinfo_get_overflowfunction stackinfo_get_sdei_normalfunction stackinfo_get_sdei_criticalfunction stackinfo_get_efi
Annotated Snippet
#ifndef __ASM_STACKTRACE_H
#define __ASM_STACKTRACE_H
#include <linux/percpu.h>
#include <linux/sched.h>
#include <linux/sched/task_stack.h>
#include <linux/llist.h>
#include <asm/memory.h>
#include <asm/pointer_auth.h>
#include <asm/ptrace.h>
#include <asm/sdei.h>
#include <asm/stacktrace/common.h>
extern void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk,
const char *loglvl);
DECLARE_PER_CPU(unsigned long *, irq_stack_ptr);
static inline struct stack_info stackinfo_get_irq(void)
{
unsigned long low = (unsigned long)raw_cpu_read(irq_stack_ptr);
unsigned long high = low + IRQ_STACK_SIZE;
return (struct stack_info) {
.low = low,
.high = high,
};
}
static inline bool on_irq_stack(unsigned long sp, unsigned long size)
{
struct stack_info info = stackinfo_get_irq();
return stackinfo_on_stack(&info, sp, size);
}
static inline struct stack_info stackinfo_get_task(const struct task_struct *tsk)
{
unsigned long low = (unsigned long)task_stack_page(tsk);
unsigned long high = low + THREAD_SIZE;
return (struct stack_info) {
.low = low,
.high = high,
};
}
static inline bool on_task_stack(const struct task_struct *tsk,
unsigned long sp, unsigned long size)
{
struct stack_info info = stackinfo_get_task(tsk);
return stackinfo_on_stack(&info, sp, size);
}
#define on_thread_stack() (on_task_stack(current, current_stack_pointer, 1))
DECLARE_PER_CPU(unsigned long [OVERFLOW_STACK_SIZE/sizeof(long)], overflow_stack);
static inline struct stack_info stackinfo_get_overflow(void)
{
unsigned long low = (unsigned long)raw_cpu_ptr(overflow_stack);
unsigned long high = low + OVERFLOW_STACK_SIZE;
return (struct stack_info) {
.low = low,
.high = high,
};
}
#if defined(CONFIG_ARM_SDE_INTERFACE)
DECLARE_PER_CPU(unsigned long *, sdei_stack_normal_ptr);
DECLARE_PER_CPU(unsigned long *, sdei_stack_critical_ptr);
static inline struct stack_info stackinfo_get_sdei_normal(void)
{
unsigned long low = (unsigned long)raw_cpu_read(sdei_stack_normal_ptr);
unsigned long high = low + SDEI_STACK_SIZE;
return (struct stack_info) {
.low = low,
.high = high,
};
}
static inline struct stack_info stackinfo_get_sdei_critical(void)
{
unsigned long low = (unsigned long)raw_cpu_read(sdei_stack_critical_ptr);
unsigned long high = low + SDEI_STACK_SIZE;
Annotation
- Immediate include surface: `linux/percpu.h`, `linux/sched.h`, `linux/sched/task_stack.h`, `linux/llist.h`, `asm/memory.h`, `asm/pointer_auth.h`, `asm/ptrace.h`, `asm/sdei.h`.
- Detected declarations: `function stackinfo_get_irq`, `function on_irq_stack`, `function stackinfo_get_task`, `function on_task_stack`, `function stackinfo_get_overflow`, `function stackinfo_get_sdei_normal`, `function stackinfo_get_sdei_critical`, `function stackinfo_get_efi`.
- Atlas domain: Architecture Layer / arch/arm64.
- Implementation status: source implementation candidate.
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.