arch/arm/include/asm/kprobes.h

Source file repositories/reference/linux-study-clean/arch/arm/include/asm/kprobes.h

File Facts

System
Linux kernel
Corpus path
arch/arm/include/asm/kprobes.h
Extension
.h
Size
2150 bytes
Lines
79
Domain
Architecture Layer
Bucket
arch/arm
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.

Dependency Surface

Detected Declarations

Annotated Snippet

struct prev_kprobe {
	struct kprobe *kp;
	unsigned int status;
};

/* per-cpu kprobe control block */
struct kprobe_ctlblk {
	unsigned int kprobe_status;
	struct prev_kprobe prev_kprobe;
};

void arch_remove_kprobe(struct kprobe *);
int kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr);

/* optinsn template addresses */
extern __visible kprobe_opcode_t optprobe_template_entry[];
extern __visible kprobe_opcode_t optprobe_template_val[];
extern __visible kprobe_opcode_t optprobe_template_call[];
extern __visible kprobe_opcode_t optprobe_template_end[];
extern __visible kprobe_opcode_t optprobe_template_sub_sp[];
extern __visible kprobe_opcode_t optprobe_template_add_sp[];
extern __visible kprobe_opcode_t optprobe_template_restore_begin[];
extern __visible kprobe_opcode_t optprobe_template_restore_orig_insn[];
extern __visible kprobe_opcode_t optprobe_template_restore_end[];

#define MAX_OPTIMIZED_LENGTH	4
#define MAX_OPTINSN_SIZE				\
	((unsigned long)optprobe_template_end -	\
	 (unsigned long)optprobe_template_entry)
#define RELATIVEJUMP_SIZE	4

struct arch_optimized_insn {
	/*
	 * copy of the original instructions.
	 * Different from x86, ARM kprobe_opcode_t is u32.
	 */
#define MAX_COPIED_INSN	DIV_ROUND_UP(RELATIVEJUMP_SIZE, sizeof(kprobe_opcode_t))
	kprobe_opcode_t copied_insn[MAX_COPIED_INSN];
	/* detour code buffer */
	kprobe_opcode_t *insn;
	/*
	 * We always copy one instruction on ARM,
	 * so size will always be 4, and unlike x86, there is no
	 * need for a size field.
	 */
};

#endif /* CONFIG_KPROBES */
#endif /* _ARM_KPROBES_H */

Annotation

Implementation Notes