]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/sparc64-tdep.h
Fix regression on aarch64-linux gdbserver
[thirdparty/binutils-gdb.git] / gdb / sparc64-tdep.h
CommitLineData
8b39fe56
MK
1/* Target-dependent code for UltraSPARC.
2
1d506c26 3 Copyright (C) 2003-2024 Free Software Foundation, Inc.
8b39fe56
MK
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
8b39fe56
MK
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
8b39fe56
MK
19
20#ifndef SPARC64_TDEP_H
386c036b 21#define SPARC64_TDEP_H 1
8b39fe56 22
bd2b40ac 23class frame_info_ptr;
1a111ce3 24struct gdbarch;
1a111ce3 25struct regcache;
b4fd25c9 26struct sparc_gregmap;
1e067c66 27struct trad_frame_saved_reg;
1a111ce3 28
386c036b 29#include "sparc-tdep.h"
8b39fe56 30
386c036b
MK
31/* The stack pointer is offset from the stack frame by a BIAS of 2047
32 (0x7ff) for 64-bit code. BIAS is likely to be defined on SPARC
33 hosts, so undefine it first. */
34#undef BIAS
35#define BIAS 2047
36
37/* Register offsets for the general-purpose register set. */
38
39/* UltraSPARC doesn't have %psr. */
40#define r_tstate_offset r_psr_offset
41
42/* UltraSPARC doesn't have %wim either. */
43#define r_fprs_offset r_wim_offset
44
45/* Register numbers of various important registers. */
8b39fe56
MK
46
47enum sparc64_regnum
48{
386c036b
MK
49 SPARC64_F32_REGNUM /* %f32 */
50 = SPARC_F0_REGNUM + 32,
51 SPARC64_F62_REGNUM /* %f62 */
52 = SPARC64_F32_REGNUM + 15,
8b39fe56
MK
53 SPARC64_PC_REGNUM, /* %pc */
54 SPARC64_NPC_REGNUM, /* %npc */
55 SPARC64_STATE_REGNUM,
56 SPARC64_FSR_REGNUM, /* %fsr */
57 SPARC64_FPRS_REGNUM, /* %fprs */
58 SPARC64_Y_REGNUM, /* %y */
7a36499a 59};
386c036b 60
7a36499a
IR
61/* Pseudo registers. */
62enum sparc64_pseudo_regnum
63{
64 SPARC64_CWP_REGNUM = 0, /* %cwp */
8b39fe56
MK
65 SPARC64_PSTATE_REGNUM, /* %pstate */
66 SPARC64_ASI_REGNUM, /* %asi */
67 SPARC64_CCR_REGNUM, /* %ccr */
68 SPARC64_D0_REGNUM, /* %d0 */
386c036b
MK
69 SPARC64_D10_REGNUM /* %d10 */
70 = SPARC64_D0_REGNUM + 5,
71 SPARC64_D30_REGNUM /* %d30 */
72 = SPARC64_D0_REGNUM + 15,
73 SPARC64_D32_REGNUM /* %d32 */
74 = SPARC64_D0_REGNUM + 16,
75 SPARC64_D62_REGNUM /* %d62 */
76 = SPARC64_D0_REGNUM + 31,
8b39fe56 77 SPARC64_Q0_REGNUM, /* %q0 */
386c036b
MK
78 SPARC64_Q8_REGNUM /* %q8 */
79 = SPARC64_Q0_REGNUM + 2,
80 SPARC64_Q28_REGNUM /* %q28 */
81 = SPARC64_Q0_REGNUM + 7,
82 SPARC64_Q32_REGNUM /* %q32 */
83 = SPARC64_Q0_REGNUM + 8,
84 SPARC64_Q60_REGNUM /* %q60 */
85 = SPARC64_Q0_REGNUM + 15
8b39fe56
MK
86};
87
6df5070e
MK
88/* Processor state bits. */
89#define SPARC64_PSTATE_AG 0x001
90#define SPARC64_PSTATE_IE 0x002
91#define SPARC64_PSTATE_PRIV 0x004
92#define SPARC64_PSTATE_AM 0x008
93#define SPARC64_PSTATE_PEF 0x010
94#define SPARC64_PSTATE_RED 0x020
95#define SPARC64_PSTATE_TLE 0x100
96#define SPARC64_PSTATE_CLE 0x200
97#define SPARC64_PSTATE_PID0 0x400
98#define SPARC64_PSTATE_PID1 0x800
99
386c036b
MK
100extern void sparc64_init_abi (struct gdbarch_info info,
101 struct gdbarch *gdbarch);
102
b4fd25c9 103extern void sparc64_supply_gregset (const struct sparc_gregmap *gregmap,
386c036b
MK
104 struct regcache *regcache,
105 int regnum, const void *gregs);
b4fd25c9 106extern void sparc64_collect_gregset (const struct sparc_gregmap *gregmap,
386c036b
MK
107 const struct regcache *regcache,
108 int regnum, void *gregs);
b4fd25c9 109extern void sparc64_supply_fpregset (const struct sparc_fpregmap *fpregmap,
db75c717 110 struct regcache *regcache,
386c036b 111 int regnum, const void *fpregs);
b4fd25c9 112extern void sparc64_collect_fpregset (const struct sparc_fpregmap *fpregmap,
db75c717 113 const struct regcache *regcache,
386c036b
MK
114 int regnum, void *fpregs);
115
116/* Functions and variables exported from sparc64-sol2-tdep.c. */
117
118/* Register offsets for Solaris 2. */
b4fd25c9
AA
119extern const struct sparc_gregmap sparc64_sol2_gregmap;
120extern const struct sparc_fpregmap sparc64_sol2_fpregmap;
386c036b 121
03b62bbb 122/* Variables exported from sparc64-fbsd-tdep.c. */
386c036b
MK
123
124/* Register offsets for FreeBSD/sparc64. */
b4fd25c9 125extern const struct sparc_gregmap sparc64fbsd_gregmap;
8b39fe56 126
1b71cfcf 127/* Functions and variables exported from sparc64-netbsd-tdep.c. */
8b39fe56 128
386c036b 129/* Register offsets for NetBSD/sparc64. */
b4fd25c9 130extern const struct sparc_gregmap sparc64nbsd_gregmap;
8b39fe56 131
1e067c66
MK
132extern struct trad_frame_saved_reg *
133 sparc64nbsd_sigcontext_saved_regs (CORE_ADDR sigcontext_addr,
8480a37e 134 const frame_info_ptr &next_frame);
1e067c66 135
b4fd25c9 136extern const struct sparc_fpregmap sparc64_bsd_fpregmap;
db75c717 137
58afddc6
WP
138extern void sparc64_forget_process (pid_t pid);
139
8b39fe56 140#endif /* sparc64-tdep.h */