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 2010 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 /* 32 * Print out a single `entry descriptor' entry. 33 */ 34 void 35 Dbg_ent_entry(Lm_list *lml, uchar_t osabi, Half mach, Ent_desc *enp) 36 { 37 union { 38 Conv_inv_buf_t inv; 39 Conv_sec_flags_buf_t sec_flags; 40 Conv_ent_flags_buf_t ent_flags; 41 Conv_ent_files_flags_buf_t ent_files_flags; 42 } buf; 43 Aliste idx; 44 Ent_desc_file *edfp; 45 46 if (enp->ec_name != NULL) 47 dbg_print(lml, MSG_ORIG(MSG_ECR_NAME), enp->ec_name); 48 49 dbg_print(lml, MSG_ORIG(MSG_ECR_FLAGS), 50 conv_ent_flags(enp->ec_flags, &buf.ent_flags)); 51 52 dbg_print(lml, MSG_ORIG(MSG_ECR_IS_NAME), 53 (enp->ec_is_name ? enp->ec_is_name : MSG_INTL(MSG_STR_NULL)), 54 conv_sec_flags(osabi, mach, enp->ec_attrmask, 0, &buf.sec_flags)); 55 56 dbg_print(lml, MSG_ORIG(MSG_ECR_SEGMENT), 57 (enp->ec_segment->sg_name ? enp->ec_segment->sg_name : 58 MSG_INTL(MSG_STR_NULL)), 59 conv_sec_flags(osabi, mach, enp->ec_attrbits, 0, &buf.sec_flags)); 60 61 dbg_print(lml, MSG_ORIG(MSG_ECR_NDX), EC_WORD(enp->ec_ordndx), 62 conv_sec_type(osabi, mach, enp->ec_type, 0, &buf.inv)); 63 64 if (enp->ec_files) { 65 dbg_print(lml, MSG_ORIG(MSG_ECR_FILES)); 66 for (ALIST_TRAVERSE(enp->ec_files, idx, edfp)) 67 dbg_print(lml, MSG_ORIG(MSG_ECR_FILE), 68 conv_ent_files_flags(edfp->edf_flags, 0, 69 &buf.ent_files_flags), edfp->edf_name); 70 } 71 } 72 73 /* 74 * Print out all `entrance descriptor' entries. 75 */ 76 void 77 Dbg_ent_print(Lm_list *lml, uchar_t osabi, Half mach, APlist *alp) 78 { 79 Ent_desc *enp; 80 Aliste ndx; 81 82 if (DBG_NOTCLASS(DBG_C_ENTRY)) 83 return; 84 85 Dbg_util_nl(lml, DBG_NL_STD); 86 dbg_print(lml, MSG_INTL(MSG_ECR_TITLE)); 87 88 for (APLIST_TRAVERSE(alp, ndx, enp)) { 89 dbg_print(lml, MSG_INTL(MSG_ECR_DESC), EC_WORD(ndx)); 90 Dbg_ent_entry(lml, osabi, mach, enp); 91 } 92 } 93