linux/tools/perf/arch/s390/util/dwarf-regs.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Mapping of DWARF debug register numbers into register names.
   4 *
   5 * Copyright IBM Corp. 2010, 2017
   6 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>,
   7 *            Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
   8 *
   9 */
  10
  11#include <errno.h>
  12#include <stddef.h>
  13#include <stdlib.h>
  14#include <linux/kernel.h>
  15#include <asm/ptrace.h>
  16#include <string.h>
  17#include <dwarf-regs.h>
  18#include "dwarf-regs-table.h"
  19
  20const char *get_arch_regstr(unsigned int n)
  21{
  22        return (n >= ARRAY_SIZE(s390_dwarf_regs)) ? NULL : s390_dwarf_regs[n];
  23}
  24
  25/*
  26 * Convert the register name into an offset to struct pt_regs (kernel).
  27 * This is required by the BPF prologue generator.  The BPF
  28 * program is called in the BPF overflow handler in the perf
  29 * core.
  30 */
  31int regs_query_register_offset(const char *name)
  32{
  33        unsigned long gpr;
  34
  35        if (!name || strncmp(name, "%r", 2))
  36                return -EINVAL;
  37
  38        errno = 0;
  39        gpr = strtoul(name + 2, NULL, 10);
  40        if (errno || gpr >= 16)
  41                return -EINVAL;
  42
  43        return offsetof(user_pt_regs, gprs) + 8 * gpr;
  44}
  45