We were trying to run a go c-shared library on a emulator (Written in C/C++). We use gccgo compiler to create .so file from test.go <https://github.com/Emegua/golang_nuts/blob/master/test.go> file, so that the runtime could be liked dynamically. Currently we are facing a problem while packages were imported in main.init. Here is a disassembly of the main.init function which was called from runtime.main https://github.com/Emegua/golang_nuts/blob/master/main_init.S We tried to debug the issue, and until now, it seems the problem is related to TLS. We made breakpoint using b ../../../src/libgo/go/runtime/malloc.go:660. When the c:= gomcache() is executed, a __tls_get_addr function retrieves some address from TLS. Refer to the following bt. https://github.com/Emegua/golang_nuts/blob/master/gdb_bt_1
>From runtime.gomcache function here: https://github.com/Emegua/golang_nuts/blob/663517937f34580288c2d07249ade515a7bf4c44/runtime1.go#L490 >From the retrieved address (i.e, getg()), now it tries to retrieve its member variable (called mcache) by accessing to specific index using pointer dereferencing. Please see here the disassembled https://github.com/Emegua/golang_nuts/blob/master/disas_1.S After a few steps, it retrieves the correct values c. https://github.com/Emegua/golang_nuts/blob/6a246ae7715823688a74581649c77da4369f8717/malloc.go#L661 But while importing some packages, say runtime package, the same process (i.e., dereferencing the pointer obtained by __tls_get_addr) retrieves 0x0 which is nullptr. >From the following line <https://github.com/Emegua/golang_nuts/blob/master/tls.c>, we inspected the all dereferenced value of pointer, step by step. The results are as follows. Left column is before the import of runtime, right column is while importing runtime. As it shows, retrieved pointer is same for both situation (i.e., 0x7f7ae76d7b18), but it contains different value so the resulting dereferenced pointer(i.e., c) is also different. Please refer to the following image. gccgo --version gccgo (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0 What would be any possible explanation for the segfault? -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/4c2964f0-41bf-462a-bf70-2eaddadfe0e0n%40googlegroups.com.
