microsoft / microsoft/mimalloc
Segfault on Android when running provided demo 'mimalloc-test-api'
- Dominant language
- C
- Stars
- 13.4k
- Forks
- 1.2k
- Avg merge
- 4d 45m
- Merged PRs (30d)
- 13
Description
(version 1.6.x, 1.7.0, 2.0.0 has the same problem)
Compile demo with android-ndk-r21b:
```
@echo off
set CURPATH=%cd%
set NDK_HOME=G:\Microsoft\AndroidNDK64\android-ndk-r21b
cd %~dp0
cd mimalloc
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=./install -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=%NDK_HOME%\build\cmake\android.toolchain.cmake -DANDROID_ABI=x86 -DANDROID_NATIVE_API_LEVEL=21 ..
make -j24 VERBOSE=1
make install
cd %CURPATH%
```
When run demo, raises segfault exception:
```
03-29 17:20:01.187: D/WifiStateMachine(1425): --------- beginning of crash
03-29 17:20:36.517: A/libc(2127): Fatal signal 11 (SIGSEGV), code 1, fault addr 0xcf7fffec in tid 2127 (mimalloc-test-a)
03-29 17:20:36.517: A/libc(2127): [ 03-29 17:20:36.518 1185: 1185 W/ ]
03-29 17:20:36.517: A/libc(2127): debuggerd: handling request: pid=2127 uid=0 gid=0 tid=2127
03-29 17:20:36.568: A/DEBUG(2128): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-29 17:20:36.568: A/DEBUG(2128): Build fingerprint: 'google/android_x86/x86:7.1.2/N2G48C/4565141:/release-keys'
03-29 17:20:36.568: A/DEBUG(2128): Revision: '0'
03-29 17:20:36.568: A/DEBUG(2128): ABI: 'x86'
03-29 17:20:36.568: A/DEBUG(2128): pid: 2127, tid: 2127, name: mimalloc-test-a >>> ./mimalloc-test-api <<<
03-29 17:20:36.568: A/DEBUG(2128): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xcf7fffec
03-29 17:20:36.568: A/DEBUG(2128): eax 00000023 ebx 8aadff18 ecx 00000000 edx c7ffe9ac
03-29 17:20:36.568: A/DEBUG(2128): esi 00000000 edi 00000021
03-29 17:20:36.568: A/DEBUG(2128): xcs 00000073 xds 0000007b xes 0000007b xfs 00000000 xss 0000007b
03-29 17:20:36.568: A/DEBUG(2128): eip 8aaad60a ebp cf800028 esp cf7ffff0 flags 00010286
03-29 17:20:36.571: A/DEBUG(2128): backtrace:
03-29 17:20:36.571: A/DEBUG(2128): #00 pc 0000360a /data/local/tmp/mimalloc-test-api (calloc+10)
03-29 17:20:36.571: A/DEBUG(2128): #01 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.571: A/DEBUG(2128): #02 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.571: A/DEBUG(2128): #03 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.571: A/DEBUG(2128): #04 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.571: A/DEBUG(2128): #05 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.571: A/DEBUG(2128): #06 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.571: A/DEBUG(2128): #07 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.571: A/DEBUG(2128): #08 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.571: A/DEBUG(2128): #09 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.571: A/DEBUG(2128): #10 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.571: A/DEBUG(2128): #11 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.571: A/DEBUG(2128): #12 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.571: A/DEBUG(2128): #13 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.571: A/DEBUG(2128): #14 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.571: A/DEBUG(2128): #15 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.571: A/DEBUG(2128): #16 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.571: A/DEBUG(2128): #17 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.571: A/DEBUG(2128): #18 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.571: A/DEBUG(2128): #19 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.571: A/DEBUG(2128): #20 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #21 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #22 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #23 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #24 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #25 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #26 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #27 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #28 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #29 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #30 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #31 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #32 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #33 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #34 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #35 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #36 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #37 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #38 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #39 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #40 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #41 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #42 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #43 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #44 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #45 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #46 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #47 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #48 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #49 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #50 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #51 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #52 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #53 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #54 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #55 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #56 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #57 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #58 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #59 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #60 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
03-29 17:20:36.572: A/DEBUG(2128): #61 pc 00027acc /data/local/tmp/mimalloc-test-api (__emutls_get_address+200)
03-29 17:20:36.572: A/DEBUG(2128): #62 pc 00004536 /data/local/tmp/mimalloc-test-api (mi_get_default_heap+38)
03-29 17:20:36.572: A/DEBUG(2128): #63 pc 0000362e /data/local/tmp/mimalloc-test-api (calloc+46)
```
PS: When I build a mimalloc static library, and use it in another place, it raises segfault exception too.
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the crash by building the mimalloc-test-api demo with the Android NDK r21b CMake toolchain for x86, then inspect the stack entries for calloc, __emutls_get_address, and mi_get_default_heap. Check the same behavior when using a static mimalloc library elsewhere; done means the demo and static-library use no longer segfault on Android.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, c, cmake
- Domain
- build-system, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100