tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: [golang-dev] Re: Moving Go to a newer NetBSD ABI in the 1.13 dev cycle
On Thu, Mar 07, 2019 at 05:01:20PM -0800, Ian Lance Taylor wrote:
> On Thu, Mar 7, 2019 at 7:32 AM Kamil Rytarowski <n54%gmx.com@localhost> wrote:
> >
> > On 07.03.2019 10:48, Benny Siegert wrote:
> >
> > > Any comments, objections, etc. from Go or NetBSD folks?
> > >
> >
> > We should switch to libc calls and reduce users of syscall(2)/__syscall(2).
>
> Go does work that way on Darwin, Solaris, AIX, and Windows. It has an
> efficiency cost--Go programs run somewhat slower--and it means that
> someone has to write a bunch of near-boilerplate code (see, e.g.,
> runtime/sys_darwin.go). Is there a reason to go this route for
> NetBSD? Is NetBSD trying to avoid statically linked executables?
This is unrelated to statically linked executables (we do provide
a static libc).
The point is more the very fragile syscall API, especially when you try
to write portable code (that is: same syscall, but portable over a variety
of architectures).
We have for example this hack in our __syscal test in the NetBSD test suite:
#if !defined(_LP64) && BYTE_ORDER == _BIG_ENDIAN
#define __SYSCALL_TO_UINTPTR_T(V) ((uintptr_t)((V)>>32))
#else
#define __SYSCALL_TO_UINTPTR_T(V) ((uintptr_t)(V))
#endif
and then do this to invoke mmap via __syscall:
p = (const char *)__SYSCALL_TO_UINTPTR_T(__syscall(SYS_mmap,
0, sizeof(secrect_data), PROT_READ, MAP_PRIVATE, fd,
/* pad*/ 0, (off_t)0));
So overall this is considered a hack (or at least very ugly), and using
the (static) libc stub is a lot easier to get right and portable.
Of course this mostly applies to C usage, and if you got the go glue
code right for an architecture once, you are done ;-)
Martin
Home |
Main Index |
Thread Index |
Old Index