Module Name:    src
Committed By:   thorpej
Date:           Sat Dec 19 09:02:46 UTC 2009

Modified Files:
        src/sys/sys: exec_elf.h

Log Message:
Add some definitions, from FreeBSD.


To generate a diff of this commit:
cvs rdiff -u -r1.98 -r1.99 src/sys/sys/exec_elf.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/sys/exec_elf.h
diff -u src/sys/sys/exec_elf.h:1.98 src/sys/sys/exec_elf.h:1.99
--- src/sys/sys/exec_elf.h:1.98	Tue Nov 24 16:55:11 2009
+++ src/sys/sys/exec_elf.h	Sat Dec 19 09:02:46 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: exec_elf.h,v 1.98 2009/11/24 16:55:11 pooka Exp $	*/
+/*	$NetBSD: exec_elf.h,v 1.99 2009/12/19 09:02:46 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1994 The NetBSD Foundation, Inc.
@@ -73,6 +73,8 @@
 #define	ELF32_FSZ_WORD	4
 typedef	uint16_t	Elf32_Half;
 #define	ELF32_FSZ_HALF	2
+typedef	uint64_t	Elf32_Lword;
+#define	ELF32_FSZ_LWORD	8
 
 typedef	uint64_t	Elf64_Addr;
 #define	ELF64_FSZ_ADDR	8
@@ -92,9 +94,11 @@
 #endif /* ELF64_FSZ_WORD */
 
 typedef	int64_t		Elf64_Sxword;
-#define	ELF64_FSZ_XWORD	8
+#define	ELF64_FSZ_SXWORD 8
 typedef	uint64_t	Elf64_Xword;
 #define	ELF64_FSZ_XWORD	8
+typedef	uint64_t	Elf64_Lword;
+#define	ELF64_FSZ_LWORD	8
 typedef	uint32_t	Elf64_Half;
 #define	ELF64_FSZ_HALF	4
 typedef	uint16_t	Elf64_Quarter;
@@ -190,10 +194,16 @@
 #define ELFOSABI_TRU64		10	/* TRU64 UNIX */
 #define ELFOSABI_MODESTO	11	/* Novell Modesto */
 #define ELFOSABI_OPENBSD	12	/* OpenBSD */
+#define	ELFOSABI_OPENVMS	13	/* OpenVMS */
+#define	ELFOSABI_NSK		14	/* HP Non-Stop Kernel */
+#define	ELFOSABI_AROS		15	/* Amiga Research OS */
 /* Unofficial OSABIs follow */
 #define ELFOSABI_ARM		97	/* ARM */
 #define	ELFOSABI_STANDALONE	255	/* Standalone (embedded) application */
 
+#define	ELFOSABI_NONE		ELFOSABI_SYSV
+#define	ELFOSABI_AIX		ELFOSABI_MONTEREY
+
 /* e_type */
 #define	ET_NONE		0	/* No file type */
 #define	ET_REL		1	/* Relocatable file */
@@ -229,6 +239,7 @@
 #define	EM_PPC		20	/* PowerPC */
 #define	EM_PPC64	21	/* 64-bit PowerPC */
 			/* 22-35 - Reserved */
+#define	EM_S390		22	/* System/390 XXX reserved */
 #define	EM_V800		36	/* NEC V800 */
 #define	EM_FR20		37	/* Fujitsu FR20 */
 #define	EM_RH32		38	/* TRW RH-32 */
@@ -288,7 +299,22 @@
 #define	EM_OPENRISC	92	/* OpenRISC 32-bit embedded processor */
 #define	EM_ARC_A5	93	/* ARC Cores Tangent-A5 */
 #define	EM_XTENSA	94	/* Tensilica Xtensa Architecture */
+#define	EM_VIDEOCORE	95	/* Alphamosaic VideoCore processor */
+#define	EM_TMM_GPP	96	/* Thompson Multimedia General Purpose Processor */
 #define	EM_NS32K	97	/* National Semiconductor 32000 series */
