arch/sparc/kernel/kgdb_32.c

Source file repositories/reference/linux-study-clean/arch/sparc/kernel/kgdb_32.c

File Facts

System
Linux kernel
Corpus path
arch/sparc/kernel/kgdb_32.c
Extension
.c
Size
3883 bytes
Lines
173
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.

Dependency Surface

Detected Declarations

Annotated Snippet

if (kgdb_hex2long(&ptr, &addr)) {
			linux_regs->pc = addr;
			linux_regs->npc = addr + 4;
		}
		fallthrough;

	case 'D':
	case 'k':
		if (linux_regs->pc == (unsigned long) arch_kgdb_breakpoint) {
			linux_regs->pc = linux_regs->npc;
			linux_regs->npc += 4;
		}
		return 0;
	}
	return -1;
}

asmlinkage void kgdb_trap(unsigned long trap_level, struct pt_regs *regs)
{
	unsigned long flags;

	if (user_mode(regs)) {
		do_hw_interrupt(regs, trap_level);
		return;
	}

	flushw_all();

	local_irq_save(flags);
	kgdb_handle_exception(trap_level, SIGTRAP, 0, regs);
	local_irq_restore(flags);
}

int kgdb_arch_init(void)
{
	return 0;
}

void kgdb_arch_exit(void)
{
}

void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long ip)
{
	regs->pc = ip;
	regs->npc = regs->pc + 4;
}

const struct kgdb_arch arch_kgdb_ops = {
	/* Breakpoint instruction: ta 0x7d */
	.gdb_bpt_instr		= { 0x91, 0xd0, 0x20, 0x7d },
};

Annotation

Implementation Notes