arch/arc/kernel/ptrace.c

Source file repositories/reference/linux-study-clean/arch/arc/kernel/ptrace.c

File Facts

System
Linux kernel
Corpus path
arch/arc/kernel/ptrace.c
Extension
.c
Size
10624 bytes
Lines
402
Domain
Architecture Layer
Bucket
arch/arc
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 pt_regs_offset {
	const char *name;
	int offset;
};

#define REG_OFFSET_NAME(r) {.name = #r, .offset = offsetof(struct pt_regs, r)}
#define REG_OFFSET_END {.name = NULL, .offset = 0}

#ifdef CONFIG_ISA_ARCOMPACT
static const struct pt_regs_offset regoffset_table[] = {
	REG_OFFSET_NAME(bta),
	REG_OFFSET_NAME(lp_start),
	REG_OFFSET_NAME(lp_end),
	REG_OFFSET_NAME(lp_count),
	REG_OFFSET_NAME(status32),
	REG_OFFSET_NAME(ret),
	REG_OFFSET_NAME(blink),
	REG_OFFSET_NAME(fp),
	REG_OFFSET_NAME(r26),
	REG_OFFSET_NAME(r12),
	REG_OFFSET_NAME(r11),
	REG_OFFSET_NAME(r10),
	REG_OFFSET_NAME(r9),
	REG_OFFSET_NAME(r8),
	REG_OFFSET_NAME(r7),
	REG_OFFSET_NAME(r6),
	REG_OFFSET_NAME(r5),
	REG_OFFSET_NAME(r4),
	REG_OFFSET_NAME(r3),
	REG_OFFSET_NAME(r2),
	REG_OFFSET_NAME(r1),
	REG_OFFSET_NAME(r0),
	REG_OFFSET_NAME(sp),
	REG_OFFSET_NAME(orig_r0),
	REG_OFFSET_NAME(ecr),
	REG_OFFSET_END,
};

#else

static const struct pt_regs_offset regoffset_table[] = {
	REG_OFFSET_NAME(orig_r0),
	REG_OFFSET_NAME(ecr),
	REG_OFFSET_NAME(bta),
	REG_OFFSET_NAME(r26),
	REG_OFFSET_NAME(fp),
	REG_OFFSET_NAME(sp),
	REG_OFFSET_NAME(r12),
	REG_OFFSET_NAME(r30),
#ifdef CONFIG_ARC_HAS_ACCL_REGS
	REG_OFFSET_NAME(r58),
	REG_OFFSET_NAME(r59),
#endif
#ifdef CONFIG_ARC_DSP_SAVE_RESTORE_REGS
	REG_OFFSET_NAME(DSP_CTRL),
#endif
	REG_OFFSET_NAME(r0),
	REG_OFFSET_NAME(r1),
	REG_OFFSET_NAME(r2),
	REG_OFFSET_NAME(r3),
	REG_OFFSET_NAME(r4),
	REG_OFFSET_NAME(r5),
	REG_OFFSET_NAME(r6),
	REG_OFFSET_NAME(r7),
	REG_OFFSET_NAME(r8),
	REG_OFFSET_NAME(r9),
	REG_OFFSET_NAME(r10),
	REG_OFFSET_NAME(r11),
	REG_OFFSET_NAME(blink),
	REG_OFFSET_NAME(lp_end),
	REG_OFFSET_NAME(lp_start),
	REG_OFFSET_NAME(lp_count),
	REG_OFFSET_NAME(ei),
	REG_OFFSET_NAME(ldi),
	REG_OFFSET_NAME(jli),
	REG_OFFSET_NAME(ret),
	REG_OFFSET_NAME(status32),
	REG_OFFSET_END,
};
#endif

static struct callee_regs *task_callee_regs(struct task_struct *tsk)
{
	struct callee_regs *tmp = (struct callee_regs *)tsk->thread.callee_reg;
	return tmp;
}

static int genregs_get(struct task_struct *target,
		       const struct user_regset *regset,
		       struct membuf to)

Annotation

Implementation Notes