All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: lkml <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Linux Arch <linux-arch@vger.kernel.org>,
	Richard Henderson <rth@twiddle.net>, Ian Molton <spyro@f2s.com>,
	Russell King <rmk@arm.linux.org.uk>,
	Haavard Skinnemoen <hskinnemoen@atmel.com>,
	Aubrey Li <aubrey.li@analog.com>,
	Mikael Starvik <starvik@axis.com>,
	David Howells <dhowells@redhat.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	Andi Kleen <ak@suse.de>, Tony Luck <tony.luck@intel.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Ralf Baechle <ralf@linux-mips.org>,
	Matthew Wilcox <matthew@wil.cx>,
	Paul Mackerras <paulus@samba.org>,
	Martin Schwidefsky <schwidefsky@de.ibm.com>,
	Paul Mundt <lethal@linux-sh.org>,
	"David S. Miller" <davem@davemloft.net>,
	Miles Bader <uclinux-v850@lsi.nec.co.jp>,
	Chris Zankel <chris@zankel.net>
Subject: [PATCH] cross-architecture ELF clean up
Date: Wed, 20 Jun 2007 16:08:55 -0700	[thread overview]
Message-ID: <20070620230902.387008536@goop.org> (raw)
In-Reply-To: 20070620230854.246399397@goop.org

