Igor
> -----Original Message----- > From: Joseph Myers [mailto:jos...@codesourcery.com] > Sent: Thursday, February 15, 2018 1:24 AM > To: Tsimbalist, Igor V <igor.v.tsimbal...@intel.com> > Cc: Sandra Loosemore <san...@codesourcery.com>; gcc- > patc...@gcc.gnu.org; Uros Bizjak <ubiz...@gmail.com> > Subject: RE: PR84239, Reimplement CET intrinsics for rdssp/incssp insn > > This patch has broken bootstrap of a cross toolchain for x86_64 (the case > where inhibit_libc is defined because there is no libc for the target > available at that stage in the bootstrap process). > > In file included from > /scratch/jmyers/glibc-bot/build/compilers/x86_64-linux-gnu/gcc- > first/gcc/include/xmmintrin.h:34, > from > /scratch/jmyers/glibc-bot/build/compilers/x86_64-linux-gnu/gcc- > first/gcc/include/x86intrin.h:33, > from > /scratch/jmyers/glibc-bot/src/gcc/libgcc/config/i386/shadow-stack- > unwind.h:25, > from ./md-unwind-support.h:27, > from > /scratch/jmyers/glibc-bot/src/gcc/libgcc/unwind-dw2.c:411: > ../../.././gcc/mm_malloc.h:27:10: fatal error: stdlib.h: No such file or > directory > #include <stdlib.h> > ^~~~~~~~~~ > > https://sourceware.org/ml/libc-testresults/2018-q1/msg00307.html > > The patch makes shadow-stack-unwind.h include <x86intrin.h>, which ends > up > including <mm_malloc.h>, which includes <stdlib.h> and <errno.h> > unconditionally. You can't include any libc system headers > unconditionally from libgcc (only when inhibit_libc is not defined - and > <mm_malloc.h>, being an installed header, can't test inhibit_libc because > it's in the user's namespace). So I think you need to avoid the > mm_malloc.h include here somehow (without adding any inhibit_libc > conditionals to installed headers). Here is a proposed patch diff --git a/libgcc/config/i386/shadow-stack-unwind.h b/libgcc/config/i386/shadow-stack-unwind.h index 416e061..b7c3d98 100644 --- a/libgcc/config/i386/shadow-stack-unwind.h +++ b/libgcc/config/i386/shadow-stack-unwind.h @@ -22,7 +22,14 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ -#include <x86intrin.h> +/* NB: We need _get_ssp and _inc_ssp from <cetintrin.h>. But we can't + include <x86intrin.h> which ends up including <mm_malloc.h>, which + includes <stdlib.h> and <errno.h> unconditionally. But we can't + include any libc system headers unconditionally from libgcc. Avoid + including <mm_malloc.h> here by defining _IMMINTRIN_H_INCLUDED. */ +#define _IMMINTRIN_H_INCLUDED +#include <cetintrin.h> +#undef _IMMINTRIN_H_INCLUDED /* Unwind the shadow stack for EH. */ #undef _Unwind_Frames_Extra I haven't managed to run it through ./glibc/glibc.sourceware/scripts/build-many-glibcs.py. I did bootstrap and CET tests. Ok for trunk? Igor > -- > Joseph S. Myers > jos...@codesourcery.com