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 /* 23dc0f59e5SAli Bahrami * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved. 247c478bd9Sstevel@tonic-gate */ 257c478bd9Sstevel@tonic-gate 267c478bd9Sstevel@tonic-gate #include <stdio.h> 277c478bd9Sstevel@tonic-gate #include "msg.h" 287c478bd9Sstevel@tonic-gate #include "_debug.h" 297c478bd9Sstevel@tonic-gate #include "libld.h" 307c478bd9Sstevel@tonic-gate 315aefb655Srie #if !(defined(_ELF64)) 327c478bd9Sstevel@tonic-gate 335aefb655Srie void 345aefb655Srie Dbg_syms_lookup_aout(Lm_list *lml, const char *name) 355aefb655Srie { 365aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 375aefb655Srie return; 387c478bd9Sstevel@tonic-gate 395aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_AOUT), Dbg_demangle_name(name)); 405aefb655Srie } 415aefb655Srie 425aefb655Srie #endif 435aefb655Srie 445aefb655Srie void 455aefb655Srie Dbg_syms_lookup(Rt_map *lmp, const char *name, const char *type) 465aefb655Srie { 475aefb655Srie Lm_list *lml = LIST(lmp); 485aefb655Srie 495aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 505aefb655Srie return; 515aefb655Srie 525aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_LOOKUP), Dbg_demangle_name(name), 535aefb655Srie NAME(lmp), type); 547c478bd9Sstevel@tonic-gate } 557c478bd9Sstevel@tonic-gate 5608278a5eSRod Evans static const Msg captype[DBG_CAP_MACH + 1] = { 5708278a5eSRod Evans MSG_CAP_SYM_DEFAULT, /* MSG_INTL(MSG_CAP_SYM_DEFAULT) */ 5808278a5eSRod Evans MSG_CAP_SYM_USED, /* MSG_INTL(MSG_CAP_SYM_USED) */ 5908278a5eSRod Evans MSG_CAP_SYM_CANDIDATE, /* MSG_INTL(MSG_CAP_SYM_CANDIDATE) */ 6008278a5eSRod Evans MSG_CAP_SYM_REJECTED, /* MSG_INTL(MSG_CAP_SYM_REJECTED) */ 6108278a5eSRod Evans MSG_CAP_SYM_HW_1, /* MSG_INTL(MSG_CAP_SYM_HW_1) */ 6208278a5eSRod Evans MSG_CAP_SYM_SF_1, /* MSG_INTL(MSG_CAP_SYM_SF_1) */ 6308278a5eSRod Evans MSG_CAP_SYM_HW_2, /* MSG_INTL(MSG_CAP_SYM_HW_2) */ 6408278a5eSRod Evans MSG_CAP_SYM_PLAT, /* MSG_INTL(MSG_CAP_SYM_PLAT) */ 6508278a5eSRod Evans MSG_CAP_SYM_MACH /* MSG_INTL(MSG_CAP_SYM_MACH) */ 6608278a5eSRod Evans }; 6708278a5eSRod Evans 6808278a5eSRod Evans void 6908278a5eSRod Evans Dbg_syms_cap_lookup(Rt_map *lmp, uint_t type, const char *name, uint_t ndx, 7008278a5eSRod Evans Half mach, Syscapset *scapset) 7108278a5eSRod Evans { 7208278a5eSRod Evans Lm_list *lml = LIST(lmp); 7308278a5eSRod Evans const char *str = NULL; 7408278a5eSRod Evans Conv_cap_val_buf_t cap_val_buf; 7508278a5eSRod Evans 7608278a5eSRod Evans if (DBG_NOTCLASS(DBG_C_CAP | DBG_C_SYMBOLS)) 7708278a5eSRod Evans return; 7808278a5eSRod Evans 7908278a5eSRod Evans switch (type) { 8008278a5eSRod Evans case DBG_CAP_HW_1: 8108278a5eSRod Evans str = conv_cap_val_hw1(scapset->sc_hw_1, mach, 0, 8208278a5eSRod Evans &cap_val_buf.cap_val_hw1_buf); 8308278a5eSRod Evans break; 8408278a5eSRod Evans case DBG_CAP_SF_1: 8508278a5eSRod Evans str = conv_cap_val_sf1(scapset->sc_sf_1, mach, 0, 8608278a5eSRod Evans &cap_val_buf.cap_val_sf1_buf); 8708278a5eSRod Evans break; 8808278a5eSRod Evans case DBG_CAP_HW_2: 8908278a5eSRod Evans str = conv_cap_val_hw2(scapset->sc_hw_2, mach, 0, 9008278a5eSRod Evans &cap_val_buf.cap_val_hw2_buf); 9108278a5eSRod Evans break; 9208278a5eSRod Evans case DBG_CAP_MACH: 9308278a5eSRod Evans str = scapset->sc_mach; 9408278a5eSRod Evans break; 9508278a5eSRod Evans case DBG_CAP_PLAT: 9608278a5eSRod Evans str = scapset->sc_plat; 9708278a5eSRod Evans break; 9808278a5eSRod Evans } 9908278a5eSRod Evans 10008278a5eSRod Evans dbg_print(lml, MSG_INTL(captype[type]), Dbg_demangle_name(name), 10108278a5eSRod Evans ndx, str); 10208278a5eSRod Evans } 10308278a5eSRod Evans 1047c478bd9Sstevel@tonic-gate void 105d840867fSab196087 Dbg_syms_ignore_gnuver(Rt_map *lmp, const char *name, Word symndx, 1063b41b08bSab196087 Versym verndx) 1073b41b08bSab196087 { 1083b41b08bSab196087 Lm_list *lml = LIST(lmp); 1093b41b08bSab196087 1103b41b08bSab196087 if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 1113b41b08bSab196087 return; 1123b41b08bSab196087 113d840867fSab196087 dbg_print(lml, MSG_INTL(MSG_SYM_IGNGNUVER), Dbg_demangle_name(name), 1143b41b08bSab196087 EC_WORD(symndx), EC_HALF(verndx), NAME(lmp)); 1153b41b08bSab196087 } 1163b41b08bSab196087 1173b41b08bSab196087 void 1185aefb655Srie Dbg_syms_lazy_rescan(Lm_list *lml, const char *name) 1195aefb655Srie { 1205aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS | DBG_C_FILES)) 1215aefb655Srie return; 1225aefb655Srie 1235aefb655Srie Dbg_util_nl(lml, DBG_NL_STD); 1245aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_LAZY_RESCAN), Dbg_demangle_name(name)); 1255aefb655Srie } 1265aefb655Srie 1275aefb655Srie void 128dc0f59e5SAli Bahrami Dbg_syms_ar_title(Lm_list *lml, const char *file, Boolean again) 1295aefb655Srie { 1305aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 1315aefb655Srie return; 1325aefb655Srie 1335aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_AR_FILE), file, 1345aefb655Srie again ? MSG_INTL(MSG_STR_AGAIN) : MSG_ORIG(MSG_STR_EMPTY)); 1355aefb655Srie } 1365aefb655Srie 1375aefb655Srie void 138dc0f59e5SAli Bahrami Dbg_syms_ar_skip(Lm_list *lml, const char *archive, Elf_Arsym *arsym) 1395aefb655Srie { 1405aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 1415aefb655Srie return; 1425aefb655Srie 143dc0f59e5SAli Bahrami dbg_print(lml, MSG_INTL(MSG_SYM_AR_SKIP), archive, 1445aefb655Srie Dbg_demangle_name(arsym->as_name)); 1455aefb655Srie } 1465aefb655Srie 1475aefb655Srie void 148dc0f59e5SAli Bahrami Dbg_syms_ar_checking(Lm_list *lml, const char *fname, const char *objname, 149dc0f59e5SAli Bahrami Elf_Arsym *arsym) 1505aefb655Srie { 1515aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 1525aefb655Srie return; 1535aefb655Srie 154dc0f59e5SAli Bahrami dbg_print(lml, MSG_INTL(MSG_SYM_AR_CHECK), fname, objname, 155dc0f59e5SAli Bahrami Dbg_demangle_name(arsym->as_name)); 1565aefb655Srie } 1575aefb655Srie 1585aefb655Srie void 159dc0f59e5SAli Bahrami Dbg_syms_ar_resolve(Lm_list *lml, const char *fname, const char *objname, 160dc0f59e5SAli Bahrami Elf_Arsym *arsym) 1615aefb655Srie { 1625aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 1635aefb655Srie return; 1645aefb655Srie 165dc0f59e5SAli Bahrami dbg_print(lml, MSG_INTL(MSG_SYM_AR_RESOLVE), fname, objname, 166dc0f59e5SAli Bahrami Dbg_demangle_name(arsym->as_name)); 167dc0f59e5SAli Bahrami } 1685aefb655Srie 169dc0f59e5SAli Bahrami void 170dc0f59e5SAli Bahrami Dbg_syms_ar_force(Lm_list *lml, const char *fname, const char *objname) 171dc0f59e5SAli Bahrami { 172dc0f59e5SAli Bahrami if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 173dc0f59e5SAli Bahrami return; 174dc0f59e5SAli Bahrami 175dc0f59e5SAli Bahrami dbg_print(lml, MSG_INTL(MSG_SYM_AR_FORCE), fname, objname); 1765aefb655Srie } 1775aefb655Srie 1785aefb655Srie void 1795aefb655Srie Dbg_syms_spec_title(Lm_list *lml) 1805aefb655Srie { 1815aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 1825aefb655Srie return; 1835aefb655Srie 1845aefb655Srie Dbg_util_nl(lml, DBG_NL_STD); 1855aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_SPECIAL)); 1865aefb655Srie } 1875aefb655Srie 1885aefb655Srie void 189a194faf8Srie Dbg_syms_discarded(Lm_list *lml, Sym_desc *sdp) 1905aefb655Srie { 191e23c41c9SAli Bahrami dbg_isec_name_buf_t buf; 192e23c41c9SAli Bahrami char *alloc_mem; 193a194faf8Srie const char *file; 1945aefb655Srie 195a194faf8Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS | DBG_C_UNUSED)) 1965aefb655Srie return; 1975aefb655Srie if (DBG_NOTDETAIL()) 1985aefb655Srie return; 1995aefb655Srie 200a194faf8Srie if ((sdp->sd_file == NULL) || ((file = sdp->sd_file->ifl_name) == NULL)) 201a194faf8Srie file = MSG_INTL(MSG_STR_UNKNOWN); 2025aefb655Srie 203a194faf8Srie if (sdp->sd_isc) { 204a194faf8Srie dbg_print(lml, MSG_INTL(MSG_SYM_DISCARD_SEC), 205e23c41c9SAli Bahrami Dbg_demangle_name(sdp->sd_name), 206e23c41c9SAli Bahrami dbg_fmt_isec_name(sdp->sd_isc, buf, &alloc_mem), file); 207e23c41c9SAli Bahrami if (alloc_mem != NULL) 208e23c41c9SAli Bahrami free(alloc_mem); 209a194faf8Srie } else 210a194faf8Srie dbg_print(lml, MSG_INTL(MSG_SYM_DISCARD_FILE), 211a194faf8Srie Dbg_demangle_name(sdp->sd_name), file); 2125aefb655Srie } 2135aefb655Srie 2145aefb655Srie void 21524b9abbaSab196087 Dbg_syms_dup_discarded(Lm_list *lml, Word ndx, Sym_desc *sdp) 21624b9abbaSab196087 { 21724b9abbaSab196087 const char *file; 21824b9abbaSab196087 21924b9abbaSab196087 if (DBG_NOTCLASS(DBG_C_SYMBOLS | DBG_C_UNUSED)) 22024b9abbaSab196087 return; 22124b9abbaSab196087 if (DBG_NOTDETAIL()) 22224b9abbaSab196087 return; 22324b9abbaSab196087 22424b9abbaSab196087 if ((sdp->sd_file == NULL) || ((file = sdp->sd_file->ifl_name) == NULL)) 22524b9abbaSab196087 file = MSG_INTL(MSG_STR_UNKNOWN); 22624b9abbaSab196087 22724b9abbaSab196087 dbg_print(lml, MSG_INTL(MSG_SYM_DISCARD_DUP), EC_WORD(ndx), 22824b9abbaSab196087 Dbg_demangle_name(sdp->sd_name), file); 22924b9abbaSab196087 } 23024b9abbaSab196087 23124b9abbaSab196087 void 2325aefb655Srie Dbg_syms_entered(Ofl_desc *ofl, Sym *sym, Sym_desc *sdp) 2335aefb655Srie { 234de777a60Sab196087 Conv_inv_buf_t inv_buf; 2355aefb655Srie Lm_list *lml = ofl->ofl_lml; 2365aefb655Srie 2375aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 2385aefb655Srie return; 2395aefb655Srie if (DBG_NOTDETAIL()) 2405aefb655Srie return; 2415aefb655Srie 2425aefb655Srie Elf_syms_table_entry(lml, ELF_DBG_LD, MSG_INTL(MSG_STR_ENTERED), 2434f680cc6SAli Bahrami ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, sym, 244d840867fSab196087 sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 245de777a60Sab196087 conv_def_tag(sdp->sd_ref, &inv_buf)); 2465aefb655Srie } 2475aefb655Srie 2485aefb655Srie void 2495aefb655Srie Dbg_syms_process(Lm_list *lml, Ifl_desc *ifl) 2505aefb655Srie { 251de777a60Sab196087 Conv_inv_buf_t inv_buf; 252de777a60Sab196087 2535aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 2545aefb655Srie return; 2555aefb655Srie 2565aefb655Srie Dbg_util_nl(lml, DBG_NL_STD); 2575aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_PROCESS), ifl->ifl_name, 2584f680cc6SAli Bahrami conv_ehdr_type(ifl->ifl_ehdr->e_ident[EI_OSABI], 2594f680cc6SAli Bahrami ifl->ifl_ehdr->e_type, 0, &inv_buf)); 2605aefb655Srie } 2615aefb655Srie 2625aefb655Srie void 2635aefb655Srie Dbg_syms_entry(Lm_list *lml, Word ndx, Sym_desc *sdp) 2645aefb655Srie { 2655aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 2665aefb655Srie return; 2675aefb655Srie 2685aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_BASIC), EC_WORD(ndx), 2695aefb655Srie Dbg_demangle_name(sdp->sd_name)); 2705aefb655Srie } 2715aefb655Srie 2725aefb655Srie void 2735aefb655Srie Dbg_syms_global(Lm_list *lml, Word ndx, const char *name) 2745aefb655Srie { 2755aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 2765aefb655Srie return; 2775aefb655Srie 2785aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_ADDING), EC_WORD(ndx), 2795aefb655Srie Dbg_demangle_name(name)); 2805aefb655Srie } 2815aefb655Srie 2825aefb655Srie void 28308278a5eSRod Evans Dbg_syms_cap_convert(Ofl_desc *ofl, Word ndx, const char *name, Sym *sym) 28408278a5eSRod Evans { 28508278a5eSRod Evans if (DBG_NOTCLASS(DBG_C_CAP | DBG_C_SYMBOLS)) 28608278a5eSRod Evans return; 28708278a5eSRod Evans 28808278a5eSRod Evans dbg_print(ofl->ofl_lml, MSG_INTL(MSG_SYM_CAP_ORIG), EC_WORD(ndx), 28908278a5eSRod Evans Dbg_demangle_name(name)); 29008278a5eSRod Evans 29108278a5eSRod Evans if (DBG_NOTDETAIL()) 29208278a5eSRod Evans return; 29308278a5eSRod Evans 29408278a5eSRod Evans Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, 29508278a5eSRod Evans MSG_INTL(MSG_STR_ORIGINAL), ofl->ofl_dehdr->e_ident[EI_OSABI], 29608278a5eSRod Evans ofl->ofl_dehdr->e_machine, sym, 0, 0, NULL, 29708278a5eSRod Evans MSG_ORIG(MSG_STR_EMPTY)); 29808278a5eSRod Evans } 29908278a5eSRod Evans 30008278a5eSRod Evans void 30108278a5eSRod Evans Dbg_syms_cap_local(Ofl_desc *ofl, Word ndx, const char *name, Sym *sym, 30208278a5eSRod Evans Sym_desc *sdp) 30308278a5eSRod Evans { 30408278a5eSRod Evans Conv_inv_buf_t inv_buf; 30508278a5eSRod Evans 30608278a5eSRod Evans if (DBG_NOTCLASS(DBG_C_CAP | DBG_C_SYMBOLS)) 30708278a5eSRod Evans return; 30808278a5eSRod Evans 30908278a5eSRod Evans dbg_print(ofl->ofl_lml, MSG_INTL(MSG_SYM_CAP_LOCAL), EC_WORD(ndx), 31008278a5eSRod Evans Dbg_demangle_name(name)); 31108278a5eSRod Evans 31208278a5eSRod Evans if (DBG_NOTDETAIL()) 31308278a5eSRod Evans return; 31408278a5eSRod Evans 31508278a5eSRod Evans Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, 31608278a5eSRod Evans MSG_INTL(MSG_STR_ENTERED), ofl->ofl_dehdr->e_ident[EI_OSABI], 31708278a5eSRod Evans ofl->ofl_dehdr->e_machine, sym, 31808278a5eSRod Evans sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 31908278a5eSRod Evans conv_def_tag(sdp->sd_ref, &inv_buf)); 32008278a5eSRod Evans } 32108278a5eSRod Evans 32208278a5eSRod Evans void 323cdcc71c0SAli Bahrami Dbg_syms_wrap(Lm_list *lml, Word ndx, const char *orig_name, const char *name) 324cdcc71c0SAli Bahrami { 325cdcc71c0SAli Bahrami if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 326cdcc71c0SAli Bahrami return; 327cdcc71c0SAli Bahrami 328cdcc71c0SAli Bahrami dbg_print(lml, MSG_INTL(MSG_SYM_WRAP), EC_WORD(ndx), 329cdcc71c0SAli Bahrami Dbg_demangle_name(orig_name), Dbg_demangle_name(name)); 330cdcc71c0SAli Bahrami } 331cdcc71c0SAli Bahrami 332cdcc71c0SAli Bahrami void 3335aefb655Srie Dbg_syms_sec_title(Lm_list *lml) 3345aefb655Srie { 3355aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 3365aefb655Srie return; 3375aefb655Srie if (DBG_NOTDETAIL()) 3385aefb655Srie return; 3395aefb655Srie 3405aefb655Srie Dbg_util_nl(lml, DBG_NL_STD); 3415aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_INDEX)); 3425aefb655Srie } 3435aefb655Srie 3445aefb655Srie void 3455aefb655Srie Dbg_syms_sec_entry(Lm_list *lml, Word ndx, Sg_desc *sgp, Os_desc *osp) 3465aefb655Srie { 3475aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 3485aefb655Srie return; 3495aefb655Srie if (DBG_NOTDETAIL()) 3505aefb655Srie return; 3515aefb655Srie 3525aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_SECTION), EC_WORD(ndx), osp->os_name, 3535aefb655Srie (*sgp->sg_name ? sgp->sg_name : MSG_INTL(MSG_STR_NULL))); 3545aefb655Srie } 3555aefb655Srie 3565aefb655Srie void 3575aefb655Srie Dbg_syms_up_title(Lm_list *lml) 3585aefb655Srie { 3595aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 3605aefb655Srie return; 3615aefb655Srie if (DBG_NOTDETAIL()) 3625aefb655Srie return; 3635aefb655Srie 3645aefb655Srie Dbg_util_nl(lml, DBG_NL_STD); 3655aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_FINAL)); 3665aefb655Srie Elf_syms_table_title(lml, ELF_DBG_LD); 3675aefb655Srie } 3685aefb655Srie 3695aefb655Srie void 3705aefb655Srie Dbg_syms_ignore(Ofl_desc *ofl, Sym_desc *sdp) 3715aefb655Srie { 3725aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 3735aefb655Srie return; 3745aefb655Srie if (DBG_NOTDETAIL()) 3755aefb655Srie return; 3765aefb655Srie 3775aefb655Srie Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_IGNORE), 3784f680cc6SAli Bahrami ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 3794f680cc6SAli Bahrami sdp->sd_sym, 0, 0, NULL, MSG_INTL(MSG_STR_UNUSED)); 3805aefb655Srie } 3815aefb655Srie 3825aefb655Srie void 3835aefb655Srie Dbg_syms_old(Ofl_desc *ofl, Sym_desc *sdp) 3845aefb655Srie { 3855aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 3865aefb655Srie return; 3875aefb655Srie if (DBG_NOTDETAIL()) 3885aefb655Srie return; 3895aefb655Srie 3905aefb655Srie Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_OLD), 3914f680cc6SAli Bahrami ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 3924f680cc6SAli Bahrami sdp->sd_sym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 3934f680cc6SAli Bahrami 0, NULL, sdp->sd_name); 3945aefb655Srie } 3955aefb655Srie 3965aefb655Srie void 3975aefb655Srie Dbg_syms_new(Ofl_desc *ofl, Sym *sym, Sym_desc *sdp) 3985aefb655Srie { 399de777a60Sab196087 Conv_inv_buf_t inv_buf; 400de777a60Sab196087 4015aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 4025aefb655Srie return; 4035aefb655Srie if (DBG_NOTDETAIL()) 4045aefb655Srie return; 4055aefb655Srie 4065aefb655Srie Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_NEW), 4074f680cc6SAli Bahrami ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, sym, 408d840867fSab196087 sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 409de777a60Sab196087 conv_def_tag(sdp->sd_ref, &inv_buf)); 4105aefb655Srie } 4115aefb655Srie 4125aefb655Srie void 4135aefb655Srie Dbg_syms_updated(Ofl_desc *ofl, Sym_desc *sdp, const char *name) 4145aefb655Srie { 415de777a60Sab196087 Conv_inv_buf_t inv_buf; 4165aefb655Srie Lm_list *lml = ofl->ofl_lml; 4175aefb655Srie 4185aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 4195aefb655Srie return; 4205aefb655Srie 4215aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_UPDATE), name); 4225aefb655Srie 4235aefb655Srie if (DBG_NOTDETAIL()) 4245aefb655Srie return; 4255aefb655Srie 4265aefb655Srie Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_ORIG(MSG_STR_EMPTY), 4274f680cc6SAli Bahrami ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 4284f680cc6SAli Bahrami sdp->sd_sym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 429de777a60Sab196087 conv_def_tag(sdp->sd_ref, &inv_buf)); 4305aefb655Srie } 4315aefb655Srie 4325aefb655Srie void 4335aefb655Srie Dbg_syms_created(Lm_list *lml, const char *name) 4345aefb655Srie { 4355aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 4365aefb655Srie return; 4375aefb655Srie 4385aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_CREATE), Dbg_demangle_name(name)); 4395aefb655Srie } 4405aefb655Srie 4415aefb655Srie void 4425aefb655Srie Dbg_syms_resolving(Ofl_desc *ofl, Word ndx, const char *name, int row, 4435aefb655Srie int col, Sym *osym, Sym *nsym, Sym_desc *sdp, Ifl_desc *ifl) 4445aefb655Srie { 4455aefb655Srie Lm_list *lml = ofl->ofl_lml; 4464f680cc6SAli Bahrami uchar_t osabi = ofl->ofl_dehdr->e_ident[EI_OSABI]; 4475aefb655Srie Half mach = ofl->ofl_dehdr->e_machine; 4485aefb655Srie 4495aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 4505aefb655Srie return; 4515aefb655Srie 4525aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_RESOLVING), EC_WORD(ndx), 4535aefb655Srie Dbg_demangle_name(name), row, col); 4545aefb655Srie 4555aefb655Srie if (DBG_NOTDETAIL()) 4565aefb655Srie return; 4575aefb655Srie 4585aefb655Srie Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_OLD), 4594f680cc6SAli Bahrami osabi, mach, osym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 4604f680cc6SAli Bahrami 0, NULL, sdp->sd_file->ifl_name); 4615aefb655Srie 4625aefb655Srie Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_INTL(MSG_STR_NEW), 4634f680cc6SAli Bahrami osabi, mach, nsym, 0, 0, NULL, ifl->ifl_name); 4645aefb655Srie } 4655aefb655Srie 4665aefb655Srie void 4675aefb655Srie Dbg_syms_resolved(Ofl_desc *ofl, Sym_desc *sdp) 4685aefb655Srie { 469de777a60Sab196087 Conv_inv_buf_t inv_buf; 470de777a60Sab196087 4715aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 4725aefb655Srie return; 4735aefb655Srie if (DBG_NOTDETAIL()) 4745aefb655Srie return; 4755aefb655Srie 4765aefb655Srie Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, 4774f680cc6SAli Bahrami MSG_INTL(MSG_STR_RESOLVED), ofl->ofl_dehdr->e_ident[EI_OSABI], 4784f680cc6SAli Bahrami ofl->ofl_dehdr->e_machine, sdp->sd_sym, 479d840867fSab196087 sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 480de777a60Sab196087 conv_def_tag(sdp->sd_ref, &inv_buf)); 4815aefb655Srie } 4825aefb655Srie 4835aefb655Srie void 484*02938ba2SRod Evans Dbg_syms_copy_reloc(Ofl_desc *ofl, Sym_desc *sdp, Word align) 4855aefb655Srie { 4865aefb655Srie static Boolean symbol_title = TRUE; 487de777a60Sab196087 Conv_inv_buf_t inv_buf; 4885aefb655Srie Lm_list *lml = ofl->ofl_lml; 4895aefb655Srie 4905aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 4915aefb655Srie return; 4925aefb655Srie 4935aefb655Srie if (symbol_title) { 4945aefb655Srie Dbg_util_nl(lml, DBG_NL_STD); 4955aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_BSS)); 4965aefb655Srie 4975aefb655Srie symbol_title = FALSE; 4985aefb655Srie } 499*02938ba2SRod Evans 500*02938ba2SRod Evans /* 501*02938ba2SRod Evans * Copy relocation symbols come in pairs, the original reference 502*02938ba2SRod Evans * (within a dependency), and the new destination (within the .bss of 503*02938ba2SRod Evans * the executable). The latter is accompanied with a computed 504*02938ba2SRod Evans * alignment. 505*02938ba2SRod Evans */ 506*02938ba2SRod Evans if (align) { 507*02938ba2SRod Evans dbg_print(lml, MSG_INTL(MSG_SYM_COPY_DST), 508*02938ba2SRod Evans Dbg_demangle_name(sdp->sd_name), EC_WORD(align)); 509*02938ba2SRod Evans } else { 510*02938ba2SRod Evans dbg_print(lml, MSG_INTL(MSG_SYM_COPY_REF), 5115aefb655Srie Dbg_demangle_name(sdp->sd_name)); 512*02938ba2SRod Evans } 5135aefb655Srie 5145aefb655Srie if (DBG_NOTDETAIL()) 5155aefb655Srie return; 5165aefb655Srie 5175aefb655Srie Elf_syms_table_entry(lml, ELF_DBG_LD, MSG_ORIG(MSG_SYM_COPY), 5184f680cc6SAli Bahrami ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 5194f680cc6SAli Bahrami sdp->sd_sym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 520de777a60Sab196087 conv_def_tag(sdp->sd_ref, &inv_buf)); 5215aefb655Srie } 5225aefb655Srie 5235aefb655Srie void 5245aefb655Srie Dbg_syms_reduce(Ofl_desc *ofl, int which, Sym_desc *sdp, int idx, 5255aefb655Srie const char *sname) 5267c478bd9Sstevel@tonic-gate { 5277c478bd9Sstevel@tonic-gate static Boolean sym_reduce_title = TRUE; 5287c478bd9Sstevel@tonic-gate static Boolean sym_retain_title = TRUE; 5297c478bd9Sstevel@tonic-gate Boolean isfromglobal = (which == DBG_SYM_REDUCE_GLOBAL); 5307c478bd9Sstevel@tonic-gate Boolean isfromretain = (which == DBG_SYM_REDUCE_RETAIN); 5315aefb655Srie Lm_list *lml = ofl->ofl_lml; 5327c478bd9Sstevel@tonic-gate 5335aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS | DBG_C_VERSIONS)) 5347c478bd9Sstevel@tonic-gate return; 5357c478bd9Sstevel@tonic-gate 5367c478bd9Sstevel@tonic-gate if (sym_reduce_title && isfromglobal) { 5377c478bd9Sstevel@tonic-gate sym_reduce_title = FALSE; 5385aefb655Srie Dbg_util_nl(lml, DBG_NL_STD); 5395aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_REDUCED)); 5407c478bd9Sstevel@tonic-gate } else if (sym_retain_title && isfromretain) { 5417c478bd9Sstevel@tonic-gate sym_retain_title = FALSE; 5425aefb655Srie Dbg_util_nl(lml, DBG_NL_STD); 5435aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_RETAINING)); 5447c478bd9Sstevel@tonic-gate } 5457c478bd9Sstevel@tonic-gate 546635216b6SRod Evans if ((sdp->sd_flags & FLG_SY_ELIM) && isfromglobal) 5475aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_ELIMINATING), 5485aefb655Srie Dbg_demangle_name(sdp->sd_name)); 5497c478bd9Sstevel@tonic-gate else if (isfromglobal) 5505aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_REDUCING), 5515aefb655Srie Dbg_demangle_name(sdp->sd_name)); 5527c478bd9Sstevel@tonic-gate else 5535aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_NOTELIMINATE), 5545aefb655Srie Dbg_demangle_name(sdp->sd_name), sname, idx); 5557c478bd9Sstevel@tonic-gate 5567c478bd9Sstevel@tonic-gate if (DBG_NOTDETAIL()) 5577c478bd9Sstevel@tonic-gate return; 5587c478bd9Sstevel@tonic-gate 5595aefb655Srie Elf_syms_table_entry(ofl->ofl_lml, ELF_DBG_LD, MSG_ORIG(MSG_SYM_LOCAL), 5604f680cc6SAli Bahrami ofl->ofl_dehdr->e_ident[EI_OSABI], ofl->ofl_dehdr->e_machine, 5614f680cc6SAli Bahrami sdp->sd_sym, sdp->sd_aux ? sdp->sd_aux->sa_overndx : 0, 0, NULL, 5627c478bd9Sstevel@tonic-gate sdp->sd_file->ifl_name); 5637c478bd9Sstevel@tonic-gate } 5647c478bd9Sstevel@tonic-gate 5657c478bd9Sstevel@tonic-gate void 566d579eb63Sab196087 Dbg_syms_dup_sort_addr(Lm_list *lml, const char *secname, const char *symname1, 567d579eb63Sab196087 const char *symname2, Addr addr) 568d579eb63Sab196087 { 569d579eb63Sab196087 if (DBG_NOTCLASS(DBG_C_SYMBOLS) || DBG_NOTDETAIL()) 570d579eb63Sab196087 return; 571d579eb63Sab196087 572d579eb63Sab196087 dbg_print(lml, MSG_INTL(MSG_SYM_DUPSORTADDR), secname, 573d579eb63Sab196087 symname1, symname2, EC_ADDR(addr)); 574d579eb63Sab196087 } 575d579eb63Sab196087 576d579eb63Sab196087 void 5775aefb655Srie Dbg_syminfo_title(Lm_list *lml) 5787c478bd9Sstevel@tonic-gate { 5795aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 5807c478bd9Sstevel@tonic-gate return; 5817c478bd9Sstevel@tonic-gate if (DBG_NOTDETAIL()) 5827c478bd9Sstevel@tonic-gate return; 5837c478bd9Sstevel@tonic-gate 5845aefb655Srie Dbg_util_nl(lml, DBG_NL_STD); 5855aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYMINFO_INFO)); 5865aefb655Srie Elf_syminfo_title(lml); 5877c478bd9Sstevel@tonic-gate } 5887c478bd9Sstevel@tonic-gate 5897c478bd9Sstevel@tonic-gate void 5905aefb655Srie Dbg_syminfo_entry(Lm_list *lml, Word ndx, Syminfo *sip, Sym *sym, 5915aefb655Srie const char *strtab, Dyn *dyn) 5927c478bd9Sstevel@tonic-gate { 5937c478bd9Sstevel@tonic-gate const char *needed; 5947c478bd9Sstevel@tonic-gate 5955aefb655Srie if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 5967c478bd9Sstevel@tonic-gate return; 5977c478bd9Sstevel@tonic-gate if (DBG_NOTDETAIL()) 5987c478bd9Sstevel@tonic-gate return; 5997c478bd9Sstevel@tonic-gate 6007c478bd9Sstevel@tonic-gate if (sip->si_boundto < SYMINFO_BT_LOWRESERVE) 6017c478bd9Sstevel@tonic-gate needed = strtab + dyn[sip->si_boundto].d_un.d_val; 6027c478bd9Sstevel@tonic-gate else 6037c478bd9Sstevel@tonic-gate needed = 0; 6047c478bd9Sstevel@tonic-gate 6055aefb655Srie Elf_syminfo_entry(lml, ndx, sip, 6065aefb655Srie Dbg_demangle_name(strtab + sym->st_name), needed); 6075aefb655Srie } 6085aefb655Srie 6095aefb655Srie /* 6105aefb655Srie * Symbol table output can differ slightly depending on the caller. However, 6115aefb655Srie * the final diagnostic is maintained here so hat the various message strings 6125aefb655Srie * remain consistent 6135aefb655Srie * 6145aefb655Srie * elfdump: index value size type bind oth ver shndx name 6155aefb655Srie * ld: value size type bind oth ver shndx 6165aefb655Srie */ 6175aefb655Srie void 6185aefb655Srie Elf_syms_table_title(Lm_list *lml, int caller) 6195aefb655Srie { 6205aefb655Srie if (caller == ELF_DBG_ELFDUMP) { 6215aefb655Srie if (DBG_NOTLONG()) 6225aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_EFS_TITLE)); 6235aefb655Srie else 6245aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_EFL_TITLE)); 6255aefb655Srie return; 6265aefb655Srie } 6275aefb655Srie 6285aefb655Srie if (caller == ELF_DBG_LD) { 6295aefb655Srie if (DBG_NOTLONG()) 6305aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_LDS_TITLE)); 6315aefb655Srie else 6325aefb655Srie dbg_print(lml, MSG_INTL(MSG_SYM_LDL_TITLE)); 6335aefb655Srie return; 6345aefb655Srie } 6355aefb655Srie } 6365aefb655Srie 6375aefb655Srie void 6384f680cc6SAli Bahrami Elf_syms_table_entry(Lm_list *lml, int caller, const char *prestr, 6394f680cc6SAli Bahrami uchar_t osabi, Half mach, Sym *sym, Versym verndx, int gnuver, 6404f680cc6SAli Bahrami const char *sec, const char *poststr) 6415aefb655Srie { 642de777a60Sab196087 Conv_inv_buf_t inv_buf1, inv_buf2, inv_buf3; 643de777a60Sab196087 Conv_inv_buf_t inv_buf4, inv_buf5, inv_buf6; 6445aefb655Srie uchar_t type = ELF_ST_TYPE(sym->st_info); 6455aefb655Srie uchar_t bind = ELF_ST_BIND(sym->st_info); 6465aefb655Srie const char *msg; 6475aefb655Srie 6485aefb655Srie if ((caller == ELF_DBG_ELFDUMP) || 6495aefb655Srie (caller == ELF_DBG_LD)) { 6505aefb655Srie if (DBG_NOTLONG()) 6515aefb655Srie msg = MSG_INTL(MSG_SYM_EFS_ENTRY); 6525aefb655Srie else 6535aefb655Srie msg = MSG_INTL(MSG_SYM_EFL_ENTRY); 6545aefb655Srie 6554f680cc6SAli Bahrami if (sec == NULL) 6564f680cc6SAli Bahrami sec = conv_sym_shndx(osabi, mach, sym->st_shndx, 6574f680cc6SAli Bahrami CONV_FMT_DECIMAL, &inv_buf6); 6584f680cc6SAli Bahrami 6595aefb655Srie dbg_print(lml, msg, prestr, 660de777a60Sab196087 conv_sym_value(mach, type, sym->st_value, &inv_buf1), 661de777a60Sab196087 sym->st_size, conv_sym_info_type(mach, type, 0, &inv_buf2), 662de777a60Sab196087 conv_sym_info_bind(bind, 0, &inv_buf3), 663de777a60Sab196087 conv_sym_other(sym->st_other, &inv_buf4), 664de777a60Sab196087 conv_ver_index(verndx, gnuver, &inv_buf5), 6654f680cc6SAli Bahrami sec, Elf_demangle_name(poststr)); 6665aefb655Srie } 6677c478bd9Sstevel@tonic-gate } 66808278a5eSRod Evans 66908278a5eSRod Evans void 67008278a5eSRod Evans Dbg_syms_cap_title(Ofl_desc *ofl) 67108278a5eSRod Evans { 67208278a5eSRod Evans Lm_list *lml = ofl->ofl_lml; 67308278a5eSRod Evans 67408278a5eSRod Evans if (DBG_NOTCLASS(DBG_C_SYMBOLS)) 67508278a5eSRod Evans return; 67608278a5eSRod Evans if (DBG_NOTDETAIL()) 67708278a5eSRod Evans return; 67808278a5eSRod Evans 67908278a5eSRod Evans Dbg_util_nl(lml, DBG_NL_STD); 68008278a5eSRod Evans dbg_print(lml, MSG_INTL(MSG_SYM_CAPABILITIES)); 68108278a5eSRod Evans Elf_syms_table_title(lml, ELF_DBG_LD); 68208278a5eSRod Evans } 683