xref: /freebsd/sys/contrib/openzfs/config/kernel-objtool.m4 (revision 7877fdebeeb35fad1cbbafce22598b1bdf97c786)
1eda14cbcSMatt Macydnl #
2*7877fdebSMatt Macydnl # Detect objtool functionality.
3*7877fdebSMatt Macydnl #
4*7877fdebSMatt Macy
5*7877fdebSMatt Macydnl #
6*7877fdebSMatt Macydnl # Kernel 5.10: linux/frame.h was renamed linux/objtool.h
7*7877fdebSMatt Macydnl #
8*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_OBJTOOL_HEADER], [
9*7877fdebSMatt Macy	AC_MSG_CHECKING([whether objtool header is available])
10*7877fdebSMatt Macy	ZFS_LINUX_TRY_COMPILE([
11*7877fdebSMatt Macy		#include <linux/objtool.h>
12*7877fdebSMatt Macy	],[
13*7877fdebSMatt Macy	],[
14*7877fdebSMatt Macy		AC_DEFINE(HAVE_KERNEL_OBJTOOL_HEADER, 1,
15*7877fdebSMatt Macy		    [kernel has linux/objtool.h])
16*7877fdebSMatt Macy		AC_MSG_RESULT(linux/objtool.h)
17*7877fdebSMatt Macy	],[
18*7877fdebSMatt Macy		AC_MSG_RESULT(linux/frame.h)
19*7877fdebSMatt Macy	])
20*7877fdebSMatt Macy])
21*7877fdebSMatt Macy
22*7877fdebSMatt Macydnl #
23eda14cbcSMatt Macydnl # Check for objtool support.
24eda14cbcSMatt Macydnl #
25eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_OBJTOOL], [
26eda14cbcSMatt Macy
27eda14cbcSMatt Macy	dnl # 4.6 API for compile-time stack validation
28eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([objtool], [
29eda14cbcSMatt Macy		#undef __ASSEMBLY__
30c40487d4SMatt Macy		#include <asm/ptrace.h>
31eda14cbcSMatt Macy		#include <asm/frame.h>
32eda14cbcSMatt Macy	],[
33eda14cbcSMatt Macy		#if !defined(FRAME_BEGIN)
34c40487d4SMatt Macy		#error "FRAME_BEGIN is not defined"
35eda14cbcSMatt Macy		#endif
36eda14cbcSMatt Macy	])
37eda14cbcSMatt Macy
38eda14cbcSMatt Macy	dnl # 4.6 API added STACK_FRAME_NON_STANDARD macro
39eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([stack_frame_non_standard], [
40*7877fdebSMatt Macy		#ifdef HAVE_KERNEL_OBJTOOL_HEADER
41*7877fdebSMatt Macy		#include <linux/objtool.h>
42*7877fdebSMatt Macy		#else
43eda14cbcSMatt Macy		#include <linux/frame.h>
44*7877fdebSMatt Macy		#endif
45eda14cbcSMatt Macy	],[
46eda14cbcSMatt Macy		#if !defined(STACK_FRAME_NON_STANDARD)
47c40487d4SMatt Macy		#error "STACK_FRAME_NON_STANDARD is not defined."
48eda14cbcSMatt Macy		#endif
49eda14cbcSMatt Macy	])
50eda14cbcSMatt Macy])
51eda14cbcSMatt Macy
52eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_OBJTOOL], [
53eda14cbcSMatt Macy	AC_MSG_CHECKING(
54eda14cbcSMatt Macy	    [whether compile-time stack validation (objtool) is available])
55eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([objtool], [
56eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
57eda14cbcSMatt Macy		AC_DEFINE(HAVE_KERNEL_OBJTOOL, 1,
58eda14cbcSMatt Macy		    [kernel does stack verification])
59eda14cbcSMatt Macy
60eda14cbcSMatt Macy		AC_MSG_CHECKING([whether STACK_FRAME_NON_STANDARD is defined])
61eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT([stack_frame_non_standard], [
62eda14cbcSMatt Macy			AC_MSG_RESULT(yes)
63eda14cbcSMatt Macy			AC_DEFINE(HAVE_STACK_FRAME_NON_STANDARD, 1,
64eda14cbcSMatt Macy			   [STACK_FRAME_NON_STANDARD is defined])
65eda14cbcSMatt Macy		],[
66eda14cbcSMatt Macy			AC_MSG_RESULT(no)
67eda14cbcSMatt Macy		])
68eda14cbcSMatt Macy	],[
69eda14cbcSMatt Macy		AC_MSG_RESULT(no)
70eda14cbcSMatt Macy	])
71eda14cbcSMatt Macy])
72