mirror of https://gitee.com/openkylin/linux.git
kernel: use macros from compiler.h instead of __attribute__((...))
To increase compiler portability there is <linux/compiler.h> which provides convenience macros for various gcc constructs. Eg: __weak for __attribute__((weak)). I've replaced all instances of gcc attributes with the right macro in the kernel subsystem. Signed-off-by: Gideon Israel Dsouza <gidisrael@gmail.com> Cc: "Rafael J. Wysocki" <rjw@sisk.pl> Cc: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ce816fa88c
commit
52f5684c8e
|
@ -73,6 +73,7 @@
|
||||||
#include <linux/signalfd.h>
|
#include <linux/signalfd.h>
|
||||||
#include <linux/uprobes.h>
|
#include <linux/uprobes.h>
|
||||||
#include <linux/aio.h>
|
#include <linux/aio.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
|
@ -286,7 +287,7 @@ void __init fork_init(unsigned long mempages)
|
||||||
init_task.signal->rlim[RLIMIT_NPROC];
|
init_task.signal->rlim[RLIMIT_NPROC];
|
||||||
}
|
}
|
||||||
|
|
||||||
int __attribute__((weak)) arch_dup_task_struct(struct task_struct *dst,
|
int __weak arch_dup_task_struct(struct task_struct *dst,
|
||||||
struct task_struct *src)
|
struct task_struct *src)
|
||||||
{
|
{
|
||||||
*dst = *src;
|
*dst = *src;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
|
|
||||||
|
@ -36,8 +37,8 @@
|
||||||
* These will be re-linked against their real values
|
* These will be re-linked against their real values
|
||||||
* during the second link stage.
|
* during the second link stage.
|
||||||
*/
|
*/
|
||||||
extern const unsigned long kallsyms_addresses[] __attribute__((weak));
|
extern const unsigned long kallsyms_addresses[] __weak;
|
||||||
extern const u8 kallsyms_names[] __attribute__((weak));
|
extern const u8 kallsyms_names[] __weak;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tell the compiler that the count isn't in the small data section if the arch
|
* Tell the compiler that the count isn't in the small data section if the arch
|
||||||
|
@ -46,10 +47,10 @@ extern const u8 kallsyms_names[] __attribute__((weak));
|
||||||
extern const unsigned long kallsyms_num_syms
|
extern const unsigned long kallsyms_num_syms
|
||||||
__attribute__((weak, section(".rodata")));
|
__attribute__((weak, section(".rodata")));
|
||||||
|
|
||||||
extern const u8 kallsyms_token_table[] __attribute__((weak));
|
extern const u8 kallsyms_token_table[] __weak;
|
||||||
extern const u16 kallsyms_token_index[] __attribute__((weak));
|
extern const u16 kallsyms_token_index[] __weak;
|
||||||
|
|
||||||
extern const unsigned long kallsyms_markers[] __attribute__((weak));
|
extern const unsigned long kallsyms_markers[] __weak;
|
||||||
|
|
||||||
static inline int is_kernel_inittext(unsigned long addr)
|
static inline int is_kernel_inittext(unsigned long addr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/swap.h>
|
#include <linux/swap.h>
|
||||||
#include <linux/syscore_ops.h>
|
#include <linux/syscore_ops.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
@ -1551,10 +1552,10 @@ void vmcoreinfo_append_str(const char *fmt, ...)
|
||||||
* provide an empty default implementation here -- architecture
|
* provide an empty default implementation here -- architecture
|
||||||
* code may override this
|
* code may override this
|
||||||
*/
|
*/
|
||||||
void __attribute__ ((weak)) arch_crash_save_vmcoreinfo(void)
|
void __weak arch_crash_save_vmcoreinfo(void)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
unsigned long __attribute__ ((weak)) paddr_vmcoreinfo_note(void)
|
unsigned long __weak paddr_vmcoreinfo_note(void)
|
||||||
{
|
{
|
||||||
return __pa((unsigned long)(char *)&vmcoreinfo_note);
|
return __pa((unsigned long)(char *)&vmcoreinfo_note);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <linux/stat.h>
|
#include <linux/stat.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/capability.h>
|
#include <linux/capability.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#include <linux/rcupdate.h> /* rcu_expedited */
|
#include <linux/rcupdate.h> /* rcu_expedited */
|
||||||
|
|
||||||
|
@ -162,8 +163,8 @@ KERNEL_ATTR_RW(rcu_expedited);
|
||||||
/*
|
/*
|
||||||
* Make /sys/kernel/notes give the raw contents of our kernel .notes section.
|
* Make /sys/kernel/notes give the raw contents of our kernel .notes section.
|
||||||
*/
|
*/
|
||||||
extern const void __start_notes __attribute__((weak));
|
extern const void __start_notes __weak;
|
||||||
extern const void __stop_notes __attribute__((weak));
|
extern const void __stop_notes __weak;
|
||||||
#define notes_size (&__stop_notes - &__start_notes)
|
#define notes_size (&__stop_notes - &__start_notes)
|
||||||
|
|
||||||
static ssize_t notes_read(struct file *filp, struct kobject *kobj,
|
static ssize_t notes_read(struct file *filp, struct kobject *kobj,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include <linux/suspend_ioctls.h>
|
#include <linux/suspend_ioctls.h>
|
||||||
#include <linux/utsname.h>
|
#include <linux/utsname.h>
|
||||||
#include <linux/freezer.h>
|
#include <linux/freezer.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
struct swsusp_info {
|
struct swsusp_info {
|
||||||
struct new_utsname uts;
|
struct new_utsname uts;
|
||||||
|
@ -11,7 +12,7 @@ struct swsusp_info {
|
||||||
unsigned long image_pages;
|
unsigned long image_pages;
|
||||||
unsigned long pages;
|
unsigned long pages;
|
||||||
unsigned long size;
|
unsigned long size;
|
||||||
} __attribute__((aligned(PAGE_SIZE)));
|
} __aligned(PAGE_SIZE);
|
||||||
|
|
||||||
#ifdef CONFIG_HIBERNATION
|
#ifdef CONFIG_HIBERNATION
|
||||||
/* kernel/power/snapshot.c */
|
/* kernel/power/snapshot.c */
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
|
@ -155,7 +156,7 @@ static inline void free_image_page(void *addr, int clear_nosave_free)
|
||||||
struct linked_page {
|
struct linked_page {
|
||||||
struct linked_page *next;
|
struct linked_page *next;
|
||||||
char data[LINKED_PAGE_DATA_SIZE];
|
char data[LINKED_PAGE_DATA_SIZE];
|
||||||
} __attribute__((packed));
|
} __packed;
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
free_list_of_pages(struct linked_page *list, int clear_page_nosave)
|
free_list_of_pages(struct linked_page *list, int clear_page_nosave)
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <linux/syscore_ops.h>
|
#include <linux/syscore_ops.h>
|
||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
#include <trace/events/power.h>
|
#include <trace/events/power.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#include "power.h"
|
#include "power.h"
|
||||||
|
|
||||||
|
@ -156,13 +157,13 @@ static int suspend_prepare(suspend_state_t state)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* default implementation */
|
/* default implementation */
|
||||||
void __attribute__ ((weak)) arch_suspend_disable_irqs(void)
|
void __weak arch_suspend_disable_irqs(void)
|
||||||
{
|
{
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* default implementation */
|
/* default implementation */
|
||||||
void __attribute__ ((weak)) arch_suspend_enable_irqs(void)
|
void __weak arch_suspend_enable_irqs(void)
|
||||||
{
|
{
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,7 @@ struct swsusp_header {
|
||||||
unsigned int flags; /* Flags to pass to the "boot" kernel */
|
unsigned int flags; /* Flags to pass to the "boot" kernel */
|
||||||
char orig_sig[10];
|
char orig_sig[10];
|
||||||
char sig[10];
|
char sig[10];
|
||||||
} __attribute__((packed));
|
} __packed;
|
||||||
|
|
||||||
static struct swsusp_header *swsusp_header;
|
static struct swsusp_header *swsusp_header;
|
||||||
|
|
||||||
|
|
|
@ -60,13 +60,14 @@
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/static_key.h>
|
#include <linux/static_key.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scheduler clock - returns current time in nanosec units.
|
* Scheduler clock - returns current time in nanosec units.
|
||||||
* This is default implementation.
|
* This is default implementation.
|
||||||
* Architectures and sub-architectures can override this.
|
* Architectures and sub-architectures can override this.
|
||||||
*/
|
*/
|
||||||
unsigned long long __attribute__((weak)) sched_clock(void)
|
unsigned long long __weak sched_clock(void)
|
||||||
{
|
{
|
||||||
return (unsigned long long)(jiffies - INITIAL_JIFFIES)
|
return (unsigned long long)(jiffies - INITIAL_JIFFIES)
|
||||||
* (NSEC_PER_SEC / HZ);
|
* (NSEC_PER_SEC / HZ);
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
#include <linux/init_task.h>
|
#include <linux/init_task.h>
|
||||||
#include <linux/binfmts.h>
|
#include <linux/binfmts.h>
|
||||||
#include <linux/context_tracking.h>
|
#include <linux/context_tracking.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#include <asm/switch_to.h>
|
#include <asm/switch_to.h>
|
||||||
#include <asm/tlb.h>
|
#include <asm/tlb.h>
|
||||||
|
@ -6498,7 +6499,7 @@ static cpumask_var_t fallback_doms;
|
||||||
* cpu core maps. It is supposed to return 1 if the topology changed
|
* cpu core maps. It is supposed to return 1 if the topology changed
|
||||||
* or 0 if it stayed the same.
|
* or 0 if it stayed the same.
|
||||||
*/
|
*/
|
||||||
int __attribute__((weak)) arch_update_cpu_topology(void)
|
int __weak arch_update_cpu_topology(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@
|
||||||
#include <linux/uprobes.h>
|
#include <linux/uprobes.h>
|
||||||
#include <linux/compat.h>
|
#include <linux/compat.h>
|
||||||
#include <linux/cn_proc.h>
|
#include <linux/cn_proc.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#define CREATE_TRACE_POINTS
|
#define CREATE_TRACE_POINTS
|
||||||
#include <trace/events/signal.h>
|
#include <trace/events/signal.h>
|
||||||
|
|
||||||
|
@ -3618,7 +3620,7 @@ SYSCALL_DEFINE3(sigsuspend, int, unused1, int, unused2, old_sigset_t, mask)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma)
|
__weak const char *arch_vma_name(struct vm_area_struct *vma)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/tick.h>
|
#include <linux/tick.h>
|
||||||
#include <linux/stop_machine.h>
|
#include <linux/stop_machine.h>
|
||||||
#include <linux/pvclock_gtod.h>
|
#include <linux/pvclock_gtod.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#include "tick-internal.h"
|
#include "tick-internal.h"
|
||||||
#include "ntp_internal.h"
|
#include "ntp_internal.h"
|
||||||
|
@ -760,7 +761,7 @@ u64 timekeeping_max_deferment(void)
|
||||||
*
|
*
|
||||||
* XXX - Do be sure to remove it once all arches implement it.
|
* XXX - Do be sure to remove it once all arches implement it.
|
||||||
*/
|
*/
|
||||||
void __attribute__((weak)) read_persistent_clock(struct timespec *ts)
|
void __weak read_persistent_clock(struct timespec *ts)
|
||||||
{
|
{
|
||||||
ts->tv_sec = 0;
|
ts->tv_sec = 0;
|
||||||
ts->tv_nsec = 0;
|
ts->tv_nsec = 0;
|
||||||
|
@ -775,7 +776,7 @@ void __attribute__((weak)) read_persistent_clock(struct timespec *ts)
|
||||||
*
|
*
|
||||||
* XXX - Do be sure to remove it once all arches implement it.
|
* XXX - Do be sure to remove it once all arches implement it.
|
||||||
*/
|
*/
|
||||||
void __attribute__((weak)) read_boot_clock(struct timespec *ts)
|
void __weak read_boot_clock(struct timespec *ts)
|
||||||
{
|
{
|
||||||
ts->tv_sec = 0;
|
ts->tv_sec = 0;
|
||||||
ts->tv_nsec = 0;
|
ts->tv_nsec = 0;
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <linux/hw_breakpoint.h>
|
#include <linux/hw_breakpoint.h>
|
||||||
#include <linux/trace_seq.h>
|
#include <linux/trace_seq.h>
|
||||||
#include <linux/ftrace_event.h>
|
#include <linux/ftrace_event.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#ifdef CONFIG_FTRACE_SYSCALLS
|
#ifdef CONFIG_FTRACE_SYSCALLS
|
||||||
#include <asm/unistd.h> /* For NR_SYSCALLS */
|
#include <asm/unistd.h> /* For NR_SYSCALLS */
|
||||||
|
@ -1279,7 +1280,7 @@ int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled);
|
||||||
#undef FTRACE_ENTRY
|
#undef FTRACE_ENTRY
|
||||||
#define FTRACE_ENTRY(call, struct_name, id, tstruct, print, filter) \
|
#define FTRACE_ENTRY(call, struct_name, id, tstruct, print, filter) \
|
||||||
extern struct ftrace_event_call \
|
extern struct ftrace_event_call \
|
||||||
__attribute__((__aligned__(4))) event_##call;
|
__aligned(4) event_##call;
|
||||||
#undef FTRACE_ENTRY_DUP
|
#undef FTRACE_ENTRY_DUP
|
||||||
#define FTRACE_ENTRY_DUP(call, struct_name, id, tstruct, print, filter) \
|
#define FTRACE_ENTRY_DUP(call, struct_name, id, tstruct, print, filter) \
|
||||||
FTRACE_ENTRY(call, struct_name, id, PARAMS(tstruct), PARAMS(print), \
|
FTRACE_ENTRY(call, struct_name, id, PARAMS(tstruct), PARAMS(print), \
|
||||||
|
|
Loading…
Reference in New Issue