Build fail on Ubuntu 24.04
Stefan Liebler
stli@linux.ibm.com
Thu Sep 5 13:55:08 GMT 2024
Hi all,
I've just recognized that building glibc on Ubuntu 24.04 currently fails
with:
wctomb.c:57:1: error: ‘artificial’ attribute ignored [-Werror=attributes]
57 | libc_hidden_def (wctomb)
| ^~~~~~
cc1: all warnings being treated as errors
It turns out that gcc on Ubuntu automatically defines _FORTIFY_SOURCE:
$ gcc -dumpspecs | grep FORTIFY
%{!O0:%{O*:%{!D_FORTIFY_SOURCE=*:%{!U_FORTIFY_SOURCE:-D_FORTIFY_SOURCE=3}}}}
Thus when compiling wctomb in stdlib/wctomb.c there is also the
fortify-wrapper (with inline and __attribute__((artificial))). Later on
after the implementation of wctomb, there is libc_hidden_def (wctomb).
It tries to copy the artificial function attribute from the wrapper
which leads to the fail:
extern __typeof (wctomb) __EI_wctomb __attribute__((alias (""
"__GI_wctomb"))) __attribute__ ((__copy__ (wctomb)));
Here are some experiments:
$ gcc -O2 -dM -E - < /dev/null | grep FORTIFY
#define _FORTIFY_SOURCE 3
$ gcc -O2 -Wp,-U_FORTIFY_SOURCE -dM -E - < /dev/null | grep FORTIFY
#define _FORTIFY_SOURCE 3
$ gcc -O2 -U_FORTIFY_SOURCE -dM -E - < /dev/null | grep FORTIFY
$ gcc -O2 -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2 -dM -E - < /dev/null
| grep FORTIFY
#define _FORTIFY_SOURCE 3
Thus as a workaround, one could configure with CFLAGS="-U_FORTIFY_SOURCE".
>From configure.ac:
dnl Check if we support the requested _FORTIFY_SOURCE level
dnl If not, then don't use it.
dnl Note that _FORTIFY_SOURCE may have been set through FLAGS too.
dnl _FORTIFY_SOURCE value will be selectively disabled for function that
can't
dnl support it
no_fortify_source="-Wp,-U_FORTIFY_SOURCE"
fortify_source="${no_fortify_source}"
...
AS_IF([test "$libc_cv_fortify_source" = yes],
[fortify_source="${fortify_source},-D_FORTIFY_SOURCE=${enable_fortify_source}"]
)
Does anybody know why "-Wp" is needed to bypass the compiler-driver and
pass it directly to the preprocessor?
Is it also fine to just use -U_FORTIFY_SOURCE?
Or should the Ubuntu gcc somehow also check for -Wp,-U_FORTIFY_SOURCE?
Looking into the Ubuntu glibc-sources, there is indeed the
fix-fortify-source.patch from Matthias Klose which adjusts this plus
follow-on adjustments:
-no_fortify_source="-Wp,-U_FORTIFY_SOURCE"
+no_fortify_source="-U_FORTIFY_SOURCE"
...
AS_IF([test "$libc_cv_fortify_source" = yes],
-
[fortify_source="${fortify_source},-D_FORTIFY_SOURCE=${enable_fortify_source}"]
+ [fortify_source="${fortify_source}
-D_FORTIFY_SOURCE=${enable_fortify_source}"]
)
Bye,
Stefan
More information about the Libc-alpha
mailing list