brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · 4735797 Raw
116 lines · c
1// SPDX-License-Identifier: GPL-2.02 3#include <errno.h>4#include "../../util/debug.h"5#ifndef REMOTE_UNWIND_LIBUNWIND6#include <libunwind.h>7#include "perf_regs.h"8#include "../../util/unwind.h"9#endif10 11#ifdef HAVE_ARCH_X86_64_SUPPORT12int LIBUNWIND__ARCH_REG_ID(int regnum)13{14	int id;15 16	switch (regnum) {17	case UNW_X86_64_RAX:18		id = PERF_REG_X86_AX;19		break;20	case UNW_X86_64_RDX:21		id = PERF_REG_X86_DX;22		break;23	case UNW_X86_64_RCX:24		id = PERF_REG_X86_CX;25		break;26	case UNW_X86_64_RBX:27		id = PERF_REG_X86_BX;28		break;29	case UNW_X86_64_RSI:30		id = PERF_REG_X86_SI;31		break;32	case UNW_X86_64_RDI:33		id = PERF_REG_X86_DI;34		break;35	case UNW_X86_64_RBP:36		id = PERF_REG_X86_BP;37		break;38	case UNW_X86_64_RSP:39		id = PERF_REG_X86_SP;40		break;41	case UNW_X86_64_R8:42		id = PERF_REG_X86_R8;43		break;44	case UNW_X86_64_R9:45		id = PERF_REG_X86_R9;46		break;47	case UNW_X86_64_R10:48		id = PERF_REG_X86_R10;49		break;50	case UNW_X86_64_R11:51		id = PERF_REG_X86_R11;52		break;53	case UNW_X86_64_R12:54		id = PERF_REG_X86_R12;55		break;56	case UNW_X86_64_R13:57		id = PERF_REG_X86_R13;58		break;59	case UNW_X86_64_R14:60		id = PERF_REG_X86_R14;61		break;62	case UNW_X86_64_R15:63		id = PERF_REG_X86_R15;64		break;65	case UNW_X86_64_RIP:66		id = PERF_REG_X86_IP;67		break;68	default:69		pr_err("unwind: invalid reg id %d\n", regnum);70		return -EINVAL;71	}72 73	return id;74}75#else76int LIBUNWIND__ARCH_REG_ID(int regnum)77{78	int id;79 80	switch (regnum) {81	case UNW_X86_EAX:82		id = PERF_REG_X86_AX;83		break;84	case UNW_X86_EDX:85		id = PERF_REG_X86_DX;86		break;87	case UNW_X86_ECX:88		id = PERF_REG_X86_CX;89		break;90	case UNW_X86_EBX:91		id = PERF_REG_X86_BX;92		break;93	case UNW_X86_ESI:94		id = PERF_REG_X86_SI;95		break;96	case UNW_X86_EDI:97		id = PERF_REG_X86_DI;98		break;99	case UNW_X86_EBP:100		id = PERF_REG_X86_BP;101		break;102	case UNW_X86_ESP:103		id = PERF_REG_X86_SP;104		break;105	case UNW_X86_EIP:106		id = PERF_REG_X86_IP;107		break;108	default:109		pr_err("unwind: invalid reg id %d\n", regnum);110		return -EINVAL;111	}112 113	return id;114}115#endif /* HAVE_ARCH_X86_64_SUPPORT */116