ARMv8 异常处理之el1_undef

11 篇文章 2 订阅 ¥29.90 ¥99.00

1.前言

ARMv8 异常处理之el1_sync-CSDN博客

2.el1_undef

static void noinstr el1_undef(struct pt_regs *regs)
{
	enter_from_kernel_mode(regs);
	local_daif_inherit(regs);
	do_undefinstr(regs);
	local_daif_mask();
	exit_to_kernel_mode(regs);
}

2.1 do_undefinstr

void do_undefinstr(struct pt_regs *regs)
{
	/* check for AArch32 breakpoint instructions */
	if (!aarch32_break_handler(regs))//处理 AArch32 模式下断点指令的函数。如果当前指令是断点指令,该函数会处理该异常,并返回 true
		return;
//这是一个调用未定义指令钩子的函数。如果有钩子函数注册并成功处理了异常,它会返回 0;否则返回其他值
	if (call_undef_hook(regs) == 0)
		return;
//如果不是用户模式(即内核模式),则会触发 BUG,导致内核崩溃。
	BUG_ON(!user_mode(regs));
//如果前面的处理都没有成功,最后会强制发送 SIGILL 信号(非法指令信号)给当前进程,
//通知进程发生了非
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值