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
Dbg_syms_lookup_aout(Lm_list * lml,const char * name)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
Dbg_syms_lookup(Rt_map * lmp,const char * name,const char * type)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
Dbg_syms_cap_lookup(Rt_map * lmp,uint_t type,const char * name,uint_t ndx,Half mach,Syscapset * scapset)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
Dbg_syms_ignore_gnuver(Rt_map * lmp,const char * name,Word symndx,Versym verndx)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
Dbg_syms_lazy_rescan(Lm_list * lml,const char * name)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
Dbg_syms_ar_title(Lm_list * lml,const char * file,Boolean again)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
Dbg_syms_ar_skip(Lm_list * lml,const char * archive,Elf_Arsym * arsym)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
Dbg_syms_ar_checking(Lm_list * lml,const char * fname,const char * objname,Elf_Arsym * arsym)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
Dbg_syms_ar_resolve(Lm_list * lml,const char * fname,const char * objname,Elf_Arsym * arsym)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
Dbg_syms_ar_force(Lm_list * lml,const char * fname,const char * objname)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
Dbg_syms_spec_title(Lm_list * lml)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
Dbg_syms_discarded(Lm_list * lml,Sym_desc * sdp)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
Dbg_syms_dup_discarded(Lm_list * lml,Word ndx,Sym_desc * sdp)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
Dbg_syms_entered(Ofl_desc * ofl,Sym * sym,Sym_desc * sdp)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
Dbg_syms_process(Lm_list * lml,Ifl_desc * ifl)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
Dbg_syms_entry(Lm_list * lml,Word ndx,Sym_desc * sdp)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
Dbg_syms_global(Lm_list * lml,Word ndx,const char * name)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
Dbg_syms_cap_convert(Ofl_desc * ofl,Word ndx,const char * name,Sym * sym)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
Dbg_syms_cap_local(Ofl_desc * ofl,Word ndx,const char * name,Sym * sym,Sym_desc * sdp)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
Dbg_syms_wrap(Lm_list * lml,Word ndx,const char * orig_name,const char * name)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
Dbg_syms_sec_title(Lm_list * lml)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
Dbg_syms_sec_entry(Lm_list * lml,Word ndx,Sg_desc * sgp,Os_desc * osp)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
Dbg_syms_up_title(Lm_list * lml)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
Dbg_syms_ignore(Ofl_desc * ofl,Sym_desc * sdp)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
Dbg_syms_old(Ofl_desc * ofl,Sym_desc * sdp)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
Dbg_syms_new(Ofl_desc * ofl,Sym * sym,Sym_desc * sdp)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
Dbg_syms_updated(Ofl_desc * ofl,Sym_desc * sdp,const char * name)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
Dbg_syms_created(Lm_list * lml,const char * name)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
Dbg_syms_resolving(Ofl_desc * ofl,Word ndx,const char * name,int row,int col,Sym * osym,Sym * nsym,Sym_desc * sdp,Ifl_desc * ifl)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
Dbg_syms_resolved(Ofl_desc * ofl,Sym_desc * sdp)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
Dbg_syms_copy_reloc(Ofl_desc * ofl,Sym_desc * sdp,Word align)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
Dbg_syms_reduce(Ofl_desc * ofl,int which,Sym_desc * sdp,int idx,const char * sname)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
Dbg_syms_dup_sort_addr(Lm_list * lml,const char * secname,const char * symname1,const char * symname2,Addr addr)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
Dbg_syminfo_title(Lm_list * lml)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
Dbg_syminfo_entry(Lm_list * lml,Word ndx,Syminfo * sip,Sym * sym,const char * strtab,Dyn * dyn)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
Elf_syms_table_title(Lm_list * lml,int caller)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
Elf_syms_table_entry(Lm_list * lml,int caller,const char * prestr,uchar_t osabi,Half mach,Sym * sym,Versym verndx,int gnuver,const char * sec,const char * poststr)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
Dbg_syms_cap_title(Ofl_desc * ofl)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