All of lore.kernel.org
 help / color / mirror / Atom feed
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, hpa@zytor.com,
	magnus.damm@gmail.com, lwang@redhat.com, dzickus@redhat.com,
	maneesh@in.ibm.com
Subject: [PATCH 7/11] i386: Kallsyms generate relocatable symbols
Date: Mon, 23 Oct 2006 15:37:48 -0400	[thread overview]
Message-ID: <20061023193748.GH13263@in.ibm.com> (raw)
In-Reply-To: <20061023192456.GA13263@in.ibm.com>



Print the addresses of non-absolute symbols relative to _text
so that ld will generate relocations.  Allowing a relocatable
kernel to relocate them.  We can't actually use the symbol names
because kallsyms includes static symbols that are not exported
from their object files.

Add the _text symbol definitions to the architectures which don't
define it otherwise linker will fail.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com>
---

 arch/h8300/kernel/vmlinux.lds.S     |    1 +
 arch/m68knommu/kernel/vmlinux.lds.S |    1 +
 arch/powerpc/kernel/vmlinux.lds.S   |    1 +
 arch/ppc/kernel/vmlinux.lds.S       |    1 +
 arch/sparc/kernel/vmlinux.lds.S     |    1 +
 arch/sparc64/kernel/vmlinux.lds.S   |    1 +
 arch/v850/kernel/vmlinux.lds.S      |    1 +
 scripts/kallsyms.c                  |   20 +++++++++++++++++---
 8 files changed, 24 insertions(+), 3 deletions(-)

