HaxeFoundation / HaxeFoundation/hxcpp

Critical Error: Allocating from a GC-free thread

Open
#662 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
330
Forks
227
Avg merge
2d 16h
Merged PRs (30d)
18

Description

Getting a crash when I use hxcpp debugger on Android.

* hxcpp 3.4.188
* hxcpp-debugger 8481406451a3202a6baacc04c5bab1aa5c117fa6
* android-ndk-r11c
* Android 7.1.1

Seems to be related to #300.

```
10-25 18:51:58.410 31408 31440 E HXCPP : Critical Error: Allocating from a GC-free thread
10-25 18:51:58.410 31408 31440 F libc : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 31440 (SDLThread)
10-25 18:51:58.495 31441 31441 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-25 18:51:58.496 31441 31441 F DEBUG : Build fingerprint: 'Sony/E6853/E6853:7.1.1/32.4.A.0.160/3622372188:user/release-keys'
10-25 18:51:58.498 31441 31441 F DEBUG : Revision: '0'
10-25 18:51:58.498 31441 31441 F DEBUG : ABI: 'arm'
10-25 18:51:58.498 31441 31441 F DEBUG : pid: 31408, tid: 31440, name: SDLThread >>> com.notrelevant <<<
10-25 18:51:58.498 31441 31441 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
10-25 18:51:58.498 31441 31441 F DEBUG : r0 00000038 r1 00000000 r2 00000000 r3 00000000
10-25 18:51:58.498 31441 31441 F DEBUG : r4 cceeefd0 r5 00000004 r6 cba7f920 r7 00000078
10-25 18:51:58.498 31441 31441 F DEBUG : r8 d267d95c r9 cc707c5c sl d3aaadbc fp 0000000b
10-25 18:51:58.498 31441 31441 F DEBUG : ip cba7f274 sp cba7f740 lr d3a558b0 pc d3a5586c cpsr 200f0010
10-25 18:51:58.745 31441 31441 F DEBUG :
10-25 18:51:58.745 31441 31441 F DEBUG : backtrace:
10-25 18:51:58.745 31441 31441 F DEBUG : #00 pc 012d886c /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN12_GLOBAL__N_112DebuggerTrapEv+52)
10-25 18:51:58.745 31441 31441 F DEBUG : #01 pc 012d88ac /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_Z15CriticalGCErrorPKc+48)
10-25 18:51:58.745 31441 31441 F DEBUG : #02 pc 012e059c /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN14LocalAllocator9CallAllocEij+48)
10-25 18:51:58.745 31441 31441 F DEBUG : #03 pc 012e10d0 /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN2hx11InternalNewEib+380)
10-25 18:51:58.745 31441 31441 F DEBUG : #04 pc 0132f99c /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN2hx9ArrayBaseC2Eiiib+132)
10-25 18:51:58.745 31441 31441 F DEBUG : #05 pc 000d9fd4 /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN9Array_objI7DynamicEC1Eii+64)
10-25 18:51:58.746 31441 31441 F DEBUG : #06 pc 000d8d2c /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN9Array_objI7DynamicE5__newEii+52)
10-25 18:51:58.746 31441 31441 F DEBUG : #07 pc 0131ef64 /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN2hx6Object5__runERK7DynamicS3_+56)
10-25 18:51:58.746 31441 31441 F DEBUG : #08 pc 000cdad4 /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN7DynamicclERKS_S1_+80)
10-25 18:51:58.746 31441 31441 F DEBUG : #09 pc 013254dc /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN2hx15DebuggerContext6attachEPNS_12StackContextE+296)
10-25 18:51:58.746 31441 31441 F DEBUG : #10 pc 01325e88 /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN2hx12dbgCtxAttachEPNS_15DebuggerContextEPNS_12StackContextE+24)
10-25 18:51:58.746 31441 31441 F DEBUG : #11 pc 013220b8 /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN2hx12StackContext14onThreadAttachEv+168)
10-25 18:51:58.746 31441 31441 F DEBUG : #12 pc 012e15cc /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN2hx21RegisterCurrentThreadEPv+124)
10-25 18:51:58.746 31441 31441 F DEBUG : #13 pc 012e0f04 /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_ZN2hx13SetTopOfStackEPib+120)
10-25 18:51:58.746 31441 31441 F DEBUG : #14 pc 0132de00 /data/app/com.notrelevant-2/lib/arm/libApplicationMain.so (_Z12hxThreadFuncPv+68)
10-25 18:51:58.746 31441 31441 F DEBUG : #15 pc 000470c3 /system/lib/libc.so (_ZL15__pthread_startPv+22)
10-25 18:51:58.746 31441 31441 F DEBUG : #16 pc 00019d79 /system/lib/libc.so (__start_thread+6)
```