+#define	EM_TPC		98	/* Tenor Network TPC processor */
+#define	EM_SNP1K	99	/* Trebia SNP 1000 processor */
+#define	EM_ST200	100	/* STMicroelectronics ST200 microcontroller */
+#define	EM_IP2K		101	/* Ubicom IP2xxx microcontroller family */
+#define	EM_MAX		102	/* MAX processor */
+#define	EM_CR		103	/* National Semiconductor CompactRISC micorprocessor */
+#define	EM_F2MC16	104	/* Fujitsu F2MC16 */
+#define	EM_MSP430	105	/* Texas Instruments MSP430 */
+#define	EM_BLACKFIN	106	/* Analog Devices Blackfin DSP */
+#define	EM_SE_C33	107	/* Seiko Epson S1C33 family */
+#define	EM_SEP		108	/* Sharp embedded microprocessor */
+#define	EM_ARCA		109	/* Arca RISC microprocessor */
+#define	EM_UNICORE	110	/* UNICORE from PKU-Unity Ltd. and MPRC Peking University */
 
 /* Unofficial machine types follow */
 #define	EM_AVR32	6317	/* used by NetBSD/avr32 */
@@ -345,6 +371,9 @@
 #define	PF_MASKOS	0x0ff00000	/* Operating system specific values */
 #define	PF_MASKPROC	0xf0000000	/* Processor-specific values */
 
+/* Extended program header index. */
+#define	PN_XNUM		0xffff
+
 /*
  * Section Headers
  */
@@ -387,14 +416,25 @@
 #define	SHT_REL		9		/* Relocation information w/o addend */
 #define	SHT_SHLIB	10		/* Reserved, unspecified semantics */
 #define	SHT_DYNSYM	11		/* Symbol table for dynamic linker */
-#define	SHT_NUM		12
+#define	SHT_INIT_ARRAY	14		/* Initialization function pointers */
+#define	SHT_FINI_ARRAY	15		/* Termination function pointers */
+#define	SHT_PREINIT_ARRAY 16		/* Pre-initialization function ptrs */
+#define	SHT_GROUP	17		/* Section group */
+#define	SHT_SYMTAB_SHNDX 18		/* Section indexes (see SHN_XINDEX) */
+#define	SHT_NUM		19
 
 #define	SHT_LOOS	0x60000000	/* Operating system specific range */
-#define SHT_SUNW_VERDEF	0x6ffffffd	/* Versions defined by file */
-#define SHT_SUNW_VERNEED 0x6ffffffe	/* Versions needed by file */
-#define SHT_SUNW_VERSYM	0x6fffffff	/* Symbol versions */
+#define	SHT_SUNW_move	0x6ffffffa
+#define	SHT_SUNW_syminfo 0x6ffffffc
+#define SHT_SUNW_verdef	0x6ffffffd	/* Versions defined by file */
+#define	SHT_GNU_verdef	SHT_SUNW_verdef
+#define SHT_SUNW_verneed 0x6ffffffe	/* Versions needed by file */
+#define	SHT_GNU_verneed	SHT_SUNW_verneed
+#define SHT_SUNW_versym	0x6fffffff	/* Symbol versions */
+#define	SHT_GNU_versym	SHT_SUNW_versym
 #define	SHT_HIOS	0x6fffffff
 #define	SHT_LOPROC	0x70000000	/* Processor-specific range */
+#define	SHT_AMD64_UNWIND 0x70000001	/* unwind information */
 #define	SHT_HIPROC	0x7fffffff
 #define	SHT_LOUSER	0x80000000	/* Application-specific range */
 #define	SHT_HIUSER	0xffffffff
@@ -462,6 +502,9 @@
 #define	STV_INTERNAL		1	/* not referenced from outside */
 #define	STV_HIDDEN		2	/* not visible, may be used via ptr */
 #define	STV_PROTECTED		3	/* visible, not preemptible */
+#define	STV_EXPORTED		4
+#define	STV_SINGLETON		5
+#define	STV_ELIMINATE		6
 
 /* st_info/st_other utility macros */
 #define	ELF_ST_BIND(info)		((uint32_t)(info) >> 4)
@@ -478,6 +521,7 @@
 #define	SHN_LORESERVE	0xff00		/* Reserved range */
 #define	SHN_ABS		0xfff1		/*  Absolute symbols */
 #define	SHN_COMMON	0xfff2		/*  Common symbols */
