18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci#include <errno.h>
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#ifndef REMOTE_UNWIND_LIBUNWIND
58c2ecf20Sopenharmony_ci#include <libunwind.h>
68c2ecf20Sopenharmony_ci#include "perf_regs.h"
78c2ecf20Sopenharmony_ci#include "../../util/unwind.h"
88c2ecf20Sopenharmony_ci#endif
98c2ecf20Sopenharmony_ci#include "../../util/debug.h"
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ciint LIBUNWIND__ARCH_REG_ID(int regnum)
128c2ecf20Sopenharmony_ci{
138c2ecf20Sopenharmony_ci	switch (regnum) {
148c2ecf20Sopenharmony_ci	case UNW_AARCH64_X0:
158c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X0;
168c2ecf20Sopenharmony_ci	case UNW_AARCH64_X1:
178c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X1;
188c2ecf20Sopenharmony_ci	case UNW_AARCH64_X2:
198c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X2;
208c2ecf20Sopenharmony_ci	case UNW_AARCH64_X3:
218c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X3;
228c2ecf20Sopenharmony_ci	case UNW_AARCH64_X4:
238c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X4;
248c2ecf20Sopenharmony_ci	case UNW_AARCH64_X5:
258c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X5;
268c2ecf20Sopenharmony_ci	case UNW_AARCH64_X6:
278c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X6;
288c2ecf20Sopenharmony_ci	case UNW_AARCH64_X7:
298c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X7;
308c2ecf20Sopenharmony_ci	case UNW_AARCH64_X8:
318c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X8;
328c2ecf20Sopenharmony_ci	case UNW_AARCH64_X9:
338c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X9;
348c2ecf20Sopenharmony_ci	case UNW_AARCH64_X10:
358c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X10;
368c2ecf20Sopenharmony_ci	case UNW_AARCH64_X11:
378c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X11;
388c2ecf20Sopenharmony_ci	case UNW_AARCH64_X12:
398c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X12;
408c2ecf20Sopenharmony_ci	case UNW_AARCH64_X13:
418c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X13;
428c2ecf20Sopenharmony_ci	case UNW_AARCH64_X14:
438c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X14;
448c2ecf20Sopenharmony_ci	case UNW_AARCH64_X15:
458c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X15;
468c2ecf20Sopenharmony_ci	case UNW_AARCH64_X16:
478c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X16;
488c2ecf20Sopenharmony_ci	case UNW_AARCH64_X17:
498c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X17;
508c2ecf20Sopenharmony_ci	case UNW_AARCH64_X18:
518c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X18;
528c2ecf20Sopenharmony_ci	case UNW_AARCH64_X19:
538c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X19;
548c2ecf20Sopenharmony_ci	case UNW_AARCH64_X20:
558c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X20;
568c2ecf20Sopenharmony_ci	case UNW_AARCH64_X21:
578c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X21;
588c2ecf20Sopenharmony_ci	case UNW_AARCH64_X22:
598c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X22;
608c2ecf20Sopenharmony_ci	case UNW_AARCH64_X23:
618c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X23;
628c2ecf20Sopenharmony_ci	case UNW_AARCH64_X24:
638c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X24;
648c2ecf20Sopenharmony_ci	case UNW_AARCH64_X25:
658c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X25;
668c2ecf20Sopenharmony_ci	case UNW_AARCH64_X26:
678c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X26;
688c2ecf20Sopenharmony_ci	case UNW_AARCH64_X27:
698c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X27;
708c2ecf20Sopenharmony_ci	case UNW_AARCH64_X28:
718c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X28;
728c2ecf20Sopenharmony_ci	case UNW_AARCH64_X29:
738c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_X29;
748c2ecf20Sopenharmony_ci	case UNW_AARCH64_X30:
758c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_LR;
768c2ecf20Sopenharmony_ci	case UNW_AARCH64_SP:
778c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_SP;
788c2ecf20Sopenharmony_ci	case UNW_AARCH64_PC:
798c2ecf20Sopenharmony_ci		return PERF_REG_ARM64_PC;
808c2ecf20Sopenharmony_ci	default:
818c2ecf20Sopenharmony_ci		pr_err("unwind: invalid reg id %d\n", regnum);
828c2ecf20Sopenharmony_ci		return -EINVAL;
838c2ecf20Sopenharmony_ci	}
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ci	return -EINVAL;
868c2ecf20Sopenharmony_ci}
87