brintos

brintos / linux-shallow public Read only

0
0
Text · 1.9 KiB · cd0504c Raw
73 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.4 * Mapping of DWARF debug register numbers into register names.5 */6 7#include <stddef.h>8#include <errno.h> /* for EINVAL */9#include <string.h> /* for strcmp */10#include <dwarf-regs.h>11 12struct pt_regs_dwarfnum {13	const char *name;14	unsigned int dwarfnum;15};16 17#define REG_DWARFNUM_NAME(r, num) {.name = r, .dwarfnum = num}18#define REG_DWARFNUM_END {.name = NULL, .dwarfnum = 0}19 20struct pt_regs_dwarfnum riscv_dwarf_regs_table[] = {21	REG_DWARFNUM_NAME("%zero", 0),22	REG_DWARFNUM_NAME("%ra", 1),23	REG_DWARFNUM_NAME("%sp", 2),24	REG_DWARFNUM_NAME("%gp", 3),25	REG_DWARFNUM_NAME("%tp", 4),26	REG_DWARFNUM_NAME("%t0", 5),27	REG_DWARFNUM_NAME("%t1", 6),28	REG_DWARFNUM_NAME("%t2", 7),29	REG_DWARFNUM_NAME("%s0", 8),30	REG_DWARFNUM_NAME("%s1", 9),31	REG_DWARFNUM_NAME("%a0", 10),32	REG_DWARFNUM_NAME("%a1", 11),33	REG_DWARFNUM_NAME("%a2", 12),34	REG_DWARFNUM_NAME("%a3", 13),35	REG_DWARFNUM_NAME("%a4", 14),36	REG_DWARFNUM_NAME("%a5", 15),37	REG_DWARFNUM_NAME("%a6", 16),38	REG_DWARFNUM_NAME("%a7", 17),39	REG_DWARFNUM_NAME("%s2", 18),40	REG_DWARFNUM_NAME("%s3", 19),41	REG_DWARFNUM_NAME("%s4", 20),42	REG_DWARFNUM_NAME("%s5", 21),43	REG_DWARFNUM_NAME("%s6", 22),44	REG_DWARFNUM_NAME("%s7", 23),45	REG_DWARFNUM_NAME("%s8", 24),46	REG_DWARFNUM_NAME("%s9", 25),47	REG_DWARFNUM_NAME("%s10", 26),48	REG_DWARFNUM_NAME("%s11", 27),49	REG_DWARFNUM_NAME("%t3", 28),50	REG_DWARFNUM_NAME("%t4", 29),51	REG_DWARFNUM_NAME("%t5", 30),52	REG_DWARFNUM_NAME("%t6", 31),53	REG_DWARFNUM_END,54};55 56#define RISCV_MAX_REGS ((sizeof(riscv_dwarf_regs_table) / \57		 sizeof(riscv_dwarf_regs_table[0])) - 1)58 59const char *get_arch_regstr(unsigned int n)60{61	return (n < RISCV_MAX_REGS) ? riscv_dwarf_regs_table[n].name : NULL;62}63 64int regs_query_register_offset(const char *name)65{66	const struct pt_regs_dwarfnum *roff;67 68	for (roff = riscv_dwarf_regs_table; roff->name; roff++)69		if (!strcmp(roff->name, name))70			return roff->dwarfnum;71	return -EINVAL;72}73