(苹果硅)(M1)莫名其妙的SIGBUS崩溃



在我正在处理的一些原生M1代码中,调用特定函数会引发一个毫无意义的SIGBUS故障:

Exception Type:        EXC_BAD_ACCESS (SIGBUS)
Exception Codes:       KERN_PROTECTION_FAILURE at 0x0000000280dc7da0
Exception Codes:       0x0000000000000002, 0x0000000280dc7da0
Exception Note:        EXC_CORPSE_NOTIFY
Termination Reason:    Namespace SIGNAL, Code 10 Bus error: 10
Terminating Process:   exc handler [12171]
VM Region Info: 0x280dc7da0 is in 0x280d50000-0x280dd0000;  bytes after start: 490912  bytes before end: 33375
REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
VM_ALLOCATE                 280cf0000-280d50000    [  384K] rw-/rwx SM=ZER  
--->  VM_ALLOCATE                 280d50000-280dd0000    [  512K] rwx/rwx SM=ZER  
VM_ALLOCATE                 280dd0000-280e50000    [  512K] rw-/rwx SM=ZER  

根据此转储:

  • 故障地址与功能地址相同
  • 函数地址(0x280dc7da0(已正确对齐
  • 目标区域具有rwx保护,因此是可执行的

这里可能触发SIGBUS的是什么?

顺便说一句,这个程序的英特尔(x64(版本在x64 Mac和罗塞塔上运行良好。

这里的问题很可能是线程JIT写入保护,这是一项仅在Apple Silicon上存在的功能,除了传统的内存页面权限外,它还可以运行。不幸的是,苹果的崩溃转储似乎没有表明线程JIT写入保护可能是SIGBUS触发器。

最新更新