2 # define os(ptr) __builtin_object_size (ptr, 0)
5 /* This is one of the alternatives for object size checking.
6 If dst has side-effects, size checking will never be done. */
8 #define memcpy(dst, src, len) \
9 __builtin___memcpy_chk (dst, src, len, os (dst))
11 #define mempcpy(dst, src, len) \
12 __builtin___mempcpy_chk (dst, src, len, os (dst))
14 #define memmove(dst, src, len) \
15 __builtin___memmove_chk (dst, src, len, os (dst))
17 #define memset(dst, val, len) \
18 __builtin___memset_chk (dst, val, len, os (dst))
20 #define strcpy(dst, src) \
21 __builtin___strcpy_chk (dst, src, os (dst))
23 #define stpcpy(dst, src) \
24 __builtin___stpcpy_chk (dst, src, os (dst))
26 #define strcat(dst, src) \
27 __builtin___strcat_chk (dst, src, os (dst))
29 #define strncpy(dst, src, len) \
30 __builtin___strncpy_chk (dst, src, len, os (dst))
32 #define strncat(dst, src, len) \
33 __builtin___strncat_chk (dst, src, len, os (dst))
35 #define sprintf(dst, ...) \
36 __builtin___sprintf_chk (dst, 0, os (dst), __VA_ARGS__)
38 #define vsprintf(dst, fmt, ap) \
39 __builtin___vsprintf_chk (dst, 0, os (dst), fmt, ap)
41 #define snprintf(dst, len, ...) \
42 __builtin___snprintf_chk (dst, len, 0, os (dst), __VA_ARGS__)
44 #define vsnprintf(dst, len, fmt, ap) \
45 __builtin___vsnprintf_chk (dst, len, 0, os (dst), fmt, ap)
47 /* Now "redefine" even builtins for the purpose of testing. */
48 #undef __builtin_memcpy
49 #define __builtin_memcpy(dst, src, len) memcpy (dst, src, len)
50 #undef __builtin_mempcpy
51 #define __builtin_mempcpy(dst, src, len) mempcpy (dst, src, len)
52 #undef __builtin_memmove
53 #define __builtin_memmove(dst, src, len) memmove (dst, src, len)
54 #undef __builtin_memset
55 #define __builtin_memset(dst, val, len) memset (dst, val, len)
56 #undef __builtin_strcpy
57 #define __builtin_strcpy(dst, src) strcpy (dst, src)
58 #undef __builtin_stpcpy
59 #define __builtin_stpcpy(dst, src) stpcpy (dst, src)
60 #undef __builtin_strcat
61 #define __builtin_strcat(dst, src) strcat (dst, src)
62 #undef __builtin_strncpy
63 #define __builtin_strncpy(dst, src, len) strncpy (dst, src, len)
64 #undef __builtin_strncat
65 #define __builtin_strncat(dst, src, len) strncat (dst, src, len)
66 #undef __builtin_sprintf
67 #define __builtin_sprintf(dst, ...) sprintf (dst, __VA_ARGS__)
68 #undef __builtin_vsprintf
69 #define __builtin_vsprintf(dst, fmt, ap) vsprintf (dst, fmt, ap)
70 #undef __builtin_snprintf
71 #define __builtin_snprintf(dst, len, ...) snprintf (dst, len, __VA_ARGS__)
72 #undef __builtin_vsnprintf
73 #define __builtin_vsnprintf(dst, len, fmt, ap) vsnprintf (dst, len, fmt, ap)
75 extern void *chk_fail_buf
[];
76 extern volatile int chk_fail_allowed
, chk_calls
;
77 extern volatile int memcpy_disallowed
, mempcpy_disallowed
, memmove_disallowed
;
78 extern volatile int memset_disallowed
, strcpy_disallowed
, stpcpy_disallowed
;
79 extern volatile int strncpy_disallowed
, strcat_disallowed
, strncat_disallowed
;
80 extern volatile int sprintf_disallowed
, vsprintf_disallowed
;
81 extern volatile int snprintf_disallowed
, vsnprintf_disallowed
;