Path: blob/master/tools/perf/arch/powerpc/util/dwarf-regs.c
10825 views
/*1* Mapping of DWARF debug register numbers into register names.2*3* Copyright (C) 2010 Ian Munsie, IBM Corporation.4*5* This program is free software; you can redistribute it and/or6* modify it under the terms of the GNU General Public License7* as published by the Free Software Foundation; either version8* 2 of the License, or (at your option) any later version.9*/1011#include <libio.h>12#include <dwarf-regs.h>131415struct pt_regs_dwarfnum {16const char *name;17unsigned int dwarfnum;18};1920#define STR(s) #s21#define REG_DWARFNUM_NAME(r, num) {.name = r, .dwarfnum = num}22#define GPR_DWARFNUM_NAME(num) \23{.name = STR(%gpr##num), .dwarfnum = num}24#define REG_DWARFNUM_END {.name = NULL, .dwarfnum = 0}2526/*27* Reference:28* http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html29*/30static const struct pt_regs_dwarfnum regdwarfnum_table[] = {31GPR_DWARFNUM_NAME(0),32GPR_DWARFNUM_NAME(1),33GPR_DWARFNUM_NAME(2),34GPR_DWARFNUM_NAME(3),35GPR_DWARFNUM_NAME(4),36GPR_DWARFNUM_NAME(5),37GPR_DWARFNUM_NAME(6),38GPR_DWARFNUM_NAME(7),39GPR_DWARFNUM_NAME(8),40GPR_DWARFNUM_NAME(9),41GPR_DWARFNUM_NAME(10),42GPR_DWARFNUM_NAME(11),43GPR_DWARFNUM_NAME(12),44GPR_DWARFNUM_NAME(13),45GPR_DWARFNUM_NAME(14),46GPR_DWARFNUM_NAME(15),47GPR_DWARFNUM_NAME(16),48GPR_DWARFNUM_NAME(17),49GPR_DWARFNUM_NAME(18),50GPR_DWARFNUM_NAME(19),51GPR_DWARFNUM_NAME(20),52GPR_DWARFNUM_NAME(21),53GPR_DWARFNUM_NAME(22),54GPR_DWARFNUM_NAME(23),55GPR_DWARFNUM_NAME(24),56GPR_DWARFNUM_NAME(25),57GPR_DWARFNUM_NAME(26),58GPR_DWARFNUM_NAME(27),59GPR_DWARFNUM_NAME(28),60GPR_DWARFNUM_NAME(29),61GPR_DWARFNUM_NAME(30),62GPR_DWARFNUM_NAME(31),63REG_DWARFNUM_NAME("%msr", 66),64REG_DWARFNUM_NAME("%ctr", 109),65REG_DWARFNUM_NAME("%link", 108),66REG_DWARFNUM_NAME("%xer", 101),67REG_DWARFNUM_NAME("%dar", 119),68REG_DWARFNUM_NAME("%dsisr", 118),69REG_DWARFNUM_END,70};7172/**73* get_arch_regstr() - lookup register name from it's DWARF register number74* @n: the DWARF register number75*76* get_arch_regstr() returns the name of the register in struct77* regdwarfnum_table from it's DWARF register number. If the register is not78* found in the table, this returns NULL;79*/80const char *get_arch_regstr(unsigned int n)81{82const struct pt_regs_dwarfnum *roff;83for (roff = regdwarfnum_table; roff->name != NULL; roff++)84if (roff->dwarfnum == n)85return roff->name;86return NULL;87}888990