1ba2be530Sab196087 /* 2ba2be530Sab196087 * CDDL HEADER START 3ba2be530Sab196087 * 4ba2be530Sab196087 * The contents of this file are subject to the terms of the 5ba2be530Sab196087 * Common Development and Distribution License (the "License"). 6ba2be530Sab196087 * You may not use this file except in compliance with the License. 7ba2be530Sab196087 * 8ba2be530Sab196087 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9ba2be530Sab196087 * or http://www.opensolaris.org/os/licensing. 10ba2be530Sab196087 * See the License for the specific language governing permissions 11ba2be530Sab196087 * and limitations under the License. 12ba2be530Sab196087 * 13ba2be530Sab196087 * When distributing Covered Code, include this CDDL HEADER in each 14ba2be530Sab196087 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15ba2be530Sab196087 * If applicable, add the following below this CDDL HEADER, with the 16ba2be530Sab196087 * fields enclosed by brackets "[]" replaced with your own identifying 17ba2be530Sab196087 * information: Portions Copyright [yyyy] [name of copyright owner] 18ba2be530Sab196087 * 19ba2be530Sab196087 * CDDL HEADER END 20ba2be530Sab196087 */ 21ba2be530Sab196087 22ba2be530Sab196087 /* 23*08278a5eSRod Evans * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 24ba2be530Sab196087 * Use is subject to license terms. 25ba2be530Sab196087 */ 26ba2be530Sab196087 27ba2be530Sab196087 #ifndef _SYS_MACHELF_H 28ba2be530Sab196087 #define _SYS_MACHELF_H 29ba2be530Sab196087 30ba2be530Sab196087 #ifdef __cplusplus 31ba2be530Sab196087 extern "C" { 32ba2be530Sab196087 #endif 33ba2be530Sab196087 34d9452f23SEdward Pilatowicz #if defined(__amd64) || (defined(__i386) && defined(_ELF64)) 35ba2be530Sab196087 #include <sys/elf_amd64.h> 36ba2be530Sab196087 #elif defined(__i386) 37ba2be530Sab196087 #include <sys/elf_386.h> 38ba2be530Sab196087 #elif defined(__sparc) 39ba2be530Sab196087 #include <sys/elf_SPARC.h> 40ba2be530Sab196087 #endif 41ba2be530Sab196087 #ifndef _ASM 42ba2be530Sab196087 #include <sys/types.h> 43ba2be530Sab196087 #include <sys/elf.h> 44ba2be530Sab196087 #include <sys/link.h> /* for Elf*_Dyn */ 45ba2be530Sab196087 #endif /* _ASM */ 46ba2be530Sab196087 47ba2be530Sab196087 /* 48ba2be530Sab196087 * Make machine class dependent data types transparent to the common code 49ba2be530Sab196087 */ 50ba2be530Sab196087 #if defined(_ELF64) && !defined(_ELF32_COMPAT) 51ba2be530Sab196087 52ba2be530Sab196087 #ifndef _ASM 53ba2be530Sab196087 typedef Elf64_Xword Xword; 54ba2be530Sab196087 typedef Elf64_Lword Lword; 55ba2be530Sab196087 typedef Elf64_Sxword Sxword; 56ba2be530Sab196087 typedef Elf64_Word Word; 57ba2be530Sab196087 typedef Elf64_Sword Sword; 58ba2be530Sab196087 typedef Elf64_Half Half; 59ba2be530Sab196087 typedef Elf64_Addr Addr; 60ba2be530Sab196087 typedef Elf64_Off Off; 61ba2be530Sab196087 typedef uchar_t Byte; 62ba2be530Sab196087 #endif /* _ASM */ 63ba2be530Sab196087 64ba2be530Sab196087 #if defined(_KERNEL) 65ba2be530Sab196087 #define ELF_R_TYPE ELF64_R_TYPE 66ba2be530Sab196087 #define ELF_R_SYM ELF64_R_SYM 67ba2be530Sab196087 #define ELF_R_TYPE_DATA ELF64_R_TYPE_DATA 68ba2be530Sab196087 #define ELF_R_INFO ELF64_R_INFO 69ba2be530Sab196087 #define ELF_ST_BIND ELF64_ST_BIND 70ba2be530Sab196087 #define ELF_ST_TYPE ELF64_ST_TYPE 71ba2be530Sab196087 #define ELF_M_SYM ELF64_M_SYM 72ba2be530Sab196087 #define ELF_M_SIZE ELF64_M_SIZE 73ba2be530Sab196087 #endif 74ba2be530Sab196087 75ba2be530Sab196087 #ifndef _ASM 76ba2be530Sab196087 typedef Elf64_Ehdr Ehdr; 77ba2be530Sab196087 typedef Elf64_Shdr Shdr; 78ba2be530Sab196087 typedef Elf64_Sym Sym; 79ba2be530Sab196087 typedef Elf64_Syminfo Syminfo; 80ba2be530Sab196087 typedef Elf64_Rela Rela; 81ba2be530Sab196087 typedef Elf64_Rel Rel; 82ba2be530Sab196087 typedef Elf64_Nhdr Nhdr; 83ba2be530Sab196087 typedef Elf64_Phdr Phdr; 84ba2be530Sab196087 typedef Elf64_Dyn Dyn; 85ba2be530Sab196087 typedef Elf64_Boot Boot; 86ba2be530Sab196087 typedef Elf64_Verdef Verdef; 87ba2be530Sab196087 typedef Elf64_Verdaux Verdaux; 88ba2be530Sab196087 typedef Elf64_Verneed Verneed; 89ba2be530Sab196087 typedef Elf64_Vernaux Vernaux; 90ba2be530Sab196087 typedef Elf64_Versym Versym; 91ba2be530Sab196087 typedef Elf64_Move Move; 92ba2be530Sab196087 typedef Elf64_Cap Cap; 93*08278a5eSRod Evans typedef Elf64_Capinfo Capinfo; 94*08278a5eSRod Evans typedef Elf64_Capchain Capchain; 95ba2be530Sab196087 #endif /* _ASM */ 96ba2be530Sab196087 97ba2be530Sab196087 #else /* _ILP32 */ 98ba2be530Sab196087 99ba2be530Sab196087 #ifndef _ASM 100ba2be530Sab196087 typedef Elf32_Word Xword; /* Xword/Sxword are 32-bits in Elf32 */ 101ba2be530Sab196087 typedef Elf32_Lword Lword; 102ba2be530Sab196087 typedef Elf32_Sword Sxword; 103ba2be530Sab196087 typedef Elf32_Word Word; 104ba2be530Sab196087 typedef Elf32_Sword Sword; 105ba2be530Sab196087 typedef Elf32_Half Half; 106ba2be530Sab196087 typedef Elf32_Addr Addr; 107ba2be530Sab196087 typedef Elf32_Off Off; 108ba2be530Sab196087 typedef uchar_t Byte; 109ba2be530Sab196087 #endif /* _ASM */ 110ba2be530Sab196087 111ba2be530Sab196087 #if defined(_KERNEL) 112ba2be530Sab196087 #define ELF_R_TYPE ELF32_R_TYPE 113ba2be530Sab196087 #define ELF_R_SYM ELF32_R_SYM 114ba2be530Sab196087 #define ELF_R_TYPE_DATA(x) (0) 115ba2be530Sab196087 #define ELF_R_INFO ELF32_R_INFO 116ba2be530Sab196087 #define ELF_ST_BIND ELF32_ST_BIND 117ba2be530Sab196087 #define ELF_ST_TYPE ELF32_ST_TYPE 118ba2be530Sab196087 #define ELF_M_SYM ELF32_M_SYM 119ba2be530Sab196087 #define ELF_M_SIZE ELF32_M_SIZE 120ba2be530Sab196087 #endif 121ba2be530Sab196087 122ba2be530Sab196087 #ifndef _ASM 123ba2be530Sab196087 typedef Elf32_Ehdr Ehdr; 124ba2be530Sab196087 typedef Elf32_Shdr Shdr; 125ba2be530Sab196087 typedef Elf32_Sym Sym; 126ba2be530Sab196087 typedef Elf32_Syminfo Syminfo; 127ba2be530Sab196087 typedef Elf32_Rela Rela; 128ba2be530Sab196087 typedef Elf32_Rel Rel; 129ba2be530Sab196087 typedef Elf32_Nhdr Nhdr; 130ba2be530Sab196087 typedef Elf32_Phdr Phdr; 131ba2be530Sab196087 typedef Elf32_Dyn Dyn; 132ba2be530Sab196087 typedef Elf32_Boot Boot; 133ba2be530Sab196087 typedef Elf32_Verdef Verdef; 134ba2be530Sab196087 typedef Elf32_Verdaux Verdaux; 135ba2be530Sab196087 typedef Elf32_Verneed Verneed; 136ba2be530Sab196087 typedef Elf32_Vernaux Vernaux; 137ba2be530Sab196087 typedef Elf32_Versym Versym; 138ba2be530Sab196087 typedef Elf32_Move Move; 139ba2be530Sab196087 typedef Elf32_Cap Cap; 140*08278a5eSRod Evans typedef Elf32_Capinfo Capinfo; 141*08278a5eSRod Evans typedef Elf32_Capchain Capchain; 142ba2be530Sab196087 #endif /* _ASM */ 143ba2be530Sab196087 144ba2be530Sab196087 #endif /* _ILP32 */ 145ba2be530Sab196087 146ba2be530Sab196087 /* 147ba2be530Sab196087 * Elf `printf' type-cast macros. These force arguments to be a fixed size 148ba2be530Sab196087 * so that Elf32 and Elf64 can share common format strings. 149ba2be530Sab196087 */ 150ba2be530Sab196087 #ifndef __lint 151ba2be530Sab196087 #define EC_ADDR(a) ((Elf64_Addr)(a)) /* "ull" */ 152ba2be530Sab196087 #define EC_OFF(a) ((Elf64_Off)(a)) /* "ull" */ 153ba2be530Sab196087 #define EC_HALF(a) ((Elf64_Half)(a)) /* "d" */ 154ba2be530Sab196087 #define EC_WORD(a) ((Elf64_Word)(a)) /* "u" */ 155ba2be530Sab196087 #define EC_SWORD(a) ((Elf64_Sword)(a)) /* "d" */ 156ba2be530Sab196087 #define EC_XWORD(a) ((Elf64_Xword)(a)) /* "ull" */ 157ba2be530Sab196087 #define EC_SXWORD(a) ((Elf64_Sxword)(a)) /* "ll" */ 158ba2be530Sab196087 #define EC_LWORD(a) ((Elf64_Lword)(a)) /* "ull" */ 159ba2be530Sab196087 160ba2be530Sab196087 /* 161ba2be530Sab196087 * A native pointer is special. Although it can be convenient to display 162ba2be530Sab196087 * these from a common format (ull), compilers may flag the cast of a pointer 163ba2be530Sab196087 * to an integer as illegal. Casting these pointers to the native pointer 164ba2be530Sab196087 * size, suppresses any compiler errors. 165ba2be530Sab196087 */ 166ba2be530Sab196087 #define EC_NATPTR(a) ((Elf64_Xword)(uintptr_t)(a)) /* "ull" */ 167ba2be530Sab196087 #else 168ba2be530Sab196087 #define EC_ADDR(a) ((u_longlong_t)(a)) 169ba2be530Sab196087 #define EC_OFF(a) ((u_longlong_t)(a)) 170ba2be530Sab196087 #define EC_HALF(a) ((ushort_t)(a)) 171ba2be530Sab196087 #define EC_WORD(a) ((uint_t)(a)) 172ba2be530Sab196087 #define EC_SWORD(a) ((int)(a)) 173ba2be530Sab196087 #define EC_XWORD(a) ((u_longlong_t)(a)) 174ba2be530Sab196087 #define EC_SXWORD(a) ((longlong_t)(a)) 175ba2be530Sab196087 #define EC_LWORD(a) ((u_longlong_t)(a)) 176ba2be530Sab196087 177ba2be530Sab196087 #define EC_NATPTR(a) ((u_longlong_t)(a)) 178ba2be530Sab196087 #endif 179ba2be530Sab196087 180ba2be530Sab196087 #ifdef __cplusplus 181ba2be530Sab196087 } 182ba2be530Sab196087 #endif 183ba2be530Sab196087 184ba2be530Sab196087 #endif /* _SYS_MACHELF_H */ 185