[Gc] trouble with gc-7.2d compiling against musl libc

John Spencer maillist-boehm at barfooze.de
Wed Jan 9 10:55:09 PST 2013

Hi Ivan,

did the results of "make check" give you any clue ?

On 01/08/2013 11:31 AM, Ivan Maidanski wrote:
>>>>> which algorithm is used for detection of main stack base in your case? which macro is defined - STACKBOTTOM, HEURISTIC1, LINUX_STACKBOTTOM?
>>>> out of these 3, only LINUX_STACKBOTTOM seems to be defined (i added
>>>> #warnings into os_dep.c in order to find out)
>>> Seems to be correct.
>>> Does GC_get_main_stack_base return reasonable value?
>> how can i check ?
> What is the difference between this value and address of any local var of main() function? (It should not be bigger than several K.) Is this value bigger than that local var address? (stack grows down on your target, right?)

~/GC/bdwgc # cat test.c
#include "include/private/gc_priv.h"
#include <stdio.h>

int main() {
         int a;
         dprintf(2, "a: %p, stack: %p\n", &a, GC_get_main_stack_base());

~/GC/bdwgc # gcc test.c -L".libs/" -lgc
~/GC/bdwgc # LD_LIBRARY_PATH=.libs ./a.out
a: 0x7fff6ff6728c, stack: 0x7fff6ff672e0
~/GC/bdwgc #

>>>>>> in any case, i'd welcome advice on how to workaround this issue, so that
>>>>>> i get a working libgc.so in order to use inkscape.
>>>>> Thanks for reporting the problem, I'll definitely fix the gc source if we understand how to do it correctly. (Typically, first I apply the fixes to master branch and, then, cherry-pick to 7.2 release.)
>>>> thank you. is there anything else i can help with in order to get this
>>>> fixed ?
>>> Also, static data roots should be checked (GC_static_roots[], all global/static variables should be within one of the regions).
>> how can i check ? List all root ranges.
> Compile with linker map output, it will show addresses of global variables. These addresses (excluding read-only data) must be inside of a root range.

sorry, i dont know how to do that. please provide a test program and/or 
required command line.

i tried:
~/GC/bdwgc # gcc -shared  -fPIC -DPIC  .libs/allchblk.o .libs/alloc.o 
.libs/blacklst.o .libs/checksums.o .libs/db
g_mlc.o .libs/dyn_load.o .libs/finalize.o .libs/gc_dlopen.o 
.libs/gcj_mlc.o .libs/headers.o .libs/mach_dep.o .lib
s/malloc.o .libs/mallocx.o .libs/mark.o .libs/mark_rts.o .libs/misc.o 
.libs/new_hblk.o .libs/obj_map.o .libs/os_d
ep.o .libs/pcr_interface.o .libs/ptr_chck.o .libs/real_malloc.o 
.libs/reclaim.o .libs/specific.o .libs/stubborn.o
  .libs/thread_local_alloc.o .libs/typd_mlc.o .libs/fnlz_mlc.o   -ldl 
  -Wl,-soname -Wl,libgc.so.1 -o .libs/libgc
.so.1.0.3 -Wl,--print-map > link.map
but the resulting file does not contain any reference to GC_static_roots

link.map: https://sprunge.us/gHCQ

maybe objdump or readelf can do what you want ?

i uploaded the entire ~/GC directory including all object files (and 
.git dir) here for your convenience: 
https://mirror.wzff.de/sabotage/GC.tar.gz (10 MB)

in case you want to try yourself (i suggest you do so, since i am not an 
expert with BOEHM GC internals), here is an image file of sabotage linux 
(150 MB only)


extract using
xzcat sabotage-0.9.7-x86_64-898897d9.img.xz > sabotage.img

you can directly start it in qemu using

qemu-system-x86_64 sabotage.img

or convert to virtual box hdd format with
VBoxManage convertfromraw sabotage.img sabotage.vdi

root pass is "sabotage"

the only thing missing in the image is libtool, but this is not required 
if you simply unpack the above GC tarball which has the configure script 
already generated.
otherwise libtool compiles without any patches from source.
the other auto* utils, gcc, binutils, gdb, strace, etc are installed.

if you need network connectivity, try "dhclient eth0" or the usual ifconfig.

if you want to connect to the vm using SSH use :
source /src/config
butch install sshd-keys

latest musl precompiled is available here 
https://mirror.wzff.de/sabotage/musl.tar.gz (700KB)
just unpack into /opt and everything will automatically be up-to-date.
(the musl installed in the image is one release behind, i am unsure if 
it makes any difference though.)


More information about the Gc mailing list