]> Git Repo - linux.git/commitdiff
Merge tag 'modules-for-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/jeyu...
authorLinus Torvalds <[email protected]>
Tue, 23 Feb 2021 18:15:33 +0000 (10:15 -0800)
committerLinus Torvalds <[email protected]>
Tue, 23 Feb 2021 18:15:33 +0000 (10:15 -0800)
Pull module updates from Jessica Yu:

 - Retire EXPORT_UNUSED_SYMBOL() and EXPORT_SYMBOL_GPL_FUTURE(). These
   export types were introduced between 2006 - 2008. All the of the
   unused symbols have been long removed and gpl future symbols were
   converted to gpl quite a long time ago, and I don't believe these
   export types have been used ever since. So, I think it should be safe
   to retire those export types now (Christoph Hellwig)

 - Refactor and clean up some aged code cruft in the module loader
   (Christoph Hellwig)

 - Build {,module_}kallsyms_on_each_symbol only when livepatching is
   enabled, as it is the only caller (Christoph Hellwig)

 - Unexport find_module() and module_mutex and fix the last module
   callers to not rely on these anymore. Make module_mutex internal to
   the module loader (Christoph Hellwig)

 - Harden ELF checks on module load and validate ELF structures before
   checking the module signature (Frank van der Linden)

 - Fix undefined symbol warning for clang (Fangrui Song)

 - Fix smatch warning (Dan Carpenter)

* tag 'modules-for-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux:
  module: potential uninitialized return in module_kallsyms_on_each_symbol()
  module: remove EXPORT_UNUSED_SYMBOL*
  module: remove EXPORT_SYMBOL_GPL_FUTURE
  module: move struct symsearch to module.c
  module: pass struct find_symbol_args to find_symbol
  module: merge each_symbol_section into find_symbol
  module: remove each_symbol_in_section
  module: mark module_mutex static
  kallsyms: only build {,module_}kallsyms_on_each_symbol when required
  kallsyms: refactor {,module_}kallsyms_on_each_symbol
  module: use RCU to synchronize find_module
  module: unexport find_module and module_mutex
  drm: remove drm_fb_helper_modinit
  powerpc/powernv: remove get_cxl_module
  module: harden ELF info handling
  module: Ignore _GLOBAL_OFFSET_TABLE_ when warning for undefined symbols

14 files changed:
1  2 
arch/arm/configs/bcm2835_defconfig
arch/powerpc/configs/ppc6xx_defconfig
arch/s390/configs/debug_defconfig
arch/s390/configs/defconfig
arch/sh/configs/sdk7780_defconfig
arch/x86/tools/relocs.c
drivers/gpu/drm/drm_fb_helper.c
include/asm-generic/vmlinux.lds.h
init/Kconfig
kernel/trace/trace_kprobe.c
scripts/checkpatch.pl
scripts/mod/modpost.c
scripts/mod/modpost.h
scripts/module.lds.S

index 1ef2bc4c7f69d421d37b39da3dfcbdfe44403db4,d6c6c2e031c43a2e6c68b69ec3e2c6e89de00dcd..383c632eba7bd7b17597fd680fa1cb7a9805e9ef
@@@ -21,6 -21,7 +21,6 @@@ CONFIG_KALLSYMS_ALL=
  CONFIG_EMBEDDED=y
  # CONFIG_COMPAT_BRK is not set
  CONFIG_PROFILING=y
 -CONFIG_OPROFILE=y
  CONFIG_JUMP_LABEL=y
  CONFIG_CC_STACKPROTECTOR_REGULAR=y
  CONFIG_MODULES=y
@@@ -176,7 -177,6 +176,6 @@@ CONFIG_BOOT_PRINTK_DELAY=
  CONFIG_DYNAMIC_DEBUG=y
  CONFIG_DEBUG_INFO=y
  # CONFIG_ENABLE_MUST_CHECK is not set
- CONFIG_UNUSED_SYMBOLS=y
  CONFIG_DEBUG_MEMORY_INIT=y
  CONFIG_LOCKUP_DETECTOR=y
  CONFIG_SCHED_TRACER=y
index 10c055eaebf06b9c3af4d48ec4b090f9cc371ae1,34c3859040f9f7826e70b5a5fb702a6328364856..6677ac0da45a5ec036c19a5f0418e0448a0fcd4a
@@@ -19,6 -19,7 +19,6 @@@ CONFIG_USER_NS=
  CONFIG_BLK_DEV_INITRD=y
  # CONFIG_COMPAT_BRK is not set
  CONFIG_PROFILING=y
 -CONFIG_OPROFILE=m
  CONFIG_KPROBES=y
  CONFIG_MODULES=y
  CONFIG_MODULE_UNLOAD=y
@@@ -1071,7 -1072,6 +1071,6 @@@ CONFIG_NLS_ISO8859_15=
  CONFIG_NLS_KOI8_R=m
  CONFIG_NLS_KOI8_U=m
  CONFIG_DEBUG_INFO=y
- CONFIG_UNUSED_SYMBOLS=y
  CONFIG_HEADERS_INSTALL=y
  CONFIG_MAGIC_SYSRQ=y
  CONFIG_DEBUG_KERNEL=y
index 6896b4213c49cf589a431ce8b65adb58e433e5e3,58e54d17e3154b81172a967c4934dac0f6bd39dc..02056b024091eb95ade5612922fa1616e9077b3d
@@@ -40,7 -40,6 +40,7 @@@ CONFIG_USERFAULTFD=
  # CONFIG_COMPAT_BRK is not set
  CONFIG_PROFILING=y
  CONFIG_LIVEPATCH=y
 +CONFIG_MARCH_ZEC12=y
  CONFIG_TUNE_ZEC12=y
  CONFIG_NR_CPUS=512
  CONFIG_NUMA=y
@@@ -58,6 -57,7 +58,6 @@@ CONFIG_CMM=
  CONFIG_APPLDATA_BASE=y
  CONFIG_KVM=m
  CONFIG_S390_UNWIND_SELFTEST=y
 -CONFIG_OPROFILE=m
  CONFIG_KPROBES=y
  CONFIG_JUMP_LABEL=y
  CONFIG_STATIC_KEYS_SELFTEST=y
@@@ -71,7 -71,6 +71,6 @@@ CONFIG_MODULE_FORCE_UNLOAD=
  CONFIG_MODVERSIONS=y
  CONFIG_MODULE_SRCVERSION_ALL=y
  CONFIG_MODULE_SIG_SHA256=y
