From 9f29a4d972cf19f74f471a396930de0ae450100a Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Mon, 28 Sep 2020 16:40:50 -0700 Subject: [PATCH] Fix objtool configure check The m4 objtool configure check can incorrectly fail because of a missing header in the test. This appears to be the result of a recent kernel change and was observed on the Fedora 5.8.11-200 kernel. In file included from /home/fedora/zfs/build/objtool/objtool.c:75: ./arch/x86/include/asm/frame.h:100:57: error: 'struct pt_regs' declared inside parameter list will not be visible outside of this definition or declaration [-Werror] The consequence of this is that the "stack_frame_non_standard" check is never run and HAVE_STACK_FRAME_NON_STANDARD is set incorrectly which results in a build failure. This change adds the appropriate header to the "objtool" check so it now behaves as intended. Reviewed-by: Kjeld Schouten Reviewed-by: Tony Hutter Signed-off-by: Brian Behlendorf Closes #10990 --- config/kernel-objtool.m4 | 5 +++-- include/sys/frame.h | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/config/kernel-objtool.m4 b/config/kernel-objtool.m4 index bf60e78692..c560c41954 100644 --- a/config/kernel-objtool.m4 +++ b/config/kernel-objtool.m4 @@ -6,10 +6,11 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_OBJTOOL], [ dnl # 4.6 API for compile-time stack validation ZFS_LINUX_TEST_SRC([objtool], [ #undef __ASSEMBLY__ + #include #include ],[ #if !defined(FRAME_BEGIN) - CTASSERT(1); + #error "FRAME_BEGIN is not defined" #endif ]) @@ -18,7 +19,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_OBJTOOL], [ #include ],[ #if !defined(STACK_FRAME_NON_STANDARD) - CTASSERT(1); + #error "STACK_FRAME_NON_STANDARD is not defined." #endif ]) ]) diff --git a/include/sys/frame.h b/include/sys/frame.h index 2865dbb57d..b6bbaa79b2 100644 --- a/include/sys/frame.h +++ b/include/sys/frame.h @@ -23,7 +23,8 @@ extern "C" { #endif -#if defined(__KERNEL__) && defined(HAVE_STACK_FRAME_NON_STANDARD) +#if defined(__KERNEL__) && defined(HAVE_KERNEL_OBJTOOL) && \ + defined(HAVE_STACK_FRAME_NON_STANDARD) #include #else #define STACK_FRAME_NON_STANDARD(func)