+#define	SHN_XINDEX	0xffff		/* Escape -- index stored elsewhere */
 #define	SHN_HIRESERVE	0xffff
 
 #define	SHN_LOPROC	0xff00		/* Processor-specific range */
@@ -526,6 +570,52 @@
 #define	ELF64_R_INFO(sym,type)	(((sym) << 32) + (type))
 
 /*
+ * Move entries
+ */
+typedef struct {
+	Elf32_Lword	m_value;	/* symbol value */
+	Elf32_Word	m_info;		/* size + index */
+	Elf32_Word	m_poffset;	/* symbol offset */
+	Elf32_Half	m_repeat;	/* repeat count */
+	Elf32_Half	m_stride;	/* stride info */
+} Elf32_Move;
+
+#define	ELF32_M_SYM(info)	((info) >> 8)
+#define	ELF32_M_SIZE(info)	(info) & 0xff)
+#define	ELF32_M_INFO(sym, size)	(((sym) << 8) + (unsigned char)(size))
+
+typedef struct {
+	Elf64_Lword	m_value;	/* symbol value */
+	Elf64_Xword	m_info;		/* size + index */
+	Elf64_Xword	m_poffset;	/* symbol offset */
+	Elf64_Half	m_repeat;	/* repeat count */
+	Elf64_Half	m_stride;	/* stride info */
+} Elf64_Move;
+
+#define	ELF64_M_SYM(info)	((info) >> 8)
+#define	ELF64_M_SIZE(info)	(info) & 0xff)
+#define	ELF64_M_INFO(sym, size)	(((sym) << 8) + (unsigned char)(size))
+
+/*
+ * Hardware/software capabilities entry
+ */
+typedef struct {
+	Elf32_Word	c_tag;		/* entry tag value */
+	union {
+	    Elf32_Addr	c_ptr;
+	    Elf32_Word	c_val;
+	} c_un;
+} Elf32_Cap;
+
+typedef struct {
+	Elf64_Xword	c_tag;		/* entry tag value */
+	union {
+	    Elf64_Addr	c_ptr;
+	    Elf64_Xword	c_val;
+	} c_un;
+} Elf64_Cap;
+
+/*
  * Dynamic Section structure array
  */
 typedef struct {
@@ -807,46 +897,6 @@
 #define	ELF64_ST_INFO(bind,type)	ELF_ST_INFO(bind,type)
 #define	ELF64_ST_VISIBILITY(other)	ELF_ST_VISIBILITY(other)
 
-#ifdef _KERNEL
-
-#define ELF_AUX_ENTRIES	14	/* Max size of aux array passed to loader */
-#define ELF32_NO_ADDR	(~(Elf32_Addr)0) /* Indicates addr. not yet filled in */
-#define ELF32_LINK_ADDR	((Elf32_Addr)-2) /* advises to use link address */
-#define ELF64_NO_ADDR	(~(Elf64_Addr)0) /* Indicates addr. not yet filled in */
-#define ELF64_LINK_ADDR	((Elf64_Addr)-2) /* advises to use link address */
-
-#if defined(ELFSIZE) && (ELFSIZE == 64)
-#define ELF_NO_ADDR	ELF64_NO_ADDR
-#define ELF_LINK_ADDR	ELF64_LINK_ADDR
-#elif defined(ELFSIZE) && (ELFSIZE == 32)
-#define ELF_NO_ADDR	ELF32_NO_ADDR
-#define ELF_LINK_ADDR	ELF32_LINK_ADDR
-#endif
-
-#ifndef ELF32_EHDR_FLAGS_OK
-#define	ELF32_EHDR_FLAGS_OK(eh)	1
-#endif
-
-#ifndef ELF64_EHDR_FLAGS_OK
-#define	ELF64_EHDR_FLAGS_OK(eh)	1
-#endif
-
-#if defined(ELFSIZE) && (ELFSIZE == 64)
-#define	ELF_EHDR_FLAGS_OK(eh)	ELF64_EHDR_FLAGS_OK(eh)
-#else
-#define	ELF_EHDR_FLAGS_OK(eh)	ELF32_EHDR_FLAGS_OK(eh)
-#endif
-
-#if defined(ELFSIZE)
-struct elf_args {
-        Elf_Addr  arg_entry;      /* program entry point */
-        Elf_Addr  arg_interp;     /* Interpreter load address */
-        Elf_Addr  arg_phaddr;     /* program header address */
-        Elf_Addr  arg_phentsize;  /* Size of program header */
-        Elf_Addr  arg_phnum;      /* Number of program headers */
-};
-#endif
-
 /*
  * These constants are used for Elf32_Verdef struct's version number.  
  */
@@ -892,11 +942,13 @@
 	Elf32_Word	vd_aux;		/* offset to verdaux entries */
 	Elf32_Word	vd_next;	/* offset to next verdef */
 } Elf32_Verdef;
