diff options
Diffstat (limited to 'REORG.TODO/sysdeps/generic/symbol-hacks.h')
-rw-r--r-- | REORG.TODO/sysdeps/generic/symbol-hacks.h | 19 |
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 |