linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Linker script cleanup / consolidation
@ 2007-05-24 20:04 Sam Ravnborg
  2007-05-24 20:10 ` [PATCH 1/5] sparc64: ident vmlinux.lds.S Sam Ravnborg
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Sam Ravnborg @ 2007-05-24 20:04 UTC (permalink / raw)
  To: David Miller, linux-arch, linux-sparc, LKML

With basis in sparc64 I did a small cleanup / consolidation work.
The sparc64 lds script is by no menas the worst to look at but
a anyway a good place to start.

In the following patch serie I did:
-> Introduce a C-like indention style
-> Introduce use of PAGE_SIZE as replacement for hardcoded constant
-> Consoildate initramfs definition


While browsing the other arch lds files I saw many other smaller
items that could be consolidated but creating a define for
something like 3-5 lines was to push it too much.

If there are a number of sections that could be defined together
I would like to combine then in a common section but I do 
know too little about the linker scripts to determine this.

The other archs shall have a similar clean-up over time.
sparc64 was just a good place to start because David had
expressed that he liked the consolidation.

	Sam

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/5] sparc64: ident vmlinux.lds.S
  2007-05-24 20:04 Linker script cleanup / consolidation Sam Ravnborg
@ 2007-05-24 20:10 ` Sam Ravnborg
  2007-05-24 20:11 ` [PATCH 2/5] asm-generic: add RO_DATA which take alignment parameter Sam Ravnborg
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Ravnborg @ 2007-05-24 20:10 UTC (permalink / raw)
  To: David Miller, linux-arch, sparclinux, LKML

This introduce a style similar to C code.
No functional changes.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 arch/sparc64/kernel/vmlinux.lds.S |  239 ++++++++++++++++++++++---------------
 1 files changed, 142 insertions(+), 97 deletions(-)

diff --git a/arch/sparc64/kernel/vmlinux.lds.S b/arch/sparc64/kernel/vmlinux.lds.S
index fb648de..6f924fd 100644
--- a/arch/sparc64/kernel/vmlinux.lds.S
+++ b/arch/sparc64/kernel/vmlinux.lds.S
@@ -9,105 +9,150 @@ ENTRY(_start)
 jiffies = jiffies_64;
 SECTIONS
 {
-  swapper_low_pmd_dir = 0x0000000000402000;
-  . = 0x4000;
-  .text 0x0000000000404000 :
-  {
-    _text = .;
-    TEXT_TEXT
-    SCHED_TEXT
-    LOCK_TEXT
-    KPROBES_TEXT
-    *(.gnu.warning)
-  } =0
-  _etext = .;
-  PROVIDE (etext = .);
-
-  RODATA
-
-  .data    :
-  {
-    DATA_DATA
-    CONSTRUCTORS
-  }
-  .data1   : { *(.data1) }
-  . = ALIGN(64);
-  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
-  . = ALIGN(64);
-  .data.read_mostly : { *(.data.read_mostly) }
-  _edata  =  .;
-  PROVIDE (edata = .);
-  .fixup   : { *(.fixup) }
-
-  . = ALIGN(16);
-  __start___ex_table = .;
-  __ex_table : { *(__ex_table) }
-  __stop___ex_table = .;
-
-  . = ALIGN(8192);
-  __init_begin = .;
-  .init.text : { 
-	_sinittext = .;
-	*(.init.text)
-	_einittext = .;
-  }
-  .init.data : { *(.init.data) }
-  . = ALIGN(16);
-  __setup_start = .;
-  .init.setup : { *(.init.setup) }
-  __setup_end = .;
-  __initcall_start = .;
-  .initcall.init : {
-	INITCALLS
-  }
-  __initcall_end = .;
-  __con_initcall_start = .;
-  .con_initcall.init : { *(.con_initcall.init) }
-  __con_initcall_end = .;
-  SECURITY_INIT
-  . = ALIGN(4);
-  __tsb_ldquad_phys_patch = .;
-  .tsb_ldquad_phys_patch : { *(.tsb_ldquad_phys_patch) }
-  __tsb_ldquad_phys_patch_end = .;
-  __tsb_phys_patch = .;
-  .tsb_phys_patch : { *(.tsb_phys_patch) }
-  __tsb_phys_patch_end = .;
-  __cpuid_patch = .;
-  .cpuid_patch : { *(.cpuid_patch) }
-  __cpuid_patch_end = .;
-  __sun4v_1insn_patch = .;
-  .sun4v_1insn_patch : { *(.sun4v_1insn_patch) }
-  __sun4v_1insn_patch_end = .;
-  __sun4v_2insn_patch = .;
-  .sun4v_2insn_patch : { *(.sun4v_2insn_patch) }
-  __sun4v_2insn_patch_end = .;
+	swapper_low_pmd_dir = 0x0000000000402000;
+	. = 0x4000;
+	.text 0x0000000000404000 : {
+		_text = .;
+		TEXT_TEXT
+		SCHED_TEXT
+		LOCK_TEXT
+		KPROBES_TEXT
+		*(.gnu.warning)
+	} =0
+	_etext = .;
+	PROVIDE (etext = .);
+
+	RODATA
+
+	.data : {
+		DATA_DATA
+		CONSTRUCTORS
+	}
+	.data1 : {
+		*(.data1)
+	}
+
+	. = ALIGN(64);
+	.data.cacheline_aligned : {
+		*(.data.cacheline_aligned)
+	}
+
+	. = ALIGN(64);
+	.data.read_mostly : {
+		*(.data.read_mostly)
+	}
+	_edata  =  .;
+	PROVIDE (edata = .);
+	.fixup : {
+		*(.fixup)
+	}
+
+	. = ALIGN(16);
+	__start___ex_table = .;
+	__ex_table : {
+		*(__ex_table)
+	}
+	__stop___ex_table = .;
+
+	. = ALIGN(8192);
+	__init_begin = .;
+	.init.text : {
+		_sinittext = .;
+		*(.init.text)
+		_einittext = .;
+	}
+
+	.init.data : {
+		*(.init.data)
+	}
+
+	. = ALIGN(16);
+	__setup_start = .;
+	.init.setup : {
+		*(.init.setup)
+	}
+	__setup_end = .;
+
+	__initcall_start = .;
+	.initcall.init : {
+		INITCALLS
+	}
+	__initcall_end = .;
+
+	__con_initcall_start = .;
+	.con_initcall.init : {
+		*(.con_initcall.init)
+	}
+	__con_initcall_end = .;
+	SECURITY_INIT
+
+	. = ALIGN(4);
+	__tsb_ldquad_phys_patch = .;
+	.tsb_ldquad_phys_patch : {
+		*(.tsb_ldquad_phys_patch)
+	}
+	__tsb_ldquad_phys_patch_end = .;
+
+	__tsb_phys_patch = .;
+	.tsb_phys_patch : {
+		*(.tsb_phys_patch)
+	}
+	__tsb_phys_patch_end = .;
+
+	__cpuid_patch = .;
+	.cpuid_patch : {
+		*(.cpuid_patch)
+	}
+	__cpuid_patch_end = .;
+
+	__sun4v_1insn_patch = .;
+	.sun4v_1insn_patch : {
+		*(.sun4v_1insn_patch)
+	}
+	__sun4v_1insn_patch_end = .;
+	__sun4v_2insn_patch = .;
+	.sun4v_2insn_patch : {
+		*(.sun4v_2insn_patch)
+	}
+	__sun4v_2insn_patch_end = .;
 
 #ifdef CONFIG_BLK_DEV_INITRD
-  . = ALIGN(8192); 
-  __initramfs_start = .;
-  .init.ramfs : { *(.init.ramfs) }
-  __initramfs_end = .;
+	. = ALIGN(8192);
+	__initramfs_start = .;
+	.init.ramfs : {
+		*(.init.ramfs)
+	}
+	__initramfs_end = .;
 #endif
 
-  . = ALIGN(8192);
-  __per_cpu_start = .;
-  .data.percpu  : { *(.data.percpu) }
-  __per_cpu_end = .;
-  . = ALIGN(8192);
-  __init_end = .;
-  __bss_start = .;
-  .sbss      : { *(.sbss) *(.scommon) }
-  .bss       :
-  {
-   *(.dynbss)
-   *(.bss)
-   *(COMMON)
-  }
-  _end = . ;
-  PROVIDE (end = .);
-  /DISCARD/ : { *(.exit.text) *(.exit.data) *(.exitcall.exit) }
-
-  STABS_DEBUG
-
-  DWARF_DEBUG
+	. = ALIGN(8192);
+	__per_cpu_start = .;
+	.data.percpu  : {
+		*(.data.percpu)
+	}
+	__per_cpu_end = .;
+	. = ALIGN(8192);
+	__init_end = .;
+
+	__bss_start = .;
+	.sbss : {
+		*(.sbss)
+		*(.scommon)
+	}
+	.bss : {
+		*(.dynbss)
+		*(.bss)
+		*(COMMON)
+	}
+	_end = . ;
+	PROVIDE (end = .);
+
+	/DISCARD/ : {
+		*(.exit.text)
+		*(.exit.data)
+		*(.exitcall.exit)
+	}
+
+	STABS_DEBUG
+	DWARF_DEBUG
 }
-- 
1.5.1.rc3.20.gaa453


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/5] asm-generic: add RO_DATA which take alignment parameter
  2007-05-24 20:04 Linker script cleanup / consolidation Sam Ravnborg
  2007-05-24 20:10 ` [PATCH 1/5] sparc64: ident vmlinux.lds.S Sam Ravnborg
