/* Definitions to target GDB to OpenRISC 1000 32-bit targets.
   Copyright (C) 2008-2025 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_OR1K_TDEP_H
#define GDB_OR1K_TDEP_H

#ifndef TARGET_OR1K
#define TARGET_OR1K
#endif

/* Make cgen names unique to prevent ODR conflicts with other targets.  */
#define GDB_CGEN_REMAP_PREFIX or1k
#include "cgen-remap.h"
#include "opcodes/or1k-desc.h"
#include "opcodes/or1k-opc.h"

/* General Purpose Registers */
#define OR1K_ZERO_REGNUM          0
#define OR1K_SP_REGNUM            1
#define OR1K_FP_REGNUM            2
#define OR1K_FIRST_ARG_REGNUM     3
#define OR1K_LAST_ARG_REGNUM      8
#define OR1K_LR_REGNUM            9
#define OR1K_FIRST_SAVED_REGNUM  10
#define OR1K_RV_REGNUM           11
#define OR1K_PPC_REGNUM          (OR1K_MAX_GPR_REGS + 0)
#define OR1K_NPC_REGNUM          (OR1K_MAX_GPR_REGS + 1)
#define OR1K_SR_REGNUM           (OR1K_MAX_GPR_REGS + 2)

/* Properties of the architecture. GDB mapping of registers is all the GPRs
   and SPRs followed by the PPC, NPC and SR at the end. Red zone is the area
   past the end of the stack reserved for exception handlers etc.  */

#define OR1K_MAX_GPR_REGS            32
#define OR1K_NUM_PSEUDO_REGS         0
#define OR1K_NUM_REGS               (OR1K_MAX_GPR_REGS + 3)
#define OR1K_STACK_ALIGN             4
#define OR1K_INSTLEN                 4
#define OR1K_INSTBITLEN             (OR1K_INSTLEN * 8)
#define OR1K_NUM_TAP_RECORDS         8
#define OR1K_FRAME_RED_ZONE_SIZE     2536

/* Single step based on where the current instruction will take us.  */
extern std::vector<CORE_ADDR> or1k_software_single_step
  (struct regcache *regcache);


#endif /* GDB_OR1K_TDEP_H */
