7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami/*
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * CDDL HEADER START
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami *
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 *
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * or http://www.opensolaris.org/os/licensing.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * See the License for the specific language governing permissions
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * and limitations under the License.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami *
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 *
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * CDDL HEADER END
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami */
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami/*
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * Use is subject to license terms.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami */
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami#include <strings.h>
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami#include <dwarf.h>
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami#include "_conv.h"
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami#include <dwarf_msg.h>
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami/*
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 */
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami/*
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * Translate DW_CFA_ codes, used to identify Call Frame Instructions.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami */
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahramiconst char *
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahramiconv_dwarf_cfa(uchar_t op, Conv_fmt_flags_t fmt_flags, Conv_inv_buf_t *inv_buf)
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami{
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami static const Msg cfa[] = {
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_NOP, MSG_DW_CFA_SET_LOC,
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_SAME_VALUE, MSG_DW_CFA_REGISTER,
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_VAL_EXPRESSION
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const Msg cfa_mips[] = { MSG_DW_CFA_MIPS_ADV_LOC8 };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const Msg cfa_gnu[] = {
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_GNU_WINDOW_SAVE, MSG_DW_CFA_GNU_ARGS_SIZE,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_DW_CFA_GNU_NEGATIVE_OFF_X
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_msg_t ds_msg_cfa = {
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_MSG_INIT(0, cfa) };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_msg_t ds_msg_cfa_mips = {
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_MSG_INIT(0x1d, cfa_mips) };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_msg_t ds_msg_cfa_gnu = {
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_MSG_INIT(0x2d, cfa_gnu) };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_t *ds_cfa[] = { CONV_DS_ADDR(ds_msg_cfa),
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_ADDR(ds_msg_cfa_mips), CONV_DS_ADDR(ds_msg_cfa_gnu), NULL };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami /*
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 */
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami switch (op >> 6) {
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami case 0x1:
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami return (MSG_ORIG(MSG_DW_CFA_ADVANCE_LOC));
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami case 0x2:
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami return (MSG_ORIG(MSG_DW_CFA_OFFSET));
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami case 0x3:
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami return (MSG_ORIG(MSG_DW_CFA_RESTORE));
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami }
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, op, ds_cfa,
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami fmt_flags, inv_buf));
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami}
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami/*
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * Translate DWARF register numbers to hardware specific names
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami *
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 *
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * - The name must be a well known mnemonic for a register
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * from the machine type in question.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami *
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * - The name must be different than the DWARF name for
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * the same register.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami *
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * The returned string is usable, regardless of the value returned in
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami * *good_name.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami */
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahramiconst char *
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahramiconv_dwarf_regname(Half mach, Word regno, Conv_fmt_flags_t fmt_flags,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami int *good_name, Conv_inv_buf_t *inv_buf)
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami{
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami static const Msg reg_amd64[67] = {
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_RAX, MSG_REG_RDX,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_RCX, MSG_REG_RBX,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_RSI, MSG_REG_RDI,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_RBP, MSG_REG_RSP,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_R8, MSG_REG_R9,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_R10, MSG_REG_R11,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_R12, MSG_REG_R13,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_R14, MSG_REG_R15,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_RA, MSG_REG_PERXMM0,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERXMM1, MSG_REG_PERXMM2,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERXMM3, MSG_REG_PERXMM4,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERXMM5, MSG_REG_PERXMM6,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERXMM7, MSG_REG_PERXMM8,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERXMM9, MSG_REG_PERXMM10,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERXMM11, MSG_REG_PERXMM12,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERXMM13, MSG_REG_PERXMM14,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERXMM15, MSG_REG_PERST0,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERST1, MSG_REG_PERST2,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERST3, MSG_REG_PERST4,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERST5, MSG_REG_PERST6,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERST7, MSG_REG_PERMM0,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERMM1, MSG_REG_PERMM2,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERMM3, MSG_REG_PERMM4,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERMM5, MSG_REG_PERMM6,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERMM7, MSG_REG_PERRFLAGS,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERES, MSG_REG_PERCS,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERSS, MSG_REG_PERDS,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERFS, MSG_REG_PERGS,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_RESERVED, MSG_REG_RESERVED,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERFSDOTBASE, MSG_REG_PERGSDOTBASE,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_RESERVED, MSG_REG_RESERVED,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERTR, MSG_REG_PERLDTR,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERMXCSR, MSG_REG_PERFCW,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_PERFSW
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_msg_t ds_msg_reg_amd64 = {
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_MSG_INIT(0, reg_amd64) };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_t *ds_reg_amd64[] = {
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_ADDR(ds_msg_reg_amd64), NULL };
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami static const Msg reg_i386[8] = {
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_EAX, MSG_REG_ECX,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_EDX, MSG_REG_EBX,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_UESP, MSG_REG_EBP,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_ESI, MSG_REG_EDI
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_msg_t ds_msg_reg_i386 = {
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_MSG_INIT(0, reg_i386) };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_t *ds_reg_i386[] = {
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_ADDR(ds_msg_reg_i386), NULL };
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami static const Msg reg_sparc[64] = {
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_G0, MSG_REG_G1,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_G2, MSG_REG_G3,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_G4, MSG_REG_G5,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_G6, MSG_REG_G7,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_O0, MSG_REG_O1,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_O2, MSG_REG_O3,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_O4, MSG_REG_O5,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_O6, MSG_REG_O7,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_L0, MSG_REG_L1,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_L2, MSG_REG_L3,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_L4, MSG_REG_L5,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_L6, MSG_REG_L7,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_I0, MSG_REG_I1,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_I2, MSG_REG_I3,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_I4, MSG_REG_I5,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_I6, MSG_REG_I7,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F0, MSG_REG_F1,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F2, MSG_REG_F3,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F4, MSG_REG_F5,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F6, MSG_REG_F7,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F8, MSG_REG_F9,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F10, MSG_REG_F11,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F12, MSG_REG_F13,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F14, MSG_REG_F15,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F16, MSG_REG_F17,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F18, MSG_REG_F19,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F20, MSG_REG_F21,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F22, MSG_REG_F23,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F24, MSG_REG_F25,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F26, MSG_REG_F27,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F28, MSG_REG_F29,
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami MSG_REG_F30, MSG_REG_F31
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_msg_t ds_msg_reg_sparc = {
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_MSG_INIT(0, reg_sparc) };
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami static const conv_ds_t *ds_reg_sparc[] = {
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami CONV_DS_ADDR(ds_msg_reg_sparc), NULL };
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami switch (mach) {
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami case EM_AMD64:
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami /*
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.
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami */
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami if (good_name)
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami *good_name = ((regno < 8) || (regno > 15)) &&
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami (regno != 56) && (regno != 57) &&
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami (regno != 60) && (regno != 61) &&
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami (regno < ARRAY_NELTS(reg_amd64));
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, regno,
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami ds_reg_amd64, fmt_flags, inv_buf));
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami case EM_386:
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami case EM_486:
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami if (good_name)
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami *good_name = (regno < ARRAY_NELTS(reg_i386));
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, regno,
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami ds_reg_i386, fmt_flags, inv_buf));
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami case EM_SPARC:
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami case EM_SPARC32PLUS:
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami case EM_SPARCV9:
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami if (good_name)
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami *good_name = (regno < ARRAY_NELTS(reg_sparc));
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami return (conv_map_ds(ELFOSABI_NONE, EM_NONE, regno,
4f680cc668fa6cf678c531083400ade9a9c7934cAli Bahrami ds_reg_sparc, fmt_flags, inv_buf));
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami }
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami if (good_name)
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami *good_name = 0;
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami return (conv_invalid_val(inv_buf, regno, 0));
7e16fca05dfbcfd32c2ebc9e4d1abdac1cd8657cAli Bahrami}