source: trunk/packages/xen-3.1/xen-3.1/patches/linux-2.6.18/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch @ 34

Last change on this file since 34 was 34, checked in by hartmans, 18 years ago

Add xen and xen-common

  • Property svn:mime-type set to text/x-patch
File size: 4.9 KB
  • arch/i386/kernel/vmlinux.lds.S

    diff -pruN ../orig-linux-2.6.18/arch/i386/kernel/vmlinux.lds.S ./arch/i386/kernel/vmlinux.lds.S
    old new OUTPUT_FORMAT("elf32-i386", "elf32-i386" 
    1313OUTPUT_ARCH(i386)
    1414ENTRY(phys_startup_32)
    1515jiffies = jiffies_64;
     16
     17PHDRS {
     18        text PT_LOAD FLAGS(5);  /* R_E */
     19        data PT_LOAD FLAGS(7);  /* RWE */
     20        note PT_NOTE FLAGS(4);  /* R__ */
     21}
    1622SECTIONS
    1723{
    1824  . = __KERNEL_START;
    SECTIONS 
    2632        KPROBES_TEXT
    2733        *(.fixup)
    2834        *(.gnu.warning)
    29         } = 0x9090
     35        } :text = 0x9090
    3036
    3137  _etext = .;                   /* End of text section */
    3238
    SECTIONS 
    4854  .data : AT(ADDR(.data) - LOAD_OFFSET) {       /* Data */
    4955        *(.data)
    5056        CONSTRUCTORS
    51         }
     57        } :data
    5258
    5359  . = ALIGN(4096);
    5460  __nosave_begin = .;
    SECTIONS 
    184190  STABS_DEBUG
    185191
    186192  DWARF_DEBUG
     193
     194  NOTES
    187195}
  • include/asm-generic/vmlinux.lds.h

    diff -pruN ../orig-linux-2.6.18/include/asm-generic/vmlinux.lds.h ./include/asm-generic/vmlinux.lds.h
    old new  
    194194                .stab.index 0 : { *(.stab.index) }                      \
    195195                .stab.indexstr 0 : { *(.stab.indexstr) }                \
    196196                .comment 0 : { *(.comment) }
     197
     198#define NOTES                                                           \
     199                .notes : { *(.note.*) } :note
  • include/linux/elfnote.h

    diff -pruN ../orig-linux-2.6.18/include/linux/elfnote.h ./include/linux/elfnote.h
    old new  
     1#ifndef _LINUX_ELFNOTE_H
     2#define _LINUX_ELFNOTE_H
     3/*
     4 * Helper macros to generate ELF Note structures, which are put into a
     5 * PT_NOTE segment of the final vmlinux image.  These are useful for
     6 * including name-value pairs of metadata into the kernel binary (or
     7 * modules?) for use by external programs.
     8 *
     9 * Each note has three parts: a name, a type and a desc.  The name is
     10 * intended to distinguish the note's originator, so it would be a
     11 * company, project, subsystem, etc; it must be in a suitable form for
     12 * use in a section name.  The type is an integer which is used to tag
     13 * the data, and is considered to be within the "name" namespace (so
     14 * "FooCo"'s type 42 is distinct from "BarProj"'s type 42).  The
     15 * "desc" field is the actual data.  There are no constraints on the
     16 * desc field's contents, though typically they're fairly small.
     17 *
     18 * All notes from a given NAME are put into a section named
     19 * .note.NAME.  When the kernel image is finally linked, all the notes
     20 * are packed into a single .notes section, which is mapped into the
     21 * PT_NOTE segment.  Because notes for a given name are grouped into
     22 * the same section, they'll all be adjacent the output file.
     23 *
     24 * This file defines macros for both C and assembler use.  Their
     25 * syntax is slightly different, but they're semantically similar.
     26 *
     27 * See the ELF specification for more detail about ELF notes.
     28 */
     29
     30#ifdef __ASSEMBLER__
     31/*
     32 * Generate a structure with the same shape as Elf{32,64}_Nhdr (which
     33 * turn out to be the same size and shape), followed by the name and
     34 * desc data with appropriate padding.  The 'desc' argument includes
     35 * the assembler pseudo op defining the type of the data: .asciz
     36 * "hello, world"
     37 */
     38.macro ELFNOTE name type desc:vararg
     39.pushsection ".note.\name"
     40  .align 4
     41  .long 2f - 1f                 /* namesz */
     42  .long 4f - 3f                 /* descsz */
     43  .long \type
     441:.asciz "\name"
     452:.align 4
     463:\desc
     474:.align 4
     48.popsection
     49.endm
     50#else   /* !__ASSEMBLER__ */
     51#include <linux/elf.h>
     52/*
     53 * Use an anonymous structure which matches the shape of
     54 * Elf{32,64}_Nhdr, but includes the name and desc data.  The size and
     55 * type of name and desc depend on the macro arguments.  "name" must
     56 * be a literal string, and "desc" must be passed by value.  You may
     57 * only define one note per line, since __LINE__ is used to generate
     58 * unique symbols.
     59 */
     60#define _ELFNOTE_PASTE(a,b)     a##b
     61#define _ELFNOTE(size, name, unique, type, desc)                        \
     62        static const struct {                                           \
     63                struct elf##size##_note _nhdr;                          \
     64                unsigned char _name[sizeof(name)]                       \
     65                __attribute__((aligned(sizeof(Elf##size##_Word))));     \
     66                typeof(desc) _desc                                      \
     67                             __attribute__((aligned(sizeof(Elf##size##_Word)))); \
     68        } _ELFNOTE_PASTE(_note_, unique)                                \
     69                __attribute_used__                                      \
     70                __attribute__((section(".note." name),                  \
     71                               aligned(sizeof(Elf##size##_Word)),       \
     72                               unused)) = {                             \
     73                {                                                       \
     74                        sizeof(name),                                   \
     75                        sizeof(desc),                                   \
     76                        type,                                           \
     77                },                                                      \
     78                name,                                                   \
     79                desc                                                    \
     80        }
     81#define ELFNOTE(size, name, type, desc)         \
     82        _ELFNOTE(size, name, __LINE__, type, desc)
     83
     84#define ELFNOTE32(name, type, desc) ELFNOTE(32, name, type, desc)
     85#define ELFNOTE64(name, type, desc) ELFNOTE(64, name, type, desc)
     86#endif  /* __ASSEMBLER__ */
     87
     88#endif /* _LINUX_ELFNOTE_H */
Note: See TracBrowser for help on using the repository browser.