From 3fcd737478217ab3f4cc518fadb20e1931f13dfe Mon Sep 17 00:00:00 2001 From: Adrian Chadd Date: Thu, 15 Oct 2020 13:07:12 -0700 Subject: [PATCH] Fix compiling on FreeBSD + gcc - don't assume illmnos bits This looks like it was once from the illumnos compat code. FreeBSD doesn't have cmn_err as a compiler format attribute, so it definitely errors out. It doesn't show up on LLVM because it doesn't trigger at all. Add in the format flags but keep them behind #if 0 for now; there are too many format issues that trigger when one does format checking in the shared code. Reviewed-by: Brian Behlendorf Reviewed-by: Ryan Moeller Signed-off-by: adrian chadd Closes #11068 Closes #11069 --- include/os/freebsd/spl/sys/ccompile.h | 32 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/include/os/freebsd/spl/sys/ccompile.h b/include/os/freebsd/spl/sys/ccompile.h index cf1e0a8a6..a02e8f098 100644 --- a/include/os/freebsd/spl/sys/ccompile.h +++ b/include/os/freebsd/spl/sys/ccompile.h @@ -48,6 +48,7 @@ extern "C" { #if defined(__ATTRIBUTE_IMPLEMENTED) || defined(__GNUC__) +#if 0 /* * analogous to lint's PRINTFLIKEn */ @@ -56,20 +57,28 @@ extern "C" { #define __sun_attr___VPRINTFLIKE__(__n) \ __attribute__((__format__(printf, __n, 0))) -/* - * Handle the kernel printf routines that can take '%b' too - */ -#if __GNUC_VERSION < 30402 -/* - * XX64 at least this doesn't work correctly yet with 3.4.1 anyway! - */ #define __sun_attr___KPRINTFLIKE__ __sun_attr___PRINTFLIKE__ #define __sun_attr___KVPRINTFLIKE__ __sun_attr___VPRINTFLIKE__ #else -#define __sun_attr___KPRINTFLIKE__(__n) \ - __attribute__((__format__(cmn_err, __n, (__n)+1))) -#define __sun_attr___KVPRINTFLIKE__(__n) \ - __attribute__((__format__(cmn_err, __n, 0))) +/* + * Currently the openzfs codebase has a lot of formatting errors + * which are not picked up in the linux build because they're not + * doing formatting checks. LLVM's kprintf implementation doesn't + * actually do format checks! + * + * For FreeBSD these break under gcc! LLVM shim'ed cmn_err as a + * format attribute but also didn't check anything. If one + * replaces it with the above, all of the format issues + * in the codebase show up. + * + * Once those format string issues are addressed, the above + * should be flipped on once again. + */ +#define __sun_attr___PRINTFLIKE__(__n) +#define __sun_attr___VPRINTFLIKE__(__n) +#define __sun_attr___KPRINTFLIKE__(__n) +#define __sun_attr___KVPRINTFLIKE__(__n) + #endif /* @@ -77,7 +86,6 @@ extern "C" { */ #define __sun_attr___noreturn__ __attribute__((__noreturn__)) - /* * This is an appropriate label for functions that do not * modify their arguments, e.g. strlen()