- CONFIG_UNUSED_SYMBOLS=y
  CONFIG_BLK_DEV_INTEGRITY=y
  CONFIG_BLK_DEV_THROTTLING=y
  CONFIG_BLK_WBT=y
@@@ -177,17 -176,13 +176,17 @@@ CONFIG_NF_CONNTRACK_TFTP=
  CONFIG_NF_CT_NETLINK=m
  CONFIG_NF_CT_NETLINK_TIMEOUT=m
  CONFIG_NF_TABLES=m
 +CONFIG_NF_TABLES_INET=y
  CONFIG_NFT_CT=m
  CONFIG_NFT_COUNTER=m
  CONFIG_NFT_LOG=m
  CONFIG_NFT_LIMIT=m
  CONFIG_NFT_NAT=m
 +CONFIG_NFT_OBJREF=m
 +CONFIG_NFT_REJECT=m
  CONFIG_NFT_COMPAT=m
  CONFIG_NFT_HASH=m
 +CONFIG_NFT_FIB_INET=m
  CONFIG_NETFILTER_XT_SET=m
  CONFIG_NETFILTER_XT_TARGET_AUDIT=m
  CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
@@@ -279,7 -274,6 +278,7 @@@ CONFIG_IP_VS_NQ=
  CONFIG_IP_VS_FTP=m
  CONFIG_IP_VS_PE_SIP=m
  CONFIG_NF_TABLES_IPV4=y
 +CONFIG_NFT_FIB_IPV4=m
  CONFIG_NF_TABLES_ARP=y
  CONFIG_IP_NF_IPTABLES=m
  CONFIG_IP_NF_MATCH_AH=m
@@@ -300,7 -294,6 +299,7 @@@ CONFIG_IP_NF_ARPTABLES=
  CONFIG_IP_NF_ARPFILTER=m
  CONFIG_IP_NF_ARP_MANGLE=m
  CONFIG_NF_TABLES_IPV6=y
 +CONFIG_NFT_FIB_IPV6=m
  CONFIG_IP6_NF_IPTABLES=m
  CONFIG_IP6_NF_MATCH_AH=m
  CONFIG_IP6_NF_MATCH_EUI64=m
@@@ -636,6 -629,7 +635,6 @@@ CONFIG_NTFS_RW=
  CONFIG_PROC_KCORE=y
  CONFIG_TMPFS=y
  CONFIG_TMPFS_POSIX_ACL=y
 -CONFIG_TMPFS_INODE64=y
  CONFIG_HUGETLBFS=y
  CONFIG_CONFIGFS_FS=m
  CONFIG_ECRYPT_FS=m
@@@ -797,8 -791,6 +796,8 @@@ CONFIG_DEBUG_OBJECTS_RCU_HEAD=
  CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
  CONFIG_SLUB_DEBUG_ON=y
  CONFIG_SLUB_STATS=y
 +CONFIG_DEBUG_KMEMLEAK=y
 +CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
  CONFIG_DEBUG_STACK_USAGE=y
  CONFIG_DEBUG_VM=y
  CONFIG_DEBUG_VM_VMACACHE=y
@@@ -839,6 -831,7 +838,6 @@@ CONFIG_BPF_KPROBE_OVERRIDE=
  CONFIG_HIST_TRIGGERS=y
  CONFIG_FTRACE_STARTUP_TEST=y
  # CONFIG_EVENT_TRACE_STARTUP_TEST is not set
 -CONFIG_DEBUG_USER_ASCE=y
  CONFIG_NOTIFIER_ERROR_INJECTION=m
  CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
  CONFIG_FAULT_INJECTION=y
@@@ -862,4 -855,3 +861,4 @@@ CONFIG_PERCPU_TEST=
  CONFIG_ATOMIC64_SELFTEST=y
  CONFIG_TEST_BITOPS=m
  CONFIG_TEST_BPF=m
 +CONFIG_DEBUG_ENTRY=y
index ef4df9d60d6af4d52ef544ac48d2902933eab855,b5e62c0d3e23e04a8c0915b0b195cbc599dedb11..bac721a501da16a47313922369f4a61fff427a18
@@@ -38,7 -38,6 +38,7 @@@ CONFIG_USERFAULTFD=
  # CONFIG_COMPAT_BRK is not set
  CONFIG_PROFILING=y
  CONFIG_LIVEPATCH=y
 +CONFIG_MARCH_ZEC12=y
  CONFIG_TUNE_ZEC12=y
  CONFIG_NR_CPUS=512
  CONFIG_NUMA=y
@@@ -56,6 -55,7 +56,6 @@@ CONFIG_CMM=
  CONFIG_APPLDATA_BASE=y
  CONFIG_KVM=m
  CONFIG_S390_UNWIND_SELFTEST=m
 -CONFIG_OPROFILE=m
  CONFIG_KPROBES=y
  CONFIG_JUMP_LABEL=y
  # CONFIG_GCC_PLUGINS is not set
@@@ -66,7 -66,6 +66,6 @@@ CONFIG_MODULE_FORCE_UNLOAD=
  CONFIG_MODVERSIONS=y
  CONFIG_MODULE_SRCVERSION_ALL=y
  CONFIG_MODULE_SIG_SHA256=y
- CONFIG_UNUSED_SYMBOLS=y
  CONFIG_BLK_DEV_THROTTLING=y
  CONFIG_BLK_WBT=y
  CONFIG_BLK_CGROUP_IOLATENCY=y
@@@ -168,17 -167,13 +167,17 @@@ CONFIG_NF_CONNTRACK_TFTP=
  CONFIG_NF_CT_NETLINK=m
  CONFIG_NF_CT_NETLINK_TIMEOUT=m
  CONFIG_NF_TABLES=m
 +CONFIG_NF_TABLES_INET=y
  CONFIG_NFT_CT=m
  CONFIG_NFT_COUNTER=m
  CONFIG_NFT_LOG=m
  CONFIG_NFT_LIMIT=m
  CONFIG_NFT_NAT=m
 +CONFIG_NFT_OBJREF=m
 +CONFIG_NFT_REJECT=m
  CONFIG_NFT_COMPAT=m
  CONFIG_NFT_HASH=m
 +CONFIG_NFT_FIB_INET=m
  CONFIG_NETFILTER_XT_SET=m
  CONFIG_NETFILTER_XT_TARGET_AUDIT=m
  CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
