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)
388388
389389 pr_err ("FAIL: survived access of invalid flexible array member index!\n" );
390390
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" ,
393393 lkdtm_kernel_info );
394394 else if (IS_ENABLED (CONFIG_UBSAN_BOUNDS ))
395395 pr_expected_config (CONFIG_UBSAN_TRAP );
Original file line number Diff line number Diff line change 9494# define __copy (symbol )
9595#endif
9696
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-
11097/*
11198 * Optional: not supported by gcc
11299 * 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 {
303303#define __no_sanitize_or_inline __always_inline
304304#endif
305305
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+
306325/* Section for code which can't be instrumented at all */
307326#define __noinstr_section (section ) \
308327 noinline notrace __attribute((__section__(section))) \
Original file line number Diff line number Diff line change @@ -109,6 +109,15 @@ config CC_HAS_ASM_INLINE
109109config CC_HAS_NO_PROFILE_FN_ATTR
110110 def_bool $(success,echo '__attribute__((no_profile_instrument_function)) int x();' | $(CC) -x c - -c -o /dev/null -Werror)
111111
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+
112121config PAHOLE_VERSION
113122 int
114123 default $(shell,$(srctree)/scripts/pahole-version.sh $(PAHOLE))
You can’t perform that action at this time.
0 commit comments