aarch64: Fix segfault on unicode symbols
[deliverable/binutils-gdb.git] / config / cet.m4
CommitLineData
bf41f30d
NC
1dnl
2dnl GCC_CET_FLAGS
3dnl (SHELL-CODE_HANDLER)
4dnl
5AC_DEFUN([GCC_CET_FLAGS],[dnl
56770bda 6GCC_ENABLE(cet, auto, ,[enable Intel CET in target libraries],
37f980dc 7 permit yes|no|auto)
552d4da4
L
8AC_MSG_CHECKING([for CET support])
9
727b7b18 10# NB: Avoid nested save_CFLAGS and save_LDFLAGS.
bf41f30d
NC
11case "$host" in
12 i[[34567]]86-*-linux* | x86_64-*-linux*)
13 case "$enable_cet" in
37f980dc 14 auto)
552d4da4
L
15 # Check if target supports multi-byte NOPs
16 # and if assembler supports CET insn.
727b7b18 17 cet_save_CFLAGS="$CFLAGS"
56770bda 18 CFLAGS="$CFLAGS -fcf-protection"
bf41f30d
NC
19 AC_COMPILE_IFELSE(
20 [AC_LANG_PROGRAM(
21 [],
552d4da4
L
22 [
23#if !defined(__SSE2__)
24#error target does not support multi-byte NOPs
25#else
26asm ("setssbsy");
27#endif
28 ])],
bf41f30d
NC
29 [enable_cet=yes],
30 [enable_cet=no])
727b7b18 31 CFLAGS="$cet_save_CFLAGS"
bf41f30d
NC
32 ;;
33 yes)
34 # Check if assembler supports CET.
35 AC_COMPILE_IFELSE(
36 [AC_LANG_PROGRAM(
37 [],
38 [asm ("setssbsy");])],
39 [],
40 [AC_MSG_ERROR([assembler with CET support is required for --enable-cet])])
41 ;;
42 esac
43 ;;
44 *)
45 enable_cet=no
46 ;;
47esac
48if test x$enable_cet = xyes; then
37f980dc 49 $1="-fcf-protection -mshstk"
552d4da4
L
50 AC_MSG_RESULT([yes])
51else
52 AC_MSG_RESULT([no])
bf41f30d
NC
53fi
54])
87c66b2e
L
55
56dnl
57dnl GCC_CET_HOST_FLAGS
58dnl (SHELL-CODE_HANDLER)
59dnl
60AC_DEFUN([GCC_CET_HOST_FLAGS],[dnl
61GCC_ENABLE(cet, auto, ,[enable Intel CET in host libraries],
62 permit yes|no|auto)
63AC_MSG_CHECKING([for CET support])
64
65case "$host" in
66 i[[34567]]86-*-linux* | x86_64-*-linux*)
67 may_have_cet=yes
727b7b18 68 cet_save_CFLAGS="$CFLAGS"
87c66b2e
L
69 CFLAGS="$CFLAGS -fcf-protection"
70 case "$enable_cet" in
71 auto)
72 # Check if target supports multi-byte NOPs
73 # and if assembler supports CET insn.
74 AC_COMPILE_IFELSE(
75 [AC_LANG_PROGRAM(
76 [],
77 [
78#if !defined(__SSE2__)
79#error target does not support multi-byte NOPs
80#else
81asm ("setssbsy");
82#endif
83 ])],
84 [enable_cet=yes],
85 [enable_cet=no])
86 ;;
87 yes)
88 # Check if assembler supports CET.
89 AC_COMPILE_IFELSE(
90 [AC_LANG_PROGRAM(
91 [],
92 [asm ("setssbsy");])],
93 [],
94 [AC_MSG_ERROR([assembler with CET support is required for --enable-cet])])
95 ;;
96 esac
727b7b18 97 CFLAGS="$cet_save_CFLAGS"
87c66b2e
L
98 ;;
99 *)
100 may_have_cet=no
101 enable_cet=no
102 ;;
103esac
104
727b7b18 105cet_save_CFLAGS="$CFLAGS"
87c66b2e 106CFLAGS="$CFLAGS -fcf-protection=none"
727b7b18 107cet_save_LDFLAGS="$LDFLAGS"
87c66b2e
L
108LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk"
109if test x$may_have_cet = xyes; then
110 # Check whether -fcf-protection=none -Wl,-z,ibt,-z,shstk work.
111 AC_TRY_LINK(
112 [],[return 0;],
113 [may_have_cet=yes],
114 [may_have_cet=no])
115fi
116
117if test x$may_have_cet = xyes; then
90d00bbd
L
118 if test x$cross_compiling = xno; then
119 AC_TRY_RUN([
87c66b2e
L
120static void
121foo (void)
122{
123}
124
125static void
126__attribute__ ((noinline, noclone))
127xxx (void (*f) (void))
128{
129 f ();
130}
131
132static void
133__attribute__ ((noinline, noclone))
134bar (void)
135{
136 xxx (foo);
137}
138
139int
140main ()
141{
142 bar ();
143 return 0;
144}
90d00bbd
L
145 ],
146 [have_cet=no],
147 [have_cet=yes])
148 if test x$enable_cet = xno -a x$have_cet = xyes; then
149 AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host])
150 fi
87c66b2e 151 fi
90d00bbd
L
152else
153 # Enable CET in cross compiler if possible so that it will run on both
154 # CET and non-CET hosts.
155 have_cet=yes
87c66b2e
L
156fi
157if test x$enable_cet = xyes; then
158 $1="-fcf-protection"
159 AC_MSG_RESULT([yes])
160else
161 AC_MSG_RESULT([no])
162fi
727b7b18
L
163CFLAGS="$cet_save_CFLAGS"
164LDFLAGS="$cet_save_LDFLAGS"
87c66b2e 165])
This page took 0.133879 seconds and 4 git commands to generate.