microsoft / microsoft/mimalloc

Segfault on Android when running provided demo 'mimalloc-test-api'

Open
#381 8 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.