diff options
Diffstat (limited to 'meta')
-rw-r--r-- | meta/recipes-core/glibc/glibc/0031-x86-Require-full-ISA-support-for-x86-64-level-marker.patch | 116 | ||||
-rw-r--r-- | meta/recipes-core/glibc/glibc_2.33.bb | 1 |
2 files changed, 117 insertions, 0 deletions
diff --git a/meta/recipes-core/glibc/glibc/0031-x86-Require-full-ISA-support-for-x86-64-level-marker.patch b/meta/recipes-core/glibc/glibc/0031-x86-Require-full-ISA-support-for-x86-64-level-marker.patch new file mode 100644 index 0000000000..3cb60b2e55 --- /dev/null +++ b/meta/recipes-core/glibc/glibc/0031-x86-Require-full-ISA-support-for-x86-64-level-marker.patch | |||
@@ -0,0 +1,116 @@ | |||
1 | From b1971f6f1331d738d1d6b376b4741668a7546125 Mon Sep 17 00:00:00 2001 | ||
2 | From: "H.J. Lu" <hjl.tools@gmail.com> | ||
3 | Date: Tue, 2 Feb 2021 13:45:58 -0800 | ||
4 | Subject: [PATCH] x86: Require full ISA support for x86-64 level marker [BZ #27318] | ||
5 | |||
6 | Since -march=sandybridge enables ISAs in x86-64 ISA level v3, the v3 | ||
7 | marker is set on libc.so. We couldn't set the needed ISA marker to v2 | ||
8 | since this libc won't run on all v2 machines. Technically, the v3 marker | ||
9 | is correct. But the resulting libc.so won't run on Sandy Brigde, which | ||
10 | is a v2 machine, even when libc is compiled with -march=sandybridge: | ||
11 | |||
12 | $ ./elf/ld.so ./libc.so | ||
13 | ./libc.so: (p) CPU ISA level is lower than required: needed: 7; got: 3 | ||
14 | |||
15 | Instead, we require full ISA support for x86-64 level marker and disable | ||
16 | x86-64 level marker for -march=sandybridge which enables ISAs between v2 | ||
17 | and v3. | ||
18 | |||
19 | Upstream-Status: Submitted [https://sourceware.org/pipermail/libc-alpha/2021-February/122297.html] | ||
20 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
21 | --- | ||
22 | |||
23 | sysdeps/x86/configure | 7 ++++++- | ||
24 | sysdeps/x86/configure.ac | 2 +- | ||
25 | sysdeps/x86/isa-level.c | 21 ++++++++++++++++++++- | ||
26 | 3 files changed, 27 insertions(+), 3 deletions(-) | ||
27 | |||
28 | diff --git a/sysdeps/x86/configure b/sysdeps/x86/configure | ||
29 | index 5e32dc62b3..5b20646843 100644 | ||
30 | --- a/sysdeps/x86/configure | ||
31 | +++ b/sysdeps/x86/configure | ||
32 | @@ -133,7 +133,12 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest c | ||
33 | $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 | ||
34 | test $ac_status = 0; }; }; then | ||
35 | count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l` | ||
36 | - if test "$count" = 1; then | ||
37 | + if test "$count" = 1 && { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -DINCLUDE_X86_ISA_LEVEL -S -o conftest.s $srcdir/sysdeps/x86/isa-level.c' | ||
38 | + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 | ||
39 | + (eval $ac_try) 2>&5 | ||
40 | + ac_status=$? | ||
41 | + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 | ||
42 | + test $ac_status = 0; }; }; then | ||
43 | libc_cv_include_x86_isa_level=yes | ||
44 | fi | ||
45 | fi | ||
46 | diff --git a/sysdeps/x86/configure.ac b/sysdeps/x86/configure.ac | ||
47 | index f94088f377..54ecd33d2c 100644 | ||
48 | --- a/sysdeps/x86/configure.ac | ||
49 | +++ b/sysdeps/x86/configure.ac | ||
50 | @@ -100,7 +100,7 @@ EOF | ||
51 | libc_cv_include_x86_isa_level=no | ||
52 | if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest conftest1.S conftest2.S); then | ||
53 | count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l` | ||
54 | - if test "$count" = 1; then | ||
55 | + if test "$count" = 1 && AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -DINCLUDE_X86_ISA_LEVEL -S -o conftest.s $srcdir/sysdeps/x86/isa-level.c); then | ||
56 | libc_cv_include_x86_isa_level=yes | ||
57 | fi | ||
58 | fi | ||
59 | diff --git a/sysdeps/x86/isa-level.c b/sysdeps/x86/isa-level.c | ||
60 | index aaf524cb56..7f83449061 100644 | ||
61 | --- a/sysdeps/x86/isa-level.c | ||
62 | +++ b/sysdeps/x86/isa-level.c | ||
63 | @@ -25,12 +25,17 @@ | ||
64 | License along with the GNU C Library; if not, see | ||
65 | <https://www.gnu.org/licenses/>. */ | ||
66 | |||
67 | -#include <elf.h> | ||
68 | +#ifdef _LIBC | ||
69 | +# include <elf.h> | ||
70 | +#endif | ||
71 | |||
72 | /* ELF program property for x86 ISA level. */ | ||
73 | #ifdef INCLUDE_X86_ISA_LEVEL | ||
74 | # if defined __x86_64__ || defined __FXSR__ || !defined _SOFT_FLOAT \ | ||
75 | || defined __MMX__ || defined __SSE__ || defined __SSE2__ | ||
76 | +# if !defined __SSE__ || !defined __SSE2__ | ||
77 | +# error "Missing ISAs for x86-64 ISA level baseline" | ||
78 | +# endif | ||
79 | # define ISA_BASELINE GNU_PROPERTY_X86_ISA_1_BASELINE | ||
80 | # else | ||
81 | # define ISA_BASELINE 0 | ||
82 | @@ -40,6 +45,11 @@ | ||
83 | || (defined __x86_64__ && defined __LAHF_SAHF__) \ | ||
84 | || defined __POPCNT__ || defined __SSE3__ \ | ||
85 | || defined __SSSE3__ || defined __SSE4_1__ || defined __SSE4_2__ | ||
86 | +# if !defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 \ | ||
87 | + || !defined __POPCNT__ || !defined __SSE3__ \ | ||
88 | + || !defined __SSSE3__ || !defined __SSE4_1__ || !defined __SSE4_2__ | ||
89 | +# error "Missing ISAs for x86-64 ISA level v2" | ||
90 | +# endif | ||
91 | # define ISA_V2 GNU_PROPERTY_X86_ISA_1_V2 | ||
92 | # else | ||
93 | # define ISA_V2 0 | ||
94 | @@ -48,6 +58,10 @@ | ||
95 | # if defined __AVX__ || defined __AVX2__ || defined __F16C__ \ | ||
96 | || defined __FMA__ || defined __LZCNT__ || defined __MOVBE__ \ | ||
97 | || defined __XSAVE__ | ||
98 | +# if !defined __AVX__ || !defined __AVX2__ || !defined __F16C__ \ | ||
99 | + || !defined __FMA__ || !defined __LZCNT__ | ||
100 | +# error "Missing ISAs for x86-64 ISA level v3" | ||
101 | +# endif | ||
102 | # define ISA_V3 GNU_PROPERTY_X86_ISA_1_V3 | ||
103 | # else | ||
104 | # define ISA_V3 0 | ||
105 | @@ -55,6 +69,11 @@ | ||
106 | |||
107 | # if defined __AVX512F__ || defined __AVX512BW__ || defined __AVX512CD__ \ | ||
108 | || defined __AVX512DQ__ || defined __AVX512VL__ | ||
109 | +# if !defined __AVX512F__ || !defined __AVX512BW__ \ | ||
110 | + || !defined __AVX512CD__ || !defined __AVX512DQ__ \ | ||
111 | + || !defined __AVX512VL__ | ||
112 | +# error "Missing ISAs for x86-64 ISA level v4" | ||
113 | +# endif | ||
114 | # define ISA_V4 GNU_PROPERTY_X86_ISA_1_V4 | ||
115 | # else | ||
116 | # define ISA_V4 0 | ||
diff --git a/meta/recipes-core/glibc/glibc_2.33.bb b/meta/recipes-core/glibc/glibc_2.33.bb index b39f97d656..4085c779eb 100644 --- a/meta/recipes-core/glibc/glibc_2.33.bb +++ b/meta/recipes-core/glibc/glibc_2.33.bb | |||
@@ -42,6 +42,7 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \ | |||
42 | file://0028-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch \ | 42 | file://0028-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch \ |
43 | file://0029-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch \ | 43 | file://0029-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch \ |
44 | file://0030-powerpc-Do-not-ask-compiler-for-finding-arch.patch \ | 44 | file://0030-powerpc-Do-not-ask-compiler-for-finding-arch.patch \ |
45 | file://0031-x86-Require-full-ISA-support-for-x86-64-level-marker.patch \ | ||
45 | " | 46 | " |
46 | S = "${WORKDIR}/git" | 47 | S = "${WORKDIR}/git" |
47 | B = "${WORKDIR}/build-${TARGET_SYS}" | 48 | B = "${WORKDIR}/build-${TARGET_SYS}" |