diff options
| -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}" |
