2016-12-26 Nick Alcock <nick.alcock@oracle.com>
+ Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ Florian Weimer <fweimer@redhat.com>
+
+ [BZ #7065]
+ PLT avoidance for __stack_chk_fail*.
+ * debug/Makefile (CFLAGS-stack_chk_fail.c)
+ (CFLAGS-stack_chk_fail_local.c): Build without stack protector.
+ * debug/stack_chk_fail.c (__stack_chk_fail): Add
+ __stack_chk_fail_local alias.
+ * sysdeps/generic/symbol-hacks.h [IS_IN (libc)]
+ (__stack_chk_fail): Turn into hidden reference to
+ __stack_chk_fail_local.
+
+2016-12-26 Nick Alcock <nick.alcock@oracle.com>
[BZ #7065]
* configure.ac: Add check for unsupported stack-protection level.
$(static-only-routines)
static-only-routines := warning-nop stack_chk_fail_local
+# Building the stack-protector failure routines with stack protection
+# makes no sense.
+
+CFLAGS-stack_chk_fail.c = $(no-stack-protector)
+CFLAGS-stack_chk_fail_local.c = $(no-stack-protector)
+
CFLAGS-backtrace.c = -fno-omit-frame-pointer
CFLAGS-sprintf_chk.c = $(libio-mtsafe)
CFLAGS-snprintf_chk.c = $(libio-mtsafe)
{
__fortify_fail ("stack smashing detected");
}
+
+strong_alias (__stack_chk_fail, __stack_chk_fail_local)
asm ("memmove = __GI_memmove");
asm ("memset = __GI_memset");
asm ("memcpy = __GI_memcpy");
+
+/* Some targets do not use __stack_chk_fail_local. In libc.so,
+ redirect __stack_chk_fail to a hidden reference
+ __stack_chk_fail_local, to avoid the PLT reference.
+ __stack_chk_fail itself is a global symbol, exported from libc.so,
+ and cannot be made hidden. */
+
+# if IS_IN (libc) && defined SHARED && \
+ defined STACK_PROTECTOR_LEVEL && STACK_PROTECTOR_LEVEL > 0
+asm (".hidden __stack_chk_fail_local\n"
+ "__stack_chk_fail = __stack_chk_fail_local");
+# endif
#endif