@ 2007-05-24 20:11 ` Sam Ravnborg
  2007-05-24 20:13 ` [PATCH 3/5] sparc64: use PAGE_SIZE in vmlinux.lds Sam Ravnborg
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Ravnborg @ 2007-05-24 20:11 UTC (permalink / raw)
  To: David Miller, linux-arch, sparclinux, LKML

RODATA has a hardcoded alignment of 4096 but architectures
may which to decide their optimal alignmnet.
Introduce RO_DATA that takes an alignment parameter.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 include/asm-generic/vmlinux.lds.h |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 8307b1b..5388c41 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -14,8 +14,8 @@
 	*(.data)							\
 	*(.data.init.refok)
 
-#define RODATA								\
-	. = ALIGN(4096);						\
+#define RO_DATA(align)							\
+	. = ALIGN((align));						\
 	.rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {		\
 		VMLINUX_SYMBOL(__start_rodata) = .;			\
 		*(.rodata) *(.rodata.*)					\
@@ -135,7 +135,10 @@
 		VMLINUX_SYMBOL(__end_rodata) = .;			\
 	}								\
 									\
-	. = ALIGN(4096);
+	. = ALIGN((align));
+
+/* for backward compatibility */
+#define RODATA RO_DATA(4096)
 
 #define SECURITY_INIT							\
 	.security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \
