This source file includes following definitions.
- get_arch_regstr
- regs_query_register_offset
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 #include <errno.h>
   9 #include <stddef.h>
  10 #include <string.h>
  11 #include <dwarf-regs.h>
  12 #include <linux/ptrace.h> 
  13 #include <linux/stringify.h>
  14 
  15 struct pt_regs_dwarfnum {
  16         const char *name;
  17         unsigned int dwarfnum;
  18 };
  19 
  20 #define REG_DWARFNUM_NAME(r, num) {.name = r, .dwarfnum = num}
  21 #define GPR_DWARFNUM_NAME(num) \
  22         {.name = __stringify(%x##num), .dwarfnum = num}
  23 #define REG_DWARFNUM_END {.name = NULL, .dwarfnum = 0}
  24 #define DWARFNUM2OFFSET(index) \
  25         (index * sizeof((struct user_pt_regs *)0)->regs[0])
  26 
  27 
  28 
  29 
  30 
  31 static const struct pt_regs_dwarfnum regdwarfnum_table[] = {
  32         GPR_DWARFNUM_NAME(0),
  33         GPR_DWARFNUM_NAME(1),
  34         GPR_DWARFNUM_NAME(2),
  35         GPR_DWARFNUM_NAME(3),
  36         GPR_DWARFNUM_NAME(4),
  37         GPR_DWARFNUM_NAME(5),
  38         GPR_DWARFNUM_NAME(6),
  39         GPR_DWARFNUM_NAME(7),
  40         GPR_DWARFNUM_NAME(8),
  41         GPR_DWARFNUM_NAME(9),
  42         GPR_DWARFNUM_NAME(10),
  43         GPR_DWARFNUM_NAME(11),
  44         GPR_DWARFNUM_NAME(12),
  45         GPR_DWARFNUM_NAME(13),
  46         GPR_DWARFNUM_NAME(14),
  47         GPR_DWARFNUM_NAME(15),
  48         GPR_DWARFNUM_NAME(16),
  49         GPR_DWARFNUM_NAME(17),
  50         GPR_DWARFNUM_NAME(18),
  51         GPR_DWARFNUM_NAME(19),
  52         GPR_DWARFNUM_NAME(20),
  53         GPR_DWARFNUM_NAME(21),
  54         GPR_DWARFNUM_NAME(22),
  55         GPR_DWARFNUM_NAME(23),
  56         GPR_DWARFNUM_NAME(24),
  57         GPR_DWARFNUM_NAME(25),
  58         GPR_DWARFNUM_NAME(26),
  59         GPR_DWARFNUM_NAME(27),
  60         GPR_DWARFNUM_NAME(28),
  61         GPR_DWARFNUM_NAME(29),
  62         REG_DWARFNUM_NAME("%lr", 30),
  63         REG_DWARFNUM_NAME("%sp", 31),
  64         REG_DWARFNUM_END,
  65 };
  66 
  67 
  68 
  69 
  70 
  71 
  72 
  73 
  74 
  75 const char *get_arch_regstr(unsigned int n)
  76 {
  77         const struct pt_regs_dwarfnum *roff;
  78         for (roff = regdwarfnum_table; roff->name != NULL; roff++)
  79                 if (roff->dwarfnum == n)
  80                         return roff->name;
  81         return NULL;
  82 }
  83 
  84 int regs_query_register_offset(const char *name)
  85 {
  86         const struct pt_regs_dwarfnum *roff;
  87 
  88         for (roff = regdwarfnum_table; roff->name != NULL; roff++)
  89                 if (!strcmp(roff->name, name))
  90                         return DWARFNUM2OFFSET(roff->dwarfnum);
  91         return -EINVAL;
  92 }