CONFIG_STRICT_KERNEL_RWX requires a special alignment
for DATA for some subarches. Today it is just defined
as an #ifdef in vmlinux.lds.S

In order to get more flexibility, this patch moves the
definition of this alignment in Kconfig

On some subarches, CONFIG_STRICT_KERNEL_RWX will
require a special alignment of _etext.

This patch also adds a configuration item for it in Kconfig

Signed-off-by: Christophe Leroy <christophe.le...@c-s.fr>
---
 arch/powerpc/Kconfig              | 9 +++++++++
 arch/powerpc/kernel/vmlinux.lds.S | 9 +++------
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 4a81a80d0635..f3e420f3f1d7 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -728,6 +728,15 @@ config THREAD_SHIFT
          Used to define the stack size. The default is almost always what you
          want. Only change this if you know what you are doing.
 
+config ETEXT_SHIFT
+       int
+       default PPC_PAGE_SHIFT
+
+config DATA_SHIFT
+       int
+       default 24 if STRICT_KERNEL_RWX && PPC64
+       default PPC_PAGE_SHIFT
+
 config FORCE_MAX_ZONEORDER
        int "Maximum zone order"
        range 8 9 if PPC64 && PPC_64K_PAGES
diff --git a/arch/powerpc/kernel/vmlinux.lds.S 
b/arch/powerpc/kernel/vmlinux.lds.S
index 1148c3c60c3b..d210dcfe915a 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -12,11 +12,8 @@
 #include <asm/cache.h>
 #include <asm/thread_info.h>
 
-#if defined(CONFIG_STRICT_KERNEL_RWX) && !defined(CONFIG_PPC32)
-#define STRICT_ALIGN_SIZE      (1 << 24)
-#else
-#define STRICT_ALIGN_SIZE      PAGE_SIZE
-#endif
+#define STRICT_ALIGN_SIZE      (1 << CONFIG_DATA_SHIFT)
+#define ETEXT_ALIGN_SIZE       (1 << CONFIG_ETEXT_SHIFT)
 
 ENTRY(_stext)
 
@@ -131,7 +128,7 @@ SECTIONS
 
        } :kernel
 
-       . = ALIGN(PAGE_SIZE);
+       . = ALIGN(ETEXT_ALIGN_SIZE);
        _etext = .;
        PROVIDE32 (etext = .);
 
-- 
2.13.3

Reply via email to