Re: Fast gettimeofday(2) and static linking

2013-01-29 Thread Konstantin Belousov
On Tue, Jan 29, 2013 at 11:16:00PM +0100, Marius Strobl wrote:
> On Mon, Jan 28, 2013 at 05:55:24PM +0200, Konstantin Belousov wrote:
> > Please rebuild the world with the patch and check that gettimeofday(2) still
> > works on your architecture, both for the static and dynamic binaries.
> > I think that just booting multiuser is enough.
> 
> Okay, looks good on sparc64 (tested with a dynamically as well as a
> statically built time(1)).

Thank you very much.


pgpiVhtGb1QVT.pgp
Description: PGP signature


Re: Fast gettimeofday(2) and static linking

2013-01-29 Thread Marius Strobl
On Mon, Jan 28, 2013 at 05:55:24PM +0200, Konstantin Belousov wrote:
> On Mon, Jan 28, 2013 at 04:45:17PM +0100, Marius Strobl wrote:
> > On Fri, Jan 25, 2013 at 02:35:54PM +0200, Konstantin Belousov wrote:
> > > Bruce Evans reported that statically linked binaries on HEAD an stable/9
> > > use the syscall for gettimeofday(2) and clock_gettime(2). Apparently, this
> > > is due to my use of the weak reference to the __vdso* symbols in the
> > > libc implementations.
> > > 
> > > Patch below reworks the __vdso* attributes to only make the symbols
> > > weak, but keep the references strong. Since I have to add a stub for
> > > each architecture, I would like to ask non-x86 machines owners to test
> > > the patch.
> > > 
> > 
> > Hi Konstantin,
> > 
> > what's the appropriate way to test this?
> 
> Please rebuild the world with the patch and check that gettimeofday(2) still
> works on your architecture, both for the static and dynamic binaries.
> I think that just booting multiuser is enough.

Okay, looks good on sparc64 (tested with a dynamically as well as a
statically built time(1)).

Marius

___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"


Re: Fast gettimeofday(2) and static linking

2013-01-28 Thread Konstantin Belousov
On Mon, Jan 28, 2013 at 04:45:17PM +0100, Marius Strobl wrote:
> On Fri, Jan 25, 2013 at 02:35:54PM +0200, Konstantin Belousov wrote:
> > Bruce Evans reported that statically linked binaries on HEAD an stable/9
> > use the syscall for gettimeofday(2) and clock_gettime(2). Apparently, this
> > is due to my use of the weak reference to the __vdso* symbols in the
> > libc implementations.
> > 
> > Patch below reworks the __vdso* attributes to only make the symbols
> > weak, but keep the references strong. Since I have to add a stub for
> > each architecture, I would like to ask non-x86 machines owners to test
> > the patch.
> > 
> 
> Hi Konstantin,
> 
> what's the appropriate way to test this?

Please rebuild the world with the patch and check that gettimeofday(2) still
works on your architecture, both for the static and dynamic binaries.
I think that just booting multiuser is enough.


pgp8FAd4XY1qW.pgp
Description: PGP signature


Re: Fast gettimeofday(2) and static linking

2013-01-28 Thread Marius Strobl
On Fri, Jan 25, 2013 at 02:35:54PM +0200, Konstantin Belousov wrote:
> Bruce Evans reported that statically linked binaries on HEAD an stable/9
> use the syscall for gettimeofday(2) and clock_gettime(2). Apparently, this
> is due to my use of the weak reference to the __vdso* symbols in the
> libc implementations.
> 
> Patch below reworks the __vdso* attributes to only make the symbols
> weak, but keep the references strong. Since I have to add a stub for
> each architecture, I would like to ask non-x86 machines owners to test
> the patch.
> 

Hi Konstantin,

what's the appropriate way to test this?

Marius

___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"


Fast gettimeofday(2) and static linking

2013-01-25 Thread Konstantin Belousov
Bruce Evans reported that statically linked binaries on HEAD an stable/9
use the syscall for gettimeofday(2) and clock_gettime(2). Apparently, this
is due to my use of the weak reference to the __vdso* symbols in the
libc implementations.

Patch below reworks the __vdso* attributes to only make the symbols
weak, but keep the references strong. Since I have to add a stub for
each architecture, I would like to ask non-x86 machines owners to test
the patch.

Thank you.

