File Index
Files and directories
Sign in
FILE

unwind-libunwind.c

File preview with syntax highlighting.

linux-6.19.14/tools/perf/arch/x86/util/unwind-libunwind.c C
  1// SPDX-License-Identifier: GPL-2.0
  2
  3#include <errno.h>
  4#include "../../util/debug.h"
  5#ifndef REMOTE_UNWIND_LIBUNWIND
  6#include <libunwind.h>
  7#include "perf_regs.h"
  8#include "../../util/unwind.h"
  9#endif
 10
 11#ifdef HAVE_ARCH_X86_64_SUPPORT
 12int 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#else
 76int 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 */
~/ Read-only file preview.