11618Srie /* 21618Srie * CDDL HEADER START 31618Srie * 41618Srie * The contents of this file are subject to the terms of the 51618Srie * Common Development and Distribution License (the "License"). 61618Srie * You may not use this file except in compliance with the License. 71618Srie * 81618Srie * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 91618Srie * or http://www.opensolaris.org/os/licensing. 101618Srie * See the License for the specific language governing permissions 111618Srie * and limitations under the License. 121618Srie * 131618Srie * When distributing Covered Code, include this CDDL HEADER in each 141618Srie * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 151618Srie * If applicable, add the following below this CDDL HEADER, with the 161618Srie * fields enclosed by brackets "[]" replaced with your own identifying 171618Srie * information: Portions Copyright [yyyy] [name of copyright owner] 181618Srie * 191618Srie * CDDL HEADER END 201618Srie */ 211618Srie 221618Srie /* 23*3492Sab196087 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 241618Srie * Use is subject to license terms. 251618Srie */ 261618Srie 271618Srie #ifndef __ELFDUMP_H 281618Srie #define __ELFDUMP_H 291618Srie 301618Srie #pragma ident "%Z%%M% %I% %E% SMI" 311618Srie 321618Srie #include <machelf.h> 331618Srie #include <debug.h> 341618Srie 351618Srie /* 361618Srie * Local include file for elfdump. 371618Srie */ 381618Srie #ifdef __cplusplus 391618Srie extern "C" { 401618Srie #endif 411618Srie 421618Srie #define FLG_DYNAMIC 0x00000001 431618Srie #define FLG_EHDR 0x00000002 441618Srie #define FLG_INTERP 0x00000004 451618Srie #define FLG_SHDR 0x00000008 461618Srie #define FLG_NOTE 0x00000010 471618Srie #define FLG_PHDR 0x00000020 481618Srie #define FLG_RELOC 0x00000040 491618Srie #define FLG_SYMBOLS 0x00000080 501618Srie #define FLG_VERSIONS 0x00000100 511618Srie #define FLG_HASH 0x00000200 521618Srie #define FLG_GOT 0x00000400 531618Srie #define FLG_SYMINFO 0x00000800 541618Srie #define FLG_MOVE 0x00001000 551618Srie #define FLG_GROUP 0x00002000 561618Srie #define FLG_CAP 0x00004000 571618Srie #define FLG_UNWIND 0x00008000 58*3492Sab196087 #define FLG_SORT 0x00010000 591618Srie #define FLG_LONGNAME 0x00100000 /* not done by default */ 601618Srie #define FLG_CHECKSUM 0x00200000 /* not done by default */ 611618Srie #define FLG_DEMANGLE 0x00400000 /* not done by default */ 621618Srie #define FLG_EVERYTHING 0x000fffff 631618Srie 641618Srie #define MAXNDXSIZE 10 651618Srie 661618Srie typedef struct cache { 671618Srie Shdr *c_shdr; 681618Srie Elf_Data *c_data; 691618Srie char *c_name; 701618Srie } Cache; 711618Srie 721618Srie typedef struct got_info { 731618Srie Word g_reltype; /* it will never happen, but */ 741618Srie /* support mixed relocations */ 751618Srie void *g_rel; 761618Srie const char *g_symname; 771618Srie } Got_info; 781618Srie 791618Srie extern const Cache cache_init; 801618Srie 811618Srie extern void failure(const char *, const char *); 821618Srie extern const char *demangle(const char *, uint_t); 831618Srie 841618Srie /* 851618Srie * Define various elfdump() functions into their 32-bit and 64-bit variants. 861618Srie */ 871618Srie #if defined(_ELF64) 881618Srie #define cap cap64 891618Srie #define checksum checksum64 901618Srie #define dynamic dynamic64 911618Srie #define got got64 921618Srie #define group group64 931618Srie #define hash hash64 941618Srie #define interp interp64 951618Srie #define move move64 961618Srie #define note note64 971618Srie #define note_entry note_entry64 981618Srie #define regular regular64 991618Srie #define reloc reloc64 1001618Srie #define sections sections64 1011618Srie #define string string64 1021618Srie #define symbols symbols64 1031618Srie #define syminfo syminfo64 1041618Srie #define symlookup symlookup64 1051618Srie #define unwind unwind64 1061618Srie #define versions versions64 1071618Srie #define version_def version_def64 1081618Srie #define version_need version_need64 1091618Srie #else 1101618Srie #define cap cap32 1111618Srie #define checksum checksum32 1121618Srie #define dynamic dynamic32 1131618Srie #define got got32 1141618Srie #define group group32 1151618Srie #define hash hash32 1161618Srie #define interp interp32 1171618Srie #define move move32 1181618Srie #define note note32 1191618Srie #define note_entry note_entry32 1201618Srie #define regular regular32 1211618Srie #define reloc reloc32 1221618Srie #define sections sections32 1231618Srie #define string string32 1241618Srie #define symbols symbols32 1251618Srie #define syminfo syminfo32 1261618Srie #define symlookup symlookup32 1271618Srie #define unwind unwind32 1281618Srie #define versions versions32 1291618Srie #define version_def version_def32 1301618Srie #define version_need version_need32 1311618Srie #endif 1321618Srie 1331618Srie extern void regular32(const char *, Elf *, uint_t, char *, int); 1341618Srie extern void regular64(const char *, Elf *, uint_t, char *, int); 1351618Srie 1361618Srie #ifdef __cplusplus 1371618Srie } 1381618Srie #endif 1391618Srie 1401618Srie #endif /* __ELFDUMP_H */ 141