about summary refs log tree commit diff
path: root/REORG.TODO/sysdeps/generic/symbol-hacks.h
diff options
context:
space:
mode:
Diffstat (limited to 'REORG.TODO/sysdeps/generic/symbol-hacks.h')
-rw-r--r--REORG.TODO/sysdeps/generic/symbol-hacks.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/REORG.TODO/sysdeps/generic/symbol-hacks.h b/REORG.TODO/sysdeps/generic/symbol-hacks.h
new file mode 100644
index 0000000000..d614c099c9
--- /dev/null
+++ b/REORG.TODO/sysdeps/generic/symbol-hacks.h
@@ -0,0 +1,19 @@
+/* Some compiler optimizations may transform loops into memset/memmove
+   calls and without proper declaration it may generate PLT calls.  */
+#if !defined __ASSEMBLER__ && IS_IN (libc) && defined SHARED
+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