* [PATCH 0/7] further linker script cleanups
@ 2018-03-09 3:20 Nicolas Pitre
2018-03-09 3:20 ` [PATCH 1/7] ARM: linker script: factor out some common definitions between XIP and non-XIP Nicolas Pitre
` (7 more replies)
0 siblings, 8 replies; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-09 3:20 UTC (permalink / raw)
To: linux-arm-kernel
This series continues on the linker script cleanups that were started in
commit 0d302c710b ("ARM: vmlinux-xip.lds.S: fix multiple issues"). Many
duplications between the XIP and non-XIP scripts are factored out in a
common file, and the TCM support with an XIP kernel is now possible.
This makes for a nice diffstat:
arch/arm/kernel/vmlinux-xip.lds.S | 166 ++----------------------------
arch/arm/kernel/vmlinux.lds.S | 172 ++------------------------------
arch/arm/kernel/vmlinux.lds.h | 135 +++++++++++++++++++++++++
arch/arm/mm/init.c | 11 --
4 files changed, 156 insertions(+), 328 deletions(-)
Alsoavailable here:
git://git.linaro.org/people/nicolas.pitre/linux lds
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/7] ARM: linker script: factor out some common definitions between XIP and non-XIP
2018-03-09 3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
@ 2018-03-09 3:20 ` Nicolas Pitre
2018-03-09 9:27 ` Vladimir Murzin
2018-03-09 3:20 ` [PATCH 2/7] ARM: linker script: factor out stuff for the DISCARD section Nicolas Pitre
` (6 subsequent siblings)
7 siblings, 1 reply; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-09 3:20 UTC (permalink / raw)
To: linux-arm-kernel
Lots of duplications between vmlinux.lds.S and vmlinux-xip.lds.S.
This may lead to one file being updated but not the other. For example,
SOFTIRQENTRY_TEXT and HYPERVISOR_TEXT were missing from the XIP version.
This creates vmlinux.lds.h where a bunch of common defines are moved.
Signed-off-by: Nicolas Pitre <nico@linaro.org>
---
arch/arm/kernel/vmlinux-xip.lds.S | 35 +++-------------------------------
arch/arm/kernel/vmlinux.lds.S | 38 +------------------------------------
arch/arm/kernel/vmlinux.lds.h | 40 +++++++++++++++++++++++++++++++++++++++
3 files changed, 44 insertions(+), 69 deletions(-)
create mode 100644 arch/arm/kernel/vmlinux.lds.h
diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
index 12b87591eb..0a8922b616 100644
--- a/arch/arm/kernel/vmlinux-xip.lds.S
+++ b/arch/arm/kernel/vmlinux-xip.lds.S
@@ -15,38 +15,7 @@
#include <asm/memory.h>
#include <asm/page.h>
-#define PROC_INFO \
- . = ALIGN(4); \
- VMLINUX_SYMBOL(__proc_info_begin) = .; \
- *(.proc.info.init) \
- VMLINUX_SYMBOL(__proc_info_end) = .;
-
-#define IDMAP_TEXT \
- ALIGN_FUNCTION(); \
- VMLINUX_SYMBOL(__idmap_text_start) = .; \
- *(.idmap.text) \
- VMLINUX_SYMBOL(__idmap_text_end) = .; \
- . = ALIGN(PAGE_SIZE); \
- VMLINUX_SYMBOL(__hyp_idmap_text_start) = .; \
- *(.hyp.idmap.text) \
- VMLINUX_SYMBOL(__hyp_idmap_text_end) = .;
-
-#ifdef CONFIG_HOTPLUG_CPU
-#define ARM_CPU_DISCARD(x)
-#define ARM_CPU_KEEP(x) x
-#else
-#define ARM_CPU_DISCARD(x) x
-#define ARM_CPU_KEEP(x)
-#endif
-
-#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
- defined(CONFIG_GENERIC_BUG)
-#define ARM_EXIT_KEEP(x) x
-#define ARM_EXIT_DISCARD(x)
-#else
-#define ARM_EXIT_KEEP(x)
-#define ARM_EXIT_DISCARD(x) x
-#endif
+#include "vmlinux.lds.h"
OUTPUT_ARCH(arm)
ENTRY(stext)
@@ -100,10 +69,12 @@ SECTIONS
*(.entry.text)
__entry_text_end = .;
IRQENTRY_TEXT
+ SOFTIRQENTRY_TEXT
TEXT_TEXT
SCHED_TEXT
CPUIDLE_TEXT
LOCK_TEXT
+ HYPERVISOR_TEXT
KPROBES_TEXT
*(.gnu.warning)
*(.glue_7)
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 84a1ae3ce4..6a6eb483d9 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -15,43 +15,7 @@
#include <asm/page.h>
#include <asm/pgtable.h>
-#define PROC_INFO \
- . = ALIGN(4); \
- VMLINUX_SYMBOL(__proc_info_begin) = .; \
- *(.proc.info.init) \
- VMLINUX_SYMBOL(__proc_info_end) = .;
-
-#define HYPERVISOR_TEXT \
- VMLINUX_SYMBOL(__hyp_text_start) = .; \
- *(.hyp.text) \
- VMLINUX_SYMBOL(__hyp_text_end) = .;
-
-#define IDMAP_TEXT \
- ALIGN_FUNCTION(); \
- VMLINUX_SYMBOL(__idmap_text_start) = .; \
- *(.idmap.text) \
- VMLINUX_SYMBOL(__idmap_text_end) = .; \
- . = ALIGN(PAGE_SIZE); \
- VMLINUX_SYMBOL(__hyp_idmap_text_start) = .; \
- *(.hyp.idmap.text) \
- VMLINUX_SYMBOL(__hyp_idmap_text_end) = .;
-
-#ifdef CONFIG_HOTPLUG_CPU
-#define ARM_CPU_DISCARD(x)
-#define ARM_CPU_KEEP(x) x
-#else
-#define ARM_CPU_DISCARD(x) x
-#define ARM_CPU_KEEP(x)
-#endif
-
-#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
- defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
-#define ARM_EXIT_KEEP(x) x
-#define ARM_EXIT_DISCARD(x)
-#else
-#define ARM_EXIT_KEEP(x)
-#define ARM_EXIT_DISCARD(x) x
-#endif
+#include "vmlinux.lds.h"
OUTPUT_ARCH(arm)
ENTRY(stext)
diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
new file mode 100644
index 0000000000..0a86e8a111
--- /dev/null
+++ b/arch/arm/kernel/vmlinux.lds.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifdef CONFIG_HOTPLUG_CPU
+#define ARM_CPU_DISCARD(x)
+#define ARM_CPU_KEEP(x) x
+#else
+#define ARM_CPU_DISCARD(x) x
+#define ARM_CPU_KEEP(x)
+#endif
+
+#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
+ defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
+#define ARM_EXIT_KEEP(x) x
+#define ARM_EXIT_DISCARD(x)
+#else
+#define ARM_EXIT_KEEP(x)
+#define ARM_EXIT_DISCARD(x) x
+#endif
+
+#define PROC_INFO \
+ . = ALIGN(4); \
+ VMLINUX_SYMBOL(__proc_info_begin) = .; \
+ *(.proc.info.init) \
+ VMLINUX_SYMBOL(__proc_info_end) = .;
+
+#define HYPERVISOR_TEXT \
+ VMLINUX_SYMBOL(__hyp_text_start) = .; \
+ *(.hyp.text) \
+ VMLINUX_SYMBOL(__hyp_text_end) = .;
+
+#define IDMAP_TEXT \
+ ALIGN_FUNCTION(); \
+ VMLINUX_SYMBOL(__idmap_text_start) = .; \
+ *(.idmap.text) \
+ VMLINUX_SYMBOL(__idmap_text_end) = .; \
+ . = ALIGN(PAGE_SIZE); \
+ VMLINUX_SYMBOL(__hyp_idmap_text_start) = .; \
+ *(.hyp.idmap.text) \
+ VMLINUX_SYMBOL(__hyp_idmap_text_end) = .;
+
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/7] ARM: linker script: factor out stuff for the DISCARD section
2018-03-09 3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
2018-03-09 3:20 ` [PATCH 1/7] ARM: linker script: factor out some common definitions between XIP and non-XIP Nicolas Pitre
@ 2018-03-09 3:20 ` Nicolas Pitre
2018-03-09 3:20 ` [PATCH 3/7] ARM: linker script: factor out stuff for the .text section Nicolas Pitre
` (5 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-09 3:20 UTC (permalink / raw)
To: linux-arm-kernel
Move common entries to vmlinux.lds.h and leave XIP and non-XIP entries
in their respective file. The ARM_NOMMU_KEEP() and ARM_NOMMU_DISCARD()
macros are added to be usable within the definition of ARM_DISCARD macro.
Signed-off-by: Nicolas Pitre <nico@linaro.org>
---
arch/arm/kernel/vmlinux-xip.lds.S | 19 +++----------------
arch/arm/kernel/vmlinux.lds.S | 18 ++----------------
arch/arm/kernel/vmlinux.lds.h | 20 ++++++++++++++++++++
3 files changed, 25 insertions(+), 32 deletions(-)
diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
index 0a8922b616..4bd422966d 100644
--- a/arch/arm/kernel/vmlinux-xip.lds.S
+++ b/arch/arm/kernel/vmlinux-xip.lds.S
@@ -38,20 +38,9 @@ SECTIONS
* unwind sections get included.
*/
/DISCARD/ : {
- *(.ARM.exidx.exit.text)
- *(.ARM.extab.exit.text)
- ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text))
- ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text))
- ARM_EXIT_DISCARD(EXIT_TEXT)
- ARM_EXIT_DISCARD(EXIT_DATA)
- EXIT_CALL
-#ifndef CONFIG_MMU
- *(.text.fixup)
- *(__ex_table)
-#endif
+ ARM_DISCARD
*(.alt.smp.init)
- *(.discard)
- *(.discard.*)
+ *(.pv_table)
}
. = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR);
@@ -89,9 +78,7 @@ SECTIONS
. = ALIGN(4);
__ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
__start___ex_table = .;
-#ifdef CONFIG_MMU
- *(__ex_table)
-#endif
+ ARM_MMU_KEEP(*(__ex_table))
__stop___ex_table = .;
}
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 6a6eb483d9..b34fbafd54 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -38,22 +38,10 @@ SECTIONS
* unwind sections get included.
*/
/DISCARD/ : {
- *(.ARM.exidx.exit.text)
- *(.ARM.extab.exit.text)
- ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text))
- ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text))
- ARM_EXIT_DISCARD(EXIT_TEXT)
- ARM_EXIT_DISCARD(EXIT_DATA)
- EXIT_CALL
-#ifndef CONFIG_MMU
- *(.text.fixup)
- *(__ex_table)
-#endif
+ ARM_DISCARD
#ifndef CONFIG_SMP_ON_UP
*(.alt.smp.init)
#endif
- *(.discard)
- *(.discard.*)
}
. = PAGE_OFFSET + TEXT_OFFSET;
@@ -98,9 +86,7 @@ SECTIONS
. = ALIGN(4);
__ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
__start___ex_table = .;
-#ifdef CONFIG_MMU
- *(__ex_table)
-#endif
+ ARM_MMU_KEEP(*(__ex_table))
__stop___ex_table = .;
}
diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
index 0a86e8a111..1258b66487 100644
--- a/arch/arm/kernel/vmlinux.lds.h
+++ b/arch/arm/kernel/vmlinux.lds.h
@@ -17,6 +17,14 @@
#define ARM_EXIT_DISCARD(x) x
#endif
+#ifdef CONFIG_MMU
+#define ARM_MMU_KEEP(x) x
+#define ARM_MMU_DISCARD(x)
+#else
+#define ARM_MMU_KEEP(x)
+#define ARM_MMU_DISCARD(x) x
+#endif
+
#define PROC_INFO \
. = ALIGN(4); \
VMLINUX_SYMBOL(__proc_info_begin) = .; \
@@ -38,3 +46,15 @@
*(.hyp.idmap.text) \
VMLINUX_SYMBOL(__hyp_idmap_text_end) = .;
+#define ARM_DISCARD \
+ *(.ARM.exidx.exit.text) \
+ *(.ARM.extab.exit.text) \
+ ARM_CPU_DISCARD(*(.ARM.exidx.cpuexit.text)) \
+ ARM_CPU_DISCARD(*(.ARM.extab.cpuexit.text)) \
+ ARM_EXIT_DISCARD(EXIT_TEXT) \
+ ARM_EXIT_DISCARD(EXIT_DATA) \
+ EXIT_CALL \
+ ARM_MMU_DISCARD(*(.text.fixup)) \
+ ARM_MMU_DISCARD(*(__ex_table)) \
+ *(.discard) \
+ *(.discard.*)
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/7] ARM: linker script: factor out stuff for the .text section
2018-03-09 3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
2018-03-09 3:20 ` [PATCH 1/7] ARM: linker script: factor out some common definitions between XIP and non-XIP Nicolas Pitre
2018-03-09 3:20 ` [PATCH 2/7] ARM: linker script: factor out stuff for the DISCARD section Nicolas Pitre
@ 2018-03-09 3:20 ` Nicolas Pitre
2018-03-09 3:20 ` [PATCH 4/7] ARM: linker script: factor out unwinding table sections Nicolas Pitre
` (4 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-09 3:20 UTC (permalink / raw)
To: linux-arm-kernel
Move common entries to vmlinux.lds.h as ARM_TEXT.
Signed-off-by: Nicolas Pitre <nico@linaro.org>
---
arch/arm/kernel/vmlinux-xip.lds.S | 19 +------------------
arch/arm/kernel/vmlinux.lds.S | 19 +------------------
arch/arm/kernel/vmlinux.lds.h | 20 ++++++++++++++++++++
3 files changed, 22 insertions(+), 36 deletions(-)
diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
index 4bd422966d..4ddb547b19 100644
--- a/arch/arm/kernel/vmlinux-xip.lds.S
+++ b/arch/arm/kernel/vmlinux-xip.lds.S
@@ -53,24 +53,7 @@ SECTIONS
.text : { /* Real text segment */
_stext = .; /* Text and read-only data */
- IDMAP_TEXT
- __entry_text_start = .;
- *(.entry.text)
- __entry_text_end = .;
- IRQENTRY_TEXT
- SOFTIRQENTRY_TEXT
- TEXT_TEXT
- SCHED_TEXT
- CPUIDLE_TEXT
- LOCK_TEXT
- HYPERVISOR_TEXT
- KPROBES_TEXT
- *(.gnu.warning)
- *(.glue_7)
- *(.glue_7t)
- . = ALIGN(4);
- *(.got) /* Global offset table */
- ARM_CPU_KEEP(PROC_INFO)
+ ARM_TEXT
}
RO_DATA(PAGE_SIZE)
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index b34fbafd54..a02a96c651 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -56,24 +56,7 @@ SECTIONS
.text : { /* Real text segment */
_stext = .; /* Text and read-only data */
- IDMAP_TEXT
- __entry_text_start = .;
- *(.entry.text)
- __entry_text_end = .;
- IRQENTRY_TEXT
- SOFTIRQENTRY_TEXT
- TEXT_TEXT
- SCHED_TEXT
- CPUIDLE_TEXT
- LOCK_TEXT
- HYPERVISOR_TEXT
- KPROBES_TEXT
- *(.gnu.warning)
- *(.glue_7)
- *(.glue_7t)
- . = ALIGN(4);
- *(.got) /* Global offset table */
- ARM_CPU_KEEP(PROC_INFO)
+ ARM_TEXT
}
#ifdef CONFIG_DEBUG_ALIGN_RODATA
diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
index 1258b66487..0ef86d75a0 100644
--- a/arch/arm/kernel/vmlinux.lds.h
+++ b/arch/arm/kernel/vmlinux.lds.h
@@ -58,3 +58,23 @@
ARM_MMU_DISCARD(*(__ex_table)) \
*(.discard) \
*(.discard.*)
+
+#define ARM_TEXT \
+ IDMAP_TEXT \
+ __entry_text_start = .; \
+ *(.entry.text) \
+ __entry_text_end = .; \
+ IRQENTRY_TEXT \
+ SOFTIRQENTRY_TEXT \
+ TEXT_TEXT \
+ SCHED_TEXT \
+ CPUIDLE_TEXT \
+ LOCK_TEXT \
+ HYPERVISOR_TEXT \
+ KPROBES_TEXT \
+ *(.gnu.warning) \
+ *(.glue_7) \
+ *(.glue_7t) \
+ . = ALIGN(4); \
+ *(.got) /* Global offset table */ \
+ ARM_CPU_KEEP(PROC_INFO)
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/7] ARM: linker script: factor out unwinding table sections
2018-03-09 3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
` (2 preceding siblings ...)
2018-03-09 3:20 ` [PATCH 3/7] ARM: linker script: factor out stuff for the .text section Nicolas Pitre
@ 2018-03-09 3:20 ` Nicolas Pitre
2018-03-09 3:20 ` [PATCH 5/7] ARM: linker script: factor out vectors and stubs Nicolas Pitre
` (3 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-09 3:20 UTC (permalink / raw)
To: linux-arm-kernel
Signed-off-by: Nicolas Pitre <nico@linaro.org>
---
arch/arm/kernel/vmlinux-xip.lds.S | 15 +--------------
arch/arm/kernel/vmlinux.lds.S | 15 +--------------
arch/arm/kernel/vmlinux.lds.h | 14 ++++++++++++++
3 files changed, 16 insertions(+), 28 deletions(-)
diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
index 4ddb547b19..65048708e4 100644
--- a/arch/arm/kernel/vmlinux-xip.lds.S
+++ b/arch/arm/kernel/vmlinux-xip.lds.S
@@ -66,20 +66,7 @@ SECTIONS
}
#ifdef CONFIG_ARM_UNWIND
- /*
- * Stack unwinding tables
- */
- . = ALIGN(8);
- .ARM.unwind_idx : {
- __start_unwind_idx = .;
- *(.ARM.exidx*)
- __stop_unwind_idx = .;
- }
- .ARM.unwind_tab : {
- __start_unwind_tab = .;
- *(.ARM.extab*)
- __stop_unwind_tab = .;
- }
+ ARM_UNWIND_SECTIONS
#endif
NOTES
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index a02a96c651..3b375d8ccb 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -74,20 +74,7 @@ SECTIONS
}
#ifdef CONFIG_ARM_UNWIND
- /*
- * Stack unwinding tables
- */
- . = ALIGN(8);
- .ARM.unwind_idx : {
- __start_unwind_idx = .;
- *(.ARM.exidx*)
- __stop_unwind_idx = .;
- }
- .ARM.unwind_tab : {
- __start_unwind_tab = .;
- *(.ARM.extab*)
- __stop_unwind_tab = .;
- }
+ ARM_UNWIND_SECTIONS
#endif
NOTES
diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
index 0ef86d75a0..566a7b42a0 100644
--- a/arch/arm/kernel/vmlinux.lds.h
+++ b/arch/arm/kernel/vmlinux.lds.h
@@ -78,3 +78,17 @@
. = ALIGN(4); \
*(.got) /* Global offset table */ \
ARM_CPU_KEEP(PROC_INFO)
+
+/* Stack unwinding tables */
+#define ARM_UNWIND_SECTIONS \
+ . = ALIGN(8); \
+ .ARM.unwind_idx : { \
+ __start_unwind_idx = .; \
+ *(.ARM.exidx*) \
+ __stop_unwind_idx = .; \
+ } \
+ .ARM.unwind_tab : { \
+ __start_unwind_tab = .; \
+ *(.ARM.extab*) \
+ __stop_unwind_tab = .; \
+ }
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 5/7] ARM: linker script: factor out vectors and stubs
2018-03-09 3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
` (3 preceding siblings ...)
2018-03-09 3:20 ` [PATCH 4/7] ARM: linker script: factor out unwinding table sections Nicolas Pitre
@ 2018-03-09 3:20 ` Nicolas Pitre
2018-03-09 3:20 ` [PATCH 6/7] ARM: linker script: factor out TCM bits Nicolas Pitre
` (2 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-09 3:20 UTC (permalink / raw)
To: linux-arm-kernel
Signed-off-by: Nicolas Pitre <nico@linaro.org>
---
arch/arm/kernel/vmlinux-xip.lds.S | 21 +--------------------
arch/arm/kernel/vmlinux.lds.S | 21 +--------------------
arch/arm/kernel/vmlinux.lds.h | 21 +++++++++++++++++++++
3 files changed, 23 insertions(+), 40 deletions(-)
diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
index 65048708e4..5a50a2a917 100644
--- a/arch/arm/kernel/vmlinux-xip.lds.S
+++ b/arch/arm/kernel/vmlinux-xip.lds.S
@@ -73,26 +73,7 @@ SECTIONS
_etext = .; /* End of text and rodata section */
- /*
- * The vectors and stubs are relocatable code, and the
- * only thing that matters is their relative offsets
- */
- __vectors_start = .;
- .vectors 0xffff0000 : AT(__vectors_start) {
- *(.vectors)
- }
- . = __vectors_start + SIZEOF(.vectors);
- __vectors_end = .;
-
- __stubs_start = .;
- .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {
- *(.stubs)
- }
- . = __stubs_start + SIZEOF(.stubs);
- __stubs_end = .;
-
- PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
-
+ ARM_VECTORS
INIT_TEXT_SECTION(8)
.exit.text : {
ARM_EXIT_KEEP(EXIT_TEXT)
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 3b375d8ccb..2b89363090 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -86,26 +86,7 @@ SECTIONS
#endif
__init_begin = .;
- /*
- * The vectors and stubs are relocatable code, and the
- * only thing that matters is their relative offsets
- */
- __vectors_start = .;
- .vectors 0xffff0000 : AT(__vectors_start) {
- *(.vectors)
- }
- . = __vectors_start + SIZEOF(.vectors);
- __vectors_end = .;
-
- __stubs_start = .;
- .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {
- *(.stubs)
- }
- . = __stubs_start + SIZEOF(.stubs);
- __stubs_end = .;
-
- PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
-
+ ARM_VECTORS
INIT_TEXT_SECTION(8)
.exit.text : {
ARM_EXIT_KEEP(EXIT_TEXT)
diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
index 566a7b42a0..0a4682ecc4 100644
--- a/arch/arm/kernel/vmlinux.lds.h
+++ b/arch/arm/kernel/vmlinux.lds.h
@@ -92,3 +92,24 @@
*(.ARM.extab*) \
__stop_unwind_tab = .; \
}
+
+/*
+ * The vectors and stubs are relocatable code, and the
+ * only thing that matters is their relative offsets
+ */
+#define ARM_VECTORS \
+ __vectors_start = .; \
+ .vectors 0xffff0000 : AT(__vectors_start) { \
+ *(.vectors) \
+ } \
+ . = __vectors_start + SIZEOF(.vectors); \
+ __vectors_end = .; \
+ \
+ __stubs_start = .; \
+ .stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) { \
+ *(.stubs) \
+ } \
+ . = __stubs_start + SIZEOF(.stubs); \
+ __stubs_end = .; \
+ \
+ PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 6/7] ARM: linker script: factor out TCM bits
2018-03-09 3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
` (4 preceding siblings ...)
2018-03-09 3:20 ` [PATCH 5/7] ARM: linker script: factor out vectors and stubs Nicolas Pitre
@ 2018-03-09 3:20 ` Nicolas Pitre
2018-03-09 3:21 ` [PATCH 7/7] ARM: simplify and fix linker script for TCM Nicolas Pitre
2018-03-09 18:06 ` [PATCH 0/7] further linker script cleanups Chris Brandt
7 siblings, 0 replies; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-09 3:20 UTC (permalink / raw)
To: linux-arm-kernel
This is a plain move with identical results, and therefore
still broken in the XIP case.
Signed-off-by: Nicolas Pitre <nico@linaro.org>
---
arch/arm/kernel/vmlinux-xip.lds.S | 55 +----------------------------------
arch/arm/kernel/vmlinux.lds.S | 55 +----------------------------------
arch/arm/kernel/vmlinux.lds.h | 60 +++++++++++++++++++++++++++++++++++++++
3 files changed, 62 insertions(+), 108 deletions(-)
diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
index 5a50a2a917..c727c56f3c 100644
--- a/arch/arm/kernel/vmlinux-xip.lds.S
+++ b/arch/arm/kernel/vmlinux-xip.lds.S
@@ -144,60 +144,7 @@ SECTIONS
__init_end = .;
#ifdef CONFIG_HAVE_TCM
- /*
- * We align everything to a page boundary so we can
- * free it after init has commenced and TCM contents have
- * been copied to its destination.
- */
- .tcm_start : {
- . = ALIGN(PAGE_SIZE);
- __tcm_start = .;
- __itcm_start = .;
- }
-
- /*
- * Link these to the ITCM RAM
- * Put VMA to the TCM address and LMA to the common RAM
- * and we'll upload the contents from RAM to TCM and free
- * the used RAM after that.
- */
- .text_itcm ITCM_OFFSET : AT(__itcm_start)
- {
- __sitcm_text = .;
- *(.tcm.text)
- *(.tcm.rodata)
- . = ALIGN(4);
- __eitcm_text = .;
- }
-
- /*
- * Reset the dot pointer, this is needed to create the
- * relative __dtcm_start below (to be used as extern in code).
- */
- . = ADDR(.tcm_start) + SIZEOF(.tcm_start) + SIZEOF(.text_itcm);
-
- .dtcm_start : {
- __dtcm_start = .;
- }
-
- /* TODO: add remainder of ITCM as well, that can be used for data! */
- .data_dtcm DTCM_OFFSET : AT(__dtcm_start)
- {
- . = ALIGN(4);
- __sdtcm_data = .;
- *(.tcm.data)
- . = ALIGN(4);
- __edtcm_data = .;
- }
-
- /* Reset the dot pointer or the linker gets confused */
- . = ADDR(.dtcm_start) + SIZEOF(.data_dtcm);
-
- /* End marker for freeing TCM copy in linked object */
- .tcm_end : AT(ADDR(.dtcm_start) + SIZEOF(.data_dtcm)){
- . = ALIGN(PAGE_SIZE);
- __tcm_end = .;
- }
+ ARM_TCM
#endif
BSS_SECTION(0, 0, 8)
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 2b89363090..1e9f2a6b3d 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -139,60 +139,7 @@ SECTIONS
_edata = .;
#ifdef CONFIG_HAVE_TCM
- /*
- * We align everything to a page boundary so we can
- * free it after init has commenced and TCM contents have
- * been copied to its destination.
- */
- .tcm_start : {
- . = ALIGN(PAGE_SIZE);
- __tcm_start = .;
- __itcm_start = .;
- }
-
- /*
- * Link these to the ITCM RAM
- * Put VMA to the TCM address and LMA to the common RAM
- * and we'll upload the contents from RAM to TCM and free
- * the used RAM after that.
- */
- .text_itcm ITCM_OFFSET : AT(__itcm_start)
- {
- __sitcm_text = .;
- *(.tcm.text)
- *(.tcm.rodata)
- . = ALIGN(4);
- __eitcm_text = .;
- }
-
- /*
- * Reset the dot pointer, this is needed to create the
- * relative __dtcm_start below (to be used as extern in code).
- */
- . = ADDR(.tcm_start) + SIZEOF(.tcm_start) + SIZEOF(.text_itcm);
-
- .dtcm_start : {
- __dtcm_start = .;
- }
-
- /* TODO: add remainder of ITCM as well, that can be used for data! */
- .data_dtcm DTCM_OFFSET : AT(__dtcm_start)
- {
- . = ALIGN(4);
- __sdtcm_data = .;
- *(.tcm.data)
- . = ALIGN(4);
- __edtcm_data = .;
- }
-
- /* Reset the dot pointer or the linker gets confused */
- . = ADDR(.dtcm_start) + SIZEOF(.data_dtcm);
-
- /* End marker for freeing TCM copy in linked object */
- .tcm_end : AT(ADDR(.dtcm_start) + SIZEOF(.data_dtcm)){
- . = ALIGN(PAGE_SIZE);
- __tcm_end = .;
- }
+ ARM_TCM
#endif
BSS_SECTION(0, 0, 0)
diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
index 0a4682ecc4..cf9dabbdbd 100644
--- a/arch/arm/kernel/vmlinux.lds.h
+++ b/arch/arm/kernel/vmlinux.lds.h
@@ -113,3 +113,63 @@
__stubs_end = .; \
\
PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
+
+#define ARM_TCM \
+ /* \
+ * We align everything to a page boundary so we can \
+ * free it after init has commenced and TCM contents have \
+ * been copied to its destination. \
+ */ \
+ .tcm_start : { \
+ . = ALIGN(PAGE_SIZE); \
+ __tcm_start = .; \
+ __itcm_start = .; \
+ } \
+ \
+ /* \
+ * Link these to the ITCM RAM \
+ * \
+ * Put VMA to the TCM address and LMA to the common RAM \
+ * and we'll upload the contents from RAM to TCM and free \
+ * the used RAM after that. \
+ */ \
+ .text_itcm ITCM_OFFSET : AT(__itcm_start) \
+ { \
+ __sitcm_text = .; \
+ *(.tcm.text) \
+ *(.tcm.rodata) \
+ . = ALIGN(4); \
+ __eitcm_text = .; \
+ } \
+ \
+ /* \
+ * Reset the dot pointer, this is needed to create the \
+ * relative __dtcm_start below (to be used as extern in code). \
+ */ \
+ . = ADDR(.tcm_start) + SIZEOF(.tcm_start) + SIZEOF(.text_itcm); \
+ \
+ .dtcm_start : { \
+ __dtcm_start = .; \
+ } \
+ \
+ /* \
+ * TODO: add remainder of ITCM as well, \
+ * that can be used for data! \
+ */ \
+ .data_dtcm DTCM_OFFSET : AT(__dtcm_start) \
+ { \
+ . = ALIGN(4); \
+ __sdtcm_data = .; \
+ *(.tcm.data) \
+ . = ALIGN(4); \
+ __edtcm_data = .; \
+ } \
+ \
+ /* Reset the dot pointer or the linker gets confused */ \
+ . = ADDR(.dtcm_start) + SIZEOF(.data_dtcm); \
+ \
+ /* End marker for freeing TCM copy in linked object */ \
+ .tcm_end : AT(ADDR(.dtcm_start) + SIZEOF(.data_dtcm)){ \
+ . = ALIGN(PAGE_SIZE); \
+ __tcm_end = .; \
+ }
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 7/7] ARM: simplify and fix linker script for TCM
2018-03-09 3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
` (5 preceding siblings ...)
2018-03-09 3:20 ` [PATCH 6/7] ARM: linker script: factor out TCM bits Nicolas Pitre
@ 2018-03-09 3:21 ` Nicolas Pitre
2018-03-09 18:06 ` [PATCH 0/7] further linker script cleanups Chris Brandt
7 siblings, 0 replies; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-09 3:21 UTC (permalink / raw)
To: linux-arm-kernel
Let's put the TCM stuff in the __init section directly. No need for
a separately freed memory area.
Remove redundant linker sections, as well as comments that were more
confusing than no comments at all. Finally make it XIP compatible by
using LOAD_OFFSET in the section LMA specification.
Signed-off-by: Nicolas Pitre <nico@linaro.org>
---
arch/arm/kernel/vmlinux-xip.lds.S | 8 +++---
arch/arm/kernel/vmlinux.lds.S | 8 +++---
arch/arm/kernel/vmlinux.lds.h | 52 +++++----------------------------------
arch/arm/mm/init.c | 11 ---------
4 files changed, 14 insertions(+), 65 deletions(-)
diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
index c727c56f3c..d32f5d35f6 100644
--- a/arch/arm/kernel/vmlinux-xip.lds.S
+++ b/arch/arm/kernel/vmlinux-xip.lds.S
@@ -132,6 +132,10 @@ SECTIONS
PERCPU_SECTION(L1_CACHE_BYTES)
#endif
+#ifdef CONFIG_HAVE_TCM
+ ARM_TCM
+#endif
+
/*
* End of copied data. We need a dummy section to get its LMA.
* Also located before final ALIGN() as trailing padding is not stored
@@ -143,10 +147,6 @@ SECTIONS
. = ALIGN(PAGE_SIZE);
__init_end = .;
-#ifdef CONFIG_HAVE_TCM
- ARM_TCM
-#endif
-
BSS_SECTION(0, 0, 8)
_end = .;
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 1e9f2a6b3d..b77dc675ae 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -127,6 +127,10 @@ SECTIONS
PERCPU_SECTION(L1_CACHE_BYTES)
#endif
+#ifdef CONFIG_HAVE_TCM
+ ARM_TCM
+#endif
+
#ifdef CONFIG_STRICT_KERNEL_RWX
. = ALIGN(1<<SECTION_SHIFT);
#else
@@ -138,10 +142,6 @@ SECTIONS
RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
_edata = .;
-#ifdef CONFIG_HAVE_TCM
- ARM_TCM
-#endif
-
BSS_SECTION(0, 0, 0)
_end = .;
diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
index cf9dabbdbd..71281e08e1 100644
--- a/arch/arm/kernel/vmlinux.lds.h
+++ b/arch/arm/kernel/vmlinux.lds.h
@@ -115,61 +115,21 @@
PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
#define ARM_TCM \
- /* \
- * We align everything to a page boundary so we can \
- * free it after init has commenced and TCM contents have \
- * been copied to its destination. \
- */ \
- .tcm_start : { \
- . = ALIGN(PAGE_SIZE); \
- __tcm_start = .; \
- __itcm_start = .; \
- } \
- \
- /* \
- * Link these to the ITCM RAM \
- * \
- * Put VMA to the TCM address and LMA to the common RAM \
- * and we'll upload the contents from RAM to TCM and free \
- * the used RAM after that. \
- */ \
- .text_itcm ITCM_OFFSET : AT(__itcm_start) \
- { \
+ __itcm_start = ALIGN(4); \
+ .text_itcm ITCM_OFFSET : AT(__itcm_start - LOAD_OFFSET) { \
__sitcm_text = .; \
*(.tcm.text) \
*(.tcm.rodata) \
. = ALIGN(4); \
__eitcm_text = .; \
} \
+ . = __itcm_start + SIZEOF(.text_itcm); \
\
- /* \
- * Reset the dot pointer, this is needed to create the \
- * relative __dtcm_start below (to be used as extern in code). \
- */ \
- . = ADDR(.tcm_start) + SIZEOF(.tcm_start) + SIZEOF(.text_itcm); \
- \
- .dtcm_start : { \
- __dtcm_start = .; \
- } \
- \
- /* \
- * TODO: add remainder of ITCM as well, \
- * that can be used for data! \
- */ \
- .data_dtcm DTCM_OFFSET : AT(__dtcm_start) \
- { \
- . = ALIGN(4); \
+ __dtcm_start = .; \
+ .data_dtcm DTCM_OFFSET : AT(__dtcm_start - LOAD_OFFSET) { \
__sdtcm_data = .; \
*(.tcm.data) \
. = ALIGN(4); \
__edtcm_data = .; \
} \
- \
- /* Reset the dot pointer or the linker gets confused */ \
- . = ADDR(.dtcm_start) + SIZEOF(.data_dtcm); \
- \
- /* End marker for freeing TCM copy in linked object */ \
- .tcm_end : AT(ADDR(.dtcm_start) + SIZEOF(.data_dtcm)){ \
- . = ALIGN(PAGE_SIZE); \
- __tcm_end = .; \
- }
+ . = __dtcm_start + SIZEOF(.data_dtcm);
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index bd6f451353..c186474422 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -758,20 +758,9 @@ void set_kernel_text_ro(void)
static inline void fix_kernmem_perms(void) { }
#endif /* CONFIG_STRICT_KERNEL_RWX */
-void free_tcmmem(void)
-{
-#ifdef CONFIG_HAVE_TCM
- extern char __tcm_start, __tcm_end;
-
- poison_init_mem(&__tcm_start, &__tcm_end - &__tcm_start);
- free_reserved_area(&__tcm_start, &__tcm_end, -1, "TCM link");
-#endif
-}
-
void free_initmem(void)
{
fix_kernmem_perms();
- free_tcmmem();
poison_init_mem(__init_begin, __init_end - __init_begin);
if (!machine_is_integrator() && !machine_is_cintegrator())
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 1/7] ARM: linker script: factor out some common definitions between XIP and non-XIP
2018-03-09 3:20 ` [PATCH 1/7] ARM: linker script: factor out some common definitions between XIP and non-XIP Nicolas Pitre
@ 2018-03-09 9:27 ` Vladimir Murzin
2018-03-10 1:05 ` Nicolas Pitre
0 siblings, 1 reply; 12+ messages in thread
From: Vladimir Murzin @ 2018-03-09 9:27 UTC (permalink / raw)
To: linux-arm-kernel
On 09/03/18 03:20, Nicolas Pitre wrote:
> Lots of duplications between vmlinux.lds.S and vmlinux-xip.lds.S.
> This may lead to one file being updated but not the other. For example,
> SOFTIRQENTRY_TEXT and HYPERVISOR_TEXT were missing from the XIP version.
It looks to me that HYPERVISOR_TEXT was not present in the XIP version
intentionally - XIP depends on !ARM_LPAE, i.e. not support for virtualisation.
Cheers
Vladimir
>
> This creates vmlinux.lds.h where a bunch of common defines are moved.
>
> Signed-off-by: Nicolas Pitre <nico@linaro.org>
> ---
> arch/arm/kernel/vmlinux-xip.lds.S | 35 +++-------------------------------
> arch/arm/kernel/vmlinux.lds.S | 38 +------------------------------------
> arch/arm/kernel/vmlinux.lds.h | 40 +++++++++++++++++++++++++++++++++++++++
> 3 files changed, 44 insertions(+), 69 deletions(-)
> create mode 100644 arch/arm/kernel/vmlinux.lds.h
>
> diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
> index 12b87591eb..0a8922b616 100644
> --- a/arch/arm/kernel/vmlinux-xip.lds.S
> +++ b/arch/arm/kernel/vmlinux-xip.lds.S
> @@ -15,38 +15,7 @@
> #include <asm/memory.h>
> #include <asm/page.h>
>
> -#define PROC_INFO \
> - . = ALIGN(4); \
> - VMLINUX_SYMBOL(__proc_info_begin) = .; \
> - *(.proc.info.init) \
> - VMLINUX_SYMBOL(__proc_info_end) = .;
> -
> -#define IDMAP_TEXT \
> - ALIGN_FUNCTION(); \
> - VMLINUX_SYMBOL(__idmap_text_start) = .; \
> - *(.idmap.text) \
> - VMLINUX_SYMBOL(__idmap_text_end) = .; \
> - . = ALIGN(PAGE_SIZE); \
> - VMLINUX_SYMBOL(__hyp_idmap_text_start) = .; \
> - *(.hyp.idmap.text) \
> - VMLINUX_SYMBOL(__hyp_idmap_text_end) = .;
> -
> -#ifdef CONFIG_HOTPLUG_CPU
> -#define ARM_CPU_DISCARD(x)
> -#define ARM_CPU_KEEP(x) x
> -#else
> -#define ARM_CPU_DISCARD(x) x
> -#define ARM_CPU_KEEP(x)
> -#endif
> -
> -#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
> - defined(CONFIG_GENERIC_BUG)
> -#define ARM_EXIT_KEEP(x) x
> -#define ARM_EXIT_DISCARD(x)
> -#else
> -#define ARM_EXIT_KEEP(x)
> -#define ARM_EXIT_DISCARD(x) x
> -#endif
> +#include "vmlinux.lds.h"
>
> OUTPUT_ARCH(arm)
> ENTRY(stext)
> @@ -100,10 +69,12 @@ SECTIONS
> *(.entry.text)
> __entry_text_end = .;
> IRQENTRY_TEXT
> + SOFTIRQENTRY_TEXT
> TEXT_TEXT
> SCHED_TEXT
> CPUIDLE_TEXT
> LOCK_TEXT
> + HYPERVISOR_TEXT
> KPROBES_TEXT
> *(.gnu.warning)
> *(.glue_7)
> diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
> index 84a1ae3ce4..6a6eb483d9 100644
> --- a/arch/arm/kernel/vmlinux.lds.S
> +++ b/arch/arm/kernel/vmlinux.lds.S
> @@ -15,43 +15,7 @@
> #include <asm/page.h>
> #include <asm/pgtable.h>
>
> -#define PROC_INFO \
> - . = ALIGN(4); \
> - VMLINUX_SYMBOL(__proc_info_begin) = .; \
> - *(.proc.info.init) \
> - VMLINUX_SYMBOL(__proc_info_end) = .;
> -
> -#define HYPERVISOR_TEXT \
> - VMLINUX_SYMBOL(__hyp_text_start) = .; \
> - *(.hyp.text) \
> - VMLINUX_SYMBOL(__hyp_text_end) = .;
> -
> -#define IDMAP_TEXT \
> - ALIGN_FUNCTION(); \
> - VMLINUX_SYMBOL(__idmap_text_start) = .; \
> - *(.idmap.text) \
> - VMLINUX_SYMBOL(__idmap_text_end) = .; \
> - . = ALIGN(PAGE_SIZE); \
> - VMLINUX_SYMBOL(__hyp_idmap_text_start) = .; \
> - *(.hyp.idmap.text) \
> - VMLINUX_SYMBOL(__hyp_idmap_text_end) = .;
> -
> -#ifdef CONFIG_HOTPLUG_CPU
> -#define ARM_CPU_DISCARD(x)
> -#define ARM_CPU_KEEP(x) x
> -#else
> -#define ARM_CPU_DISCARD(x) x
> -#define ARM_CPU_KEEP(x)
> -#endif
> -
> -#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
> - defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
> -#define ARM_EXIT_KEEP(x) x
> -#define ARM_EXIT_DISCARD(x)
> -#else
> -#define ARM_EXIT_KEEP(x)
> -#define ARM_EXIT_DISCARD(x) x
> -#endif
> +#include "vmlinux.lds.h"
>
> OUTPUT_ARCH(arm)
> ENTRY(stext)
> diff --git a/arch/arm/kernel/vmlinux.lds.h b/arch/arm/kernel/vmlinux.lds.h
> new file mode 100644
> index 0000000000..0a86e8a111
> --- /dev/null
> +++ b/arch/arm/kernel/vmlinux.lds.h
> @@ -0,0 +1,40 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +
> +#ifdef CONFIG_HOTPLUG_CPU
> +#define ARM_CPU_DISCARD(x)
> +#define ARM_CPU_KEEP(x) x
> +#else
> +#define ARM_CPU_DISCARD(x) x
> +#define ARM_CPU_KEEP(x)
> +#endif
> +
> +#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
> + defined(CONFIG_GENERIC_BUG) || defined(CONFIG_JUMP_LABEL)
> +#define ARM_EXIT_KEEP(x) x
> +#define ARM_EXIT_DISCARD(x)
> +#else
> +#define ARM_EXIT_KEEP(x)
> +#define ARM_EXIT_DISCARD(x) x
> +#endif
> +
> +#define PROC_INFO \
> + . = ALIGN(4); \
> + VMLINUX_SYMBOL(__proc_info_begin) = .; \
> + *(.proc.info.init) \
> + VMLINUX_SYMBOL(__proc_info_end) = .;
> +
> +#define HYPERVISOR_TEXT \
> + VMLINUX_SYMBOL(__hyp_text_start) = .; \
> + *(.hyp.text) \
> + VMLINUX_SYMBOL(__hyp_text_end) = .;
> +
> +#define IDMAP_TEXT \
> + ALIGN_FUNCTION(); \
> + VMLINUX_SYMBOL(__idmap_text_start) = .; \
> + *(.idmap.text) \
> + VMLINUX_SYMBOL(__idmap_text_end) = .; \
> + . = ALIGN(PAGE_SIZE); \
> + VMLINUX_SYMBOL(__hyp_idmap_text_start) = .; \
> + *(.hyp.idmap.text) \
> + VMLINUX_SYMBOL(__hyp_idmap_text_end) = .;
> +
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 0/7] further linker script cleanups
2018-03-09 3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
` (6 preceding siblings ...)
2018-03-09 3:21 ` [PATCH 7/7] ARM: simplify and fix linker script for TCM Nicolas Pitre
@ 2018-03-09 18:06 ` Chris Brandt
2018-03-10 1:07 ` Nicolas Pitre
7 siblings, 1 reply; 12+ messages in thread
From: Chris Brandt @ 2018-03-09 18:06 UTC (permalink / raw)
To: linux-arm-kernel
On Thursday, March 08, 2018 1, Nicolas Pitre wrote:
> This series continues on the linker script cleanups that were started in
> commit 0d302c710b ("ARM: vmlinux-xip.lds.S: fix multiple issues"). Many
> duplications between the XIP and non-XIP scripts are factored out in a
> common file, and the TCM support with an XIP kernel is now possible.
>
> This makes for a nice diffstat:
Thank you Nicolas for your continued work on XIP_KERNEL.
As you can expect, since you were just move things around, everything
still builds and boots fine on my system.
Renesas RZ/A1: Cortex-A9 with MMU enabled
Chris
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/7] ARM: linker script: factor out some common definitions between XIP and non-XIP
2018-03-09 9:27 ` Vladimir Murzin
@ 2018-03-10 1:05 ` Nicolas Pitre
0 siblings, 0 replies; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-10 1:05 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, 9 Mar 2018, Vladimir Murzin wrote:
> On 09/03/18 03:20, Nicolas Pitre wrote:
> > Lots of duplications between vmlinux.lds.S and vmlinux-xip.lds.S.
> > This may lead to one file being updated but not the other. For example,
> > SOFTIRQENTRY_TEXT and HYPERVISOR_TEXT were missing from the XIP version.
>
> It looks to me that HYPERVISOR_TEXT was not present in the XIP version
> intentionally - XIP depends on !ARM_LPAE, i.e. not support for virtualisation.
Still... the !ARM_LPAE is an artificial dependency and there is no
fundamental reason besides kconfig issues that would prevent XIP on
LPAE.
Nicolas
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 0/7] further linker script cleanups
2018-03-09 18:06 ` [PATCH 0/7] further linker script cleanups Chris Brandt
@ 2018-03-10 1:07 ` Nicolas Pitre
0 siblings, 0 replies; 12+ messages in thread
From: Nicolas Pitre @ 2018-03-10 1:07 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, 9 Mar 2018, Chris Brandt wrote:
> On Thursday, March 08, 2018 1, Nicolas Pitre wrote:
> > This series continues on the linker script cleanups that were started in
> > commit 0d302c710b ("ARM: vmlinux-xip.lds.S: fix multiple issues"). Many
> > duplications between the XIP and non-XIP scripts are factored out in a
> > common file, and the TCM support with an XIP kernel is now possible.
> >
> > This makes for a nice diffstat:
>
> Thank you Nicolas for your continued work on XIP_KERNEL.
>
> As you can expect, since you were just move things around, everything
> still builds and boots fine on my system.
>
> Renesas RZ/A1: Cortex-A9 with MMU enabled
>
Still good to know that I didn't break anything.
Thanks for testing.
Nicolas
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2018-03-10 1:07 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-09 3:20 [PATCH 0/7] further linker script cleanups Nicolas Pitre
2018-03-09 3:20 ` [PATCH 1/7] ARM: linker script: factor out some common definitions between XIP and non-XIP Nicolas Pitre
2018-03-09 9:27 ` Vladimir Murzin
2018-03-10 1:05 ` Nicolas Pitre
2018-03-09 3:20 ` [PATCH 2/7] ARM: linker script: factor out stuff for the DISCARD section Nicolas Pitre
2018-03-09 3:20 ` [PATCH 3/7] ARM: linker script: factor out stuff for the .text section Nicolas Pitre
2018-03-09 3:20 ` [PATCH 4/7] ARM: linker script: factor out unwinding table sections Nicolas Pitre
2018-03-09 3:20 ` [PATCH 5/7] ARM: linker script: factor out vectors and stubs Nicolas Pitre
2018-03-09 3:20 ` [PATCH 6/7] ARM: linker script: factor out TCM bits Nicolas Pitre
2018-03-09 3:21 ` [PATCH 7/7] ARM: simplify and fix linker script for TCM Nicolas Pitre
2018-03-09 18:06 ` [PATCH 0/7] further linker script cleanups Chris Brandt
2018-03-10 1:07 ` Nicolas Pitre
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.