diff --git a/lib/libc/amd64/sys/__vdso_gettc.c 
b/lib/libc/amd64/sys/__vdso_gettc.c
index 091fe26..c6f2dfb 100644
--- a/lib/libc/amd64/sys/__vdso_gettc.c
+++ b/lib/libc/amd64/sys/__vdso_gettc.c
@@ -27,9 +27,11 @@
 __FBSDID("$FreeBSD$");
 
 #include 
+#include 
 #include 
 #include 
 #include 
+#include "libc_private.h"
 
 static u_int
 __vdso_gettc_low(const struct vdso_timehands *th)
@@ -41,9 +43,18 @@ __vdso_gettc_low(const struct vdso_timehands *th)
return (rv);
 }
 
+#pragma weak __vdso_gettc
 u_int
 __vdso_gettc(const struct vdso_timehands *th)
 {
 
return (th->th_x86_shift > 0 ? __vdso_gettc_low(th) : rdtsc32());
 }
+
+#pragma weak __vdso_gettimekeep
+int
+__vdso_gettimekeep(struct vdso_timekeep **tk)
+{
+
+   return (_elf_aux_info(AT_TIMEKEEP, tk, sizeof(*tk)));
+}
diff --git a/lib/libc/arm/sys/Makefile.inc b/lib/libc/arm/sys/Makefile.inc
index 1a58eae..fd251c8 100644
--- a/lib/libc/arm/sys/Makefile.inc
+++ b/lib/libc/arm/sys/Makefile.inc
@@ -1,5 +1,7 @@
 # $FreeBSD$
 
+SRCS+= __vdso_gettc.c
+
 MDASM= Ovfork.S brk.S cerror.S pipe.S ptrace.S sbrk.S shmat.S sigreturn.S 
syscall.S
 
 # Don't generate default code for these syscalls:
diff --git a/lib/libc/arm/sys/__vdso_gettc.c b/lib/libc/arm/sys/__vdso_gettc.c
new file mode 100644
index 000..b99bbc4
--- /dev/null
+++ b/lib/libc/arm/sys/__vdso_gettc.c
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2013 Konstantin Belousov 
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in the
+ *documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+
+#pragma weak __vdso_gettc
+u_int
+__vdso_gettc(const struct vdso_timehands *th)
+{
+
+   return (0);
+}
+
+#pragma weak __vdso_gettimekeep
+int
+__vdso_gettimekeep(struct vdso_timekeep **tk)
+{
+
+   return (ENOSYS);
+}
diff --git a/lib/libc/i386/sys/__vdso_gettc.c b/lib/libc/i386/sys/__vdso_gettc.c
index 4419141..c6f2dfb 100644
--- a/lib/libc/i386/sys/__vdso_gettc.c
+++ b/lib/libc/i386/sys/__vdso_gettc.c
@@ -27,9 +27,11 @@
 __FBSDID("$FreeBSD$");
 
 #include 
+#include 
 #include 
 #include 
 #include 
+#include "libc_private.h"
 
 static u_int
 __vdso_gettc_low(const struct vdso_timehands *th)
@@ -48,3 +50,11 @@ __vdso_gettc(const struct vdso_timehands *th)
 
return (th->th_x86_shift > 0 ? __vdso_gettc_low(th) : rdtsc32());
 }
+
+#pragma weak __vdso_gettimekeep
+int
+__vdso_gettimekeep(struct vdso_timekeep **tk)
+{
+
+   return (_elf_aux_info(AT_TIMEKEEP, tk, sizeof(*tk)));
+}
diff --git a/lib/libc/ia64/sys/Makefile.inc b/lib/libc/ia64/sys/Makefile.inc
index 3876d3a..2846590 100644
--- a/lib/libc/ia64/sys/Makefile.inc
+++ b/lib/libc/ia64/sys/Makefile.inc
@@ -1,5 +1,7 @@
 # $FreeBSD$
 
+SRCS+= __vdso_gettc.c
+
 MDASM+=Ovfork.S brk.S cerror.S exect.S fork.S getcontext.S pipe.S 
ptrace.S \
sbrk.S setlogin.S sigreturn.S swapcontext.S
 
diff --git a/lib/libc/ia64/sys/__vdso_gettc.c b/lib/libc/ia64/sys/__vdso_gettc.c
new file mode 100644
index 000..b99bbc4
--- /dev/null
+++ b/lib/libc/ia64/sys/__vdso_gettc.c
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2013 Konstantin Belousov 
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributi