dwarf.c revision 7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657c
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * CDDL HEADER START
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * The contents of this file are subject to the terms of the
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * Common Development and Distribution License (the "License").
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * You may not use this file except in compliance with the License.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * See the License for the specific language governing permissions
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * and limitations under the License.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * When distributing Covered Code, include this CDDL HEADER in each
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * If applicable, add the following below this CDDL HEADER, with the
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * fields enclosed by brackets "[]" replaced with your own identifying
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * information: Portions Copyright [yyyy] [name of copyright owner]
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * CDDL HEADER END
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * Use is subject to license terms.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * This code is primarily of interest to elfdump. Separating it from dwarf_ehe
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * allows other tools to use dwarf_ehe without also pulling this in.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami/* Instantiate a local copy of conv_map2str() from _conv.h */
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * Translate DW_CFA_ codes, used to identify Call Frame Instructions.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahramiconv_dwarf_cfa(uchar_t op, Conv_fmt_flags_t fmt_flags, Conv_inv_buf_t *inv_buf)
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_ADVANCE_LOC_1, MSG_DW_CFA_ADVANCE_LOC_2,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_ADVANCE_LOC_4, MSG_DW_CFA_OFFSET_EXTENDED,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_RESTORE_EXTENDED, MSG_DW_CFA_UNDEFINED,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_REMEMBER_STATE, MSG_DW_CFA_RESTORE_STATE,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_DEF_CFA, MSG_DW_CFA_DEF_CFA_REGISTER,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_DEF_CFA_OFFSET, MSG_DW_CFA_DEF_CFA_EXPRESSION,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_EXPRESSION, MSG_DW_CFA_OFFSET_EXTENDED_SF,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_DEF_CFA_SF, MSG_DW_CFA_DEF_CFA_OFFSET_SF,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_VAL_OFFSET, MSG_DW_CFA_VAL_OFFSET_SF,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_GNU_WINDOW_SAVE, MSG_DW_CFA_GNU_ARGS_SIZE,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * DWARF CFA opcodes are bytes. The top 2 bits are a primary
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * opcode, and if zero, the lower 6 bits specify a sub-opcode
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami return (conv_map2str(inv_buf, op, fmt_flags, ARRAY_NELTS(cfa), cfa));
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * Translate DWARF register numbers to hardware specific names
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * If good_name is non-NULL, conv_dwarf_regname() will set the variable to
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * True(1) if the returned string is considered to be a good name to
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * display, and False(0) otherwise. To be considered "good":
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * - The name must be a well known mnemonic for a register
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * from the machine type in question.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * - The name must be different than the DWARF name for
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * the same register.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * The returned string is usable, regardless of the value returned in
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * *good_name.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahramiconv_dwarf_regname(Half mach, Word regno, Conv_fmt_flags_t fmt_flags,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * amd64 has several in-bounds names we'd rather not
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * use. R8-R15 have the same name as their DWARF counterparts.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * 56-57, and 60-61 are reserved, and don't have a good name.