Path: blob/master/tools/perf/arch/csky/util/unwind-libdw.c
26298 views
// SPDX-License-Identifier: GPL-2.01// Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.23#include <elfutils/libdwfl.h>4#include "perf_regs.h"5#include "../../util/unwind-libdw.h"6#include "../../util/perf_regs.h"7#include "../../util/event.h"89bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)10{11struct unwind_info *ui = arg;12struct regs_dump *user_regs = perf_sample__user_regs(ui->sample);13Dwarf_Word dwarf_regs[PERF_REG_CSKY_MAX];1415#define REG(r) ({ \16Dwarf_Word val = 0; \17perf_reg_value(&val, user_regs, PERF_REG_CSKY_##r); \18val; \19})2021#if defined(__CSKYABIV2__)22dwarf_regs[0] = REG(A0);23dwarf_regs[1] = REG(A1);24dwarf_regs[2] = REG(A2);25dwarf_regs[3] = REG(A3);26dwarf_regs[4] = REG(REGS0);27dwarf_regs[5] = REG(REGS1);28dwarf_regs[6] = REG(REGS2);29dwarf_regs[7] = REG(REGS3);30dwarf_regs[8] = REG(REGS4);31dwarf_regs[9] = REG(REGS5);32dwarf_regs[10] = REG(REGS6);33dwarf_regs[11] = REG(REGS7);34dwarf_regs[12] = REG(REGS8);35dwarf_regs[13] = REG(REGS9);36dwarf_regs[14] = REG(SP);37dwarf_regs[15] = REG(LR);38dwarf_regs[16] = REG(EXREGS0);39dwarf_regs[17] = REG(EXREGS1);40dwarf_regs[18] = REG(EXREGS2);41dwarf_regs[19] = REG(EXREGS3);42dwarf_regs[20] = REG(EXREGS4);43dwarf_regs[21] = REG(EXREGS5);44dwarf_regs[22] = REG(EXREGS6);45dwarf_regs[23] = REG(EXREGS7);46dwarf_regs[24] = REG(EXREGS8);47dwarf_regs[25] = REG(EXREGS9);48dwarf_regs[26] = REG(EXREGS10);49dwarf_regs[27] = REG(EXREGS11);50dwarf_regs[28] = REG(EXREGS12);51dwarf_regs[29] = REG(EXREGS13);52dwarf_regs[30] = REG(EXREGS14);53dwarf_regs[31] = REG(TLS);54dwarf_regs[32] = REG(PC);55#else56dwarf_regs[0] = REG(SP);57dwarf_regs[1] = REG(REGS9);58dwarf_regs[2] = REG(A0);59dwarf_regs[3] = REG(A1);60dwarf_regs[4] = REG(A2);61dwarf_regs[5] = REG(A3);62dwarf_regs[6] = REG(REGS0);63dwarf_regs[7] = REG(REGS1);64dwarf_regs[8] = REG(REGS2);65dwarf_regs[9] = REG(REGS3);66dwarf_regs[10] = REG(REGS4);67dwarf_regs[11] = REG(REGS5);68dwarf_regs[12] = REG(REGS6);69dwarf_regs[13] = REG(REGS7);70dwarf_regs[14] = REG(REGS8);71dwarf_regs[15] = REG(LR);72#endif73dwfl_thread_state_register_pc(thread, REG(PC));7475return dwfl_thread_state_registers(thread, 0, PERF_REG_CSKY_MAX,76dwarf_regs);77}787980