mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
The "weak" attribute is commonly used for the default version of a
function, where an architecture can override it by providing a strong version. Some header file declarations included the "weak" attribute. That's error-prone because it causes every implementation to be weak, with no strong version at all, and the linker chooses one based on link order. What we want is the "weak" attribute only on the *definition* of the default implementation. These changes remove "weak" from the declarations, leaving it on the default definitions. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJUSDD6AAoJEFmIoMA60/r8QQUP/1IYJwOZ1GfJs3mRVa8qrdlS qx0X96DOBQtPqA+fFgzuDnVWaRAsIGRYy/dHHZm4HZZW5QLsRXMrsFe9KXf/rHcu u5BXAqE7n7CPekmL9zuqNFzO7NgtF9PfnWnX/ckVWwUAhUnR36BbUxD3MPMiRhZA re1ao/hXSgrlyUOpC/Wfp6j+fzMoG4IIOwY+uKj7xWAkCQA3DUAtJr9kmIpyEz9n 2I3WVERjZ4fiZLwqrafX2hA8NbI4hD4/MkxBL9GkSOslPm8aL8QzMfj0ty5Z10rr nqc+2+kU5H5sk8dTiUp3CMBoBmOSwkvbaQ/hl10qGbKLHSFyGlHpISDgICsGC/jI x7081DkRcTJQ1UjUSa+56R9ZJDogMrTRDwMSFmV/OsGXKkW4IEaq+GoQaXMGOMW/ 3Lu5IuzyoaWTh+2zaCL2ngmnsJLlwrYF8vN5be1j6k6QsW50smnArgFGQ9zihry0 8ewyfnm7nHheu1v2+qwXphxVO7sKTDqO4R1Gxli3VUJ8CngK121Auc9Y02GNluP6 QP8zaieGTyNJ/Cxo0vy9DEm0RqLcSsncjfGG3eC2a0ruMp8Ynju2/u8QjwHPDPFo 2PX6FDjT36I+Fo5dKzK6sNIyiELeWvxqsb3yj+N57CIvZuH6/FjhvEEBcGaJ9bZ3 JQEOMXbVJ5oaNux25CRz =P4fi -----END PGP SIGNATURE----- Merge tag 'remove-weak-declarations' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci Pull weak function declaration removal from Bjorn Helgaas: "The "weak" attribute is commonly used for the default version of a function, where an architecture can override it by providing a strong version. Some header file declarations included the "weak" attribute. That's error-prone because it causes every implementation to be weak, with no strong version at all, and the linker chooses one based on link order. What we want is the "weak" attribute only on the *definition* of the default implementation. These changes remove "weak" from the declarations, leaving it on the default definitions" * tag 'remove-weak-declarations' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: uprobes: Remove "weak" from function declarations memory-hotplug: Remove "weak" from memory_block_size_bytes() declaration kgdb: Remove "weak" from kgdb_arch_pc() declaration ARC: kgdb: generic kgdb_arch_pc() suffices vmcore: Remove "weak" from function declarations clocksource: Remove "weak" from clocksource_default_clock() declaration x86, intel-mid: Remove "weak" from function declarations audit: Remove "weak" from audit_classify_compat_syscall() declaration
This commit is contained in:
commit
816fb4175c
@ -158,11 +158,6 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
return instruction_pointer(regs);
|
|
||||||
}
|
|
||||||
|
|
||||||
int kgdb_arch_init(void)
|
int kgdb_arch_init(void)
|
||||||
{
|
{
|
||||||
single_step_data.armed = 0;
|
single_step_data.armed = 0;
|
||||||
|
@ -10,10 +10,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* __attribute__((weak)) makes these declarations overridable */
|
|
||||||
/* For every CPU addition a new get_<cpuname>_ops interface needs
|
/* For every CPU addition a new get_<cpuname>_ops interface needs
|
||||||
* to be added.
|
* to be added.
|
||||||
*/
|
*/
|
||||||
extern void *get_penwell_ops(void) __attribute__((weak));
|
extern void *get_penwell_ops(void);
|
||||||
extern void *get_cloverview_ops(void) __attribute__((weak));
|
extern void *get_cloverview_ops(void);
|
||||||
extern void *get_tangier_ops(void) __attribute__((weak));
|
extern void *get_tangier_ops(void);
|
||||||
|
@ -90,7 +90,7 @@ extern unsigned compat_dir_class[];
|
|||||||
extern unsigned compat_chattr_class[];
|
extern unsigned compat_chattr_class[];
|
||||||
extern unsigned compat_signal_class[];
|
extern unsigned compat_signal_class[];
|
||||||
|
|
||||||
extern int __weak audit_classify_compat_syscall(int abi, unsigned syscall);
|
extern int audit_classify_compat_syscall(int abi, unsigned syscall);
|
||||||
|
|
||||||
/* audit_names->type values */
|
/* audit_names->type values */
|
||||||
#define AUDIT_TYPE_UNKNOWN 0 /* we don't know yet */
|
#define AUDIT_TYPE_UNKNOWN 0 /* we don't know yet */
|
||||||
|
@ -287,7 +287,7 @@ extern struct clocksource* clocksource_get_next(void);
|
|||||||
extern void clocksource_change_rating(struct clocksource *cs, int rating);
|
extern void clocksource_change_rating(struct clocksource *cs, int rating);
|
||||||
extern void clocksource_suspend(void);
|
extern void clocksource_suspend(void);
|
||||||
extern void clocksource_resume(void);
|
extern void clocksource_resume(void);
|
||||||
extern struct clocksource * __init __weak clocksource_default_clock(void);
|
extern struct clocksource * __init clocksource_default_clock(void);
|
||||||
extern void clocksource_mark_unstable(struct clocksource *cs);
|
extern void clocksource_mark_unstable(struct clocksource *cs);
|
||||||
|
|
||||||
extern u64
|
extern u64
|
||||||
|
@ -14,14 +14,13 @@
|
|||||||
extern unsigned long long elfcorehdr_addr;
|
extern unsigned long long elfcorehdr_addr;
|
||||||
extern unsigned long long elfcorehdr_size;
|
extern unsigned long long elfcorehdr_size;
|
||||||
|
|
||||||
extern int __weak elfcorehdr_alloc(unsigned long long *addr,
|
extern int elfcorehdr_alloc(unsigned long long *addr, unsigned long long *size);
|
||||||
unsigned long long *size);
|
extern void elfcorehdr_free(unsigned long long addr);
|
||||||
extern void __weak elfcorehdr_free(unsigned long long addr);
|
extern ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos);
|
||||||
extern ssize_t __weak elfcorehdr_read(char *buf, size_t count, u64 *ppos);
|
extern ssize_t elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos);
|
||||||
extern ssize_t __weak elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos);
|
extern int remap_oldmem_pfn_range(struct vm_area_struct *vma,
|
||||||
extern int __weak remap_oldmem_pfn_range(struct vm_area_struct *vma,
|
unsigned long from, unsigned long pfn,
|
||||||
unsigned long from, unsigned long pfn,
|
unsigned long size, pgprot_t prot);
|
||||||
unsigned long size, pgprot_t prot);
|
|
||||||
|
|
||||||
extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
|
extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
|
||||||
unsigned long, int);
|
unsigned long, int);
|
||||||
|
@ -283,7 +283,7 @@ struct kgdb_io {
|
|||||||
|
|
||||||
extern struct kgdb_arch arch_kgdb_ops;
|
extern struct kgdb_arch arch_kgdb_ops;
|
||||||
|
|
||||||
extern unsigned long __weak kgdb_arch_pc(int exception, struct pt_regs *regs);
|
extern unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs);
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_KGDB_NMI
|
#ifdef CONFIG_SERIAL_KGDB_NMI
|
||||||
extern int kgdb_register_nmi_console(void);
|
extern int kgdb_register_nmi_console(void);
|
||||||
|
@ -35,7 +35,7 @@ struct memory_block {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int arch_get_memory_phys_device(unsigned long start_pfn);
|
int arch_get_memory_phys_device(unsigned long start_pfn);
|
||||||
unsigned long __weak memory_block_size_bytes(void);
|
unsigned long memory_block_size_bytes(void);
|
||||||
|
|
||||||
/* These states are exposed to userspace as text strings in sysfs */
|
/* These states are exposed to userspace as text strings in sysfs */
|
||||||
#define MEM_ONLINE (1<<0) /* exposed to userspace */
|
#define MEM_ONLINE (1<<0) /* exposed to userspace */
|
||||||
|
@ -98,11 +98,11 @@ struct uprobes_state {
|
|||||||
struct xol_area *xol_area;
|
struct xol_area *xol_area;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int __weak set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
|
extern int set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
|
||||||
extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
|
extern int set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
|
||||||
extern bool __weak is_swbp_insn(uprobe_opcode_t *insn);
|
extern bool is_swbp_insn(uprobe_opcode_t *insn);
|
||||||
extern bool __weak is_trap_insn(uprobe_opcode_t *insn);
|
extern bool is_trap_insn(uprobe_opcode_t *insn);
|
||||||
extern unsigned long __weak uprobe_get_swbp_addr(struct pt_regs *regs);
|
extern unsigned long uprobe_get_swbp_addr(struct pt_regs *regs);
|
||||||
extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs);
|
extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs);
|
||||||
extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t);
|
extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t);
|
||||||
extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc);
|
extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc);
|
||||||
@ -128,8 +128,8 @@ extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk);
|
|||||||
extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data);
|
extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data);
|
||||||
extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs);
|
extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs);
|
||||||
extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs);
|
extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs);
|
||||||
extern bool __weak arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs);
|
extern bool arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs);
|
||||||
extern void __weak arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr,
|
extern void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr,
|
||||||
void *src, unsigned long len);
|
void *src, unsigned long len);
|
||||||
#else /* !CONFIG_UPROBES */
|
#else /* !CONFIG_UPROBES */
|
||||||
struct uprobes_state {
|
struct uprobes_state {
|
||||||
|
Loading…
Reference in New Issue
Block a user