Код: Выделить всё
// Static definition of the semaphore object. This semaphore object is
// declared as a static array of 32 bytes in class A
uint8_t A::semaphore[sizeof(sem_t)];
-----------------------------------------------------------------------
// In int main()
if(sem_init ((sem_t *) A::semaphore, 0, 0)) {
// failed to initialize semaphore
}
printf("semaphore = %p\n", A::semaphore); // Prints 0x129ba01
// Create another thread(s) to execute work
// Main thread gets blocked here... until thread(s) complete their work.
sem_wait ((sem_t *) A::semaphore);
// Once main thread gets unblocked, return from int main() with return value
Код: Выделить всё
// Exception handler belonging to Class B
void B::handleException(int32_t signum, siginfo_t * info, void * context) noexcept
{
printf("signo = %d\n", info->si_signo); // Prints 7
printf("errno = %d\n", info->si_errno);
printf("code = %d\n", info->si_code);
printf("si_addr = %p\n", info->si_addr); // Prints 0x129ba01
....
}
Например, недопустимый доступ к памяти, который приводит к доставке SIGSEGV на одной архитектуре ЦП, может вызвать доставку SIGBUS на другой архитектуре или наоборот.
Я думаю, что на самом деле я получаю исключение SIGSEGV... и есть какое-то нарушение доступа к памяти... но я не могу его найти.
Что мне здесь не хватает?
Примечание: SIGBUS выдается только в Linux Arm64. Мое приложение отлично работает на Linux x64.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -exception
Мобильная версия