Libfmod.so exports unwinder symbols which leads to crashes on arm32

libfmod.so on the latest version 2.02.15 for Android armeabi-v7 exports unwinder symbols.

readelf -sW libfmod.so | grep _Unwind
   116: 00000000     0 FUNC    GLOBAL DEFAULT  UND __gnu_Unwind_Find_exidx
   204: 000da9d5   616 FUNC    GLOBAL DEFAULT   13 _Unwind_VRS_Interpret
   560: 000db0ed   104 FUNC    GLOBAL DEFAULT   13 _Unwind_Resume
   583: 000db0e9     2 FUNC    GLOBAL DEFAULT   13 _Unwind_Complete
   642: 000dace9   176 FUNC    GLOBAL DEFAULT   13 _Unwind_VRS_Set
   841: 000db189    52 FUNC    GLOBAL DEFAULT   13 _Unwind_GetRegionStart
   990: 000daf31   160 FUNC    GLOBAL DEFAULT   13 _Unwind_RaiseException
  1235: 000dac3d   172 FUNC    GLOBAL DEFAULT   13 _Unwind_VRS_Get
  1266: 000db155    52 FUNC    GLOBAL DEFAULT   13 _Unwind_GetLanguageSpecificData
  1385: 000dad99   336 FUNC    GLOBAL DEFAULT   13 _Unwind_VRS_Pop
  1427: 000db1bd    12 FUNC    GLOBAL DEFAULT   13 _Unwind_DeleteException

Unfortunately that leads to crashes on arm32 devices when throwing exceptions.

https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#Unwinding

I saw a similar issue was fixed in
01/11/17 1.10.01 - Studio API minor release (build 91339)

  • Core API - Android - Fixed exported symbols to avoid issues with unwinder.

But unwinder symbols are still there.

For now in my project I reordered libraries so that libfmod.so is going last in linker command, and manually put Clang’s libunwind before it. That fixed the crashes.

But it would be great if unwinder symbols would be excluded from libfmod.so when building.

1 Like

Thanks for letting us know, and for sharing your workaround!
I have notified the dev team and they will look into removing the unwinder symbols.

1 Like