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 /* 23 * Copyright (c) 1988 AT&T 24 * All Rights Reserved 25 * 26 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 27 * Use is subject to license terms. 28 */ 29 30 #ifndef _CONV_H 31 #define _CONV_H 32 33 #pragma ident "%Z%%M% %I% %E% SMI" 34 35 /* 36 * Global include file for conversion library. 37 */ 38 39 #include <stdlib.h> 40 #include <libelf.h> 41 #include <dlfcn.h> 42 #include <libld.h> 43 #include <sgs.h> 44 #include <machdep.h> 45 46 #ifdef __cplusplus 47 extern "C" { 48 #endif 49 50 /* 51 * Configuration features available - maintained here (instead of debug.h) 52 * to save libconv from having to include debug.h which results in numerous 53 * "declared but not used or defined" lint errors. 54 */ 55 #define CONF_EDLIBPATH 0x000100 /* ELF default library path */ 56 #define CONF_ESLIBPATH 0x000200 /* ELF secure library path */ 57 #define CONF_ADLIBPATH 0x000400 /* AOUT default library path */ 58 #define CONF_ASLIBPATH 0x000800 /* AOUT secure library path */ 59 #define CONF_DIRCFG 0x001000 /* directory configuration available */ 60 #define CONF_OBJALT 0x002000 /* object alternatives available */ 61 #define CONF_MEMRESV 0x004000 /* memory reservation required */ 62 #define CONF_ENVS 0x008000 /* environment variables available */ 63 #define CONF_FLTR 0x010000 /* filter information available */ 64 #define CONF_FEATMSK 0xffff00 65 66 /* 67 * Buffer types: 68 * 69 * Many of the routines in this module require the user to supply a 70 * buffer into which the desired strings may be written. These are 71 * all arrays of characters, and might be defined as simple arrays 72 * of char. The problem with that approach is that when such an array 73 * is passed to a function, the C language considers it to have the 74 * type (char *), without any regard to its length. Not all of our 75 * buffers have the same length, and we want to ensure that the compiler 76 * will refuse to compile code that passes the wrong type of buffer to 77 * a given routine. The solution is to define the buffers as unions 78 * that contain the needed array, and then to pass the given union 79 * by address. The compiler will catch attempts to pass the wrong type 80 * of pointer, and the size of a structure/union is implicit in its type. 81 * 82 * A nice side effect of this approach is that we can use a union with 83 * multiple buffers to handle the cases where a given routine needs 84 * more than one type of buffer. The end result is a single buffer large 85 * enough to handle any of the subcases, but no larger. 86 */ 87 88 /* 89 * Size of buffer used by conv_invalid_val(): 90 * 91 * Various values that can't be matched to a symbolic definition are converted 92 * to a numeric string. 93 * 94 * The buffer size reflects the maximum number of digits needed to 95 * display an integer as text, plus a trailing null, and with room for 96 * a leading "0x" if hexidecimal display is selected. 97 */ 98 #define CONV32_INV_BUFSIZE 12 99 typedef union { 100 char buf[CONV32_INV_BUFSIZE]; 101 } Conv32_inv_buf_t; 102 103 #define CONV64_INV_BUFSIZE 22 104 typedef union { 105 char buf[CONV64_INV_BUFSIZE]; 106 } Conv64_inv_buf_t; 107 108 109 110 /* conv_ehdr_flags() */ 111 #define CONF_EHDR_FLAGS_BASE_BUFSIZE 69 112 #define CONV32_EHDR_FLAGS_BUFSIZE \ 113 (CONF_EHDR_FLAGS_BASE_BUFSIZE + CONV32_INV_BUFSIZE) 114 typedef union { 115 Conv32_inv_buf_t inv_buf; 116 char buf[CONV32_EHDR_FLAGS_BUFSIZE]; 117 } Conv32_ehdr_flags_buf_t; 118 119 #define CONV64_EHDR_FLAGS_BUFSIZE \ 120 (CONF_EHDR_FLAGS_BASE_BUFSIZE + CONV64_INV_BUFSIZE) 121 typedef union { 122 Conv64_inv_buf_t inv_buf; 123 char buf[CONV64_EHDR_FLAGS_BUFSIZE]; 124 } Conv64_ehdr_flags_buf_t; 125 126 127 /* conv_reject_desc() */ 128 typedef union { 129 Conv32_inv_buf_t inv_buf; 130 Conv32_ehdr_flags_buf_t flags_buf; 131 } Conv32_reject_desc_buf_t; 132 133 typedef union { 134 Conv64_inv_buf_t inv_buf; 135 Conv64_ehdr_flags_buf_t flags_buf; 136 } Conv64_reject_desc_buf_t; 137 138 139 /* 140 * conv_cap_val_hw1() 141 * 142 * This size is based on the maximum number of hardware capabilities 143 * that exist. See common/elfcap. 144 */ 145 #define CONV_CAP_VAL_HW1_BUFSIZE 195 146 147 typedef union { 148 Conv32_inv_buf_t inv_buf; 149 char buf[CONV_CAP_VAL_HW1_BUFSIZE]; 150 } Conv32_cap_val_hw1_buf_t; 151 152 typedef union { 153 Conv64_inv_buf_t inv_buf; 154 char buf[CONV_CAP_VAL_HW1_BUFSIZE]; 155 } Conv64_cap_val_hw1_buf_t; 156 157 158 /* 159 * conv_cap_val_sf1() 160 * 161 * This size is based on the maximum number of software capabilities 162 * that exist. See common/elfcap. 163 */ 164 #define CONV_CAP_VAL_SF1_BUFSIZE 45 165 166 typedef union { 167 Conv32_inv_buf_t inv_buf; 168 char buf[CONV_CAP_VAL_SF1_BUFSIZE]; 169 } Conv32_cap_val_sf1_buf_t; 170 171 typedef union { 172 Conv64_inv_buf_t inv_buf; 173 char buf[CONV_CAP_VAL_SF1_BUFSIZE]; 174 } Conv64_cap_val_sf1_buf_t; 175 176 177 178 /* conv_cap_val_buf() */ 179 typedef union { 180 Conv32_inv_buf_t inv_buf; 181 Conv32_cap_val_hw1_buf_t cap_val_hw1_buf; 182 Conv32_cap_val_sf1_buf_t cap_val_sf1_buf; 183 } Conv32_cap_val_buf_t; 184 185 typedef union { 186 Conv64_inv_buf_t inv_buf; 187 Conv64_cap_val_hw1_buf_t cap_val_hw1_buf; 188 Conv64_cap_val_sf1_buf_t cap_val_sf1_buf; 189 } Conv64_cap_val_buf_t; 190 191 192 /* conv_config_feat() */ 193 #define CONV_CONFIG_FEAT_BUFSIZE 195 194 195 typedef union { 196 Conv32_inv_buf_t inv_buf; 197 char buf[CONV_CONFIG_FEAT_BUFSIZE]; 198 } Conv32_config_feat_buf_t; 199 200 typedef union { 201 Conv64_inv_buf_t inv_buf; 202 char buf[CONV_CONFIG_FEAT_BUFSIZE]; 203 } Conv64_config_feat_buf_t; 204 205 206 /* conv_config_obj() */ 207 #define CONV_CONFIG_OBJ_BUFSIZE 154 208 209 typedef union { 210 Conv32_inv_buf_t inv_buf; 211 char buf[CONV_CONFIG_OBJ_BUFSIZE]; 212 } Conv32_config_obj_buf_t; 213 214 typedef union { 215 Conv64_inv_buf_t inv_buf; 216 char buf[CONV_CONFIG_OBJ_BUFSIZE]; 217 } Conv64_config_obj_buf_t; 218 219 220 /* conv_dl_mode() */ 221 #define CONV_DL_MODE_BUFSIZE 122 222 223 typedef union { 224 Conv32_inv_buf_t inv_buf; 225 char buf[CONV_DL_MODE_BUFSIZE]; 226 } Conv32_dl_mode_buf_t; 227 228 typedef union { 229 Conv64_inv_buf_t inv_buf; 230 char buf[CONV_DL_MODE_BUFSIZE]; 231 } Conv64_dl_mode_buf_t; 232 233 234 /* conv_dl_flag() */ 235 #define CONV_DL_FLAG_BUFSIZE 195 236 237 typedef union { 238 Conv32_inv_buf_t inv_buf; 239 char buf[CONV_DL_FLAG_BUFSIZE]; 240 } Conv32_dl_flag_buf_t; 241 242 typedef union { 243 Conv64_inv_buf_t inv_buf; 244 char buf[CONV_DL_FLAG_BUFSIZE]; 245 } Conv64_dl_flag_buf_t; 246 247 248 /* conv_grphdl_flags() */ 249 #define CONV_GRPHDL_FLAGS_BUFSIZE 80 250 251 typedef union { 252 Conv32_inv_buf_t inv_buf; 253 char buf[CONV_GRPHDL_FLAGS_BUFSIZE]; 254 } Conv32_grphdl_flags_buf_t; 255 256 typedef union { 257 Conv64_inv_buf_t inv_buf; 258 char buf[CONV_GRPHDL_FLAGS_BUFSIZE]; 259 } Conv64_grphdl_flags_buf_t; 260 261 262 /* conv_grpdesc_flags() */ 263 #define CONV_GRPDESC_FLAGS_BUFSIZE 80 264 265 typedef union { 266 Conv32_inv_buf_t inv_buf; 267 char buf[CONV_GRPDESC_FLAGS_BUFSIZE]; 268 } Conv32_grpdesc_flags_buf_t; 269 270 typedef union { 271 Conv64_inv_buf_t inv_buf; 272 char buf[CONV_GRPDESC_FLAGS_BUFSIZE]; 273 } Conv64_grpdesc_flags_buf_t; 274 275 276 /* conv_seg_flags() */ 277 #define CONV_SEG_FLAGS_BUFSIZE 186 278 279 typedef union { 280 Conv32_inv_buf_t inv_buf; 281 char buf[CONV_SEG_FLAGS_BUFSIZE]; 282 } Conv32_seg_flags_buf_t; 283 284 typedef union { 285 Conv64_inv_buf_t inv_buf; 286 char buf[CONV_SEG_FLAGS_BUFSIZE]; 287 } Conv64_seg_flags_buf_t; 288 289 290 /* conv_dyn_posflag1() */ 291 #define CONF_DYN_POSFLAG1_BASE_BUFSIZE 23 292 #define CONV32_DYN_POSFLAG1_BUFSIZE \ 293 (CONF_DYN_POSFLAG1_BASE_BUFSIZE + CONV32_INV_BUFSIZE) 294 typedef union { 295 Conv32_inv_buf_t inv_buf; 296 char buf[CONV32_DYN_POSFLAG1_BUFSIZE]; 297 } Conv32_dyn_posflag1_buf_t; 298 299 #define CONV64_DYN_POSFLAG1_BUFSIZE \ 300 (CONF_DYN_POSFLAG1_BASE_BUFSIZE + CONV64_INV_BUFSIZE) 301 typedef union { 302 Conv64_inv_buf_t inv_buf; 303 char buf[CONV64_DYN_POSFLAG1_BUFSIZE]; 304 } Conv64_dyn_posflag1_buf_t; 305 306 307 /* conv_dyn_flag() */ 308 #define CONF_DYN_FLAG_BASE_BUFSIZE 48 309 #define CONV32_DYN_FLAG_BUFSIZE \ 310 (CONF_DYN_FLAG_BASE_BUFSIZE + CONV32_INV_BUFSIZE) 311 typedef union { 312 Conv32_inv_buf_t inv_buf; 313 char buf[CONV32_DYN_FLAG_BUFSIZE]; 314 } Conv32_dyn_flag_buf_t; 315 316 #define CONV64_DYN_FLAG_BUFSIZE \ 317 (CONF_DYN_FLAG_BASE_BUFSIZE + CONV64_INV_BUFSIZE) 318 typedef union { 319 Conv64_inv_buf_t inv_buf; 320 char buf[CONV64_DYN_FLAG_BUFSIZE]; 321 } Conv64_dyn_flag_buf_t; 322 323 324 /* conv_dyn_flag1() */ 325 #define CONF_DYN_FLAG1_BASE_BUFSIZE 223 326 #define CONV32_DYN_FLAG1_BUFSIZE \ 327 (CONF_DYN_FLAG1_BASE_BUFSIZE + CONV32_INV_BUFSIZE) 328 typedef union { 329 Conv32_inv_buf_t inv_buf; 330 char buf[CONV32_DYN_FLAG1_BUFSIZE]; 331 } Conv32_dyn_flag1_buf_t; 332 333 #define CONV64_DYN_FLAG1_BUFSIZE \ 334 (CONF_DYN_FLAG1_BASE_BUFSIZE + CONV64_INV_BUFSIZE) 335 typedef union { 336 Conv64_inv_buf_t inv_buf; 337 char buf[CONV64_DYN_FLAG1_BUFSIZE]; 338 } Conv64_dyn_flag1_buf_t; 339 340 341 /* conv_dyn_feature1() */ 342 #define CONF_DYN_FEATURE1_BASE_BUFSIZE 20 343 #define CONV32_DYN_FEATURE1_BUFSIZE \ 344 (CONF_DYN_FEATURE1_BASE_BUFSIZE + CONV32_INV_BUFSIZE) 345 typedef union { 346 Conv32_inv_buf_t inv_buf; 347 char buf[CONV32_DYN_FEATURE1_BUFSIZE]; 348 } Conv32_dyn_feature1_buf_t; 349 350 #define CONV64_DYN_FEATURE1_BUFSIZE \ 351 (CONF_DYN_FEATURE1_BASE_BUFSIZE + CONV64_INV_BUFSIZE) 352 typedef union { 353 Conv64_inv_buf_t inv_buf; 354 char buf[CONV64_DYN_FEATURE1_BUFSIZE]; 355 } Conv64_dyn_feature1_buf_t; 356 357 358 /* conv_bnd_type() */ 359 #define CONF_BND_TYPE_BASE_BUFSIZE 29 360 #define CONV32_BND_TYPE_BUFSIZE \ 361 (CONF_BND_TYPE_BASE_BUFSIZE + CONV32_INV_BUFSIZE) 362 typedef union { 363 Conv32_inv_buf_t inv_buf; 364 char buf[CONV32_BND_TYPE_BUFSIZE]; 365 } Conv32_bnd_type_buf_t; 366 367 #define CONV64_BND_TYPE_BUFSIZE \ 368 (CONF_BND_TYPE_BASE_BUFSIZE + CONV64_INV_BUFSIZE) 369 typedef union { 370 Conv64_inv_buf_t inv_buf; 371 char buf[CONV64_BND_TYPE_BUFSIZE]; 372 } Conv64_bnd_type_buf_t; 373 374 375 /* conv_bnd_obj() */ 376 #define CONF_BND_OBJ_BASE_BUFSIZE 38 377 #define CONV32_BND_OBJ_BUFSIZE \ 378 (CONF_BND_OBJ_BASE_BUFSIZE + CONV32_INV_BUFSIZE) 379 typedef union { 380 Conv32_inv_buf_t inv_buf; 381 char buf[CONV32_BND_OBJ_BUFSIZE]; 382 } Conv32_bnd_obj_buf_t; 383 384 #define CONV64_BND_OBJ_BUFSIZE \ 385 (CONF_BND_OBJ_BASE_BUFSIZE + CONV64_INV_BUFSIZE) 386 typedef union { 387 Conv64_inv_buf_t inv_buf; 388 char buf[CONV64_BND_OBJ_BUFSIZE]; 389 } Conv64_bnd_obj_buf_t; 390 391 392 /* conv_phdr_flags() */ 393 #define CONF_PHDR_FLAGS_BASE_BUFSIZE 35 394 #define CONV32_PHDR_FLAGS_BUFSIZE \ 395 (CONF_PHDR_FLAGS_BASE_BUFSIZE + CONV32_INV_BUFSIZE) 396 typedef union { 397 Conv32_inv_buf_t inv_buf; 398 char buf[CONV32_PHDR_FLAGS_BUFSIZE]; 399 } Conv32_phdr_flags_buf_t; 400 401 #define CONV64_PHDR_FLAGS_BUFSIZE \ 402 (CONF_PHDR_FLAGS_BASE_BUFSIZE + CONV64_INV_BUFSIZE) 403 typedef union { 404 Conv64_inv_buf_t inv_buf; 405 char buf[CONV64_PHDR_FLAGS_BUFSIZE]; 406 } Conv64_phdr_flags_buf_t; 407 408 409 /* conv_sec_flags() */ 410 #define CONF_SEC_FLAGS_BASE_BUFSIZE 168 411 #define CONV32_SEC_FLAGS_BUFSIZE \ 412 (CONF_SEC_FLAGS_BASE_BUFSIZE + CONV32_INV_BUFSIZE) 413 typedef union { 414 Conv32_inv_buf_t inv_buf; 415 char buf[CONV32_SEC_FLAGS_BUFSIZE]; 416 } Conv32_sec_flags_buf_t; 417 418 #define CONV64_SEC_FLAGS_BUFSIZE \ 419 (CONF_SEC_FLAGS_BASE_BUFSIZE + CONV64_INV_BUFSIZE) 420 typedef union { 421 Conv64_inv_buf_t inv_buf; 422 char buf[CONV64_SEC_FLAGS_BUFSIZE]; 423 } Conv64_sec_flags_buf_t; 424 425 426 /* conv_dwarf_ehe() */ 427 #define CONV_DWARF_EHE_BUFSIZE 33 428 typedef union { 429 Conv32_inv_buf_t inv_buf; 430 char buf[CONV_DWARF_EHE_BUFSIZE]; 431 } Conv32_dwarf_ehe_buf_t; 432 typedef union { 433 Conv64_inv_buf_t inv_buf; 434 char buf[CONV_DWARF_EHE_BUFSIZE]; 435 } Conv64_dwarf_ehe_buf_t; 436 437 438 439 /* 440 * Generic names for class specific buffer types above 441 */ 442 #if defined(_ELF64) 443 #define CONV_INV_BUFSIZE CONV64_INV_BUFSIZE 444 #define CONV_EHDR_FLAGS_BUFSIZE CONV64_EHDR_FLAGS_BUFSIZE 445 #define CONV_DYN_POSFLAG1_BUFSIZE CONV64_DYN_POSFLAG1_BUFSIZE 446 #define CONV_DYN_FLAG_BUFSIZE CONV64_DYN_FLAG_BUFSIZE 447 #define CONV_DYN_FLAG1_BUFSIZE CONV64_DYN_FLAG1_BUFSIZE 448 #define CONV_DYN_FEATURE1_BUFSIZE CONV64_DYN_FEATURE1_BUFSIZE 449 #define CONV_BND_TYPE_BUFSIZE CONV64_BND_TYPE_BUFSIZE 450 #define CONV_BND_OBJ_BUFSIZE CONV64_BND_OBJ_BUFSIZE 451 #define CONV_PHDR_FLAGS_BUFSIZE CONV64_PHDR_FLAGS_BUFSIZE 452 #define CONV_SEC_FLAGS_BUFSIZE CONV64_SEC_FLAGS_BUFSIZE 453 454 #define Conv_inv_buf_t Conv64_inv_buf_t 455 #define Conv_ehdr_flags_buf_t Conv64_ehdr_flags_buf_t 456 #define Conv_reject_desc_buf_t Conv64_reject_desc_buf_t 457 #define Conv_cap_val_hw1_buf_t Conv64_cap_val_hw1_buf_t 458 #define Conv_cap_val_sf1_buf_t Conv64_cap_val_sf1_buf_t 459 #define Conv_cap_val_buf_t Conv64_cap_val_buf_t 460 #define Conv_config_feat_buf_t Conv64_config_feat_buf_t 461 #define Conv_config_obj_buf_t Conv64_config_obj_buf_t 462 #define Conv_dl_mode_buf_t Conv64_dl_mode_buf_t 463 #define Conv_dl_flag_buf_t Conv64_dl_flag_buf_t 464 #define Conv_grphdl_flags_buf_t Conv64_grphdl_flags_buf_t 465 #define Conv_grpdesc_flags_buf_t Conv64_grpdesc_flags_buf_t 466 #define Conv_seg_flags_buf_t Conv64_seg_flags_buf_t 467 #define Conv_dyn_posflag1_buf_t Conv64_dyn_posflag1_buf_t 468 #define Conv_dyn_flag_buf_t Conv64_dyn_flag_buf_t 469 #define Conv_dyn_flag1_buf_t Conv64_dyn_flag1_buf_t 470 #define Conv_dyn_feature1_buf_t Conv64_dyn_feature1_buf_t 471 #define Conv_bnd_type_buf_t Conv64_bnd_type_buf_t 472 #define Conv_bnd_obj_buf_t Conv64_bnd_obj_buf_t 473 #define Conv_phdr_flags_buf_t Conv64_phdr_flags_buf_t 474 #define Conv_sec_flags_buf_t Conv64_sec_flags_buf_t 475 #define Conv_dwarf_ehe_buf_t Conv64_dwarf_ehe_buf_t 476 #else 477 #define CONV_INV_BUFSIZE CONV32_INV_BUFSIZE 478 #define CONV_EHDR_FLAGS_BUFSIZE CONV32_EHDR_FLAGS_BUFSIZE 479 #define CONV_DYN_POSFLAG1_BUFSIZE CONV32_DYN_POSFLAG1_BUFSIZE 480 #define CONV_DYN_FLAG_BUFSIZE CONV32_DYN_FLAG_BUFSIZE 481 #define CONV_DYN_FLAG1_BUFSIZE CONV32_DYN_FLAG1_BUFSIZE 482 #define CONV_DYN_FEATURE1_BUFSIZE CONV32_DYN_FEATURE1_BUFSIZE 483 #define CONV_BND_TYPE_BUFSIZE CONV32_BND_TYPE_BUFSIZE 484 #define CONV_BND_OBJ_BUFSIZE CONV32_BND_OBJ_BUFSIZE 485 #define CONV_PHDR_FLAGS_BUFSIZE CONV32_PHDR_FLAGS_BUFSIZE 486 #define CONV_SEC_FLAGS_BUFSIZE CONV32_SEC_FLAGS_BUFSIZE 487 488 #define Conv_inv_buf_t Conv32_inv_buf_t 489 #define Conv_ehdr_flags_buf_t Conv32_ehdr_flags_buf_t 490 #define Conv_reject_desc_buf_t Conv32_reject_desc_buf_t 491 #define Conv_cap_val_hw1_buf_t Conv32_cap_val_hw1_buf_t 492 #define Conv_cap_val_sf1_buf_t Conv32_cap_val_sf1_buf_t 493 #define Conv_cap_val_buf_t Conv32_cap_val_buf_t 494 #define Conv_config_feat_buf_t Conv32_config_feat_buf_t 495 #define Conv_config_obj_buf_t Conv32_config_obj_buf_t 496 #define Conv_dl_mode_buf_t Conv32_dl_mode_buf_t 497 #define Conv_dl_flag_buf_t Conv32_dl_flag_buf_t 498 #define Conv_grphdl_flags_buf_t Conv32_grphdl_flags_buf_t 499 #define Conv_grpdesc_flags_buf_t Conv32_grpdesc_flags_buf_t 500 #define Conv_seg_flags_buf_t Conv32_seg_flags_buf_t 501 #define Conv_dyn_posflag1_buf_t Conv32_dyn_posflag1_buf_t 502 #define Conv_dyn_flag_buf_t Conv32_dyn_flag_buf_t 503 #define Conv_dyn_flag1_buf_t Conv32_dyn_flag1_buf_t 504 #define Conv_dyn_feature1_buf_t Conv32_dyn_feature1_buf_t 505 #define Conv_bnd_type_buf_t Conv32_bnd_type_buf_t 506 #define Conv_bnd_obj_buf_t Conv32_bnd_obj_buf_t 507 #define Conv_phdr_flags_buf_t Conv32_phdr_flags_buf_t 508 #define Conv_sec_flags_buf_t Conv32_sec_flags_buf_t 509 #define Conv_dwarf_ehe_buf_t Conv32_dwarf_ehe_buf_t 510 #endif 511 512 513 514 515 /* 516 * Flags that alter standard formatting for conversion routines. 517 */ 518 #define CONV_FMT_DECIMAL 0x01 /* conv_invalid_val() should print */ 519 /* integer print as decimal */ 520 /* (default is hex) */ 521 #define CONV_FMT_SPACE 0x02 /* conv_invalid_val() should append */ 522 /* a space after the number. */ 523 #define CONV_FMT_ALTDUMP 0x04 /* Output strings using the versions */ 524 /* used by the dump program. */ 525 #define CONV_FMT_ALTFILE 0x08 /* Output strings in the form used */ 526 /* by the file(1) command */ 527 #define CONV_FMT_ALTCRLE 0x10 /* Output strings in the form used */ 528 /* by the crle(1) command */ 529 530 /* 531 * Mask of CONV_FMT bits that reflect a desire to use alternate strings. 532 */ 533 #define CONV_FMTALTMASK (CONV_FMT_ALTDUMP | CONV_FMT_ALTFILE) 534 535 /* 536 * The expansion of bit-field data items is driven from a value descriptor and 537 * the conv_expn_field() routine. 538 */ 539 typedef struct { 540 Xword v_val; /* expansion value */ 541 const char *v_msg; /* associated message string */ 542 } Val_desc; 543 544 /* 545 * conv_expn_field() is willing to supply default strings for the 546 * prefix, separator, and suffix arguments, if they are passed as NULL. 547 * The caller needs to know how much room to allow for these items. 548 * These values supply those sizes. 549 */ 550 #define CONV_EXPN_FIELD_DEF_PREFIX_SIZE 2 /* Default is "[ " */ 551 #define CONV_EXPN_FIELD_DEF_SEP_SIZE 1 /* Default is " " */ 552 #define CONV_EXPN_FIELD_DEF_SUFFIX_SIZE 2 /* Default is " ]" */ 553 554 /* 555 * conv_expn_field() requires a large number of inputs, many of which 556 * can be NULL to accept default behavior. An argument of the following 557 * type is used to supply them. 558 */ 559 typedef struct { 560 char *buf; /* Buffer to receive generated string */ 561 size_t bufsize; /* sizeof(buf) */ 562 const Val_desc *vdp; /* Array of value descriptors, giving the */ 563 /* possible bit values, and their */ 564 /* corresponding strings. Note that the */ 565 /* final element must contain only NULL */ 566 /* values. This terminates the list. */ 567 const char **lead_str; /* NULL, or array of pointers to strings to */ 568 /* be output at the head of the list. */ 569 /* Last entry must be NULL. */ 570 Xword oflags; /* Bits for which output strings are desired */ 571 Xword rflags; /* Bits for which a numeric value should be */ 572 /* output if vdp does not provide str. */ 573 /* Must be a proper subset of oflags */ 574 const char *prefix; /* NULL, or string to prefix output with */ 575 /* If NULL, "[ " is used. */ 576 const char *sep; /* NULL, or string to separate output items */ 577 /* with. If NULL, " " is used. */ 578 const char *suffix; /* NULL, or string to suffix output with */ 579 /* If NULL, " ]" is used. */ 580 } CONV_EXPN_FIELD_ARG; 581 582 /* 583 * Define all generic interfaces. 584 */ 585 extern uchar_t conv_check_native(char **, char **); 586 extern const char *conv_config_feat(int, Conv_config_feat_buf_t *); 587 extern const char *conv_config_obj(ushort_t, Conv_config_obj_buf_t *); 588 extern const char *conv_config_upm(const char *, const char *, 589 const char *, size_t); 590 extern const char *conv_def_tag(Symref, Conv_inv_buf_t *); 591 extern const char *conv_demangle_name(const char *); 592 extern const char *conv_dl_flag(int, int, Conv_dl_flag_buf_t *); 593 extern const char *conv_dl_mode(int, int, Conv_dl_mode_buf_t *); 594 extern const char *conv_dwarf_ehe(uint_t, Conv_dwarf_ehe_buf_t *); 595 extern const char *conv_elfdata_type(Elf_Type, Conv_inv_buf_t *); 596 extern const char *conv_grphdl_flags(uint_t, Conv_grphdl_flags_buf_t *); 597 extern const char *conv_grpdesc_flags(uint_t, Conv_grpdesc_flags_buf_t *); 598 extern Isa_desc *conv_isalist(void); 599 extern const char *conv_lddstub(int); 600 extern const char *conv_seg_flags(Half, Conv_seg_flags_buf_t *); 601 extern int conv_sys_eclass(); 602 extern Uts_desc *conv_uts(void); 603 extern const char *conv_ver_flags(Half); 604 extern const char *conv_ver_index(Versym, int, Conv_inv_buf_t *); 605 606 607 /* 608 * Define all class specific routines. 609 */ 610 #if defined(_ELF64) 611 #define conv_bnd_obj conv64_bnd_obj 612 #define conv_bnd_type conv64_bnd_type 613 #define conv_cap_tag conv64_cap_tag 614 #define conv_cap_val conv64_cap_val 615 #define conv_cap_val_hw1 conv64_cap_val_hw1 616 #define conv_cap_val_sf1 conv64_cap_val_sf1 617 #define conv_dyn_feature1 conv64_dyn_feature1 618 #define conv_dyn_flag1 conv64_dyn_flag1 619 #define conv_dyn_flag conv64_dyn_flag 620 #define conv_dyn_posflag1 conv64_dyn_posflag1 621 #define conv_dyn_tag conv64_dyn_tag 622 #define conv_ehdr_class conv64_ehdr_class 623 #define conv_ehdr_data conv64_ehdr_data 624 #define conv_ehdr_flags conv64_ehdr_flags 625 #define conv_ehdr_mach conv64_ehdr_mach 626 #define conv_ehdr_osabi conv64_ehdr_osabi 627 #define conv_ehdr_type conv64_ehdr_type 628 #define conv_ehdr_vers conv64_ehdr_vers 629 #define conv_expn_field conv64_expn_field 630 #define conv_invalid_val conv64_invalid_val 631 #define conv_phdr_flags conv64_phdr_flags 632 #define conv_phdr_type conv64_phdr_type 633 #define conv_reject_desc conv64_reject_desc 634 #define conv_reloc_type conv64_reloc_type 635 #define conv_reloc_type_static conv64_reloc_type_static 636 #define conv_reloc_386_type conv64_reloc_386_type 637 #define conv_reloc_amd64_type conv64_reloc_amd64_type 638 #define conv_reloc_SPARC_type conv64_reloc_SPARC_type 639 #define conv_sec_flags conv64_sec_flags 640 #define conv_sec_linkinfo conv64_sec_linkinfo 641 #define conv_sec_type conv64_sec_type 642 #define conv_sym_info_bind conv64_sym_info_bind 643 #define conv_sym_info_type conv64_sym_info_type 644 #define conv_sym_shndx conv64_sym_shndx 645 #define conv_sym_other conv64_sym_other 646 #define conv_sym_value conv64_sym_value 647 #define conv_sym_SPARC_value conv64_sym_SPARC_value 648 #else 649 #define conv_bnd_obj conv32_bnd_obj 650 #define conv_bnd_type conv32_bnd_type 651 #define conv_cap_tag conv32_cap_tag 652 #define conv_cap_val conv32_cap_val 653 #define conv_cap_val_hw1 conv32_cap_val_hw1 654 #define conv_cap_val_sf1 conv32_cap_val_sf1 655 #define conv_dyn_feature1 conv32_dyn_feature1 656 #define conv_dyn_flag1 conv32_dyn_flag1 657 #define conv_dyn_flag conv32_dyn_flag 658 #define conv_dyn_posflag1 conv32_dyn_posflag1 659 #define conv_dyn_tag conv32_dyn_tag 660 #define conv_ehdr_class conv32_ehdr_class 661 #define conv_ehdr_data conv32_ehdr_data 662 #define conv_ehdr_flags conv32_ehdr_flags 663 #define conv_ehdr_mach conv32_ehdr_mach 664 #define conv_ehdr_osabi conv32_ehdr_osabi 665 #define conv_ehdr_type conv32_ehdr_type 666 #define conv_ehdr_vers conv32_ehdr_vers 667 #define conv_expn_field conv32_expn_field 668 #define conv_invalid_val conv32_invalid_val 669 #define conv_phdr_flags conv32_phdr_flags 670 #define conv_phdr_type conv32_phdr_type 671 #define conv_reject_desc conv32_reject_desc 672 #define conv_reloc_type conv32_reloc_type 673 #define conv_reloc_type_static conv32_reloc_type_static 674 #define conv_reloc_386_type conv32_reloc_386_type 675 #define conv_reloc_amd64_type conv32_reloc_amd64_type 676 #define conv_reloc_SPARC_type conv32_reloc_SPARC_type 677 #define conv_sec_flags conv32_sec_flags 678 #define conv_sec_linkinfo conv32_sec_linkinfo 679 #define conv_sec_type conv32_sec_type 680 #define conv_sym_info_bind conv32_sym_info_bind 681 #define conv_sym_info_type conv32_sym_info_type 682 #define conv_sym_shndx conv32_sym_shndx 683 #define conv_sym_other conv32_sym_other 684 #define conv_sym_value conv32_sym_value 685 #define conv_sym_SPARC_value conv32_sym_SPARC_value 686 #endif 687 688 extern const char *conv_bnd_obj(uint_t, Conv_bnd_obj_buf_t *); 689 extern const char *conv_bnd_type(uint_t, Conv_bnd_type_buf_t *); 690 extern const char *conv_cap_tag(Xword, Conv_inv_buf_t *); 691 extern const char *conv_cap_val(Xword, Xword, Half, Conv_cap_val_buf_t *); 692 extern const char *conv_cap_val_hw1(Xword, Half, 693 Conv_cap_val_hw1_buf_t *); 694 extern const char *conv_cap_val_sf1(Xword, Half, 695 Conv_cap_val_sf1_buf_t *); 696 extern const char *conv_dyn_flag1(Xword, Conv_dyn_flag1_buf_t *); 697 extern const char *conv_dyn_flag(Xword, int, Conv_dyn_flag_buf_t *); 698 extern const char *conv_dyn_posflag1(Xword, int, 699 Conv_dyn_posflag1_buf_t *); 700 extern const char *conv_dyn_tag(Xword, Half, int, Conv_inv_buf_t *); 701 extern const char *conv_dyn_feature1(Xword, int, 702 Conv_dyn_feature1_buf_t *); 703 extern const char *conv_ehdr_class(uchar_t, int, Conv_inv_buf_t *); 704 extern const char *conv_ehdr_data(uchar_t, int, Conv_inv_buf_t *); 705 extern const char *conv_ehdr_flags(Half, Word, Conv_ehdr_flags_buf_t *); 706 extern const char *conv_ehdr_mach(Half, int, Conv_inv_buf_t *); 707 extern const char *conv_ehdr_osabi(uchar_t, int, Conv_inv_buf_t *); 708 extern const char *conv_ehdr_type(Half, int, Conv_inv_buf_t *); 709 extern const char *conv_ehdr_vers(Word, int, Conv_inv_buf_t *); 710 extern int conv_expn_field(CONV_EXPN_FIELD_ARG *); 711 extern const char *conv_invalid_val(Conv_inv_buf_t *, Xword, int); 712 extern const char *conv_phdr_flags(Word, Conv_phdr_flags_buf_t *); 713 extern const char *conv_phdr_type(Half, Word, int, Conv_inv_buf_t *); 714 extern const char *conv_reject_desc(Rej_desc *, Conv_reject_desc_buf_t *); 715 extern const char *conv_reloc_type(Half, Word, int, Conv_inv_buf_t *); 716 extern const char *conv_reloc_type_static(Half, Word, int); 717 extern const char *conv_reloc_386_type(Word, int, Conv_inv_buf_t *); 718 extern const char *conv_reloc_amd64_type(Word, int, Conv_inv_buf_t *); 719 extern const char *conv_reloc_SPARC_type(Word, int, Conv_inv_buf_t *); 720 extern const char *conv_sec_flags(Xword, Conv_sec_flags_buf_t *); 721 extern const char *conv_sec_linkinfo(Word, Xword, Conv_inv_buf_t *); 722 extern const char *conv_sec_type(Half, Word, int, Conv_inv_buf_t *); 723 extern const char *conv_sym_info_bind(uchar_t, int, Conv_inv_buf_t *); 724 extern const char *conv_sym_info_type(Half, uchar_t, int, 725 Conv_inv_buf_t *); 726 extern const char *conv_sym_shndx(Half, Conv_inv_buf_t *); 727 extern const char *conv_sym_other(uchar_t, Conv_inv_buf_t *); 728 extern const char *conv_sym_value(Half, uchar_t, Addr, Conv_inv_buf_t *); 729 extern const char *conv_sym_SPARC_value(Addr, int, Conv_inv_buf_t *); 730 731 #ifdef __cplusplus 732 } 733 #endif 734 735 #endif /* _CONV_H */ 736