This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.26.9000-912-g478593e
- From: stli at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 4 Dec 2017 15:42:00 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.26.9000-912-g478593e
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 478593e6374f3818da39332260dc453cb19cfa1e (commit)
from 7863a7118112fe502e8020a0db0fa74fef281f29 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=478593e6374f3818da39332260dc453cb19cfa1e
commit 478593e6374f3818da39332260dc453cb19cfa1e
Author: Stefan Liebler <stli@linux.vnet.ibm.com>
Date: Mon Dec 4 16:40:13 2017 +0100
S390: Fix backtrace in vdso functions.
On s390, GDB fails to show the complete backtrace from within vdso functions.
The macro INTERNAL_VSYSCALL_CALL saves the return address in r14 to r10
before branching to the vdso function. The branch-instruction updates r14
in order to let the vdso function return. Then the original address in r14 is
restored from r10. Unfortunately, there are no cfi-rules and GDB fails.
Furthermore the call of the vdso function does not comply with the s390 ABI
as no stack-frame for the vdso-function is generated.
This patch removes the s390 specific macro INTERNAL_VSYSCALL_CALL
and the common implementation in sysdeps/unix/sysv/linux/sysdep-vdso.h is used.
Then the vdso function is called via function-pointer and GCC generates a
new stack-frame and emits all needed cfi-rules.
The defines CLOBBER_[0-6] are removed as they were only used in macro
INTERNAL_VSYSCALL_CALL.
The macro INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK is not used on s390.
The only user is power. Thus it is removed from s390 sysdep.h.
ChangeLog:
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
(INTERNAL_VSYSCALL_CALL, CLOBBER_0, CLOBBER_1, CLOBBER_2,
CLOBBER_3, CLOBBER_4, CLOBBER_5, CLOBBER_6,
INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK): Remove.
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
diff --git a/ChangeLog b/ChangeLog
index 5983c12..a847985 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-12-04 Stefan Liebler <stli@linux.vnet.ibm.com>
+
+ * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
+ (INTERNAL_VSYSCALL_CALL, CLOBBER_0, CLOBBER_1, CLOBBER_2,
+ CLOBBER_3, CLOBBER_4, CLOBBER_5, CLOBBER_6,
+ INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK): Remove.
+ * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
+
2017-12-04 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
[BZ #5997]
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
index e56fc32..644b83c 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
@@ -271,48 +271,12 @@
#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6)
#define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7)
-#define CLOBBER_0 , "3", "4", "5"
-#define CLOBBER_1 , "3", "4", "5"
-#define CLOBBER_2 , "4", "5"
-#define CLOBBER_3 , "5"
-#define CLOBBER_4
-#define CLOBBER_5
-#define CLOBBER_6
-
/* List of system calls which are supported as vsyscalls. */
#define HAVE_CLOCK_GETRES_VSYSCALL 1
#define HAVE_CLOCK_GETTIME_VSYSCALL 1
#define HAVE_GETTIMEOFDAY_VSYSCALL 1
#define HAVE_GETCPU_VSYSCALL 1
-/* This version is for internal uses when there is no desire
- to set errno */
-#define INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK(name, err, nr, args...) \
- ({ \
- long int _ret = ENOSYS; \
- \
- __typeof (__vdso_##name) vdsop = __vdso_##name; \
- PTR_DEMANGLE (vdsop); \
- if (vdsop != NULL) \
- _ret = INTERNAL_VSYSCALL_CALL (vdsop, err, nr, ##args); \
- else \
- err = 1 << 28; \
- _ret; \
- })
-
-#define INTERNAL_VSYSCALL_CALL(fn, err, nr, args...) \
- ({ \
- DECLARGS_##nr(args) \
- register long _ret __asm__("2"); \
- __asm__ __volatile__ ( \
- "lr 10,14\n\t" \
- "basr 14,%1\n\t" \
- "lr 14,10\n\t" \
- : "=d" (_ret) \
- : "d" (fn) ASMFMT_##nr \
- : "cc", "memory", "0", "1", "10" CLOBBER_##nr); \
- _ret; })
-
/* Pointer mangling support. */
#if IS_IN (rtld)
/* We cannot use the thread descriptor because in ld.so we use setjmp
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
index 622991d..18ed339 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
@@ -277,14 +277,6 @@
#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6)
#define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7)
-#define CLOBBER_0 , "3", "4", "5"
-#define CLOBBER_1 , "3", "4", "5"
-#define CLOBBER_2 , "4", "5"
-#define CLOBBER_3 , "5"
-#define CLOBBER_4
-#define CLOBBER_5
-#define CLOBBER_6
-
/* List of system calls which are supported as vsyscalls. */
#define HAVE_CLOCK_GETRES_VSYSCALL 1
#define HAVE_CLOCK_GETTIME_VSYSCALL 1
@@ -293,34 +285,6 @@
#define SINGLE_THREAD_BY_GLOBAL 1
-/* This version is for internal uses when there is no desire
- to set errno */
-#define INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK(name, err, nr, args...) \
- ({ \
- long int _ret = ENOSYS; \
- \
- __typeof (__vdso_##name) vdsop = __vdso_##name; \
- PTR_DEMANGLE (vdsop); \
- if (vdsop != NULL) \
- _ret = INTERNAL_VSYSCALL_CALL (vdsop, err, nr, ##args); \
- else \
- err = 1 << 28; \
- _ret; \
- })
-
-#define INTERNAL_VSYSCALL_CALL(fn, err, nr, args...) \
- ({ \
- DECLARGS_##nr(args) \
- register long _ret __asm__("2"); \
- __asm__ __volatile__ ( \
- "lgr 10,14\n\t" \
- "basr 14,%1\n\t" \
- "lgr 14,10\n\t" \
- : "=d" (_ret) \
- : "a" (fn) ASMFMT_##nr \
- : "cc", "memory", "0", "1", "10" CLOBBER_##nr); \
- _ret; })
-
/* Pointer mangling support. */
#if IS_IN (rtld)
/* We cannot use the thread descriptor because in ld.so we use setjmp
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 8 +++++
sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h | 36 -------------------------
sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h | 36 -------------------------
3 files changed, 8 insertions(+), 72 deletions(-)
hooks/post-receive
--
GNU C Library master sources