[英]Logging and debugging unaligned accesses on Linux / aarch64
如何在Linux / aarch64(Cortex-a57)上记录未对齐的内存访问?
我知道这里涉及两件不同的事情:
我的问题是,首先,我不知道如何从我的程序中管理cpu的控制寄存器(我也不应该在我的用户空间应用程序中实现它),其次,用于管理未对齐访问的/proc/cpu/alignment
接口在Linux中似乎已经消失了(我使用的是4.4.0内核),请参阅下面的链接。
管理来自内核的未对齐访问: https : //www.kernel.org/doc/Documentation/arm/mem_alignment (可能已过期)
你不能这样做。 无论如何,不是用Linux。
EL0的对齐故障由SCTLR_EL1.A位控制,但这也会影响EL1。 因此,即使你编写了一个hacky内核模块来启用它(你显然无法直接从用户空间触摸特权系统控制寄存器),你几乎可以保证一旦下一个网络数据包到达,内核就会出现恐慌。 arm64内核端口依赖于AArch64提供的未对齐访问功能。 它没有ARM端口的/proc/cpu/alignment
处理程序,因为它没有完全不支持未对齐访问的前ARMv6 CPU的遗留(至少以任何可用的方式)。
但是,您可以使用perf工具监视Cortex-A57的任何或所有微体系结构PMU事件 0x68,0x69或0x6a,以计算程序触发的未对齐访问相关事件。 没有办法捕获或调试单个访问,因为可能存在对齐错误的钝器,但是否则它可能更有用,因为它只会计算可归因于程序的事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.