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