Generating ELF notes (was Re: Single PV startup vs multiple PV startup)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hollis Blanchard wrote:
> Yeah, it's a real pain. :( You could try adapting
> arch/powerpc/boot/addnote.c as a starting point.
>   
Hm, that looks complex.  This seems to be sufficient to get the linker 
to do all the work:

Subject: Put .note.* sections into a PT_NOTE segment in vmlinux

This patch will pack any .note.* section into a PT_NOTE segment in the
output file.

To do this, we tell ld that we need a PT_NOTE segment.  This requires
us to start explicitly mapping sections to segments, so we also need
to explicitly create PT_LOAD segments for text and data, and map the
sections to them appropriately.  Fortunately, each section will
default to its previous section's segment, so it doesn't take many
changes to vmlinux.lds.S.

This only changes i386 for now, but I presume the corresponding
changes for other architectures will be as simple.

Signed-off-by: Jeremy Fitzhardinge <jeremy at xensource.com>
Cc: Eric W. Biederman <ebiederm at xmission.com>
Cc: Hollis Blanchard <hollisb at us.ibm.com>

---
 arch/i386/kernel/vmlinux.lds.S    |   12 ++++++++++--
 include/asm-generic/vmlinux.lds.h |    3 +++
 2 files changed, 13 insertions(+), 2 deletions(-)


diff -r e29410954b12 arch/i386/kernel/vmlinux.lds.S
--- a/arch/i386/kernel/vmlinux.lds.S	Thu Jul 27 18:06:38 2006 -0700
+++ b/arch/i386/kernel/vmlinux.lds.S	Fri Jul 28 15:15:05 2006 -0700
@@ -13,6 +13,12 @@ OUTPUT_ARCH(i386)
 OUTPUT_ARCH(i386)
 ENTRY(phys_startup_32)
 jiffies = jiffies_64;
+
+PHDRS {
+	text PT_LOAD FLAGS(5);	/* R_E */
+	data PT_LOAD FLAGS(7);	/* RWE */
+	note PT_NOTE FLAGS(4);	/* R__ */
+}
 SECTIONS
 {
   . = __KERNEL_START;
@@ -26,7 +32,7 @@ SECTIONS
 	KPROBES_TEXT
 	*(.fixup)
 	*(.gnu.warning)
-	} = 0x9090
+	} :text = 0x9090
 
   _etext = .;			/* End of text section */
 
@@ -48,7 +54,7 @@ SECTIONS
   .data : AT(ADDR(.data) - LOAD_OFFSET) {	/* Data */
 	*(.data)
 	CONSTRUCTORS
-	}
+	} :data
 
   . = ALIGN(4096);
   __nosave_begin = .;
@@ -184,4 +190,6 @@ SECTIONS
   STABS_DEBUG
 
   DWARF_DEBUG
+
+  NOTES
 }
diff -r e29410954b12 include/asm-generic/vmlinux.lds.h
--- a/include/asm-generic/vmlinux.lds.h	Thu Jul 27 18:06:38 2006 -0700
+++ b/include/asm-generic/vmlinux.lds.h	Fri Jul 28 15:15:05 2006 -0700
@@ -194,3 +194,6 @@
 		.stab.index 0 : { *(.stab.index) }			\
 		.stab.indexstr 0 : { *(.stab.indexstr) }		\
 		.comment 0 : { *(.comment) }
+
+#define NOTES								\
+		.notes : { *(.note.*) } :note




[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux