Skip to content

GC on Android SIGSEGV #3350

@ghost

Description

I'm trying to build android NativeActivity application with ldc. And I have strange errors with GC

-mtriple=i686-none-linux-android

I/NativeActivity( 2948): _nativeInit
D/NativeActivity( 2948): _jni_nativeInit
D/NativeActivity( 2948): _jni_nativeInit 32 bit
D/NativeActivity( 2948): _android_app_thread
D/NativeActivity( 2948): core.runtime.rt_init
D/NativeActivity( 2948): initSections
D/NativeActivity( 2948): initSections LDC mbeg = 0xa16f96f0, mend = 0xa16faa40
D/NativeActivity( 2948): _jni_nativeInit ok
D/NativeActivity( 2948): initSections LDC pbeg = 0xa16a8a64, pend = 0xb7714658
D/NativeActivity( 2948): initSections LDC pbeg = 0xa16a8a64, pend = 0xb7714658
I/NativeActivity( 2948): _nativeInit ok
I/NativeActivity( 2948): WebViewNativeActivity.onCreate ok
D/NativeActivity( 2948): initTLSRanges

here i'm trying to allocate 25 bytes
char[1024] buf;
....
return buf[0 .. len].idup; // len = 25

on idup it crashes

D/NativeActivity( 2948): _d_newarrayU(length = x19, size = 1)
D/NativeActivity( 2948): __arrayAlloc size = 25
D/NativeActivity( 2948): __arrayAlloc typeInfoSize = 0
D/NativeActivity( 2948): __arrayAlloc padSize = 1
D/NativeActivity( 2948): __arrayAlloc padded_size = 26
D/NativeActivity( 2948): __arrayAlloc GC.qalloc padded_size = 26
D/NativeActivity( 2948): GC.qalloc sz = 26
D/NativeActivity( 2948): gc/proxy/gc_qalloc sz = 26
D/NativeActivity( 2948): gc/impl/proto/gc qalloc 26
D/NativeActivity( 2948): gc_init()
D/NativeActivity( 2948): gc_init() !isInstanceInit
D/NativeActivity( 2948): createGCInstance conservative
D/NativeActivity( 2948): createGCInstance entry.name = conservative ok
D/NativeActivity( 2948): gc/impl/conservative/gc private GC initialize()
D/NativeActivity( 2948): gc/impl/conservative/gc private GC initialize() 1
D/NativeActivity( 2948): gc/impl/conservative/gc private GC initialize() ok
D/NativeActivity( 2948): 0xb3d93f80.Gcx::addRange(0xa16a8a64, 0xb7714658)
D/NativeActivity( 2948): gc/impl/proto/gc qalloc 26
D/NativeActivity( 2948): gc/proxy/gc_qalloc sz = 26
D/NativeActivity( 2948): conservative/gc/qalloc 26
D/NativeActivity( 2948): GC::malloc(gcx = 0xb3d93f80, size = 26 bits = a, ti = TypeInfo_a)
D/NativeActivity( 2948): Gcx.fullcollect()
D/NativeActivity( 2948): startScanThreads: 1 threads per CPU
D/NativeActivity( 2948): preparing mark.
D/NativeActivity( 2948): 	collect stacks.
D/NativeActivity( 2948): collectRoots
D/NativeActivity( 2948): collectRoots pbot = 0xa0ff4050, ptop = 0xa0ff9000
D/NativeActivity( 2948): collectRoots minAddr = 0x0, memSize = 0
D/NativeActivity( 2948): scanTLSRanges
D/NativeActivity( 2948): collectRoots
D/NativeActivity( 2948): collectRoots pbot = 0xb3fc8100, ptop = 0xb3fc81f8
D/NativeActivity( 2948): collectRoots minAddr = 0x0, memSize = 0
D/NativeActivity( 2948): 	collect roots[]
D/NativeActivity( 2948): 	collect ranges[]
D/NativeActivity( 2948): 		0xa16a8a64 .. 0xb7714658
D/NativeActivity( 2948): collectRoots
D/NativeActivity( 2948): collectRoots pbot = 0xa16a8a64, ptop = 0xb7714658
D/NativeActivity( 2948): collectRoots minAddr = 0x0, memSize = 0
--------- beginning of crash

and when I try to run with -mtriple=aarch64-none-linux-android the result is more strange:
the size of memory 25 changed to 26 (it is ok), bun then it changed to 10???, and then size = -309990416 (in function conservative/gc/qalloc). Why???

D/NativeActivity: _d_newarrayU(length = x19, size = 1)
D/NativeActivity: __arrayAlloc size = 25
D/NativeActivity: __arrayAlloc typeInfoSize = 0
D/NativeActivity: __arrayAlloc padSize = 1
D/NativeActivity: __arrayAlloc padded_size = 26
D/NativeActivity: __arrayAlloc GC.qalloc padded_size = 26
D/NativeActivity: GC.qalloc sz = 26
D/NativeActivity: gc/proxy/gc_qalloc sz = 26
D/NativeActivity: gc/impl/proto/gc qalloc 10
D/NativeActivity: gc_init()
D/NativeActivity: gc_init() !isInstanceInit
D/NativeActivity: createGCInstance conservative
D/NativeActivity: createGCInstance entry.name = conservative ok
D/NativeActivity: gc/impl/conservative/gc private GC initialize()
D/NativeActivity: gc/impl/conservative/gc private GC initialize() ok
D/NativeActivity: gc/impl/proto/gc qalloc 10
D/NativeActivity: gc/proxy/gc_qalloc sz = 10
D/NativeActivity: conservative/gc/qalloc -309990416, _add = -320560320

With -mtriple=armv7-none-linux-androideabi all works good without errors.

If I turn off the GC by adding in code
extern(C) pragma(mangle, "rt_options") __gshared string[] rt_options = [ "gcopt=disable:1" ];
all works good on all android targets.

I test it in Android studio emulator, Android 7.0, API 24

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions