I think the kernel elf is a address 0

On Thu, Oct 27, 2016 at 4:20 PM, Nadav Har'El <[email protected]> wrote:

>
> On Thu, Oct 27, 2016 at 3:06 PM, Benoît Canet <benoit.canet.contrib@gmail.
> com> wrote:
>
>> 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 via auxv in order for go to resolve this
>> kinds of symbols.
>>
>> We cannot pass the kernel library as vdso because it's
>> located at address 0 and Go runtime will guard against
>> this.
>>
>
> I still don't understand that last comment - what is located at address 0?
> I believe that in the same way we represent any shared object, we also
> have a representation (program::_core points to it), so I don't yet
> understand why it's not possible to do it that way. Maybe there are other
> problems preventing this from working, but I didn't understand the "address
> 0" issue.
>
>
>>
>> Signed-off-by: Benoît Canet <[email protected]>
>> ---
>>  Makefile                |  7 ++++++-
>>  bootfs.manifest.skel    |  1 +
>>  libc/vdso/vdso.c        | 18 ++++++++++++++++++
>>  libc/vdso/vdso.version  |  3 +++
>>  usr.manifest.skel       |  1 +
>>  usr_nozfs.manifest.skel |  1 +
>>  6 files changed, 30 insertions(+), 1 deletion(-)
>>  create mode 100644 libc/vdso/vdso.c
>>  create mode 100644 libc/vdso/vdso.version
>>
>> diff --git a/Makefile b/Makefile
>> index e294a03..5327708 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -1836,6 +1836,11 @@ $(out)/libenviron.so: $(environ_sources)
>>         $(makedir)
>>          $(call quiet, $(CC) $(CFLAGS) -shared -o $(out)/libenviron.so
>> $(environ_sources), CC libenviron.so)
>>
>> +$(out)/libvdso.so: libc/vdso/vdso.c libc/vdso/vdso.ld
>>
>
> If I understand correctly (?), you don't have vdso.ld any more, so it
> shouldn't be on the dependency list. Maybe you meant vdso.version?
> I wonder how this didn't fail to build because vdso.ld is missing?
>
>
>> +       $(makedir)
>> +       $(call quiet, $(CC) -c -fPIC -o $(out)/libvdso.o
>> libc/vdso/vdso.c, CC libvdso.o)
>> +       $(call quiet, $(LD) -shared -fPIC -o $(out)/libvdso.so
>> $(out)/libvdso.o --version-script=libc/vdso/vdso.version, LINK
>> libvdso.so)
>> +
>>  bootfs_manifest ?= bootfs.manifest.skel
>>
>>  # If parameter "bootfs_manifest" has been changed since the last make,
>> @@ -1848,7 +1853,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/bootfs.manifest.skel b/bootfs.manifest.skel
>> index 9816e92..41d48b4 100644
>> --- a/bootfs.manifest.skel
>> +++ b/bootfs.manifest.skel
>> @@ -1,4 +1,5 @@
>>  [manifest]
>> +/libvdso.so: libvdso.so
>>  /libuutil.so: libuutil.so
>>  /zpool.so: zpool.so
>>  /libzfs.so: libzfs.so
>> diff --git a/libc/vdso/vdso.c b/libc/vdso/vdso.c
>> new file mode 100644
>> index 0000000..9212321
>> --- /dev/null
>> +++ b/libc/vdso/vdso.c
>> @@ -0,0 +1,18 @@
>> +//#include "libc.h"
>> +#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/libc/vdso/vdso.version b/libc/vdso/vdso.version
>> new file mode 100644
>> index 0000000..a98ad1a
>> --- /dev/null
>> +++ b/libc/vdso/vdso.version
>> @@ -0,0 +1,3 @@
>> +LINUX_2.6 {
>> +global: *;
>> +};
>> 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.
>>
>
>

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