-- 
1.5.1.rc3.20.gaa453


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/5] sparc64: use PAGE_SIZE in vmlinux.lds
  2007-05-24 20:04 Linker script cleanup / consolidation Sam Ravnborg
  2007-05-24 20:10 ` [PATCH 1/5] sparc64: ident vmlinux.lds.S Sam Ravnborg
  2007-05-24 20:11 ` [PATCH 2/5] asm-generic: add RO_DATA which take alignment parameter Sam Ravnborg
@ 2007-05-24 20:13 ` Sam Ravnborg
  2007-05-24 20:14 ` [PATCH/RFC 4/5] asm-generic: add INITRAMFS to vmlinux.lds.h Sam Ravnborg
  2007-05-24 20:15 ` [PATCH/RFC 5/5] sparc64: use INITRAMFS in vmlinux.lds.h Sam Ravnborg
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Ravnborg @ 2007-05-24 20:13 UTC (permalink / raw)
  To: David Miller, linux-arch, sparclinux, LKML

sparc64 had hardcoded pagesize to 8192 for alignment.
But optimal alignment is PAGE_SIZE so replace harcoded values
with the PAGE_SIZE constant.
Note: PAGE_SIZE differ with configuration so this is a change
in functionality - see page.h

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 arch/sparc64/kernel/vmlinux.lds.S |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/arch/sparc64/kernel/vmlinux.lds.S b/arch/sparc64/kernel/vmlinux.lds.S
index 6f924fd..8559d07 100644
--- a/arch/sparc64/kernel/vmlinux.lds.S
+++ b/arch/sparc64/kernel/vmlinux.lds.S
@@ -1,5 +1,6 @@
 /* ld script to make UltraLinux kernel */
 
+#include <asm/page.h>
 #include <asm-generic/vmlinux.lds.h>
 
 OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
@@ -22,7 +23,7 @@ SECTIONS
 	_etext = .;
 	PROVIDE (etext = .);
 
-	RODATA
+	RO_DATA(PAGE_SIZE)
 
 	.data : {
 		DATA_DATA
@@ -54,7 +55,7 @@ SECTIONS
 	}
 	__stop___ex_table = .;
 
-	. = ALIGN(8192);
+	. = ALIGN(PAGE_SIZE);
 	__init_begin = .;
 	.init.text : {
 		_sinittext = .;
@@ -117,7 +118,7 @@ SECTIONS
 	__sun4v_2insn_patch_end = .;
 
 #ifdef CONFIG_BLK_DEV_INITRD
-	. = ALIGN(8192);
+	. = ALIGN(PAGE_SIZE);
 	__initramfs_start = .;
 	.init.ramfs : {
 		*(.init.ramfs)
@@ -125,13 +126,13 @@ SECTIONS
 	__initramfs_end = .;
 #endif
 
-	. = ALIGN(8192);
+	. = ALIGN(PAGE_SIZE);
 	__per_cpu_start = .;
 	.data.percpu  : {
 		*(.data.percpu)
 	}
 	__per_cpu_end = .;
-	. = ALIGN(8192);
+	. = ALIGN(PAGE_SIZE);
 	__init_end = .;
 
 	__bss_start = .;
-- 
1.5.1.rc3.20.gaa453


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH/RFC 4/5] asm-generic: add INITRAMFS to vmlinux.lds.h
  2007-05-24 20:04 Linker script cleanup / consolidation Sam Ravnborg
                   ` (2 preceding siblings ...)
  2007-05-24 20:13 ` [PATCH 3/5] sparc64: use PAGE_SIZE in vmlinux.lds Sam Ravnborg
@ 2007-05-24 20:14 ` Sam Ravnborg
  2007-05-24 20:15 ` [PATCH/RFC 5/5] sparc64: use INITRAMFS in vmlinux.lds.h Sam Ravnborg
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Ravnborg @ 2007-05-24 20:14 UTC (permalink / raw)
  To: David Miller, linux-arch, sparclinux, LKML

Add the definition of initramfs to vmlinux.lds.h
This simplifies arch lds script a bit.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---

Is these 8 lines really worth it.
I think yes - but no less than this.

	Sam


 include/asm-generic/vmlinux.lds.h |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 5388c41..0e3d2eb 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -140,6 +140,19 @@
 /* for backward compatibility */
 #define RODATA RO_DATA(4096)
 
+/* INITRAMFS is used to hold the filesystem used during early boot. */
+#ifdef CONFIG_BLK_DEV_INITRD
+#define INITRAMFS(align)						\
+	. = ALIGN((align));						\
+	.init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {		\
+	VMLINUX_SYMBOL(__initramfs_start) = .;				\
+		*(.init.ramfs)						\
+	VMLINUX_SYMBOL(__initramfs_end) = .;				\
+	}
+#else
+#define INITRAMFS(align)
+#endif
+
 #define SECURITY_INIT							\
 	.security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \
 		VMLINUX_SYMBOL(__security_initcall_start) = .;		\
-- 
1.5.1.rc3.20.gaa453


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH/RFC 5/5] sparc64: use INITRAMFS in vmlinux.lds.h
  2007-05-24 20:04 Linker script cleanup / consolidation Sam Ravnborg
                   ` (3 preceding siblings ...)
  2007-05-24 20:14 ` [PATCH/RFC 4/5] asm-generic: add INITRAMFS to vmlinux.lds.h Sam Ravnborg
@ 2007-05-24 20:15 ` Sam Ravnborg
  4 siblings, 0 replies; 6+ messages in thread
