Merge commit 3fcd73747 from openzfs git (by Adrian Chadd):

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 <behlendorf1@llnl.gov>
  Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
  Signed-off-by: adrian chadd <adrian@freebsd.org>
  Closes #11068
  Closes #11069
This commit is contained in:
Ryan Libby 2020-12-27 14:33:13 -08:00
parent 913f2d2e0c
commit e67d933d9c

View File

@ -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()