From: Vivek Goyal <vgoyal@in.ibm.com>
To: linux kernel mailing list <linux-kernel@vger.kernel.org>
Cc: Reloc Kernel List <fastboot@lists.osdl.org>,
ebiederm@xmission.com, akpm@osdl.org, ak@suse.de,
horms@verge.net.au, lace@jankratochvil.net, hpa@zytor.com,
magnus.damm@gmail.com, lwang@redhat.com, dzickus@redhat.com,
maneesh@in.ibm.com
Subject: [PATCH 3/12] i386: Force section size to be non-zero to prevent a symbol becoming absolute
Date: Tue, 3 Oct 2006 13:09:08 -0400 [thread overview]
Message-ID: <20061003170908.GC3164@in.ibm.com> (raw)
In-Reply-To: <20061003170032.GA30036@in.ibm.com>
o Relocation patches for i386, moved the symbols in vmlinux.lds.S inside
sections so that these symbols become section relative and are no more
absolute. If these symbols become absolute, its bad as they are not
relocated if kernel is not loaded at the address it has been compiled
for.
o Ironically, just moving the symbols inside the section does not
gurantee that symbols inside will not become absolute. Recent
versions of linkers, do some optimization, and if section size is
zero, it gets rid of the section and makes any defined symbol as absolute.
o This leads to a failure while second kernel is booting.
arch/i386/alternative.c frees any pages present between __smp_alt_begin
and __smp_alt_end. In my case size of section .smp_altinstructions is
zero and symbol __smpt_alt_begin becomes absolute and is not relocated
and system crashes while it is trying to free the memory starting
from __smp_alt_begin.
o This issue is being fixed by the linker guys and they are making sure
that linker does not get rid of an empty section if there is any
section relative symbol defined in it. But we need to fix it at
kernel level too so that people using the linker version without fix,
are not affected.
o One of the possible solutions is that force the section size to be
non zero to make sure these symbols don't become absolute. This
patch implements that.
Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com>
---
arch/i386/kernel/vmlinux.lds.S | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff -puN arch/i386/kernel/vmlinux.lds.S~i386-reloc-non-zero-size-section arch/i386/kernel/vmlinux.lds.S
--- linux-2.6.18-git17/arch/i386/kernel/vmlinux.lds.S~i386-reloc-non-zero-size-section 2006-10-02 13:17:58.000000000 -0400
+++ linux-2.6.18-git17-root/arch/i386/kernel/vmlinux.lds.S 2006-10-02 14:36:32.000000000 -0400
@@ -40,6 +40,7 @@ SECTIONS
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
+ LONG(0)
}
RODATA
@@ -49,6 +50,7 @@ SECTIONS
__tracedata_start = .;
*(.tracedata)
__tracedata_end = .;
+ LONG(0)
}
/* writeable */
@@ -64,6 +66,7 @@ SECTIONS
*(.data.nosave)
. = ALIGN(4096);
__nosave_end = .;
+ LONG(0)
}
. = ALIGN(4096);
@@ -81,6 +84,7 @@ SECTIONS
.data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) {
*(.data.read_mostly)
_edata = .; /* End of data section */
+ LONG(0)
}
#ifdef CONFIG_STACK_UNWIND
@@ -89,6 +93,7 @@ SECTIONS
__start_unwind = .;
*(.eh_frame)
__end_unwind = .;
+ LONG(0)
}
#endif
@@ -104,17 +109,20 @@ SECTIONS
__smp_alt_instructions = .;
*(.smp_altinstructions)
__smp_alt_instructions_end = .;
+ LONG(0)
}
. = ALIGN(4);
.smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
__smp_locks = .;
*(.smp_locks)
__smp_locks_end = .;
+ LONG(0)
}
.smp_altinstr_replacement : AT(ADDR(.smp_altinstr_replacement) - LOAD_OFFSET) {
*(.smp_altinstr_replacement)
. = ALIGN(4096);
__smp_alt_end = .;
+ LONG(0)
}
/* will be freed after init */
@@ -124,6 +132,7 @@ SECTIONS
_sinittext = .;
*(.init.text)
_einittext = .;
+ LONG(0)
}
.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { *(.init.data) }
. = ALIGN(16);
@@ -131,6 +140,7 @@ SECTIONS
__setup_start = .;
*(.init.setup)
__setup_end = .;
+ LONG(0)
}
.initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
__initcall_start = .;
@@ -142,11 +152,13 @@ SECTIONS
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
+ LONG(0)
}
.con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
__con_initcall_start = .;
*(.con_initcall.init)
__con_initcall_end = .;
+ LONG(0)
}
SECURITY_INIT
. = ALIGN(4);
@@ -154,6 +166,7 @@ SECTIONS
__alt_instructions = .;
*(.altinstructions)
__alt_instructions_end = .;
+ LONG(0)
}
.altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) {
*(.altinstr_replacement)
@@ -167,12 +180,14 @@ SECTIONS
__initramfs_start = .;
*(.init.ramfs)
__initramfs_end = .;
+ LONG(0)
}
. = ALIGN(L1_CACHE_BYTES);
.data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
__per_cpu_start = .;
*(.data.percpu)
__per_cpu_end = .;
+ LONG(0)
}
. = ALIGN(4096);
/* freed after init ends here */
_
next prev parent reply other threads:[~2006-10-03 17:32 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-03 17:00 [RFC][PATCH 0/12] ELF Relocatable x86 bzImage (V2) Vivek Goyal
2006-10-03 17:04 ` [PATCH 1/12] i386: Distinguish absolute symbols Vivek Goyal
2006-10-07 6:35 ` Andrew Morton
2006-10-08 16:47 ` Vivek Goyal
2006-10-09 7:35 ` Gerd Hoffmann
2006-10-09 13:49 ` Vivek Goyal
2006-10-03 17:06 ` [PATCH 2/12] i386: align data section to 4K boundary Vivek Goyal
2006-10-04 11:17 ` Andi Kleen
2006-10-04 15:18 ` H. Peter Anvin
2006-10-03 17:09 ` Vivek Goyal [this message]
2006-10-04 11:02 ` [PATCH 3/12] i386: Force section size to be non-zero to prevent a symbol becoming absolute Andi Kleen
2006-10-04 14:07 ` Eric W. Biederman
2006-10-04 14:45 ` Vivek Goyal
2006-10-04 16:09 ` Andrew Morton
2006-10-04 16:14 ` Vivek Goyal
2006-10-03 17:10 ` [PATCH 4/12] i386: define __pa_symbol() Vivek Goyal
2006-10-04 8:26 ` Franck Bui-Huu
2006-10-04 19:44 ` Vivek Goyal
2006-10-06 13:10 ` Franck Bui-Huu
2006-10-06 18:33 ` Vivek Goyal
2006-10-03 17:12 ` [PATCH 5/12] i386 setup.c: Reserve kernel memory starting from _text Vivek Goyal
2006-10-03 17:15 ` [PATCH 6/12] i386: CONFIG_PHYSICAL_START cleanup Vivek Goyal
2006-10-03 18:45 ` Dave Hansen
2006-10-03 18:52 ` Vivek Goyal
2006-10-03 18:59 ` Eric W. Biederman
2006-10-03 19:35 ` Vivek Goyal
2006-10-03 17:17 ` [PATCH 7/12] Make linux/elf.h safe to be included in assembly files Vivek Goyal
2006-10-03 17:19 ` [PATCH 8/12] elf: Add ELFOSABI_STANDALONE to elf.h Vivek Goyal
2006-10-03 17:21 ` [PATCH 9/12] kallsyms: Generate relocatable symbols Vivek Goyal
2006-10-03 17:22 ` [PATCH 10/12] i386: Relocatable kernel support Vivek Goyal
2006-10-03 17:24 ` [PATCH 11/12] i386: Implement CONFIG_PHYSICAL_ALIGN Vivek Goyal
2006-10-03 17:25 ` [PATCH 12/12] i386 boot: Add an ELF header to bzImage Vivek Goyal
2006-10-04 3:13 ` Andrew Morton
2006-10-04 4:28 ` Vivek Goyal
2006-10-04 4:40 ` H. Peter Anvin
2006-10-04 8:04 ` Eric W. Biederman
2006-10-04 15:18 ` H. Peter Anvin
2006-10-05 4:12 ` Eric W. Biederman
2006-10-05 4:17 ` H. Peter Anvin
2006-10-04 20:22 ` Vivek Goyal
2006-10-04 20:27 ` H. Peter Anvin
2006-10-04 20:48 ` Vivek Goyal
2006-10-04 20:52 ` H. Peter Anvin
2006-10-04 21:06 ` Vivek Goyal
2006-10-04 21:09 ` H. Peter Anvin
2006-10-04 5:37 ` Andrew Morton
2006-10-05 4:06 ` Eric W. Biederman
2006-10-05 4:12 ` H. Peter Anvin
2006-10-05 4:44 ` Andrew Morton
2006-10-05 6:13 ` Eric W. Biederman
2006-10-05 6:31 ` Andrew Morton
2006-10-05 6:48 ` Eric W. Biederman
2006-10-05 21:54 ` Vivek Goyal
2006-10-05 15:25 ` H. Peter Anvin
2006-10-05 15:35 ` Eric W. Biederman
2006-10-05 15:29 ` Eric W. Biederman
2006-10-05 15:44 ` H. Peter Anvin
2006-10-06 6:59 ` Andrew Morton
2006-10-06 12:56 ` Eric W. Biederman
2006-10-06 18:38 ` Vivek Goyal
2006-10-06 18:54 ` H. Peter Anvin
2006-10-06 19:09 ` Eric W. Biederman
2006-10-06 21:54 ` H. Peter Anvin
2006-10-09 14:33 ` Vivek Goyal
2006-10-10 3:14 ` Andrew Morton
2006-10-10 4:51 ` Eric W. Biederman
2006-10-10 14:30 ` Vivek Goyal
2006-10-10 18:46 ` Andrew Morton
2006-10-10 21:40 ` Vivek Goyal
2006-10-11 2:35 ` Andrew Morton
2006-10-06 19:01 ` Eric W. Biederman
2006-10-04 7:08 ` Eric W. Biederman
2006-10-04 14:23 ` Vivek Goyal
2006-10-05 3:09 ` Eric W. Biederman
2006-10-04 17:03 ` Vivek Goyal
2006-10-05 6:25 ` Eric W. Biederman
2006-10-05 21:34 ` Vivek Goyal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061003170908.GC3164@in.ibm.com \
--to=vgoyal@in.ibm.com \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=dzickus@redhat.com \
--cc=ebiederm@xmission.com \
--cc=fastboot@lists.osdl.org \
--cc=horms@verge.net.au \
--cc=hpa@zytor.com \
--cc=lace@jankratochvil.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lwang@redhat.com \
--cc=magnus.damm@gmail.com \
--cc=maneesh@in.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox