gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / std-regs.c
CommitLineData
0406ec40
AC
1/* Builtin frame register, for GDB, the GNU debugger.
2
b811d2c2 3 Copyright (C) 2002-2020 Free Software Foundation, Inc.
0406ec40
AC
4
5 Contributed by Red Hat.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
0406ec40
AC
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
0406ec40
AC
21
22#include "defs.h"
eb8bc282 23#include "user-regs.h"
0406ec40
AC
24#include "frame.h"
25#include "gdbtypes.h"
26#include "value.h"
0d12e84c
TT
27#include "gdbarch.h"
28
0406ec40 29static struct value *
123dc839 30value_of_builtin_frame_fp_reg (struct frame_info *frame, const void *baton)
0406ec40 31{
e9a4730f 32 struct gdbarch *gdbarch = get_frame_arch (frame);
433759f7 33
e9a4730f 34 if (gdbarch_deprecated_fp_regnum (gdbarch) >= 0)
0ba6dca9
AC
35 /* NOTE: cagney/2003-04-24: Since the mere presence of "fp" in the
36 register name table overrides this built-in $fp register, there
064f5156 37 is no real reason for this gdbarch_deprecated_fp_regnum trickery here.
0ba6dca9
AC
38 An architecture wanting to implement "$fp" as alias for a raw
39 register can do so by adding "fp" to register name table (mind
40 you, doing this is probably a dangerous thing). */
e9a4730f 41 return value_of_register (gdbarch_deprecated_fp_regnum (gdbarch),
064f5156 42 frame);
0ba6dca9
AC
43 else
44 {
0dfff4cb
UW
45 struct type *data_ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
46 struct value *val = allocate_value (data_ptr_type);
10c42a71 47 gdb_byte *buf = value_contents_raw (val);
433759f7 48
23ce9890
MS
49 gdbarch_address_to_pointer (gdbarch, data_ptr_type,
50 buf, get_frame_base_address (frame));
0ba6dca9
AC
51 return val;
52 }
0406ec40
AC
53}
54
55static struct value *
123dc839 56value_of_builtin_frame_pc_reg (struct frame_info *frame, const void *baton)
0406ec40 57{
e9a4730f 58 struct gdbarch *gdbarch = get_frame_arch (frame);
433759f7 59
e9a4730f
UW
60 if (gdbarch_pc_regnum (gdbarch) >= 0)
61 return value_of_register (gdbarch_pc_regnum (gdbarch), frame);
82de1e5b
AC
62 else
63 {
0dfff4cb
UW
64 struct type *func_ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
65 struct value *val = allocate_value (func_ptr_type);
10c42a71 66 gdb_byte *buf = value_contents_raw (val);
433759f7 67
18ea20ac
MS
68 gdbarch_address_to_pointer (gdbarch, func_ptr_type,
69 buf, get_frame_pc (frame));
82de1e5b
AC
70 return val;
71 }
0406ec40
AC
72}
73
74static struct value *
123dc839 75value_of_builtin_frame_sp_reg (struct frame_info *frame, const void *baton)
0406ec40 76{
e9a4730f 77 struct gdbarch *gdbarch = get_frame_arch (frame);
433759f7 78
e9a4730f
UW
79 if (gdbarch_sp_regnum (gdbarch) >= 0)
80 return value_of_register (gdbarch_sp_regnum (gdbarch), frame);
8a3fe4f8 81 error (_("Standard register ``$sp'' is not available for this target"));
0406ec40
AC
82}
83
84static struct value *
123dc839 85value_of_builtin_frame_ps_reg (struct frame_info *frame, const void *baton)
0406ec40 86{
e9a4730f 87 struct gdbarch *gdbarch = get_frame_arch (frame);
433759f7 88
e9a4730f
UW
89 if (gdbarch_ps_regnum (gdbarch) >= 0)
90 return value_of_register (gdbarch_ps_regnum (gdbarch), frame);
8a3fe4f8 91 error (_("Standard register ``$ps'' is not available for this target"));
0406ec40
AC
92}
93
6c265988 94void _initialize_frame_reg ();
0406ec40 95void
6c265988 96_initialize_frame_reg ()
0406ec40 97{
0406ec40
AC
98 /* Frame based $fp, $pc, $sp and $ps. These only come into play
99 when the target does not define its own version of these
100 registers. */
123dc839
DJ
101 user_reg_add_builtin ("fp", value_of_builtin_frame_fp_reg, NULL);
102 user_reg_add_builtin ("pc", value_of_builtin_frame_pc_reg, NULL);
103 user_reg_add_builtin ("sp", value_of_builtin_frame_sp_reg, NULL);
104 user_reg_add_builtin ("ps", value_of_builtin_frame_ps_reg, NULL);
0406ec40 105}
This page took 1.963995 seconds and 4 git commands to generate.