Home | History | Annotate | Download | only in common
      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	"msg.h"
     28 #include	"_debug.h"
     29 #include	"libld.h"
     30 
     31 void
     32 Dbg_move_data(Rt_map *lmp)
     33 {
     34 	Lm_list	*lml = LIST(lmp);
     35 
     36 	if (DBG_NOTCLASS(DBG_C_MOVE))
     37 		return;
     38 
     39 	dbg_print(lml, MSG_INTL(MSG_MOVE_FILE), NAME(lmp));
     40 	dbg_print(lml, MSG_INTL(MSG_MOVE_TITLE2));
     41 }
     42 
     43 void
     44 Dbg_move_adjexpandreloc(Lm_list *lml, Xword offset, const char *name)
     45 {
     46 	if (DBG_NOTCLASS(DBG_C_MOVE | DBG_C_RELOC))
     47 		return;
     48 	if (DBG_NOTDETAIL())
     49 		return;
     50 
     51 	dbg_print(lml, MSG_INTL(MSG_MOVE_ADJEXPAND), Dbg_demangle_name(name),
     52 	    EC_XWORD(offset));
     53 }
     54 
     55 void
     56 Dbg_move_adjmovereloc(Lm_list *lml, Xword offset1, Xword offset2,
     57     const char *name)
     58 {
     59 	if (DBG_NOTCLASS(DBG_C_MOVE | DBG_C_RELOC))
     60 		return;
     61 	if (DBG_NOTDETAIL())
     62 		return;
     63 
     64 	dbg_print(lml, MSG_INTL(MSG_MOVE_ADJMOVE), Dbg_demangle_name(name),
     65 	    EC_XWORD(offset1), EC_XWORD(offset2));
     66 }
     67 
     68 void
     69 Dbg_move_outsctadj(Lm_list *lml, Sym_desc *sdp)
     70 {
     71 	if (DBG_NOTCLASS(DBG_C_MOVE | DBG_C_RELOC))
     72 		return;
     73 	if (DBG_NOTDETAIL())
     74 		return;
     75 
     76 	dbg_print(lml, MSG_INTL(MSG_MOVE_OUTSCTADJ),
     77 	    Dbg_demangle_name(sdp->sd_name));
     78 }
     79 
     80 void
     81 Dbg_move_parexpn(Lm_list *lml, const char *name, const char *reason)
     82 {
     83 	if (DBG_NOTCLASS(DBG_C_MOVE))
     84 		return;
     85 
     86 	Dbg_util_nl(lml, DBG_NL_STD);
     87 	dbg_print(lml, MSG_INTL(MSG_MOVE_PAREXPN), name, reason);
     88 	dbg_print(lml, MSG_INTL(MSG_MOVE_TITLE1));
     89 }
     90 
     91 void
     92 Dbg_move_outmove(Lm_list *lml, const char *name)
     93 {
     94 	if (DBG_NOTCLASS(DBG_C_MOVE))
     95 		return;
     96 
     97 	Dbg_util_nl(lml, DBG_NL_STD);
     98 	dbg_print(lml, MSG_INTL(MSG_MOVE_OUTMOVE), name);
     99 	dbg_print(lml, MSG_INTL(MSG_MOVE_TITLE1));
    100 }
    101 
    102 void
    103 Dbg_move_expand(Lm_list *lml, Move *mv, Addr addr)
    104 {
    105 	if (DBG_NOTCLASS(DBG_C_MOVE))
    106 		return;
    107 
    108 	dbg_print(lml, MSG_INTL(MSG_MOVE_EXPAND), EC_ADDR(addr),
    109 	    EC_LWORD(mv->m_value));
    110 }
    111 
    112 void
    113 Dbg_move_input(Lm_list *lml, const char *name)
    114 {
    115 	if (DBG_NOTCLASS(DBG_C_MOVE))
    116 		return;
    117 
    118 	Dbg_util_nl(lml, DBG_NL_STD);
    119 	dbg_print(lml, MSG_INTL(MSG_MOVE_INPUT), name);
    120 	dbg_print(lml, MSG_INTL(MSG_MOVE_TITLE1));
    121 }
    122 
    123 void
    124 Dbg_move_entry1(Lm_list *lml, int which, Move *mv, Sym_desc *s)
    125 {
    126 	const char *str;
    127 
    128 	if (DBG_NOTCLASS(DBG_C_MOVE))
    129 		return;
    130 
    131 	if (which)
    132 		str = MSG_INTL(MSG_MOVE_ENTRYIN);
    133 	else
    134 		str = MSG_INTL(MSG_MOVE_ENTRYOUT);
    135 
    136 	dbg_print(lml, str, EC_XWORD(mv->m_poffset), ELF_M_SIZE(mv->m_info),
    137 	    mv->m_repeat, mv->m_stride, EC_LWORD(mv->m_value), s->sd_name);
    138 }
    139 
    140 void
    141 Dbg_move_entry2(Lm_list *lml, Move *mv, Word st_name, const char *name)
    142 {
    143 	const char *sname;
    144 
    145 	if (DBG_NOTCLASS(DBG_C_MOVE))
    146 		return;
    147 
    148 	if (st_name)
    149 		sname = name;
    150 	else
    151 		sname = MSG_INTL(MSG_STR_UNKNOWN);
    152 
    153 	dbg_print(lml, MSG_INTL(MSG_MOVE_ENTRYIN), EC_XWORD(mv->m_poffset),
    154 	    ELF_M_SIZE(mv->m_info), mv->m_repeat, mv->m_stride,
    155 	    EC_LWORD(mv->m_value), sname);
    156 }
    157 
    158 void
    159 Dbg_move_bad(Lm_list *lml, ulong_t num, const char *name, Addr addr)
    160 {
    161 	if (DBG_NOTCLASS(DBG_C_MOVE))
    162 		return;
    163 
    164 	dbg_print(lml, MSG_INTL(MSG_MOVE_BAD), EC_XWORD(num), name,
    165 	    EC_ADDR(addr));
    166 }
    167