Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic
On Fri, May 18, 2007 at 03:21:26AM -0700, David Miller wrote: > From: Sam Ravnborg <[EMAIL PROTECTED]> > Date: Fri, 18 May 2007 11:42:31 +0200 > > > On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote: > > > > > > Looking at these patches reminds me of a quirk in the generic > > > RODATA definition: > > > > > > > #define RODATA > > > > \ > > > > . = ALIGN(4096); > > > > \ > > > > .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { > > > > \ > > > > > > It uses ALIGN(4096) which is likely supposed to be something > > > like ALIGN(PAGE_SIZE). Perhaps we should handle this by > > > definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files > > > that need a value other than 4096, and define the default of > > > 4096 in asm-generic/vmlinux.lds.h? > > > > I would much rather use PAGE_SIZE direct since we have access to that > > symbol. > > I completely agree, that seems to be what platforms which have > a configurable page size such as powerpc, ia64, etc. are already > using in their vmlinux.lds.S files, and I'll likely follow suit on > sparc64. :-) If you hold of a bit I would like to use sparc64 as template for a bit more consolidation. Most likely I will try to consolidate vmlinux.lds for sparc64 and ARM at the same time and then take the other arch's one by one. In the process the vmlinux.lds will start to use a consistent indenting like the following. Sample diff only on top of -linus. I will redo it when I have my current patch-set applied. Sam diff --git a/arch/sparc64/kernel/vmlinux.lds.S b/arch/sparc64/kernel/vmlinux.lds.S index 13fa2a2..e9469ea 100644 --- a/arch/sparc64/kernel/vmlinux.lds.S +++ b/arch/sparc64/kernel/vmlinux.lds.S @@ -9,105 +9,149 @@ ENTRY(_start) jiffies = jiffies_64; SECTIONS { - swapper_low_pmd_dir = 0x00402000; - . = 0x4000; - .text 0x00404000 : - { -_text = .; -*(.text) -SCHED_TEXT -LOCK_TEXT -KPROBES_TEXT -*(.gnu.warning) - } =0 - _etext = .; - PROVIDE (etext = .); - - RODATA - - .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 = 0x00402000; + . = 0x4000; + .text 0x00404000 : { + _text = .; + *(.text) + SCHED_TEXT + LOCK_TEXT + KPROBES_TEXT + *(.gnu.warning) + } =0 + _etext = .; + PROVIDE (etext = .); + + RODATA + + .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 : {
Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic
From: Sam Ravnborg <[EMAIL PROTECTED]> Date: Fri, 18 May 2007 11:42:31 +0200 > On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote: > > > > Looking at these patches reminds me of a quirk in the generic > > RODATA definition: > > > > > #define RODATA > > > \ > > > . = ALIGN(4096);\ > > > .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ > > > > It uses ALIGN(4096) which is likely supposed to be something > > like ALIGN(PAGE_SIZE). Perhaps we should handle this by > > definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files > > that need a value other than 4096, and define the default of > > 4096 in asm-generic/vmlinux.lds.h? > > I would much rather use PAGE_SIZE direct since we have access to that symbol. I completely agree, that seems to be what platforms which have a configurable page size such as powerpc, ia64, etc. are already using in their vmlinux.lds.S files, and I'll likely follow suit on sparc64. :-) > > If you could take care of this I'd really appreciate it. > Will do. > And may expend the effort a bit further when attacking the .lds files. > > It will be a week or two before I get at it. Thanks a lot. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic
On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote: > > Looking at these patches reminds me of a quirk in the generic > RODATA definition: > > > #define RODATA > > \ > > . = ALIGN(4096);\ > > .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ > > It uses ALIGN(4096) which is likely supposed to be something > like ALIGN(PAGE_SIZE). Perhaps we should handle this by > definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files > that need a value other than 4096, and define the default of > 4096 in asm-generic/vmlinux.lds.h? I would much rather use PAGE_SIZE direct since we have access to that symbol. I would require a small modification in most asm-*/page.h files so ld can parse them: #define PAGE_SIZE (1UL << PAGE_SHIFT) will become #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) This will allow the arch's to use that symbol in assembler too which is a win. Then we could do something like: #define RODATA(alignment) \ ALIGN(alignment)\ And on the call site we will most likely use RODATA(PAGE_SIZE) But the architecture can override it. Full flexibility and acceptable documentation. > > If you could take care of this I'd really appreciate it. Will do. And may expend the effort a bit further when attacking the .lds files. It will be a week or two before I get at it. Sam - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic
From: Sam Ravnborg <[EMAIL PROTECTED]> Date: Fri, 18 May 2007 08:52:57 +0200 > >From 653bc43c6c2c292e6abc98860fd241eb12e2c80f Mon Sep 17 00:00:00 2001 > From: Sam Ravnborg <[EMAIL PROTECTED]> > Date: Thu, 17 May 2007 13:38:44 +0200 > Subject: [PATCH 05/14] all-archs: consolidate .data section definition in > asm-generic > > With this consolidation we can now modify the .data > section definition in one spot for all archs. > > Signed-off-by: Sam Ravnborg <[EMAIL PROTECTED]> Thanks for doing these kinds of consolidations Sam, most of us arch maintainers really appreciate it. Looking at these patches reminds me of a quirk in the generic RODATA definition: > #define RODATA > \ > . = ALIGN(4096);\ > .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ It uses ALIGN(4096) which is likely supposed to be something like ALIGN(PAGE_SIZE). Perhaps we should handle this by definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files that need a value other than 4096, and define the default of 4096 in asm-generic/vmlinux.lds.h? If you could take care of this I'd really appreciate it. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic
From: Sam Ravnborg [EMAIL PROTECTED] Date: Fri, 18 May 2007 08:52:57 +0200 From 653bc43c6c2c292e6abc98860fd241eb12e2c80f Mon Sep 17 00:00:00 2001 From: Sam Ravnborg [EMAIL PROTECTED] Date: Thu, 17 May 2007 13:38:44 +0200 Subject: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic With this consolidation we can now modify the .data section definition in one spot for all archs. Signed-off-by: Sam Ravnborg [EMAIL PROTECTED] Thanks for doing these kinds of consolidations Sam, most of us arch maintainers really appreciate it. Looking at these patches reminds me of a quirk in the generic RODATA definition: #define RODATA \ . = ALIGN(4096);\ .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ It uses ALIGN(4096) which is likely supposed to be something like ALIGN(PAGE_SIZE). Perhaps we should handle this by definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files that need a value other than 4096, and define the default of 4096 in asm-generic/vmlinux.lds.h? If you could take care of this I'd really appreciate it. - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic
On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote: Looking at these patches reminds me of a quirk in the generic RODATA definition: #define RODATA \ . = ALIGN(4096);\ .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ It uses ALIGN(4096) which is likely supposed to be something like ALIGN(PAGE_SIZE). Perhaps we should handle this by definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files that need a value other than 4096, and define the default of 4096 in asm-generic/vmlinux.lds.h? I would much rather use PAGE_SIZE direct since we have access to that symbol. I would require a small modification in most asm-*/page.h files so ld can parse them: #define PAGE_SIZE (1UL PAGE_SHIFT) will become #define PAGE_SIZE (_AC(1,UL) PAGE_SHIFT) This will allow the arch's to use that symbol in assembler too which is a win. Then we could do something like: #define RODATA(alignment) \ ALIGN(alignment)\ And on the call site we will most likely use RODATA(PAGE_SIZE) But the architecture can override it. Full flexibility and acceptable documentation. If you could take care of this I'd really appreciate it. Will do. And may expend the effort a bit further when attacking the .lds files. It will be a week or two before I get at it. Sam - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic
From: Sam Ravnborg [EMAIL PROTECTED] Date: Fri, 18 May 2007 11:42:31 +0200 On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote: Looking at these patches reminds me of a quirk in the generic RODATA definition: #define RODATA \ . = ALIGN(4096);\ .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ It uses ALIGN(4096) which is likely supposed to be something like ALIGN(PAGE_SIZE). Perhaps we should handle this by definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files that need a value other than 4096, and define the default of 4096 in asm-generic/vmlinux.lds.h? I would much rather use PAGE_SIZE direct since we have access to that symbol. I completely agree, that seems to be what platforms which have a configurable page size such as powerpc, ia64, etc. are already using in their vmlinux.lds.S files, and I'll likely follow suit on sparc64. :-) If you could take care of this I'd really appreciate it. Will do. And may expend the effort a bit further when attacking the .lds files. It will be a week or two before I get at it. Thanks a lot. - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 05/14] all-archs: consolidate .data section definition in asm-generic
On Fri, May 18, 2007 at 03:21:26AM -0700, David Miller wrote: From: Sam Ravnborg [EMAIL PROTECTED] Date: Fri, 18 May 2007 11:42:31 +0200 On Fri, May 18, 2007 at 12:16:04AM -0700, David Miller wrote: Looking at these patches reminds me of a quirk in the generic RODATA definition: #define RODATA \ . = ALIGN(4096); \ .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ It uses ALIGN(4096) which is likely supposed to be something like ALIGN(PAGE_SIZE). Perhaps we should handle this by definiting a LD_PAGE_SIZE at the top of vmlinux.ld.S files that need a value other than 4096, and define the default of 4096 in asm-generic/vmlinux.lds.h? I would much rather use PAGE_SIZE direct since we have access to that symbol. I completely agree, that seems to be what platforms which have a configurable page size such as powerpc, ia64, etc. are already using in their vmlinux.lds.S files, and I'll likely follow suit on sparc64. :-) If you hold of a bit I would like to use sparc64 as template for a bit more consolidation. Most likely I will try to consolidate vmlinux.lds for sparc64 and ARM at the same time and then take the other arch's one by one. In the process the vmlinux.lds will start to use a consistent indenting like the following. Sample diff only on top of -linus. I will redo it when I have my current patch-set applied. Sam diff --git a/arch/sparc64/kernel/vmlinux.lds.S b/arch/sparc64/kernel/vmlinux.lds.S index 13fa2a2..e9469ea 100644 --- a/arch/sparc64/kernel/vmlinux.lds.S +++ b/arch/sparc64/kernel/vmlinux.lds.S @@ -9,105 +9,149 @@ ENTRY(_start) jiffies = jiffies_64; SECTIONS { - swapper_low_pmd_dir = 0x00402000; - . = 0x4000; - .text 0x00404000 : - { -_text = .; -*(.text) -SCHED_TEXT -LOCK_TEXT -KPROBES_TEXT -*(.gnu.warning) - } =0 - _etext = .; - PROVIDE (etext = .); - - RODATA - - .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 = 0x00402000; + . = 0x4000; + .text 0x00404000 : { + _text = .; + *(.text) + SCHED_TEXT + LOCK_TEXT + KPROBES_TEXT + *(.gnu.warning) + } =0 + _etext = .; + PROVIDE (etext = .); + + RODATA + + .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 = .; + +