make page-aligned data and bss less fragile
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...
---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