1/* Architecture-dependent code for the Fujitsu FR-V, for GDB, the GNU Debugger.
2   Copyright 2004 Free Software Foundation, Inc.
3
4   This file is part of GDB.
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2 of the License, or
9   (at your option) any later version.
10
11   This program is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with this program; if not, write to the Free Software
18   Foundation, Inc., 59 Temple Place - Suite 330,
19   Boston, MA 02111-1307, USA.  */
20
21/* Enumerate the possible ABIs for FR-V.  */
22enum frv_abi
23  {
24    FRV_ABI_EABI,
25    FRV_ABI_FDPIC
26  };
27
28/* Register numbers.  The order in which these appear define the
29   remote protocol, so take care in changing them.  */
30enum {
31  /* Register numbers 0 -- 63 are always reserved for general-purpose
32     registers.  The chip at hand may have less.  */
33  first_gpr_regnum = 0,
34  sp_regnum = 1,
35  fp_regnum = 2,
36  struct_return_regnum = 3,
37  last_gpr_regnum = 63,
38
39  /* Register numbers 64 -- 127 are always reserved for floating-point
40     registers.  The chip at hand may have less.  */
41  first_fpr_regnum = 64,
42  last_fpr_regnum = 127,
43
44  /* The PC register.  */
45  pc_regnum = 128,
46
47  /* Register numbers 129 on up are always reserved for special-purpose
48     registers.  */
49  first_spr_regnum = 129,
50  psr_regnum = 129,
51  ccr_regnum = 130,
52  cccr_regnum = 131,
53  fdpic_loadmap_exec_regnum = 132,
54  fdpic_loadmap_interp_regnum = 133,
55  tbr_regnum = 135,
56  brr_regnum = 136,
57  dbar0_regnum = 137,
58  dbar1_regnum = 138,
59  dbar2_regnum = 139,
60  dbar3_regnum = 140,
61  scr0_regnum = 141,
62  scr1_regnum = 142,
63  scr2_regnum = 143,
64  scr3_regnum = 144,
65  lr_regnum = 145,
66  lcr_regnum = 146,
67  iacc0h_regnum = 147,
68  iacc0l_regnum = 148,
69  fsr0_regnum = 149,
70  acc0_regnum = 150,
71  acc7_regnum = 157,
72  accg0123_regnum = 158,
73  accg4567_regnum = 159,
74  msr0_regnum = 160,
75  msr1_regnum = 161,
76  gner0_regnum = 162,
77  gner1_regnum = 163,
78  fner0_regnum = 164,
79  fner1_regnum = 165,
80  last_spr_regnum = 165,
81
82  /* The total number of registers we know exist.  */
83  frv_num_regs = last_spr_regnum + 1,
84
85  /* Pseudo registers */
86  first_pseudo_regnum = frv_num_regs,
87
88  /* iacc0 - the 64-bit concatenation of iacc0h and iacc0l.  */
89  iacc0_regnum = first_pseudo_regnum + 0,
90  accg0_regnum = first_pseudo_regnum + 1,
91  accg7_regnum = accg0_regnum + 7,
92
93  last_pseudo_regnum = accg7_regnum,
94  frv_num_pseudo_regs = last_pseudo_regnum - first_pseudo_regnum + 1,
95};
96
97/* Return the FR-V ABI associated with GDBARCH.  */
98enum frv_abi frv_abi (struct gdbarch *gdbarch);
99
100/* Fetch the interpreter and executable loadmap addresses (for shared
101   library support) for the FDPIC ABI.  Return 0 if successful, -1 if
102   not.  (E.g, -1 will be returned if the ABI isn't the FDPIC ABI.)  */
103int frv_fdpic_loadmap_addresses (struct gdbarch *gdbarch,
104                                 CORE_ADDR *interp_addr, CORE_ADDR *exec_addr);
105
106/* Given a function entry point, find and return the GOT address for the
107   containing load module.  */
108CORE_ADDR frv_fdpic_find_global_pointer (CORE_ADDR addr);
109
110/* Given a function entry point, find and return the canonical descriptor
111   for that function, if one exists.  If no canonical descriptor could
112   be found, return 0.  */
113CORE_ADDR frv_fdpic_find_canonical_descriptor (CORE_ADDR entry_point);
114