lkml.org 
[lkml]   [2020]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH 11/22] pci: lto: fix PREL32 relocations
    From
    With LTO, the compiler can rename static functions to avoid global
    naming collisions. As PCI fixup functions are typically static,
    renaming can break references to them in inline assembly. This
    change adds a global stub to DECLARE_PCI_FIXUP_SECTION to fix the
    issue when PREL32 relocations are used.

    Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
    ---
    include/linux/pci.h | 15 ++++++++++-----
    1 file changed, 10 insertions(+), 5 deletions(-)

    diff --git a/include/linux/pci.h b/include/linux/pci.h
    index c79d83304e52..1e65e16f165a 100644
    --- a/include/linux/pci.h
    +++ b/include/linux/pci.h
    @@ -1909,19 +1909,24 @@ enum pci_fixup_pass {
    };

    #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
    -#define __DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \
    - class_shift, hook) \
    - __ADDRESSABLE(hook) \
    +#define ___DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \
    + class_shift, hook, stub) \
    + void stub(struct pci_dev *dev) { hook(dev); } \
    asm(".section " #sec ", \"a\" \n" \
    ".balign 16 \n" \
    ".short " #vendor ", " #device " \n" \
    ".long " #class ", " #class_shift " \n" \
    - ".long " #hook " - . \n" \
    + ".long " #stub " - . \n" \
    ".previous \n");
    +
    +#define __DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \
    + class_shift, hook, stub) \
    + ___DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \
    + class_shift, hook, stub)
    #define DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \
    class_shift, hook) \
    __DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \
    - class_shift, hook)
    + class_shift, hook, __UNIQUE_ID(hook))
    #else
    /* Anonymous variables would be nice... */
    #define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, class, \
    --
    2.27.0.212.ge8ba1cc988-goog
    \
     
     \ /
      Last update: 2020-06-24 22:35    [W:4.209 / U:0.456 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site