diff options
Diffstat (limited to 'meta')
4 files changed, 50 insertions, 125 deletions
diff --git a/meta/recipes-core/musl/musl/0001-Change-container-for-riscv-floating-point-state-to-_.patch b/meta/recipes-core/musl/musl/0001-Change-container-for-riscv-floating-point-state-to-_.patch deleted file mode 100644 index a9abb18726..0000000000 --- a/meta/recipes-core/musl/musl/0001-Change-container-for-riscv-floating-point-state-to-_.patch +++ /dev/null | |||
@@ -1,67 +0,0 @@ | |||
1 | From 52a37610650e7366a398dd07393d3902d2f3faa3 Mon Sep 17 00:00:00 2001 | ||
2 | From: Khem Raj <raj.khem@gmail.com> | ||
3 | Date: Sat, 28 Sep 2019 12:19:57 -0700 | ||
4 | Subject: [PATCH] Change container for riscv floating-point state to __riscv_mc_fp_state | ||
5 | |||
6 | Match the struct elements with glibc | ||
7 | glibc also uses __riscv_mc prefix, some packages like gdb uses that | ||
8 | |||
9 | Upstream-Status: Submitted [https://www.openwall.com/lists/musl/2019/09/28/1] | ||
10 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
11 | --- | ||
12 | arch/riscv64/bits/signal.h | 18 +++++++++--------- | ||
13 | arch/riscv64/bits/user.h | 2 +- | ||
14 | 2 files changed, 10 insertions(+), 10 deletions(-) | ||
15 | |||
16 | diff --git a/arch/riscv64/bits/signal.h b/arch/riscv64/bits/signal.h | ||
17 | index 76d7ad80..aba7ab00 100644 | ||
18 | --- a/arch/riscv64/bits/signal.h | ||
19 | +++ b/arch/riscv64/bits/signal.h | ||
20 | @@ -13,25 +13,25 @@ typedef unsigned long greg_t; | ||
21 | typedef unsigned long gregset_t[32]; | ||
22 | |||
23 | struct __riscv_mc_f_ext_state { | ||
24 | - unsigned int f[32]; | ||
25 | - unsigned int fcsr; | ||
26 | + unsigned int __f[32]; | ||
27 | + unsigned int __fcsr; | ||
28 | }; | ||
29 | |||
30 | struct __riscv_mc_d_ext_state { | ||
31 | - unsigned long long f[32]; | ||
32 | - unsigned int fcsr; | ||
33 | + unsigned long long __f[32]; | ||
34 | + unsigned int __fcsr; | ||
35 | }; | ||
36 | |||
37 | struct __riscv_mc_q_ext_state { | ||
38 | - unsigned long long f[64] __attribute__((aligned(16))); | ||
39 | - unsigned int fcsr; | ||
40 | + unsigned long long __f[64] __attribute__((aligned(16))); | ||
41 | + unsigned int __fcsr; | ||
42 | unsigned int reserved[3]; | ||
43 | }; | ||
44 | |||
45 | union __riscv_mc_fp_state { | ||
46 | - struct __riscv_mc_f_ext_state f; | ||
47 | - struct __riscv_mc_d_ext_state d; | ||
48 | - struct __riscv_mc_q_ext_state q; | ||
49 | + struct __riscv_mc_f_ext_state __f; | ||
50 | + struct __riscv_mc_d_ext_state __d; | ||
51 | + struct __riscv_mc_q_ext_state __q; | ||
52 | }; | ||
53 | |||
54 | typedef union __riscv_mc_fp_state fpregset_t; | ||
55 | diff --git a/arch/riscv64/bits/user.h b/arch/riscv64/bits/user.h | ||
56 | index d2e383b2..9918a2fe 100644 | ||
57 | --- a/arch/riscv64/bits/user.h | ||
58 | +++ b/arch/riscv64/bits/user.h | ||
59 | @@ -5,4 +5,4 @@ struct user_fpregs_struct { | ||
60 | |||
61 | #define ELF_NGREG 32 | ||
62 | typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG]; | ||
63 | -typedef struct user_fpregs_struct elf_fpregset_t; | ||
64 | +typedef union __riscv_mc_fp_state elf_fpregset_t; | ||
65 | -- | ||
66 | 2.23.0 | ||
67 | |||
diff --git a/meta/recipes-core/musl/musl/0001-correct-the-operand-specifiers-in-the-riscv64-CAS-ro.patch b/meta/recipes-core/musl/musl/0001-correct-the-operand-specifiers-in-the-riscv64-CAS-ro.patch deleted file mode 100644 index 09b71cb299..0000000000 --- a/meta/recipes-core/musl/musl/0001-correct-the-operand-specifiers-in-the-riscv64-CAS-ro.patch +++ /dev/null | |||
@@ -1,55 +0,0 @@ | |||
1 | From 59f2954fcaacd9426827c69a729e2647cb9977e5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Palmer Dabbelt <palmer@sifive.com> | ||
3 | Date: Tue, 24 Sep 2019 20:30:15 -0700 | ||
4 | Subject: [PATCH] correct the operand specifiers in the riscv64 CAS routines | ||
5 | |||
6 | The operand sepcifiers in a_cas and a_casp for riscv64 were incorrect: | ||
7 | there's a backwards branch in the routine, so despite tmp being written | ||
8 | at the end of the assembly fragment it cannot be allocated in one of the | ||
9 | input registers because the input values may be needed for another trip | ||
10 | around the loop. | ||
11 | |||
12 | For code that follows the guarnteed forward progress requirements, he | ||
13 | backwards branch is rarely taken: SiFive's hardware only fails a store | ||
14 | conditional on execptional cases (ie, instruction cache misses inside | ||
15 | the loop), and until recently a bug in QEMU allowed back-to-back | ||
16 | store conditionals to succeed. The bug has been fixed in the latest | ||
17 | QEMU release, but it turns out that the fix caused this latent bug in | ||
18 | musl to manifest. | ||
19 | |||
20 | Full disclosure: I haven't actually even compiled musl. I just guessed | ||
21 | this would fix a bug introducted by the new QEMU behavior, Alistair | ||
22 | (CC'd) actually checked it fixes the problem. The rest is just | ||
23 | conjecture. | ||
24 | |||
25 | Upstream-Status: Submitted | ||
26 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
27 | --- | ||
28 | arch/riscv64/atomic_arch.h | 4 ++-- | ||
29 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
30 | |||
31 | diff --git a/arch/riscv64/atomic_arch.h b/arch/riscv64/atomic_arch.h | ||
32 | index c9765342..41ad4d04 100644 | ||
33 | --- a/arch/riscv64/atomic_arch.h | ||
34 | +++ b/arch/riscv64/atomic_arch.h | ||
35 | @@ -14,7 +14,7 @@ static inline int a_cas(volatile int *p, int t, int s) | ||
36 | " sc.w.aqrl %1, %4, (%2)\n" | ||
37 | " bnez %1, 1b\n" | ||
38 | "1:" | ||
39 | - : "=&r"(old), "=r"(tmp) | ||
40 | + : "=&r"(old), "=&r"(tmp) | ||
41 | : "r"(p), "r"(t), "r"(s) | ||
42 | : "memory"); | ||
43 | return old; | ||
44 | @@ -31,7 +31,7 @@ static inline void *a_cas_p(volatile void *p, void *t, void *s) | ||
45 | " sc.d.aqrl %1, %4, (%2)\n" | ||
46 | " bnez %1, 1b\n" | ||
47 | "1:" | ||
48 | - : "=&r"(old), "=r"(tmp) | ||
49 | + : "=&r"(old), "=&r"(tmp) | ||
50 | : "r"(p), "r"(t), "r"(s) | ||
51 | : "memory"); | ||
52 | return old; | ||
53 | -- | ||
54 | 2.23.0 | ||
55 | |||
diff --git a/meta/recipes-core/musl/musl/0001-riscv-Define-sigcontext-again.patch b/meta/recipes-core/musl/musl/0001-riscv-Define-sigcontext-again.patch new file mode 100644 index 0000000000..fcb324e15f --- /dev/null +++ b/meta/recipes-core/musl/musl/0001-riscv-Define-sigcontext-again.patch | |||
@@ -0,0 +1,48 @@ | |||
1 | commit a0993f8f0f161423ecdcb754f282ffd2fe47a7b5 | ||
2 | Author: Rich Felker <dalias@aerifal.cx> | ||
3 | Date: Wed Oct 2 09:28:03 2019 -0400 | ||
4 | |||
5 | reintroduce riscv64 struct sigcontext | ||
6 | |||
7 | commit ab3eb89a8b83353cdaab12ed017a67a7730f90e9 removed it as part of | ||
8 | correcting the mcontext_t definition, but there is still code using | ||
9 | struct sigcontext and expecting the member names present in it, most | ||
10 | notably libgcc_eh. almost all such usage is incorrect, but bring back | ||
11 | struct sigcontext at least for now so as not to introduce regressions. | ||
12 | |||
13 | Upstream-Status: Pending | ||
14 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
15 | diff --git a/arch/riscv64/bits/signal.h b/arch/riscv64/bits/signal.h | ||
16 | index 03fe48c1..2ff4be30 100644 | ||
17 | --- a/arch/riscv64/bits/signal.h | ||
18 | +++ b/arch/riscv64/bits/signal.h | ||
19 | @@ -6,12 +6,6 @@ | ||
20 | # define SIGSTKSZ 8192 | ||
21 | #endif | ||
22 | |||
23 | -#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | ||
24 | -typedef unsigned long greg_t; | ||
25 | -typedef unsigned long gregset_t[32]; | ||
26 | -typedef union __riscv_mc_fp_state fpregset_t; | ||
27 | -#endif | ||
28 | - | ||
29 | typedef unsigned long __riscv_mc_gp_state[32]; | ||
30 | |||
31 | struct __riscv_mc_f_ext_state { | ||
32 | @@ -41,6 +35,16 @@ typedef struct mcontext_t { | ||
33 | union __riscv_mc_fp_state __fpregs; | ||
34 | } mcontext_t; | ||
35 | |||
36 | +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | ||
37 | +typedef unsigned long greg_t; | ||
38 | +typedef unsigned long gregset_t[32]; | ||
39 | +typedef union __riscv_mc_fp_state fpregset_t; | ||
40 | +struct sigcontext { | ||
41 | + gregset_t gregs; | ||
42 | + fpregset_t fpregs; | ||
43 | +}; | ||
44 | +#endif | ||
45 | + | ||
46 | struct sigaltstack { | ||
47 | void *ss_sp; | ||
48 | int ss_flags; | ||
diff --git a/meta/recipes-core/musl/musl_git.bb b/meta/recipes-core/musl/musl_git.bb index 13fd17353d..aacff79f7c 100644 --- a/meta/recipes-core/musl/musl_git.bb +++ b/meta/recipes-core/musl/musl_git.bb | |||
@@ -4,7 +4,7 @@ | |||
4 | require musl.inc | 4 | require musl.inc |
5 | inherit linuxloader | 5 | inherit linuxloader |
6 | 6 | ||
7 | SRCREV = "1f0e9f9cc2e3fa354f94e18b3b362de5f1ec7272" | 7 | SRCREV = "2c2477da9a553c0b9b2fa18073a5dcdbe6d395af" |
8 | 8 | ||
9 | BASEVER = "1.1.23" | 9 | BASEVER = "1.1.23" |
10 | 10 | ||
@@ -15,8 +15,7 @@ PV = "${BASEVER}+git${SRCPV}" | |||
15 | SRC_URI = "git://git.musl-libc.org/musl \ | 15 | SRC_URI = "git://git.musl-libc.org/musl \ |
16 | file://0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch \ | 16 | file://0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch \ |
17 | file://0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch \ | 17 | file://0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch \ |
18 | file://0001-correct-the-operand-specifiers-in-the-riscv64-CAS-ro.patch \ | 18 | file://0001-riscv-Define-sigcontext-again.patch \ |
19 | file://0001-Change-container-for-riscv-floating-point-state-to-_.patch \ | ||
20 | " | 19 | " |
21 | 20 | ||
22 | S = "${WORKDIR}/git" | 21 | S = "${WORKDIR}/git" |