1

我在 Android x86 上的 Boehm 发生了一次奇怪的崩溃(但 arm 工作正常);它正在崩溃:

deferred = *(word *)limit;

和:

LogCat:I/DEBUG(6453):信号 11(SIGSEGV),代码 1(SEGV_MAPERR),故障地址 0xa31f8

它总是失败的相同地址(0xa31f8);现在这可能是我做错了。这是一种自定义语言,我只是链接到 libc.so。什么可能导致这种情况?

日志:

LogCat:I/BDWGC(7930):分配 0 个字节后堆增加到 64 KiB

LogCat: D/BDWGC (7930): 创建线程 0xb7795160

LogCat:D/BDWGC(7930):从 0xb7795160 停止世界

LogCat:D/BDWGC(7930):世界从 0xb7795160 停止

LogCat:D/BDWGC(7930):从线程 0xb7795160 推送堆栈

LogCat: D/BDWGC (7930): Stack for thread 0xb7795160 = [0xbf90be1c,0xbf90f000) LogCat: F/libc (7930): Fatal signal 11 (SIGSEGV), code 1, fault addr 0xa31f8 in tid 7930 (ksample.oxygene)

回溯:

(gdb) BT

#0 0xa502c9ad in GC_mark_from (mark_stack_top=0xb8b30010, mark_stack=0xb8b30000, mark_stack_limit=0xb8b38000) at mark.c:853

#1 0xa502c1d0 in GC_mark_some (cold_gc_frame=0xbf90beec "l¿\220¿Hò\001¥ì¾\220¿") 在 mark.c:409

#2 0xa501f248 in GC_stopped_mark (stop_func=0xa501e420) at alloc.c:702

#3 0xa501eed2 in GC_try_to_collect_inner (stop_func=0xa501e420) at alloc.c:488

#4 0xa50254ff in GC_init () at misc.c:1288

4

1 回答 1

2

Android 的 boehm-gc 中存在一个错误,导致数据根注册到未映射的内存区域(因此在 GC 初始化期间导致 SIGSEGV/SEGV_MAPERR)。现在它是固定的。

于 2019-03-19T21:38:03.427 回答