diff options
| author | jvoisin | 2023-08-20 19:02:03 +0200 |
|---|---|---|
| committer | jvoisin | 2023-08-20 20:51:19 +0200 |
| commit | bc50ed6c3de76c11b2dde92d0f28dd45941fc327 (patch) | |
| tree | 7cedd350931edc1ebcd23aeefd8cce3a8750c7a8 /include | |
| parent | c17d47669ff12057f732f9ae3f69b22d52b4c6b5 (diff) | |
Fix clang build
- s/CLFAGS/CFLAGS/
- provide paths to local includes
- sprinkle more __pass_object_size__
- remove a problematic test
Diffstat (limited to 'include')
| -rw-r--r-- | include/fortify-headers.h | 8 | ||||
| -rw-r--r-- | include/stdio.h | 13 | ||||
| -rw-r--r-- | include/stdlib.h | 1 |
3 files changed, 14 insertions, 8 deletions
diff --git a/include/fortify-headers.h b/include/fortify-headers.h index dde19a2..18d302b 100644 --- a/include/fortify-headers.h +++ b/include/fortify-headers.h | |||
| @@ -25,7 +25,7 @@ | |||
| 25 | #ifdef __clang__ | 25 | #ifdef __clang__ |
| 26 | 26 | ||
| 27 | /* clang uses overloads; see https://github.com/llvm/llvm-project/issues/53516 */ | 27 | /* clang uses overloads; see https://github.com/llvm/llvm-project/issues/53516 */ |
| 28 | #define _FORTIFY_POSN(n) const __attribute__((__pass_object_size__(n))) | 28 | #define _FORTIFY_POSN(n) const __attribute__((pass_object_size(n))) |
| 29 | /* we can't use extern inline with overloads without making them external */ | 29 | /* we can't use extern inline with overloads without making them external */ |
| 30 | #define _FORTIFY_INLINE static __inline__ \ | 30 | #define _FORTIFY_INLINE static __inline__ \ |
| 31 | __attribute__((__always_inline__,__artificial__,__overloadable__)) | 31 | __attribute__((__always_inline__,__artificial__,__overloadable__)) |
| @@ -38,6 +38,7 @@ | |||
| 38 | 38 | ||
| 39 | #endif /* __clang__ */ | 39 | #endif /* __clang__ */ |
| 40 | 40 | ||
| 41 | /* https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html */ | ||
| 41 | #define _FORTIFY_POS0 _FORTIFY_POSN(0) | 42 | #define _FORTIFY_POS0 _FORTIFY_POSN(0) |
| 42 | #define _FORTIFY_POS1 _FORTIFY_POSN(1) | 43 | #define _FORTIFY_POS1 _FORTIFY_POSN(1) |
| 43 | #define _FORTIFY_POS2 _FORTIFY_POSN(2) | 44 | #define _FORTIFY_POS2 _FORTIFY_POSN(2) |
| @@ -47,7 +48,6 @@ | |||
| 47 | #define _FORTIFY_FNB(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn) | 48 | #define _FORTIFY_FNB(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn) |
| 48 | #define _FORTIFY_FN(fn) _FORTIFY_FNB(fn); _FORTIFY_INLINE | 49 | #define _FORTIFY_FN(fn) _FORTIFY_FNB(fn); _FORTIFY_INLINE |
| 49 | 50 | ||
| 50 | |||
| 51 | /* Use __builtin_dynamic_object_size with _FORTIFY_SOURCE>2, if available. */ | 51 | /* Use __builtin_dynamic_object_size with _FORTIFY_SOURCE>2, if available. */ |
| 52 | #if _FORTIFY_SOURCE > 2 && __has_builtin (__builtin_dynamic_object_size) | 52 | #if _FORTIFY_SOURCE > 2 && __has_builtin (__builtin_dynamic_object_size) |
| 53 | /* | 53 | /* |
| @@ -73,7 +73,11 @@ | |||
| 73 | #endif | 73 | #endif |
| 74 | 74 | ||
| 75 | #if __has_attribute (malloc) | 75 | #if __has_attribute (malloc) |
| 76 | #ifdef __clang__ | ||
| 77 | #define __malloc(...) __attribute__ ((malloc)) | ||
| 78 | #else | ||
| 76 | #define __malloc(...) __attribute__ ((malloc, __VA_ARGS__)) | 79 | #define __malloc(...) __attribute__ ((malloc, __VA_ARGS__)) |
| 80 | #endif /* __clang__ */ | ||
| 77 | #else | 81 | #else |
| 78 | #define __malloc(...) | 82 | #define __malloc(...) |
| 79 | #endif | 83 | #endif |
diff --git a/include/stdio.h b/include/stdio.h index 8cdd826..b31299b 100644 --- a/include/stdio.h +++ b/include/stdio.h | |||
| @@ -36,15 +36,13 @@ extern "C" { | |||
| 36 | #undef fread | 36 | #undef fread |
| 37 | #undef fwrite | 37 | #undef fwrite |
| 38 | #undef popen | 38 | #undef popen |
| 39 | #undef tmpfile | ||
| 40 | #undef snprintf | 39 | #undef snprintf |
| 41 | #undef sprintf | 40 | #undef sprintf |
| 42 | #undef vsnprintf | 41 | #undef vsnprintf |
| 43 | #undef vsprintf | 42 | #undef vsprintf |
| 44 | 43 | ||
| 45 | __access(read_only, 2) | 44 | __access(read_only, 2) |
| 46 | __malloc(malloc (fclose, 1)) | 45 | _FORTIFY_FN(fdopen) FILE *fdopen(int __f, const char* _FORTIFY_POS0 __m) |
| 47 | _FORTIFY_FN(fdopen) FILE *fdopen(int __f, const char* __m) | ||
| 48 | { | 46 | { |
| 49 | return __orig_fdopen(__f, __m); | 47 | return __orig_fdopen(__f, __m); |
| 50 | } | 48 | } |
| @@ -60,7 +58,7 @@ _FORTIFY_FN(fgets) char *fgets(char * _FORTIFY_POS0 __s, int __n, FILE *__f) | |||
| 60 | } | 58 | } |
| 61 | 59 | ||
| 62 | __malloc(malloc (fclose, 1)) | 60 | __malloc(malloc (fclose, 1)) |
| 63 | _FORTIFY_FN(fmemopen) FILE *fmemopen(void* __b, size_t __s, const char* __m) | 61 | _FORTIFY_FN(fmemopen) FILE *fmemopen(void* _FORTIFY_POS0 __b, size_t __s, const char* _FORTIFY_POS0 __m) |
| 64 | { | 62 | { |
| 65 | return __orig_fmemopen(__b, __s, __m); | 63 | return __orig_fmemopen(__b, __s, __m); |
| 66 | } | 64 | } |
| @@ -68,7 +66,7 @@ _FORTIFY_FN(fmemopen) FILE *fmemopen(void* __b, size_t __s, const char* __m) | |||
| 68 | __access(read_only, 1) | 66 | __access(read_only, 1) |
| 69 | __access(read_only, 2) | 67 | __access(read_only, 2) |
| 70 | __malloc(malloc (fclose, 1)) | 68 | __malloc(malloc (fclose, 1)) |
| 71 | _FORTIFY_FN(fopen) FILE *fopen(const char* __p, const char* __m) | 69 | _FORTIFY_FN(fopen) FILE *fopen(const char* _FORTIFY_POS0 __p, const char* _FORTIFY_POS0 __m) |
| 72 | { | 70 | { |
| 73 | return __orig_fopen(__p, __m); | 71 | return __orig_fopen(__p, __m); |
| 74 | } | 72 | } |
| @@ -100,16 +98,19 @@ _FORTIFY_FN(fwrite) size_t fwrite(const void * _FORTIFY_POS0 __d, size_t __n, | |||
| 100 | } | 98 | } |
| 101 | 99 | ||
| 102 | __malloc(malloc (pclose, 1)) | 100 | __malloc(malloc (pclose, 1)) |
| 103 | _FORTIFY_FN(popen) FILE *popen(const char* __c, const char* __t) | 101 | _FORTIFY_FN(popen) FILE *popen(const char* _FORTIFY_POS0 __c, const char* _FORTIFY_POS0 __t) |
| 104 | { | 102 | { |
| 105 | return __orig_popen(__c, __t); | 103 | return __orig_popen(__c, __t); |
| 106 | } | 104 | } |
| 107 | 105 | ||
| 106 | #ifndef __clang__ /* FIXME */ | ||
| 107 | #undef tmpfile | ||
| 108 | __malloc(malloc (fclose, 1)) | 108 | __malloc(malloc (fclose, 1)) |
| 109 | _FORTIFY_FN(tmpfile) FILE *tmpfile(void) | 109 | _FORTIFY_FN(tmpfile) FILE *tmpfile(void) |
| 110 | { | 110 | { |
| 111 | return __orig_tmpfile(); | 111 | return __orig_tmpfile(); |
| 112 | } | 112 | } |
| 113 | #endif | ||
| 113 | 114 | ||
| 114 | __access(read_write, 1, 2) | 115 | __access(read_write, 1, 2) |
| 115 | _FORTIFY_FN(vsnprintf) int vsnprintf(char * _FORTIFY_POS0 __s, size_t __n, | 116 | _FORTIFY_FN(vsnprintf) int vsnprintf(char * _FORTIFY_POS0 __s, size_t __n, |
diff --git a/include/stdlib.h b/include/stdlib.h index 6914f02..3f3c3ba 100644 --- a/include/stdlib.h +++ b/include/stdlib.h | |||
| @@ -38,6 +38,7 @@ extern "C" { | |||
| 38 | 38 | ||
| 39 | #undef malloc | 39 | #undef malloc |
| 40 | #undef realloc | 40 | #undef realloc |
| 41 | #undef calloc | ||
| 41 | 42 | ||
| 42 | __malloc(malloc (free, 1)) | 43 | __malloc(malloc (free, 1)) |
| 43 | __alloc_size(1) | 44 | __alloc_size(1) |
