File tree Expand file tree Collapse file tree 4 files changed +30
-15
lines changed Expand file tree Collapse file tree 4 files changed +30
-15
lines changed Original file line number Diff line number Diff line change @@ -388,8 +388,8 @@ static void lkdtm_FAM_BOUNDS(void)
388
388
389
389
pr_err ("FAIL: survived access of invalid flexible array member index!\n" );
390
390
391
- if (!__has_attribute ( __counted_by__ ))
392
- pr_warn ("This is expected since this %s was built a compiler supporting __counted_by\n" ,
391
+ if (!IS_ENABLED ( CONFIG_CC_HAS_COUNTED_BY ))
392
+ pr_warn ("This is expected since this %s was built with a compiler that does not support __counted_by\n" ,
393
393
lkdtm_kernel_info );
394
394
else if (IS_ENABLED (CONFIG_UBSAN_BOUNDS ))
395
395
pr_expected_config (CONFIG_UBSAN_TRAP );
Original file line number Diff line number Diff line change 94
94
# define __copy (symbol )
95
95
#endif
96
96
97
- /*
98
- * Optional: only supported since gcc >= 14
99
- * Optional: only supported since clang >= 18
100
- *
101
- * gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
102
- * clang: https://reviews.llvm.org/D148381
103
- */
104
- #if __has_attribute (__counted_by__ )
105
- # define __counted_by (member ) __attribute__((__counted_by__(member)))
106
- #else
107
- # define __counted_by (member )
108
- #endif
109
-
110
97
/*
111
98
* Optional: not supported by gcc
112
99
* Optional: only supported since clang >= 14.0
Original file line number Diff line number Diff line change @@ -303,6 +303,25 @@ struct ftrace_likely_data {
303
303
#define __no_sanitize_or_inline __always_inline
304
304
#endif
305
305
306
+ /*
307
+ * Optional: only supported since gcc >= 15
308
+ * Optional: only supported since clang >= 18
309
+ *
310
+ * gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
311
+ * clang: https://github.com/llvm/llvm-project/pull/76348
312
+ *
313
+ * __bdos on clang < 19.1.2 can erroneously return 0:
314
+ * https://github.com/llvm/llvm-project/pull/110497
315
+ *
316
+ * __bdos on clang < 19.1.3 can be off by 4:
317
+ * https://github.com/llvm/llvm-project/pull/112636
318
+ */
319
+ #ifdef CONFIG_CC_HAS_COUNTED_BY
320
+ # define __counted_by (member ) __attribute__((__counted_by__(member)))
321
+ #else
322
+ # define __counted_by (member )
323
+ #endif
324
+
306
325
/* Section for code which can't be instrumented at all */
307
326
#define __noinstr_section (section ) \
308
327
noinline notrace __attribute((__section__(section))) \
Original file line number Diff line number Diff line change @@ -109,6 +109,15 @@ config CC_HAS_ASM_INLINE
109
109
config CC_HAS_NO_PROFILE_FN_ATTR
110
110
def_bool $(success,echo '__attribute__((no_profile_instrument_function)) int x();' | $(CC) -x c - -c -o /dev/null -Werror)
111
111
112
+ config CC_HAS_COUNTED_BY
113
+ # TODO: when gcc 15 is released remove the build test and add
114
+ # a gcc version check
115
+ def_bool $(success,echo 'struct flex { int count; int array[] __attribute__((__counted_by__(count))); };' | $(CC) $(CLANG_FLAGS) -x c - -c -o /dev/null -Werror)
116
+ # clang needs to be at least 19.1.3 to avoid __bdos miscalculations
117
+ # https://github.com/llvm/llvm-project/pull/110497
118
+ # https://github.com/llvm/llvm-project/pull/112636
119
+ depends on !(CC_IS_CLANG && CLANG_VERSION < 190103)
120
+
112
121
config PAHOLE_VERSION
113
122
int
114
123
default $(shell,$(srctree)/scripts/pahole-version.sh $(PAHOLE))
You can’t perform that action at this time.
0 commit comments