1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-or-later 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright 2016 Chandan Kumar, IBM Corporation. 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #include <errno.h> 7*4882a593Smuzhiyun #include <libunwind.h> 8*4882a593Smuzhiyun #include <asm/perf_regs.h> 9*4882a593Smuzhiyun #include "../../util/unwind.h" 10*4882a593Smuzhiyun #include "../../util/debug.h" 11*4882a593Smuzhiyun libunwind__arch_reg_id(int regnum)12*4882a593Smuzhiyunint libunwind__arch_reg_id(int regnum) 13*4882a593Smuzhiyun { 14*4882a593Smuzhiyun switch (regnum) { 15*4882a593Smuzhiyun case UNW_PPC64_R0: 16*4882a593Smuzhiyun return PERF_REG_POWERPC_R0; 17*4882a593Smuzhiyun case UNW_PPC64_R1: 18*4882a593Smuzhiyun return PERF_REG_POWERPC_R1; 19*4882a593Smuzhiyun case UNW_PPC64_R2: 20*4882a593Smuzhiyun return PERF_REG_POWERPC_R2; 21*4882a593Smuzhiyun case UNW_PPC64_R3: 22*4882a593Smuzhiyun return PERF_REG_POWERPC_R3; 23*4882a593Smuzhiyun case UNW_PPC64_R4: 24*4882a593Smuzhiyun return PERF_REG_POWERPC_R4; 25*4882a593Smuzhiyun case UNW_PPC64_R5: 26*4882a593Smuzhiyun return PERF_REG_POWERPC_R5; 27*4882a593Smuzhiyun case UNW_PPC64_R6: 28*4882a593Smuzhiyun return PERF_REG_POWERPC_R6; 29*4882a593Smuzhiyun case UNW_PPC64_R7: 30*4882a593Smuzhiyun return PERF_REG_POWERPC_R7; 31*4882a593Smuzhiyun case UNW_PPC64_R8: 32*4882a593Smuzhiyun return PERF_REG_POWERPC_R8; 33*4882a593Smuzhiyun case UNW_PPC64_R9: 34*4882a593Smuzhiyun return PERF_REG_POWERPC_R9; 35*4882a593Smuzhiyun case UNW_PPC64_R10: 36*4882a593Smuzhiyun return PERF_REG_POWERPC_R10; 37*4882a593Smuzhiyun case UNW_PPC64_R11: 38*4882a593Smuzhiyun return PERF_REG_POWERPC_R11; 39*4882a593Smuzhiyun case UNW_PPC64_R12: 40*4882a593Smuzhiyun return PERF_REG_POWERPC_R12; 41*4882a593Smuzhiyun case UNW_PPC64_R13: 42*4882a593Smuzhiyun return PERF_REG_POWERPC_R13; 43*4882a593Smuzhiyun case UNW_PPC64_R14: 44*4882a593Smuzhiyun return PERF_REG_POWERPC_R14; 45*4882a593Smuzhiyun case UNW_PPC64_R15: 46*4882a593Smuzhiyun return PERF_REG_POWERPC_R15; 47*4882a593Smuzhiyun case UNW_PPC64_R16: 48*4882a593Smuzhiyun return PERF_REG_POWERPC_R16; 49*4882a593Smuzhiyun case UNW_PPC64_R17: 50*4882a593Smuzhiyun return PERF_REG_POWERPC_R17; 51*4882a593Smuzhiyun case UNW_PPC64_R18: 52*4882a593Smuzhiyun return PERF_REG_POWERPC_R18; 53*4882a593Smuzhiyun case UNW_PPC64_R19: 54*4882a593Smuzhiyun return PERF_REG_POWERPC_R19; 55*4882a593Smuzhiyun case UNW_PPC64_R20: 56*4882a593Smuzhiyun return PERF_REG_POWERPC_R20; 57*4882a593Smuzhiyun case UNW_PPC64_R21: 58*4882a593Smuzhiyun return PERF_REG_POWERPC_R21; 59*4882a593Smuzhiyun case UNW_PPC64_R22: 60*4882a593Smuzhiyun return PERF_REG_POWERPC_R22; 61*4882a593Smuzhiyun case UNW_PPC64_R23: 62*4882a593Smuzhiyun return PERF_REG_POWERPC_R23; 63*4882a593Smuzhiyun case UNW_PPC64_R24: 64*4882a593Smuzhiyun return PERF_REG_POWERPC_R24; 65*4882a593Smuzhiyun case UNW_PPC64_R25: 66*4882a593Smuzhiyun return PERF_REG_POWERPC_R25; 67*4882a593Smuzhiyun case UNW_PPC64_R26: 68*4882a593Smuzhiyun return PERF_REG_POWERPC_R26; 69*4882a593Smuzhiyun case UNW_PPC64_R27: 70*4882a593Smuzhiyun return PERF_REG_POWERPC_R27; 71*4882a593Smuzhiyun case UNW_PPC64_R28: 72*4882a593Smuzhiyun return PERF_REG_POWERPC_R28; 73*4882a593Smuzhiyun case UNW_PPC64_R29: 74*4882a593Smuzhiyun return PERF_REG_POWERPC_R29; 75*4882a593Smuzhiyun case UNW_PPC64_R30: 76*4882a593Smuzhiyun return PERF_REG_POWERPC_R30; 77*4882a593Smuzhiyun case UNW_PPC64_R31: 78*4882a593Smuzhiyun return PERF_REG_POWERPC_R31; 79*4882a593Smuzhiyun case UNW_PPC64_LR: 80*4882a593Smuzhiyun return PERF_REG_POWERPC_LINK; 81*4882a593Smuzhiyun case UNW_PPC64_CTR: 82*4882a593Smuzhiyun return PERF_REG_POWERPC_CTR; 83*4882a593Smuzhiyun case UNW_PPC64_XER: 84*4882a593Smuzhiyun return PERF_REG_POWERPC_XER; 85*4882a593Smuzhiyun case UNW_PPC64_NIP: 86*4882a593Smuzhiyun return PERF_REG_POWERPC_NIP; 87*4882a593Smuzhiyun default: 88*4882a593Smuzhiyun pr_err("unwind: invalid reg id %d\n", regnum); 89*4882a593Smuzhiyun return -EINVAL; 90*4882a593Smuzhiyun } 91*4882a593Smuzhiyun return -EINVAL; 92*4882a593Smuzhiyun } 93