musl: backport upstream patches for vrregset_t on ppc64
[ci skip]
This commit is contained in:
parent
377064ef06
commit
0271cc4f2b
|
@ -0,0 +1,45 @@
|
|||
commit 3c59a868956636bc8adafb1b168d090897692532
|
||||
Author: Rich Felker <dalias@aerifal.cx>
|
||||
Date: Wed May 22 15:17:12 2019 -0400
|
||||
|
||||
fix vrregset_t layout and member naming on powerpc64
|
||||
|
||||
the mistaken layout seems to have been adapted from 32-bit powerpc,
|
||||
where vscr and vrsave are packed into the same 128-bit slot in a way
|
||||
that looks like it relies on non-overlapping-ness of the value bits in
|
||||
big endian.
|
||||
|
||||
the powerpc64 port accounted for the fact that the 64-bit ABI puts
|
||||
each in its own 128-bit slot, but ordered them incorrectly (matching
|
||||
the bit order used on the 32-bit ABI), and failed to account for vscr
|
||||
being padded according to endianness so that it can be accessed via
|
||||
vector moves.
|
||||
|
||||
in addition to ABI layout, our definition used different logical
|
||||
member layout/naming from glibc, where vscr is a structure to
|
||||
facilitate access as a 32-bit word or a 128-bit vector. the
|
||||
inconsistency here was unintentional, so fix it.
|
||||
|
||||
diff --git a/arch/powerpc64/bits/signal.h b/arch/powerpc64/bits/signal.h
|
||||
index 34693a68..94c7a327 100644
|
||||
--- arch/powerpc64/bits/signal.h
|
||||
+++ arch/powerpc64/bits/signal.h
|
||||
@@ -17,10 +17,14 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
unsigned __int128 vrregs[32];
|
||||
- unsigned _pad[3];
|
||||
- unsigned vrsave;
|
||||
- unsigned vscr;
|
||||
- unsigned _pad2[3];
|
||||
+ struct {
|
||||
+#if __BIG_ENDIAN__
|
||||
+ unsigned _pad[3], vscr_word;
|
||||
+#else
|
||||
+ unsigned vscr_word, _pad[3];
|
||||
+#endif
|
||||
+ } vscr;
|
||||
+ unsigned vrsave, _pad[3];
|
||||
} vrregset_t;
|
||||
|
||||
typedef struct sigcontext {
|
|
@ -0,0 +1,29 @@
|
|||
commit ac304227bb3ea1787d581f17d76a5f5f3abff51f
|
||||
Author: Rich Felker <dalias@aerifal.cx>
|
||||
Date: Wed May 22 18:28:32 2019 -0400
|
||||
|
||||
make powerpc64 vrregset_t logical layout match expected API
|
||||
|
||||
between v2 and v3 of the powerpc64 port patch, the change was made
|
||||
from a 32x4 array of 32-bit unsigned ints for vrregs[] to a 32-element
|
||||
array of __int128. this mismatches the API applications working with
|
||||
mcontext_t expect from glibc, and seems to have been motivated by a
|
||||
misinterpretation of a comment on how aarch64 did things as a
|
||||
suggestion to do the same on powerpc64.
|
||||
|
||||
diff --git a/arch/powerpc64/bits/signal.h b/arch/powerpc64/bits/signal.h
|
||||
index 94c7a327..2cc0604c 100644
|
||||
--- arch/powerpc64/bits/signal.h
|
||||
+++ arch/powerpc64/bits/signal.h
|
||||
@@ -16,7 +16,10 @@ typedef struct {
|
||||
} fpregset_t;
|
||||
|
||||
typedef struct {
|
||||
- unsigned __int128 vrregs[32];
|
||||
+#ifdef __GNUC__
|
||||
+ __attribute__((__aligned__(16)))
|
||||
+#endif
|
||||
+ unsigned vrregs[32][4];
|
||||
struct {
|
||||
#if __BIG_ENDIAN__
|
||||
unsigned _pad[3], vscr_word;
|
|
@ -1,7 +1,7 @@
|
|||
# Template file for 'musl'.
|
||||
pkgname=musl
|
||||
version=1.1.22
|
||||
revision=2
|
||||
revision=3
|
||||
archs="*-musl"
|
||||
build_style=gnu-configure
|
||||
configure_args="--prefix=/usr --disable-gcc-wrapper"
|
||||
|
|
Loading…
Reference in New Issue