mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
88de583569
According to "Procedure Calling Convention" in "LoongArch ELF ABI specification" [1], implement the push_dummy_call gdbarch method as clear as possible. [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_procedure_calling_convention Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
60 lines
2.2 KiB
C
60 lines
2.2 KiB
C
/* Target-dependent header for the LoongArch architecture, for GDB.
|
|
|
|
Copyright (C) 2022 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 LOONGARCH_TDEP_H
|
|
#define LOONGARCH_TDEP_H
|
|
|
|
#include "gdbarch.h"
|
|
#include "arch/loongarch.h"
|
|
#include "regset.h"
|
|
|
|
#include "elf/loongarch.h"
|
|
#include "opcode/loongarch.h"
|
|
|
|
/* Register numbers of various important registers. */
|
|
enum
|
|
{
|
|
LOONGARCH_RA_REGNUM = 1, /* Return Address. */
|
|
LOONGARCH_SP_REGNUM = 3, /* Stack Pointer. */
|
|
LOONGARCH_A0_REGNUM = 4, /* First Argument/Return Value. */
|
|
LOONGARCH_A7_REGNUM = 11, /* Seventh Argument/Syscall Number. */
|
|
LOONGARCH_FP_REGNUM = 22, /* Frame Pointer. */
|
|
LOONGARCH_ORIG_A0_REGNUM = 32, /* Syscall's original arg0. */
|
|
LOONGARCH_PC_REGNUM = 33, /* Program Counter. */
|
|
LOONGARCH_BADV_REGNUM = 34, /* Bad Vaddr for Addressing Exception. */
|
|
LOONGARCH_LINUX_NUM_GREGSET = 45, /* 32 GPR, ORIG_A0, PC, BADV, RESERVED 10. */
|
|
LOONGARCH_ARG_REGNUM = 8, /* r4-r11: general-purpose argument registers.
|
|
f0-f7: floating-point argument registers. */
|
|
};
|
|
|
|
/* Register set definitions. */
|
|
extern const struct regset loongarch_gregset;
|
|
|
|
/* Target-dependent structure in gdbarch. */
|
|
struct loongarch_gdbarch_tdep : gdbarch_tdep
|
|
{
|
|
/* Features about the abi that impact how the gdbarch is configured. */
|
|
struct loongarch_gdbarch_features abi_features;
|
|
|
|
/* Return the expected next PC if FRAME is stopped at a syscall instruction. */
|
|
CORE_ADDR (*syscall_next_pc) (struct frame_info *frame) = nullptr;
|
|
};
|
|
|
|
#endif /* LOONGARCH_TDEP_H */
|