elfcap.h revision 5565:538e7adac11a
1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21/* 22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26#ifndef _ELFCAP_DOT_H 27#define _ELFCAP_DOT_H 28 29#pragma ident "%Z%%M% %I% %E% SMI" 30 31#include <sys/types.h> 32 33#ifdef __cplusplus 34extern "C" { 35#endif 36 37/* 38 * The elfcap code handles mappings to and from several string styles. 39 * The caller uses elfcap_style_t to specify the style to use. 40 */ 41typedef enum { 42 ELFCAP_STYLE_FULL = 1, /* Full formal name (e.g. AV_386_SSE) */ 43 ELFCAP_STYLE_UC = 2, /* Informal upper case (e.g. SSE) */ 44 ELFCAP_STYLE_LC = 3 /* Informal lower case (e.g. sse) */ 45} elfcap_style_t; 46 47/* 48 * String descriptor: Contains the string and strlen(string). elfcap can 49 * be used in contexts (ld.so.1) where we do not want to make calls to 50 * string processing functions, so the length is calculated at compile time. 51 */ 52typedef struct { 53 const char *s_str; 54 size_t s_len; 55} elfcap_str_t; 56 57/* 58 * Capabilities descriptor: This maps the integer bit value 59 * (c_val) to/from the various strings that represent it. 60 * 61 * c_val is normally expected to be a non-zero power of 2 62 * value (i.e. a single set bit). The value 0 is special, and 63 * used to represent a "reserved" placeholder in an array of 64 * capabilities. These reserved values have NULL string pointers, 65 * and are intended to be ignored by the processing code. 66 */ 67typedef struct { 68 uint64_t c_val; /* Bit value */ 69 elfcap_str_t c_full; /* ELFCAP_STYLE_FULL */ 70 elfcap_str_t c_uc; /* ELFCAP_STYLE_UC */ 71 elfcap_str_t c_lc; /* ELFCAP_STYLE_LC */ 72} elfcap_desc_t; 73 74/* 75 * Valid format values: The various formats in which a generated 76 * string representing bitmap values can be displayed. 77 * 78 * This must be kept in sync with the format[] array in elfcap.c. 79 */ 80typedef enum { 81 ELFCAP_FMT_SNGSPACE = 0, 82 ELFCAP_FMT_DBLSPACE = 1, 83 ELFCAP_FMT_PIPSPACE = 2 84} elfcap_fmt_t; 85 86/* 87 * Error codes: 88 */ 89typedef enum { 90 ELFCAP_ERR_NONE = 0, /* no error */ 91 ELFCAP_ERR_BUFOVFL = 1, /* buffer overfow */ 92 ELFCAP_ERR_INVFMT = 2, /* invalid format */ 93 ELFCAP_ERR_UNKTAG = 3, /* unknown capabilities tag */ 94 ELFCAP_ERR_UNKMACH = 4, /* unknown machine type */ 95 ELFCAP_ERR_INVSTYLE = 5 /* unknown style */ 96} elfcap_err_t; 97 98 99/* 100 * # of each type of capability known to the system. These values 101 * must be kept in sync with the arrays found in elfcap.c 102 */ 103#define ELFCAP_NUM_SF1 2 104#define ELFCAP_NUM_HW1_SPARC 16 105#define ELFCAP_NUM_HW1_386 25 106 107 108/* 109 * Given a capability section tag and value, call the proper underlying 110 * "to str" function to generate the string description. 111 */ 112extern elfcap_err_t elfcap_tag_to_str(elfcap_style_t, uint64_t, 113 uint64_t, char *, size_t, elfcap_fmt_t, ushort_t); 114 115/* 116 * The functions that convert from a specific capability value to 117 * a string representation all use the same common prototype. 118 */ 119typedef elfcap_err_t elfcap_to_str_func_t(elfcap_style_t, uint64_t, char *, 120 size_t, elfcap_fmt_t, ushort_t); 121 122extern elfcap_to_str_func_t elfcap_hw1_to_str; 123extern elfcap_to_str_func_t elfcap_sf1_to_str; 124 125/* 126 * The reverse mapping: Given a string representation, turn it back into 127 * integer form. 128 */ 129typedef uint64_t elfcap_from_str_func_t(elfcap_style_t, 130 const char *, ushort_t mach); 131 132extern elfcap_from_str_func_t elfcap_hw1_from_str; 133extern elfcap_from_str_func_t elfcap_sf1_from_str; 134 135/* 136 * These functions give access to the individual descriptor arrays. 137 * The caller is allowed to copy and use the string pointers contained 138 * in the descriptors, but must not alter them. Functions are used instead 139 * of making the arrays directly visible to preclude copy relocations in 140 * non-pic code. 141 */ 142extern const elfcap_desc_t *elfcap_getdesc_hw1_sparc(void); 143extern const elfcap_desc_t *elfcap_getdesc_hw1_386(void); 144extern const elfcap_desc_t *elfcap_getdesc_sf1(void); 145 146#ifdef __cplusplus 147} 148#endif 149 150#endif /* _ELFCAP_DOT_H */ 151