@@@ -270,7 -265,6 +269,7 @@@ CONFIG_IP_VS_NQ=
  CONFIG_IP_VS_FTP=m
  CONFIG_IP_VS_PE_SIP=m
  CONFIG_NF_TABLES_IPV4=y
 +CONFIG_NFT_FIB_IPV4=m
  CONFIG_NF_TABLES_ARP=y
  CONFIG_IP_NF_IPTABLES=m
  CONFIG_IP_NF_MATCH_AH=m
@@@ -291,7 -285,6 +290,7 @@@ CONFIG_IP_NF_ARPTABLES=
  CONFIG_IP_NF_ARPFILTER=m
  CONFIG_IP_NF_ARP_MANGLE=m
  CONFIG_NF_TABLES_IPV6=y
 +CONFIG_NFT_FIB_IPV6=m
  CONFIG_IP6_NF_IPTABLES=m
  CONFIG_IP6_NF_MATCH_AH=m
  CONFIG_IP6_NF_MATCH_EUI64=m
@@@ -624,6 -617,7 +623,6 @@@ CONFIG_NTFS_RW=
  CONFIG_PROC_KCORE=y
  CONFIG_TMPFS=y
  CONFIG_TMPFS_POSIX_ACL=y
 -CONFIG_TMPFS_INODE64=y
  CONFIG_HUGETLBFS=y
  CONFIG_CONFIGFS_FS=m
  CONFIG_ECRYPT_FS=m
@@@ -785,6 -779,7 +784,6 @@@ CONFIG_FTRACE_SYSCALLS=
  CONFIG_BLK_DEV_IO_TRACE=y
  CONFIG_BPF_KPROBE_OVERRIDE=y
  CONFIG_HIST_TRIGGERS=y
 -CONFIG_DEBUG_USER_ASCE=y
  CONFIG_LKDTM=m
  CONFIG_PERCPU_TEST=m
  CONFIG_ATOMIC64_SELFTEST=y
index d00376eb044f8ab45c1bfaf44e1be3922011fa7b,d53c4595fb2e98b284a5f88959b5e61e1dd93628..6c719ab4332ac9eba787eaff34310db8f8bc27bc
@@@ -44,14 -44,16 +44,14 @@@ CONFIG_NET_SCHED=
  CONFIG_PARPORT=y
  CONFIG_BLK_DEV_LOOP=y
  CONFIG_BLK_DEV_RAM=y
 -CONFIG_IDE=y
 -CONFIG_BLK_DEV_IDECD=y
 -CONFIG_BLK_DEV_PLATFORM=y
 -CONFIG_BLK_DEV_GENERIC=y
  CONFIG_BLK_DEV_SD=y
  CONFIG_BLK_DEV_SR=y
  CONFIG_CHR_DEV_SG=y
  CONFIG_SCSI_SPI_ATTRS=y
  CONFIG_SCSI_FC_ATTRS=y
  CONFIG_ATA=y
 +CONFIG_ATA_GENERIC=y
 +CONFIG_PATA_PLATFORM=y
  CONFIG_MD=y
  CONFIG_BLK_DEV_DM=y
  CONFIG_NETDEVICES=y
@@@ -128,7 -130,6 +128,6 @@@ CONFIG_NLS_ISO8859_15=
  CONFIG_NLS_UTF8=y
  # CONFIG_ENABLE_MUST_CHECK is not set
  CONFIG_MAGIC_SYSRQ=y
- CONFIG_UNUSED_SYMBOLS=y
  CONFIG_DEBUG_KERNEL=y
  CONFIG_DETECT_HUNG_TASK=y
  # CONFIG_SCHED_DEBUG is not set
diff --combined arch/x86/tools/relocs.c
index 1c3a1962cade65db5fac4951743c39fb962b2362,b9c577a3cacca6b6419b687c384456382e510744..04c5a44b968276ec3975acbe035acce8a438572d
@@@ -61,8 -61,8 +61,8 @@@ static const char * const sym_regex_ker
        "(__iommu_table|__apicdrivers|__smp_locks)(|_end)|"
        "__(start|end)_pci_.*|"
        "__(start|end)_builtin_fw|"
-       "__(start|stop)___ksymtab(|_gpl|_unused|_unused_gpl|_gpl_future)|"
-       "__(start|stop)___kcrctab(|_gpl|_unused|_unused_gpl|_gpl_future)|"
+       "__(start|stop)___ksymtab(|_gpl)|"
+       "__(start|stop)___kcrctab(|_gpl)|"
        "__(start|stop)___param|"
        "__(start|stop)___modver|"
        "__(start|stop)___bug_table|"