diff -puN arch/h8300/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols arch/h8300/kernel/vmlinux.lds.S
--- linux-2.6.19-rc2-git7-reloc/arch/h8300/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols	2006-10-23 13:15:21.000000000 -0400
+++ linux-2.6.19-rc2-git7-reloc-root/arch/h8300/kernel/vmlinux.lds.S	2006-10-23 13:15:21.000000000 -0400
@@ -70,6 +70,7 @@ SECTIONS
 #endif
         .text :
 	{
+	_text = .;
 #if defined(CONFIG_ROMKERNEL)
 	*(.int_redirect)
 #endif
diff -puN arch/m68knommu/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols arch/m68knommu/kernel/vmlinux.lds.S
--- linux-2.6.19-rc2-git7-reloc/arch/m68knommu/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols	2006-10-23 13:15:21.000000000 -0400
+++ linux-2.6.19-rc2-git7-reloc-root/arch/m68knommu/kernel/vmlinux.lds.S	2006-10-23 13:15:21.000000000 -0400
@@ -60,6 +60,7 @@ SECTIONS {
 #endif
 
 	.text : {
+		_text = .;
 		_stext = . ;
         	*(.text)
 		SCHED_TEXT
diff -puN arch/powerpc/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols arch/powerpc/kernel/vmlinux.lds.S
--- linux-2.6.19-rc2-git7-reloc/arch/powerpc/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols	2006-10-23 13:15:21.000000000 -0400
+++ linux-2.6.19-rc2-git7-reloc-root/arch/powerpc/kernel/vmlinux.lds.S	2006-10-23 13:15:21.000000000 -0400
@@ -33,6 +33,7 @@ SECTIONS
 
 	/* Text and gots */
 	.text : {
+		_text = .;
 		*(.text .text.*)
 		SCHED_TEXT
 		LOCK_TEXT
diff -puN arch/ppc/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols arch/ppc/kernel/vmlinux.lds.S
--- linux-2.6.19-rc2-git7-reloc/arch/ppc/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols	2006-10-23 13:15:21.000000000 -0400
+++ linux-2.6.19-rc2-git7-reloc-root/arch/ppc/kernel/vmlinux.lds.S	2006-10-23 13:15:21.000000000 -0400
@@ -31,6 +31,7 @@ SECTIONS
   .plt : { *(.plt) }
   .text      :
   {
+    _text = .;
     *(.text)
     SCHED_TEXT
     LOCK_TEXT
diff -puN arch/sparc64/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols arch/sparc64/kernel/vmlinux.lds.S
--- linux-2.6.19-rc2-git7-reloc/arch/sparc64/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols	2006-10-23 13:15:21.000000000 -0400
+++ linux-2.6.19-rc2-git7-reloc-root/arch/sparc64/kernel/vmlinux.lds.S	2006-10-23 13:15:21.000000000 -0400
@@ -13,6 +13,7 @@ SECTIONS
   . = 0x4000;
   .text 0x0000000000404000 :
   {
+    _text = .;
     *(.text)
     SCHED_TEXT
     LOCK_TEXT
diff -puN arch/sparc/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols arch/sparc/kernel/vmlinux.lds.S
--- linux-2.6.19-rc2-git7-reloc/arch/sparc/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols	2006-10-23 13:15:21.000000000 -0400
+++ linux-2.6.19-rc2-git7-reloc-root/arch/sparc/kernel/vmlinux.lds.S	2006-10-23 13:15:21.000000000 -0400
@@ -11,6 +11,7 @@ SECTIONS
   . = 0x10000 + SIZEOF_HEADERS;
   .text 0xf0004000 :
   {
+    _text = .;
     *(.text)
     SCHED_TEXT
     LOCK_TEXT
diff -puN arch/v850/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols arch/v850/kernel/vmlinux.lds.S
--- linux-2.6.19-rc2-git7-reloc/arch/v850/kernel/vmlinux.lds.S~kallsyms.c-Generate-relocatable-symbols	2006-10-23 13:15:21.000000000 -0400
+++ linux-2.6.19-rc2-git7-reloc-root/arch/v850/kernel/vmlinux.lds.S	2006-10-23 13:15:21.000000000 -0400
@@ -90,6 +90,7 @@
 
 /* Kernel text segment, and some constant data areas.  */
 #define TEXT_CONTENTS							      \
+		_text = .;						      \
 		__stext = . ;						      \
         	*(.text)						      \
 		SCHED_TEXT						      \
diff -puN scripts/kallsyms.c~kallsyms.c-Generate-relocatable-symbols scripts/kallsyms.c
--- linux-2.6.19-rc2-git7-reloc/scripts/kallsyms.c~kallsyms.c-Generate-relocatable-symbols	2006-10-23 13:15:21.000000000 -0400
+++ linux-2.6.19-rc2-git7-reloc-root/scripts/kallsyms.c	2006-10-23 13:15:21.000000000 -0400
@@ -43,7 +43,7 @@ struct sym_entry {
 
 static struct sym_entry *table;
 static unsigned int table_size, table_cnt;
-static unsigned long long _stext, _etext, _sinittext, _einittext, _sextratext, _eextratext;
+static unsigned long long _text, _stext, _etext, _sinittext, _einittext, _sextratext, _eextratext;
 static int all_symbols = 0;
 static char symbol_prefix_char = '\0';
 
@@ -91,7 +91,9 @@ static int read_symbol(FILE *in, struct 
 		sym++;
 
 	/* Ignore most absolute/undefined (?) symbols. */
-	if (strcmp(sym, "_stext") == 0)
+	if (strcmp(sym, "_text") == 0)
+		_text = s->addr;
+	else if (strcmp(sym, "_stext") == 0)
 		_stext = s->addr;
 	else if (strcmp(sym, "_etext") == 0)
 		_etext = s->addr;
@@ -265,9 +267,21 @@ static void write_src(void)
 
 	printf(".data\n");
 
+	/* Provide proper symbols relocatability by their '_text'
+	 * relativeness.  The symbol names cannot be used to construct
+	 * normal symbol references as the list of symbols contains
+	 * symbols that are declared static and are private to their
+	 * .o files.  This prevents .tmp_kallsyms.o or any other
+	 * object from referencing them.
+	 */
 	output_label("kallsyms_addresses");
 	for (i = 0; i < table_cnt; i++) {
-		printf("\tPTR\t%#llx\n", table[i].addr);
+		if (toupper(table[i].sym[0]) != 'A') {
+			printf("\tPTR\t_text + %#llx\n",
+				table[i].addr - _text);
+		} else {
+			printf("\tPTR\t%#llx\n", table[i].addr);
+		}
 	}
 	printf("\n");
 
_

  parent reply	other threads:[~2006-10-23 19:49 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-23 19:24 [RFC][PATCH 0/11] i386: Relocatable BzImage (V3) Vivek Goyal
2006-10-23 19:26 ` [PATCH 1/11] i386: Distinguish absolute symbols Vivek Goyal
2006-10-23 19:29 ` [PATCH 2/11] i386: Remove unnecessary ALIGN() in vmlinux.lds.S Vivek Goyal
2006-10-23 19:30 ` [PATCH 3/11] i386: Force data segment to be 4K aligned Vivek Goyal
2006-10-23 19:32 ` [PATCH 4/11] i386: define __pa_symbol() Vivek Goyal
2006-10-23 19:33 ` [PATCH 5/11] i386: Reserve kernel memory starting from _text Vivek Goyal
2006-10-23 19:36 ` [PATCH 6/11] i386: CONFIG_PHYSICAL_START cleanup Vivek Goyal
2006-10-23 19:37 ` Vivek Goyal [this message]
2006-11-06 14:48   ` [PATCH 7/11] i386: Kallsyms generate relocatable symbols Haavard Skinnemoen
2006-11-06 16:03     ` Vivek Goyal
2006-11-06 16:13       ` Haavard Skinnemoen
2006-11-06 16:34     ` H. Peter Anvin
2006-10-23 19:39 ` [PATCH 8/11] i386: Relocatable kernel support Vivek Goyal
2006-10-23 19:40 ` [PATCH 9/11] i386: Warn upon absolute relocations being present Vivek Goyal
2006-10-23 19:42 ` [PATCH 10/11] i386: Implement CONFIG_PHYSICAL_ALIGN Vivek Goyal
2006-10-23 19:44 ` [PATCH 11/11] i386: Extend bzImage protocol for relocatable protected mode kernel Vivek Goyal
2006-10-24 13:44 ` [RFC][PATCH 0/11] i386: Relocatable BzImage (V3) Andi Kleen

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=20061023193748.GH13263@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=hpa@zytor.com \
    --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 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.