From: Sam Ravnborg @ 2007-05-24 20:15 UTC (permalink / raw)
  To: David Miller, linux-arch, sparclinux, LKML

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
 arch/sparc64/kernel/vmlinux.lds.S |    9 +--------
 1 files changed, 1 insertions(+), 8 deletions(-)

diff --git a/arch/sparc64/kernel/vmlinux.lds.S b/arch/sparc64/kernel/vmlinux.lds.S
index 8559d07..2d6fb93 100644
--- a/arch/sparc64/kernel/vmlinux.lds.S
+++ b/arch/sparc64/kernel/vmlinux.lds.S
@@ -117,14 +117,7 @@ SECTIONS
 	}
 	__sun4v_2insn_patch_end = .;
 
-#ifdef CONFIG_BLK_DEV_INITRD
-	. = ALIGN(PAGE_SIZE);
-	__initramfs_start = .;
-	.init.ramfs : {
-		*(.init.ramfs)
-	}
-	__initramfs_end = .;
-#endif
+	INITRAMFS(PAGE_SIZE)
 
 	. = ALIGN(PAGE_SIZE);
 	__per_cpu_start = .;
-- 
1.5.1.rc3.20.gaa453


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-05-24 20:14 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-24 20:04 Linker script cleanup / consolidation Sam Ravnborg
2007-05-24 20:10 ` [PATCH 1/5] sparc64: ident vmlinux.lds.S Sam Ravnborg
2007-05-24 20:11 ` [PATCH 2/5] asm-generic: add RO_DATA which take alignment parameter Sam Ravnborg
2007-05-24 20:13 ` [PATCH 3/5] sparc64: use PAGE_SIZE in vmlinux.lds Sam Ravnborg
2007-05-24 20:14 ` [PATCH/RFC 4/5] asm-generic: add INITRAMFS to vmlinux.lds.h Sam Ravnborg
2007-05-24 20:15 ` [PATCH/RFC 5/5] sparc64: use INITRAMFS in vmlinux.lds.h Sam Ravnborg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).