1 #ifndef os 2 # define os(ptr) __builtin_object_size (ptr, 0) 3 #endif 4 5 /* This is one of the alternatives for object size checking. 6 If dst has side-effects, size checking will never be done. */ 7 #undef memcpy 8 #define memcpy(dst, src, len) \ 9 __builtin___memcpy_chk (dst, src, len, os (dst)) 10 #undef mempcpy 11 #define mempcpy(dst, src, len) \ 12 __builtin___mempcpy_chk (dst, src, len, os (dst)) 13 #undef memmove 14 #define memmove(dst, src, len) \ 15 __builtin___memmove_chk (dst, src, len, os (dst)) 16 #undef memset 17 #define memset(dst, val, len) \ 18 __builtin___memset_chk (dst, val, len, os (dst)) 19 #undef strcpy 20 #define strcpy(dst, src) \ 21 __builtin___strcpy_chk (dst, src, os (dst)) 22 #undef stpcpy 23 #define stpcpy(dst, src) \ 24 __builtin___stpcpy_chk (dst, src, os (dst)) 25 #undef strcat 26 #define strcat(dst, src) \ 27 __builtin___strcat_chk (dst, src, os (dst)) 28 #undef strncpy 29 #define strncpy(dst, src, len) \ 30 __builtin___strncpy_chk (dst, src, len, os (dst)) 31 #undef stpncpy 32 #define stpncpy(dst, src, len) \ 33 __builtin___stpncpy_chk (dst, src, len, os (dst)) 34 #undef strncat 35 #define strncat(dst, src, len) \ 36 __builtin___strncat_chk (dst, src, len, os (dst)) 37 #undef sprintf 38 #define sprintf(dst, ...) \ 39 __builtin___sprintf_chk (dst, 0, os (dst), __VA_ARGS__) 40 #undef vsprintf 41 #define vsprintf(dst, fmt, ap) \ 42 __builtin___vsprintf_chk (dst, 0, os (dst), fmt, ap) 43 #undef snprintf 44 #define snprintf(dst, len, ...) \ 45 __builtin___snprintf_chk (dst, len, 0, os (dst), __VA_ARGS__) 46 #undef vsnprintf 47 #define vsnprintf(dst, len, fmt, ap) \ 48 __builtin___vsnprintf_chk (dst, len, 0, os (dst), fmt, ap) 49 50 /* Now "redefine" even builtins for the purpose of testing. */ 51 #undef __builtin_memcpy 52 #define __builtin_memcpy(dst, src, len) memcpy (dst, src, len) 53 #undef __builtin_mempcpy 54 #define __builtin_mempcpy(dst, src, len) mempcpy (dst, src, len) 55 #undef __builtin_memmove 56 #define __builtin_memmove(dst, src, len) memmove (dst, src, len) 57 #undef __builtin_memset 58 #define __builtin_memset(dst, val, len) memset (dst, val, len) 59 #undef __builtin_strcpy 60 #define __builtin_strcpy(dst, src) strcpy (dst, src) 61 #undef __builtin_stpcpy 62 #define __builtin_stpcpy(dst, src) stpcpy (dst, src) 63 #undef __builtin_strcat 64 #define __builtin_strcat(dst, src) strcat (dst, src) 65 #undef __builtin_strncpy 66 #define __builtin_strncpy(dst, src, len) strncpy (dst, src, len) 67 #undef __builtin_strncat 68 #define __builtin_strncat(dst, src, len) strncat (dst, src, len) 69 #undef __builtin_sprintf 70 #define __builtin_sprintf(dst, ...) sprintf (dst, __VA_ARGS__) 71 #undef __builtin_vsprintf 72 #define __builtin_vsprintf(dst, fmt, ap) vsprintf (dst, fmt, ap) 73 #undef __builtin_snprintf 74 #define __builtin_snprintf(dst, len, ...) snprintf (dst, len, __VA_ARGS__) 75 #undef __builtin_vsnprintf 76 #define __builtin_vsnprintf(dst, len, fmt, ap) vsnprintf (dst, len, fmt, ap) 77 78 extern void *chk_fail_buf[]; 79 extern volatile int chk_fail_allowed, chk_calls; 80 extern volatile int memcpy_disallowed, mempcpy_disallowed, memmove_disallowed; 81 extern volatile int memset_disallowed, strcpy_disallowed, stpcpy_disallowed; 82 extern volatile int strncpy_disallowed, stpncpy_disallowed, strcat_disallowed; 83 extern volatile int strncat_disallowed, sprintf_disallowed, vsprintf_disallowed; 84 extern volatile int snprintf_disallowed, vsnprintf_disallowed; 85 86 /* A storage class that ensures that declarations bind locally. We want 87 to test non-static declarations where we know it is safe to do so. */ 88 #if __PIC__ && !__PIE__ 89 #define LOCAL static 90 #else 91 #define LOCAL 92 #endif 93