1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun #include <errno.h> 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef REMOTE_UNWIND_LIBUNWIND 5*4882a593Smuzhiyun #include <libunwind.h> 6*4882a593Smuzhiyun #include "perf_regs.h" 7*4882a593Smuzhiyun #include "../../util/unwind.h" 8*4882a593Smuzhiyun #endif 9*4882a593Smuzhiyun #include "../../util/debug.h" 10*4882a593Smuzhiyun LIBUNWIND__ARCH_REG_ID(int regnum)11*4882a593Smuzhiyunint LIBUNWIND__ARCH_REG_ID(int regnum) 12*4882a593Smuzhiyun { 13*4882a593Smuzhiyun switch (regnum) { 14*4882a593Smuzhiyun case UNW_AARCH64_X0: 15*4882a593Smuzhiyun return PERF_REG_ARM64_X0; 16*4882a593Smuzhiyun case UNW_AARCH64_X1: 17*4882a593Smuzhiyun return PERF_REG_ARM64_X1; 18*4882a593Smuzhiyun case UNW_AARCH64_X2: 19*4882a593Smuzhiyun return PERF_REG_ARM64_X2; 20*4882a593Smuzhiyun case UNW_AARCH64_X3: 21*4882a593Smuzhiyun return PERF_REG_ARM64_X3; 22*4882a593Smuzhiyun case UNW_AARCH64_X4: 23*4882a593Smuzhiyun return PERF_REG_ARM64_X4; 24*4882a593Smuzhiyun case UNW_AARCH64_X5: 25*4882a593Smuzhiyun return PERF_REG_ARM64_X5; 26*4882a593Smuzhiyun case UNW_AARCH64_X6: 27*4882a593Smuzhiyun return PERF_REG_ARM64_X6; 28*4882a593Smuzhiyun case UNW_AARCH64_X7: 29*4882a593Smuzhiyun return PERF_REG_ARM64_X7; 30*4882a593Smuzhiyun case UNW_AARCH64_X8: 31*4882a593Smuzhiyun return PERF_REG_ARM64_X8; 32*4882a593Smuzhiyun case UNW_AARCH64_X9: 33*4882a593Smuzhiyun return PERF_REG_ARM64_X9; 34*4882a593Smuzhiyun case UNW_AARCH64_X10: 35*4882a593Smuzhiyun return PERF_REG_ARM64_X10; 36*4882a593Smuzhiyun case UNW_AARCH64_X11: 37*4882a593Smuzhiyun return PERF_REG_ARM64_X11; 38*4882a593Smuzhiyun case UNW_AARCH64_X12: 39*4882a593Smuzhiyun return PERF_REG_ARM64_X12; 40*4882a593Smuzhiyun case UNW_AARCH64_X13: 41*4882a593Smuzhiyun return PERF_REG_ARM64_X13; 42*4882a593Smuzhiyun case UNW_AARCH64_X14: 43*4882a593Smuzhiyun return PERF_REG_ARM64_X14; 44*4882a593Smuzhiyun case UNW_AARCH64_X15: 45*4882a593Smuzhiyun return PERF_REG_ARM64_X15; 46*4882a593Smuzhiyun case UNW_AARCH64_X16: 47*4882a593Smuzhiyun return PERF_REG_ARM64_X16; 48*4882a593Smuzhiyun case UNW_AARCH64_X17: 49*4882a593Smuzhiyun return PERF_REG_ARM64_X17; 50*4882a593Smuzhiyun case UNW_AARCH64_X18: 51*4882a593Smuzhiyun return PERF_REG_ARM64_X18; 52*4882a593Smuzhiyun case UNW_AARCH64_X19: 53*4882a593Smuzhiyun return PERF_REG_ARM64_X19; 54*4882a593Smuzhiyun case UNW_AARCH64_X20: 55*4882a593Smuzhiyun return PERF_REG_ARM64_X20; 56*4882a593Smuzhiyun case UNW_AARCH64_X21: 57*4882a593Smuzhiyun return PERF_REG_ARM64_X21; 58*4882a593Smuzhiyun case UNW_AARCH64_X22: 59*4882a593Smuzhiyun return PERF_REG_ARM64_X22; 60*4882a593Smuzhiyun case UNW_AARCH64_X23: 61*4882a593Smuzhiyun return PERF_REG_ARM64_X23; 62*4882a593Smuzhiyun case UNW_AARCH64_X24: 63*4882a593Smuzhiyun return PERF_REG_ARM64_X24; 64*4882a593Smuzhiyun case UNW_AARCH64_X25: 65*4882a593Smuzhiyun return PERF_REG_ARM64_X25; 66*4882a593Smuzhiyun case UNW_AARCH64_X26: 67*4882a593Smuzhiyun return PERF_REG_ARM64_X26; 68*4882a593Smuzhiyun case UNW_AARCH64_X27: 69*4882a593Smuzhiyun return PERF_REG_ARM64_X27; 70*4882a593Smuzhiyun case UNW_AARCH64_X28: 71*4882a593Smuzhiyun return PERF_REG_ARM64_X28; 72*4882a593Smuzhiyun case UNW_AARCH64_X29: 73*4882a593Smuzhiyun return PERF_REG_ARM64_X29; 74*4882a593Smuzhiyun case UNW_AARCH64_X30: 75*4882a593Smuzhiyun return PERF_REG_ARM64_LR; 76*4882a593Smuzhiyun case UNW_AARCH64_SP: 77*4882a593Smuzhiyun return PERF_REG_ARM64_SP; 78*4882a593Smuzhiyun case UNW_AARCH64_PC: 79*4882a593Smuzhiyun return PERF_REG_ARM64_PC; 80*4882a593Smuzhiyun default: 81*4882a593Smuzhiyun pr_err("unwind: invalid reg id %d\n", regnum); 82*4882a593Smuzhiyun return -EINVAL; 83*4882a593Smuzhiyun } 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun return -EINVAL; 86*4882a593Smuzhiyun } 87