arm: 1M align init, text, rodata if CONFIG_STRICT_MEMORY_RWX is set

Init code, text, rodata and data need different permissions
and so they need to be on different pages. The kernel 1-to-1
mapping is constructed using 1M pages to improve TLB performance
and this should not be changed (to 4K pages). Therefore
ensure that each of these regions starts on a 1M boundary.

Change-Id: I855b58d3deff6c34e58d1cbdef4b360c2b23ca6d
Signed-off-by: Larry Bassel <lbassel@codeaurora.org>
Signed-off-by: Jin Hong <jinh@codeaurora.org>
(cherry picked from commit 4cfee820adbdd7514b67e59c1b87008436d984ab)
This commit is contained in:
Larry Bassel
2011-02-08 14:14:49 -08:00
committed by Stephen Boyd
parent 42bc26b44c
commit bf55a67838

View File

@@ -8,7 +8,10 @@
#include <asm/thread_info.h>
#include <asm/memory.h>
#include <asm/page.h>
#ifdef CONFIG_STRICT_MEMORY_RWX
#include <asm/pgtable.h>
#endif
#define PROC_INFO \
. = ALIGN(4); \
VMLINUX_SYMBOL(__proc_info_begin) = .; \
@@ -90,6 +93,7 @@ SECTIONS
_text = .;
HEAD_TEXT
}
.text : { /* Real text segment */
_stext = .; /* Text and read-only data */
__exception_text_start = .;
@@ -111,6 +115,9 @@ SECTIONS
*(.got) /* Global offset table */
ARM_CPU_KEEP(PROC_INFO)
}
#ifdef CONFIG_STRICT_MEMORY_RWX
. = ALIGN(1<<SECTION_SHIFT);
#endif
RO_DATA(PAGE_SIZE)
@@ -134,7 +141,11 @@ SECTIONS
_etext = .; /* End of text and rodata section */
#ifndef CONFIG_XIP_KERNEL
#ifdef CONFIG_STRICT_MEMORY_RWX
. = ALIGN(1<<SECTION_SHIFT);
#else
. = ALIGN(PAGE_SIZE);
#endif
__init_begin = .;
#endif
@@ -178,6 +189,10 @@ SECTIONS
INIT_RAM_FS
}
#ifndef CONFIG_XIP_KERNEL
#ifdef CONFIG_STRICT_MEMORY_RWX
. = ALIGN(1<<SECTION_SHIFT);
#endif
__init_data = .;
.exit.data : {
ARM_EXIT_KEEP(EXIT_DATA)
}