Go use this on linux to lookup time. We need a shared
libary that we will expose to the go runtime by passing
it's pointer in order for go to resolve this kinds of
symbols.

This so will be reworked after next patch.

Signed-off-by: Benoît Canet <[email protected]>
---
 Makefile                |  8 +++++++-
 libc/vdso.c             | 18 ++++++++++++++++++
 usr.manifest.skel       |  1 +
 usr_nozfs.manifest.skel |  1 +
 4 files changed, 27 insertions(+), 1 deletion(-)
 create mode 100644 libc/vdso.c

diff --git a/Makefile b/Makefile
index e294a03..1e33533 100644
--- a/Makefile
+++ b/Makefile
@@ -1832,10 +1832,16 @@ $(out)/bsd/%.o: COMMON += -DSMP 
-D'__FBSDID(__str__)=extern int __bogus__'
 environ_sources = $(addprefix libc/, $(environ_libc))
 environ_sources += $(addprefix musl/src/, $(environ_musl))
 
+vdso_sources = libc/vdso.c
+
 $(out)/libenviron.so: $(environ_sources)
        $(makedir)
         $(call quiet, $(CC) $(CFLAGS) -shared -o $(out)/libenviron.so 
$(environ_sources), CC libenviron.so)
 
+$(out)/libvdso.so: $(vdso_sources)
+       $(makedir)
+        $(call quiet, $(CC) $(CFLAGS) -shared -o $(out)/libvdso.so 
$(vdso_sources), CC libvdso.so)
+
 bootfs_manifest ?= bootfs.manifest.skel
 
 # If parameter "bootfs_manifest" has been changed since the last make,
@@ -1848,7 +1854,7 @@ $(bootfs_manifest_dep): phony
        fi
 
 $(out)/bootfs.bin: scripts/mkbootfs.py $(bootfs_manifest) 
$(bootfs_manifest_dep) $(tools:%=$(out)/%) \
-               $(out)/zpool.so $(out)/zfs.so $(out)/libenviron.so
+               $(out)/zpool.so $(out)/zfs.so $(out)/libenviron.so 
$(out)/libvdso.so
        $(call quiet, olddir=`pwd`; cd $(out); $$olddir/scripts/mkbootfs.py -o 
bootfs.bin -d bootfs.bin.d -m $$olddir/$(bootfs_manifest) \
                -D jdkbase=$(jdkbase) -D gccbase=$(gccbase) -D \
                glibcbase=$(glibcbase) -D miscbase=$(miscbase), MKBOOTFS $@)
diff --git a/libc/vdso.c b/libc/vdso.c
new file mode 100644
index 0000000..eb0bf49
--- /dev/null
+++ b/libc/vdso.c
@@ -0,0 +1,18 @@
+#include <time.h>
+#include <sys/time.h>
+
+time_t __vdso_time(time_t *tloc)
+{
+    return time(tloc);
+}
+
+int __vdso_gettimeofday(struct timeval *tv, struct timezone *tz)
+{
+    return gettimeofday(tv, tz);
+}
+
+int __vdso_clock_gettime(clockid_t clk_id, struct timespec *tp)
+{
+    return clock_gettime(clk_id, tp);
+}
+
diff --git a/usr.manifest.skel b/usr.manifest.skel
index 583bdfe..159b73d 100644
--- a/usr.manifest.skel
+++ b/usr.manifest.skel
@@ -1,5 +1,6 @@
 [manifest]
 /libenviron.so: libenviron.so
+/libvdso.so: libvdso.so
 /zpool.so: zpool.so
 /libzfs.so: libzfs.so
 /libuutil.so: libuutil.so
diff --git a/usr_nozfs.manifest.skel b/usr_nozfs.manifest.skel
index a7d4731..ce051af 100644
--- a/usr_nozfs.manifest.skel
+++ b/usr_nozfs.manifest.skel
@@ -1,5 +1,6 @@
 [manifest]
 /libenviron.so: libenviron.so
+/libvdso.so: libvdso.so
 /tools/mount-nfs.so: tools/mount/mount-nfs.so
 /tools/umount.so: tools/mount/umount.so
 /usr/lib/libgcc_s.so.1: %(gccbase)s/lib64/libgcc_s.so.1
-- 
2.7.4

-- 
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