Skip to content

Commit

Permalink
Suppress incorrect objtool warnings
Browse files Browse the repository at this point in the history
Suppress incorrect warnings from versions of objtool which are not
aware of x86 EVEX prefix instructions used for AVX512.

  module/zfs/vdev_raidz_math_avx512bw.o: warning:
  objtool: <func+offset>: can't find jump dest instruction at .text

Reviewed-by: Don Brady <[email protected]>
Reviewed-by: George Melikov <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes openzfs#6928
  • Loading branch information
behlendorf authored and Nasf-Fan committed Jan 29, 2018
1 parent 9cd5e6d commit 0c9cefc
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 1 deletion.
25 changes: 24 additions & 1 deletion config/kernel-objtool.m4
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,30 @@ AC_DEFUN([ZFS_AC_KERNEL_OBJTOOL], [
#endif
],[
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_KERNEL_OBJTOOL, 1, [kernel does stack verification])
AC_DEFINE(HAVE_KERNEL_OBJTOOL, 1,
[kernel does stack verification])
ZFS_AC_KERNEL_STACK_FRAME_NON_STANDARD
],[
AC_MSG_RESULT(no)
])
])

dnl #
dnl # 4.6 API added STACK_FRAME_NON_STANDARD macro
dnl #
AC_DEFUN([ZFS_AC_KERNEL_STACK_FRAME_NON_STANDARD], [
AC_MSG_CHECKING([whether STACK_FRAME_NON_STANDARD is defined])
ZFS_LINUX_TRY_COMPILE([
#include <linux/frame.h>
],[
#if !defined(STACK_FRAME_NON_STANDARD)
CTASSERT(1);
#endif
],[
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_STACK_FRAME_NON_STANDARD, 1,
[STACK_FRAME_NON_STANDARD is defined])
],[
AC_MSG_RESULT(no)
])
Expand Down
1 change: 1 addition & 0 deletions include/sys/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ COMMON_H = \
$(top_srcdir)/include/sys/dsl_userhold.h \
$(top_srcdir)/include/sys/edonr.h \
$(top_srcdir)/include/sys/efi_partition.h \
$(top_srcdir)/include/sys/frame.h \
$(top_srcdir)/include/sys/hkdf.h \
$(top_srcdir)/include/sys/metaslab.h \
$(top_srcdir)/include/sys/metaslab_impl.h \
Expand Down
36 changes: 36 additions & 0 deletions include/sys/frame.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* CDDL HEADER START
*
* This file and its contents are supplied under the terms of the
* Common Development and Distribution License ("CDDL"), version 1.0.
* You may only use this file in accordance with the terms of version
* 1.0 of the CDDL.
*
* A full copy of the text of the CDDL should have accompanied this
* source. A copy of the CDDL is also available via the Internet at
* http://www.illumos.org/license/CDDL.
*
* CDDL HEADER END
*/
/*
* Copyright (C) 2017 by Lawrence Livermore National Security, LLC.
*/

#ifndef _SYS_FRAME_H
#define _SYS_FRAME_H

#ifdef __cplusplus
extern "C" {
#endif

#if defined(__KERNEL__) && defined(HAVE_STACK_FRAME_NON_STANDARD)
#include <linux/frame.h>
#else
#define STACK_FRAME_NON_STANDARD(func)
#endif

#ifdef __cplusplus
}
#endif

#endif /* _SYS_FRAME_H */
3 changes: 3 additions & 0 deletions module/zcommon/zfs_fletcher_avx512.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

#include <linux/simd_x86.h>
#include <sys/byteorder.h>
#include <sys/frame.h>
#include <sys/spa_checksum.h>
#include <zfs_fletcher.h>
#include <strings.h>
Expand Down Expand Up @@ -107,6 +108,7 @@ fletcher_4_avx512f_native(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size)

kfpu_end();
}
STACK_FRAME_NON_STANDARD(fletcher_4_avx512f_native);

static void
fletcher_4_avx512f_byteswap(fletcher_4_ctx_t *ctx, const void *buf,
Expand Down Expand Up @@ -150,6 +152,7 @@ fletcher_4_avx512f_byteswap(fletcher_4_ctx_t *ctx, const void *buf,

kfpu_end();
}
STACK_FRAME_NON_STANDARD(fletcher_4_avx512f_byteswap);

static boolean_t
fletcher_4_avx512f_valid(void)
Expand Down
5 changes: 5 additions & 0 deletions module/zfs/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,11 @@ $(MODULE)-objs += dsl_destroy.o
$(MODULE)-objs += dsl_userhold.o
$(MODULE)-objs += qat_compress.o

# Suppress incorrect warnings from versions of objtool which are not
# aware of x86 EVEX prefix instructions used for AVX512.
OBJECT_FILES_NON_STANDARD_vdev_raidz_math_avx512bw.o := y
OBJECT_FILES_NON_STANDARD_vdev_raidz_math_avx512f.o := y

$(MODULE)-$(CONFIG_X86) += vdev_raidz_math_sse2.o
$(MODULE)-$(CONFIG_X86) += vdev_raidz_math_ssse3.o
$(MODULE)-$(CONFIG_X86) += vdev_raidz_math_avx2.o
Expand Down

0 comments on commit 0c9cefc

Please sign in to comment.