Skip to content

Commit

Permalink
Fix compiling on FreeBSD + gcc - don't assume illmnos bits
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Ryan Moeller <[email protected]>
Signed-off-by: adrian chadd <[email protected]>
Closes #11068
Closes #11069
  • Loading branch information
Adrian Chadd authored and behlendorf committed Nov 10, 2020
1 parent 79a357c commit 3fcd737
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions include/os/freebsd/spl/sys/ccompile.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ extern "C" {

#if defined(__ATTRIBUTE_IMPLEMENTED) || defined(__GNUC__)

#if 0
/*
* analogous to lint's PRINTFLIKEn
*/
Expand All @@ -56,28 +57,35 @@ 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

/*
* This one's pretty obvious -- the function never returns
*/
#define __sun_attr___noreturn__ __attribute__((__noreturn__))


/*
* This is an appropriate label for functions that do not
* modify their arguments, e.g. strlen()
Expand Down

0 comments on commit 3fcd737

Please sign in to comment.