Hi, we are trying to run code compiled with the golang compiler to on the
OSv kernel.
OSv is a unikernel (kernel for a virtual-machine intending to run a single
program at a time). It is mostly compatible with the Linux glibc ABI,
meaning that you can "mostly" take unmodified Linux executable code and run
it on OSv.

We're in fact very close to running golang-compiled code on OSv. But we're
having trouble with the code's use of TLS (thread-local storage), and I
wanted to ask for advice from the experts on golang's implementation.

If I understand correctly, golang uses only one per-thread variable, "g"
(or maybe also a second one, "m"?).

The ELF ABI has a standard (https://www.akkadia.org/drepper/tls.pdf) on how
several components of an executable linked at run time can "share" the
single fs_base offset (on x86) used to implement TLS. So while Go only
needs a single "g" thread-local variable, some other shared library loaded
in the same process might need an additional thread-local variable, and the
ELF standard nicely allows to pull that off.

BUT, from the code we've inspected, it seems that golang-compiled code
doesn't use this technique. Instead, it seems it uses arch_prctl's
ARCH_SET_FS to completely take over the fs_base of Go threads. This would
cause big problems for us when these Go threads want to call other non-Go
functions (in OSv, the system calls are ordinary functions too).

My question is - is there a "build mode" or something where Go can allocate
its "g" variable in the usual ELF way - and cooperate with other C code
running in the same process - instead of taking over the fs_base?

I have read conflicting reports on what the "c-shared" mode does. On one
hand it seems it does *something* similar to what I want - it seems it has
a single TLS variable (in the "initial exec" variant of the ELF TLS
standard). On the other hand, I also read it still uses prctl()...

So *should* c-shared do what I am looking for? Does it in fact do this
currently?

Thanks. I'm looking forward to seeing Go code running on OSv soon :-)

--
Nadav Har'El
[email protected]

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to