All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.