arch/sparc/kernel/ptrace_32.c
Source file repositories/reference/linux-study-clean/arch/sparc/kernel/ptrace_32.c
File Facts
- System
- Linux kernel
- Corpus path
arch/sparc/kernel/ptrace_32.c- Extension
.c- Size
- 10491 bytes
- Lines
- 449
- Domain
- Architecture Layer
- Bucket
- arch/sparc
- 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.
- Touches user memory; correctness depends on fault-safe copying and privilege boundary handling.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/kernel.hlinux/sched.hlinux/mm.hlinux/errno.hlinux/ptrace.hlinux/user.hlinux/smp.hlinux/security.hlinux/signal.hlinux/regset.hlinux/elf.hlinux/uaccess.hasm/cacheflush.hkernel.h
Detected Declarations
struct fpsstruct fqenum sparc_regsetfunction Copyrightfunction regwindow32_getfunction regwindow32_setfunction genregs32_getfunction genregs32_setfunction fpregs32_getfunction fpregs32_setfunction getregs_getfunction setregs_setfunction getfpregs_getfunction setfpregs_setfunction arch_ptracefunction syscall_trace
Annotated Snippet
struct fps {
unsigned long regs[32];
unsigned long fsr;
unsigned long flags;
unsigned long extra;
unsigned long fpqd;
struct fq {
unsigned long *insnaddr;
unsigned long insn;
} fpq[16];
};
long arch_ptrace(struct task_struct *child, long request,
unsigned long addr, unsigned long data)
{
unsigned long addr2 = current->thread.kregs->u_regs[UREG_I4];
void __user *addr2p;
struct pt_regs __user *pregs;
struct fps __user *fps;
int ret;
addr2p = (void __user *) addr2;
pregs = (struct pt_regs __user *) addr;
fps = (struct fps __user *) addr;
switch(request) {
case PTRACE_GETREGS: {
ret = copy_regset_to_user(child, &ptrace32_view,
REGSET_GENERAL, 0,
19 * sizeof(u32),
pregs);
break;
}
case PTRACE_SETREGS: {
ret = copy_regset_from_user(child, &ptrace32_view,
REGSET_GENERAL, 0,
19 * sizeof(u32),
pregs);
break;
}
case PTRACE_GETFPREGS: {
ret = copy_regset_to_user(child, &ptrace32_view,
REGSET_FP, 0,
68 * sizeof(u32),
fps);
break;
}
case PTRACE_SETFPREGS: {
ret = copy_regset_from_user(child, &ptrace32_view,
REGSET_FP, 0,
33 * sizeof(u32),
fps);
break;
}
case PTRACE_READTEXT:
case PTRACE_READDATA:
ret = ptrace_readdata(child, addr, addr2p, data);
if (ret == data)
ret = 0;
else if (ret >= 0)
ret = -EIO;
break;
case PTRACE_WRITETEXT:
case PTRACE_WRITEDATA:
ret = ptrace_writedata(child, addr2p, addr, data);
if (ret == data)
ret = 0;
else if (ret >= 0)
ret = -EIO;
break;
default:
if (request == PTRACE_SPARC_DETACH)
request = PTRACE_DETACH;
ret = ptrace_request(child, request, addr, data);
break;
}
return ret;
}
asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p)
{
Annotation
- Immediate include surface: `linux/kernel.h`, `linux/sched.h`, `linux/mm.h`, `linux/errno.h`, `linux/ptrace.h`, `linux/user.h`, `linux/smp.h`, `linux/security.h`.
- Detected declarations: `struct fps`, `struct fq`, `enum sparc_regset`, `function Copyright`, `function regwindow32_get`, `function regwindow32_set`, `function genregs32_get`, `function genregs32_set`, `function fpregs32_get`, `function fpregs32_set`.
- Atlas domain: Architecture Layer / arch/sparc.
- Implementation status: source implementation candidate.
- This snippet crosses the user/kernel memory boundary; validate fault handling and access checks before translating the pattern.
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.