@@@ -867,11 -867,9 +867,11 @@@ static int do_reloc32(struct section *s
        case R_386_PC32:
        case R_386_PC16:
        case R_386_PC8:
 +      case R_386_PLT32:
                /*
 -               * NONE can be ignored and PC relative relocations don't
 -               * need to be adjusted.
 +               * NONE can be ignored and PC relative relocations don't need
 +               * to be adjusted. Because sym must be defined, R_386_PLT32 can
 +               * be treated the same way as R_386_PC32.
                 */
                break;
  
@@@ -912,11 -910,9 +912,11 @@@ static int do_reloc_real(struct sectio
        case R_386_PC32:
        case R_386_PC16:
        case R_386_PC8:
 +      case R_386_PLT32:
                /*
 -               * NONE can be ignored and PC relative relocations don't
 -               * need to be adjusted.
 +               * NONE can be ignored and PC relative relocations don't need
 +               * to be adjusted. Because sym must be defined, R_386_PLT32 can
 +               * be treated the same way as R_386_PC32.
                 */
                break;
  
index a44c3a4380592746ccb57ff33f68a1d3c2e797a6,0b9f1ae1b7864c17857764fa44bc38f2d2b7a61e..b9a616737c0ee2e90b0cfc3bb3674f1004e7b3e2
@@@ -946,15 -946,11 +946,15 @@@ static int setcmap_legacy(struct fb_cma
        drm_modeset_lock_all(fb_helper->dev);
        drm_client_for_each_modeset(modeset, &fb_helper->client) {
                crtc = modeset->crtc;
 -              if (!crtc->funcs->gamma_set || !crtc->gamma_size)
 -                      return -EINVAL;
 +              if (!crtc->funcs->gamma_set || !crtc->gamma_size) {
 +                      ret = -EINVAL;
 +                      goto out;
 +              }
  
 -              if (cmap->start + cmap->len > crtc->gamma_size)
 -                      return -EINVAL;
 +              if (cmap->start + cmap->len > crtc->gamma_size) {
 +                      ret = -EINVAL;
 +                      goto out;
 +              }
  
                r = crtc->gamma_store;
                g = r + crtc->gamma_size;
                ret = crtc->funcs->gamma_set(crtc, r, g, b,
                                             crtc->gamma_size, NULL);
                if (ret)
 -                      return ret;
 +                      goto out;
        }
 +out:
        drm_modeset_unlock_all(fb_helper->dev);
  
        return ret;
@@@ -1059,11 -1054,6 +1059,11 @@@ retry
                        goto out_state;
                }
  
 +              /*
 +               * FIXME: This always uses gamma_lut. Some HW have only
 +               * degamma_lut, in which case we should reset gamma_lut and set
 +               * degamma_lut. See drm_crtc_legacy_gamma_set().
 +               */
                replaced  = drm_property_replace_blob(&crtc_state->degamma_lut,
                                                      NULL);
                replaced |= drm_property_replace_blob(&crtc_state->ctm, NULL);
@@@ -2496,11 -2486,6 +2496,11 @@@ void drm_fbdev_generic_setup(struct drm
                return;
        }
  
 +      /*
 +       * FIXME: This mixes up depth with bpp, which results in a glorious
 +       * mess, resulting in some drivers picking wrong fbdev defaults and
 +       * others wrong preferred_depth defaults.
 +       */
        if (!preferred_bpp)
                preferred_bpp = dev->mode_config.preferred_depth;
        if (!preferred_bpp)
        drm_client_register(&fb_helper->client);
  }
  EXPORT_SYMBOL(drm_fbdev_generic_setup);
- /* The Kconfig DRM_KMS_HELPER selects FRAMEBUFFER_CONSOLE (if !EXPERT)
-  * but the module doesn't depend on any fb console symbols.  At least
-  * attempt to load fbcon to avoid leaving the system without a usable console.
-  */
- int __init drm_fb_helper_modinit(void)
- {
- #if defined(CONFIG_FRAMEBUFFER_CONSOLE_MODULE) && !defined(CONFIG_EXPERT)
-       const char name[] = "fbcon";
-       struct module *fbcon;
-       mutex_lock(&module_mutex);
-       fbcon = find_module(name);
-       mutex_unlock(&module_mutex);
-       if (!fbcon)
-               request_module_nowait(name);
- #endif
-       return 0;
- }
- EXPORT_SYMBOL(drm_fb_helper_modinit);
index d4bddfe75e4a975d0e26de70a62897e346185cf3,1fa338ac6a54776883df5ccc802d5ad2030e8035..c54adce8f6f6ba99caa13c75d8161773d5122a5a
   * .data. We don't want to pull in .data..other sections, which Linux
   * has defined. Same for text and bss.
   *
 + * With LTO_CLANG, the linker also splits sections by default, so we need
 + * these macros to combine the sections during the final link.
 + *
   * RODATA_MAIN is not used because existing code already defines .rodata.x
   * sections to be brought in with rodata.
   */
 -#ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
 +#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG)
  #define TEXT_MAIN .text .text.[0-9a-zA-Z_]*
 -#define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..LPBX*
 +#define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..L* .data..compoundliteral* .data.$__unnamed_* .data.$Lubsan_*
  #define SDATA_MAIN .sdata .sdata.[0-9a-zA-Z_]*
 -#define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]*
 -#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]*
 +#define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]* .rodata..L*
 +#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]* .bss..compoundliteral*
  #define SBSS_MAIN .sbss .sbss.[0-9a-zA-Z_]*
  #else
  #define TEXT_MAIN .text
  #define THERMAL_TABLE(name)
  #endif
  
 +#ifdef CONFIG_DTPM
 +#define DTPM_TABLE()                                                  \
 +      . = ALIGN(8);                                                   \
 +      __dtpm_table = .;                                               \
 +      KEEP(*(__dtpm_table))                                           \
 +      __dtpm_table_end = .;
 +#else
 +#define DTPM_TABLE()
 +#endif
 +
  #define KERNEL_DTB()                                                  \
        STRUCT_ALIGN();                                                 \
        __dtb_start = .;                                                \
        . = ALIGN(8);                                                   \
        __start_static_call_sites = .;                                  \
        KEEP(*(.static_call_sites))                                     \
 -      __stop_static_call_sites = .;
 +      __stop_static_call_sites = .;                                   \
 +      __start_static_call_tramp_key = .;                              \
 +      KEEP(*(.static_call_tramp_key))                                 \
 +      __stop_static_call_tramp_key = .;
  
  /*
   * Allow architectures to handle ro_after_init data on their
        }                                                               \
                                                                        \
        /* Built-in firmware blobs */                                   \
 -      .builtin_fw        : AT(ADDR(.builtin_fw) - LOAD_OFFSET) {      \
 +      .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) ALIGN(8) {    \
                __start_builtin_fw = .;                                 \
                KEEP(*(.builtin_fw))                                    \
                __end_builtin_fw = .;                                   \
                __stop___ksymtab_gpl = .;                               \
        }                                                               \
                                                                        \
-       /* Kernel symbol table: Normal unused symbols */                \
-       __ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {  \
-               __start___ksymtab_unused = .;                           \
-               KEEP(*(SORT(___ksymtab_unused+*)))                      \
-               __stop___ksymtab_unused = .;                            \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-only unused symbols */              \
-       __ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
-               __start___ksymtab_unused_gpl = .;                       \
-               KEEP(*(SORT(___ksymtab_unused_gpl+*)))                  \
-               __stop___ksymtab_unused_gpl = .;                        \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-future-only symbols */              \
-       __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
-               __start___ksymtab_gpl_future = .;                       \
-               KEEP(*(SORT(___ksymtab_gpl_future+*)))                  \
-               __stop___ksymtab_gpl_future = .;                        \
-       }                                                               \
-                                                                       \
        /* Kernel symbol table: Normal symbols */                       \
        __kcrctab         : AT(ADDR(__kcrctab) - LOAD_OFFSET) {         \
                __start___kcrctab = .;                                  \
                __stop___kcrctab_gpl = .;                               \
        }                                                               \
                                                                        \
-       /* Kernel symbol table: Normal unused symbols */                \
-       __kcrctab_unused  : AT(ADDR(__kcrctab_unused) - LOAD_OFFSET) {  \
-               __start___kcrctab_unused = .;                           \
-               KEEP(*(SORT(___kcrctab_unused+*)))                      \
-               __stop___kcrctab_unused = .;                            \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-only unused symbols */              \
-       __kcrctab_unused_gpl : AT(ADDR(__kcrctab_unused_gpl) - LOAD_OFFSET) { \
-               __start___kcrctab_unused_gpl = .;                       \
-               KEEP(*(SORT(___kcrctab_unused_gpl+*)))                  \
-               __stop___kcrctab_unused_gpl = .;                        \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-future-only symbols */              \
-       __kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \
-               __start___kcrctab_gpl_future = .;                       \
-               KEEP(*(SORT(___kcrctab_gpl_future+*)))                  \
-               __stop___kcrctab_gpl_future = .;                        \
-       }                                                               \
-                                                                       \
        /* Kernel symbol table: strings */                              \
          __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {       \
                *(__ksymtab_strings)                                    \
        ACPI_PROBE_TABLE(irqchip)                                       \
        ACPI_PROBE_TABLE(timer)                                         \
        THERMAL_TABLE(governor)                                         \
 +      DTPM_TABLE()                                                    \
        EARLYCON_TABLE()                                                \
        LSM_TABLE()                                                     \
        EARLY_LSM_TABLE()                                               \
diff --combined init/Kconfig
index 57f859ea79b9e21a91ce81b5e2e5d46a026d1c4d,11b803b45c19959f8546e8e2db0ae9d76cb7eb7e..8a2c0e41f1bb8545bb6c18089104631601554929
@@@ -76,6 -76,7 +76,6 @@@ config CC_HAS_ASM_INLIN
  
  config CONSTRUCTORS
        bool
 -      depends on !UML
  
  config IRQ_WORK
        bool
@@@ -524,7 -525,7 +524,7 @@@ config SCHED_THERMAL_PRESSUR
          i.e. put less load on throttled CPUs than on non/less throttled ones.
  
          This requires the architecture to implement
 -        arch_set_thermal_pressure() and arch_get_thermal_pressure().
 +        arch_set_thermal_pressure() and arch_scale_thermal_pressure().
  
  config BSD_PROCESS_ACCT
        bool "BSD Process Accounting"
@@@ -1193,7 -1194,6 +1193,7 @@@ endif # NAMESPACE
  config CHECKPOINT_RESTORE
        bool "Checkpoint/restore support"
        select PROC_CHILDREN
 +      select KCMP
        default n
        help
          Enables additional kernel features in a sake of checkpoint/restore.
@@@ -1737,16 -1737,6 +1737,16 @@@ config ARCH_HAS_MEMBARRIER_CALLBACK
  config ARCH_HAS_MEMBARRIER_SYNC_CORE
        bool
  
 +config KCMP
 +      bool "Enable kcmp() system call" if EXPERT
 +      help
 +        Enable the kernel resource comparison system call. It provides
 +        user-space with the ability to compare two processes to see if they
 +        share a common resource, such as a file descriptor or even virtual
 +        memory space.
 +
 +        If unsure, say N.
 +
  config RSEQ
        bool "Enable rseq() system call" if EXPERT
        default y
@@@ -2034,7 -2024,7 +2034,7 @@@ config PROFILIN
        bool "Profiling support"
        help
          Say Y here to enable the extended profiling support mechanisms used
 -        by profilers such as OProfile.
 +        by profilers.
  
  #
  # Place an empty function call at each tracepoint site. Can be
@@@ -2272,25 -2262,8 +2272,8 @@@ config MODULE_ALLOW_MISSING_NAMESPACE_I
  
          If unsure, say N.
  
- config UNUSED_SYMBOLS
-       bool "Enable unused/obsolete exported symbols"
-       default y if X86
-       help
-         Unused but exported symbols make the kernel needlessly bigger.  For
-         that reason most of these unused exports will soon be removed.  This
-         option is provided temporarily to provide a transition period in case
-         some external kernel module needs one of these symbols anyway. If you
-         encounter such a case in your module, consider if you are actually
-         using the right API.  (rationale: since nobody in the kernel is using
-         this in a module, there is a pretty good chance it's actually the
-         wrong interface to use).  If you really need the symbol, please send a
-         mail to the linux kernel mailing list mentioning the symbol and why
-         you really need it, and what the merge plan to the mainline kernel for
-         your module is.
  config TRIM_UNUSED_KSYMS
        bool "Trim unused exported kernel symbols"
-       depends on !UNUSED_SYMBOLS
        help
          The kernel and some modules make many symbols available for
          other modules to use via EXPORT_SYMBOL() and variants. Depending
  config UNUSED_KSYMS_WHITELIST
        string "Whitelist of symbols to keep in ksymtab"
        depends on TRIM_UNUSED_KSYMS
 +      default "scripts/lto-used-symbollist.txt" if LTO_CLANG
        help
          By default, all unused exported symbols will be un-exported from the
          build when TRIM_UNUSED_KSYMS is selected.
index 8a1cb0878cbcf19c539bd432313bd841863a6fe0,3137992baa5e7a1aea6b195323328575053ccf56..6fe770d86dc34f6e7294e826b800efbb0069875e
@@@ -35,7 -35,7 +35,7 @@@ static int __init set_kprobe_boot_event
  }
  __setup("kprobe_event=", set_kprobe_boot_events);
  
 -static int trace_kprobe_create(int argc, const char **argv);
 +static int trace_kprobe_create(const char *raw_command);
  static int trace_kprobe_show(struct seq_file *m, struct dyn_event *ev);
  static int trace_kprobe_release(struct dyn_event *ev);
  static bool trace_kprobe_is_busy(struct dyn_event *ev);
@@@ -124,9 -124,9 +124,9 @@@ static nokprobe_inline bool trace_kprob
        if (!p)
                return true;
        *p = '\0';
-       mutex_lock(&module_mutex);
+       rcu_read_lock_sched();
        ret = !!find_module(tk->symbol);
-       mutex_unlock(&module_mutex);
+       rcu_read_unlock_sched();
        *p = ':';
  
        return ret;
@@@ -221,9 -221,9 +221,9 @@@ bool trace_kprobe_on_func_entry(struct 
  {
        struct trace_kprobe *tk = trace_kprobe_primary_from_call(call);
  
 -      return tk ? kprobe_on_func_entry(tk->rp.kp.addr,
 +      return tk ? (kprobe_on_func_entry(tk->rp.kp.addr,
                        tk->rp.kp.addr ? NULL : tk->rp.kp.symbol_name,
 -                      tk->rp.kp.addr ? 0 : tk->rp.kp.offset) : false;
 +                      tk->rp.kp.addr ? 0 : tk->rp.kp.offset) == 0) : false;
  }
  
  bool trace_kprobe_error_injectable(struct trace_event_call *call)
@@@ -711,7 -711,7 +711,7 @@@ static inline void sanitize_event_name(
                        *name = '_';
  }
  
 -static int trace_kprobe_create(int argc, const char *argv[])
 +static int __trace_kprobe_create(int argc, const char *argv[])
  {
        /*
         * Argument syntax:
                }
                if (is_return)
                        flags |= TPARG_FL_RETURN;
 -              if (kprobe_on_func_entry(NULL, symbol, offset))
 +              ret = kprobe_on_func_entry(NULL, symbol, offset);
 +              if (ret == 0)
                        flags |= TPARG_FL_FENTRY;
 -              if (offset && is_return && !(flags & TPARG_FL_FENTRY)) {
 +              /* Defer the ENOENT case until register kprobe */
 +              if (ret == -EINVAL && is_return) {
                        trace_probe_log_err(0, BAD_RETPROBE);
                        goto parse_error;
                }
@@@ -910,25 -908,20 +910,25 @@@ error
        goto out;
  }
  
 -static int create_or_delete_trace_kprobe(int argc, char **argv)
 +static int trace_kprobe_create(const char *raw_command)
 +{
 +      return trace_probe_create(raw_command, __trace_kprobe_create);
 +}
 +
 +static int create_or_delete_trace_kprobe(const char *raw_command)
  {
        int ret;
  
 -      if (argv[0][0] == '-')
 -              return dyn_event_release(argc, argv, &trace_kprobe_ops);
 +      if (raw_command[0] == '-')
 +              return dyn_event_release(raw_command, &trace_kprobe_ops);
  
 -      ret = trace_kprobe_create(argc, (const char **)argv);
 +      ret = trace_kprobe_create(raw_command);
        return ret == -ECANCELED ? -EINVAL : ret;
  }
  
  static int trace_kprobe_run_command(struct dynevent_cmd *cmd)
  {
 -      return trace_run_command(cmd->seq.buffer, create_or_delete_trace_kprobe);
 +      return create_or_delete_trace_kprobe(cmd->seq.buffer);
  }
  
  /**
@@@ -1089,7 -1082,7 +1089,7 @@@ int kprobe_event_delete(const char *nam
  
        snprintf(buf, MAX_EVENT_NAME_LEN, "-:%s", name);
  
 -      return trace_run_command(buf, create_or_delete_trace_kprobe);
 +      return create_or_delete_trace_kprobe(buf);
  }
  EXPORT_SYMBOL_GPL(kprobe_event_delete);
  
@@@ -1391,7 -1384,8 +1391,7 @@@ __kprobe_trace_func(struct trace_kprob
        if (trace_trigger_soft_disabled(trace_file))
                return;
  
 -      local_save_flags(fbuffer.flags);
 -      fbuffer.pc = preempt_count();
 +      fbuffer.trace_ctx = tracing_gen_ctx();
        fbuffer.trace_file = trace_file;
  
        dsize = __get_data_size(&tk->tp, regs);
                trace_event_buffer_lock_reserve(&fbuffer.buffer, trace_file,
                                        call->event.type,
                                        sizeof(*entry) + tk->tp.size + dsize,
 -                                      fbuffer.flags, fbuffer.pc);
 +                                      fbuffer.trace_ctx);
        if (!fbuffer.event)
                return;
  
@@@ -1438,7 -1432,8 +1438,7 @@@ __kretprobe_trace_func(struct trace_kpr
        if (trace_trigger_soft_disabled(trace_file))
                return;
  
 -      local_save_flags(fbuffer.flags);
 -      fbuffer.pc = preempt_count();
 +      fbuffer.trace_ctx = tracing_gen_ctx();
        fbuffer.trace_file = trace_file;
  
        dsize = __get_data_size(&tk->tp, regs);
                trace_event_buffer_lock_reserve(&fbuffer.buffer, trace_file,
                                        call->event.type,
                                        sizeof(*entry) + tk->tp.size + dsize,
 -                                      fbuffer.flags, fbuffer.pc);
 +                                      fbuffer.trace_ctx);
        if (!fbuffer.event)
                return;
  
@@@ -1891,7 -1886,7 +1891,7 @@@ static __init void setup_boot_kprobe_ev
                if (p)
                        *p++ = '\0';
  
 -              ret = trace_run_command(cmd, create_or_delete_trace_kprobe);
 +              ret = create_or_delete_trace_kprobe(cmd);
                if (ret)
                        pr_warn("Failed to add event(%d): %s\n", ret, cmd);
  
@@@ -1985,7 -1980,8 +1985,7 @@@ static __init int kprobe_trace_self_tes
  
        pr_info("Testing kprobe tracing: ");
  
 -      ret = trace_run_command("p:testprobe kprobe_trace_selftest_target $stack $stack0 +0($stack)",
 -                              create_or_delete_trace_kprobe);
 +      ret = create_or_delete_trace_kprobe("p:testprobe kprobe_trace_selftest_target $stack $stack0 +0($stack)");
        if (WARN_ON_ONCE(ret)) {
                pr_warn("error on probing function entry.\n");
                warn++;
                }
        }
  
 -      ret = trace_run_command("r:testprobe2 kprobe_trace_selftest_target $retval",
 -                              create_or_delete_trace_kprobe);
 +      ret = create_or_delete_trace_kprobe("r:testprobe2 kprobe_trace_selftest_target $retval");
        if (WARN_ON_ONCE(ret)) {
                pr_warn("error on probing function return.\n");
                warn++;
                                trace_probe_event_call(&tk->tp), file);
        }
  
 -      ret = trace_run_command("-:testprobe", create_or_delete_trace_kprobe);
 +      ret = create_or_delete_trace_kprobe("-:testprobe");
        if (WARN_ON_ONCE(ret)) {
                pr_warn("error on deleting a probe.\n");
                warn++;
        }
  
 -      ret = trace_run_command("-:testprobe2", create_or_delete_trace_kprobe);
 +      ret = create_or_delete_trace_kprobe("-:testprobe2");
        if (WARN_ON_ONCE(ret)) {
                pr_warn("error on deleting a probe.\n");
                warn++;
diff --combined scripts/checkpatch.pl
index 4b2775fd31d9d982d17a276c361a9d682f03aee3,eabd2d5467b156af25fb9724fdbd09e054323129..ca4201753d5ef05ef8553623f8b95b0a5c61d2b5
@@@ -3390,6 -3390,13 +3390,6 @@@ sub process 
                        }
                }
  
 -# discourage the use of boolean for type definition attributes of Kconfig options
 -              if ($realfile =~ /Kconfig/ &&
 -                  $line =~ /^\+\s*\bboolean\b/) {
 -                      WARN("CONFIG_TYPE_BOOLEAN",
 -                           "Use of boolean is deprecated, please use bool instead.\n" . $herecurr);
 -              }
 -
                if (($realfile =~ /Makefile.*/ || $realfile =~ /Kbuild.*/) &&
                    ($line =~ /\+(EXTRA_[A-Z]+FLAGS).*/)) {
                        my $flag = $1;
                if (defined $realline_next &&
                    exists $lines[$realline_next - 1] &&
                    !defined $suppress_export{$realline_next} &&
-                   ($lines[$realline_next - 1] =~ /EXPORT_SYMBOL.*\((.*)\)/ ||
-                    $lines[$realline_next - 1] =~ /EXPORT_UNUSED_SYMBOL.*\((.*)\)/)) {
+                   ($lines[$realline_next - 1] =~ /EXPORT_SYMBOL.*\((.*)\)/)) {
                        # Handle definitions which produce identifiers with
                        # a prefix:
                        #   XXX(foo);
                }
                if (!defined $suppress_export{$linenr} &&
                    $prevline =~ /^.\s*$/ &&
-                   ($line =~ /EXPORT_SYMBOL.*\((.*)\)/ ||
-                    $line =~ /EXPORT_UNUSED_SYMBOL.*\((.*)\)/)) {
+                   ($line =~ /EXPORT_SYMBOL.*\((.*)\)/)) {
  #print "FOO B <$lines[$linenr - 1]>\n";
                        $suppress_export{$linenr} = 2;
                }
                        }
                }
  
 -# check for mutex_trylock_recursive usage
 -              if ($line =~ /mutex_trylock_recursive/) {
 -                      ERROR("LOCKING",
 -                            "recursive locking is bad, do not use this ever.\n" . $herecurr);
 -              }
 -
  # check for lockdep_set_novalidate_class
                if ($line =~ /^.\s*lockdep_set_novalidate_class\s*\(/ ||
                    $line =~ /__lockdep_no_validate__\s*\)/ ) {
diff --combined scripts/mod/modpost.c
index be0642126f535609ad717d02faa16393242fb668,20fc57837881abfa624e12110c521c7f251d5181..24725e50c7b4b181f2b5bce1c9e9fd4ca18774f1
@@@ -17,6 -17,7 +17,6 @@@
  #include <ctype.h>
  #include <string.h>
  #include <limits.h>
 -#include <stdbool.h>
  #include <errno.h>
  #include "modpost.h"
  #include "../../include/linux/license.h"
@@@ -42,8 -43,9 +42,9 @@@ static int allow_missing_ns_imports
  static bool error_occurred;
  
  enum export {
-       export_plain,      export_unused,     export_gpl,
-       export_unused_gpl, export_gpl_future, export_unknown
+       export_plain,
+       export_gpl,
+       export_unknown
  };
  
  /* In kernel, this size is defined in linux/module.h;
@@@ -83,6 -85,14 +84,6 @@@ modpost_log(enum loglevel loglevel, con
                error_occurred = true;
  }
  
 -static inline bool strends(const char *str, const char *postfix)
 -{
 -      if (strlen(str) < strlen(postfix))
 -              return false;
 -
 -      return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
 -}
 -
  void *do_nofail(void *ptr, const char *expr)
  {
        if (!ptr)
@@@ -292,10 -302,7 +293,7 @@@ static const struct 
        enum export export;
  } export_list[] = {
        { .str = "EXPORT_SYMBOL",            .export = export_plain },
-       { .str = "EXPORT_UNUSED_SYMBOL",     .export = export_unused },
        { .str = "EXPORT_SYMBOL_GPL",        .export = export_gpl },
-       { .str = "EXPORT_UNUSED_SYMBOL_GPL", .export = export_unused_gpl },
-       { .str = "EXPORT_SYMBOL_GPL_FUTURE", .export = export_gpl_future },
        { .str = "(unknown)",                .export = export_unknown },
  };
  
@@@ -354,14 -361,8 +352,8 @@@ static enum export export_from_secname(
  
        if (strstarts(secname, "___ksymtab+"))
                return export_plain;
-       else if (strstarts(secname, "___ksymtab_unused+"))
-               return export_unused;
        else if (strstarts(secname, "___ksymtab_gpl+"))
                return export_gpl;
-       else if (strstarts(secname, "___ksymtab_unused_gpl+"))
-               return export_unused_gpl;
-       else if (strstarts(secname, "___ksymtab_gpl_future+"))
-               return export_gpl_future;
        else
                return export_unknown;
  }
@@@ -370,14 -371,8 +362,8 @@@ static enum export export_from_sec(stru
  {
        if (sec == elf->export_sec)
                return export_plain;
-       else if (sec == elf->export_unused_sec)
-               return export_unused;
        else if (sec == elf->export_gpl_sec)
                return export_gpl;
-       else if (sec == elf->export_unused_gpl_sec)
-               return export_unused_gpl;
-       else if (sec == elf->export_gpl_future_sec)
-               return export_gpl_future;
        else
                return export_unknown;
  }
@@@ -581,14 -576,8 +567,8 @@@ static int parse_elf(struct elf_info *i
                        info->modinfo_len = sechdrs[i].sh_size;
                } else if (strcmp(secname, "__ksymtab") == 0)
                        info->export_sec = i;
-               else if (strcmp(secname, "__ksymtab_unused") == 0)
-                       info->export_unused_sec = i;
                else if (strcmp(secname, "__ksymtab_gpl") == 0)
                        info->export_gpl_sec = i;
-               else if (strcmp(secname, "__ksymtab_unused_gpl") == 0)
-                       info->export_unused_gpl_sec = i;
-               else if (strcmp(secname, "__ksymtab_gpl_future") == 0)
-                       info->export_gpl_future_sec = i;
  
                if (sechdrs[i].sh_type == SHT_SYMTAB) {
                        unsigned int sh_link_idx;
@@@ -1979,10 -1968,6 +1959,10 @@@ static char *remove_dot(char *s
                size_t m = strspn(s + n + 1, "0123456789");
                if (m && (s[n + m] == '.' || s[n + m] == 0))
                        s[n] = 0;
 +
 +              /* strip trailing .lto */
 +              if (strends(s, ".lto"))
 +                      s[strlen(s) - 4] = '\0';
        }
        return s;
  }
