[Midnightbsd-cvs] src [8778] trunk: rework the vdso symbols to make them weak.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun Sep 25 23:02:19 EDT 2016
Revision: 8778
http://svnweb.midnightbsd.org/src/?rev=8778
Author: laffer1
Date: 2016-09-25 23:02:19 -0400 (Sun, 25 Sep 2016)
Log Message:
-----------
rework the vdso symbols to make them weak. this lets static binaries use fast gettimeofday
Modified Paths:
--------------
trunk/lib/libc/amd64/sys/__vdso_gettc.c
trunk/lib/libc/i386/sys/__vdso_gettc.c
trunk/lib/libc/sys/__vdso_gettimeofday.c
trunk/lib/libc/sys/gettimeofday.c
trunk/sys/sys/vdso.h
Modified: trunk/lib/libc/amd64/sys/__vdso_gettc.c
===================================================================
--- trunk/lib/libc/amd64/sys/__vdso_gettc.c 2016-09-26 03:00:58 UTC (rev 8777)
+++ trunk/lib/libc/amd64/sys/__vdso_gettc.c 2016-09-26 03:02:19 UTC (rev 8778)
@@ -27,9 +27,11 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
+#include <sys/elf.h>
#include <sys/time.h>
#include <sys/vdso.h>
#include <machine/cpufunc.h>
+#include "libc_private.h"
static u_int
__vdso_gettc_low(const struct vdso_timehands *th)
@@ -41,6 +43,7 @@
return (rv);
}
+#pragma weak __vdso_gettc
u_int
__vdso_gettc(const struct vdso_timehands *th)
{
@@ -47,3 +50,11 @@
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)));
+}
Modified: trunk/lib/libc/i386/sys/__vdso_gettc.c
===================================================================
--- trunk/lib/libc/i386/sys/__vdso_gettc.c 2016-09-26 03:00:58 UTC (rev 8777)
+++ trunk/lib/libc/i386/sys/__vdso_gettc.c 2016-09-26 03:02:19 UTC (rev 8778)
@@ -27,9 +27,11 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
+#include <sys/elf.h>
#include <sys/time.h>
#include <sys/vdso.h>
#include <machine/cpufunc.h>
+#include "libc_private.h"
static u_int
__vdso_gettc_low(const struct vdso_timehands *th)
@@ -48,3 +50,11 @@
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)));
+}
Modified: trunk/lib/libc/sys/__vdso_gettimeofday.c
===================================================================
--- trunk/lib/libc/sys/__vdso_gettimeofday.c 2016-09-26 03:00:58 UTC (rev 8777)
+++ trunk/lib/libc/sys/__vdso_gettimeofday.c 2016-09-26 03:02:19 UTC (rev 8778)
@@ -79,6 +79,7 @@
static struct vdso_timekeep *tk;
+#pragma weak __vdso_gettimeofday
int
__vdso_gettimeofday(struct timeval *tv, struct timezone *tz)
{
@@ -88,7 +89,7 @@
if (tz != NULL)
return (ENOSYS);
if (tk == NULL) {
- error = _elf_aux_info(AT_TIMEKEEP, &tk, sizeof(tk));
+ error = __vdso_gettimekeep(&tk);
if (error != 0 || tk == NULL)
return (ENOSYS);
}
@@ -101,6 +102,7 @@
return (0);
}
+#pragma weak __vdso_clock_gettime
int
__vdso_clock_gettime(clockid_t clock_id, struct timespec *ts)
{
Modified: trunk/lib/libc/sys/gettimeofday.c
===================================================================
--- trunk/lib/libc/sys/gettimeofday.c 2016-09-26 03:00:58 UTC (rev 8777)
+++ trunk/lib/libc/sys/gettimeofday.c 2016-09-26 03:02:19 UTC (rev 8778)
@@ -41,10 +41,7 @@
{
int error;
- if (__vdso_gettimeofday != NULL && __vdso_gettc != NULL)
- error = __vdso_gettimeofday(tv, tz);
- else
- error = ENOSYS;
+ error = __vdso_gettimeofday(tv, tz);
if (error == ENOSYS)
error = __sys_gettimeofday(tv, tz);
return (error);
Modified: trunk/sys/sys/vdso.h
===================================================================
--- trunk/sys/sys/vdso.h 2016-09-26 03:00:58 UTC (rev 8777)
+++ trunk/sys/sys/vdso.h 2016-09-26 03:02:19 UTC (rev 8778)
@@ -61,13 +61,9 @@
struct timezone;
int __vdso_clock_gettime(clockid_t clock_id, struct timespec *ts);
-#pragma weak __vdso_clock_gettime
-
int __vdso_gettimeofday(struct timeval *tv, struct timezone *tz);
-#pragma weak __vdso_gettimeofday
-
u_int __vdso_gettc(const struct vdso_timehands *vdso_th);
-#pragma weak __vdso_gettc
+int __vdso_gettimekeep(struct vdso_timekeep **tk);
#endif
More information about the Midnightbsd-cvs
mailing list