gpt4 book ai didi

c - 如何在 arm v7 中导致数据中止和预取中止

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:35 26 4
gpt4 key购买 nike

我想创建一个数据中止和预取中止来测试它们的异常处理程序是否被正确调用。根据我的理解,取消引用 NULL 指针会导致数据中止。但我不知道如何为测试创建预取中止。我正在研究 armv7a。我没有使用任何操作系统,正在处理引导代码。

最佳答案

这两个都是总线故障,跳入未知代码将导致未定义指令而非预取中止。我会专注于unaigned访问,做一个设置了位1的ldr,做一个设置了位1的bx(但未设置位0)将是我开始的地方。如果这些不起作用,则可能无法使用芯片内的测试夹具。

地址空间的某些部分可能没有响应,那些应该只是挂起处理器,但你可能很幸运,内存 Controller 返回一个错误。

如果您的系统中有奇偶校验或 ecc,那将是最好的方法,假设您有办法将错误注入(inject)这些内存以强制出现奇偶校验或 ecc 故障(还假设该设计的内存 Controller 等) (几乎没有与您的问题相关的逻辑是 ARM 处理器的一部分)在奇偶校验或 ecc 错误上返回错误。

cortex-m 可能会在某些地址空间上出错,因为它们在某种程度上决定了你应该去哪里。

如果您可以使用 mmus 保护的较新内核之一,我不知道它是否会返回数据/预取错误,请设置 mmu,使某些空间与您要访问的代码处于不同的访问级别打它,看看你得到什么错误。

编辑

必须寻找 armv7 但在 armv6(例如 pi 1)上,如果我在控制寄存器中启用对齐检查,并执行地址 0x1001 的 ldr,这是一个对齐错误,然后它会给我一个数据中止。

保存一行代码,使用地址0x01

mrc p15, 0, r0, c1, c0, 0
orr r0,#2
mcr p15, 0, r0, c1, c0, 0
mov r0,#0x1
ldr r0,[r0]

跳入无效指令会导致未定义而非预取中止,内存系统必须断言中止,因此您最有可能为此使用 mmu,

未定义的异常

.globl TEST
TEST:
.word 0xFFFFFFFF
bx lr

进行预取中止的最简单方法(如 ARM ARM 中所述)。

.globl TEST
TEST:
bkpt

关于c - 如何在 arm v7 中导致数据中止和预取中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43873891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com