root/tools/perf/arch/x86/util/unwind-libunwind.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. LIBUNWIND__ARCH_REG_ID
  2. LIBUNWIND__ARCH_REG_ID

   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
  12 int 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
  76 int 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 */

/* [<][>][^][v][top][bottom][index][help] */