about summary refs log tree commit diff
path: root/sysdeps/generic/symbol-hacks.h
blob: e262a5c1537e80a4daf34dd7832abb18f825ba88 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* 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 \
    && !defined LIBC_NONSHARED
asm ("memmove = __GI_memmove");
asm ("memset = __GI_memset");
asm ("memcpy = __GI_memcpy");

/* clang might generate an abort call when cleanup functions (set by
   __attribute__ ((cleanup)) calls functions not marked as nothrow.
   We can mitigate by marking some internal functions as __THROW,
   but it is not possible for functions that issue used-provided
   callbacks (for instance pthread_once).  */
asm ("abort = __GI_abort");

/* clang might generate the internal fortfify calls when it is enabled,
   through the buitintin.  */
asm ("__vfprintf_chk = __GI___vfprintf_chk");
asm ("__vsprintf_chk = __GI___vsprintf_chk");
asm ("__vsyslog_chk = __GI___vsyslog_chk");
asm ("__memcpy_chk = __GI___memcpy_chk");
asm ("__memmove_chk = __GI___memmove_chk");
asm ("__memset_chk = __GI___memset_chk");
asm ("__mempcpy_chk = __GI___mempcpy_chk");
asm ("__stpcpy_chk = __GI___stpcpy_chk");
asm ("__strcpy_chk = __GI___strcpy_chk");
asm ("strcpy = __GI_strcpy");
asm ("strncpy = __GI_strncpy");
asm ("strcat = __GI_strcat");

/* 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