lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 394/879] linkage: Fix issue with missing symbol size
    Date
    From: Peter Zijlstra <peterz@infradead.org>

    [ Upstream commit 3ff5f7840979aa36d47a6a00694826c78d63bf3c ]

    Occasionally, typically when a function doesn't end with 'ret', an
    alias on that function will have 0 size.

    The difference between what GCC generates and our linkage magic, is
    that GCC doesn't appear to provide .size for the alias'ed symbol at
    all. And indeed, removing this directive cures the issue.

    Additionally, GCC also doesn't emit .type for alias symbols either, so
    also omit that.

    Fixes: e0891269a8c2 ("linkage: add SYM_FUNC_ALIAS{,_LOCAL,_WEAK}()")
    Suggested-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
    Link: https://lore.kernel.org/r/20220506121631.437480085@infradead.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    include/linux/linkage.h | 15 ++++++---------
    1 file changed, 6 insertions(+), 9 deletions(-)

    diff --git a/include/linux/linkage.h b/include/linux/linkage.h
    index acb1ad2356f1..1feab6136b5b 100644
    --- a/include/linux/linkage.h
    +++ b/include/linux/linkage.h
    @@ -171,12 +171,9 @@

    /* SYM_ALIAS -- use only if you have to */
    #ifndef SYM_ALIAS
    -#define SYM_ALIAS(alias, name, sym_type, linkage) \
    - linkage(alias) ASM_NL \
    - .set alias, name ASM_NL \
    - .type alias sym_type ASM_NL \
    - .set .L__sym_size_##alias, .L__sym_size_##name ASM_NL \
    - .size alias, .L__sym_size_##alias
    +#define SYM_ALIAS(alias, name, linkage) \
    + linkage(alias) ASM_NL \
    + .set alias, name ASM_NL
    #endif

    /* === code annotations === */
    @@ -261,7 +258,7 @@
    */
    #ifndef SYM_FUNC_ALIAS
    #define SYM_FUNC_ALIAS(alias, name) \
    - SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_GLOBAL)
    + SYM_ALIAS(alias, name, SYM_L_GLOBAL)
    #endif

    /*
    @@ -269,7 +266,7 @@
    */
    #ifndef SYM_FUNC_ALIAS_LOCAL
    #define SYM_FUNC_ALIAS_LOCAL(alias, name) \
    - SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_LOCAL)
    + SYM_ALIAS(alias, name, SYM_L_LOCAL)
    #endif

    /*
    @@ -277,7 +274,7 @@
    */
    #ifndef SYM_FUNC_ALIAS_WEAK
    #define SYM_FUNC_ALIAS_WEAK(alias, name) \
    - SYM_ALIAS(alias, name, SYM_T_FUNC, SYM_L_WEAK)
    + SYM_ALIAS(alias, name, SYM_L_WEAK)
    #endif

    /* SYM_CODE_START -- use for non-C (special) functions */
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-08 02:19    [W:4.561 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site