ia64/xen-unstable

view patches/linux-2.6.16.29/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch @ 11729:3e9fcbee3c09

[IA64] fix sparse tree build with p2m exposure disabled

Signed-off-by: Alex Williamson <alex.williamson@hp.com>
author awilliam@xenbuild.aw
date Wed Oct 04 22:13:06 2006 -0600 (2006-10-04)
parents 041be3f6b38e
children
line source
1 diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/vmlinux.lds.S ./arch/i386/kernel/vmlinux.lds.S
2 --- ../orig-linux-2.6.16.29/arch/i386/kernel/vmlinux.lds.S 2006-09-19 14:05:48.000000000 +0100
3 +++ ./arch/i386/kernel/vmlinux.lds.S 2006-09-19 14:06:10.000000000 +0100
4 @@ -12,6 +12,12 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386"
5 OUTPUT_ARCH(i386)
6 ENTRY(phys_startup_32)
7 jiffies = jiffies_64;
8 +
9 +PHDRS {
10 + text PT_LOAD FLAGS(5); /* R_E */
11 + data PT_LOAD FLAGS(7); /* RWE */
12 + note PT_NOTE FLAGS(4); /* R__ */
13 +}
14 SECTIONS
15 {
16 . = __KERNEL_START;
17 @@ -25,7 +31,7 @@ SECTIONS
18 KPROBES_TEXT
19 *(.fixup)
20 *(.gnu.warning)
21 - } = 0x9090
22 + } :text = 0x9090
24 _etext = .; /* End of text section */
26 @@ -47,7 +53,7 @@ SECTIONS
27 .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */
28 *(.data)
29 CONSTRUCTORS
30 - }
31 + } :data
33 . = ALIGN(4096);
34 __nosave_begin = .;
35 @@ -154,4 +160,6 @@ SECTIONS
36 STABS_DEBUG
38 DWARF_DEBUG
39 +
40 + NOTES
41 }
42 diff -pruN ../orig-linux-2.6.16.29/include/asm-generic/vmlinux.lds.h ./include/asm-generic/vmlinux.lds.h
43 --- ../orig-linux-2.6.16.29/include/asm-generic/vmlinux.lds.h 2006-09-12 19:02:10.000000000 +0100
44 +++ ./include/asm-generic/vmlinux.lds.h 2006-09-19 14:06:10.000000000 +0100
45 @@ -152,3 +152,6 @@
46 .stab.index 0 : { *(.stab.index) } \
47 .stab.indexstr 0 : { *(.stab.indexstr) } \
48 .comment 0 : { *(.comment) }
49 +
50 +#define NOTES \
51 + .notes : { *(.note.*) } :note
52 diff -pruN ../orig-linux-2.6.16.29/include/linux/elfnote.h ./include/linux/elfnote.h
53 --- ../orig-linux-2.6.16.29/include/linux/elfnote.h 1970-01-01 01:00:00.000000000 +0100
54 +++ ./include/linux/elfnote.h 2006-09-19 14:06:10.000000000 +0100
55 @@ -0,0 +1,88 @@
56 +#ifndef _LINUX_ELFNOTE_H
57 +#define _LINUX_ELFNOTE_H
58 +/*
59 + * Helper macros to generate ELF Note structures, which are put into a
60 + * PT_NOTE segment of the final vmlinux image. These are useful for
61 + * including name-value pairs of metadata into the kernel binary (or
62 + * modules?) for use by external programs.
63 + *
64 + * Each note has three parts: a name, a type and a desc. The name is
65 + * intended to distinguish the note's originator, so it would be a
66 + * company, project, subsystem, etc; it must be in a suitable form for
67 + * use in a section name. The type is an integer which is used to tag
68 + * the data, and is considered to be within the "name" namespace (so
69 + * "FooCo"'s type 42 is distinct from "BarProj"'s type 42). The
70 + * "desc" field is the actual data. There are no constraints on the
71 + * desc field's contents, though typically they're fairly small.
72 + *
73 + * All notes from a given NAME are put into a section named
74 + * .note.NAME. When the kernel image is finally linked, all the notes
75 + * are packed into a single .notes section, which is mapped into the
76 + * PT_NOTE segment. Because notes for a given name are grouped into
77 + * the same section, they'll all be adjacent the output file.
78 + *
79 + * This file defines macros for both C and assembler use. Their
80 + * syntax is slightly different, but they're semantically similar.
81 + *
82 + * See the ELF specification for more detail about ELF notes.
83 + */
84 +
85 +#ifdef __ASSEMBLER__
86 +/*
87 + * Generate a structure with the same shape as Elf{32,64}_Nhdr (which
88 + * turn out to be the same size and shape), followed by the name and
89 + * desc data with appropriate padding. The 'desc' argument includes
90 + * the assembler pseudo op defining the type of the data: .asciz
91 + * "hello, world"
92 + */
93 +.macro ELFNOTE name type desc:vararg
94 +.pushsection ".note.\name"
95 + .align 4
96 + .long 2f - 1f /* namesz */
97 + .long 4f - 3f /* descsz */
98 + .long \type
99 +1:.asciz "\name"
100 +2:.align 4
101 +3:\desc
102 +4:.align 4
103 +.popsection
104 +.endm
105 +#else /* !__ASSEMBLER__ */
106 +#include <linux/elf.h>
107 +/*
108 + * Use an anonymous structure which matches the shape of
109 + * Elf{32,64}_Nhdr, but includes the name and desc data. The size and
110 + * type of name and desc depend on the macro arguments. "name" must
111 + * be a literal string, and "desc" must be passed by value. You may
112 + * only define one note per line, since __LINE__ is used to generate
113 + * unique symbols.
114 + */
115 +#define _ELFNOTE_PASTE(a,b) a##b
116 +#define _ELFNOTE(size, name, unique, type, desc) \
117 + static const struct { \
118 + struct elf##size##_note _nhdr; \
119 + unsigned char _name[sizeof(name)] \
120 + __attribute__((aligned(sizeof(Elf##size##_Word)))); \
121 + typeof(desc) _desc \
122 + __attribute__((aligned(sizeof(Elf##size##_Word)))); \
123 + } _ELFNOTE_PASTE(_note_, unique) \
124 + __attribute_used__ \
125 + __attribute__((section(".note." name), \
126 + aligned(sizeof(Elf##size##_Word)), \
127 + unused)) = { \
128 + { \
129 + sizeof(name), \
130 + sizeof(desc), \
131 + type, \
132 + }, \
133 + name, \
134 + desc \
135 + }
136 +#define ELFNOTE(size, name, type, desc) \
137 + _ELFNOTE(size, name, __LINE__, type, desc)
138 +
139 +#define ELFNOTE32(name, type, desc) ELFNOTE(32, name, type, desc)
140 +#define ELFNOTE64(name, type, desc) ELFNOTE(64, name, type, desc)
141 +#endif /* __ASSEMBLER__ */
142 +
143 +#endif /* _LINUX_ELFNOTE_H */