17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 55aefb655Srie * Common Development and Distribution License (the "License"). 65aefb655Srie * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 215aefb655Srie 227c478bd9Sstevel@tonic-gate /* 23*08278a5eSRod Evans * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 247c478bd9Sstevel@tonic-gate * Use is subject to license terms. 257c478bd9Sstevel@tonic-gate */ 267c478bd9Sstevel@tonic-gate 277c478bd9Sstevel@tonic-gate #ifndef _SYS_MACHELF_H 287c478bd9Sstevel@tonic-gate #define _SYS_MACHELF_H 297c478bd9Sstevel@tonic-gate 305aefb655Srie #ifdef __cplusplus 315aefb655Srie extern "C" { 325aefb655Srie #endif 335aefb655Srie 34d9452f23SEdward Pilatowicz #if defined(__amd64) || (defined(__i386) && defined(_ELF64)) 35ba2be530Sab #include <sys/elf_amd64.h> 36ba2be530Sab #elif defined(__i386) 37ba2be530Sab #include <sys/elf_386.h> 38ba2be530Sab #elif defined(__sparc) 397c478bd9Sstevel@tonic-gate #include <sys/elf_SPARC.h> 40ba2be530Sab #endif 417c478bd9Sstevel@tonic-gate #ifndef _ASM 425aefb655Srie #include <sys/types.h> 437c478bd9Sstevel@tonic-gate #include <sys/elf.h> 447c478bd9Sstevel@tonic-gate #include <sys/link.h> /* for Elf*_Dyn */ 457c478bd9Sstevel@tonic-gate #endif /* _ASM */ 467c478bd9Sstevel@tonic-gate 477c478bd9Sstevel@tonic-gate /* 487c478bd9Sstevel@tonic-gate * Make machine class dependent data types transparent to the common code 497c478bd9Sstevel@tonic-gate */ 507c478bd9Sstevel@tonic-gate #if defined(_ELF64) && !defined(_ELF32_COMPAT) 517c478bd9Sstevel@tonic-gate 527c478bd9Sstevel@tonic-gate #ifndef _ASM 537c478bd9Sstevel@tonic-gate typedef Elf64_Xword Xword; 547c478bd9Sstevel@tonic-gate typedef Elf64_Lword Lword; 557c478bd9Sstevel@tonic-gate typedef Elf64_Sxword Sxword; 567c478bd9Sstevel@tonic-gate typedef Elf64_Word Word; 577c478bd9Sstevel@tonic-gate typedef Elf64_Sword Sword; 587c478bd9Sstevel@tonic-gate typedef Elf64_Half Half; 597c478bd9Sstevel@tonic-gate typedef Elf64_Addr Addr; 607c478bd9Sstevel@tonic-gate typedef Elf64_Off Off; 615aefb655Srie typedef uchar_t Byte; 627c478bd9Sstevel@tonic-gate #endif /* _ASM */ 637c478bd9Sstevel@tonic-gate 647c478bd9Sstevel@tonic-gate #if defined(_KERNEL) 657c478bd9Sstevel@tonic-gate #define ELF_R_TYPE ELF64_R_TYPE 667c478bd9Sstevel@tonic-gate #define ELF_R_SYM ELF64_R_SYM 677c478bd9Sstevel@tonic-gate #define ELF_R_TYPE_DATA ELF64_R_TYPE_DATA 687c478bd9Sstevel@tonic-gate #define ELF_R_INFO ELF64_R_INFO 697c478bd9Sstevel@tonic-gate #define ELF_ST_BIND ELF64_ST_BIND 707c478bd9Sstevel@tonic-gate #define ELF_ST_TYPE ELF64_ST_TYPE 717c478bd9Sstevel@tonic-gate #define ELF_M_SYM ELF64_M_SYM 727c478bd9Sstevel@tonic-gate #define ELF_M_SIZE ELF64_M_SIZE 737c478bd9Sstevel@tonic-gate #endif 747c478bd9Sstevel@tonic-gate 757c478bd9Sstevel@tonic-gate #ifndef _ASM 767c478bd9Sstevel@tonic-gate typedef Elf64_Ehdr Ehdr; 777c478bd9Sstevel@tonic-gate typedef Elf64_Shdr Shdr; 787c478bd9Sstevel@tonic-gate typedef Elf64_Sym Sym; 797c478bd9Sstevel@tonic-gate typedef Elf64_Syminfo Syminfo; 807c478bd9Sstevel@tonic-gate typedef Elf64_Rela Rela; 817c478bd9Sstevel@tonic-gate typedef Elf64_Rel Rel; 827c478bd9Sstevel@tonic-gate typedef Elf64_Nhdr Nhdr; 837c478bd9Sstevel@tonic-gate typedef Elf64_Phdr Phdr; 847c478bd9Sstevel@tonic-gate typedef Elf64_Dyn Dyn; 857c478bd9Sstevel@tonic-gate typedef Elf64_Boot Boot; 867c478bd9Sstevel@tonic-gate typedef Elf64_Verdef Verdef; 877c478bd9Sstevel@tonic-gate typedef Elf64_Verdaux Verdaux; 887c478bd9Sstevel@tonic-gate typedef Elf64_Verneed Verneed; 897c478bd9Sstevel@tonic-gate typedef Elf64_Vernaux Vernaux; 907c478bd9Sstevel@tonic-gate typedef Elf64_Versym Versym; 917c478bd9Sstevel@tonic-gate typedef Elf64_Move Move; 927c478bd9Sstevel@tonic-gate typedef Elf64_Cap Cap; 93*08278a5eSRod Evans typedef Elf64_Capinfo Capinfo; 94*08278a5eSRod Evans typedef Elf64_Capchain Capchain; 957c478bd9Sstevel@tonic-gate #endif /* _ASM */ 967c478bd9Sstevel@tonic-gate 975aefb655Srie #else /* _ILP32 */ 987c478bd9Sstevel@tonic-gate 997c478bd9Sstevel@tonic-gate #ifndef _ASM 1007c478bd9Sstevel@tonic-gate typedef Elf32_Word Xword; /* Xword/Sxword are 32-bits in Elf32 */ 1017c478bd9Sstevel@tonic-gate typedef Elf32_Lword Lword; 1027c478bd9Sstevel@tonic-gate typedef Elf32_Sword Sxword; 1037c478bd9Sstevel@tonic-gate typedef Elf32_Word Word; 1047c478bd9Sstevel@tonic-gate typedef Elf32_Sword Sword; 1057c478bd9Sstevel@tonic-gate typedef Elf32_Half Half; 1067c478bd9Sstevel@tonic-gate typedef Elf32_Addr Addr; 1077c478bd9Sstevel@tonic-gate typedef Elf32_Off Off; 1085aefb655Srie typedef uchar_t Byte; 1097c478bd9Sstevel@tonic-gate #endif /* _ASM */ 1107c478bd9Sstevel@tonic-gate 1117c478bd9Sstevel@tonic-gate #if defined(_KERNEL) 1127c478bd9Sstevel@tonic-gate #define ELF_R_TYPE ELF32_R_TYPE 1137c478bd9Sstevel@tonic-gate #define ELF_R_SYM ELF32_R_SYM 1147c478bd9Sstevel@tonic-gate #define ELF_R_TYPE_DATA(x) (0) 115ba2be530Sab #define ELF_R_INFO ELF32_R_INFO 1167c478bd9Sstevel@tonic-gate #define ELF_ST_BIND ELF32_ST_BIND 1177c478bd9Sstevel@tonic-gate #define ELF_ST_TYPE ELF32_ST_TYPE 1187c478bd9Sstevel@tonic-gate #define ELF_M_SYM ELF32_M_SYM 1197c478bd9Sstevel@tonic-gate #define ELF_M_SIZE ELF32_M_SIZE 1207c478bd9Sstevel@tonic-gate #endif 1217c478bd9Sstevel@tonic-gate 1227c478bd9Sstevel@tonic-gate #ifndef _ASM 1237c478bd9Sstevel@tonic-gate typedef Elf32_Ehdr Ehdr; 1247c478bd9Sstevel@tonic-gate typedef Elf32_Shdr Shdr; 1257c478bd9Sstevel@tonic-gate typedef Elf32_Sym Sym; 1267c478bd9Sstevel@tonic-gate typedef Elf32_Syminfo Syminfo; 1277c478bd9Sstevel@tonic-gate typedef Elf32_Rela Rela; 1287c478bd9Sstevel@tonic-gate typedef Elf32_Rel Rel; 1297c478bd9Sstevel@tonic-gate typedef Elf32_Nhdr Nhdr; 1307c478bd9Sstevel@tonic-gate typedef Elf32_Phdr Phdr; 1317c478bd9Sstevel@tonic-gate typedef Elf32_Dyn Dyn; 1327c478bd9Sstevel@tonic-gate typedef Elf32_Boot Boot; 1337c478bd9Sstevel@tonic-gate typedef Elf32_Verdef Verdef; 1347c478bd9Sstevel@tonic-gate typedef Elf32_Verdaux Verdaux; 1357c478bd9Sstevel@tonic-gate typedef Elf32_Verneed Verneed; 1367c478bd9Sstevel@tonic-gate typedef Elf32_Vernaux Vernaux; 1377c478bd9Sstevel@tonic-gate typedef Elf32_Versym Versym; 1387c478bd9Sstevel@tonic-gate typedef Elf32_Move Move; 1397c478bd9Sstevel@tonic-gate typedef Elf32_Cap Cap; 140*08278a5eSRod Evans typedef Elf32_Capinfo Capinfo; 141*08278a5eSRod Evans typedef Elf32_Capchain Capchain; 1427c478bd9Sstevel@tonic-gate #endif /* _ASM */ 1437c478bd9Sstevel@tonic-gate 1445aefb655Srie #endif /* _ILP32 */ 1457c478bd9Sstevel@tonic-gate 1467c478bd9Sstevel@tonic-gate /* 1475aefb655Srie * Elf `printf' type-cast macros. These force arguments to be a fixed size 1485aefb655Srie * so that Elf32 and Elf64 can share common format strings. 1497c478bd9Sstevel@tonic-gate */ 1507c478bd9Sstevel@tonic-gate #ifndef __lint 1515aefb655Srie #define EC_ADDR(a) ((Elf64_Addr)(a)) /* "ull" */ 1525aefb655Srie #define EC_OFF(a) ((Elf64_Off)(a)) /* "ull" */ 1535aefb655Srie #define EC_HALF(a) ((Elf64_Half)(a)) /* "d" */ 1545aefb655Srie #define EC_WORD(a) ((Elf64_Word)(a)) /* "u" */ 1555aefb655Srie #define EC_SWORD(a) ((Elf64_Sword)(a)) /* "d" */ 1565aefb655Srie #define EC_XWORD(a) ((Elf64_Xword)(a)) /* "ull" */ 1575aefb655Srie #define EC_SXWORD(a) ((Elf64_Sxword)(a)) /* "ll" */ 1585aefb655Srie #define EC_LWORD(a) ((Elf64_Lword)(a)) /* "ull" */ 1595aefb655Srie 1605aefb655Srie /* 1615aefb655Srie * A native pointer is special. Although it can be convenient to display 1625aefb655Srie * these from a common format (ull), compilers may flag the cast of a pointer 1635aefb655Srie * to an integer as illegal. Casting these pointers to the native pointer 1645aefb655Srie * size, suppresses any compiler errors. 1655aefb655Srie */ 1665aefb655Srie #define EC_NATPTR(a) ((Elf64_Xword)(uintptr_t)(a)) /* "ull" */ 1677c478bd9Sstevel@tonic-gate #else 1685aefb655Srie #define EC_ADDR(a) ((u_longlong_t)(a)) 1695aefb655Srie #define EC_OFF(a) ((u_longlong_t)(a)) 1705aefb655Srie #define EC_HALF(a) ((ushort_t)(a)) 1715aefb655Srie #define EC_WORD(a) ((uint_t)(a)) 1725aefb655Srie #define EC_SWORD(a) ((int)(a)) 1735aefb655Srie #define EC_XWORD(a) ((u_longlong_t)(a)) 1745aefb655Srie #define EC_SXWORD(a) ((longlong_t)(a)) 1755aefb655Srie #define EC_LWORD(a) ((u_longlong_t)(a)) 1765aefb655Srie 1775aefb655Srie #define EC_NATPTR(a) ((u_longlong_t)(a)) 1787c478bd9Sstevel@tonic-gate #endif 1797c478bd9Sstevel@tonic-gate 1807c478bd9Sstevel@tonic-gate #ifdef __cplusplus 1817c478bd9Sstevel@tonic-gate } 1827c478bd9Sstevel@tonic-gate #endif 1837c478bd9Sstevel@tonic-gate 1847c478bd9Sstevel@tonic-gate #endif /* _SYS_MACHELF_H */ 185