gpt4 book ai didi

linux - 如何模拟ARM未对齐的内存访问异常?

转载 作者:太空狗 更新时间:2023-10-29 12:09:27 28 4
gpt4 key购买 nike

我正在编写一个在 x86 机器上运行的跨平台应用程序,但在实际的 ARM 硬件 (Raspberypi 2) 上因“总线错误”而崩溃 ...

[ 4105.019037] Alignment trap: not handling instruction edd37a00 at [<00014218>]
[ 4105.019059] Unhandled fault: alignment exception (0x001) at 0x0002814e
[ 4105.028227] pgd = b736c000
[ 4105.033347] [0002814e] *pgd=3708d835, *pte=335d075f, *ppte=335d0c7f

... 但在 Qemu 中运行没有任何问题| .

我运行这个命令来在 Qemu 下运行的内核中启用 SIGBUS 信号和通知,但它似乎没有任何效果:

echo 5 >/proc/cpu/alignment [ 2 ]

如何在 Qemu(或其他免费模拟器)中模拟这些错误?我希望能够在无法使用实际硬件的 x86 机器上运行的持续集成环境中运行我的自动化测试。或者我可以租用 ARM 服务器,但我想避免这种情况。

稍后编辑以进一步澄清:在真实硬件上导致此问题的指令也在模拟器中执行,它似乎在没有触发任何异常的情况下工作。

最佳答案

QEMU 当前不模拟 ARM 访客代码的未对齐访问陷阱。这反射(reflect)了一个事实,即其传统的主要目的是“尽快运行正确的客户代码”;放置对齐陷阱会减慢正确的 guest 代码的速度,并且只会对在较旧的 Arm 内核上运行的错误 guest 代码产生影响(因为 ARMv7 及更高版本可以在硬件中正确处理未对齐的访问)。

也就是说,我们现在确实在通用代码中提供了更好的支持,以发出相对有效的对齐检查;我们只是还没有费心将它们连接到 Arm codegen。如果有人想编写 QEMU 补丁来添加这种支持,我们会接受他们。 (粗略地说,当 guest CPU 处于意味着未对齐访问应该陷入的状态时,生成 guest 加载和存储时,target/arm/translate.c 中的代码需要将 MO_ALIGN 添加到 memop 标志;这可能因不同的体系结构版本而异以及不同类型的加载和存储insn。)

关于linux - 如何模拟ARM未对齐的内存访问异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51520635/

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