i386: Put allocated ELF notes in read-only data segment
authorRoland McGrath <roland@redhat.com>
Thu, 19 Jul 2007 08:48:36 +0000 (01:48 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 19 Jul 2007 17:04:47 +0000 (10:04 -0700)
This changes the i386 linker script and the asm-generic macro it uses so that
ELF note sections with SHF_ALLOC set are linked into the kernel image along
with other read-only data.  The PT_NOTE also points to their location.

This paves the way for putting useful build-time information into ELF notes
that can be found easily later in a kernel memory dump.

Signed-off-by: Roland McGrath <roland@redhat.com>
Cc: Andi Kleen <ak@suse.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/i386/kernel/vmlinux.lds.S
include/asm-generic/vmlinux.lds.h

index 4dc44b8007ccbe9ea8c44f5e96e33f50b2da4b50..7d72cce0052946c93446eaa279c0d476da80af51 100644 (file)
@@ -60,7 +60,9 @@ SECTIONS
        __stop___ex_table = .;
   }
 
-  BUG_TABLE
+  NOTES :text :note
+
+  BUG_TABLE :text
 
   . = ALIGN(4);
   .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {
@@ -208,6 +210,4 @@ SECTIONS
   STABS_DEBUG
 
   DWARF_DEBUG
-
-  NOTES
 }
index a2b09ed852ad9e8ac09e2f7fc9be6d30366ea6f7..0240e0506a078582e6544aa7b2d4ab57ef711df2 100644 (file)
        }
 
 #define NOTES                                                          \
-       .notes : { *(.note.*) } :note
+       .notes : AT(ADDR(.notes) - LOAD_OFFSET) {                       \
+               VMLINUX_SYMBOL(__start_notes) = .;                      \
+               *(.note.*)                                              \
+               VMLINUX_SYMBOL(__stop_notes) = .;                       \
+       }
 
 #define INITCALLS                                                      \
        *(.initcall0.init)                                              \