summaryrefslogtreecommitdiffstats
path: root/toolchain/musl/patches/030-mips-add-vdso-support.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2016-01-30 20:15:11 +0000
committerFelix Fietkau <nbd@openwrt.org>2016-01-30 20:15:11 +0000
commited95e47f072caaeffdc48a78718cfc08fe89f690 (patch)
treeaae48b7885b6b76d105627d533ef4dec7b769705 /toolchain/musl/patches/030-mips-add-vdso-support.patch
parentb046040bd6f323b214dbeee9767db7644cf3a6bd (diff)
downloadopenwrt-ed95e47f072caaeffdc48a78718cfc08fe89f690.tar.gz
openwrt-ed95e47f072caaeffdc48a78718cfc08fe89f690.tar.bz2
openwrt-ed95e47f072caaeffdc48a78718cfc08fe89f690.zip
musl: update to the latest git version, fixes TLS issues
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48574
Diffstat (limited to 'toolchain/musl/patches/030-mips-add-vdso-support.patch')
-rw-r--r--toolchain/musl/patches/030-mips-add-vdso-support.patch80
1 files changed, 0 insertions, 80 deletions
diff --git a/toolchain/musl/patches/030-mips-add-vdso-support.patch b/toolchain/musl/patches/030-mips-add-vdso-support.patch
deleted file mode 100644
index 537a1ca0b4..0000000000
--- a/toolchain/musl/patches/030-mips-add-vdso-support.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 93332ebdcd54b0e0c0e86bced537cc96247bc1f1 Mon Sep 17 00:00:00 2001
-From: Hauke Mehrtens <hauke@hauke-m.de>
-Date: Sat, 23 Jan 2016 16:23:09 +0100
-Subject: [PATCH 2/2] mips: add vdso support
-
-vdso support is available on mips starting with kernel 4.4, see kernel
-commit a7f4df4e21 "MIPS: VDSO: Add implementations of gettimeofday()
-and clock_gettime()" for details.
-
-In Linux kernel 4.4.0 the mips code returns -ENOSYS in case it can not
-handle the vdso call and assumes the libc will call the original
-syscall in this case. Handle this case in musl. Currently Linux kernel
-4.4.0 handles the following types: CLOCK_REALTIME_COARSE,
-CLOCK_MONOTONIC_COARSE, CLOCK_REALTIME and CLOCK_MONOTONIC.
-
-These are some measurements of calling clock_gettime(CLOCK_MONOTONIC,
-&tp); 1.000.000 times.
-
-without vdso:
-root@OpenWrt:/# time ./vdso-test
-real 0m 0.95s
-user 0m 0.24s
-sys 0m 0.70s
-
-with vdso:
-root@OpenWrt:/# time /usr/bin/vdso-test
-real 0m 0.35s
-user 0m 0.34s
-sys 0m 0.00s
-
-Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
----
- arch/mips/syscall_arch.h | 4 ++++
- src/time/clock_gettime.c | 12 +++++++++++-
- 2 files changed, 15 insertions(+), 1 deletion(-)
-
-diff --git a/arch/mips/syscall_arch.h b/arch/mips/syscall_arch.h
-index e74e0ad..39c0ea3 100644
---- a/arch/mips/syscall_arch.h
-+++ b/arch/mips/syscall_arch.h
-@@ -161,3 +161,7 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
- if (n == SYS_fstatat) __stat_fix(c);
- return r2;
- }
-+
-+#define VDSO_USEFUL
-+#define VDSO_CGT_SYM "__vdso_clock_gettime"
-+#define VDSO_CGT_VER "LINUX_2.6"
-diff --git a/src/time/clock_gettime.c b/src/time/clock_gettime.c
-index 1572de0..dba99ff 100644
---- a/src/time/clock_gettime.c
-+++ b/src/time/clock_gettime.c
-@@ -26,13 +26,23 @@ void *__vdsosym(const char *, const char *);
- int __clock_gettime(clockid_t clk, struct timespec *ts)
- {
- #ifdef VDSO_CGT_SYM
-+ int ret;
- static int (*volatile cgt)(clockid_t, struct timespec *);
- if (!cgt) {
- void *f = __vdsosym(VDSO_CGT_VER, VDSO_CGT_SYM);
- if (!f) f = (void *)sc_clock_gettime;
- a_cas_p(&cgt, 0, f);
- }
-- return cgt(clk, ts);
-+ ret = cgt(clk, ts);
-+
-+ /*
-+ * mips in linux kernel 4.4.0 returns -ENOSYS if it can not
-+ * handle the syscall in vdso, the original syscall should be
-+ * called by the libc in such a case.
-+ */
-+ if (ret == -ENOSYS)
-+ return sc_clock_gettime(clk, ts);
-+ return ret;
- #else
- return sc_clock_gettime(clk, ts);
- #endif
---
-2.7.0.rc3
-