lkml.org 
[lkml]   [2018]   [Nov]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [RFC PATCH 1/3] static_call: Add static call infrastructure
On Sat, 10 Nov 2018 12:58:08 +0100
Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:


> > The complaint is on:
> >
> > DEFINE_STATIC_CALL(__tp_func_##name, __tracepoint_iter_##name);
> >
> > And the previous definition is on:
> >
> > DECLARE_STATIC_CALL(__tp_func_##name, __tracepoint_iter_##name); \
> >
>
> Does the DECLARE really need the __ADDRESSABLE? Its purpose is to
> ensure that symbols with static linkage are not optimized away, but
> since the reference is from a header file, the symbol should have
> external linkage anyway.

I applied the following change and it compiled fine:

diff --git a/include/linux/static_call.h b/include/linux/static_call.h
index 90b580b95303..5f8a0f0e77be 100644
--- a/include/linux/static_call.h
+++ b/include/linux/static_call.h
@@ -108,8 +108,6 @@ extern void arch_static_call_poison_tramp(unsigned long insn);
#define DECLARE_STATIC_CALL(key, func) \
extern struct static_call_key key; \
extern typeof(func) STATIC_CALL_TRAMP(key); \
- /* Preserve the ELF symbol so objtool can access it: */ \
- __ADDRESSABLE(key)

#define DEFINE_STATIC_CALL(key, _func) \
DECLARE_STATIC_CALL(key, _func); \
@@ -117,7 +115,9 @@ extern void arch_static_call_poison_tramp(unsigned long insn);
.func = _func, \
.site_mods = LIST_HEAD_INIT(key.site_mods), \
}; \
- ARCH_STATIC_CALL_TEMPORARY_TRAMP(key)
+ ARCH_STATIC_CALL_TEMPORARY_TRAMP(key); \
+ /* Preserve the ELF symbol so objtool can access it: */ \
+ __ADDRESSABLE(key)

#define static_call(key, args...) STATIC_CALL_TRAMP(key)(args)

Thanks!
-- Steve

\
 
 \ /
  Last update: 2018-11-10 14:10    [from the cache]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and my Meterkast|Read the blog