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 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #include <stdio.h> 28 #include <dlfcn.h> 29 #include "msg.h" 30 #include "_debug.h" 31 #include "libld.h" 32 33 #if !(defined(_ELF64)) 34 35 void 36 Dbg_syms_lookup_aout(Lm_list *lml, const char *name) 37 { 38 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 39 return; 40 41 dbg_print(lml, MSG_INTL(MSG_SYM_AOUT), Dbg_demangle_name(name)); 42 } 43 44 #endif 45 46 void 47 Dbg_syms_lookup(Rt_map *lmp, const char *name, const char *type) 48 { 49 Lm_list *lml = LIST(lmp); 50 51 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 52 return; 53 54 dbg_print(lml, MSG_INTL(MSG_SYM_LOOKUP), Dbg_demangle_name(name), 55 NAME(lmp), type); 56 } 57 58 void 59 Dbg_syms_ignore_gnuver(Rt_map *lmp, const char *name, Word symndx, 60 Versym verndx) 61 { 62 Lm_list *lml = LIST(lmp); 63 64 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 65 return; 66 67 dbg_print(lml, MSG_INTL(MSG_SYM_IGNGNUVER), Dbg_demangle_name(name), 68 EC_WORD(symndx), EC_HALF(verndx), NAME(lmp)); 69 } 70 71 void 72 Dbg_syms_dlsym(Rt_map *clmp, const char *sym, int *in_nfavl, const char *next, 73 int flag) 74 { 75 const char *str, *retry, *from = NAME(clmp); 76 Lm_list *lml = LIST(clmp); 77 78 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 79 return; 80 81 /* 82 * The core functionality of dlsym() can be called twice. The first 83 * attempt can be affected by path names that exist in the "not-found" 84 * AVL tree. Should a "not-found" path name be found, a second attempt 85 * is made to locate the required file (in_nfavl is NULL). This fall- 86 * back provides for file system changes while a process executes. 87 */ 88 if (in_nfavl) 89 retry = MSG_ORIG(MSG_STR_EMPTY); 90 else 91 retry = MSG_INTL(MSG_STR_RETRY); 92 93 switch (flag) { 94 case DBG_DLSYM_NEXT: 95 str = MSG_ORIG(MSG_SYM_NEXT); 96 break; 97 case DBG_DLSYM_DEFAULT: 98 str = MSG_ORIG(MSG_SYM_DEFAULT); 99 break; 100 case DBG_DLSYM_SELF: 101 str = MSG_ORIG(MSG_SYM_SELF); 102 break; 103 case DBG_DLSYM_PROBE: 104 str = MSG_ORIG(MSG_SYM_PROBE); 105 break; 106 case DBG_DLSYM_SINGLETON: 107 str = MSG_ORIG(MSG_SYM_SINGLETON); 108 break; 109 default: 110 str = MSG_ORIG(MSG_STR_EMPTY); 111 } 112 113 Dbg_util_nl(lml, DBG_NL_STD); 114 if (next == 0) 115 dbg_print(lml, MSG_INTL(MSG_SYM_DLSYM_1), 116 Dbg_demangle_name(sym), from, retry, str); 117 else 118 dbg_print(lml, MSG_INTL(MSG_SYM_DLSYM_2), 119 Dbg_demangle_name(sym), from, next, retry, str); 120 } 121 122 void 123 Dbg_syms_lazy_rescan(Lm_list *lml, const char *name) 124 { 125 if (DBG_NOTCLASS(DBG_C_SYMBOLS | DBG_C_FILES)) 126 return; 127 128 Dbg_util_nl(lml, DBG_NL_STD); 129 dbg_print(lml, MSG_INTL(MSG_SYM_LAZY_RESCAN), Dbg_demangle_name(name)); 130 } 131 132 void 133 Dbg_syms_ar_title(Lm_list *lml, const char *file, int again) 134 { 135 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 136 return; 137 138 Dbg_util_nl(lml, DBG_NL_STD); 139 dbg_print(lml, MSG_INTL(MSG_SYM_AR_FILE), file, 140 again ? MSG_INTL(MSG_STR_AGAIN) : MSG_ORIG(MSG_STR_EMPTY)); 141 } 142 143 void 144 Dbg_syms_ar_entry(Lm_list *lml, Xword ndx, Elf_Arsym *arsym) 145 { 146 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 147 return; 148 149 dbg_print(lml, MSG_INTL(MSG_SYM_AR_ENTRY), EC_XWORD(ndx), 150 Dbg_demangle_name(arsym->as_name)); 151 } 152 153 void 154 Dbg_syms_ar_checking(Lm_list *lml, Xword ndx, Elf_Arsym *arsym, 155 const char *name) 156 { 157 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 158 return; 159 160 dbg_print(lml, MSG_INTL(MSG_SYM_AR_CHECK), EC_XWORD(ndx), 161 Dbg_demangle_name(arsym->as_name), name); 162 } 163 164 void 165 Dbg_syms_ar_resolve(Lm_list *lml, Xword ndx, Elf_Arsym *arsym, 166 const char *fname, int flag) 167 { 168 const char *fmt; 169 170 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 171 return; 172 173 if (flag) 174 fmt = MSG_INTL(MSG_SYM_AR_FORCEDEXRT); 175 else 176 fmt = MSG_INTL(MSG_SYM_AR_RESOLVE); 177 178 dbg_print(lml, fmt, EC_XWORD(ndx), Dbg_demangle_name(arsym->as_name), 179 fname); 180 } 181 182 void 183 Dbg_syms_spec_title(Lm_list *lml) 184 { 185 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 186 return; 187 188 Dbg_util_nl(lml, DBG_NL_STD); 189 dbg_print(lml, MSG_INTL(MSG_SYM_SPECIAL)); 190 } 191 192 void 193 Dbg_syms_discarded(Lm_list *lml, Sym_desc *sdp) 194 { 195 dbg_isec_name_buf_t buf; 196 char *alloc_mem; 197 const char *file; 198 199 if (DBG_NOTCLASS(DBG_C_SYMBOLS | DBG_C_UNUSED)) 200 return; 201 if (DBG_NOTDETAIL()) 202 return; 203 204 if ((sdp->sd_file == NULL) || ((file = sdp->sd_file->ifl_name) == NULL)) 205 file = MSG_INTL(MSG_STR_UNKNOWN); 206 207 if (sdp->sd_isc) { 208 dbg_print(lml, MSG_INTL(MSG_SYM_DISCARD_SEC), 209 Dbg_demangle_name(sdp->sd_name), 210 dbg_fmt_isec_name(sdp->sd_isc, buf, &alloc_mem), file); 211 if (alloc_mem != NULL) 212 free(alloc_mem); 213 } else 214 dbg_print(lml, MSG_INTL(MSG_SYM_DISCARD_FILE), 215 Dbg_demangle_name(sdp->sd_name), file); 216 } 217 218 void 219 Dbg_syms_dup_discarded(Lm_list *lml, Word ndx, Sym_desc *sdp) 220 { 221 const char *file; 222 223 if (DBG_NOTCLASS(DBG_C_SYMBOLS | DBG_C_UNUSED)) 224 return; 225 if (DBG_NOTDETAIL()) 226 return; 227 228 if ((sdp->sd_file == NULL) || ((file = sdp->sd_file->ifl_name) == NULL)) 229 file = MSG_INTL(MSG_STR_UNKNOWN); 230 231 dbg_print(lml, MSG_INTL(MSG_SYM_DISCARD_DUP), EC_WORD(ndx), 232 Dbg_demangle_name(sdp->sd_name), file); 233 } 234 235 void 236 Dbg_syms_entered(Ofl_desc *ofl, Sym *sym, Sym_desc *sdp) 237 { 238 Conv_inv_buf_t inv_buf; 239 Lm_list *lml = ofl->ofl_lml; 240 241 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 242 return; 243 if (DBG_NOTDETAIL()) 244 return; 245 246 Elf_syms_table_entry(lml, ELF_DBG_LD, MSG_INTL(MSG_STR_ENTERED), 247 ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, sym, 248 sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 249 conv_def_tag(sdp->sd_ref, &inv_buf)); 250 } 251 252 void 253 Dbg_syms_process(Lm_list *lml, Ifl_desc *ifl) 254 { 255 Conv_inv_buf_t inv_buf; 256 257 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 258 return; 259 260 Dbg_util_nl(lml, DBG_NL_STD); 261 dbg_print(lml, MSG_INTL(MSG_SYM_PROCESS), ifl->ifl_name, 262 conv_ehdr_type(ifl->ifl_ehdr->e_ident[EI_OSABI], 263 ifl->ifl_ehdr->e_type, 0, &inv_buf)); 264 } 265 266 void 267 Dbg_syms_entry(Lm_list *lml, Word ndx, Sym_desc *sdp) 268 { 269 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 270 return; 271 272 dbg_print(lml, MSG_INTL(MSG_SYM_BASIC), EC_WORD(ndx), 273 Dbg_demangle_name(sdp->sd_name)); 274 } 275 276 void 277 Dbg_syms_global(Lm_list *lml, Word ndx, const char *name) 278 { 279 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 280 return; 281 282 dbg_print(lml, MSG_INTL(MSG_SYM_ADDING), EC_WORD(ndx), 283 Dbg_demangle_name(name)); 284 } 285 286 void 287 Dbg_syms_wrap(Lm_list *lml, Word ndx, const char *orig_name, const char *name) 288 { 289 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 290 return; 291 292 dbg_print(lml, MSG_INTL(MSG_SYM_WRAP), EC_WORD(ndx), 293 Dbg_demangle_name(orig_name), Dbg_demangle_name(name)); 294 } 295 296 void 297 Dbg_syms_sec_title(Lm_list *lml) 298 { 299 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 300 return; 301 if (DBG_NOTDETAIL()) 302 return; 303 304 Dbg_util_nl(lml, DBG_NL_STD); 305 dbg_print(lml, MSG_INTL(MSG_SYM_INDEX)); 306 } 307 308 void 309 Dbg_syms_sec_entry(Lm_list *lml, Word ndx, Sg_desc *sgp, Os_desc *osp) 310 { 311 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 312 return; 313 if (DBG_NOTDETAIL()) 314 return; 315 316 dbg_print(lml, MSG_INTL(MSG_SYM_SECTION), EC_WORD(ndx), osp->os_name, 317 (*sgp->sg_name ? sgp->sg_name : MSG_INTL(MSG_STR_NULL))); 318 } 319 320 void 321 Dbg_syms_up_title(Lm_list *lml) 322 { 323 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 324 return; 325 if (DBG_NOTDETAIL()) 326 return; 327 328 Dbg_util_nl(lml, DBG_NL_STD); 329 dbg_print(lml, MSG_INTL(MSG_SYM_FINAL)); 330 Elf_syms_table_title(lml, ELF_DBG_LD); 331 } 332 333 void 334 Dbg_syms_ignore(Ofl_desc *ofl, Sym_desc *sdp) 335 { 336 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 337 return; 338 if (DBG_NOTDETAIL()) 339 return; 340 341 Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_IGNORE), 342 ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 343 sdp->sd_sym, 0, 0, NULL, MSG_INTL(MSG_STR_UNUSED)); 344 } 345 346 void 347 Dbg_syms_old(Ofl_desc *ofl, Sym_desc *sdp) 348 { 349 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 350 return; 351 if (DBG_NOTDETAIL()) 352 return; 353 354 Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_OLD), 355 ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 356 sdp->sd_sym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 357 0, NULL, sdp->sd_name); 358 } 359 360 void 361 Dbg_syms_new(Ofl_desc *ofl, Sym *sym, Sym_desc *sdp) 362 { 363 Conv_inv_buf_t inv_buf; 364 365 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 366 return; 367 if (DBG_NOTDETAIL()) 368 return; 369 370 Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_NEW), 371 ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, sym, 372 sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 373 conv_def_tag(sdp->sd_ref, &inv_buf)); 374 } 375 376 void 377 Dbg_syms_updated(Ofl_desc *ofl, Sym_desc *sdp, const char *name) 378 { 379 Conv_inv_buf_t inv_buf; 380 Lm_list *lml = ofl->ofl_lml; 381 382 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 383 return; 384 385 dbg_print(lml, MSG_INTL(MSG_SYM_UPDATE), name); 386 387 if (DBG_NOTDETAIL()) 388 return; 389 390 Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_ORIG(MSG_STR_EMPTY), 391 ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 392 sdp->sd_sym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 393 conv_def_tag(sdp->sd_ref, &inv_buf)); 394 } 395 396 void 397 Dbg_syms_created(Lm_list *lml, const char *name) 398 { 399 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 400 return; 401 402 dbg_print(lml, MSG_INTL(MSG_SYM_CREATE), Dbg_demangle_name(name)); 403 } 404 405 void 406 Dbg_syms_resolving(Ofl_desc *ofl, Word ndx, const char *name, int row, 407 int col, Sym *osym, Sym *nsym, Sym_desc *sdp, Ifl_desc *ifl) 408 { 409 Lm_list *lml = ofl->ofl_lml; 410 uchar_t osabi = ofl->ofl_dehdr->e_ident[EI_OSABI]; 411 Half mach = ofl->ofl_dehdr->e_machine; 412 413 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 414 return; 415 416 dbg_print(lml, MSG_INTL(MSG_SYM_RESOLVING), EC_WORD(ndx), 417 Dbg_demangle_name(name), row, col); 418 419 if (DBG_NOTDETAIL()) 420 return; 421 422 Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_OLD), 423 osabi, mach, osym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 424 0, NULL, sdp->sd_file->ifl_name); 425 426 Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_NEW), 427 osabi, mach, nsym, 0, 0, NULL, ifl->ifl_name); 428 } 429 430 void 431 Dbg_syms_resolved(Ofl_desc *ofl, Sym_desc *sdp) 432 { 433 Conv_inv_buf_t inv_buf; 434 435 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 436 return; 437 if (DBG_NOTDETAIL()) 438 return; 439 440 Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, 441 MSG_INTL(MSG_STR_RESOLVED), ofl->ofl_dehdr->e_ident[EI_OSABI], 442 ofl->ofl_dehdr->e_machine, sdp->sd_sym, 443 sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 444 conv_def_tag(sdp->sd_ref, &inv_buf)); 445 } 446 447 void 448 Dbg_syms_reloc(Ofl_desc *ofl, Sym_desc *sdp) 449 { 450 static Boolean symbol_title = TRUE; 451 Conv_inv_buf_t inv_buf; 452 Lm_list *lml = ofl->ofl_lml; 453 454 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 455 return; 456 457 if (symbol_title) { 458 Dbg_util_nl(lml, DBG_NL_STD); 459 dbg_print(lml, MSG_INTL(MSG_SYM_BSS)); 460 461 symbol_title = FALSE; 462 } 463 dbg_print(lml, MSG_INTL(MSG_SYM_UPDATE), 464 Dbg_demangle_name(sdp->sd_name)); 465 466 if (DBG_NOTDETAIL()) 467 return; 468 469 Elf_syms_table_entry(lml, ELF_DBG_LD, MSG_ORIG(MSG_SYM_COPY), 470 ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 471 sdp->sd_sym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 472 conv_def_tag(sdp->sd_ref, &inv_buf)); 473 } 474 475 void 476 Dbg_syms_reduce(Ofl_desc *ofl, int which, Sym_desc *sdp, int idx, 477 const char *sname) 478 { 479 static Boolean sym_reduce_title = TRUE; 480 static Boolean sym_retain_title = TRUE; 481 Boolean isfromglobal = (which == DBG_SYM_REDUCE_GLOBAL); 482 Boolean isfromretain = (which == DBG_SYM_REDUCE_RETAIN); 483 Lm_list *lml = ofl->ofl_lml; 484 485 if (DBG_NOTCLASS(DBG_C_SYMBOLS | DBG_C_VERSIONS)) 486 return; 487 488 if (sym_reduce_title && isfromglobal) { 489 sym_reduce_title = FALSE; 490 Dbg_util_nl(lml, DBG_NL_STD); 491 dbg_print(lml, MSG_INTL(MSG_SYM_REDUCED)); 492 } else if (sym_retain_title && isfromretain) { 493 sym_retain_title = FALSE; 494 Dbg_util_nl(lml, DBG_NL_STD); 495 dbg_print(lml, MSG_INTL(MSG_SYM_RETAINING)); 496 } 497 498 if ((sdp->sd_flags & FLG_SY_ELIM) && isfromglobal) 499 dbg_print(lml, MSG_INTL(MSG_SYM_ELIMINATING), 500 Dbg_demangle_name(sdp->sd_name)); 501 else if (isfromglobal) 502 dbg_print(lml, MSG_INTL(MSG_SYM_REDUCING), 503 Dbg_demangle_name(sdp->sd_name)); 504 else 505 dbg_print(lml, MSG_INTL(MSG_SYM_NOTELIMINATE), 506 Dbg_demangle_name(sdp->sd_name), sname, idx); 507 508 if (DBG_NOTDETAIL()) 509 return; 510 511 Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_ORIG(MSG_SYM_LOCAL), 512 ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 513 sdp->sd_sym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 514 sdp->sd_file->ifl_name); 515 } 516 517 void 518 Dbg_syms_dup_sort_addr(Lm_list *lml, const char *secname, const char *symname1, 519 const char *symname2, Addr addr) 520 { 521 if (DBG_NOTCLASS(DBG_C_SYMBOLS) || DBG_NOTDETAIL()) 522 return; 523 524 dbg_print(lml, MSG_INTL(MSG_SYM_DUPSORTADDR), secname, 525 symname1, symname2, EC_ADDR(addr)); 526 } 527 528 void 529 Dbg_syminfo_title(Lm_list *lml) 530 { 531 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 532 return; 533 if (DBG_NOTDETAIL()) 534 return; 535 536 Dbg_util_nl(lml, DBG_NL_STD); 537 dbg_print(lml, MSG_INTL(MSG_SYMINFO_INFO)); 538 Elf_syminfo_title(lml); 539 } 540 541 void 542 Dbg_syminfo_entry(Lm_list *lml, Word ndx, Syminfo *sip, Sym *sym, 543 const char *strtab, Dyn *dyn) 544 { 545 const char *needed; 546 547 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 548 return; 549 if (DBG_NOTDETAIL()) 550 return; 551 552 if (sip->si_boundto < SYMINFO_BT_LOWRESERVE) 553 needed = strtab + dyn[sip->si_boundto].d_un.d_val; 554 else 555 needed = 0; 556 557 Elf_syminfo_entry(lml, ndx, sip, 558 Dbg_demangle_name(strtab + sym->st_name), needed); 559 } 560 561 /* 562 * Symbol table output can differ slightly depending on the caller. However, 563 * the final diagnostic is maintained here so hat the various message strings 564 * remain consistent 565 * 566 * elfdump: index value size type bind oth ver shndx name 567 * ld: value size type bind oth ver shndx 568 */ 569 void 570 Elf_syms_table_title(Lm_list *lml, int caller) 571 { 572 if (caller == ELF_DBG_ELFDUMP) { 573 if (DBG_NOTLONG()) 574 dbg_print(lml, MSG_INTL(MSG_SYM_EFS_TITLE)); 575 else 576 dbg_print(lml, MSG_INTL(MSG_SYM_EFL_TITLE)); 577 return; 578 } 579 580 if (caller == ELF_DBG_LD) { 581 if (DBG_NOTLONG()) 582 dbg_print(lml, MSG_INTL(MSG_SYM_LDS_TITLE)); 583 else 584 dbg_print(lml, MSG_INTL(MSG_SYM_LDL_TITLE)); 585 return; 586 } 587 } 588 589 void 590 Elf_syms_table_entry(Lm_list *lml, int caller, const char *prestr, 591 uchar_t osabi, Half mach, Sym *sym, Versym verndx, int gnuver, 592 const char *sec, const char *poststr) 593 { 594 Conv_inv_buf_t inv_buf1, inv_buf2, inv_buf3; 595 Conv_inv_buf_t inv_buf4, inv_buf5, inv_buf6; 596 uchar_t type = ELF_ST_TYPE(sym->st_info); 597 uchar_t bind = ELF_ST_BIND(sym->st_info); 598 const char *msg; 599 600 if ((caller == ELF_DBG_ELFDUMP) || 601 (caller == ELF_DBG_LD)) { 602 if (DBG_NOTLONG()) 603 msg = MSG_INTL(MSG_SYM_EFS_ENTRY); 604 else 605 msg = MSG_INTL(MSG_SYM_EFL_ENTRY); 606 607 if (sec == NULL) 608 sec = conv_sym_shndx(osabi, mach, sym->st_shndx, 609 CONV_FMT_DECIMAL, &inv_buf6); 610 611 dbg_print(lml, msg, prestr, 612 conv_sym_value(mach, type, sym->st_value, &inv_buf1), 613 sym->st_size, conv_sym_info_type(mach, type, 0, &inv_buf2), 614 conv_sym_info_bind(bind, 0, &inv_buf3), 615 conv_sym_other(sym->st_other, &inv_buf4), 616 conv_ver_index(verndx, gnuver, &inv_buf5), 617 sec, Elf_demangle_name(poststr)); 618 } 619 } 620