arch/csky/kernel/probes/uprobes.c
Source file repositories/reference/linux-study-clean/arch/csky/kernel/probes/uprobes.c
File Facts
- System
- Linux kernel
- Corpus path
arch/csky/kernel/probes/uprobes.c- Extension
.c- Size
- 3163 bytes
- Lines
- 159
- Domain
- Architecture Layer
- Bucket
- arch/csky
- 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/highmem.hlinux/ptrace.hlinux/uprobes.hasm/cacheflush.hdecode-insn.h
Detected Declarations
function Copyrightfunction uprobe_get_swbp_addrfunction arch_uprobe_analyze_insnfunction arch_uprobe_pre_xolfunction arch_uprobe_post_xolfunction arch_uprobe_xol_was_trappedfunction arch_uprobe_skip_sstepfunction arch_uprobe_abort_xolfunction arch_uretprobe_is_alivefunction arch_uretprobe_hijack_return_addrfunction arch_uprobe_exception_notifyfunction uprobe_breakpoint_handlerfunction uprobe_single_step_handler
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (C) 2014-2016 Pratyush Anand <panand@redhat.com>
*/
#include <linux/highmem.h>
#include <linux/ptrace.h>
#include <linux/uprobes.h>
#include <asm/cacheflush.h>
#include "decode-insn.h"
#define UPROBE_TRAP_NR UINT_MAX
bool is_swbp_insn(uprobe_opcode_t *insn)
{
return (*insn & 0xffff) == UPROBE_SWBP_INSN;
}
unsigned long uprobe_get_swbp_addr(struct pt_regs *regs)
{
return instruction_pointer(regs);
}
int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm,
unsigned long addr)
{
probe_opcode_t insn;
insn = *(probe_opcode_t *)(&auprobe->insn[0]);
auprobe->insn_size = is_insn32(insn) ? 4 : 2;
switch (csky_probe_decode_insn(&insn, &auprobe->api)) {
case INSN_REJECTED:
return -EINVAL;
case INSN_GOOD_NO_SLOT:
auprobe->simulate = true;
break;
default:
break;
}
return 0;
}
int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
{
struct uprobe_task *utask = current->utask;
utask->autask.saved_trap_no = current->thread.trap_no;
current->thread.trap_no = UPROBE_TRAP_NR;
instruction_pointer_set(regs, utask->xol_vaddr);
user_enable_single_step(current);
return 0;
}
int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
{
struct uprobe_task *utask = current->utask;
WARN_ON_ONCE(current->thread.trap_no != UPROBE_TRAP_NR);
current->thread.trap_no = utask->autask.saved_trap_no;
instruction_pointer_set(regs, utask->vaddr + auprobe->insn_size);
user_disable_single_step(current);
return 0;
}
bool arch_uprobe_xol_was_trapped(struct task_struct *t)
{
if (t->thread.trap_no != UPROBE_TRAP_NR)
return true;
return false;
}
bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs)
{
probe_opcode_t insn;
unsigned long addr;
if (!auprobe->simulate)
return false;
Annotation
- Immediate include surface: `linux/highmem.h`, `linux/ptrace.h`, `linux/uprobes.h`, `asm/cacheflush.h`, `decode-insn.h`.
- Detected declarations: `function Copyright`, `function uprobe_get_swbp_addr`, `function arch_uprobe_analyze_insn`, `function arch_uprobe_pre_xol`, `function arch_uprobe_post_xol`, `function arch_uprobe_xol_was_trapped`, `function arch_uprobe_skip_sstep`, `function arch_uprobe_abort_xol`, `function arch_uretprobe_is_alive`, `function arch_uretprobe_hijack_return_addr`.
- Atlas domain: Architecture Layer / arch/csky.
- 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.