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.

Reply via email to