Compare commits
3 Commits
master
...
master-ris
Author | SHA1 | Date | |
---|---|---|---|
091eeafd9d | |||
4be26d7c24 | |||
ff3d4d76c0 |
47
a6aaabd036d735a1b412f441bf6c706832655598.patch
Normal file
47
a6aaabd036d735a1b412f441bf6c706832655598.patch
Normal file
@ -0,0 +1,47 @@
|
||||
From a6aaabd036d735a1b412f441bf6c706832655598 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Wed, 18 Sep 2019 13:22:24 +0000
|
||||
Subject: [PATCH] Fix RISC-V vfork build with Linux 5.3 kernel headers.
|
||||
|
||||
Building glibc for RISC-V with Linux 5.3 kernel headers fails because
|
||||
<linux/sched.h>, included in vfork.S for CLONE_* constants, contains a
|
||||
structure definition not safe for inclusion in assembly code.
|
||||
|
||||
All other architectures already avoid use of that header in vfork.S,
|
||||
either defining the CLONE_* constants locally or embedding the
|
||||
required values directly in the relevant instruction, where they
|
||||
implement vfork using the clone syscall (see the implementations for
|
||||
aarch64, ia64, mips and nios2). This patch makes the RISC-V version
|
||||
define the constants locally like the other architectures.
|
||||
|
||||
Tested build for all three RISC-V configurations in
|
||||
build-many-glibcs.py with Linux 5.3 headers.
|
||||
|
||||
* sysdeps/unix/sysv/linux/riscv/vfork.S: Do not include
|
||||
<linux/sched.h>.
|
||||
(CLONE_VM): New macro.
|
||||
(CLONE_VFORK): Likewise.
|
||||
|
||||
(cherry picked from commit 8cacbcf4a984ccac24efedb795d9c8a7f149d17b)
|
||||
---
|
||||
sysdeps/unix/sysv/linux/riscv/vfork.S | 5 ++++-
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/riscv/vfork.S b/sysdeps/unix/sysv/linux/riscv/vfork.S
|
||||
index 67373f181b..dc173d6b47 100644
|
||||
--- a/sysdeps/unix/sysv/linux/riscv/vfork.S
|
||||
+++ b/sysdeps/unix/sysv/linux/riscv/vfork.S
|
||||
@@ -21,9 +21,12 @@
|
||||
#include <sys/asm.h>
|
||||
#include <sysdep.h>
|
||||
#define __ASSEMBLY__
|
||||
-#include <linux/sched.h>
|
||||
#include <asm/signal.h>
|
||||
|
||||
+#define CLONE_VM 0x00000100 /* Set if VM shared between processes. */
|
||||
+#define CLONE_VFORK 0x00004000 /* Set if the parent wants the child to
|
||||
+ wake it up on mm_release. */
|
||||
+
|
||||
.text
|
||||
LEAF (__libc_vfork)
|
||||
|
106
glibc-riscv-85bd1ddbdfdfd13cfd06f7c367519b6ed3360843.patch
Normal file
106
glibc-riscv-85bd1ddbdfdfd13cfd06f7c367519b6ed3360843.patch
Normal file
@ -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 <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 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. */
|
@ -87,7 +87,7 @@
|
||||
Summary: The GNU libc libraries
|
||||
Name: glibc
|
||||
Version: %{glibcversion}
|
||||
Release: 1%{?dist}
|
||||
Release: 1.0.riscv64%{?dist}
|
||||
|
||||
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
||||
# libraries.
|
||||
@ -160,6 +160,9 @@ Patch28: glibc-rh1615608.patch
|
||||
# https://www.sourceware.org/ml/libc-alpha/2019-03/msg00436.html
|
||||
Patch31: glibc-fedora-nscd-warnings.patch
|
||||
|
||||
# Fix compilation error on RISC-V with 5.3 kernel
|
||||
# https://github.com/bminor/glibc/commit/a6aaabd036d735a1b412f441bf6c706832655598
|
||||
Patch100: a6aaabd036d735a1b412f441bf6c706832655598.patch
|
||||
|
||||
##############################################################################
|
||||
# Continued list of core "glibc" package information:
|
||||
|
Loading…
Reference in New Issue
Block a user