Silence objtool warnings from 55d7afa4

The use of __noreturn__ in 55d7afa4ad on
spl_panic() caused objtool warnings on Linux when the kernel is built
with CONFIG_STACK_VALIDATION=y. This patch works around that by
restricting the application of __noreturn__ to builds for static
analyzers.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #14068
This commit is contained in:
Richard Yao 2022-10-26 14:57:37 -07:00 committed by GitHub
parent 871d66dbf2
commit eeddd80572
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 1 deletions

View File

@ -54,6 +54,9 @@
/* /*
* Common DEBUG functionality. * Common DEBUG functionality.
*/ */
#if defined(__COVERITY__) || defined(__clang_analyzer__)
__attribute__((__noreturn__))
#endif
extern void spl_panic(const char *file, const char *func, int line, extern void spl_panic(const char *file, const char *func, int line,
const char *fmt, ...) __attribute__((__noreturn__)); const char *fmt, ...) __attribute__((__noreturn__));
extern void spl_dumpstack(void); extern void spl_dumpstack(void);

View File

@ -54,8 +54,21 @@
#define __maybe_unused __attribute__((unused)) #define __maybe_unused __attribute__((unused))
#endif #endif
/*
* Without this, we see warnings from objtool during normal Linux builds when
* the kernel is built with CONFIG_STACK_VALIDATION=y:
*
* warning: objtool: tsd_create() falls through to next function __list_add()
* warning: objtool: .text: unexpected end of section
*
* Until the toolchain stops doing this, we must only define this attribute on
* spl_panic() when doing static analysis.
*/
#if defined(__COVERITY__) || defined(__clang_analyzer__)
__attribute__((__noreturn__))
#endif
extern void spl_panic(const char *file, const char *func, int line, extern void spl_panic(const char *file, const char *func, int line,
const char *fmt, ...) __attribute__((__noreturn__)); const char *fmt, ...);
extern void spl_dumpstack(void); extern void spl_dumpstack(void);
static inline int static inline int