diff options
| author | Jeremy Fitzhardinge <jeremy@goop.org> | 2008-05-28 10:02:14 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-07-08 06:48:13 -0400 |
| commit | a7bf0bd5e6af7fe69342dabf2a3b721f0163469a (patch) | |
| tree | 3f7e08f0df4c5eccf81732dcf95b8cc4efafa203 /include/linux | |
| parent | 1ecd27657b735128a728ebf0c31fce5e1456718a (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')
| -rw-r--r-- | include/linux/linkage.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/linkage.h b/include/linux/linkage.h index 2119610b24f8..9fd1f859021b 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. |
