aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/linkage.h
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy@goop.org>2008-05-28 10:02:14 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-08 06:48:13 -0400
commita7bf0bd5e6af7fe69342dabf2a3b721f0163469a (patch)
tree3f7e08f0df4c5eccf81732dcf95b8cc4efafa203 /include/linux/linkage.h
parent1ecd27657b735128a728ebf0c31fce5e1456718a (diff)
build: add __page_aligned_data and __page_aligned_bss
Making a variable page-aligned by using __attribute__((section(".data.page_aligned"))) is fragile because if sizeof(variable) is not also a multiple of page size, it leaves variables in the remainder of the section unaligned. This patch introduces two new qualifiers, __page_aligned_data and __page_aligned_bss to set the section *and* the alignment of variables. This makes page-aligned variables more robust because the linker will make sure they're aligned properly. Unfortunately it requires *all* page-aligned data to use these macros... Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux/linkage.h')
-rw-r--r--include/linux/linkage.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/linkage.h b/include/linux/linkage.h
index 2119610b24f..9fd1f859021 100644
--- a/include/linux/linkage.h
+++ b/include/linux/linkage.h
@@ -1,6 +1,7 @@
1#ifndef _LINUX_LINKAGE_H 1#ifndef _LINUX_LINKAGE_H
2#define _LINUX_LINKAGE_H 2#define _LINUX_LINKAGE_H
3 3
4#include <linux/compiler.h>
4#include <asm/linkage.h> 5#include <asm/linkage.h>
5 6
6#ifdef __cplusplus 7#ifdef __cplusplus
@@ -17,6 +18,9 @@
17# define asmregparm 18# define asmregparm
18#endif 19#endif
19 20
21#define __page_aligned_data __section(.data.page_aligned) __aligned(PAGE_SIZE)
22#define __page_aligned_bss __section(.bss.page_aligned) __aligned(PAGE_SIZE)
23
20/* 24/*
21 * This is used by architectures to keep arguments on the stack 25 * This is used by architectures to keep arguments on the stack
22 * untouched by the compiler by keeping them live until the end. 26 * untouched by the compiler by keeping them live until the end.