@@@ -2006,9 -1991,6 +1986,9 @@@ static void read_symbols(const char *mo
                /* strip trailing .o */
                tmp = NOFAIL(strdup(modname));
                tmp[strlen(tmp) - 2] = '\0';
 +              /* strip trailing .lto */
 +              if (strends(tmp, ".lto"))
 +                      tmp[strlen(tmp) - 4] = '\0';
                mod = new_module(tmp);
                free(tmp);
        }
@@@ -2146,36 -2128,13 +2126,13 @@@ static void check_for_gpl_usage(enum ex
                error("GPL-incompatible module %s.ko uses GPL-only symbol '%s'\n",
                      m, s);
                break;
-       case export_unused_gpl:
-               error("GPL-incompatible module %s.ko uses GPL-only symbol marked UNUSED '%s'\n",
-                     m, s);
-               break;
-       case export_gpl_future:
-               warn("GPL-incompatible module %s.ko uses future GPL-only symbol '%s'\n",
-                    m, s);
-               break;
        case export_plain:
-       case export_unused:
        case export_unknown:
                /* ignore */
                break;
        }
  }
  
- static void check_for_unused(enum export exp, const char *m, const char *s)
- {
-       switch (exp) {
-       case export_unused:
-       case export_unused_gpl:
-               warn("module %s.ko uses symbol '%s' marked UNUSED\n",
-                    m, s);
-               break;
-       default:
-               /* ignore */
-               break;
-       }
- }
  static void check_exports(struct module *mod)
  {
        struct symbol *s, *exp;
  
                if (!mod->gpl_compatible)
                        check_for_gpl_usage(exp->export, basename, exp->name);
-               check_for_unused(exp->export, basename, exp->name);
        }
  }
  
