What does SEGV_ACCERR mean?

后端 未结 4 912
有刺的猬
有刺的猬 2020-12-30 22:35

I am examining a few crashes that all have the signal SIGSEGV with the reason SEGV_ACCERR. After searching for SEGV_ACCERR, the closest thing I have found to a human readabl

相关标签:
4条回答
  • 2020-12-30 23:12

    It's possible to get a SEGV_ACCERR because of a stack overflow. Specifically, this happened to me on Android ARM64 with the following:

    VeryLargeStruct s;
    s = {}; // SEGV_ACCERR
    

    It seems that the zero-initialization created a temporary that caused a stack overflow. This only happened with -O0; presumably the temporary was optimized away at higher optimization levels.

    0 讨论(0)
  • 2020-12-30 23:14

    This is an error that I have mostly seen on 64 bit iOS devices and can happen if multiple threads read and change a variable under ARC. For example, I fixed a crash today where multiple background threads were reading and using a static NSDate and NSString variable and updating them without doing any kind of locking or queueing.

    Using core data objects on multiple threads can also cause this crash, as I have seen many times in my crash logs.

    I also use Crittercism, and this particular crash was a SEGV_ACCERR that only affected 64 bit devices.

    0 讨论(0)
  • 2020-12-30 23:16

    I've seen this in cases where code tries to execute from places other than "text".

    For eg, if your pointer is pointing to a function in heap or stack and you try to execute that code (from heap or stack), the CPU throws this exception.

    0 讨论(0)
  • 2020-12-30 23:17

    As stated in the man page of sigaction, SEGV_ACCERR is a signal code for SIGSEGV that specifies Invalid permissions for mapped object. Contrary to SEGV_MAPERR which means that the address is not mapped to a valid object, SEGV_ACCERR means the address matches an object, but for sure it is neither the good one, nor one the process is allowed to access.

    0 讨论(0)
提交回复
热议问题