mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2026-08-27 00:26:02 -04:00
This patch adds support for native microblazeel-linux-gdb including support for debugging with core dump files. Code is based on Xilinx/AMD git repository used for Yocto builds with changes for proper indentation and removal of commented out code. Testing with native gdb has been checked to be working. Can load and run a program using commands like break, step and finish. When a core file is specified to gdb; registers can be examined using info reg. Tested using qemu-system-microblazeel from AMD/Xilinx Yocto 2025.2 release. Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com> Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com> Signed-off-by: Mahesh Bodapati <mbodapat@xilinx.com> Signed-off-by: Gopi Kumar Bulusu <gopi@sankhya.com> Signed-off-by: Michael J. Eager <eager@eagercon.com>
134 lines
3.8 KiB
C
134 lines
3.8 KiB
C
/* Target-dependent code for Xilinx MicroBlaze.
|
|
|
|
Copyright (C) 2009-2026 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef GDB_MICROBLAZE_TDEP_H
|
|
#define GDB_MICROBLAZE_TDEP_H
|
|
|
|
#include "gdbarch.h"
|
|
|
|
/* Microblaze architecture-specific information. */
|
|
|
|
struct microblaze_gdbarch_tdep : gdbarch_tdep_base
|
|
{
|
|
/* Register sets. */
|
|
struct regset *gregset = nullptr;
|
|
size_t sizeof_gregset = 0;
|
|
struct regset *fpregset = nullptr;
|
|
size_t sizeof_fpregset = 0;
|
|
};
|
|
|
|
/* Register numbers. */
|
|
enum microblaze_regnum
|
|
{
|
|
MICROBLAZE_R0_REGNUM,
|
|
MICROBLAZE_R1_REGNUM, MICROBLAZE_SP_REGNUM = MICROBLAZE_R1_REGNUM,
|
|
MICROBLAZE_R2_REGNUM,
|
|
MICROBLAZE_R3_REGNUM, MICROBLAZE_RETVAL_REGNUM = MICROBLAZE_R3_REGNUM,
|
|
MICROBLAZE_R4_REGNUM,
|
|
MICROBLAZE_R5_REGNUM, MICROBLAZE_FIRST_ARGREG = MICROBLAZE_R5_REGNUM,
|
|
MICROBLAZE_R6_REGNUM,
|
|
MICROBLAZE_R7_REGNUM,
|
|
MICROBLAZE_R8_REGNUM,
|
|
MICROBLAZE_R9_REGNUM,
|
|
MICROBLAZE_R10_REGNUM, MICROBLAZE_LAST_ARGREG = MICROBLAZE_R10_REGNUM,
|
|
MICROBLAZE_R11_REGNUM,
|
|
MICROBLAZE_R12_REGNUM,
|
|
MICROBLAZE_R13_REGNUM,
|
|
MICROBLAZE_R14_REGNUM,
|
|
MICROBLAZE_R15_REGNUM,MICROBLAZE_PREV_PC_REGNUM = MICROBLAZE_R15_REGNUM,
|
|
MICROBLAZE_R16_REGNUM,
|
|
MICROBLAZE_R17_REGNUM,
|
|
MICROBLAZE_R18_REGNUM,
|
|
MICROBLAZE_R19_REGNUM,MICROBLAZE_FP_REGNUM = MICROBLAZE_R19_REGNUM,
|
|
MICROBLAZE_R20_REGNUM,
|
|
MICROBLAZE_R21_REGNUM,
|
|
MICROBLAZE_R22_REGNUM,
|
|
MICROBLAZE_R23_REGNUM,
|
|
MICROBLAZE_R24_REGNUM,
|
|
MICROBLAZE_R25_REGNUM,
|
|
MICROBLAZE_R26_REGNUM,
|
|
MICROBLAZE_R27_REGNUM,
|
|
MICROBLAZE_R28_REGNUM,
|
|
MICROBLAZE_R29_REGNUM,
|
|
MICROBLAZE_R30_REGNUM,
|
|
MICROBLAZE_R31_REGNUM,
|
|
MICROBLAZE_PC_REGNUM,
|
|
MICROBLAZE_MSR_REGNUM,
|
|
MICROBLAZE_EAR_REGNUM,
|
|
MICROBLAZE_ESR_REGNUM,
|
|
MICROBLAZE_FSR_REGNUM,
|
|
MICROBLAZE_BTR_REGNUM,
|
|
MICROBLAZE_PVR0_REGNUM,
|
|
MICROBLAZE_PVR1_REGNUM,
|
|
MICROBLAZE_PVR2_REGNUM,
|
|
MICROBLAZE_PVR3_REGNUM,
|
|
MICROBLAZE_PVR4_REGNUM,
|
|
MICROBLAZE_PVR5_REGNUM,
|
|
MICROBLAZE_PVR6_REGNUM,
|
|
MICROBLAZE_PVR7_REGNUM,
|
|
MICROBLAZE_PVR8_REGNUM,
|
|
MICROBLAZE_PVR9_REGNUM,
|
|
MICROBLAZE_PVR10_REGNUM,
|
|
MICROBLAZE_PVR11_REGNUM,
|
|
MICROBLAZE_REDR_REGNUM,
|
|
MICROBLAZE_RPID_REGNUM,
|
|
MICROBLAZE_RZPR_REGNUM,
|
|
MICROBLAZE_RTLBX_REGNUM,
|
|
MICROBLAZE_RTLBSX_REGNUM,
|
|
MICROBLAZE_RTLBLO_REGNUM,
|
|
MICROBLAZE_RTLBHI_REGNUM,
|
|
MICROBLAZE_SLR_REGNUM, MICROBLAZE_NUM_CORE_REGS = MICROBLAZE_SLR_REGNUM,
|
|
MICROBLAZE_SHR_REGNUM,
|
|
MICROBLAZE_NUM_REGS
|
|
};
|
|
|
|
struct microblaze_frame_cache
|
|
{
|
|
/* Base address. */
|
|
CORE_ADDR base;
|
|
CORE_ADDR pc;
|
|
|
|
CORE_ADDR saved_sp;
|
|
/* Do we have a frame? */
|
|
int frameless_p;
|
|
|
|
/* Frame size. */
|
|
int framesize;
|
|
|
|
/* Frame register. */
|
|
int fp_regnum;
|
|
|
|
/* Offsets to saved registers. */
|
|
int register_offsets[MICROBLAZE_NUM_REGS];
|
|
|
|
/* Table of saved registers. */
|
|
struct trad_frame_saved_reg *saved_regs;
|
|
};
|
|
/* All registers are 32 bits. */
|
|
#define MICROBLAZE_REGISTER_SIZE 4
|
|
|
|
/* MICROBLAZE_BREAKPOINT defines the breakpoint that should be used.
|
|
Only used for native debugging. */
|
|
#define MICROBLAZE_BREAKPOINT {0xba, 0x0c, 0x00, 0x18}
|
|
|
|
extern void microblaze_supply_gregset (const struct regset *regset,
|
|
struct regcache *regcache, int regnum,
|
|
const void *gregs, size_t size);
|
|
|
|
#endif /* GDB_MICROBLAZE_TDEP_H */
|