mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 07:37:31 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
* git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild: (79 commits)
Remove references to "make dep"
kconfig: document use of HAVE_*
Introduce new section reference annotations tags: __ref, __refdata, __refconst
kbuild: warn about ld added unique sections
kbuild: add verbose option to Section mismatch reporting in modpost
kconfig: tristate choices with mixed tristate and boolean values
asm-generic/vmlix.lds.h: simplify __mem{init,exit}* dependencies
remove __attribute_used__
kbuild: support ARCH=x86 in buildtar
kconfig: remove "enable"
kbuild: simplified warning report in modpost
kbuild: introduce a few helpers in modpost
kbuild: use simpler section mismatch warnings in modpost
kbuild: link vmlinux.o before kallsyms passes
kbuild: introduce new option to enhance section mismatch analysis
Use separate sections for __dev/__cpu/__mem code/data
compiler.h: introduce __section()
all archs: consolidate init and exit sections in vmlinux.lds.h
kbuild: check section names consistently in modpost
kbuild: introduce blacklisting in modpost
...
This commit is contained in:
commit
5ea293a904
110 changed files with 1833 additions and 1143 deletions
|
|
@ -34,7 +34,6 @@ header-y += atmsap.h
|
|||
header-y += atmsvc.h
|
||||
header-y += atm_zatm.h
|
||||
header-y += auto_fs4.h
|
||||
header-y += auxvec.h
|
||||
header-y += ax25.h
|
||||
header-y += b1lli.h
|
||||
header-y += baycom.h
|
||||
|
|
@ -73,7 +72,7 @@ header-y += gen_stats.h
|
|||
header-y += gigaset_dev.h
|
||||
header-y += hdsmart.h
|
||||
header-y += hysdn_if.h
|
||||
header-y += i2c-dev.h
|
||||
header-y += i2o-dev.h
|
||||
header-y += i8k.h
|
||||
header-y += if_arcnet.h
|
||||
header-y += if_bonding.h
|
||||
|
|
@ -158,7 +157,6 @@ header-y += veth.h
|
|||
header-y += video_decoder.h
|
||||
header-y += video_encoder.h
|
||||
header-y += videotext.h
|
||||
header-y += vt.h
|
||||
header-y += x25.h
|
||||
|
||||
unifdef-y += acct.h
|
||||
|
|
@ -173,6 +171,7 @@ unifdef-y += atm.h
|
|||
unifdef-y += atm_tcp.h
|
||||
unifdef-y += audit.h
|
||||
unifdef-y += auto_fs.h
|
||||
unifdef-y += auxvec.h
|
||||
unifdef-y += binfmts.h
|
||||
unifdef-y += capability.h
|
||||
unifdef-y += capi.h
|
||||
|
|
@ -214,7 +213,7 @@ unifdef-y += hdreg.h
|
|||
unifdef-y += hiddev.h
|
||||
unifdef-y += hpet.h
|
||||
unifdef-y += i2c.h
|
||||
unifdef-y += i2o-dev.h
|
||||
unifdef-y += i2c-dev.h
|
||||
unifdef-y += icmp.h
|
||||
unifdef-y += icmpv6.h
|
||||
unifdef-y += if_addr.h
|
||||
|
|
@ -349,6 +348,7 @@ unifdef-y += videodev.h
|
|||
unifdef-y += virtio_config.h
|
||||
unifdef-y += virtio_blk.h
|
||||
unifdef-y += virtio_net.h
|
||||
unifdef-y += vt.h
|
||||
unifdef-y += wait.h
|
||||
unifdef-y += wanrouter.h
|
||||
unifdef-y += watchdog.h
|
||||
|
|
|
|||
|
|
@ -7,10 +7,8 @@
|
|||
|
||||
#if __GNUC_MINOR__ >= 3
|
||||
# define __used __attribute__((__used__))
|
||||
# define __attribute_used__ __used /* deprecated */
|
||||
#else
|
||||
# define __used __attribute__((__unused__))
|
||||
# define __attribute_used__ __used /* deprecated */
|
||||
#endif
|
||||
|
||||
#if __GNUC_MINOR__ >= 4
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
#endif
|
||||
|
||||
#define __used __attribute__((__used__))
|
||||
#define __attribute_used__ __used /* deprecated */
|
||||
#define __must_check __attribute__((warn_unused_result))
|
||||
#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
|
||||
#define __always_inline inline __attribute__((always_inline))
|
||||
|
|
|
|||
|
|
@ -126,10 +126,6 @@ extern void __chk_io_ptr(const volatile void __iomem *);
|
|||
* Mark functions that are referenced only in inline assembly as __used so
|
||||
* the code is emitted even though it appears to be unreferenced.
|
||||
*/
|
||||
#ifndef __attribute_used__
|
||||
# define __attribute_used__ /* deprecated */
|
||||
#endif
|
||||
|
||||
#ifndef __used
|
||||
# define __used /* unimplemented */
|
||||
#endif
|
||||
|
|
@ -175,4 +171,9 @@ extern void __chk_io_ptr(const volatile void __iomem *);
|
|||
#define __cold
|
||||
#endif
|
||||
|
||||
/* Simple shorthand for a section definition */
|
||||
#ifndef __section
|
||||
# define __section(S) __attribute__ ((__section__(#S)))
|
||||
#endif
|
||||
|
||||
#endif /* __LINUX_COMPILER_H */
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
typeof(desc) _desc \
|
||||
__attribute__((aligned(sizeof(Elf##size##_Word)))); \
|
||||
} _ELFNOTE_PASTE(_note_, unique) \
|
||||
__attribute_used__ \
|
||||
__used \
|
||||
__attribute__((section(".note." name), \
|
||||
aligned(sizeof(Elf##size##_Word)), \
|
||||
unused)) = { \
|
||||
|
|
|
|||
|
|
@ -40,10 +40,10 @@
|
|||
|
||||
/* These are for everybody (although not all archs will actually
|
||||
discard it in modules) */
|
||||
#define __init __attribute__ ((__section__ (".init.text"))) __cold
|
||||
#define __initdata __attribute__ ((__section__ (".init.data")))
|
||||
#define __exitdata __attribute__ ((__section__(".exit.data")))
|
||||
#define __exit_call __attribute_used__ __attribute__ ((__section__ (".exitcall.exit")))
|
||||
#define __init __section(.init.text) __cold
|
||||
#define __initdata __section(.init.data)
|
||||
#define __exitdata __section(.exit.data)
|
||||
#define __exit_call __used __section(.exitcall.exit)
|
||||
|
||||
/* modpost check for section mismatches during the kernel build.
|
||||
* A section mismatch happens when there are references from a
|
||||
|
|
@ -52,25 +52,81 @@
|
|||
* when early init has completed so all such references are potential bugs.
|
||||
* For exit sections the same issue exists.
|
||||
* The following markers are used for the cases where the reference to
|
||||
* the init/exit section (code or data) is valid and will teach modpost
|
||||
* not to issue a warning.
|
||||
* the *init / *exit section (code or data) is valid and will teach
|
||||
* modpost not to issue a warning.
|
||||
* The markers follow same syntax rules as __init / __initdata. */
|
||||
#define __init_refok noinline __attribute__ ((__section__ (".text.init.refok")))
|
||||
#define __initdata_refok __attribute__ ((__section__ (".data.init.refok")))
|
||||
#define __exit_refok noinline __attribute__ ((__section__ (".exit.text.refok")))
|
||||
#define __ref __section(.ref.text) noinline
|
||||
#define __refdata __section(.ref.data)
|
||||
#define __refconst __section(.ref.rodata)
|
||||
|
||||
/* backward compatibility note
|
||||
* A few places hardcode the old section names:
|
||||
* .text.init.refok
|
||||
* .data.init.refok
|
||||
* .exit.text.refok
|
||||
* They should be converted to use the defines from this file
|
||||
*/
|
||||
|
||||
/* compatibility defines */
|
||||
#define __init_refok __ref
|
||||
#define __initdata_refok __refdata
|
||||
#define __exit_refok __ref
|
||||
|
||||
|
||||
#ifdef MODULE
|
||||
#define __exit __attribute__ ((__section__(".exit.text"))) __cold
|
||||
#define __exitused
|
||||
#else
|
||||
#define __exit __attribute_used__ __attribute__ ((__section__(".exit.text"))) __cold
|
||||
#define __exitused __used
|
||||
#endif
|
||||
|
||||
#define __exit __section(.exit.text) __exitused __cold
|
||||
|
||||
/* Used for HOTPLUG */
|
||||
#define __devinit __section(.devinit.text) __cold
|
||||
#define __devinitdata __section(.devinit.data)
|
||||
#define __devinitconst __section(.devinit.rodata)
|
||||
#define __devexit __section(.devexit.text) __exitused __cold
|
||||
#define __devexitdata __section(.devexit.data)
|
||||
#define __devexitconst __section(.devexit.rodata)
|
||||
|
||||
/* Used for HOTPLUG_CPU */
|
||||
#define __cpuinit __section(.cpuinit.text) __cold
|
||||
#define __cpuinitdata __section(.cpuinit.data)
|
||||
#define __cpuinitconst __section(.cpuinit.rodata)
|
||||
#define __cpuexit __section(.cpuexit.text) __exitused __cold
|
||||
#define __cpuexitdata __section(.cpuexit.data)
|
||||
#define __cpuexitconst __section(.cpuexit.rodata)
|
||||
|
||||
/* Used for MEMORY_HOTPLUG */
|
||||
#define __meminit __section(.meminit.text) __cold
|
||||
#define __meminitdata __section(.meminit.data)
|
||||
#define __meminitconst __section(.meminit.rodata)
|
||||
#define __memexit __section(.memexit.text) __exitused __cold
|
||||
#define __memexitdata __section(.memexit.data)
|
||||
#define __memexitconst __section(.memexit.rodata)
|
||||
|
||||
/* For assembly routines */
|
||||
#define __INIT .section ".init.text","ax"
|
||||
#define __INIT_REFOK .section ".text.init.refok","ax"
|
||||
#define __FINIT .previous
|
||||
|
||||
#define __INITDATA .section ".init.data","aw"
|
||||
#define __INITDATA_REFOK .section ".data.init.refok","aw"
|
||||
|
||||
#define __DEVINIT .section ".devinit.text", "ax"
|
||||
#define __DEVINITDATA .section ".devinit.data", "aw"
|
||||
|
||||
#define __CPUINIT .section ".cpuinit.text", "ax"
|
||||
#define __CPUINITDATA .section ".cpuinit.data", "aw"
|
||||
|
||||
#define __MEMINIT .section ".meminit.text", "ax"
|
||||
#define __MEMINITDATA .section ".meminit.data", "aw"
|
||||
|
||||
/* silence warnings when references are OK */
|
||||
#define __REF .section ".ref.text", "ax"
|
||||
#define __REFDATA .section ".ref.data", "aw"
|
||||
#define __REFCONST .section ".ref.rodata", "aw"
|
||||
/* backward compatibility */
|
||||
#define __INIT_REFOK .section __REF
|
||||
#define __INITDATA_REFOK .section __REFDATA
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
/*
|
||||
|
|
@ -108,7 +164,7 @@ void prepare_namespace(void);
|
|||
*/
|
||||
|
||||
#define __define_initcall(level,fn,id) \
|
||||
static initcall_t __initcall_##fn##id __attribute_used__ \
|
||||
static initcall_t __initcall_##fn##id __used \
|
||||
__attribute__((__section__(".initcall" level ".init"))) = fn
|
||||
|
||||
/*
|
||||
|
|
@ -142,11 +198,11 @@ void prepare_namespace(void);
|
|||
|
||||
#define console_initcall(fn) \
|
||||
static initcall_t __initcall_##fn \
|
||||
__attribute_used__ __attribute__((__section__(".con_initcall.init")))=fn
|
||||
__used __section(.con_initcall.init) = fn
|
||||
|
||||
#define security_initcall(fn) \
|
||||
static initcall_t __initcall_##fn \
|
||||
__attribute_used__ __attribute__((__section__(".security_initcall.init"))) = fn
|
||||
__used __section(.security_initcall.init) = fn
|
||||
|
||||
struct obs_kernel_param {
|
||||
const char *str;
|
||||
|
|
@ -163,8 +219,7 @@ struct obs_kernel_param {
|
|||
#define __setup_param(str, unique_id, fn, early) \
|
||||
static char __setup_str_##unique_id[] __initdata __aligned(1) = str; \
|
||||
static struct obs_kernel_param __setup_##unique_id \
|
||||
__attribute_used__ \
|
||||
__attribute__((__section__(".init.setup"))) \
|
||||
__used __section(.init.setup) \
|
||||
__attribute__((aligned((sizeof(long))))) \
|
||||
= { __setup_str_##unique_id, fn, early }
|
||||
|
||||
|
|
@ -242,7 +297,7 @@ void __init parse_early_param(void);
|
|||
#endif
|
||||
|
||||
/* Data marked not to be saved by software suspend */
|
||||
#define __nosavedata __attribute__ ((__section__ (".data.nosave")))
|
||||
#define __nosavedata __section(.data.nosave)
|
||||
|
||||
/* This means "can be init if no module support, otherwise module load
|
||||
may call it." */
|
||||
|
|
@ -254,43 +309,6 @@ void __init parse_early_param(void);
|
|||
#define __initdata_or_module __initdata
|
||||
#endif /*CONFIG_MODULES*/
|
||||
|
||||
#ifdef CONFIG_HOTPLUG
|
||||
#define __devinit
|
||||
#define __devinitdata
|
||||
#define __devexit
|
||||
#define __devexitdata
|
||||
#else
|
||||
#define __devinit __init
|
||||
#define __devinitdata __initdata
|
||||
#define __devexit __exit
|
||||
#define __devexitdata __exitdata
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
#define __cpuinit
|
||||
#define __cpuinitdata
|
||||
#define __cpuexit
|
||||
#define __cpuexitdata
|
||||
#else
|
||||
#define __cpuinit __init
|
||||
#define __cpuinitdata __initdata
|
||||
#define __cpuexit __exit
|
||||
#define __cpuexitdata __exitdata
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MEMORY_HOTPLUG) || defined(CONFIG_ACPI_HOTPLUG_MEMORY) \
|
||||
|| defined(CONFIG_ACPI_HOTPLUG_MEMORY_MODULE)
|
||||
#define __meminit
|
||||
#define __meminitdata
|
||||
#define __memexit
|
||||
#define __memexitdata
|
||||
#else
|
||||
#define __meminit __init
|
||||
#define __meminitdata __initdata
|
||||
#define __memexit __exit
|
||||
#define __memexitdata __exitdata
|
||||
#endif
|
||||
|
||||
/* Functions marked as __devexit may be discarded at kernel link time, depending
|
||||
on config options. Newer versions of binutils detect references from
|
||||
retained sections to discarded sections and flag an error. Pointers to
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ void *__symbol_get_gpl(const char *symbol);
|
|||
#define __CRC_SYMBOL(sym, sec) \
|
||||
extern void *__crc_##sym __attribute__((weak)); \
|
||||
static const unsigned long __kcrctab_##sym \
|
||||
__attribute_used__ \
|
||||
__used \
|
||||
__attribute__((section("__kcrctab" sec), unused)) \
|
||||
= (unsigned long) &__crc_##sym;
|
||||
#else
|
||||
|
|
@ -193,7 +193,7 @@ void *__symbol_get_gpl(const char *symbol);
|
|||
__attribute__((section("__ksymtab_strings"))) \
|
||||
= MODULE_SYMBOL_PREFIX #sym; \
|
||||
static const struct kernel_symbol __ksymtab_##sym \
|
||||
__attribute_used__ \
|
||||
__used \
|
||||
__attribute__((section("__ksymtab" sec), unused)) \
|
||||
= { (unsigned long)&sym, __kstrtab_##sym }
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
#define __module_cat(a,b) ___module_cat(a,b)
|
||||
#define __MODULE_INFO(tag, name, info) \
|
||||
static const char __module_cat(name,__LINE__)[] \
|
||||
__attribute_used__ \
|
||||
__used \
|
||||
__attribute__((section(".modinfo"),unused)) = __stringify(tag) "=" info
|
||||
#else /* !MODULE */
|
||||
#define __MODULE_INFO(tag, name, info)
|
||||
|
|
@ -72,7 +72,7 @@ struct kparam_array
|
|||
BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)); \
|
||||
static const char __param_str_##name[] = prefix #name; \
|
||||
static struct kernel_param const __param_##name \
|
||||
__attribute_used__ \
|
||||
__used \
|
||||
__attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \
|
||||
= { __param_str_##name, perm, set, get, { arg } }
|
||||
|
||||
|
|
|
|||
|
|
@ -867,7 +867,7 @@ enum pci_fixup_pass {
|
|||
|
||||
/* Anonymous variables would be nice... */
|
||||
#define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, hook) \
|
||||
static const struct pci_fixup __pci_fixup_##name __attribute_used__ \
|
||||
static const struct pci_fixup __pci_fixup_##name __used \
|
||||
__attribute__((__section__(#section))) = { vendor, device, hook };
|
||||
#define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
|
||||
|
|
|
|||
Loading…
Reference in a new issue