[-- Attachment #1: elf-cleanup.patch --]
[-- Type: text/plain, Size: 74160 bytes --]

This patch cleans up the ELF headers and their users.  It does several
related things:

1. split linux/elf.h into pieces

This splits linux/elf.h into several pieces:
	linux/elf.h		- still the common elf header,
				  functionally unchanged
	linux/elf-const.h	- ELF constants, includable by asm code
	linux/elf-decl.h	- ELF type declarations, without definitions
	linux/elf-defn.h	- ELF type definitions

This makes it easier to use the ELF headers in various contexts such
as assembler and boot code, without pulling in a lot of other unneeded
headers.

2. add asm-*/elf-defines.h, and asm-generic/elf(32|64)-defines.h

Architectures define some arch-specific ELF definitions.

The most basic of these is whether they want to use a 32 or 64 bit ELF
class, and their associated types.  These common definitions have been
put into asm-generic/elf(32|64)-defines.h, so that a simple
architecture can simply include the appropriate generic header in its
asm/elf-defines.h.

The effect of including asm/elf-defines.h in any code is that you get
the architecture's preferred ELF_CLASS defined, and the generic types
(Elf_Ehdr, Elf_Phdr, etc) are defined to the appropriate class types
(Elf32_Ehdr, etc).

For most architectures this transition was straightforward, but some
need special handling:

  mips, powerpc, s390 allow both 32 and 64 bit operation.  powerpc's
  logic for this was particularly complex, so I just copied the code
  outright into asm-powerpc/elf-defines.h and hope that it's right.

  powerpc also appears to have its own duplicate copy of elf.h in
  arch/powerpc/boot/elf.h; presumably because the standard elf.h
  brings in too much.  Update it to just linux/elf-defn.h, which
  should be fine.

  x86-64 does some mucking about with ELF_CLASS in order to make
  fs/binfmt_elf also handle 32-bit binaries.  This is why
  asm-generic/elf(32|64)_defines.h only conditionally define
  ELF_CLASS.

3. Narrow elf.h includes.

Some headers, such as linux/modules.h, are included by a large
proportion of the kernel code, and end up including linux/elf.h which
in turn includes a lot of other headers.  In practice, linux/modules.h
only wants a couple of ELF type declarations, and so can make do with
asm/elf-defines.h, which includes very little.

A side effect of this is that some files were depending on
linux/elf.h's implicit includes, and so needed to have some extra
headers for the definitions they require.

Unfortunately I don't have the means to cross-build all the
architectures, but I did an cross builds of i386, x86-64, sparc64 and
powerpc and fixed up what I found.

Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
Cc: Linux Arch <linux-arch@vger.kernel.org>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ian Molton <spyro@f2s.com>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Aubrey Li <aubrey.li@analog.com>
Cc: Mikael Starvik <starvik@axis.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Andi Kleen <ak@suse.de>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: David S. Miller <davem@davemloft.net>
Cc: Miles Bader <uclinux-v850@lsi.nec.co.jp>
Cc: Chris Zankel <chris@zankel.net>

---
 arch/frv/kernel/process.c                    |    2 
 arch/i386/kernel/smpcommon.c                 |    1 
 arch/i386/kernel/vmi.c                       |    1 
 arch/powerpc/boot/elf.h                      |  145 ---------
 arch/powerpc/kernel/prom_init.c              |    1 
 arch/powerpc/platforms/cell/io-workarounds.c |    1 
 arch/powerpc/platforms/cell/spufs/context.c  |    1 
 arch/powerpc/platforms/pseries/eeh.c         |    1 
 arch/powerpc/platforms/pseries/eeh_event.c   |    1 
 arch/powerpc/platforms/pseries/hotplug-cpu.c |    1 
 arch/powerpc/platforms/pseries/iommu.c       |    1 
 drivers/ps3/sys-manager.c                    |    1 
 include/asm-alpha/elf-defines.h              |    1 
 include/asm-alpha/elf.h                      |    2 
 include/asm-alpha/module.h                   |    8 
 include/asm-arm/elf-defines.h                |    1 
 include/asm-arm/elf.h                        |    2 
 include/asm-arm/module.h                     |    4 
 include/asm-arm26/elf-defines.h              |    1 
 include/asm-arm26/elf.h                      |    2 
 include/asm-avr32/elf-defines.h              |    1 
 include/asm-avr32/elf.h                      |    2 
 include/asm-avr32/module.h                   |    4 
 include/asm-blackfin/elf-defines.h           |    1 
 include/asm-blackfin/elf.h                   |    2 
 include/asm-blackfin/module.h                |    5 
 include/asm-cris/elf-defines.h               |    1 
 include/asm-cris/elf.h                       |    2 
 include/asm-cris/module.h                    |    4 
 include/asm-frv/elf-defines.h                |    1 
 include/asm-frv/elf.h                        |    2 
 include/asm-frv/module.h                     |    4 
 include/asm-generic/Kbuild                   |    2 
 include/asm-generic/Kbuild.asm               |    1 
 include/asm-generic/elf32-defines.h          |   21 +
 include/asm-generic/elf64-defines.h          |   21 +
 include/asm-h8300/elf-defines.h              |    1 
 include/asm-h8300/elf.h                      |    2 
 include/asm-h8300/module.h                   |    5 
 include/asm-i386/elf-defines.h               |   24 +
 include/asm-i386/elf.h                       |   22 -
 include/asm-i386/module.h                    |    4 
 include/asm-ia64/elf-defines.h               |    1 
 include/asm-ia64/elf.h                       |    2 
 include/asm-ia64/module.h                    |    4 
 include/asm-m32r/elf-defines.h               |    1 
 include/asm-m32r/elf.h                       |    2 
 include/asm-m32r/module.h                    |    4 
 include/asm-m68k/elf-defines.h               |    1 
 include/asm-m68k/elf.h                       |    2 
 include/asm-m68k/module.h                    |    5 
 include/asm-m68knommu/elf-defines.h          |    1 
 include/asm-m68knommu/elf.h                  |    2 
 include/asm-mips/elf-defines.h               |    6 
 include/asm-mips/elf.h                       |   15 
 include/asm-mips/module.h                    |   11 
 include/asm-parisc/elf-defines.h             |    5 
 include/asm-parisc/elf.h                     |    6 
 include/asm-parisc/module.h                  |   14 
 include/asm-powerpc/elf-defines.h            |   32 ++
 include/asm-powerpc/elf.h                    |   23 -
 include/asm-powerpc/module.h                 |    7 
 include/asm-s390/elf-defines.h               |    5 
 include/asm-s390/elf.h                       |    6 
 include/asm-s390/module.h                    |    6 
 include/asm-sh/elf-defines.h                 |    1 
 include/asm-sh/elf.h                         |    2 
 include/asm-sh/module.h                      |    4 
 include/asm-sh64/elf-defines.h               |    1 
 include/asm-sh64/elf.h                       |    2 
 include/asm-sh64/module.h                    |    4 
 include/asm-sparc/elf-defines.h              |    1 
 include/asm-sparc/elf.h                      |    2 
 include/asm-sparc/module.h                   |    4 
 include/asm-sparc64/elf-defines.h            |    1 
 include/asm-sparc64/elf.h                    |    2 
 include/asm-sparc64/module.h                 |    4 
 include/asm-v850/elf-defines.h               |    1 
 include/asm-v850/elf.h                       |    2 
 include/asm-v850/module.h                    |    4 
 include/asm-x86_64/elf-defines.h             |    1 
 include/asm-x86_64/elf.h                     |    2 
 include/asm-x86_64/module.h                  |    4 
 include/asm-xtensa/elf-defines.h             |    1 
 include/asm-xtensa/elf.h                     |    2 
 include/asm-xtensa/module.h                  |    4 
 include/linux/Kbuild                         |    4 
 include/linux/audit.h                        |    2 
 include/linux/elf-const.h                    |  222 ++++++++++++++
 include/linux/elf-decl.h                     |   48 +++
 include/linux/elf-defn.h                     |  174 +++++++++++
 include/linux/elf-em.h                       |   51 ---
 include/linux/elf.h                          |  399 +-------------------------
 include/linux/elfnote.h                      |   30 +
 include/linux/module.h                       |    1 
 kernel/sysctl.c                              |    1 
 lib/bug.c                                    |    1 
 97 files changed, 692 insertions(+), 761 deletions(-)

===================================================================
--- a/arch/frv/kernel/process.c
+++ b/arch/frv/kernel/process.c
@@ -309,7 +309,7 @@ unsigned long thread_saved_pc(struct tas
 		return tsk->thread.pc;
 }
 
-int elf_check_arch(const struct elf32_hdr *hdr)
+int elf_check_arch(const Elf32_Ehdr *hdr)
 {
 	unsigned long hsr0 = __get_HSR(0);
 	unsigned long psr = __get_PSR();
===================================================================
--- a/arch/i386/kernel/smpcommon.c
+++ b/arch/i386/kernel/smpcommon.c
@@ -3,6 +3,7 @@
  */
 #include <linux/module.h>
 #include <asm/smp.h>
+#include <asm/desc.h>
 
 DEFINE_PER_CPU(unsigned long, this_cpu_off);
 EXPORT_PER_CPU_SYMBOL(this_cpu_off);
===================================================================
--- a/arch/i386/kernel/vmi.c
+++ b/arch/i386/kernel/vmi.c
@@ -37,6 +37,7 @@
 #include <asm/timer.h>
 #include <asm/vmi_time.h>
 #include <asm/kmap_types.h>
+#include <asm/desc.h>
 
 /* Convenient for calling VMI functions indirectly in the ROM */
 typedef u32 __attribute__((regparm(1))) (VROMFUNC)(void);
===================================================================
--- a/arch/powerpc/boot/elf.h
+++ b/arch/powerpc/boot/elf.h
@@ -1,150 +1,7 @@
 #ifndef _PPC_BOOT_ELF_H_
 #define _PPC_BOOT_ELF_H_
 
-/* 32-bit ELF base types. */
-typedef unsigned int Elf32_Addr;
-typedef unsigned short Elf32_Half;
-typedef unsigned int Elf32_Off;
-typedef signed int Elf32_Sword;
-typedef unsigned int Elf32_Word;
-
-/* 64-bit ELF base types. */
-typedef unsigned long long Elf64_Addr;
-typedef unsigned short Elf64_Half;
-typedef signed short Elf64_SHalf;
-typedef unsigned long long Elf64_Off;
-typedef signed int Elf64_Sword;
-typedef unsigned int Elf64_Word;
-typedef unsigned long long Elf64_Xword;
-typedef signed long long Elf64_Sxword;
-
-/* These constants are for the segment types stored in the image headers */
-#define PT_NULL    0
-#define PT_LOAD    1
-#define PT_DYNAMIC 2
-#define PT_INTERP  3
-#define PT_NOTE    4
-#define PT_SHLIB   5
-#define PT_PHDR    6
-#define PT_TLS     7		/* Thread local storage segment */
-#define PT_LOOS    0x60000000	/* OS-specific */
-#define PT_HIOS    0x6fffffff	/* OS-specific */
-#define PT_LOPROC  0x70000000
-#define PT_HIPROC  0x7fffffff
-#define PT_GNU_EH_FRAME		0x6474e550
-
-#define PT_GNU_STACK	(PT_LOOS + 0x474e551)
-
-/* These constants define the different elf file types */
-#define ET_NONE   0
-#define ET_REL    1
-#define ET_EXEC   2
-#define ET_DYN    3
-#define ET_CORE   4
-#define ET_LOPROC 0xff00
-#define ET_HIPROC 0xffff
-
-/* These constants define the various ELF target machines */
-#define EM_NONE  0
-#define EM_PPC	       20	/* PowerPC */
-#define EM_PPC64       21	/* PowerPC64 */
-
-#define EI_NIDENT	16
-
-typedef struct elf32_hdr {
-	unsigned char e_ident[EI_NIDENT];
-	Elf32_Half e_type;
-	Elf32_Half e_machine;
-	Elf32_Word e_version;
-	Elf32_Addr e_entry;	/* Entry point */
-	Elf32_Off e_phoff;
-	Elf32_Off e_shoff;
-	Elf32_Word e_flags;
-	Elf32_Half e_ehsize;
-	Elf32_Half e_phentsize;
-	Elf32_Half e_phnum;
-	Elf32_Half e_shentsize;
-	Elf32_Half e_shnum;
-	Elf32_Half e_shstrndx;
-} Elf32_Ehdr;
-
-typedef struct elf64_hdr {
-	unsigned char e_ident[16];	/* ELF "magic number" */
-	Elf64_Half e_type;
-	Elf64_Half e_machine;
-	Elf64_Word e_version;
-	Elf64_Addr e_entry;	/* Entry point virtual address */
-	Elf64_Off e_phoff;	/* Program header table file offset */
-	Elf64_Off e_shoff;	/* Section header table file offset */
-	Elf64_Word e_flags;
-	Elf64_Half e_ehsize;
-	Elf64_Half e_phentsize;
-	Elf64_Half e_phnum;
-	Elf64_Half e_shentsize;
-	Elf64_Half e_shnum;
-	Elf64_Half e_shstrndx;
-} Elf64_Ehdr;
-
-/* These constants define the permissions on sections in the program
-   header, p_flags. */
-#define PF_R		0x4
-#define PF_W		0x2
-#define PF_X		0x1
-
-typedef struct elf32_phdr {
-	Elf32_Word p_type;
-	Elf32_Off p_offset;
-	Elf32_Addr p_vaddr;
-	Elf32_Addr p_paddr;
-	Elf32_Word p_filesz;
-	Elf32_Word p_memsz;
-	Elf32_Word p_flags;
-	Elf32_Word p_align;
-} Elf32_Phdr;
-
-typedef struct elf64_phdr {
-	Elf64_Word p_type;
-	Elf64_Word p_flags;
-	Elf64_Off p_offset;	/* Segment file offset */
-	Elf64_Addr p_vaddr;	/* Segment virtual address */
-	Elf64_Addr p_paddr;	/* Segment physical address */
-	Elf64_Xword p_filesz;	/* Segment size in file */
-	Elf64_Xword p_memsz;	/* Segment size in memory */
-	Elf64_Xword p_align;	/* Segment alignment, file & memory */
-} Elf64_Phdr;
-
-#define	EI_MAG0		0	/* e_ident[] indexes */
-#define	EI_MAG1		1
-#define	EI_MAG2		2
-#define	EI_MAG3		3
-#define	EI_CLASS	4
-#define	EI_DATA		5
-#define	EI_VERSION	6
-#define	EI_OSABI	7
-#define	EI_PAD		8
-
-#define	ELFMAG0		0x7f	/* EI_MAG */
-#define	ELFMAG1		'E'
-#define	ELFMAG2		'L'
-#define	ELFMAG3		'F'
-#define	ELFMAG		"\177ELF"
-#define	SELFMAG		4
-
-#define	ELFCLASSNONE	0	/* EI_CLASS */
-#define	ELFCLASS32	1
-#define	ELFCLASS64	2
-#define	ELFCLASSNUM	3
-
-#define ELFDATANONE	0	/* e_ident[EI_DATA] */
-#define ELFDATA2LSB	1
-#define ELFDATA2MSB	2
-
-#define EV_NONE		0	/* e_version, EI_VERSION */
-#define EV_CURRENT	1
-#define EV_NUM		2
-
-#define ELFOSABI_NONE	0
-#define ELFOSABI_LINUX	3
+#include <linux/elf-defn.h>
 
 struct elf_info {
 	unsigned long loadsize;
===================================================================
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -28,6 +28,7 @@
 #include <linux/delay.h>
 #include <linux/initrd.h>
 #include <linux/bitops.h>
+#include <linux/elf.h>
 #include <asm/prom.h>
 #include <asm/rtas.h>
 #include <asm/page.h>
===================================================================
--- a/arch/powerpc/platforms/cell/io-workarounds.c
+++ b/arch/powerpc/platforms/cell/io-workarounds.c
@@ -9,6 +9,7 @@
 #undef DEBUG
 
 #include <linux/kernel.h>
+#include <linux/sched.h>
 #include <linux/mm.h>
 #include <linux/pci.h>
 #include <asm/io.h>
===================================================================
--- a/arch/powerpc/platforms/cell/spufs/context.c
+++ b/arch/powerpc/platforms/cell/spufs/context.c
@@ -23,6 +23,7 @@
 #include <linux/fs.h>
 #include <linux/mm.h>
 #include <linux/slab.h>
+#include <linux/sched.h>
 #include <asm/spu.h>
 #include <asm/spu_csa.h>
 #include "spufs.h"
===================================================================
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -23,6 +23,7 @@
 #include <linux/pci.h>
 #include <linux/proc_fs.h>
 #include <linux/rbtree.h>
+#include <linux/sched.h>
 #include <linux/seq_file.h>
 #include <linux/spinlock.h>
 #include <asm/atomic.h>
===================================================================
--- a/arch/powerpc/platforms/pseries/eeh_event.c
+++ b/arch/powerpc/platforms/pseries/eeh_event.c
@@ -20,6 +20,7 @@
 
 #include <linux/delay.h>
 #include <linux/list.h>
+#include <linux/sched.h>
 #include <linux/mutex.h>
 #include <linux/pci.h>
 #include <linux/workqueue.h>
===================================================================
--- a/arch/powerpc/platforms/pseries/hotplug-cpu.c
+++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c
@@ -20,6 +20,7 @@
 
 #include <linux/kernel.h>
 #include <linux/delay.h>
+#include <linux/sched.h>
 #include <linux/cpu.h>
 #include <asm/system.h>
 #include <asm/prom.h>
===================================================================
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -28,6 +28,7 @@
 #include <linux/types.h>
 #include <linux/slab.h>
 #include <linux/mm.h>
+#include <linux/sched.h>
 #include <linux/spinlock.h>
 #include <linux/string.h>
 #include <linux/pci.h>
===================================================================
--- a/drivers/ps3/sys-manager.c
+++ b/drivers/ps3/sys-manager.c
@@ -21,6 +21,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/workqueue.h>
+#include <linux/sched.h>
 #include <linux/reboot.h>
 
 #include <asm/firmware.h>
===================================================================
--- /dev/null
+++ b/include/asm-alpha/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf64-defines.h>
===================================================================
--- a/include/asm-alpha/elf.h
+++ b/include/asm-alpha/elf.h
@@ -77,7 +77,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_N
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS64
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2LSB
 #define ELF_ARCH	EM_ALPHA
 
===================================================================
--- a/include/asm-alpha/module.h
+++ b/include/asm-alpha/module.h
@@ -6,13 +6,7 @@ struct mod_arch_specific
 	unsigned int gotsecindex;
 };
 
-#define Elf_Sym Elf64_Sym
-#define Elf_Shdr Elf64_Shdr
-#define Elf_Ehdr Elf64_Ehdr
-#define Elf_Phdr Elf64_Phdr
-#define Elf_Dyn Elf64_Dyn
-#define Elf_Rel Elf64_Rel
-#define Elf_Rela Elf64_Rela
+#include <asm/elf-defines.h>
 
 #define ARCH_SHF_SMALL SHF_ALPHA_GPREL
 
===================================================================
--- /dev/null
+++ b/include/asm-arm/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-arm/elf.h
+++ b/include/asm-arm/elf.h
@@ -31,7 +31,7 @@ typedef struct user_fp elf_fpregset_t;
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #ifdef __ARMEB__
 #define ELF_DATA	ELFDATA2MSB
 #else
===================================================================
--- a/include/asm-arm/module.h
+++ b/include/asm-arm/module.h
@@ -6,9 +6,7 @@ struct mod_arch_specific
 	int foo;
 };
 
-#define Elf_Shdr	Elf32_Shdr
-#define Elf_Sym		Elf32_Sym
-#define Elf_Ehdr	Elf32_Ehdr
+#include <asm/elf-defines.h>
 
 /*
  * Include the ARM architecture version.
===================================================================
--- /dev/null
+++ b/include/asm-arm26/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-arm26/elf.h
+++ b/include/asm-arm26/elf.h
@@ -35,7 +35,7 @@ typedef struct { void *null; } elf_fpreg
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2LSB
 #define ELF_ARCH	EM_ARM
 
===================================================================
--- /dev/null
+++ b/include/asm-avr32/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-avr32/elf.h
+++ b/include/asm-avr32/elf.h
@@ -69,7 +69,7 @@ typedef struct user_fpu_struct elf_fpreg
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #ifdef __LITTLE_ENDIAN__
 #define ELF_DATA	ELFDATA2LSB
 #else
===================================================================
--- a/include/asm-avr32/module.h
+++ b/include/asm-avr32/module.h
@@ -17,9 +17,7 @@ struct mod_arch_specific {
 	struct mod_arch_syminfo *syminfo;
 };
 
-#define Elf_Shdr		Elf32_Shdr
-#define Elf_Sym			Elf32_Sym
-#define Elf_Ehdr		Elf32_Ehdr
+#include <asm/elf-defines.h>
 
 #define MODULE_PROC_FAMILY "AVR32v1"
 
===================================================================
--- /dev/null
+++ b/include/asm-blackfin/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-blackfin/elf.h
+++ b/include/asm-blackfin/elf.h
@@ -35,7 +35,7 @@ typedef struct user_bfinfp_struct elf_fp
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2LSB
 #define ELF_ARCH	EM_BLACKFIN
 
===================================================================
--- a/include/asm-blackfin/module.h
+++ b/include/asm-blackfin/module.h
@@ -3,9 +3,8 @@
 
 #define MODULE_SYMBOL_PREFIX "_"
 
-#define Elf_Shdr        Elf32_Shdr
-#define Elf_Sym         Elf32_Sym
-#define Elf_Ehdr        Elf32_Ehdr
+#include <asm/elf-defines.h>
+
 #define FLG_CODE_IN_L1	0x10
 #define FLG_DATA_IN_L1	0x20
 
===================================================================
--- /dev/null
+++ b/include/asm-cris/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-cris/elf.h
+++ b/include/asm-cris/elf.h
@@ -41,7 +41,7 @@ typedef unsigned long elf_fpregset_t;
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2LSB
 #define ELF_ARCH	EM_CRIS
 
===================================================================
--- a/include/asm-cris/module.h
+++ b/include/asm-cris/module.h
@@ -3,7 +3,5 @@
 /* cris is simple */
 struct mod_arch_specific { };
 
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
+#include <asm/elf-defines.h>
 #endif /* _ASM_CRIS_MODULE_H */
===================================================================
--- /dev/null
+++ b/include/asm-frv/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-frv/elf.h
+++ b/include/asm-frv/elf.h
@@ -77,7 +77,7 @@ extern int elf_check_arch(const struct e
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2MSB
 #define ELF_ARCH	EM_FRV
 
===================================================================
--- a/include/asm-frv/module.h
+++ b/include/asm-frv/module.h
@@ -15,9 +15,7 @@ struct mod_arch_specific
 {
 };
 
-#define Elf_Shdr	Elf32_Shdr
-#define Elf_Sym		Elf32_Sym
-#define Elf_Ehdr	Elf32_Ehdr
+#include <asm/elf-defines.h>
 
 /*
  * Include the architecture version.
===================================================================
--- a/include/asm-generic/Kbuild
+++ b/include/asm-generic/Kbuild
@@ -1,3 +1,5 @@ header-y += errno-base.h
+header-y += elf32-defines.h
+header-y += elf64-defines.h
 header-y += errno-base.h
 header-y += errno.h
 header-y += fcntl.h
===================================================================
--- a/include/asm-generic/Kbuild.asm
+++ b/include/asm-generic/Kbuild.asm
@@ -1,6 +1,7 @@ unifdef-y += a.out.h
 unifdef-y += a.out.h
 unifdef-y += auxvec.h
 unifdef-y += byteorder.h
+unifdef-y += elf-defines.h
 unifdef-y += errno.h
 unifdef-y += fcntl.h
 unifdef-y += ioctl.h
===================================================================
--- /dev/null
+++ b/include/asm-generic/elf32-defines.h
@@ -0,0 +1,21 @@
+#ifndef __ASM_GENERIC_ELF32_DEFINES_H
+#define __ASM_GENERIC_ELF32_DEFINES_H
+
+#include <linux/elf-decl.h>
+#include <linux/elf-const.h>
+
+#ifndef ELF_CLASS
+#define ELF_CLASS	ELFCLASS32
+#endif
+
+typedef Elf32_Ehdr	Elf_Ehdr;
+typedef Elf32_Phdr	Elf_Phdr;
+typedef Elf32_Shdr	Elf_Shdr;
+typedef Elf32_Sym	Elf_Sym;
+typedef Elf32_Dyn	Elf_Dyn;
+typedef Elf32_Rel	Elf_Rel;
+typedef Elf32_Rela	Elf_Rela;
+
+typedef Elf32_Addr	Elf_Addr;
+
+#endif /* __ASM_GENERIC_ELF32_DEFINES_H */
===================================================================
--- /dev/null
+++ b/include/asm-generic/elf64-defines.h
@@ -0,0 +1,21 @@
+#ifndef __ASM_GENERIC_ELF64_DEFINES_H
+#define __ASM_GENERIC_ELF64_DEFINES_H
+
+#include <linux/elf-decl.h>
+#include <linux/elf-const.h>
+
+#ifndef ELF_CLASS
+#define ELF_CLASS	ELFCLASS64
+#endif
+
+typedef Elf64_Ehdr	Elf_Ehdr;
+typedef Elf64_Phdr	Elf_Phdr;
+typedef Elf64_Shdr	Elf_Shdr;
+typedef Elf64_Sym	Elf_Sym;
+typedef Elf64_Dyn	Elf_Dyn;
+typedef Elf64_Rel	Elf_Rel;
+typedef Elf64_Rela	Elf_Rela;
+
+typedef Elf64_Addr	Elf_Addr;
+
+#endif /* __ASM_GENERIC_ELF64_DEFINES_H */
===================================================================
--- /dev/null
+++ b/include/asm-h8300/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-h8300/elf.h
+++ b/include/asm-h8300/elf.h
@@ -22,7 +22,7 @@ typedef unsigned long elf_fpregset_t;
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2MSB
 #define ELF_ARCH	EM_H8_300
 #if defined(__H8300H__)
===================================================================
--- a/include/asm-h8300/module.h
+++ b/include/asm-h8300/module.h
@@ -4,9 +4,8 @@
  * This file contains the H8/300 architecture specific module code.
  */
 struct mod_arch_specific { };
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
+
+#include <asm/elf-defines.h>
 
 #define MODULE_SYMBOL_PREFIX "_"
 
===================================================================
--- /dev/null
+++ b/include/asm-i386/elf-defines.h
@@ -0,0 +1,24 @@
+#ifndef __ASM_I386_ELF_DEFINES_H
+#define __ASM_I386_ELF_DEFINES_H
+
+#define R_386_NONE	0
+#define R_386_32	1
+#define R_386_PC32	2
+#define R_386_GOT32	3
+#define R_386_PLT32	4
+#define R_386_COPY	5
+#define R_386_GLOB_DAT	6
+#define R_386_JMP_SLOT	7
+#define R_386_RELATIVE	8
+#define R_386_GOTOFF	9
+#define R_386_GOTPC	10
+#define R_386_NUM	11
+
+/*
+ * These are used to set parameters in the core dumps.
+ */
+#include <asm-generic/elf32-defines.h>
+#define ELF_DATA	ELFDATA2LSB
+#define ELF_ARCH	EM_386
+
+#endif /* __ASM_I386_ELF_DEFINES_H */
===================================================================
--- a/include/asm-i386/elf.h
+++ b/include/asm-i386/elf.h
@@ -5,22 +5,9 @@
  * ELF register definitions..
  */
 
-#include <asm/ptrace.h>
 #include <asm/user.h>
 #include <asm/auxvec.h>
-
-#define R_386_NONE	0
-#define R_386_32	1
-#define R_386_PC32	2
-#define R_386_GOT32	3
-#define R_386_PLT32	4
-#define R_386_COPY	5
-#define R_386_GLOB_DAT	6
-#define R_386_JMP_SLOT	7
-#define R_386_RELATIVE	8
-#define R_386_GOTOFF	9
-#define R_386_GOTPC	10
-#define R_386_NUM	11
+#include <asm/elf-defines.h>
 
 typedef unsigned long elf_greg_t;
 
@@ -35,13 +22,6 @@ typedef struct user_fxsr_struct elf_fpxr
  */
 #define elf_check_arch(x) \
 	(((x)->e_machine == EM_386) || ((x)->e_machine == EM_486))
-
-/*
- * These are used to set parameters in the core dumps.
- */
-#define ELF_CLASS	ELFCLASS32
-#define ELF_DATA	ELFDATA2LSB
-#define ELF_ARCH	EM_386
 
 #ifdef __KERNEL__
 
===================================================================
--- a/include/asm-i386/module.h
+++ b/include/asm-i386/module.h
@@ -6,9 +6,7 @@ struct mod_arch_specific
 {
 };
 
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
+#include <asm/elf-defines.h>
 
 #ifdef CONFIG_M386
 #define MODULE_PROC_FAMILY "386 "
===================================================================
--- /dev/null
+++ b/include/asm-ia64/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf64-defines.h>
===================================================================
--- a/include/asm-ia64/elf.h
+++ b/include/asm-ia64/elf.h
@@ -21,7 +21,7 @@
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS64
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2LSB
 #define ELF_ARCH	EM_IA_64
 
===================================================================
--- a/include/asm-ia64/module.h
+++ b/include/asm-ia64/module.h
@@ -23,9 +23,7 @@ struct mod_arch_specific {
 	unsigned int next_got_entry;	/* index of next available got entry */
 };
 
-#define Elf_Shdr	Elf64_Shdr
-#define Elf_Sym		Elf64_Sym
-#define Elf_Ehdr	Elf64_Ehdr
+#include <asm/elf-defines.h>
 
 #define MODULE_PROC_FAMILY	"ia64"
 #define MODULE_ARCH_VERMAGIC	MODULE_PROC_FAMILY \
===================================================================
--- /dev/null
+++ b/include/asm-m32r/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-m32r/elf.h
+++ b/include/asm-m32r/elf.h
@@ -81,7 +81,7 @@ typedef elf_fpreg_t elf_fpregset_t;
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #if defined(__LITTLE_ENDIAN)
 #define ELF_DATA	ELFDATA2LSB
 #elif defined(__BIG_ENDIAN)
===================================================================
--- a/include/asm-m32r/module.h
+++ b/include/asm-m32r/module.h
@@ -3,8 +3,6 @@
 
 struct mod_arch_specific { };
 
-#define Elf_Shdr	Elf32_Shdr
-#define Elf_Sym		Elf32_Sym
-#define Elf_Ehdr	Elf32_Ehdr
+#include <asm/elf-defines.h>
 
 #endif /* _ASM_M32R_MODULE_H */
===================================================================
--- /dev/null
+++ b/include/asm-m68k/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-m68k/elf.h
+++ b/include/asm-m68k/elf.h
@@ -50,7 +50,7 @@ typedef struct user_m68kfp_struct elf_fp
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2MSB
 #define ELF_ARCH	EM_68K
 
===================================================================
--- a/include/asm-m68k/module.h
+++ b/include/asm-m68k/module.h
@@ -10,10 +10,7 @@ struct mod_arch_specific {
 	.fixup_end		= __stop_fixup,		\
 }
 
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
-
+#include <asm/elf-defines.h>
 
 enum m68k_fixup_type {
 	m68k_fixup_memoffset,
===================================================================
--- /dev/null
+++ b/include/asm-m68knommu/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-m68knommu/elf.h
+++ b/include/asm-m68knommu/elf.h
@@ -50,7 +50,7 @@ typedef struct user_m68kfp_struct elf_fp
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2MSB
 #define ELF_ARCH	EM_68K
 
===================================================================
--- /dev/null
+++ b/include/asm-mips/elf-defines.h
@@ -0,0 +1,6 @@
+#ifdef CONFIG_64BIT
+#include <asm-generic/elf64-defines.h>
+#endif
+#ifdef CONFIG_32BIT
+#include <asm-generic/elf32-defines.h>
+#endif
===================================================================
--- a/include/asm-mips/elf.h
+++ b/include/asm-mips/elf.h
@@ -173,6 +173,11 @@ typedef double elf_fpreg_t;
 typedef double elf_fpreg_t;
 typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
 
+/*
+ * These are used to set parameters in the core dumps.
+ */
+#include <asm/elf-defines.h>
+
 #ifdef CONFIG_32BIT
 
 /*
@@ -196,11 +201,6 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_N
 	__res;								\
 })
 
-/*
- * These are used to set parameters in the core dumps.
- */
-#define ELF_CLASS	ELFCLASS32
-
 #endif /* CONFIG_32BIT */
 
 #ifdef CONFIG_64BIT
@@ -219,11 +219,6 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_N
 									\
 	__res;								\
 })
-
-/*
- * These are used to set parameters in the core dumps.
- */
-#define ELF_CLASS	ELFCLASS64
 
 #endif /* CONFIG_64BIT */
 
===================================================================
--- a/include/asm-mips/module.h
+++ b/include/asm-mips/module.h
@@ -3,6 +3,7 @@
 
 #include <linux/list.h>
 #include <asm/uaccess.h>
+#include <asm/elf-defines.h>
 
 struct mod_arch_specific {
 	/* Data Bus Error exception tables */
@@ -34,11 +35,6 @@ typedef struct {
 
 #ifdef CONFIG_32BIT
 
-#define Elf_Shdr	Elf32_Shdr
-#define Elf_Sym		Elf32_Sym
-#define Elf_Ehdr	Elf32_Ehdr
-#define Elf_Addr	Elf32_Addr
-
 #define Elf_Mips_Rel	Elf32_Rel
 #define Elf_Mips_Rela	Elf32_Rela
 
@@ -48,11 +44,6 @@ typedef struct {
 #endif
 
 #ifdef CONFIG_64BIT
-
-#define Elf_Shdr	Elf64_Shdr
-#define Elf_Sym		Elf64_Sym
-#define Elf_Ehdr	Elf64_Ehdr
-#define Elf_Addr	Elf64_Addr
 
 #define Elf_Mips_Rel	Elf64_Mips_Rel
 #define Elf_Mips_Rela	Elf64_Mips_Rela
===================================================================
--- /dev/null
+++ b/include/asm-parisc/elf-defines.h
@@ -0,0 +1,5 @@
+#ifdef CONFIG_64BIT
+#include <asm-generic/elf64-defines.h>
+#else
+#include <asm-generic/elf32-defines.h>
+#endif
===================================================================
--- a/include/asm-parisc/elf.h
+++ b/include/asm-parisc/elf.h
@@ -220,11 +220,7 @@ typedef struct elf64_fdesc {
  * macros, and then it includes fs/binfmt_elf.c to provide an alternate
  * elf binary handler for 32 bit binaries (on the 64 bit kernel).
  */
-#ifdef CONFIG_64BIT
-#define ELF_CLASS       ELFCLASS64
-#else
-#define ELF_CLASS	ELFCLASS32
-#endif
+#include <asm/elf-defines.h>
 
 typedef unsigned long elf_greg_t;
 
===================================================================
--- a/include/asm-parisc/module.h
+++ b/include/asm-parisc/module.h
@@ -3,19 +3,7 @@
 /*
  * This file contains the parisc architecture specific module code.
  */
-#ifdef CONFIG_64BIT
-#define Elf_Shdr Elf64_Shdr
-#define Elf_Sym Elf64_Sym
-#define Elf_Ehdr Elf64_Ehdr
-#define Elf_Addr Elf64_Addr
-#define Elf_Rela Elf64_Rela
-#else
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
-#define Elf_Addr Elf32_Addr
-#define Elf_Rela Elf32_Rela
-#endif
+#include <asm/elf-defines.h>
 
 struct unwind_table;
 
===================================================================
--- /dev/null
+++ b/include/asm-powerpc/elf-defines.h
@@ -0,0 +1,32 @@
+#ifndef _ASM_POWERPC_ELF_DEFINES_H
+#define _ASM_POWERPC_ELF_DEFINES_H
+
+#include <linux/elf-const.h>
+
+/*
+ * ELF_ARCH, CLASS, and DATA are used to set parameters in the core dumps.
+ */
+#ifdef __powerpc64__
+# define ELF_NVRREG32	33	/* includes vscr & vrsave stuffed together */
+# define ELF_NVRREG	34	/* includes vscr & vrsave in split vectors */
+# define ELF_GREG_TYPE	elf_greg_t64
+#else
+# define ELF_NEVRREG	34	/* includes acc (as 2) */
+# define ELF_NVRREG	33	/* includes vscr */
+# define ELF_GREG_TYPE	elf_greg_t32
+# define ELF_ARCH	EM_PPC
+# define ELF_CLASS	ELFCLASS32
+# define ELF_DATA	ELFDATA2MSB
+#endif /* __powerpc64__ */
+
+#ifndef ELF_ARCH
+# include <asm-generic/elf64-defines.h>
+# define ELF_ARCH	EM_PPC64
+# define ELF_CLASS	ELFCLASS64
+# define ELF_DATA	ELFDATA2MSB
+#else
+  /* Assumption: ELF_ARCH == EM_PPC and ELF_CLASS == ELFCLASS32 */
+# include <asm-generic/elf32-defines.h>
+#endif
+
+#endif	/* _ASM_POWERPC_ELF_DEFINES_H */
===================================================================
--- a/include/asm-powerpc/elf.h
+++ b/include/asm-powerpc/elf.h
@@ -102,26 +102,9 @@ typedef unsigned int elf_greg_t32;
 typedef unsigned int elf_greg_t32;
 typedef elf_greg_t32 elf_gregset_t32[ELF_NGREG];
 
-/*
- * ELF_ARCH, CLASS, and DATA are used to set parameters in the core dumps.
- */
-#ifdef __powerpc64__
-# define ELF_NVRREG32	33	/* includes vscr & vrsave stuffed together */
-# define ELF_NVRREG	34	/* includes vscr & vrsave in split vectors */
-# define ELF_GREG_TYPE	elf_greg_t64
-#else
-# define ELF_NEVRREG	34	/* includes acc (as 2) */
-# define ELF_NVRREG	33	/* includes vscr */
-# define ELF_GREG_TYPE	elf_greg_t32
-# define ELF_ARCH	EM_PPC
-# define ELF_CLASS	ELFCLASS32
-# define ELF_DATA	ELFDATA2MSB
-#endif /* __powerpc64__ */
-
-#ifndef ELF_ARCH
-# define ELF_ARCH	EM_PPC64
-# define ELF_CLASS	ELFCLASS64
-# define ELF_DATA	ELFDATA2MSB
+#include <asm/elf-defines.h>
+
+#if ELF_ARCH == EM_PPC64
   typedef elf_greg_t64 elf_greg_t;
   typedef elf_gregset_t64 elf_gregset_t;
 #else
===================================================================
--- a/include/asm-powerpc/module.h
+++ b/include/asm-powerpc/module.h
@@ -50,18 +50,13 @@ struct mod_arch_specific {
  * Select ELF headers.
  * Make empty section for module_frob_arch_sections to expand.
  */
+#include <asm/elf-defines.h>
 
 #ifdef __powerpc64__
-#    define Elf_Shdr	Elf64_Shdr
-#    define Elf_Sym	Elf64_Sym
-#    define Elf_Ehdr	Elf64_Ehdr
 #    ifdef MODULE
 	asm(".section .stubs,\"ax\",@nobits; .align 3; .previous");
 #    endif
 #else
-#    define Elf_Shdr	Elf32_Shdr
-#    define Elf_Sym	Elf32_Sym
-#    define Elf_Ehdr	Elf32_Ehdr
 #    ifdef MODULE
 	asm(".section .plt,\"ax\",@nobits; .align 3; .previous");
 	asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous");
===================================================================
--- /dev/null
+++ b/include/asm-s390/elf-defines.h
@@ -0,0 +1,5 @@
+#ifndef __s390x__
+#include <asm-generic/elf32-defines.h>
+#else
+#include <asm-generic/elf64-defines.h>
+#endif
===================================================================
--- a/include/asm-s390/elf.h
+++ b/include/asm-s390/elf.h
@@ -95,11 +95,7 @@
 /*
  * These are used to set parameters in the core dumps.
  */
-#ifndef __s390x__
-#define ELF_CLASS	ELFCLASS32
-#else /* __s390x__ */
-#define ELF_CLASS	ELFCLASS64
-#endif /* __s390x__ */
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2MSB
 #define ELF_ARCH	EM_S390
 
===================================================================
--- a/include/asm-s390/module.h
+++ b/include/asm-s390/module.h
@@ -28,6 +28,7 @@ struct mod_arch_specific
 	struct mod_arch_syminfo *syminfo;
 };
 
+#include <asm/elf-defines.h>
 #ifdef __s390x__
 #define ElfW(x) Elf64_ ## x
 #define ELFW(x) ELF64_ ## x
@@ -36,11 +37,6 @@ struct mod_arch_specific
 #define ELFW(x) ELF32_ ## x
 #endif
 
-#define Elf_Addr ElfW(Addr)
-#define Elf_Rela ElfW(Rela)
-#define Elf_Shdr ElfW(Shdr)
-#define Elf_Sym ElfW(Sym)
-#define Elf_Ehdr ElfW(Ehdr)
 #define ELF_R_SYM ELFW(R_SYM)
 #define ELF_R_TYPE ELFW(R_TYPE)
 #endif /* _ASM_S390_MODULE_H */
===================================================================
--- /dev/null
+++ b/include/asm-sh/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-sh/elf.h
+++ b/include/asm-sh/elf.h
@@ -65,7 +65,7 @@ typedef struct user_fpu_struct elf_fpreg
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #ifdef __LITTLE_ENDIAN__
 #define ELF_DATA	ELFDATA2LSB
 #else
===================================================================
--- a/include/asm-sh/module.h
+++ b/include/asm-sh/module.h
@@ -9,9 +9,7 @@ struct mod_arch_specific {
 	/* Nothing to see here .. */
 };
 
-#define Elf_Shdr		Elf32_Shdr
-#define Elf_Sym			Elf32_Sym
-#define Elf_Ehdr		Elf32_Ehdr
+#include <asm/elf-defines.h>
 
 #ifdef CONFIG_CPU_LITTLE_ENDIAN
 # ifdef CONFIG_CPU_SH2
===================================================================
--- /dev/null
+++ b/include/asm-sh64/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-sh64/elf.h
+++ b/include/asm-sh64/elf.h
@@ -35,7 +35,7 @@ typedef struct user_fpu_struct elf_fpreg
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #ifdef __LITTLE_ENDIAN__
 #define ELF_DATA	ELFDATA2LSB
 #else
===================================================================
--- a/include/asm-sh64/module.h
+++ b/include/asm-sh64/module.h
@@ -8,9 +8,7 @@ struct mod_arch_specific {
 	/* empty */
 };
 
-#define Elf_Shdr		Elf32_Shdr
-#define Elf_Sym			Elf32_Sym
-#define Elf_Ehdr		Elf32_Ehdr
+#include <asm/elf-defines.h>
 
 #define module_map(x)		vmalloc(x)
 #define module_unmap(x)		vfree(x)
===================================================================
--- /dev/null
+++ b/include/asm-sparc/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-sparc/elf.h
+++ b/include/asm-sparc/elf.h
@@ -125,7 +125,7 @@ do {	unsigned long *dest = &(__elf_regs[
  * These are used to set parameters in the core dumps.
  */
 #define ELF_ARCH	EM_SPARC
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2MSB
 
 #define USE_ELF_CORE_DUMP
===================================================================
--- a/include/asm-sparc/module.h
+++ b/include/asm-sparc/module.h
@@ -1,7 +1,5 @@
 #ifndef _ASM_SPARC_MODULE_H
 #define _ASM_SPARC_MODULE_H
 struct mod_arch_specific { };
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
+#include <asm/elf-defines.h>
 #endif /* _ASM_SPARC_MODULE_H */
===================================================================
--- /dev/null
+++ b/include/asm-sparc64/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf64-defines.h>
===================================================================
--- a/include/asm-sparc64/elf.h
+++ b/include/asm-sparc64/elf.h
@@ -75,8 +75,8 @@
  * These are used to set parameters in the core dumps.
  */
 #ifndef ELF_ARCH
+#include <asm/elf-defines.h>
 #define ELF_ARCH		EM_SPARCV9
-#define ELF_CLASS		ELFCLASS64
 #define ELF_DATA		ELFDATA2MSB
 
 typedef unsigned long elf_greg_t;
===================================================================
--- a/include/asm-sparc64/module.h
+++ b/include/asm-sparc64/module.h
@@ -1,7 +1,5 @@
 #ifndef _ASM_SPARC64_MODULE_H
 #define _ASM_SPARC64_MODULE_H
 struct mod_arch_specific { };
-#define Elf_Shdr Elf64_Shdr
-#define Elf_Sym Elf64_Sym
-#define Elf_Ehdr Elf64_Ehdr
+#include <asm/elf-defines.h>
 #endif /* _ASM_SPARC64_MODULE_H */
===================================================================
--- /dev/null
+++ b/include/asm-v850/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-v850/elf.h
+++ b/include/asm-v850/elf.h
@@ -50,7 +50,7 @@ typedef struct user_fpu_struct elf_fpreg
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #ifdef __LITTLE_ENDIAN__
 #define ELF_DATA	ELFDATA2LSB
 #else
===================================================================
--- a/include/asm-v850/module.h
+++ b/include/asm-v850/module.h
@@ -31,9 +31,7 @@ struct mod_arch_specific
 	unsigned int core_plt_section, init_plt_section;
 };
 
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
+#include <asm/elf-defines.h>
 
 /* Make empty sections for module_frob_arch_sections to expand. */
 #ifdef MODULE
===================================================================
--- /dev/null
+++ b/include/asm-x86_64/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf64-defines.h>
===================================================================
--- a/include/asm-x86_64/elf.h
+++ b/include/asm-x86_64/elf.h
@@ -39,7 +39,7 @@ typedef struct user_i387_struct elf_fpre
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS64
+#include <asm/elf-defines.h>
 #define ELF_DATA	ELFDATA2LSB
 #define ELF_ARCH	EM_X86_64
 
===================================================================
--- a/include/asm-x86_64/module.h
+++ b/include/asm-x86_64/module.h
@@ -3,8 +3,6 @@
 
 struct mod_arch_specific {}; 
 
-#define Elf_Shdr Elf64_Shdr
-#define Elf_Sym Elf64_Sym
-#define Elf_Ehdr Elf64_Ehdr
+#include <asm/elf-defines.h>
 
 #endif 
===================================================================
--- /dev/null
+++ b/include/asm-xtensa/elf-defines.h
@@ -0,0 +1,1 @@
+#include <asm-generic/elf32-defines.h>
===================================================================
--- a/include/asm-xtensa/elf.h
+++ b/include/asm-xtensa/elf.h
@@ -153,7 +153,7 @@ extern void xtensa_elf_core_copy_regs (x
 # error processor byte order undefined!
 #endif
 
-#define ELF_CLASS	ELFCLASS32
+#include <asm/elf-defines.h>
 #define ELF_ARCH	EM_XTENSA
 
 #define USE_ELF_CORE_DUMP
===================================================================
--- a/include/asm-xtensa/module.h
+++ b/include/asm-xtensa/module.h
@@ -18,8 +18,6 @@ struct mod_arch_specific
 	/* Module support is not completely implemented. */
 };
 
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
+#include <asm/elf-defines.h>
 
 #endif	/* _XTENSA_MODULE_H */
===================================================================
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -58,7 +58,9 @@ header-y += efs_fs_sb.h
 header-y += efs_fs_sb.h
 header-y += elf-fdpic.h
 header-y += elf.h
-header-y += elf-em.h
+header-y += elf-const.h
+header-y += elf-decl.h
+header-y += elf-defn.h
 header-y += fadvise.h
 header-y += fd.h
 header-y += fdreg.h
===================================================================
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -25,7 +25,7 @@
 #define _LINUX_AUDIT_H_
 
 #include <linux/types.h>
-#include <linux/elf-em.h>
+#include <linux/elf-const.h>
 
 /* The netlink messages for the audit system is divided into blocks:
  * 1000 - 1099 are for commanding the audit system
===================================================================
--- /dev/null
+++ b/include/linux/elf-const.h
@@ -0,0 +1,222 @@
+#ifndef _LINUX_ELF_CONST_H
+#define _LINUX_ELF_CONST_H
+
+/* These constants define the various ELF target machines */
+#define EM_NONE		0
+#define EM_M32		1
+#define EM_SPARC	2
+#define EM_386		3
+#define EM_68K		4
+#define EM_88K		5
+#define EM_486		6	/* Perhaps disused */
+#define EM_860		7
+#define EM_MIPS		8	/* MIPS R3000 (officially, big-endian only) */
+				/* Next two are historical and binaries and
+				   modules of these types will be rejected by
+				   Linux.  */
+#define EM_MIPS_RS3_LE	10	/* MIPS R3000 little-endian */
+#define EM_MIPS_RS4_BE	10	/* MIPS R4000 big-endian */
+
+#define EM_PARISC	15	/* HPPA */
+#define EM_SPARC32PLUS	18	/* Sun's "v8plus" */
+#define EM_PPC		20	/* PowerPC */
+#define EM_PPC64	21       /* PowerPC64 */
+#define EM_SH		42	/* SuperH */
+#define EM_SPARCV9	43	/* SPARC v9 64-bit */
+#define EM_IA_64	50	/* HP/Intel IA-64 */
+#define EM_X86_64	62	/* AMD x86-64 */
+#define EM_S390		22	/* IBM S/390 */
+#define EM_CRIS		76	/* Axis Communications 32-bit embedded processor */
+#define EM_V850		87	/* NEC v850 */
+#define EM_M32R		88	/* Renesas M32R */
+#define EM_H8_300	46	/* Renesas H8/300,300H,H8S */
+#define EM_BLACKFIN     106     /* ADI Blackfin Processor */
+#define EM_FRV		0x5441	/* Fujitsu FR-V */
+#define EM_AVR32	0x18ad	/* Atmel AVR32 */
+
+/*
+ * This is an interim value that we will use until the committee comes
+ * up with a final number.
+ */
+#define EM_ALPHA	0x9026
+
+/* Bogus old v850 magic number, used by old tools. */
+#define EM_CYGNUS_V850	0x9080
+/* Bogus old m32r magic number, used by old tools. */
+#define EM_CYGNUS_M32R	0x9041
+/* This is the old interim value for S/390 architecture */
+#define EM_S390_OLD	0xA390
+
+#define EI_NIDENT	16
+
+/* These constants define the permissions on sections in the program
+   header, p_flags. */
+#define PF_R		0x4
+#define PF_W		0x2
+#define PF_X		0x1
+
+/* These constants are for the segment types stored in the image headers */
+#define PT_NULL    0
+#define PT_LOAD    1
+#define PT_DYNAMIC 2
+#define PT_INTERP  3
+#define PT_NOTE    4
+#define PT_SHLIB   5
+#define PT_PHDR    6
+#define PT_TLS     7               /* Thread local storage segment */
+#define PT_LOOS    0x60000000      /* OS-specific */
+#define PT_HIOS    0x6fffffff      /* OS-specific */
+#define PT_LOPROC  0x70000000
+#define PT_HIPROC  0x7fffffff
+#define PT_GNU_EH_FRAME		0x6474e550
+
+#define PT_GNU_STACK	(PT_LOOS + 0x474e551)
+
+/* These constants define the different elf file types */
+#define ET_NONE   0
+#define ET_REL    1
+#define ET_EXEC   2
+#define ET_DYN    3
+#define ET_CORE   4
+#define ET_LOPROC 0xff00
+#define ET_HIPROC 0xffff
+
+/* This is the info that is needed to parse the dynamic section of the file */
+#define DT_NULL		0
+#define DT_NEEDED	1
+#define DT_PLTRELSZ	2
+#define DT_PLTGOT	3
+#define DT_HASH		4
+#define DT_STRTAB	5
+#define DT_SYMTAB	6
+#define DT_RELA		7
+#define DT_RELASZ	8
+#define DT_RELAENT	9
+#define DT_STRSZ	10
+#define DT_SYMENT	11
+#define DT_INIT		12
+#define DT_FINI		13
+#define DT_SONAME	14
+#define DT_RPATH 	15
+#define DT_SYMBOLIC	16
+#define DT_REL	        17
+#define DT_RELSZ	18
+#define DT_RELENT	19
+#define DT_PLTREL	20
+#define DT_DEBUG	21
+#define DT_TEXTREL	22
+#define DT_JMPREL	23
+#define DT_ENCODING	32
+#define OLD_DT_LOOS	0x60000000
+#define DT_LOOS		0x6000000d
+#define DT_HIOS		0x6ffff000
+#define DT_VALRNGLO	0x6ffffd00
+#define DT_VALRNGHI	0x6ffffdff
+#define DT_ADDRRNGLO	0x6ffffe00
+#define DT_ADDRRNGHI	0x6ffffeff
+#define DT_VERSYM	0x6ffffff0
+#define DT_RELACOUNT	0x6ffffff9
+#define DT_RELCOUNT	0x6ffffffa
+#define DT_FLAGS_1	0x6ffffffb
+#define DT_VERDEF	0x6ffffffc
+#define	DT_VERDEFNUM	0x6ffffffd
+#define DT_VERNEED	0x6ffffffe
+#define	DT_VERNEEDNUM	0x6fffffff
+#define OLD_DT_HIOS     0x6fffffff
+#define DT_LOPROC	0x70000000
+#define DT_HIPROC	0x7fffffff
+
+/* This info is needed when parsing the symbol table */
+#define STB_LOCAL  0
+#define STB_GLOBAL 1
+#define STB_WEAK   2
+
+#define STT_NOTYPE  0
+#define STT_OBJECT  1
+#define STT_FUNC    2
+#define STT_SECTION 3
+#define STT_FILE    4
+#define STT_COMMON  5
+#define STT_TLS     6
+
+/* sh_type */
+#define SHT_NULL	0
+#define SHT_PROGBITS	1
+#define SHT_SYMTAB	2
+#define SHT_STRTAB	3
+#define SHT_RELA	4
+#define SHT_HASH	5
+#define SHT_DYNAMIC	6
+#define SHT_NOTE	7
+#define SHT_NOBITS	8
+#define SHT_REL		9
+#define SHT_SHLIB	10
+#define SHT_DYNSYM	11
+#define SHT_NUM		12
+#define SHT_LOPROC	0x70000000
+#define SHT_HIPROC	0x7fffffff
+#define SHT_LOUSER	0x80000000
+#define SHT_HIUSER	0xffffffff
+
+/* sh_flags */
+#define SHF_WRITE	0x1
+#define SHF_ALLOC	0x2
+#define SHF_EXECINSTR	0x4
+#define SHF_MASKPROC	0xf0000000
+
+/* special section indexes */
+#define SHN_UNDEF	0
+#define SHN_LORESERVE	0xff00
+#define SHN_LOPROC	0xff00
+#define SHN_HIPROC	0xff1f
+#define SHN_ABS		0xfff1
+#define SHN_COMMON	0xfff2
+#define SHN_HIRESERVE	0xffff
+
+#define	EI_MAG0		0		/* e_ident[] indexes */
+#define	EI_MAG1		1
+#define	EI_MAG2		2
+#define	EI_MAG3		3
+#define	EI_CLASS	4
+#define	EI_DATA		5
+#define	EI_VERSION	6
+#define	EI_OSABI	7
+#define	EI_PAD		8
+
+#define	ELFMAG0		0x7f		/* EI_MAG */
+#define	ELFMAG1		'E'
+#define	ELFMAG2		'L'
+#define	ELFMAG3		'F'
+#define	ELFMAG		"\177ELF"
+#define	SELFMAG		4
+
+#define	ELFCLASSNONE	0		/* EI_CLASS */
+#define	ELFCLASS32	1
+#define	ELFCLASS64	2
+#define	ELFCLASSNUM	3
+
+#define ELFDATANONE	0		/* e_ident[EI_DATA] */
+#define ELFDATA2LSB	1
+#define ELFDATA2MSB	2
+
+#define EV_NONE		0		/* e_version, EI_VERSION */
+#define EV_CURRENT	1
+#define EV_NUM		2
+
+#define ELFOSABI_NONE	0
+#define ELFOSABI_LINUX	3
+#define ELFOSABI_STANDALONE	255
+
+#ifndef ELF_OSABI
+#define ELF_OSABI ELFOSABI_NONE
+#endif
+
+/* Notes used in ET_CORE */
+#define NT_PRSTATUS	1
+#define NT_PRFPREG	2
+#define NT_PRPSINFO	3
+#define NT_TASKSTRUCT	4
+#define NT_AUXV		6
+#define NT_PRXFPREG     0x46e62b7f      /* copied from gdb5.1/include/elf/common.h */
+
+#endif /* _LINUX_ELF_CONST_H */
===================================================================
--- /dev/null
+++ b/include/linux/elf-decl.h
@@ -0,0 +1,48 @@
+#ifndef _LINUX_ELF_DECL_H
+#define _LINUX_ELF_DECL_H
+
+#include <linux/types.h>
+
+/* 32-bit ELF base types. */
+typedef __u32	Elf32_Addr;
+typedef __u16	Elf32_Half;
+typedef __u32	Elf32_Off;
+typedef __s32	Elf32_Sword;
+typedef __u32	Elf32_Word;
+
+/* 64-bit ELF base types. */
+typedef __u64	Elf64_Addr;
+typedef __u16	Elf64_Half;
+typedef __s16	Elf64_SHalf;
+typedef __u64	Elf64_Off;
+typedef __s32	Elf64_Sword;
+typedef __u32	Elf64_Word;
+typedef __u64	Elf64_Xword;
+typedef __s64	Elf64_Sxword;
+
+typedef struct Elf32_Dyn Elf32_Dyn;
+typedef struct Elf64_Dyn Elf64_Dyn;
+
+typedef struct Elf32_Rel Elf32_Rel;
+typedef struct Elf64_Rel Elf64_Rel;
+
+typedef struct Elf32_Rela Elf32_Rela;
+typedef struct Elf64_Rela Elf64_Rela;
+
+typedef struct Elf32_Sym Elf32_Sym;
+typedef struct Elf64_Sym Elf64_Sym;
+
+typedef struct Elf32_Ehdr Elf32_Ehdr;
+typedef struct Elf64_Ehdr Elf64_Ehdr;
+
+typedef struct Elf32_Phdr Elf32_Phdr;
+typedef struct Elf64_Phdr Elf64_Phdr;
+
+typedef struct Elf32_Shdr Elf32_Shdr;
+typedef struct Elf64_Shdr Elf64_Shdr;
+
+typedef struct Elf32_Nhdr Elf32_Nhdr;
+typedef struct Elf64_Nhdr Elf64_Nhdr;
+
+
+#endif /* _LINUX_ELF_DECL_H */
===================================================================
--- /dev/null
+++ b/include/linux/elf-defn.h
@@ -0,0 +1,174 @@
+#ifndef _LINUX_ELF_DEFN_H
+#define _LINUX_ELF_DEFN_H
+
+#include <linux/elf-decl.h>
+#include <linux/elf-const.h>
+
+#define ELF_ST_BIND(x)		((x) >> 4)
+#define ELF_ST_TYPE(x)		(((unsigned int) x) & 0xf)
+#define ELF32_ST_BIND(x)	ELF_ST_BIND(x)
+#define ELF32_ST_TYPE(x)	ELF_ST_TYPE(x)
+#define ELF64_ST_BIND(x)	ELF_ST_BIND(x)
+#define ELF64_ST_TYPE(x)	ELF_ST_TYPE(x)
+
+struct Elf32_Dyn {
+  Elf32_Sword d_tag;
+  union{
+    Elf32_Sword	d_val;
+    Elf32_Addr	d_ptr;
+  } d_un;
+};
+
+struct  Elf64_Dyn {
+  Elf64_Sxword d_tag;		/* entry tag value */
+  union {
+    Elf64_Xword d_val;
+    Elf64_Addr d_ptr;
+  } d_un;
+};
+
+/* The following are used with relocations */
+#define ELF32_R_SYM(x) ((x) >> 8)
+#define ELF32_R_TYPE(x) ((x) & 0xff)
+
+#define ELF64_R_SYM(i)			((i) >> 32)
+#define ELF64_R_TYPE(i)			((i) & 0xffffffff)
+
+struct Elf32_Rel {
+  Elf32_Addr	r_offset;
+  Elf32_Word	r_info;
+};
+
+struct Elf64_Rel {
+  Elf64_Addr r_offset;	/* Location at which to apply the action */
+  Elf64_Xword r_info;	/* index and type of relocation */
+};
+
+struct Elf32_Rela {
+  Elf32_Addr	r_offset;
+  Elf32_Word	r_info;
+  Elf32_Sword	r_addend;
+};
+
+struct Elf64_Rela {
+  Elf64_Addr r_offset;	/* Location at which to apply the action */
+  Elf64_Xword r_info;	/* index and type of relocation */
+  Elf64_Sxword r_addend;	/* Constant addend used to compute value */
+};
+
+struct Elf32_Sym {
+  Elf32_Word	st_name;
+  Elf32_Addr	st_value;
+  Elf32_Word	st_size;
+  unsigned char	st_info;
+  unsigned char	st_other;
+  Elf32_Half	st_shndx;
+};
+
+struct Elf64_Sym {
+  Elf64_Word st_name;		/* Symbol name, index in string tbl */
+  unsigned char	st_info;	/* Type and binding attributes */
+  unsigned char	st_other;	/* No defined meaning, 0 */
+  Elf64_Half st_shndx;		/* Associated section index */
+  Elf64_Addr st_value;		/* Value of the symbol */
+  Elf64_Xword st_size;		/* Associated symbol size */
+};
+
+struct Elf32_Ehdr {
+  unsigned char	e_ident[EI_NIDENT];
+  Elf32_Half	e_type;
+  Elf32_Half	e_machine;
+  Elf32_Word	e_version;
+  Elf32_Addr	e_entry;  /* Entry point */
+  Elf32_Off	e_phoff;
+  Elf32_Off	e_shoff;
+  Elf32_Word	e_flags;
+  Elf32_Half	e_ehsize;
+  Elf32_Half	e_phentsize;
+  Elf32_Half	e_phnum;
+  Elf32_Half	e_shentsize;
+  Elf32_Half	e_shnum;
+  Elf32_Half	e_shstrndx;
+};
+
+struct Elf64_Ehdr {
+  unsigned char	e_ident[EI_NIDENT];	/* ELF "magic number" */
+  Elf64_Half e_type;
+  Elf64_Half e_machine;
+  Elf64_Word e_version;
+  Elf64_Addr e_entry;		/* Entry point virtual address */
+  Elf64_Off e_phoff;		/* Program header table file offset */
+  Elf64_Off e_shoff;		/* Section header table file offset */
+  Elf64_Word e_flags;
+  Elf64_Half e_ehsize;
+  Elf64_Half e_phentsize;
+  Elf64_Half e_phnum;
+  Elf64_Half e_shentsize;
+  Elf64_Half e_shnum;
+  Elf64_Half e_shstrndx;
+};
+
+struct Elf32_Phdr {
+  Elf32_Word	p_type;
+  Elf32_Off	p_offset;
+  Elf32_Addr	p_vaddr;
+  Elf32_Addr	p_paddr;
+  Elf32_Word	p_filesz;
+  Elf32_Word	p_memsz;
+  Elf32_Word	p_flags;
+  Elf32_Word	p_align;
+};
+
+struct Elf64_Phdr {
+  Elf64_Word p_type;
+  Elf64_Word p_flags;
+  Elf64_Off p_offset;		/* Segment file offset */
+  Elf64_Addr p_vaddr;		/* Segment virtual address */
+  Elf64_Addr p_paddr;		/* Segment physical address */
+  Elf64_Xword p_filesz;		/* Segment size in file */
+  Elf64_Xword p_memsz;		/* Segment size in memory */
+  Elf64_Xword p_align;		/* Segment alignment, file & memory */
+};
+
+struct Elf32_Shdr {
+  Elf32_Word	sh_name;
+  Elf32_Word	sh_type;
+  Elf32_Word	sh_flags;
+  Elf32_Addr	sh_addr;
+  Elf32_Off	sh_offset;
+  Elf32_Word	sh_size;
+  Elf32_Word	sh_link;
+  Elf32_Word	sh_info;
+  Elf32_Word	sh_addralign;
+  Elf32_Word	sh_entsize;
+};
+
+struct Elf64_Shdr {
+  Elf64_Word sh_name;		/* Section name, index in string tbl */
+  Elf64_Word sh_type;		/* Type of section */
+  Elf64_Xword sh_flags;		/* Miscellaneous section attributes */
+  Elf64_Addr sh_addr;		/* Section virtual addr at execution */
+  Elf64_Off sh_offset;		/* Section file offset */
+  Elf64_Xword sh_size;		/* Size of section in bytes */
+  Elf64_Word sh_link;		/* Index of another section */
+  Elf64_Word sh_info;		/* Additional section information */
+  Elf64_Xword sh_addralign;	/* Section alignment */
+  Elf64_Xword sh_entsize;	/* Entry size if section holds table */
+};
+
+/* Note header in a PT_NOTE section */
+struct Elf32_Nhdr {
+  Elf32_Word	n_namesz;	/* Name size */
+  Elf32_Word	n_descsz;	/* Content size */
+  Elf32_Word	n_type;		/* Content type */
+};
+
+/* Note header in a PT_NOTE section */
+struct Elf64_Nhdr {
+  Elf64_Word n_namesz;	/* Name size */
+  Elf64_Word n_descsz;	/* Content size */
+  Elf64_Word n_type;	/* Content type */
+};
+
+
+#endif	/* _LINUX_ELF_DEFN_H */
===================================================================
--- a/include/linux/elf-em.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef _LINUX_ELF_EM_H
-#define _LINUX_ELF_EM_H
-
-/* These constants define the various ELF target machines */
-#define EM_NONE		0
-#define EM_M32		1
-#define EM_SPARC	2
-#define EM_386		3
-#define EM_68K		4
-#define EM_88K		5
-#define EM_486		6	/* Perhaps disused */
-#define EM_860		7
-#define EM_MIPS		8	/* MIPS R3000 (officially, big-endian only) */
-				/* Next two are historical and binaries and
-				   modules of these types will be rejected by
-				   Linux.  */
-#define EM_MIPS_RS3_LE	10	/* MIPS R3000 little-endian */
-#define EM_MIPS_RS4_BE	10	/* MIPS R4000 big-endian */
-
-#define EM_PARISC	15	/* HPPA */
-#define EM_SPARC32PLUS	18	/* Sun's "v8plus" */
-#define EM_PPC		20	/* PowerPC */
-#define EM_PPC64	21       /* PowerPC64 */
-#define EM_SH		42	/* SuperH */
-#define EM_SPARCV9	43	/* SPARC v9 64-bit */
-#define EM_IA_64	50	/* HP/Intel IA-64 */
-#define EM_X86_64	62	/* AMD x86-64 */
-#define EM_S390		22	/* IBM S/390 */
-#define EM_CRIS		76	/* Axis Communications 32-bit embedded processor */
-#define EM_V850		87	/* NEC v850 */
-#define EM_M32R		88	/* Renesas M32R */
-#define EM_H8_300	46	/* Renesas H8/300,300H,H8S */
-#define EM_BLACKFIN     106     /* ADI Blackfin Processor */
-#define EM_FRV		0x5441	/* Fujitsu FR-V */
-#define EM_AVR32	0x18ad	/* Atmel AVR32 */
-
-/*
- * This is an interim value that we will use until the committee comes
- * up with a final number.
- */
-#define EM_ALPHA	0x9026
-
-/* Bogus old v850 magic number, used by old tools. */
-#define EM_CYGNUS_V850	0x9080
-/* Bogus old m32r magic number, used by old tools. */
-#define EM_CYGNUS_M32R	0x9041
-/* This is the old interim value for S/390 architecture */
-#define EM_S390_OLD	0xA390
-
-
-#endif /* _LINUX_ELF_EM_H */
===================================================================
--- a/include/linux/elf.h
+++ b/include/linux/elf.h
@@ -1,12 +1,27 @@
 #ifndef _LINUX_ELF_H
 #define _LINUX_ELF_H
 
-#include <linux/types.h>
-#include <linux/auxvec.h>
-#include <linux/elf-em.h>
+#include <linux/elf-const.h>
+#include <linux/elf-defn.h>
 #include <asm/elf.h>
 
-struct file;
+#if ELF_CLASS == ELFCLASS32
+
+extern Elf32_Dyn _DYNAMIC [];
+#define elfhdr		Elf32_Ehdr
+#define elf_phdr	Elf32_Phdr
+#define elf_note	Elf32_Nhdr
+#define elf_addr_t	Elf32_Off
+
+#else
+
+extern Elf64_Dyn _DYNAMIC [];
+#define elfhdr		Elf64_Ehdr
+#define elf_phdr	Elf64_Phdr
+#define elf_note	Elf64_Nhdr
+#define elf_addr_t	Elf64_Off
+
+#endif
 
 #ifndef elf_read_implies_exec
   /* Executables for which elf_read_implies_exec() returns TRUE will
@@ -15,381 +30,9 @@ struct file;
 # define elf_read_implies_exec(ex, have_pt_gnu_stack)	0
 #endif
 
-/* 32-bit ELF base types. */
-typedef __u32	Elf32_Addr;
-typedef __u16	Elf32_Half;
-typedef __u32	Elf32_Off;
-typedef __s32	Elf32_Sword;
-typedef __u32	Elf32_Word;
+#ifndef ARCH_HAVE_EXTRA_ELF_NOTES
+struct file;
 
-/* 64-bit ELF base types. */
-typedef __u64	Elf64_Addr;
-typedef __u16	Elf64_Half;
-typedef __s16	Elf64_SHalf;
-typedef __u64	Elf64_Off;
-typedef __s32	Elf64_Sword;
-typedef __u32	Elf64_Word;
-typedef __u64	Elf64_Xword;
-typedef __s64	Elf64_Sxword;
-
-/* These constants are for the segment types stored in the image headers */
-#define PT_NULL    0
-#define PT_LOAD    1
-#define PT_DYNAMIC 2
-#define PT_INTERP  3
-#define PT_NOTE    4
-#define PT_SHLIB   5
-#define PT_PHDR    6
-#define PT_TLS     7               /* Thread local storage segment */
-#define PT_LOOS    0x60000000      /* OS-specific */
-#define PT_HIOS    0x6fffffff      /* OS-specific */
-#define PT_LOPROC  0x70000000
-#define PT_HIPROC  0x7fffffff
-#define PT_GNU_EH_FRAME		0x6474e550
-
-#define PT_GNU_STACK	(PT_LOOS + 0x474e551)
-
-/* These constants define the different elf file types */
-#define ET_NONE   0
-#define ET_REL    1
-#define ET_EXEC   2
-#define ET_DYN    3
-#define ET_CORE   4
-#define ET_LOPROC 0xff00
-#define ET_HIPROC 0xffff
-
-/* This is the info that is needed to parse the dynamic section of the file */
-#define DT_NULL		0
-#define DT_NEEDED	1
-#define DT_PLTRELSZ	2
-#define DT_PLTGOT	3
-#define DT_HASH		4
-#define DT_STRTAB	5
-#define DT_SYMTAB	6
-#define DT_RELA		7
-#define DT_RELASZ	8
-#define DT_RELAENT	9
-#define DT_STRSZ	10
-#define DT_SYMENT	11
-#define DT_INIT		12
-#define DT_FINI		13
-#define DT_SONAME	14
-#define DT_RPATH 	15
-#define DT_SYMBOLIC	16
-#define DT_REL	        17
-#define DT_RELSZ	18
-#define DT_RELENT	19
-#define DT_PLTREL	20
-#define DT_DEBUG	21
-#define DT_TEXTREL	22
-#define DT_JMPREL	23
-#define DT_ENCODING	32
-#define OLD_DT_LOOS	0x60000000
-#define DT_LOOS		0x6000000d
-#define DT_HIOS		0x6ffff000
-#define DT_VALRNGLO	0x6ffffd00
-#define DT_VALRNGHI	0x6ffffdff
-#define DT_ADDRRNGLO	0x6ffffe00
-#define DT_ADDRRNGHI	0x6ffffeff
-#define DT_VERSYM	0x6ffffff0
-#define DT_RELACOUNT	0x6ffffff9
-#define DT_RELCOUNT	0x6ffffffa
-#define DT_FLAGS_1	0x6ffffffb
-#define DT_VERDEF	0x6ffffffc
-#define	DT_VERDEFNUM	0x6ffffffd
-#define DT_VERNEED	0x6ffffffe
-#define	DT_VERNEEDNUM	0x6fffffff
-#define OLD_DT_HIOS     0x6fffffff
-#define DT_LOPROC	0x70000000
-#define DT_HIPROC	0x7fffffff
-
-/* This info is needed when parsing the symbol table */
-#define STB_LOCAL  0
-#define STB_GLOBAL 1
-#define STB_WEAK   2
-
-#define STT_NOTYPE  0
-#define STT_OBJECT  1
-#define STT_FUNC    2
-#define STT_SECTION 3
-#define STT_FILE    4
-#define STT_COMMON  5
-#define STT_TLS     6
-
-#define ELF_ST_BIND(x)		((x) >> 4)
-#define ELF_ST_TYPE(x)		(((unsigned int) x) & 0xf)
-#define ELF32_ST_BIND(x)	ELF_ST_BIND(x)
-#define ELF32_ST_TYPE(x)	ELF_ST_TYPE(x)
-#define ELF64_ST_BIND(x)	ELF_ST_BIND(x)
-#define ELF64_ST_TYPE(x)	ELF_ST_TYPE(x)
-
-typedef struct dynamic{
-  Elf32_Sword d_tag;
-  union{
-    Elf32_Sword	d_val;
-    Elf32_Addr	d_ptr;
-  } d_un;
-} Elf32_Dyn;
-
-typedef struct {
-  Elf64_Sxword d_tag;		/* entry tag value */
-  union {
-    Elf64_Xword d_val;
-    Elf64_Addr d_ptr;
-  } d_un;
-} Elf64_Dyn;
-
-/* The following are used with relocations */
-#define ELF32_R_SYM(x) ((x) >> 8)
-#define ELF32_R_TYPE(x) ((x) & 0xff)
-
-#define ELF64_R_SYM(i)			((i) >> 32)
-#define ELF64_R_TYPE(i)			((i) & 0xffffffff)
-
-typedef struct elf32_rel {
-  Elf32_Addr	r_offset;
-  Elf32_Word	r_info;
-} Elf32_Rel;
-
-typedef struct elf64_rel {
-  Elf64_Addr r_offset;	/* Location at which to apply the action */
-  Elf64_Xword r_info;	/* index and type of relocation */
-} Elf64_Rel;
-
-typedef struct elf32_rela{
-  Elf32_Addr	r_offset;
-  Elf32_Word	r_info;
-  Elf32_Sword	r_addend;
-} Elf32_Rela;
-
-typedef struct elf64_rela {
-  Elf64_Addr r_offset;	/* Location at which to apply the action */
-  Elf64_Xword r_info;	/* index and type of relocation */
-  Elf64_Sxword r_addend;	/* Constant addend used to compute value */
-} Elf64_Rela;
-
-typedef struct elf32_sym{
-  Elf32_Word	st_name;
-  Elf32_Addr	st_value;
-  Elf32_Word	st_size;
-  unsigned char	st_info;
-  unsigned char	st_other;
-  Elf32_Half	st_shndx;
-} Elf32_Sym;
-
-typedef struct elf64_sym {
-  Elf64_Word st_name;		/* Symbol name, index in string tbl */
-  unsigned char	st_info;	/* Type and binding attributes */
-  unsigned char	st_other;	/* No defined meaning, 0 */
-  Elf64_Half st_shndx;		/* Associated section index */
-  Elf64_Addr st_value;		/* Value of the symbol */
-  Elf64_Xword st_size;		/* Associated symbol size */
-} Elf64_Sym;
-
-
-#define EI_NIDENT	16
-
-typedef struct elf32_hdr{
-  unsigned char	e_ident[EI_NIDENT];
-  Elf32_Half	e_type;
-  Elf32_Half	e_machine;
-  Elf32_Word	e_version;
-  Elf32_Addr	e_entry;  /* Entry point */
-  Elf32_Off	e_phoff;
-  Elf32_Off	e_shoff;
-  Elf32_Word	e_flags;
-  Elf32_Half	e_ehsize;
-  Elf32_Half	e_phentsize;
-  Elf32_Half	e_phnum;
-  Elf32_Half	e_shentsize;
-  Elf32_Half	e_shnum;
-  Elf32_Half	e_shstrndx;
-} Elf32_Ehdr;
-
-typedef struct elf64_hdr {
-  unsigned char	e_ident[16];		/* ELF "magic number" */
-  Elf64_Half e_type;
-  Elf64_Half e_machine;
-  Elf64_Word e_version;
-  Elf64_Addr e_entry;		/* Entry point virtual address */
-  Elf64_Off e_phoff;		/* Program header table file offset */
-  Elf64_Off e_shoff;		/* Section header table file offset */
-  Elf64_Word e_flags;
-  Elf64_Half e_ehsize;
-  Elf64_Half e_phentsize;
-  Elf64_Half e_phnum;
-  Elf64_Half e_shentsize;
-  Elf64_Half e_shnum;
-  Elf64_Half e_shstrndx;
-} Elf64_Ehdr;
-
-/* These constants define the permissions on sections in the program
-   header, p_flags. */
-#define PF_R		0x4
-#define PF_W		0x2
-#define PF_X		0x1
-
-typedef struct elf32_phdr{
-  Elf32_Word	p_type;
-  Elf32_Off	p_offset;
-  Elf32_Addr	p_vaddr;
-  Elf32_Addr	p_paddr;
-  Elf32_Word	p_filesz;
-  Elf32_Word	p_memsz;
-  Elf32_Word	p_flags;
-  Elf32_Word	p_align;
-} Elf32_Phdr;
-
-typedef struct elf64_phdr {
-  Elf64_Word p_type;
-  Elf64_Word p_flags;
-  Elf64_Off p_offset;		/* Segment file offset */
-  Elf64_Addr p_vaddr;		/* Segment virtual address */
-  Elf64_Addr p_paddr;		/* Segment physical address */
-  Elf64_Xword p_filesz;		/* Segment size in file */
-  Elf64_Xword p_memsz;		/* Segment size in memory */
-  Elf64_Xword p_align;		/* Segment alignment, file & memory */
-} Elf64_Phdr;
-
-/* sh_type */
-#define SHT_NULL	0
-#define SHT_PROGBITS	1
-#define SHT_SYMTAB	2
-#define SHT_STRTAB	3
-#define SHT_RELA	4
-#define SHT_HASH	5
-#define SHT_DYNAMIC	6
-#define SHT_NOTE	7
-#define SHT_NOBITS	8
-#define SHT_REL		9
-#define SHT_SHLIB	10
-#define SHT_DYNSYM	11
-#define SHT_NUM		12
-#define SHT_LOPROC	0x70000000
-#define SHT_HIPROC	0x7fffffff
-#define SHT_LOUSER	0x80000000
-#define SHT_HIUSER	0xffffffff
-
-/* sh_flags */
-#define SHF_WRITE	0x1
-#define SHF_ALLOC	0x2
-#define SHF_EXECINSTR	0x4
-#define SHF_MASKPROC	0xf0000000
-
-/* special section indexes */
-#define SHN_UNDEF	0
-#define SHN_LORESERVE	0xff00
-#define SHN_LOPROC	0xff00
-#define SHN_HIPROC	0xff1f
-#define SHN_ABS		0xfff1
-#define SHN_COMMON	0xfff2
-#define SHN_HIRESERVE	0xffff
- 
-typedef struct {
-  Elf32_Word	sh_name;
-  Elf32_Word	sh_type;
-  Elf32_Word	sh_flags;
-  Elf32_Addr	sh_addr;
-  Elf32_Off	sh_offset;
-  Elf32_Word	sh_size;
-  Elf32_Word	sh_link;
-  Elf32_Word	sh_info;
-  Elf32_Word	sh_addralign;
-  Elf32_Word	sh_entsize;
-} Elf32_Shdr;
-
-typedef struct elf64_shdr {
-  Elf64_Word sh_name;		/* Section name, index in string tbl */
-  Elf64_Word sh_type;		/* Type of section */
-  Elf64_Xword sh_flags;		/* Miscellaneous section attributes */
-  Elf64_Addr sh_addr;		/* Section virtual addr at execution */
-  Elf64_Off sh_offset;		/* Section file offset */
-  Elf64_Xword sh_size;		/* Size of section in bytes */
-  Elf64_Word sh_link;		/* Index of another section */
-  Elf64_Word sh_info;		/* Additional section information */
-  Elf64_Xword sh_addralign;	/* Section alignment */
-  Elf64_Xword sh_entsize;	/* Entry size if section holds table */
-} Elf64_Shdr;
-
-#define	EI_MAG0		0		/* e_ident[] indexes */
-#define	EI_MAG1		1
-#define	EI_MAG2		2
-#define	EI_MAG3		3
-#define	EI_CLASS	4
-#define	EI_DATA		5
-#define	EI_VERSION	6
-#define	EI_OSABI	7
-#define	EI_PAD		8
-
-#define	ELFMAG0		0x7f		/* EI_MAG */
-#define	ELFMAG1		'E'
-#define	ELFMAG2		'L'
-#define	ELFMAG3		'F'
-#define	ELFMAG		"\177ELF"
-#define	SELFMAG		4
-
-#define	ELFCLASSNONE	0		/* EI_CLASS */
-#define	ELFCLASS32	1
-#define	ELFCLASS64	2
-#define	ELFCLASSNUM	3
-
-#define ELFDATANONE	0		/* e_ident[EI_DATA] */
-#define ELFDATA2LSB	1
-#define ELFDATA2MSB	2
-
-#define EV_NONE		0		/* e_version, EI_VERSION */
-#define EV_CURRENT	1
-#define EV_NUM		2
-
-#define ELFOSABI_NONE	0
-#define ELFOSABI_LINUX	3
-
-#ifndef ELF_OSABI
-#define ELF_OSABI ELFOSABI_NONE
-#endif
-
-/* Notes used in ET_CORE */
-#define NT_PRSTATUS	1
-#define NT_PRFPREG	2
-#define NT_PRPSINFO	3
-#define NT_TASKSTRUCT	4
-#define NT_AUXV		6
-#define NT_PRXFPREG     0x46e62b7f      /* copied from gdb5.1/include/elf/common.h */
-
-
-/* Note header in a PT_NOTE section */
-typedef struct elf32_note {
-  Elf32_Word	n_namesz;	/* Name size */
-  Elf32_Word	n_descsz;	/* Content size */
-  Elf32_Word	n_type;		/* Content type */
-} Elf32_Nhdr;
-
-/* Note header in a PT_NOTE section */
-typedef struct elf64_note {
-  Elf64_Word n_namesz;	/* Name size */
-  Elf64_Word n_descsz;	/* Content size */
-  Elf64_Word n_type;	/* Content type */
-} Elf64_Nhdr;
-
-#if ELF_CLASS == ELFCLASS32
-
-extern Elf32_Dyn _DYNAMIC [];
-#define elfhdr		elf32_hdr
-#define elf_phdr	elf32_phdr
-#define elf_note	elf32_note
-#define elf_addr_t	Elf32_Off
-
-#else
-
-extern Elf64_Dyn _DYNAMIC [];
-#define elfhdr		elf64_hdr
-#define elf_phdr	elf64_phdr
-#define elf_note	elf64_note
-#define elf_addr_t	Elf64_Off
-
-#endif
-
-#ifndef ARCH_HAVE_EXTRA_ELF_NOTES
 static inline int arch_notes_size(void) { return 0; }
 static inline void arch_write_notes(struct file *file) { }
 
===================================================================
--- a/include/linux/elfnote.h
+++ b/include/linux/elfnote.h
@@ -58,7 +58,8 @@ 4484:.balign 4				;	\
 	ELFNOTE_END
 
 #else	/* !__ASSEMBLER__ */
-#include <linux/elf.h>
+#include <linux/elf-defn.h>
+#include <asm/elf-defines.h>
 /*
  * Use an anonymous structure which matches the shape of
  * Elf{32,64}_Nhdr, but includes the name and desc data.  The size and
@@ -67,15 +68,15 @@ 4484:.balign 4				;	\
  * only define one note per line, since __LINE__ is used to generate
  * unique symbols.
  */
-#define _ELFNOTE_PASTE(a,b)	a##b
-#define _ELFNOTE(size, name, unique, type, desc)			\
+#define __ELFNOTE_PASTE(a,b)	a##b
+#define __ELFNOTE(size, name, unique, type, desc)			\
 	static const struct {						\
-		struct elf##size##_note _nhdr;				\
+		struct Elf##size##_Nhdr _nhdr;				\
 		unsigned char _name[sizeof(name)]			\
-		__attribute__((aligned(sizeof(Elf##size##_Word))));	\
+			__attribute__((aligned(sizeof(Elf##size##_Word)))); \
 		typeof(desc) _desc					\
-			     __attribute__((aligned(sizeof(Elf##size##_Word)))); \
-	} _ELFNOTE_PASTE(_note_, unique)				\
+			__attribute__((aligned(sizeof(Elf##size##_Word)))); \
+	} __ELFNOTE_PASTE(_note_, unique)				\
 		__attribute_used__					\
 		__attribute__((section(".note." name),			\
 			       aligned(sizeof(Elf##size##_Word)),	\
@@ -88,11 +89,18 @@ 4484:.balign 4				;	\
 		name,							\
 		desc							\
 	}
-#define ELFNOTE(size, name, type, desc)		\
-	_ELFNOTE(size, name, __LINE__, type, desc)
 
-#define ELFNOTE32(name, type, desc) ELFNOTE(32, name, type, desc)
-#define ELFNOTE64(name, type, desc) ELFNOTE(64, name, type, desc)
+#define ELFNOTE32(name, type, desc) __ELFNOTE(32, name, __LINE__, type, desc)
+#define ELFNOTE64(name, type, desc) __ELFNOTE(64, name, __LINE__, type, desc)
+
+#if ELF_CLASS == ELFCLASS32
+#define ELFNOTE(name, type, desc)	ELFNOTE32(name, type, desc)
+#elif ELF_CLASS == ELFCLASS64
+#define ELFNOTE(name, type, desc)	ELFNOTE64(name, type, desc)
+#else
+#error Define ELFNOTE for this ELF_CLASS
+#endif
+
 #endif	/* __ASSEMBLER__ */
 
 #endif /* _LINUX_ELFNOTE_H */
===================================================================
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -11,7 +11,6 @@
 #include <linux/compiler.h>
 #include <linux/cache.h>
 #include <linux/kmod.h>
-#include <linux/elf.h>
 #include <linux/stringify.h>
 #include <linux/kobject.h>
 #include <linux/moduleparam.h>
===================================================================
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -50,6 +50,7 @@
 
 #include <asm/uaccess.h>
 #include <asm/processor.h>
+#include <asm/elf.h>
 
 extern int proc_nr_files(ctl_table *table, int write, struct file *filp,
                      void __user *buffer, size_t *lenp, loff_t *ppos);
===================================================================
--- a/lib/bug.c
+++ b/lib/bug.c
@@ -38,6 +38,7 @@
 #include <linux/list.h>
 #include <linux/module.h>
 #include <linux/bug.h>
+#include <linux/elf.h>
 
 extern const struct bug_entry __start___bug_table[], __stop___bug_table[];
 

-- 


       reply	other threads:[~2007-06-21  0:43 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20070620230854.246399397@goop.org>
2007-06-20 23:08 ` Jeremy Fitzhardinge [this message]
2007-06-21  8:20   ` [PATCH] cross-architecture ELF clean up ian
2007-06-21 15:06     ` Jeremy Fitzhardinge
2007-06-21 16:49   ` Chris Zankel
2007-06-21 18:31     ` Jeremy Fitzhardinge
2007-06-25  9:02   ` David Woodhouse
2007-06-25 12:43     ` Jeremy Fitzhardinge
2007-06-25 13:40     ` Roman Zippel
2007-06-25 13:56       ` Clemens Koller
2007-06-25 14:06         ` Roman Zippel
2007-06-25 13:37   ` Roman Zippel
2007-06-26 19:29     ` Jeremy Fitzhardinge
2007-06-27 23:25       ` Roman Zippel
2007-06-28 15:45         ` Jeremy Fitzhardinge
2007-06-28 21:48           ` Roman Zippel
2007-06-29 14:53             ` Jeremy Fitzhardinge
2007-06-29 18:12               ` Sam Ravnborg
2007-07-01 16:23                 ` Jeremy Fitzhardinge
2007-06-25 15:18   ` Roman Zippel
2007-06-26 19:28     ` Jeremy Fitzhardinge
2007-06-29  4:13   ` Paul Mackerras
2007-06-29  5:31     ` Jeremy Fitzhardinge
2007-06-29  4:48   ` Paul Mackerras
2007-06-29  5:31     ` Jeremy Fitzhardinge

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=20070620230902.387008536@goop.org \
    --to=jeremy@goop.org \
    --cc=ak@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=aubrey.li@analog.com \
    --cc=chris@zankel.net \
    --cc=davem@davemloft.net \
    --cc=dhowells@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=geert@linux-m68k.org \
    --cc=hskinnemoen@atmel.com \
    --cc=lethal@linux-sh.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthew@wil.cx \
    --cc=paulus@samba.org \
    --cc=ralf@linux-mips.org \
    --cc=rmk@arm.linux.org.uk \
    --cc=rth@twiddle.net \
    --cc=schwidefsky@de.ibm.com \
    --cc=spyro@f2s.com \
    --cc=starvik@axis.com \
    --cc=tony.luck@intel.com \
    --cc=uclinux-v850@lsi.nec.co.jp \
    --cc=ysato@users.sourceforge.jp \
    /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.