This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.29.9000-60-g85bd1dd


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  85bd1ddbdfdfd13cfd06f7c367519b6ed3360843 (commit)
      from  107562682c8f6a5736a0a8257428c15a3c68a165 (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=85bd1ddbdfdfd13cfd06f7c367519b6ed3360843

commit 85bd1ddbdfdfd13cfd06f7c367519b6ed3360843
Author: Jim Wilson <jimw@sifive.com>
Date:   Sun Jan 13 15:48:09 2019 -0800

    RISC-V: Fix elfutils testsuite unwind failures.
    
    The clone.S patch fixes 2 elfutils testsuite unwind failures, where the
    backtrace gets stuck repeating __thread_start until we hit the backtrace
    limit.  This was confirmed by building and installing a patched glibc and
    then building elfutils and running its testsuite.
    
    Unfortunately, the testcase isn't working as expected and I don't know why.
    The testcase passes even when my clone.S patch is not installed.  The testcase
    looks logically similarly to the elfutils testcases that are failing.  Maybe
    there is a subtle difference in how the glibc unwinding works versus the
    elfutils unwinding?  I don't have good gdb pthread support yet, so I haven't
    found a way to debug this.  Anyways, I don't know if the testcase is useful or
    not.  If the testcase isn't useful then maybe the clone.S patch is OK without
    a testcase?
    
    Jim
    
    	[BZ #24040]
    	* elf/Makefile (CFLAGS-tst-unwind-main.c): Add -DUSE_PTHREADS=0.
    	* elf/tst-unwind-main.c: If USE_PTHEADS, include pthread.h and error.h
    	(func): New.
    	(main): If USE_PTHREADS, call pthread_create to run func.  Otherwise
    	call func directly.
    	* nptl/Makefile (tests): Add tst-unwind-thread.
    	(CFLAGS-tst-unwind-thread.c): Define.
    	* nptl/tst-unwind-thread.c: New file.
    	* sysdeps/unix/sysv/linux/riscv/clone.S (__thread_start): Mark ra
    	as undefined.

diff --git a/ChangeLog b/ChangeLog
index 74e6401..20eb89d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2019-01-13  Jim Wilson  <jimw@sifive.com>
+
+	[BZ #24040]
+	* elf/Makefile (CFLAGS-tst-unwind-main.c): Add -DUSE_PTHREADS=0.
+	* elf/tst-unwind-main.c: If USE_PTHEADS, include pthread.h and error.h
+	(func): New.
+	(main): If USE_PTHREADS, call pthread_create to run func.  Otherwise
+	call func directly.
+	* nptl/Makefile (tests): Add tst-unwind-thread.
+	(CFLAGS-tst-unwind-thread.c): Define.
+	* nptl/tst-unwind-thread.c: New file.
+	* sysdeps/unix/sysv/linux/riscv/clone.S (__thread_start): Mark ra
+	as undefined.
+
 2019-02-13  Joseph Myers  <joseph@codesourcery.com>
 
 	* iconvdata/cns11643.h (ucs4_to_cns11643): Adjust fall-through
diff --git a/elf/Makefile b/elf/Makefile
index 5c625b8..faec577 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -1512,4 +1512,4 @@ $(objpfx)tst-big-note: $(objpfx)tst-big-note-lib.so
 
 $(objpfx)tst-unwind-ctor: $(objpfx)tst-unwind-ctor-lib.so
 
-CFLAGS-tst-unwind-main.c += -funwind-tables
+CFLAGS-tst-unwind-main.c += -funwind-tables -DUSE_PTHREADS=0
diff --git a/elf/tst-unwind-main.c b/elf/tst-unwind-main.c
index 4089e7e..0c345dc 100644
--- a/elf/tst-unwind-main.c
+++ b/elf/tst-unwind-main.c
@@ -20,19 +20,41 @@
 #include <unistd.h>
 #include <support/test-driver.h>
 
+#if USE_PTHREADS
+# include <pthread.h>
+# include <error.h>
+#endif
+
 static _Unwind_Reason_Code
 callback (struct _Unwind_Context *ctx, void *arg)
 {
   return _URC_NO_REASON;
 }
 
-int
-main (void)
+static void *
+func (void *a)
 {
   /* Arrange for this test to be killed if _Unwind_Backtrace runs into an
      endless loop.  We cannot use the test driver because the complete
      call chain needs to be compiled with -funwind-tables so that
-     _Unwind_Backtrace is able to reach _start.  */
+     _Unwind_Backtrace is able to reach the start routine.  */
   alarm (DEFAULT_TIMEOUT);
   _Unwind_Backtrace (callback, 0);
+  return a;
+}
+
+int
+main (void)
+{
+#if USE_PTHREADS
+  pthread_t thr;
+  int rc = pthread_create (&thr, NULL, &func, NULL);
+  if (rc)
+    error (1, rc, "pthread_create");
+  rc = pthread_join (thr, NULL);
+  if (rc)
+    error (1, rc, "pthread_join");
+#else
+  func (NULL);
+#endif
 }
diff --git a/nptl/Makefile b/nptl/Makefile
index 0e316ed..8719f4e 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -320,7 +320,8 @@ tests = tst-attr1 tst-attr2 tst-attr3 tst-default-attr \
 	tst-cnd-timedwait tst-thrd-detach tst-mtx-basic tst-thrd-sleep \
 	tst-mtx-recursive tst-tss-basic tst-call-once tst-mtx-timedlock \
 	tst-rwlock-pwn \
-	tst-rwlock-tryrdlock-stall tst-rwlock-trywrlock-stall
+	tst-rwlock-tryrdlock-stall tst-rwlock-trywrlock-stall \
+	tst-unwind-thread
 
 tests-internal := tst-rwlock19 tst-rwlock20 \
 		  tst-sem11 tst-sem12 tst-sem13 \
@@ -710,6 +711,8 @@ $(objpfx)tst-audit-threads: $(objpfx)tst-audit-threads-mod2.so
 $(objpfx)tst-audit-threads.out: $(objpfx)tst-audit-threads-mod1.so
 tst-audit-threads-ENV = LD_AUDIT=$(objpfx)tst-audit-threads-mod1.so
 
+CFLAGS-tst-unwind-thread.c += -funwind-tables
+
 # The tests here better do not run in parallel
 ifneq ($(filter %tests,$(MAKECMDGOALS)),)
 .NOTPARALLEL:
diff --git a/nptl/tst-unwind-thread.c b/nptl/tst-unwind-thread.c
new file mode 100644
index 0000000..d5c38e3
--- /dev/null
+++ b/nptl/tst-unwind-thread.c
@@ -0,0 +1,2 @@
+#define USE_PTHREADS 1
+#include "../elf/tst-unwind-main.c"
diff --git a/sysdeps/unix/sysv/linux/riscv/clone.S b/sysdeps/unix/sysv/linux/riscv/clone.S
index c079c1f..0ff9ab3 100644
--- a/sysdeps/unix/sysv/linux/riscv/clone.S
+++ b/sysdeps/unix/sysv/linux/riscv/clone.S
@@ -69,6 +69,11 @@ L (error):
 
 ENTRY (__thread_start)
 L (thread_start):
+	/* Terminate call stack by noting ra is undefined.  Use a dummy
+	   .cfi_label to force starting the FDE.  */
+	.cfi_label .Ldummy
+	cfi_undefined (ra)
+
 	/* Restore the arg for user's function.  */
 	REG_L		a1,0(sp)	/* Function pointer.  */
 	REG_L		a0,SZREG(sp)	/* Argument pointer.  */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                             |   14 ++++++++++++++
 elf/Makefile                          |    2 +-
 elf/tst-unwind-main.c                 |   28 +++++++++++++++++++++++++---
 nptl/Makefile                         |    5 ++++-
 nptl/tst-unwind-thread.c              |    2 ++
 sysdeps/unix/sysv/linux/riscv/clone.S |    5 +++++
 6 files changed, 51 insertions(+), 5 deletions(-)
 create mode 100644 nptl/tst-unwind-thread.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]