Skip to contentSkip to conversation

make page-aligned data and bss less fragile

PATCH New Jeremy Fitzhardinge 1 participant 1 message May 29, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 make page-aligned data and bss less fragile

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...

Cc Ingo Molnar <[email protected]>
Cc Paul Mundt <[email protected]>
Cc Paul Mackerras <[email protected]>

---
include/linux/linkage.h | 8 ++++++++

1 file changed, 8 insertions(+)

===================================================================

include/linux/linkage.h +0 -0
@@ -1,6 +1,7 @@

#ifndef _LINUX_LINKAGE_H
#define _LINUX_LINKAGE_H

+#include <linux/compiler.h>
#include <asm/linkage.h>

#define notrace __attribute__((no_instrument_function)) @@ -18,6 +19,13 @@
#ifndef asmregparm

# define asmregparm
#endif
+
+/*
+ * Mark a variable page aligned, and put it in an appropriate page
+ * aligned section.
+ */
+#define __page_aligned_data	__section(.data.page_aligned) __aligned(PAGE_SIZE)
+#define __page_aligned_bss	__section(.bss.page_aligned) __aligned(PAGE_SIZE)

/*
* This is used by architectures to keep arguments on the stack