arch/arc/include/asm/disasm.h

Source file repositories/reference/linux-study-clean/arch/arc/include/asm/disasm.h

File Facts

System
Linux kernel
Corpus path
arch/arc/include/asm/disasm.h
Extension
.h
Size
3813 bytes
Lines
114
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 disasm_state {
	/* generic info */
	unsigned long words[2];
	int instr_len;
	int major_opcode;
	/* info for branch/jump */
	int is_branch;
	int target;
	int delay_slot;
	enum flow flow;
	/* info for load/store */
	int src1, src2, src3, dest, wb_reg;
	int zz, aa, x, pref, di;
	int fault, write;
};

static inline int sign_extend(int value, int bits)
{
	if (IS_BIT(value, (bits - 1)))
		value |= (0xffffffff << bits);

	return value;
}

static inline int is_short_instr(unsigned long addr)
{
	uint16_t word = *((uint16_t *)addr);
	int opcode = (word >> 11) & 0x1F;
	return (opcode >= 0x0B);
}

void disasm_instr(unsigned long addr, struct disasm_state *state,
	int userspace, struct pt_regs *regs, struct callee_regs *cregs);
int disasm_next_pc(unsigned long pc, struct pt_regs *regs, struct callee_regs
	*cregs, unsigned long *fall_thru, unsigned long *target);
long get_reg(int reg, struct pt_regs *regs, struct callee_regs *cregs);
void set_reg(int reg, long val, struct pt_regs *regs,
		struct callee_regs *cregs);

#endif	/* __ARC_DISASM_H__ */

Annotation

Implementation Notes