diff options
author | Khem Raj <raj.khem@gmail.com> | 2020-03-25 23:29:19 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-03-29 12:05:31 +0100 |
commit | df411091050ba9d999ebaac622e84b430d0eda8a (patch) | |
tree | bbfbd75618480c716c72521ee2219d53bad1be39 /meta | |
parent | b4cd7ef48e9576dc5a27519af926bab30d4dc47d (diff) | |
download | poky-df411091050ba9d999ebaac622e84b430d0eda8a.tar.gz |
glibc: Backport patch to fix ifuncs on risc-v and gcc10 builds
ifunc patch is needed to address a glibc ptests failure on riscv
long double double patch is backported to let 2.31 build with gcc10
(From OE-Core rev: 5ab732a1a1c57bc9f9a5e71230eccee217110ade)
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
3 files changed, 219 insertions, 0 deletions
diff --git a/meta/recipes-core/glibc/glibc/0030-Improve-IFUNC-check-BZ-25506.patch b/meta/recipes-core/glibc/glibc/0030-Improve-IFUNC-check-BZ-25506.patch new file mode 100644 index 0000000000..1cb398d2bc --- /dev/null +++ b/meta/recipes-core/glibc/glibc/0030-Improve-IFUNC-check-BZ-25506.patch | |||
@@ -0,0 +1,47 @@ | |||
1 | From 87a698a21646b7ee620923ef5ffa9735471a8ddd Mon Sep 17 00:00:00 2001 | ||
2 | From: Fangrui Song <maskray@google.com> | ||
3 | Date: Tue, 4 Feb 2020 21:55:44 -0800 | ||
4 | Subject: [PATCH] Improve IFUNC check [BZ #25506] | ||
5 | |||
6 | GNU ld's RISCV port does not support IFUNC. ld -no-pie produces no | ||
7 | relocation and the test passed incorrectly. Be more rigid by testing | ||
8 | IRELATIVE explicitly. | ||
9 | |||
10 | Upstream-Status: Backport [https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=87a698a21646b7ee620923ef5ffa9735471a8ddd] | ||
11 | Tested-by: Aurelien Jarno <aurelien@aurel32.net> | ||
12 | Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> | ||
13 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
14 | --- | ||
15 | configure | 2 +- | ||
16 | configure.ac | 2 +- | ||
17 | 2 files changed, 2 insertions(+), 2 deletions(-) | ||
18 | |||
19 | diff --git a/configure b/configure | ||
20 | index b959d2d988..3b98ec312f 100755 | ||
21 | --- a/configure | ||
22 | +++ b/configure | ||
23 | @@ -4035,7 +4035,7 @@ if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \ | ||
24 | -o conftest conftest.S 1>&5 2>&5; then | ||
25 | # Do a link to see if the backend supports IFUNC relocs. | ||
26 | $READELF -r conftest 1>&5 | ||
27 | - LC_ALL=C $READELF -r conftest | grep 'no relocations' >/dev/null || { | ||
28 | + LC_ALL=C $READELF -Wr conftest | grep -q 'IRELATIVE\|R_SPARC_JMP_IREL' && { | ||
29 | libc_cv_ld_gnu_indirect_function=yes | ||
30 | } | ||
31 | fi | ||
32 | diff --git a/configure.ac b/configure.ac | ||
33 | index 49b900c1ed..e20034f301 100644 | ||
34 | --- a/configure.ac | ||
35 | +++ b/configure.ac | ||
36 | @@ -649,7 +649,7 @@ if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \ | ||
37 | -o conftest conftest.S 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then | ||
38 | # Do a link to see if the backend supports IFUNC relocs. | ||
39 | $READELF -r conftest 1>&AS_MESSAGE_LOG_FD | ||
40 | - LC_ALL=C $READELF -r conftest | grep 'no relocations' >/dev/null || { | ||
41 | + LC_ALL=C $READELF -Wr conftest | grep -q 'IRELATIVE\|R_SPARC_JMP_IREL' && { | ||
42 | libc_cv_ld_gnu_indirect_function=yes | ||
43 | } | ||
44 | fi | ||
45 | -- | ||
46 | 2.25.1 | ||
47 | |||
diff --git a/meta/recipes-core/glibc/glibc/0031-Fix-build-with-GCC-10-when-long-double-double.patch b/meta/recipes-core/glibc/glibc/0031-Fix-build-with-GCC-10-when-long-double-double.patch new file mode 100644 index 0000000000..72622961ad --- /dev/null +++ b/meta/recipes-core/glibc/glibc/0031-Fix-build-with-GCC-10-when-long-double-double.patch | |||
@@ -0,0 +1,170 @@ | |||
1 | From 49348beafe9ba150c9bd48595b3f372299bddbb0 Mon Sep 17 00:00:00 2001 | ||
2 | From: Joseph Myers <joseph@codesourcery.com> | ||
3 | Date: Tue, 17 Mar 2020 22:57:42 +0000 | ||
4 | Subject: [PATCH] Fix build with GCC 10 when long double = double. | ||
5 | |||
6 | On platforms where long double has the same ABI as double, glibc | ||
7 | defines long double functions as aliases for the corresponding double | ||
8 | functions. The declarations of those functions in <math.h> are | ||
9 | disabled to avoid problems with aliases having incompatible types, but | ||
10 | GCC 10 now gives errors for incompatible types when the long double | ||
11 | function is known to GCC as a built-in function, not just when there | ||
12 | is an incompatible header declaration. | ||
13 | |||
14 | This patch fixes those errors by using appropriate | ||
15 | -fno-builtin-<function> options to compile the double functions. The | ||
16 | list of CFLAGS-* settings is an appropriately adapted version of that | ||
17 | in sysdeps/ieee754/ldbl-opt/Makefile used there for building nldbl-*.c | ||
18 | files; in particular, the options are used even if GCC does not | ||
19 | currently have a built-in function of a given function, so that adding | ||
20 | such a built-in function in future will not break the glibc build. | ||
21 | Thus, various of the CFLAGS-* settings are only for future-proofing | ||
22 | and may not currently be needed (and it's possible some could be | ||
23 | irrelevant for other reasons). | ||
24 | |||
25 | Tested with build-many-glibcs.py for arm-linux-gnueabi (compilers and | ||
26 | glibcs builds), where it fixes the build that previously failed. | ||
27 | |||
28 | Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=commit;h=49348beafe9ba150c9bd48595b3f372299bddbb0] | ||
29 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
30 | |||
31 | --- | ||
32 | math/Makefile | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
33 | 1 file changed, 122 insertions(+) | ||
34 | |||
35 | diff --git a/math/Makefile b/math/Makefile | ||
36 | index 84a8b94c74..0a5a40430e 100644 | ||
37 | --- a/math/Makefile | ||
38 | +++ b/math/Makefile | ||
39 | @@ -650,6 +650,128 @@ ifneq ($(long-double-fcts),yes) | ||
40 | # We won't compile the `long double' code at all. Tell the `double' code | ||
41 | # to define aliases for the `FUNCl' names. | ||
42 | math-CPPFLAGS += -DNO_LONG_DOUBLE | ||
43 | +# GCC 10 diagnoses aliases with types conflicting with built-in | ||
44 | +# functions. | ||
45 | +CFLAGS-w_acos.c += -fno-builtin-acosl | ||
46 | +CFLAGS-w_acosh.c += -fno-builtin-acoshl | ||
47 | +CFLAGS-w_asin.c += -fno-builtin-asinl | ||
48 | +CFLAGS-s_asinh.c += -fno-builtin-asinhl | ||
49 | +CFLAGS-s_atan.c += -fno-builtin-atanl | ||
50 | +CFLAGS-w_atan2.c += -fno-builtin-atan2l | ||
51 | +CFLAGS-w_atanh.c += -fno-builtin-atanhl | ||
52 | +CFLAGS-s_cabs.c += -fno-builtin-cabsl | ||
53 | +CFLAGS-s_cacos.c += -fno-builtin-cacosl | ||
54 | +CFLAGS-s_cacosh.c += -fno-builtin-cacoshl | ||
55 | +CFLAGS-s_canonicalize.c += -fno-builtin-canonicalizel | ||
56 | +CFLAGS-s_carg.c += -fno-builtin-cargl | ||
57 | +CFLAGS-s_casin.c += -fno-builtin-casinl | ||
58 | +CFLAGS-s_casinh.c += -fno-builtin-casinhl | ||
59 | +CFLAGS-s_catan.c += -fno-builtin-catanl | ||
60 | +CFLAGS-s_catanh.c += -fno-builtin-catanhl | ||
61 | +CFLAGS-s_cbrt.c += -fno-builtin-cbrtl | ||
62 | +CFLAGS-s_ccos.c += -fno-builtin-ccosl | ||
63 | +CFLAGS-s_ccosh.c += -fno-builtin-ccoshl | ||
64 | +CFLAGS-s_ceil.c += -fno-builtin-ceill | ||
65 | +CFLAGS-s_cexp.c += -fno-builtin-cexpl | ||
66 | +CFLAGS-s_cimag.c += -fno-builtin-cimagl | ||
67 | +CFLAGS-s_clog.c += -fno-builtin-clogl | ||
68 | +CFLAGS-s_clog10.c += -fno-builtin-clog10l | ||
69 | +CFLAGS-s_conj.c += -fno-builtin-conjl | ||
70 | +CFLAGS-s_copysign.c += -fno-builtin-copysignl | ||
71 | +CFLAGS-s_cos.c += -fno-builtin-cosl | ||
72 | +CFLAGS-w_cosh.c += -fno-builtin-coshl | ||
73 | +CFLAGS-s_cpow.c += -fno-builtin-cpowl | ||
74 | +CFLAGS-s_cproj.c += -fno-builtin-cprojl | ||
75 | +CFLAGS-s_creal.c += -fno-builtin-creall | ||
76 | +CFLAGS-s_csin.c += -fno-builtin-csinl | ||
77 | +CFLAGS-s_csinh.c += -fno-builtin-csinhl | ||
78 | +CFLAGS-s_csqrt.c += -fno-builtin-csqrtl | ||
79 | +CFLAGS-s_ctan.c += -fno-builtin-ctanl | ||
80 | +CFLAGS-s_ctanh.c += -fno-builtin-ctanhl | ||
81 | +CFLAGS-s_dadd.c += -fno-builtin-daddl | ||
82 | +CFLAGS-s_ddiv.c += -fno-builtin-ddivl | ||
83 | +CFLAGS-s_dmul.c += -fno-builtin-dmull | ||
84 | +CFLAGS-s_dsub.c += -fno-builtin-dsubl | ||
85 | +CFLAGS-s_erf.c += -fno-builtin-erfl | ||
86 | +CFLAGS-s_erfc.c += -fno-builtin-erfcl | ||
87 | +CFLAGS-e_exp.c += -fno-builtin-expl | ||
88 | +CFLAGS-w_exp10.c += -fno-builtin-exp10l | ||
89 | +CFLAGS-e_exp2.c += -fno-builtin-exp2l | ||
90 | +CFLAGS-s_expm1.c += -fno-builtin-expm1l | ||
91 | +CFLAGS-s_fabs.c += -fno-builtin-fabsl | ||
92 | +CFLAGS-s_fadd.c += -fno-builtin-faddl | ||
93 | +CFLAGS-s_fdim.c += -fno-builtin-fdiml | ||
94 | +CFLAGS-s_fdiv.c += -fno-builtin-fdivl | ||
95 | +CFLAGS-s_finite.c += -fno-builtin-finitel | ||
96 | +CFLAGS-s_floor.c += -fno-builtin-floorl | ||
97 | +CFLAGS-s_fma.c += -fno-builtin-fmal | ||
98 | +CFLAGS-s_fmax.c += -fno-builtin-fmaxl | ||
99 | +CFLAGS-s_fmaxmag.c += -fno-builtin-fmaxmagl | ||
100 | +CFLAGS-s_fmin.c += -fno-builtin-fminl | ||
101 | +CFLAGS-s_fminmag.c += -fno-builtin-fminmagl | ||
102 | +CFLAGS-w_fmod.c += -fno-builtin-fmodl | ||
103 | +CFLAGS-s_fmul.c += -fno-builtin-fmull | ||
104 | +CFLAGS-s_frexp.c += -fno-builtin-frexpl | ||
105 | +CFLAGS-s_fromfp.c += -fno-builtin-fromfpl | ||
106 | +CFLAGS-s_fromfpx.c += -fno-builtin-fromfpxl | ||
107 | +CFLAGS-s_fsub.c += -fno-builtin-fsubl | ||
108 | +CFLAGS-s_gamma.c += -fno-builtin-gammal | ||
109 | +CFLAGS-s_getpayload.c += -fno-builtin-getpayloadl | ||
110 | +CFLAGS-w_hypot.c += -fno-builtin-hypotl | ||
111 | +CFLAGS-w_ilogb.c += -fno-builtin-ilogbl | ||
112 | +CFLAGS-s_isinf.c += -fno-builtin-isinfl | ||
113 | +CFLAGS-s_isnan.c += -fno-builtin-isnanl | ||
114 | +CFLAGS-w_j0.c += -fno-builtin-j0l | ||
115 | +CFLAGS-w_j1.c += -fno-builtin-j1l | ||
116 | +CFLAGS-w_jn.c += -fno-builtin-jnl | ||
117 | +CFLAGS-s_ldexp.c += -fno-builtin-ldexpl | ||
118 | +CFLAGS-w_lgamma.c += -fno-builtin-lgammal | ||
119 | +CFLAGS-w_lgamma_r.c += -fno-builtin-lgammal_r | ||
120 | +CFLAGS-w_llogb.c += -fno-builtin-llogbl | ||
121 | +CFLAGS-s_llrint.c += -fno-builtin-llrintl | ||
122 | +CFLAGS-s_llround.c += -fno-builtin-llroundl | ||
123 | +CFLAGS-e_log.c += -fno-builtin-logl | ||
124 | +CFLAGS-w_log10.c += -fno-builtin-log10l | ||
125 | +CFLAGS-w_log1p.c += -fno-builtin-log1pl | ||
126 | +CFLAGS-e_log2.c += -fno-builtin-log2l | ||
127 | +CFLAGS-s_logb.c += -fno-builtin-logbl | ||
128 | +CFLAGS-s_lrint.c += -fno-builtin-lrintl | ||
129 | +CFLAGS-s_lround.c += -fno-builtin-lroundl | ||
130 | +CFLAGS-s_modf.c += -fno-builtin-modfl | ||
131 | +CFLAGS-s_nan.c += -fno-builtin-nanl | ||
132 | +CFLAGS-s_nearbyint.c += -fno-builtin-nearbyintl | ||
133 | +CFLAGS-s_nextafter.c += -fno-builtin-nextafterl | ||
134 | +CFLAGS-s_nextdown.c += -fno-builtin-nextdownl | ||
135 | +CFLAGS-s_nexttoward.c += -fno-builtin-nexttoward -fno-builtin-nexttowardl | ||
136 | +CFLAGS-s_nexttowardf.c += -fno-builtin-nexttowardf | ||
137 | +CFLAGS-s_nextup.c += -fno-builtin-nextupl | ||
138 | +CFLAGS-e_pow.c += -fno-builtin-powl | ||
139 | +CFLAGS-w_remainder.c += -fno-builtin-remainderl -fno-builtin-dreml | ||
140 | +CFLAGS-s_remquo.c += -fno-builtin-remquol | ||
141 | +CFLAGS-s_rint.c += -fno-builtin-rintl | ||
142 | +CFLAGS-s_round.c += -fno-builtin-roundl | ||
143 | +CFLAGS-s_roundeven.c += -fno-builtin-roundevenl | ||
144 | +CFLAGS-w_scalb.c += -fno-builtin-scalbl | ||
145 | +CFLAGS-w_scalbln.c += -fno-builtin-scalblnl | ||
146 | +CFLAGS-s_scalbn.c += -fno-builtin-scalbnl | ||
147 | +CFLAGS-s_setpayload.c += -fno-builtin-setpayloadl | ||
148 | +CFLAGS-s_setpayloadsig.c += -fno-builtin-setpayloadsigl | ||
149 | +CFLAGS-s_significand.c += -fno-builtin-significandl | ||
150 | +CFLAGS-s_sin.c += -fno-builtin-sinl | ||
151 | +CFLAGS-s_sincos.c += -fno-builtin-sincosl | ||
152 | +CFLAGS-w_sinh.c += -fno-builtin-sinhl | ||
153 | +CFLAGS-w_sqrt.c += -fno-builtin-sqrtl | ||
154 | +CFLAGS-s_tan.c += -fno-builtin-tanl | ||
155 | +CFLAGS-s_tanh.c += -fno-builtin-tanhl | ||
156 | +CFLAGS-w_tgamma.c += -fno-builtin-tgammal | ||
157 | +CFLAGS-s_totalorder.c += -fno-builtin-totalorderl | ||
158 | +CFLAGS-s_totalordermag.c += -fno-builtin-totalordermagl | ||
159 | +CFLAGS-s_trunc.c += -fno-builtin-truncl | ||
160 | +CFLAGS-s_ufromfp.c += -fno-builtin-ufromfpl | ||
161 | +CFLAGS-s_ufromfpx.c += -fno-builtin-ufromfpxl | ||
162 | +CFLAGS-s_y0.c += -fno-builtin-y0l | ||
163 | +CFLAGS-s_y1.c += -fno-builtin-y1l | ||
164 | +CFLAGS-s_yn.c += -fno-builtin-ynl | ||
165 | endif | ||
166 | |||
167 | # These files quiet sNaNs in a way that is optimized away without | ||
168 | -- | ||
169 | 2.26.0 | ||
170 | |||
diff --git a/meta/recipes-core/glibc/glibc_2.31.bb b/meta/recipes-core/glibc/glibc_2.31.bb index 6dd9415f6b..6605fd3967 100644 --- a/meta/recipes-core/glibc/glibc_2.31.bb +++ b/meta/recipes-core/glibc/glibc_2.31.bb | |||
@@ -41,6 +41,8 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \ | |||
41 | file://0028-inject-file-assembly-directives.patch \ | 41 | file://0028-inject-file-assembly-directives.patch \ |
42 | file://0029-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch \ | 42 | file://0029-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch \ |
43 | file://CVE-2020-10029.patch \ | 43 | file://CVE-2020-10029.patch \ |
44 | file://0030-Improve-IFUNC-check-BZ-25506.patch \ | ||
45 | file://0031-Fix-build-with-GCC-10-when-long-double-double.patch \ | ||
44 | " | 46 | " |
45 | S = "${WORKDIR}/git" | 47 | S = "${WORKDIR}/git" |
46 | B = "${WORKDIR}/build-${TARGET_SYS}" | 48 | B = "${WORKDIR}/build-${TARGET_SYS}" |