diff --combined scripts/mod/modpost.h
index 1f76eea7cfdee73ca03ca5125d24f4f8a5545748,0c47ff95c0e227a1dbfd46ebe75965b6fca5e18c..c1a895c0d682664b276179b691a30d610ca90d59
@@@ -2,7 -2,6 +2,7 @@@
  #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
 +#include <stdbool.h>
  #include <string.h>
  #include <sys/types.h>
  #include <sys/stat.h>
@@@ -140,10 -139,7 +140,7 @@@ struct elf_info 
        Elf_Sym      *symtab_start;
        Elf_Sym      *symtab_stop;
        Elf_Section  export_sec;
-       Elf_Section  export_unused_sec;
        Elf_Section  export_gpl_sec;
-       Elf_Section  export_unused_gpl_sec;
-       Elf_Section  export_gpl_future_sec;
        char         *strtab;
        char         *modinfo;
        unsigned int modinfo_len;
@@@ -181,14 -177,6 +178,14 @@@ static inline unsigned int get_secindex
        return info->symtab_shndx_start[sym - info->symtab_start];
  }
  
 +static inline bool strends(const char *str, const char *postfix)
 +{
 +      if (strlen(str) < strlen(postfix))
 +              return false;
 +
 +      return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
 +}
 +
  /* file2alias.c */
  extern unsigned int cross_build;
  void handle_moddevtable(struct module *mod, struct elf_info *info,
diff --combined scripts/module.lds.S
index 18d5b84236350cf59fc4361b34307f663496be52,24e8af579ce3789d5355a25bcf558c9b70fe4633..168cd27e6122b65b16a76be4e68eb846e01668cd
@@@ -11,42 -11,12 +11,36 @@@ SECTIONS 
  
        __ksymtab               0 : { *(SORT(___ksymtab+*)) }
        __ksymtab_gpl           0 : { *(SORT(___ksymtab_gpl+*)) }
-       __ksymtab_unused        0 : { *(SORT(___ksymtab_unused+*)) }
-       __ksymtab_unused_gpl    0 : { *(SORT(___ksymtab_unused_gpl+*)) }
-       __ksymtab_gpl_future    0 : { *(SORT(___ksymtab_gpl_future+*)) }
        __kcrctab               0 : { *(SORT(___kcrctab+*)) }
        __kcrctab_gpl           0 : { *(SORT(___kcrctab_gpl+*)) }
-       __kcrctab_unused        0 : { *(SORT(___kcrctab_unused+*)) }
-       __kcrctab_unused_gpl    0 : { *(SORT(___kcrctab_unused_gpl+*)) }
-       __kcrctab_gpl_future    0 : { *(SORT(___kcrctab_gpl_future+*)) }
  
        .init_array             0 : ALIGN(8) { *(SORT(.init_array.*)) *(.init_array) }
  
        __jump_table            0 : ALIGN(8) { KEEP(*(__jump_table)) }
 +
 +      __patchable_function_entries : { *(__patchable_function_entries) }
 +
 +      /*
 +       * With CONFIG_LTO_CLANG, LLD always enables -fdata-sections and
 +       * -ffunction-sections, which increases the size of the final module.
 +       * Merge the split sections in the final binary.
 +       */
 +      .bss : {
 +              *(.bss .bss.[0-9a-zA-Z_]*)
 +              *(.bss..L*)
 +      }
 +
 +      .data : {
 +              *(.data .data.[0-9a-zA-Z_]*)
 +              *(.data..L*)
 +      }
 +
 +      .rodata : {
 +              *(.rodata .rodata.[0-9a-zA-Z_]*)
 +              *(.rodata..L*)
 +      }
 +
 +      .text : { *(.text .text.[0-9a-zA-Z_]*) }
  }
  
  /* bring in arch-specific sections */
This page took 0.148553 seconds and 4 git commands to generate.