+typedef	Elf32_Verdef	Elf64_Verdef;
 
 typedef struct {
 	Elf32_Word	vda_name;	/* string table offset of name */
 	Elf32_Word	vda_next;	/* offset to verdaux */
 } Elf32_Verdaux;
+typedef	Elf32_Verdaux	Elf64_Verdaux;
 
 typedef struct {
 	Elf32_Half	vn_version;	/* version number of structure */
@@ -905,6 +957,7 @@
 	Elf32_Word	vn_aux;		/* offset to vernaux entries */
 	Elf32_Word	vn_next;	/* offset to next verneed */
 } Elf32_Verneed;
+typedef	Elf32_Verneed	Elf64_Verneed;
 
 typedef struct {
 	Elf32_Word	vna_hash;	/* Hash of dependency name */
@@ -913,10 +966,52 @@
 	Elf32_Word	vna_name;	/* string table offset to version name*/
 	Elf32_Word	vna_next;	/* offset to next vernaux */
 } Elf32_Vernaux;
+typedef	Elf32_Vernaux	Elf64_Vernaux;
 
 typedef struct {
 	Elf32_Half	vs_vers;
 } Elf32_Versym;
+typedef	Elf32_Versym	Elf64_Versym;
+
+#ifdef _KERNEL
+
+#define ELF_AUX_ENTRIES	14	/* Max size of aux array passed to loader */
+#define ELF32_NO_ADDR	(~(Elf32_Addr)0) /* Indicates addr. not yet filled in */
+#define ELF32_LINK_ADDR	((Elf32_Addr)-2) /* advises to use link address */
+#define ELF64_NO_ADDR	(~(Elf64_Addr)0) /* Indicates addr. not yet filled in */
+#define ELF64_LINK_ADDR	((Elf64_Addr)-2) /* advises to use link address */
+
+#if defined(ELFSIZE) && (ELFSIZE == 64)
+#define ELF_NO_ADDR	ELF64_NO_ADDR
+#define ELF_LINK_ADDR	ELF64_LINK_ADDR
+#elif defined(ELFSIZE) && (ELFSIZE == 32)
+#define ELF_NO_ADDR	ELF32_NO_ADDR
+#define ELF_LINK_ADDR	ELF32_LINK_ADDR
+#endif
+
+#ifndef ELF32_EHDR_FLAGS_OK
+#define	ELF32_EHDR_FLAGS_OK(eh)	1
+#endif
+
+#ifndef ELF64_EHDR_FLAGS_OK
+#define	ELF64_EHDR_FLAGS_OK(eh)	1
+#endif
+
+#if defined(ELFSIZE) && (ELFSIZE == 64)
+#define	ELF_EHDR_FLAGS_OK(eh)	ELF64_EHDR_FLAGS_OK(eh)
+#else
+#define	ELF_EHDR_FLAGS_OK(eh)	ELF32_EHDR_FLAGS_OK(eh)
+#endif
+
+#if defined(ELFSIZE)
+struct elf_args {
+        Elf_Addr  arg_entry;      /* program entry point */
+        Elf_Addr  arg_interp;     /* Interpreter load address */
+        Elf_Addr  arg_phaddr;     /* program header address */
+        Elf_Addr  arg_phentsize;  /* Size of program header */
+        Elf_Addr  arg_phnum;      /* Number of program headers */
+};
+#endif
 
 #ifdef _KERNEL_OPT
 #include "opt_execfmt.h"

Reply via email to