Re: [PATCH v2] module: use relative references for __ksymtab entries

From: kbuild test robot
Date: Sun Aug 06 2017 - 11:10:26 EST


Hi Ard,

[auto build test ERROR on linus/master]
[also build test ERROR on v4.13-rc3 next-20170804]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Ard-Biesheuvel/module-use-relative-references-for-__ksymtab-entries/20170806-205309
config: x86_64-allyesdebian (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

All error/warnings (new ones prefixed by >>):

In file included from include/asm-generic/percpu.h:6:0,
from arch/x86/include/asm/percpu.h:542,
from arch/x86/include/asm/preempt.h:5,
from include/linux/preempt.h:80,
from include/linux/spinlock.h:50,
from include/linux/mmzone.h:7,
from include/linux/gfp.h:5,
from include/linux/slab.h:14,
from kernel/fork.c:14:
>> include/linux/percpu-defs.h:92:26: error: __pcpu_unique_cached_stacks causes a section type conflict with __discard_lockdep_tasklist_lock_is_held
__PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
^
include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
DEFINE_PER_CPU_SECTION(type, name, "")
^~~~~~~~~~~~~~~~~~~~~~
kernel/fork.c:181:8: note: in expansion of macro 'DEFINE_PER_CPU'
static DEFINE_PER_CPU(struct vm_struct *, cached_stacks[NR_CACHED_STACKS]);
^~~~~~~~~~~~~~
In file included from include/linux/linkage.h:6:0,
from include/linux/kernel.h:6,
from include/asm-generic/bug.h:15,
from arch/x86/include/asm/bug.h:81,
from include/linux/bug.h:4,
from include/linux/mmdebug.h:4,
from include/linux/gfp.h:4,
from include/linux/slab.h:14,
from kernel/fork.c:14:
include/linux/export.h:71:4: note: '__discard_lockdep_tasklist_lock_is_held' was declared here
__discard_##sym(void) { return (void *)&sym; } \
^
include/linux/export.h:104:25: note: in expansion of macro '___EXPORT_SYMBOL'
#define __EXPORT_SYMBOL ___EXPORT_SYMBOL
^~~~~~~~~~~~~~~~
include/linux/export.h:111:2: note: in expansion of macro '__EXPORT_SYMBOL'
__EXPORT_SYMBOL(sym, "_gpl")
^~~~~~~~~~~~~~~
kernel/fork.c:131:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
EXPORT_SYMBOL_GPL(lockdep_tasklist_lock_is_held);
^~~~~~~~~~~~~~~~~
--
In file included from include/asm-generic/percpu.h:6:0,
from arch/x86/include/asm/percpu.h:542,
from arch/x86/include/asm/preempt.h:5,
from include/linux/preempt.h:80,
from include/linux/spinlock.h:50,
from include/linux/mmzone.h:7,
from include/linux/gfp.h:5,
from include/linux/slab.h:14,
from mm/slab.c:89:
>> include/linux/percpu-defs.h:92:26: error: __pcpu_unique_slab_reap_node causes a section type conflict with __discard_kmem_cache_alloc
__PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
^
include/linux/percpu-defs.h:116:2: note: in expansion of macro 'DEFINE_PER_CPU_SECTION'
DEFINE_PER_CPU_SECTION(type, name, "")
^~~~~~~~~~~~~~~~~~~~~~
>> mm/slab.c:524:8: note: in expansion of macro 'DEFINE_PER_CPU'
static DEFINE_PER_CPU(unsigned long, slab_reap_node);
^~~~~~~~~~~~~~
In file included from include/linux/linkage.h:6:0,
from include/linux/kernel.h:6,
from include/asm-generic/bug.h:15,
from arch/x86/include/asm/bug.h:81,
from include/linux/bug.h:4,
from include/linux/mmdebug.h:4,
from include/linux/gfp.h:4,
from include/linux/slab.h:14,
from mm/slab.c:89:
include/linux/export.h:71:4: note: '__discard_kmem_cache_alloc' was declared here
__discard_##sym(void) { return (void *)&sym; } \
^
include/linux/export.h:104:25: note: in expansion of macro '___EXPORT_SYMBOL'
#define __EXPORT_SYMBOL ___EXPORT_SYMBOL
^~~~~~~~~~~~~~~~
include/linux/export.h:108:2: note: in expansion of macro '__EXPORT_SYMBOL'
__EXPORT_SYMBOL(sym, "")
^~~~~~~~~~~~~~~
mm/slab.c:3567:1: note: in expansion of macro 'EXPORT_SYMBOL'
EXPORT_SYMBOL(kmem_cache_alloc);
^~~~~~~~~~~~~

vim +92 include/linux/percpu-defs.h

62fde541 Tejun Heo 2014-06-17 37
5028eaa9 David Howells 2009-04-21 38 /*
5028eaa9 David Howells 2009-04-21 39 * Base implementations of per-CPU variable declarations and definitions, where
5028eaa9 David Howells 2009-04-21 40 * the section in which the variable is to be placed is provided by the
7c756e6e Tejun Heo 2009-06-24 41 * 'sec' argument. This may be used to affect the parameters governing the
5028eaa9 David Howells 2009-04-21 42 * variable's storage.
5028eaa9 David Howells 2009-04-21 43 *
5028eaa9 David Howells 2009-04-21 44 * NOTE! The sections for the DECLARE and for the DEFINE must match, lest
5028eaa9 David Howells 2009-04-21 45 * linkage errors occur due the compiler generating the wrong code to access
5028eaa9 David Howells 2009-04-21 46 * that section.
5028eaa9 David Howells 2009-04-21 47 */
7c756e6e Tejun Heo 2009-06-24 48 #define __PCPU_ATTRS(sec) \
e0fdb0e0 Rusty Russell 2009-10-29 49 __percpu __attribute__((section(PER_CPU_BASE_SECTION sec))) \
7c756e6e Tejun Heo 2009-06-24 50 PER_CPU_ATTRIBUTES
7c756e6e Tejun Heo 2009-06-24 51
7c756e6e Tejun Heo 2009-06-24 52 #define __PCPU_DUMMY_ATTRS \
7c756e6e Tejun Heo 2009-06-24 53 __attribute__((section(".discard"), unused))
7c756e6e Tejun Heo 2009-06-24 54
7c756e6e Tejun Heo 2009-06-24 55 /*
7c756e6e Tejun Heo 2009-06-24 56 * s390 and alpha modules require percpu variables to be defined as
7c756e6e Tejun Heo 2009-06-24 57 * weak to force the compiler to generate GOT based external
7c756e6e Tejun Heo 2009-06-24 58 * references for them. This is necessary because percpu sections
7c756e6e Tejun Heo 2009-06-24 59 * will be located outside of the usually addressable area.
7c756e6e Tejun Heo 2009-06-24 60 *
7c756e6e Tejun Heo 2009-06-24 61 * This definition puts the following two extra restrictions when
7c756e6e Tejun Heo 2009-06-24 62 * defining percpu variables.
7c756e6e Tejun Heo 2009-06-24 63 *
7c756e6e Tejun Heo 2009-06-24 64 * 1. The symbol must be globally unique, even the static ones.
7c756e6e Tejun Heo 2009-06-24 65 * 2. Static percpu variables cannot be defined inside a function.
7c756e6e Tejun Heo 2009-06-24 66 *
7c756e6e Tejun Heo 2009-06-24 67 * Archs which need weak percpu definitions should define
7c756e6e Tejun Heo 2009-06-24 68 * ARCH_NEEDS_WEAK_PER_CPU in asm/percpu.h when necessary.
7c756e6e Tejun Heo 2009-06-24 69 *
7c756e6e Tejun Heo 2009-06-24 70 * To ensure that the generic code observes the above two
7c756e6e Tejun Heo 2009-06-24 71 * restrictions, if CONFIG_DEBUG_FORCE_WEAK_PER_CPU is set weak
7c756e6e Tejun Heo 2009-06-24 72 * definition is used for all cases.
7c756e6e Tejun Heo 2009-06-24 73 */
7c756e6e Tejun Heo 2009-06-24 74 #if defined(ARCH_NEEDS_WEAK_PER_CPU) || defined(CONFIG_DEBUG_FORCE_WEAK_PER_CPU)
7c756e6e Tejun Heo 2009-06-24 75 /*
7c756e6e Tejun Heo 2009-06-24 76 * __pcpu_scope_* dummy variable is used to enforce scope. It
7c756e6e Tejun Heo 2009-06-24 77 * receives the static modifier when it's used in front of
7c756e6e Tejun Heo 2009-06-24 78 * DEFINE_PER_CPU() and will trigger build failure if
7c756e6e Tejun Heo 2009-06-24 79 * DECLARE_PER_CPU() is used for the same variable.
7c756e6e Tejun Heo 2009-06-24 80 *
7c756e6e Tejun Heo 2009-06-24 81 * __pcpu_unique_* dummy variable is used to enforce symbol uniqueness
7c756e6e Tejun Heo 2009-06-24 82 * such that hidden weak symbol collision, which will cause unrelated
7c756e6e Tejun Heo 2009-06-24 83 * variables to share the same address, can be detected during build.
7c756e6e Tejun Heo 2009-06-24 84 */
7c756e6e Tejun Heo 2009-06-24 85 #define DECLARE_PER_CPU_SECTION(type, name, sec) \
7c756e6e Tejun Heo 2009-06-24 86 extern __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \
dd17c8f7 Rusty Russell 2009-10-29 87 extern __PCPU_ATTRS(sec) __typeof__(type) name
7c756e6e Tejun Heo 2009-06-24 88
7c756e6e Tejun Heo 2009-06-24 89 #define DEFINE_PER_CPU_SECTION(type, name, sec) \
7c756e6e Tejun Heo 2009-06-24 90 __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \
0f5e4816 Tejun Heo 2009-10-29 91 extern __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
7c756e6e Tejun Heo 2009-06-24 @92 __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
b1a0fbfd Tejun Heo 2013-12-04 93 extern __PCPU_ATTRS(sec) __typeof__(type) name; \
c43768cb Tejun Heo 2009-07-04 94 __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES __weak \
dd17c8f7 Rusty Russell 2009-10-29 95 __typeof__(type) name
7c756e6e Tejun Heo 2009-06-24 96 #else
7c756e6e Tejun Heo 2009-06-24 97 /*
7c756e6e Tejun Heo 2009-06-24 98 * Normal declaration and definition macros.
7c756e6e Tejun Heo 2009-06-24 99 */
7c756e6e Tejun Heo 2009-06-24 100 #define DECLARE_PER_CPU_SECTION(type, name, sec) \
dd17c8f7 Rusty Russell 2009-10-29 101 extern __PCPU_ATTRS(sec) __typeof__(type) name
7c756e6e Tejun Heo 2009-06-24 102

:::::: The code at line 92 was first introduced by commit
:::::: 7c756e6e19e71f0327760d8955f7077118ebb2b1 percpu: implement optional weak percpu definitions

:::::: TO: Tejun Heo <tj@xxxxxxxxxx>
:::::: CC: Tejun Heo <tj@xxxxxxxxxx>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip