diff --git a/glibc-riscv-85bd1ddbdfdfd13cfd06f7c367519b6ed3360843.patch b/glibc-riscv-85bd1ddbdfdfd13cfd06f7c367519b6ed3360843.patch new file mode 100644 index 0000000..01be07d --- /dev/null +++ b/glibc-riscv-85bd1ddbdfdfd13cfd06f7c367519b6ed3360843.patch @@ -0,0 +1,106 @@ +diff --git a/elf/Makefile b/elf/Makefile +index 7315c253..b3205c26 100644 +--- a/elf/Makefile ++++ b/elf/Makefile +@@ -1507,4 +1507,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 4089e7e9..0c345dc3 100644 +--- a/elf/tst-unwind-main.c ++++ b/elf/tst-unwind-main.c +@@ -20,19 +20,41 @@ + #include + #include + ++#if USE_PTHREADS ++# include ++# include ++#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 0e316edf..8719f4ef 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 00000000..d5c38e37 +--- /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 c079c1fb..0ff9ab3f 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. */ diff --git a/glibc.spec b/glibc.spec index 53e2d1b..73ba353 100644 --- a/glibc.spec +++ b/glibc.spec @@ -87,7 +87,7 @@ Summary: The GNU libc libraries Name: glibc Version: %{glibcversion} -Release: 7%{?dist} +Release: 7.0.riscv64%{?dist} # In general, GPLv2+ is used by programs, LGPLv2+ is used for # libraries. @@ -160,6 +160,9 @@ Patch28: glibc-rh1615608.patch Patch29: glibc-rh1670028.patch Patch99: glibc-rh1674280.patch +# Backport https://sourceware.org/git/?p=glibc.git;a=commit;h=85bd1ddbdfdfd13cfd06f7c367519b6ed3360843 +Patch120: glibc-riscv-85bd1ddbdfdfd13cfd06f7c367519b6ed3360843.patch + ############################################################################## # Continued list of core "glibc" package information: ##############################################################################