@@ -2,6 +2,24 @@
#include <test_progs.h>
#include "get_func_ip_test.skel.h"
+/* assume IBT is enabled when kernel configs are not available */
+#ifdef HAVE_GENHDR
+# include "autoconf.h"
+#else
+# define CONFIG_X86_KERNEL_IBT 1
+#endif
+
+/* test6 and test7 are x86_64 specific because of the instruction
+ * offset, disabling it for all other archs
+ *
+ * CONFIG_X86_KERNEL_IBT adds endbr instruction at function entry,
+ * so disabling test6 and test7, because the offset is hardcoded
+ * in program section
+ */
+#if !defined(__x86_64__) || defined(CONFIG_X86_KERNEL_IBT)
+#define DISABLE_OFFSET_ATTACH 1
+#endif
+
void test_get_func_ip_test(void)
{
struct get_func_ip_test *skel = NULL;
@@ -12,10 +30,7 @@ void test_get_func_ip_test(void)
if (!ASSERT_OK_PTR(skel, "get_func_ip_test__open"))
return;
- /* test6 is x86_64 specifc because of the instruction
- * offset, disabling it for all other archs
- */
-#ifndef __x86_64__
+#if defined(DISABLE_OFFSET_ATTACH)
bpf_program__set_autoload(skel->progs.test6, false);
bpf_program__set_autoload(skel->progs.test7, false);
#endif
@@ -43,7 +58,7 @@ void test_get_func_ip_test(void)
ASSERT_EQ(skel->bss->test3_result, 1, "test3_result");
ASSERT_EQ(skel->bss->test4_result, 1, "test4_result");
ASSERT_EQ(skel->bss->test5_result, 1, "test5_result");
-#ifdef __x86_64__
+#if !defined(DISABLE_OFFSET_ATTACH)
ASSERT_EQ(skel->bss->test6_result, 1, "test6_result");
ASSERT_EQ(skel->bss->test7_result, 1, "test7_result");
#endif
Attach like 'kprobe/bpf_fentry_test6+0x5' will fail to attach when CONFIG_X86_KERNEL_IBT option is enabled because of the endbr instruction at the function entry. We would need to do manual attach with offset calculation based on the CONFIG_X86_KERNEL_IBT option, which does not seem worth the effort to me. Disabling these test when CONFIG_X86_KERNEL_IBT is enabled. Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- .../bpf/prog_tests/get_func_ip_test.c | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-)