Objdump for assembly inspection;
`arm-linux-androideabi-objdump -d Export/android/bin/app/src/main/jniLibs/armeabi/libApplicationMain.so`

```
0132ddbc <_Z12hxThreadFuncPv>:
132ddbc: e52de004 push {lr} ; (str lr, [sp, #-4]!)
132ddc0: e24dd01c sub sp, sp, #28
132ddc4: e58d000c str r0, [sp, #12]
132ddc8: e59d300c ldr r3, [sp, #12]
132ddcc: e58d3010 str r3, [sp, #16]
132ddd0: e3a03000 mov r3, #0
132ddd4: e58d3014 str r3, [sp, #20]
132ddd8: e59d3010 ldr r3, [sp, #16]
132dddc: e59f20b4 ldr r2, [pc, #180] ; 132de98 <_Z12hxThreadFuncPv+0xdc>
132dde0: e08f2002 add r2, pc, r2
132dde4: e1a00002 mov r0, r2
132dde8: e1a01003 mov r1, r3
132ddec: eb000483 bl 132f000 <_ZN2hx7TLSDataI12hxThreadInfoLb0EEaSEPS1_>
132ddf0: e28d3010 add r3, sp, #16
132ddf4: e2833004 add r3, r3, #4
132ddf8: e1a00003 mov r0, r3
132ddfc: e3a01001 mov r1, #1
132de00: ebfecc21 bl 12e0e8c <_ZN2hx13SetTopOfStackEPib>
132de04: e59d3010 ldr r3, [sp, #16]
132de08: e5933008 ldr r3, [r3, #8]
132de0c: e1a00003 mov r0, r3
132de10: ebfeaa02 bl 12d8620 <_ZN11HxSemaphore3SetEv>
132de14: e59d3010 ldr r3, [sp, #16]
132de18: e283300c add r3, r3, #12
132de1c: e1a00003 mov r0, r3
132de20: ebb688e4 bl d01b8 <_ZNK2hx9ObjectPtrINS_6ObjectEE6GetPtrEv>
132de24: e1a03000 mov r3, r0
132de28: e3530000 cmp r3, #0
132de2c: 13a03001 movne r3, #1
132de30: 03a03000 moveq r3, #0
132de34: e6ef3073 uxtb r3, r3
132de38: e3530000 cmp r3, #0
132de3c: 0a00000b beq 132de70 <_Z12hxThreadFuncPv+0xb4>
132de40: e59d3010 ldr r3, [sp, #16]
132de44: e283300c add r3, r3, #12
132de48: e1a00003 mov r0, r3
132de4c: ebb6888a bl d007c <_ZN2hx9ObjectPtrINS_6ObjectEEptEv>
132de50: e1a02000 mov r2, r0
132de54: e5923000 ldr r3, [r2]
132de58: e2833060 add r3, r3, #96 ; 0x60
132de5c: e5933000 ldr r3, [r3]
132de60: e1a0100d mov r1, sp
132de64: e1a00001 mov r0, r1
132de68: e1a01002 mov r1, r2
132de6c: e12fff33 blx r3
132de70: ebfecdde bl 12e15f0 <_ZN2hx23UnregisterCurrentThreadEv>
132de74: e59f3020 ldr r3, [pc, #32] ; 132de9c <_Z12hxThreadFuncPv+0xe0>
132de78: e08f3003 add r3, pc, r3
132de7c: e1a00003 mov r0, r3
132de80: e3a01000 mov r1, #0
132de84: eb00045d bl 132f000 <_ZN2hx7TLSDataI12hxThreadInfoLb0EEaSEPS1_>
132de88: e3a03000 mov r3, #0
132de8c: e1a00003 mov r0, r3
132de90: e28dd01c add sp, sp, #28
132de94: e49df004 pop {pc} ; (ldr pc, [sp], #4)
132de98: 00470ea0 .word 0x00470ea0
132de9c: 00470e08 .word 0x00470e08
```

``` 132ddf0: e28d3010 add r3, sp, #16
132ddf4: e2833004 add r3, r3, #4
132ddf8: e1a00003 mov r0, r3
132ddfc: e3a01001 mov r1, #1
132de00: ebfecc21 bl 12e0e8c <_ZN2hx13SetTopOfStackEPib>
````
I believe the lines above indicate `hx::SetTopOfStack((int *)&info[1], true);`

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the hxThreadFunc entry point and the provided Android backtrace, then trace SetTopOfStack, RegisterCurrentThread, and DebuggerContext::attach. Reproduce the hxcpp debugger crash on Android and determine why allocation occurs from the GC-free thread; done means the reported fatal error no longer occurs.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, cpp
Domain
mobile-dev, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.