* 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).