Hi thanks a lot for your explanations.

So we are suposed to load the c-shared so then run the init().

Do we must pass argc, argv to the .so initializer and that all ?

Or must we then call GoStart after doing this ?

Best regards

Benoît



On Thu, Sep 1, 2016 at 9:54 PM, David Crawshaw <craws...@golang.org> wrote:

> On Thu, Sep 1, 2016 at 3:50 PM, Nadav Har'El <n...@scylladb.com> wrote:
> >
> > On Thu, Sep 1, 2016 at 10:40 PM, David Crawshaw <craws...@golang.org>
> wrote:
> >>
> >> It sounds like you'll need to use external linking if you need
> >> runtime.tlsg to be TLS IE. Using c-shared is reasonable if you have
> >> some machinery to do the equivalent of dlopen and call the global
> >> initializer the runtime inserts into the c-shared library.
> >>
> >> Does OSv support the equivalent of dynamically loading a .so that uses
> >> TLS IE? If so, buildmode=c-shared is a good way to go.
> >
> >
> > Yes, exactly - OSv basically revolves around a dynamic linker which can
> > load ELF objects (shared object, PIE, etc.), link their references to
> glibc
> > to the implementation in the OSv kernel (and also allow resolving
> > references between different shared libraries, as usual) - and then run
> > the result. And TLS IE is supported.
> >
> > So yes, buildmode=c-shared indeed sounds like the best build mode for us.
> > It seems that buildmode=c-shared hides *all* the functions from the
> dynamic
> > linker, though, so I guess we'll need to "export" at least the main()
> > function.
> >
> > I wonder, by the way, why is exporting main() not the default?
> > How is c-shared usable without exporting anything?
>
> Any function exported by cgo is exported in a c-shared library.
>
> https://golang.org/pkg/cmd/cgo/#hdr-C_references_to_Go
>
> So if you declare:
>
> package main
>
> import "C"
>
> func main() {} // never called in c-shared mode
>
> //export GoStart
> func GoStart() {
>   // ... your program
> }
>
> Then your loader will be able to resolve "GoStart".
>
> > Nadav.
>

-- 
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 osv-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to