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:
Gideon Israel Dsouza 2014-04-07 15:39:20 -07:00 committed by Linus Torvalds
parent ce816fa88c
commit 52f5684c8e
13 changed files with 34 additions and 21 deletions

View File

@ -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;

View File

@ -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)
{ {

View File

@ -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);
} }

View File

@ -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,

View File

@ -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 */

View File

@ -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)

View File

@ -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();
} }

View File

@ -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;

View File

@ -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);

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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;

View File

@ -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), \