cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

unwind-libunwind.c (2016B)


      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 */