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 2008 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #include "msg.h" 28 #include "_debug.h" 29 #include "libld.h" 30 31 void 32 Dbg_unused_unref(Rt_map *lmp, const char *depend) 33 { 34 if (DBG_NOTCLASS(DBG_C_UNUSED)) 35 return; 36 if (DBG_NOTDETAIL()) 37 return; 38 39 dbg_print(LIST(lmp), MSG_INTL(MSG_USD_UNREF), NAME(lmp), depend); 40 } 41 42 void 43 Dbg_unused_sec(Lm_list *lml, Is_desc *isp) 44 { 45 const char *str; 46 47 if (DBG_NOTCLASS(DBG_C_UNUSED)) 48 return; 49 if (DBG_NOTDETAIL()) 50 return; 51 52 /* 53 * If the file from which this section originates hasn't been referenced 54 * at all, skip this diagnostic, as it would have been covered under 55 * Dbg_unused_file() called from ignore_section_processing(). 56 */ 57 if (isp->is_file && 58 ((isp->is_file->ifl_flags & FLG_IF_FILEREF) == 0)) 59 return; 60 61 if (isp->is_flags & FLG_IS_DISCARD) 62 str = MSG_INTL(MSG_USD_SECDISCARD); 63 else 64 str = MSG_ORIG(MSG_STR_EMPTY); 65 66 dbg_print(lml, MSG_INTL(MSG_USD_SEC), isp->is_name, 67 EC_XWORD(isp->is_shdr->sh_size), isp->is_file->ifl_name, str); 68 } 69 70 void 71 Dbg_unused_file(Lm_list *lml, const char *name, int needstr, uint_t cycle) 72 { 73 if (DBG_NOTCLASS(DBG_C_UNUSED)) 74 return; 75 76 if (needstr) 77 dbg_print(lml, MSG_INTL(MSG_USD_NEEDSTR), name); 78 else if (cycle) 79 dbg_print(lml, MSG_INTL(MSG_USD_FILECYCLIC), name, cycle); 80 else 81 dbg_print(lml, MSG_INTL(MSG_USD_FILE), name); 82 } 83 84 void 85 Dbg_unused_path(Lm_list *lml, const char *path, uint_t orig, uint_t dup, 86 const char *obj) 87 { 88 const char *fmt; 89 90 if (DBG_NOTCLASS(DBG_C_UNUSED)) 91 return; 92 if (DBG_NOTDETAIL()) 93 return; 94 95 if (orig & LA_SER_LIBPATH) { 96 if (orig & LA_SER_CONFIG) { 97 if (dup) 98 fmt = MSG_INTL(MSG_DUP_LDLIBPATHC); 99 else 100 fmt = MSG_INTL(MSG_USD_LDLIBPATHC); 101 } else { 102 if (dup) 103 fmt = MSG_INTL(MSG_DUP_LDLIBPATH); 104 else 105 fmt = MSG_INTL(MSG_USD_LDLIBPATH); 106 } 107 } else if (orig & LA_SER_RUNPATH) { 108 fmt = MSG_INTL(MSG_USD_RUNPATH); 109 } else 110 return; 111 112 dbg_print(lml, fmt, path, obj); 113 } 114