Thanks for confirming Ian, this is very helpful. I agree with the
implication that hacking Go on x86 to avoid TLS would not be a productive
use of time compared to adding TLS support to the operating system.

Thanks again.

On Sat, Aug 1, 2020 at 6:27 PM Ian Lance Taylor <i...@golang.org> wrote:

> On Sat, Aug 1, 2020 at 2:46 PM <evan.mesterh...@gmail.com> wrote:
> >
> > You're right - after re-reading this I realize I could have been more
> specific.
> >
> > I am working with a custom OS kernel that supports a subset of Linux
> syscalls. However, it does not support TLS, which on i386 I believe
> typically requires OS support to set up and restore the GDT and %gs segment
> register between context switches.
> >
> > My understanding is that TLS using segment registers on i386 is largely
> a speed and syntax optimization, but that thread specific data can be
> managed without it (see glibc's pthread_setspecific() api). I am currently
> building C programs for this OS by compiling for Linux / i386 using
> uClibc-ng configured to disable TLS. I'm wondering if there is a similar
> configuration option to build Go programs without TLS so that I can run
> them on my OS.
> >
> > Please let me know if I can clarify anything further.
>
> While technically it might be possible to use something like
> pthread_setspecific to handle Go's needs, 1) there is no support for
> that in the current toolchain; 2) the execution time cost would be
> significant.  On x86 Go currently stores the stack guard in an offset
> from the TLS segment register, and it checks that value at the entry
> to (almost) every function.  Requiring some sort of function call
> would be a big slowdown at every function call.  Also, come to think
> of it, I'm not sure how to implement it; even pthread_setspecific
> relies on TLS.
>
> One option would be to change Go on x86 to store the required
> information in a register.  That is how it works on some other
> processors, so it would be feasible, but not at all simple.  And you
> would be using a custom port of Go that would not interoperate with
> standard Go.
>
> Ian
>


-- 
Evan Mesterhazy
evan.mesterh...@gmail.com

-- 
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 golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAN2qZSPFhR-RW3_bvGfnr-Lzdd2QDDiMn6W3ZRb-5_B0JDvYQw%40mail.gmail.com.

Reply via email to