Use thread_info and inferior pointers more throughout
[deliverable/binutils-gdb.git] / gdb / regcache.c
CommitLineData
32178cab 1/* Cache and manage the values of registers for GDB, the GNU debugger.
3fadccb3 2
e2882c85 3 Copyright (C) 1986-2018 Free Software Foundation, Inc.
32178cab
MS
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
32178cab
MS
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/>. */
32178cab
MS
19
20#include "defs.h"
32178cab 21#include "inferior.h"
00431a78 22#include "gdbthread.h"
32178cab
MS
23#include "target.h"
24#include "gdbarch.h"
705152c5 25#include "gdbcmd.h"
4e052eda 26#include "regcache.h"
b59ff9d5 27#include "reggroups.h"
76727919 28#include "observable.h"
0b309272 29#include "regset.h"
94bb8dfe 30#include <forward_list>
32178cab
MS
31
32/*
33 * DATA STRUCTURE
34 *
35 * Here is the actual register cache.
36 */
37
3fadccb3 38/* Per-architecture object describing the layout of a register cache.
0df8b418 39 Computed once when the architecture is created. */
3fadccb3
AC
40
41struct gdbarch_data *regcache_descr_handle;
42
43struct regcache_descr
44{
45 /* The architecture this descriptor belongs to. */
46 struct gdbarch *gdbarch;
47
bb1db049
AC
48 /* The raw register cache. Each raw (or hard) register is supplied
49 by the target interface. The raw cache should not contain
50 redundant information - if the PC is constructed from two
d2f0b918 51 registers then those registers and not the PC lives in the raw
bb1db049 52 cache. */
3fadccb3 53 long sizeof_raw_registers;
3fadccb3 54
d138e37a
AC
55 /* The cooked register space. Each cooked register in the range
56 [0..NR_RAW_REGISTERS) is direct-mapped onto the corresponding raw
57 register. The remaining [NR_RAW_REGISTERS
02f60eae 58 .. NR_COOKED_REGISTERS) (a.k.a. pseudo registers) are mapped onto
d138e37a 59 both raw registers and memory by the architecture methods
02f60eae 60 gdbarch_pseudo_register_read and gdbarch_pseudo_register_write. */
d138e37a 61 int nr_cooked_registers;
067df2e5 62 long sizeof_cooked_registers;
d138e37a 63
86d31898 64 /* Offset and size (in 8 bit bytes), of each register in the
d138e37a 65 register cache. All registers (including those in the range
99e42fd8
PA
66 [NR_RAW_REGISTERS .. NR_COOKED_REGISTERS) are given an
67 offset. */
3fadccb3 68 long *register_offset;
3fadccb3 69 long *sizeof_register;
3fadccb3 70
bb425013
AC
71 /* Cached table containing the type of each register. */
72 struct type **register_type;
3fadccb3
AC
73};
74
3fadccb3
AC
75static void *
76init_regcache_descr (struct gdbarch *gdbarch)
77{
78 int i;
79 struct regcache_descr *descr;
80 gdb_assert (gdbarch != NULL);
81
bb425013 82 /* Create an initial, zero filled, table. */
116f06ea 83 descr = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct regcache_descr);
3fadccb3 84 descr->gdbarch = gdbarch;
3fadccb3 85
d138e37a
AC
86 /* Total size of the register space. The raw registers are mapped
87 directly onto the raw register cache while the pseudo's are
3fadccb3 88 either mapped onto raw-registers or memory. */
214e098a
UW
89 descr->nr_cooked_registers = gdbarch_num_regs (gdbarch)
90 + gdbarch_num_pseudo_regs (gdbarch);
3fadccb3 91
bb425013 92 /* Fill in a table of register types. */
116f06ea 93 descr->register_type
3e43a32a
MS
94 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers,
95 struct type *);
bb425013 96 for (i = 0; i < descr->nr_cooked_registers; i++)
336a3131 97 descr->register_type[i] = gdbarch_register_type (gdbarch, i);
bb425013 98
bb1db049
AC
99 /* Construct a strictly RAW register cache. Don't allow pseudo's
100 into the register cache. */
bb1db049 101
067df2e5 102 /* Lay out the register cache.
3fadccb3 103
bb425013
AC
104 NOTE: cagney/2002-05-22: Only register_type() is used when
105 constructing the register cache. It is assumed that the
106 register's raw size, virtual size and type length are all the
107 same. */
3fadccb3
AC
108
109 {
110 long offset = 0;
123f5f96 111
116f06ea
AC
112 descr->sizeof_register
113 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
114 descr->register_offset
115 = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long);
d999647b 116 for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
99e42fd8
PA
117 {
118 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
119 descr->register_offset[i] = offset;
120 offset += descr->sizeof_register[i];
99e42fd8
PA
121 }
122 /* Set the real size of the raw register cache buffer. */
123 descr->sizeof_raw_registers = offset;
124
125 for (; i < descr->nr_cooked_registers; i++)
3fadccb3 126 {
bb425013 127 descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]);
3fadccb3
AC
128 descr->register_offset[i] = offset;
129 offset += descr->sizeof_register[i];
3fadccb3 130 }
99e42fd8 131 /* Set the real size of the readonly register cache buffer. */
067df2e5 132 descr->sizeof_cooked_registers = offset;
3fadccb3
AC
133 }
134
3fadccb3
AC
135 return descr;
136}
137
138static struct regcache_descr *
139regcache_descr (struct gdbarch *gdbarch)
140{
19ba03f4
SM
141 return (struct regcache_descr *) gdbarch_data (gdbarch,
142 regcache_descr_handle);
3fadccb3
AC
143}
144
bb425013
AC
145/* Utility functions returning useful register attributes stored in
146 the regcache descr. */
147
148struct type *
149register_type (struct gdbarch *gdbarch, int regnum)
150{
151 struct regcache_descr *descr = regcache_descr (gdbarch);
123f5f96 152
bb425013
AC
153 gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
154 return descr->register_type[regnum];
155}
156
0ed04cce
AC
157/* Utility functions returning useful register attributes stored in
158 the regcache descr. */
159
08a617da
AC
160int
161register_size (struct gdbarch *gdbarch, int regnum)
162{
163 struct regcache_descr *descr = regcache_descr (gdbarch);
164 int size;
123f5f96 165
f57d151a 166 gdb_assert (regnum >= 0
214e098a
UW
167 && regnum < (gdbarch_num_regs (gdbarch)
168 + gdbarch_num_pseudo_regs (gdbarch)));
08a617da 169 size = descr->sizeof_register[regnum];
08a617da
AC
170 return size;
171}
172
8d689ee5
YQ
173/* See common/common-regcache.h. */
174
175int
176regcache_register_size (const struct regcache *regcache, int n)
177{
ac7936df 178 return register_size (regcache->arch (), n);
8d689ee5
YQ
179}
180
31716595
YQ
181reg_buffer::reg_buffer (gdbarch *gdbarch, bool has_pseudo)
182 : m_has_pseudo (has_pseudo)
3fadccb3 183{
ef79d9a3
YQ
184 gdb_assert (gdbarch != NULL);
185 m_descr = regcache_descr (gdbarch);
4621115f 186
31716595 187 if (has_pseudo)
4621115f 188 {
835dcf92
SM
189 m_registers.reset (new gdb_byte[m_descr->sizeof_cooked_registers] ());
190 m_register_status.reset
191 (new register_status[m_descr->nr_cooked_registers] ());
4621115f
YQ
192 }
193 else
194 {
835dcf92
SM
195 m_registers.reset (new gdb_byte[m_descr->sizeof_raw_registers] ());
196 m_register_status.reset
197 (new register_status[gdbarch_num_regs (gdbarch)] ());
4621115f 198 }
31716595
YQ
199}
200
796bb026
YQ
201regcache::regcache (gdbarch *gdbarch, const address_space *aspace_)
202/* The register buffers. A read/write register cache can only hold
203 [0 .. gdbarch_num_regs). */
204 : detached_regcache (gdbarch, false), m_aspace (aspace_)
31716595 205{
ef79d9a3
YQ
206 m_ptid = minus_one_ptid;
207}
4621115f 208
302abd6e
SM
209readonly_detached_regcache::readonly_detached_regcache (regcache &src)
210 : readonly_detached_regcache (src.arch (),
211 [&src] (int regnum, gdb_byte *buf)
212 {
213 return src.cooked_read (regnum, buf);
214 })
daf6667d
YQ
215{
216}
217
ef79d9a3 218gdbarch *
31716595 219reg_buffer::arch () const
ef79d9a3
YQ
220{
221 return m_descr->gdbarch;
222}
3fadccb3 223
b292235f 224/* Cleanup class for invalidating a register. */
b94ade42 225
b292235f 226class regcache_invalidator
b94ade42 227{
b292235f 228public:
b94ade42 229
b292235f
TT
230 regcache_invalidator (struct regcache *regcache, int regnum)
231 : m_regcache (regcache),
232 m_regnum (regnum)
233 {
234 }
b94ade42 235
b292235f
TT
236 ~regcache_invalidator ()
237 {
238 if (m_regcache != nullptr)
6aa7d724 239 m_regcache->invalidate (m_regnum);
b292235f 240 }
b94ade42 241
b292235f 242 DISABLE_COPY_AND_ASSIGN (regcache_invalidator);
b94ade42 243
b292235f
TT
244 void release ()
245 {
246 m_regcache = nullptr;
247 }
248
249private:
250
251 struct regcache *m_regcache;
252 int m_regnum;
253};
b94ade42 254
51b1fe4e
AC
255/* Return a pointer to register REGNUM's buffer cache. */
256
ef79d9a3 257gdb_byte *
31716595 258reg_buffer::register_buffer (int regnum) const
51b1fe4e 259{
835dcf92 260 return m_registers.get () + m_descr->register_offset[regnum];
51b1fe4e
AC
261}
262
ef79d9a3 263void
302abd6e 264reg_buffer::save (register_read_ftype cooked_read)
ef79d9a3
YQ
265{
266 struct gdbarch *gdbarch = m_descr->gdbarch;
2d28509a 267 int regnum;
123f5f96 268
daf6667d
YQ
269 /* It should have pseudo registers. */
270 gdb_assert (m_has_pseudo);
2d28509a 271 /* Clear the dest. */
835dcf92
SM
272 memset (m_registers.get (), 0, m_descr->sizeof_cooked_registers);
273 memset (m_register_status.get (), REG_UNKNOWN, m_descr->nr_cooked_registers);
2d28509a 274 /* Copy over any registers (identified by their membership in the
f57d151a
UW
275 save_reggroup) and mark them as valid. The full [0 .. gdbarch_num_regs +
276 gdbarch_num_pseudo_regs) range is checked since some architectures need
5602984a 277 to save/restore `cooked' registers that live in memory. */
ef79d9a3 278 for (regnum = 0; regnum < m_descr->nr_cooked_registers; regnum++)
2d28509a
AC
279 {
280 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
281 {
50d6adef 282 gdb_byte *dst_buf = register_buffer (regnum);
302abd6e 283 enum register_status status = cooked_read (regnum, dst_buf);
123f5f96 284
50d6adef
AH
285 gdb_assert (status != REG_UNKNOWN);
286
287 if (status != REG_VALID)
288 memset (dst_buf, 0, register_size (gdbarch, regnum));
05d1431c 289
ef79d9a3 290 m_register_status[regnum] = status;
2d28509a
AC
291 }
292 }
293}
294
ef79d9a3 295void
daf6667d 296regcache::restore (readonly_detached_regcache *src)
2d28509a 297{
ef79d9a3 298 struct gdbarch *gdbarch = m_descr->gdbarch;
2d28509a 299 int regnum;
123f5f96 300
fc5b8736 301 gdb_assert (src != NULL);
daf6667d 302 gdb_assert (src->m_has_pseudo);
fc5b8736
YQ
303
304 gdb_assert (gdbarch == src->arch ());
305
2d28509a 306 /* Copy over any registers, being careful to only restore those that
f57d151a
UW
307 were both saved and need to be restored. The full [0 .. gdbarch_num_regs
308 + gdbarch_num_pseudo_regs) range is checked since some architectures need
5602984a 309 to save/restore `cooked' registers that live in memory. */
ef79d9a3 310 for (regnum = 0; regnum < m_descr->nr_cooked_registers; regnum++)
2d28509a 311 {
5602984a 312 if (gdbarch_register_reggroup_p (gdbarch, regnum, restore_reggroup))
2d28509a 313 {
ef79d9a3
YQ
314 if (src->m_register_status[regnum] == REG_VALID)
315 cooked_write (regnum, src->register_buffer (regnum));
2d28509a
AC
316 }
317 }
318}
319
9c861883
AH
320/* See common/common-regcache.h. */
321
ef79d9a3 322enum register_status
c8ec2f33 323reg_buffer::get_register_status (int regnum) const
ef79d9a3 324{
c8ec2f33 325 assert_regnum (regnum);
6ed7ea50 326
aac0d564 327 return m_register_status[regnum];
3fadccb3
AC
328}
329
ef79d9a3 330void
9c861883 331reg_buffer::invalidate (int regnum)
ef79d9a3 332{
4e888c28 333 assert_regnum (regnum);
ef79d9a3
YQ
334 m_register_status[regnum] = REG_UNKNOWN;
335}
9c5ea4d9 336
4e888c28 337void
31716595 338reg_buffer::assert_regnum (int regnum) const
4e888c28 339{
31716595
YQ
340 gdb_assert (regnum >= 0);
341 if (m_has_pseudo)
342 gdb_assert (regnum < m_descr->nr_cooked_registers);
343 else
344 gdb_assert (regnum < gdbarch_num_regs (arch ()));
4e888c28
YQ
345}
346
3fadccb3 347/* Global structure containing the current regcache. */
3fadccb3 348
5ebd2499 349/* NOTE: this is a write-through cache. There is no "dirty" bit for
32178cab
MS
350 recording if the register values have been changed (eg. by the
351 user). Therefore all registers must be written back to the
352 target when appropriate. */
e521e87e 353std::forward_list<regcache *> regcache::current_regcache;
c2250ad1
UW
354
355struct regcache *
e2d96639
YQ
356get_thread_arch_aspace_regcache (ptid_t ptid, struct gdbarch *gdbarch,
357 struct address_space *aspace)
c2250ad1 358{
e521e87e 359 for (const auto &regcache : regcache::current_regcache)
94bb8dfe
YQ
360 if (ptid_equal (regcache->ptid (), ptid) && regcache->arch () == gdbarch)
361 return regcache;
594f7785 362
796bb026 363 regcache *new_regcache = new regcache (gdbarch, aspace);
594f7785 364
e521e87e 365 regcache::current_regcache.push_front (new_regcache);
ef79d9a3 366 new_regcache->set_ptid (ptid);
e2d96639 367
e2d96639
YQ
368 return new_regcache;
369}
370
371struct regcache *
372get_thread_arch_regcache (ptid_t ptid, struct gdbarch *gdbarch)
373{
ed4227b7 374 address_space *aspace = target_thread_address_space (ptid);
b78974c3 375
e2d96639 376 return get_thread_arch_aspace_regcache (ptid, gdbarch, aspace);
594f7785
UW
377}
378
c2250ad1
UW
379static ptid_t current_thread_ptid;
380static struct gdbarch *current_thread_arch;
381
382struct regcache *
383get_thread_regcache (ptid_t ptid)
384{
385 if (!current_thread_arch || !ptid_equal (current_thread_ptid, ptid))
386 {
387 current_thread_ptid = ptid;
388 current_thread_arch = target_thread_architecture (ptid);
389 }
390
391 return get_thread_arch_regcache (ptid, current_thread_arch);
392}
393
00431a78
PA
394/* See regcache.h. */
395
396struct regcache *
397get_thread_regcache (thread_info *thread)
398{
399 return get_thread_regcache (thread->ptid);
400}
401
c2250ad1
UW
402struct regcache *
403get_current_regcache (void)
594f7785 404{
00431a78 405 return get_thread_regcache (inferior_thread ());
594f7785 406}
32178cab 407
361c8ade
GB
408/* See common/common-regcache.h. */
409
410struct regcache *
411get_thread_regcache_for_ptid (ptid_t ptid)
412{
413 return get_thread_regcache (ptid);
414}
32178cab 415
f4c5303c
OF
416/* Observer for the target_changed event. */
417
2c0b251b 418static void
f4c5303c
OF
419regcache_observer_target_changed (struct target_ops *target)
420{
421 registers_changed ();
422}
423
5231c1fd
PA
424/* Update global variables old ptids to hold NEW_PTID if they were
425 holding OLD_PTID. */
e521e87e
YQ
426void
427regcache::regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid)
5231c1fd 428{
e521e87e 429 for (auto &regcache : regcache::current_regcache)
94bb8dfe
YQ
430 {
431 if (ptid_equal (regcache->ptid (), old_ptid))
432 regcache->set_ptid (new_ptid);
433 }
5231c1fd
PA
434}
435
32178cab
MS
436/* Low level examining and depositing of registers.
437
438 The caller is responsible for making sure that the inferior is
439 stopped before calling the fetching routines, or it will get
440 garbage. (a change from GDB version 3, in which the caller got the
441 value from the last stop). */
442
443/* REGISTERS_CHANGED ()
444
445 Indicate that registers may have changed, so invalidate the cache. */
446
447void
e66408ed 448registers_changed_ptid (ptid_t ptid)
32178cab 449{
e521e87e 450 for (auto oit = regcache::current_regcache.before_begin (),
94bb8dfe 451 it = std::next (oit);
e521e87e 452 it != regcache::current_regcache.end ();
94bb8dfe 453 )
c2250ad1 454 {
94bb8dfe 455 if (ptid_match ((*it)->ptid (), ptid))
e66408ed 456 {
94bb8dfe 457 delete *it;
e521e87e 458 it = regcache::current_regcache.erase_after (oit);
e66408ed 459 }
94bb8dfe
YQ
460 else
461 oit = it++;
c2250ad1 462 }
32178cab 463
c34fd852 464 if (ptid_match (current_thread_ptid, ptid))
041274d8
PA
465 {
466 current_thread_ptid = null_ptid;
467 current_thread_arch = NULL;
468 }
32178cab 469
c34fd852 470 if (ptid_match (inferior_ptid, ptid))
041274d8
PA
471 {
472 /* We just deleted the regcache of the current thread. Need to
473 forget about any frames we have cached, too. */
474 reinit_frame_cache ();
475 }
476}
c2250ad1 477
00431a78
PA
478/* See regcache.h. */
479
480void
481registers_changed_thread (thread_info *thread)
482{
483 registers_changed_ptid (thread->ptid);
484}
485
041274d8
PA
486void
487registers_changed (void)
488{
489 registers_changed_ptid (minus_one_ptid);
a5d9d57d 490
32178cab
MS
491 /* Force cleanup of any alloca areas if using C alloca instead of
492 a builtin alloca. This particular call is used to clean up
493 areas allocated by low level target code which may build up
494 during lengthy interactions between gdb and the target before
495 gdb gives control to the user (ie watchpoints). */
496 alloca (0);
32178cab
MS
497}
498
ef79d9a3
YQ
499void
500regcache::raw_update (int regnum)
501{
4e888c28 502 assert_regnum (regnum);
8e368124 503
3fadccb3
AC
504 /* Make certain that the register cache is up-to-date with respect
505 to the current thread. This switching shouldn't be necessary
506 only there is still only one target side register cache. Sigh!
507 On the bright side, at least there is a regcache object. */
8e368124 508
796bb026 509 if (get_register_status (regnum) == REG_UNKNOWN)
3fadccb3 510 {
ef79d9a3 511 target_fetch_registers (this, regnum);
788c8b10
PA
512
513 /* A number of targets can't access the whole set of raw
514 registers (because the debug API provides no means to get at
515 them). */
ef79d9a3
YQ
516 if (m_register_status[regnum] == REG_UNKNOWN)
517 m_register_status[regnum] = REG_UNAVAILABLE;
3fadccb3 518 }
8e368124
AH
519}
520
ef79d9a3 521enum register_status
849d0ba8 522readable_regcache::raw_read (int regnum, gdb_byte *buf)
8e368124
AH
523{
524 gdb_assert (buf != NULL);
ef79d9a3 525 raw_update (regnum);
05d1431c 526
ef79d9a3
YQ
527 if (m_register_status[regnum] != REG_VALID)
528 memset (buf, 0, m_descr->sizeof_register[regnum]);
05d1431c 529 else
ef79d9a3
YQ
530 memcpy (buf, register_buffer (regnum),
531 m_descr->sizeof_register[regnum]);
05d1431c 532
aac0d564 533 return m_register_status[regnum];
61a0eb5b
AC
534}
535
05d1431c 536enum register_status
28fc6740 537regcache_raw_read_signed (struct regcache *regcache, int regnum, LONGEST *val)
ef79d9a3
YQ
538{
539 gdb_assert (regcache != NULL);
6f98355c 540 return regcache->raw_read (regnum, val);
ef79d9a3
YQ
541}
542
6f98355c 543template<typename T, typename>
ef79d9a3 544enum register_status
849d0ba8 545readable_regcache::raw_read (int regnum, T *val)
28fc6740 546{
2d522557 547 gdb_byte *buf;
05d1431c 548 enum register_status status;
123f5f96 549
4e888c28 550 assert_regnum (regnum);
ef79d9a3
YQ
551 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
552 status = raw_read (regnum, buf);
05d1431c 553 if (status == REG_VALID)
6f98355c
YQ
554 *val = extract_integer<T> (buf,
555 m_descr->sizeof_register[regnum],
556 gdbarch_byte_order (m_descr->gdbarch));
05d1431c
PA
557 else
558 *val = 0;
559 return status;
28fc6740
AC
560}
561
05d1431c 562enum register_status
28fc6740
AC
563regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
564 ULONGEST *val)
ef79d9a3
YQ
565{
566 gdb_assert (regcache != NULL);
6f98355c 567 return regcache->raw_read (regnum, val);
28fc6740
AC
568}
569
c00dcbe9
MK
570void
571regcache_raw_write_signed (struct regcache *regcache, int regnum, LONGEST val)
ef79d9a3
YQ
572{
573 gdb_assert (regcache != NULL);
6f98355c 574 regcache->raw_write (regnum, val);
ef79d9a3
YQ
575}
576
6f98355c 577template<typename T, typename>
ef79d9a3 578void
6f98355c 579regcache::raw_write (int regnum, T val)
c00dcbe9 580{
7c543f7b 581 gdb_byte *buf;
123f5f96 582
4e888c28 583 assert_regnum (regnum);
ef79d9a3 584 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
6f98355c
YQ
585 store_integer (buf, m_descr->sizeof_register[regnum],
586 gdbarch_byte_order (m_descr->gdbarch), val);
ef79d9a3 587 raw_write (regnum, buf);
c00dcbe9
MK
588}
589
590void
591regcache_raw_write_unsigned (struct regcache *regcache, int regnum,
592 ULONGEST val)
ef79d9a3
YQ
593{
594 gdb_assert (regcache != NULL);
6f98355c 595 regcache->raw_write (regnum, val);
c00dcbe9
MK
596}
597
9fd15b2e
YQ
598LONGEST
599regcache_raw_get_signed (struct regcache *regcache, int regnum)
600{
601 LONGEST value;
602 enum register_status status;
603
604 status = regcache_raw_read_signed (regcache, regnum, &value);
605 if (status == REG_UNAVAILABLE)
606 throw_error (NOT_AVAILABLE_ERROR,
607 _("Register %d is not available"), regnum);
608 return value;
609}
610
ef79d9a3 611enum register_status
849d0ba8 612readable_regcache::cooked_read (int regnum, gdb_byte *buf)
68365089 613{
d138e37a 614 gdb_assert (regnum >= 0);
ef79d9a3 615 gdb_assert (regnum < m_descr->nr_cooked_registers);
d999647b 616 if (regnum < num_raw_registers ())
ef79d9a3 617 return raw_read (regnum, buf);
849d0ba8 618 else if (m_has_pseudo
ef79d9a3 619 && m_register_status[regnum] != REG_UNKNOWN)
05d1431c 620 {
ef79d9a3
YQ
621 if (m_register_status[regnum] == REG_VALID)
622 memcpy (buf, register_buffer (regnum),
623 m_descr->sizeof_register[regnum]);
05d1431c 624 else
ef79d9a3 625 memset (buf, 0, m_descr->sizeof_register[regnum]);
05d1431c 626
aac0d564 627 return m_register_status[regnum];
05d1431c 628 }
ef79d9a3 629 else if (gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
3543a589
TT
630 {
631 struct value *mark, *computed;
632 enum register_status result = REG_VALID;
633
634 mark = value_mark ();
635
ef79d9a3
YQ
636 computed = gdbarch_pseudo_register_read_value (m_descr->gdbarch,
637 this, regnum);
3543a589
TT
638 if (value_entirely_available (computed))
639 memcpy (buf, value_contents_raw (computed),
ef79d9a3 640 m_descr->sizeof_register[regnum]);
3543a589
TT
641 else
642 {
ef79d9a3 643 memset (buf, 0, m_descr->sizeof_register[regnum]);
3543a589
TT
644 result = REG_UNAVAILABLE;
645 }
646
647 value_free_to_mark (mark);
648
649 return result;
650 }
d138e37a 651 else
ef79d9a3 652 return gdbarch_pseudo_register_read (m_descr->gdbarch, this,
05d1431c 653 regnum, buf);
61a0eb5b
AC
654}
655
ef79d9a3 656struct value *
849d0ba8 657readable_regcache::cooked_read_value (int regnum)
3543a589
TT
658{
659 gdb_assert (regnum >= 0);
ef79d9a3 660 gdb_assert (regnum < m_descr->nr_cooked_registers);
3543a589 661
d999647b 662 if (regnum < num_raw_registers ()
849d0ba8 663 || (m_has_pseudo && m_register_status[regnum] != REG_UNKNOWN)
ef79d9a3 664 || !gdbarch_pseudo_register_read_value_p (m_descr->gdbarch))
3543a589
TT
665 {
666 struct value *result;
667
ef79d9a3 668 result = allocate_value (register_type (m_descr->gdbarch, regnum));
3543a589
TT
669 VALUE_LVAL (result) = lval_register;
670 VALUE_REGNUM (result) = regnum;
671
672 /* It is more efficient in general to do this delegation in this
673 direction than in the other one, even though the value-based
674 API is preferred. */
ef79d9a3
YQ
675 if (cooked_read (regnum,
676 value_contents_raw (result)) == REG_UNAVAILABLE)
3543a589
TT
677 mark_value_bytes_unavailable (result, 0,
678 TYPE_LENGTH (value_type (result)));
679
680 return result;
681 }
682 else
ef79d9a3
YQ
683 return gdbarch_pseudo_register_read_value (m_descr->gdbarch,
684 this, regnum);
3543a589
TT
685}
686
05d1431c 687enum register_status
a378f419
AC
688regcache_cooked_read_signed (struct regcache *regcache, int regnum,
689 LONGEST *val)
ef79d9a3
YQ
690{
691 gdb_assert (regcache != NULL);
6f98355c 692 return regcache->cooked_read (regnum, val);
ef79d9a3
YQ
693}
694
6f98355c 695template<typename T, typename>
ef79d9a3 696enum register_status
849d0ba8 697readable_regcache::cooked_read (int regnum, T *val)
a378f419 698{
05d1431c 699 enum register_status status;
2d522557 700 gdb_byte *buf;
123f5f96 701
ef79d9a3
YQ
702 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
703 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
704 status = cooked_read (regnum, buf);
05d1431c 705 if (status == REG_VALID)
6f98355c
YQ
706 *val = extract_integer<T> (buf, m_descr->sizeof_register[regnum],
707 gdbarch_byte_order (m_descr->gdbarch));
05d1431c
PA
708 else
709 *val = 0;
710 return status;
a378f419
AC
711}
712
05d1431c 713enum register_status
a378f419
AC
714regcache_cooked_read_unsigned (struct regcache *regcache, int regnum,
715 ULONGEST *val)
ef79d9a3
YQ
716{
717 gdb_assert (regcache != NULL);
6f98355c 718 return regcache->cooked_read (regnum, val);
a378f419
AC
719}
720
a66a9c23
AC
721void
722regcache_cooked_write_signed (struct regcache *regcache, int regnum,
723 LONGEST val)
ef79d9a3
YQ
724{
725 gdb_assert (regcache != NULL);
6f98355c 726 regcache->cooked_write (regnum, val);
ef79d9a3
YQ
727}
728
6f98355c 729template<typename T, typename>
ef79d9a3 730void
6f98355c 731regcache::cooked_write (int regnum, T val)
a66a9c23 732{
7c543f7b 733 gdb_byte *buf;
123f5f96 734
ef79d9a3
YQ
735 gdb_assert (regnum >=0 && regnum < m_descr->nr_cooked_registers);
736 buf = (gdb_byte *) alloca (m_descr->sizeof_register[regnum]);
6f98355c
YQ
737 store_integer (buf, m_descr->sizeof_register[regnum],
738 gdbarch_byte_order (m_descr->gdbarch), val);
ef79d9a3 739 cooked_write (regnum, buf);
a66a9c23
AC
740}
741
742void
743regcache_cooked_write_unsigned (struct regcache *regcache, int regnum,
744 ULONGEST val)
ef79d9a3
YQ
745{
746 gdb_assert (regcache != NULL);
6f98355c 747 regcache->cooked_write (regnum, val);
a66a9c23
AC
748}
749
ef79d9a3
YQ
750void
751regcache::raw_write (int regnum, const gdb_byte *buf)
61a0eb5b 752{
594f7785 753
ef79d9a3 754 gdb_assert (buf != NULL);
4e888c28 755 assert_regnum (regnum);
3fadccb3 756
3fadccb3
AC
757 /* On the sparc, writing %g0 is a no-op, so we don't even want to
758 change the registers array if something writes to this register. */
ef79d9a3 759 if (gdbarch_cannot_store_register (arch (), regnum))
3fadccb3
AC
760 return;
761
3fadccb3 762 /* If we have a valid copy of the register, and new value == old
0df8b418 763 value, then don't bother doing the actual store. */
ef79d9a3
YQ
764 if (get_register_status (regnum) == REG_VALID
765 && (memcmp (register_buffer (regnum), buf,
766 m_descr->sizeof_register[regnum]) == 0))
3fadccb3
AC
767 return;
768
ef79d9a3 769 target_prepare_to_store (this);
c8ec2f33 770 raw_supply (regnum, buf);
b94ade42 771
b292235f
TT
772 /* Invalidate the register after it is written, in case of a
773 failure. */
774 regcache_invalidator invalidator (this, regnum);
b94ade42 775
ef79d9a3 776 target_store_registers (this, regnum);
594f7785 777
b292235f
TT
778 /* The target did not throw an error so we can discard invalidating
779 the register. */
780 invalidator.release ();
61a0eb5b
AC
781}
782
ef79d9a3
YQ
783void
784regcache::cooked_write (int regnum, const gdb_byte *buf)
68365089 785{
d138e37a 786 gdb_assert (regnum >= 0);
ef79d9a3 787 gdb_assert (regnum < m_descr->nr_cooked_registers);
d999647b 788 if (regnum < num_raw_registers ())
ef79d9a3 789 raw_write (regnum, buf);
d138e37a 790 else
ef79d9a3 791 gdbarch_pseudo_register_write (m_descr->gdbarch, this,
d8124050 792 regnum, buf);
61a0eb5b
AC
793}
794
33bab475 795/* See regcache.h. */
06c0b04e 796
ef79d9a3 797enum register_status
33bab475
AH
798readable_regcache::read_part (int regnum, int offset, int len,
799 gdb_byte *out, bool is_raw)
849d0ba8 800{
33bab475
AH
801 int reg_size = register_size (arch (), regnum);
802
803 gdb_assert (out != NULL);
804 gdb_assert (offset >= 0 && len >= 0 && offset + len <= reg_size);
805
806 if (offset == 0 && len == 0)
807 {
808 /* Nothing to do. */
809 return REG_VALID;
810 }
811
812 if (offset == 0 && len == reg_size)
813 {
814 /* Read the full register. */
815 return (is_raw) ? raw_read (regnum, out) : cooked_read (regnum, out);
816 }
849d0ba8 817
849d0ba8 818 enum register_status status;
33bab475 819 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
849d0ba8 820
33bab475
AH
821 /* Read full register to buffer. */
822 status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg);
849d0ba8
YQ
823 if (status != REG_VALID)
824 return status;
825
33bab475
AH
826 /* Copy out. */
827 memcpy (out, reg + offset, len);
849d0ba8
YQ
828 return REG_VALID;
829}
830
33bab475
AH
831/* See regcache.h. */
832
849d0ba8
YQ
833enum register_status
834regcache::write_part (int regnum, int offset, int len,
33bab475 835 const gdb_byte *in, bool is_raw)
ef79d9a3 836{
33bab475 837 int reg_size = register_size (arch (), regnum);
123f5f96 838
33bab475
AH
839 gdb_assert (in != NULL);
840 gdb_assert (offset >= 0 && len >= 0 && offset + len <= reg_size);
841
842 if (offset == 0 && len == 0)
06c0b04e 843 {
33bab475
AH
844 /* Nothing to do. */
845 return REG_VALID;
846 }
05d1431c 847
33bab475
AH
848 if (offset == 0 && len == reg_size)
849 {
850 /* Write the full register. */
851 (is_raw) ? raw_write (regnum, in) : cooked_write (regnum, in);
852 return REG_VALID;
06c0b04e 853 }
849d0ba8 854
33bab475
AH
855 enum register_status status;
856 gdb_byte *reg = (gdb_byte *) alloca (reg_size);
05d1431c 857
33bab475
AH
858 /* Read existing register to buffer. */
859 status = (is_raw) ? raw_read (regnum, reg) : cooked_read (regnum, reg);
860 if (status != REG_VALID)
861 return status;
862
863 /* Update buffer, then write back to regcache. */
864 memcpy (reg + offset, in, len);
865 is_raw ? raw_write (regnum, reg) : cooked_write (regnum, reg);
05d1431c 866 return REG_VALID;
06c0b04e
AC
867}
868
33bab475
AH
869/* See regcache.h. */
870
ef79d9a3 871enum register_status
33bab475
AH
872readable_regcache::raw_read_part (int regnum, int offset, int len,
873 gdb_byte *buf)
ef79d9a3 874{
4e888c28 875 assert_regnum (regnum);
849d0ba8 876 return read_part (regnum, offset, len, buf, true);
06c0b04e
AC
877}
878
4f0420fd 879/* See regcache.h. */
123f5f96 880
ef79d9a3
YQ
881void
882regcache::raw_write_part (int regnum, int offset, int len,
883 const gdb_byte *buf)
884{
4e888c28 885 assert_regnum (regnum);
849d0ba8 886 write_part (regnum, offset, len, buf, true);
06c0b04e
AC
887}
888
33bab475
AH
889/* See regcache.h. */
890
ef79d9a3 891enum register_status
849d0ba8
YQ
892readable_regcache::cooked_read_part (int regnum, int offset, int len,
893 gdb_byte *buf)
ef79d9a3
YQ
894{
895 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
849d0ba8 896 return read_part (regnum, offset, len, buf, false);
06c0b04e
AC
897}
898
33bab475
AH
899/* See regcache.h. */
900
ef79d9a3
YQ
901void
902regcache::cooked_write_part (int regnum, int offset, int len,
903 const gdb_byte *buf)
904{
905 gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
849d0ba8 906 write_part (regnum, offset, len, buf, false);
06c0b04e 907}
32178cab 908
9c861883
AH
909/* See common/common-regcache.h. */
910
ef79d9a3 911void
9c861883 912reg_buffer::raw_supply (int regnum, const void *buf)
9a661b68
MK
913{
914 void *regbuf;
915 size_t size;
916
4e888c28 917 assert_regnum (regnum);
9a661b68 918
ef79d9a3
YQ
919 regbuf = register_buffer (regnum);
920 size = m_descr->sizeof_register[regnum];
9a661b68
MK
921
922 if (buf)
ee99023e
PA
923 {
924 memcpy (regbuf, buf, size);
ef79d9a3 925 m_register_status[regnum] = REG_VALID;
ee99023e 926 }
9a661b68 927 else
ee99023e
PA
928 {
929 /* This memset not strictly necessary, but better than garbage
930 in case the register value manages to escape somewhere (due
931 to a bug, no less). */
932 memset (regbuf, 0, size);
ef79d9a3 933 m_register_status[regnum] = REG_UNAVAILABLE;
ee99023e 934 }
9a661b68
MK
935}
936
9c861883 937/* See regcache.h. */
b057297a
AH
938
939void
9c861883
AH
940reg_buffer::raw_supply_integer (int regnum, const gdb_byte *addr,
941 int addr_len, bool is_signed)
b057297a
AH
942{
943 enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
944 gdb_byte *regbuf;
945 size_t regsize;
946
4e888c28 947 assert_regnum (regnum);
b057297a
AH
948
949 regbuf = register_buffer (regnum);
950 regsize = m_descr->sizeof_register[regnum];
951
952 copy_integer_to_size (regbuf, regsize, addr, addr_len, is_signed,
953 byte_order);
954 m_register_status[regnum] = REG_VALID;
955}
956
9c861883 957/* See regcache.h. */
f81fdd35
AH
958
959void
9c861883 960reg_buffer::raw_supply_zeroed (int regnum)
f81fdd35
AH
961{
962 void *regbuf;
963 size_t size;
964
4e888c28 965 assert_regnum (regnum);
f81fdd35
AH
966
967 regbuf = register_buffer (regnum);
968 size = m_descr->sizeof_register[regnum];
969
970 memset (regbuf, 0, size);
971 m_register_status[regnum] = REG_VALID;
972}
973
9c861883
AH
974/* See common/common-regcache.h. */
975
ef79d9a3 976void
9c861883 977reg_buffer::raw_collect (int regnum, void *buf) const
9a661b68
MK
978{
979 const void *regbuf;
980 size_t size;
981
ef79d9a3 982 gdb_assert (buf != NULL);
4e888c28 983 assert_regnum (regnum);
9a661b68 984
ef79d9a3
YQ
985 regbuf = register_buffer (regnum);
986 size = m_descr->sizeof_register[regnum];
9a661b68
MK
987 memcpy (buf, regbuf, size);
988}
989
9c861883 990/* See regcache.h. */
b057297a
AH
991
992void
9c861883
AH
993reg_buffer::raw_collect_integer (int regnum, gdb_byte *addr, int addr_len,
994 bool is_signed) const
b057297a
AH
995{
996 enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
997 const gdb_byte *regbuf;
998 size_t regsize;
999
4e888c28 1000 assert_regnum (regnum);
b057297a
AH
1001
1002 regbuf = register_buffer (regnum);
1003 regsize = m_descr->sizeof_register[regnum];
1004
1005 copy_integer_to_size (addr, addr_len, regbuf, regsize, is_signed,
1006 byte_order);
1007}
1008
9c861883
AH
1009/* Transfer a single or all registers belonging to a certain register
1010 set to or from a buffer. This is the main worker function for
1011 regcache_supply_regset and regcache_collect_regset. */
1012
ef79d9a3
YQ
1013void
1014regcache::transfer_regset (const struct regset *regset,
1015 struct regcache *out_regcache,
1016 int regnum, const void *in_buf,
1017 void *out_buf, size_t size) const
0b309272
AA
1018{
1019 const struct regcache_map_entry *map;
1020 int offs = 0, count;
1021
19ba03f4
SM
1022 for (map = (const struct regcache_map_entry *) regset->regmap;
1023 (count = map->count) != 0;
1024 map++)
0b309272
AA
1025 {
1026 int regno = map->regno;
1027 int slot_size = map->size;
1028
1029 if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
ef79d9a3 1030 slot_size = m_descr->sizeof_register[regno];
0b309272
AA
1031
1032 if (regno == REGCACHE_MAP_SKIP
1033 || (regnum != -1
1034 && (regnum < regno || regnum >= regno + count)))
1035 offs += count * slot_size;
1036
1037 else if (regnum == -1)
1038 for (; count--; regno++, offs += slot_size)
1039 {
1040 if (offs + slot_size > size)
1041 break;
1042
1043 if (out_buf)
ef79d9a3 1044 raw_collect (regno, (gdb_byte *) out_buf + offs);
0b309272 1045 else
ef79d9a3
YQ
1046 out_regcache->raw_supply (regno, in_buf
1047 ? (const gdb_byte *) in_buf + offs
1048 : NULL);
0b309272
AA
1049 }
1050 else
1051 {
1052 /* Transfer a single register and return. */
1053 offs += (regnum - regno) * slot_size;
1054 if (offs + slot_size > size)
1055 return;
1056
1057 if (out_buf)
ef79d9a3 1058 raw_collect (regnum, (gdb_byte *) out_buf + offs);
0b309272 1059 else
ef79d9a3
YQ
1060 out_regcache->raw_supply (regnum, in_buf
1061 ? (const gdb_byte *) in_buf + offs
1062 : NULL);
0b309272
AA
1063 return;
1064 }
1065 }
1066}
1067
1068/* Supply register REGNUM from BUF to REGCACHE, using the register map
1069 in REGSET. If REGNUM is -1, do this for all registers in REGSET.
1070 If BUF is NULL, set the register(s) to "unavailable" status. */
1071
1072void
1073regcache_supply_regset (const struct regset *regset,
1074 struct regcache *regcache,
1075 int regnum, const void *buf, size_t size)
1076{
ef79d9a3
YQ
1077 regcache->supply_regset (regset, regnum, buf, size);
1078}
1079
1080void
1081regcache::supply_regset (const struct regset *regset,
1082 int regnum, const void *buf, size_t size)
1083{
1084 transfer_regset (regset, this, regnum, buf, NULL, size);
0b309272
AA
1085}
1086
1087/* Collect register REGNUM from REGCACHE to BUF, using the register
1088 map in REGSET. If REGNUM is -1, do this for all registers in
1089 REGSET. */
1090
1091void
1092regcache_collect_regset (const struct regset *regset,
1093 const struct regcache *regcache,
1094 int regnum, void *buf, size_t size)
1095{
ef79d9a3
YQ
1096 regcache->collect_regset (regset, regnum, buf, size);
1097}
1098
1099void
1100regcache::collect_regset (const struct regset *regset,
1101 int regnum, void *buf, size_t size) const
1102{
1103 transfer_regset (regset, NULL, regnum, NULL, buf, size);
0b309272
AA
1104}
1105
f868386e
AH
1106/* See common/common-regcache.h. */
1107
1108bool
1109reg_buffer::raw_compare (int regnum, const void *buf, int offset) const
1110{
1111 gdb_assert (buf != NULL);
1112 assert_regnum (regnum);
1113
1114 const char *regbuf = (const char *) register_buffer (regnum);
1115 size_t size = m_descr->sizeof_register[regnum];
1116 gdb_assert (size >= offset);
1117
1118 return (memcmp (buf, regbuf + offset, size - offset) == 0);
1119}
193cb69f 1120
515630c5 1121/* Special handling for register PC. */
32178cab
MS
1122
1123CORE_ADDR
515630c5 1124regcache_read_pc (struct regcache *regcache)
32178cab 1125{
ac7936df 1126 struct gdbarch *gdbarch = regcache->arch ();
61a1198a 1127
32178cab
MS
1128 CORE_ADDR pc_val;
1129
61a1198a
UW
1130 if (gdbarch_read_pc_p (gdbarch))
1131 pc_val = gdbarch_read_pc (gdbarch, regcache);
cde9ea48 1132 /* Else use per-frame method on get_current_frame. */
214e098a 1133 else if (gdbarch_pc_regnum (gdbarch) >= 0)
cde9ea48 1134 {
61a1198a 1135 ULONGEST raw_val;
123f5f96 1136
05d1431c
PA
1137 if (regcache_cooked_read_unsigned (regcache,
1138 gdbarch_pc_regnum (gdbarch),
1139 &raw_val) == REG_UNAVAILABLE)
1140 throw_error (NOT_AVAILABLE_ERROR, _("PC register is not available"));
1141
214e098a 1142 pc_val = gdbarch_addr_bits_remove (gdbarch, raw_val);
cde9ea48
AC
1143 }
1144 else
515630c5
UW
1145 internal_error (__FILE__, __LINE__,
1146 _("regcache_read_pc: Unable to find PC"));
32178cab
MS
1147 return pc_val;
1148}
1149
32178cab 1150void
515630c5 1151regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
32178cab 1152{
ac7936df 1153 struct gdbarch *gdbarch = regcache->arch ();
61a1198a 1154
61a1198a
UW
1155 if (gdbarch_write_pc_p (gdbarch))
1156 gdbarch_write_pc (gdbarch, regcache, pc);
214e098a 1157 else if (gdbarch_pc_regnum (gdbarch) >= 0)
3e8c568d 1158 regcache_cooked_write_unsigned (regcache,
214e098a 1159 gdbarch_pc_regnum (gdbarch), pc);
61a1198a
UW
1160 else
1161 internal_error (__FILE__, __LINE__,
515630c5 1162 _("regcache_write_pc: Unable to update PC"));
edb3359d
DJ
1163
1164 /* Writing the PC (for instance, from "load") invalidates the
1165 current frame. */
1166 reinit_frame_cache ();
32178cab
MS
1167}
1168
d999647b 1169int
31716595 1170reg_buffer::num_raw_registers () const
d999647b
YQ
1171{
1172 return gdbarch_num_regs (arch ());
1173}
1174
ed771251 1175void
ef79d9a3 1176regcache::debug_print_register (const char *func, int regno)
ed771251 1177{
ef79d9a3 1178 struct gdbarch *gdbarch = arch ();
ed771251
AH
1179
1180 fprintf_unfiltered (gdb_stdlog, "%s ", func);
1181 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
1182 && gdbarch_register_name (gdbarch, regno) != NULL
1183 && gdbarch_register_name (gdbarch, regno)[0] != '\0')
1184 fprintf_unfiltered (gdb_stdlog, "(%s)",
1185 gdbarch_register_name (gdbarch, regno));
1186 else
1187 fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
1188 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
1189 {
1190 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1191 int size = register_size (gdbarch, regno);
ef79d9a3 1192 gdb_byte *buf = register_buffer (regno);
ed771251
AH
1193
1194 fprintf_unfiltered (gdb_stdlog, " = ");
1195 for (int i = 0; i < size; i++)
1196 {
1197 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
1198 }
1199 if (size <= sizeof (LONGEST))
1200 {
1201 ULONGEST val = extract_unsigned_integer (buf, size, byte_order);
1202
1203 fprintf_unfiltered (gdb_stdlog, " %s %s",
1204 core_addr_to_string_nz (val), plongest (val));
1205 }
1206 }
1207 fprintf_unfiltered (gdb_stdlog, "\n");
1208}
32178cab 1209
705152c5 1210static void
0b39b52e 1211reg_flush_command (const char *command, int from_tty)
705152c5
MS
1212{
1213 /* Force-flush the register cache. */
1214 registers_changed ();
1215 if (from_tty)
a3f17187 1216 printf_filtered (_("Register cache flushed.\n"));
705152c5
MS
1217}
1218
4c74fe6b
YQ
1219void
1220register_dump::dump (ui_file *file)
af030b9a 1221{
4c74fe6b
YQ
1222 auto descr = regcache_descr (m_gdbarch);
1223 int regnum;
1224 int footnote_nr = 0;
1225 int footnote_register_offset = 0;
1226 int footnote_register_type_name_null = 0;
1227 long register_offset = 0;
af030b9a 1228
4c74fe6b
YQ
1229 gdb_assert (descr->nr_cooked_registers
1230 == (gdbarch_num_regs (m_gdbarch)
1231 + gdbarch_num_pseudo_regs (m_gdbarch)));
af030b9a 1232
4c74fe6b
YQ
1233 for (regnum = -1; regnum < descr->nr_cooked_registers; regnum++)
1234 {
1235 /* Name. */
1236 if (regnum < 0)
1237 fprintf_unfiltered (file, " %-10s", "Name");
1238 else
1239 {
1240 const char *p = gdbarch_register_name (m_gdbarch, regnum);
123f5f96 1241
4c74fe6b
YQ
1242 if (p == NULL)
1243 p = "";
1244 else if (p[0] == '\0')
1245 p = "''";
1246 fprintf_unfiltered (file, " %-10s", p);
1247 }
af030b9a 1248
4c74fe6b
YQ
1249 /* Number. */
1250 if (regnum < 0)
1251 fprintf_unfiltered (file, " %4s", "Nr");
1252 else
1253 fprintf_unfiltered (file, " %4d", regnum);
af030b9a 1254
4c74fe6b
YQ
1255 /* Relative number. */
1256 if (regnum < 0)
1257 fprintf_unfiltered (file, " %4s", "Rel");
1258 else if (regnum < gdbarch_num_regs (m_gdbarch))
1259 fprintf_unfiltered (file, " %4d", regnum);
1260 else
1261 fprintf_unfiltered (file, " %4d",
1262 (regnum - gdbarch_num_regs (m_gdbarch)));
af030b9a 1263
4c74fe6b
YQ
1264 /* Offset. */
1265 if (regnum < 0)
1266 fprintf_unfiltered (file, " %6s ", "Offset");
1267 else
af030b9a 1268 {
4c74fe6b
YQ
1269 fprintf_unfiltered (file, " %6ld",
1270 descr->register_offset[regnum]);
1271 if (register_offset != descr->register_offset[regnum]
1272 || (regnum > 0
1273 && (descr->register_offset[regnum]
1274 != (descr->register_offset[regnum - 1]
1275 + descr->sizeof_register[regnum - 1])))
1276 )
af030b9a 1277 {
4c74fe6b
YQ
1278 if (!footnote_register_offset)
1279 footnote_register_offset = ++footnote_nr;
1280 fprintf_unfiltered (file, "*%d", footnote_register_offset);
af030b9a 1281 }
4c74fe6b
YQ
1282 else
1283 fprintf_unfiltered (file, " ");
1284 register_offset = (descr->register_offset[regnum]
1285 + descr->sizeof_register[regnum]);
af030b9a
AC
1286 }
1287
4c74fe6b
YQ
1288 /* Size. */
1289 if (regnum < 0)
1290 fprintf_unfiltered (file, " %5s ", "Size");
1291 else
1292 fprintf_unfiltered (file, " %5ld", descr->sizeof_register[regnum]);
f3384e66 1293
4c74fe6b 1294 /* Type. */
f3384e66 1295 {
4c74fe6b
YQ
1296 const char *t;
1297 std::string name_holder;
b59ff9d5 1298
4c74fe6b
YQ
1299 if (regnum < 0)
1300 t = "Type";
215c69dc
YQ
1301 else
1302 {
4c74fe6b 1303 static const char blt[] = "builtin_type";
123f5f96 1304
4c74fe6b
YQ
1305 t = TYPE_NAME (register_type (m_gdbarch, regnum));
1306 if (t == NULL)
f3384e66 1307 {
4c74fe6b
YQ
1308 if (!footnote_register_type_name_null)
1309 footnote_register_type_name_null = ++footnote_nr;
1310 name_holder = string_printf ("*%d",
1311 footnote_register_type_name_null);
1312 t = name_holder.c_str ();
f3384e66 1313 }
4c74fe6b
YQ
1314 /* Chop a leading builtin_type. */
1315 if (startswith (t, blt))
1316 t += strlen (blt);
f3384e66 1317 }
4c74fe6b 1318 fprintf_unfiltered (file, " %-15s", t);
f3384e66 1319 }
f3384e66 1320
4c74fe6b
YQ
1321 /* Leading space always present. */
1322 fprintf_unfiltered (file, " ");
af030b9a 1323
4c74fe6b 1324 dump_reg (file, regnum);
ed4227b7 1325
4c74fe6b 1326 fprintf_unfiltered (file, "\n");
ed4227b7
PA
1327 }
1328
4c74fe6b
YQ
1329 if (footnote_register_offset)
1330 fprintf_unfiltered (file, "*%d: Inconsistent register offsets.\n",
1331 footnote_register_offset);
1332 if (footnote_register_type_name_null)
1333 fprintf_unfiltered (file,
1334 "*%d: Register type's name NULL.\n",
1335 footnote_register_type_name_null);
c21236dc
PA
1336}
1337
8248946c
YQ
1338#if GDB_SELF_TEST
1339#include "selftest.h"
1b30aaa5
YQ
1340#include "selftest-arch.h"
1341#include "gdbthread.h"
ec7a5fcb 1342#include "target-float.h"
8248946c
YQ
1343
1344namespace selftests {
1345
e521e87e 1346class regcache_access : public regcache
8248946c 1347{
e521e87e
YQ
1348public:
1349
1350 /* Return the number of elements in current_regcache. */
1351
1352 static size_t
1353 current_regcache_size ()
1354 {
1355 return std::distance (regcache::current_regcache.begin (),
1356 regcache::current_regcache.end ());
1357 }
1358};
8248946c
YQ
1359
1360static void
1361current_regcache_test (void)
1362{
1363 /* It is empty at the start. */
e521e87e 1364 SELF_CHECK (regcache_access::current_regcache_size () == 0);
8248946c
YQ
1365
1366 ptid_t ptid1 (1), ptid2 (2), ptid3 (3);
1367
1368 /* Get regcache from ptid1, a new regcache is added to
1369 current_regcache. */
1370 regcache *regcache = get_thread_arch_aspace_regcache (ptid1,
1371 target_gdbarch (),
1372 NULL);
1373
1374 SELF_CHECK (regcache != NULL);
1375 SELF_CHECK (regcache->ptid () == ptid1);
e521e87e 1376 SELF_CHECK (regcache_access::current_regcache_size () == 1);
8248946c
YQ
1377
1378 /* Get regcache from ptid2, a new regcache is added to
1379 current_regcache. */
1380 regcache = get_thread_arch_aspace_regcache (ptid2,
1381 target_gdbarch (),
1382 NULL);
1383 SELF_CHECK (regcache != NULL);
1384 SELF_CHECK (regcache->ptid () == ptid2);
e521e87e 1385 SELF_CHECK (regcache_access::current_regcache_size () == 2);
8248946c
YQ
1386
1387 /* Get regcache from ptid3, a new regcache is added to
1388 current_regcache. */
1389 regcache = get_thread_arch_aspace_regcache (ptid3,
1390 target_gdbarch (),
1391 NULL);
1392 SELF_CHECK (regcache != NULL);
1393 SELF_CHECK (regcache->ptid () == ptid3);
e521e87e 1394 SELF_CHECK (regcache_access::current_regcache_size () == 3);
8248946c
YQ
1395
1396 /* Get regcache from ptid2 again, nothing is added to
1397 current_regcache. */
1398 regcache = get_thread_arch_aspace_regcache (ptid2,
1399 target_gdbarch (),
1400 NULL);
1401 SELF_CHECK (regcache != NULL);
1402 SELF_CHECK (regcache->ptid () == ptid2);
e521e87e 1403 SELF_CHECK (regcache_access::current_regcache_size () == 3);
8248946c
YQ
1404
1405 /* Mark ptid2 is changed, so regcache of ptid2 should be removed from
1406 current_regcache. */
1407 registers_changed_ptid (ptid2);
e521e87e 1408 SELF_CHECK (regcache_access::current_regcache_size () == 2);
8248946c
YQ
1409}
1410
1b30aaa5
YQ
1411class target_ops_no_register : public test_target_ops
1412{
1413public:
1414 target_ops_no_register ()
1415 : test_target_ops {}
f6ac5f3d 1416 {}
1b30aaa5
YQ
1417
1418 void reset ()
1419 {
1420 fetch_registers_called = 0;
1421 store_registers_called = 0;
1422 xfer_partial_called = 0;
1423 }
1424
f6ac5f3d
PA
1425 void fetch_registers (regcache *regs, int regno) override;
1426 void store_registers (regcache *regs, int regno) override;
1427
1428 enum target_xfer_status xfer_partial (enum target_object object,
1429 const char *annex, gdb_byte *readbuf,
1430 const gdb_byte *writebuf,
1431 ULONGEST offset, ULONGEST len,
1432 ULONGEST *xfered_len) override;
1433
1b30aaa5
YQ
1434 unsigned int fetch_registers_called = 0;
1435 unsigned int store_registers_called = 0;
1436 unsigned int xfer_partial_called = 0;
1437};
1438
f6ac5f3d
PA
1439void
1440target_ops_no_register::fetch_registers (regcache *regs, int regno)
1b30aaa5 1441{
1b30aaa5
YQ
1442 /* Mark register available. */
1443 regs->raw_supply_zeroed (regno);
f6ac5f3d 1444 this->fetch_registers_called++;
1b30aaa5
YQ
1445}
1446
f6ac5f3d
PA
1447void
1448target_ops_no_register::store_registers (regcache *regs, int regno)
1b30aaa5 1449{
f6ac5f3d 1450 this->store_registers_called++;
1b30aaa5
YQ
1451}
1452
f6ac5f3d
PA
1453enum target_xfer_status
1454target_ops_no_register::xfer_partial (enum target_object object,
1455 const char *annex, gdb_byte *readbuf,
1456 const gdb_byte *writebuf,
1457 ULONGEST offset, ULONGEST len,
1458 ULONGEST *xfered_len)
1b30aaa5 1459{
f6ac5f3d 1460 this->xfer_partial_called++;
1b30aaa5
YQ
1461
1462 *xfered_len = len;
1463 return TARGET_XFER_OK;
1464}
1465
1466class readwrite_regcache : public regcache
1467{
1468public:
1469 readwrite_regcache (struct gdbarch *gdbarch)
796bb026 1470 : regcache (gdbarch, nullptr)
1b30aaa5
YQ
1471 {}
1472};
1473
1474/* Test regcache::cooked_read gets registers from raw registers and
1475 memory instead of target to_{fetch,store}_registers. */
1476
1477static void
1478cooked_read_test (struct gdbarch *gdbarch)
1479{
1480 /* Error out if debugging something, because we're going to push the
1481 test target, which would pop any existing target. */
8b88a78e 1482 if (current_top_target ()->to_stratum >= process_stratum)
1b30aaa5
YQ
1483 error (_("target already pushed"));
1484
1485 /* Create a mock environment. An inferior with a thread, with a
1486 process_stratum target pushed. */
1487
1488 target_ops_no_register mock_target;
1489 ptid_t mock_ptid (1, 1);
1490 inferior mock_inferior (mock_ptid.pid ());
1491 address_space mock_aspace {};
1492 mock_inferior.gdbarch = gdbarch;
1493 mock_inferior.aspace = &mock_aspace;
1494 thread_info mock_thread (&mock_inferior, mock_ptid);
1495
1496 scoped_restore restore_thread_list
1497 = make_scoped_restore (&thread_list, &mock_thread);
1498
1499 /* Add the mock inferior to the inferior list so that look ups by
1500 target+ptid can find it. */
1501 scoped_restore restore_inferior_list
1502 = make_scoped_restore (&inferior_list);
1503 inferior_list = &mock_inferior;
1504
1505 /* Switch to the mock inferior. */
1506 scoped_restore_current_inferior restore_current_inferior;
1507 set_current_inferior (&mock_inferior);
1508
1509 /* Push the process_stratum target so we can mock accessing
1510 registers. */
1511 push_target (&mock_target);
1512
1513 /* Pop it again on exit (return/exception). */
1514 struct on_exit
1515 {
1516 ~on_exit ()
1517 {
1518 pop_all_targets_at_and_above (process_stratum);
1519 }
1520 } pop_targets;
1521
1522 /* Switch to the mock thread. */
1523 scoped_restore restore_inferior_ptid
1524 = make_scoped_restore (&inferior_ptid, mock_ptid);
1525
1526 /* Test that read one raw register from regcache_no_target will go
1527 to the target layer. */
1528 int regnum;
1529
1530 /* Find a raw register which size isn't zero. */
1531 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
1532 {
1533 if (register_size (gdbarch, regnum) != 0)
1534 break;
1535 }
1536
1537 readwrite_regcache readwrite (gdbarch);
1538 gdb::def_vector<gdb_byte> buf (register_size (gdbarch, regnum));
1539
1540 readwrite.raw_read (regnum, buf.data ());
1541
1542 /* raw_read calls target_fetch_registers. */
1543 SELF_CHECK (mock_target.fetch_registers_called > 0);
1544 mock_target.reset ();
1545
1546 /* Mark all raw registers valid, so the following raw registers
1547 accesses won't go to target. */
1548 for (auto i = 0; i < gdbarch_num_regs (gdbarch); i++)
1549 readwrite.raw_update (i);
1550
1551 mock_target.reset ();
1552 /* Then, read all raw and pseudo registers, and don't expect calling
1553 to_{fetch,store}_registers. */
1554 for (int regnum = 0;
1555 regnum < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1556 regnum++)
1557 {
1558 if (register_size (gdbarch, regnum) == 0)
1559 continue;
1560
1561 gdb::def_vector<gdb_byte> buf (register_size (gdbarch, regnum));
1562
1563 SELF_CHECK (REG_VALID == readwrite.cooked_read (regnum, buf.data ()));
1564
dc711524
YQ
1565 SELF_CHECK (mock_target.fetch_registers_called == 0);
1566 SELF_CHECK (mock_target.store_registers_called == 0);
1b30aaa5
YQ
1567
1568 /* Some SPU pseudo registers are got via TARGET_OBJECT_SPU. */
1569 if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
1570 SELF_CHECK (mock_target.xfer_partial_called == 0);
1571
1572 mock_target.reset ();
1573 }
a63f2d2f 1574
215c69dc 1575 readonly_detached_regcache readonly (readwrite);
a63f2d2f
YQ
1576
1577 /* GDB may go to target layer to fetch all registers and memory for
1578 readonly regcache. */
1579 mock_target.reset ();
1580
1581 for (int regnum = 0;
1582 regnum < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1583 regnum++)
1584 {
a63f2d2f
YQ
1585 if (register_size (gdbarch, regnum) == 0)
1586 continue;
1587
1588 gdb::def_vector<gdb_byte> buf (register_size (gdbarch, regnum));
1589 enum register_status status = readonly.cooked_read (regnum,
1590 buf.data ());
1591
1592 if (regnum < gdbarch_num_regs (gdbarch))
1593 {
1594 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1595
1596 if (bfd_arch == bfd_arch_frv || bfd_arch == bfd_arch_h8300
1597 || bfd_arch == bfd_arch_m32c || bfd_arch == bfd_arch_sh
1598 || bfd_arch == bfd_arch_alpha || bfd_arch == bfd_arch_v850
1599 || bfd_arch == bfd_arch_msp430 || bfd_arch == bfd_arch_mep
1600 || bfd_arch == bfd_arch_mips || bfd_arch == bfd_arch_v850_rh850
1601 || bfd_arch == bfd_arch_tic6x || bfd_arch == bfd_arch_mn10300
ea005f31
AB
1602 || bfd_arch == bfd_arch_rl78 || bfd_arch == bfd_arch_score
1603 || bfd_arch == bfd_arch_riscv)
a63f2d2f
YQ
1604 {
1605 /* Raw registers. If raw registers are not in save_reggroup,
1606 their status are unknown. */
1607 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1608 SELF_CHECK (status == REG_VALID);
1609 else
1610 SELF_CHECK (status == REG_UNKNOWN);
1611 }
1612 else
1613 SELF_CHECK (status == REG_VALID);
1614 }
1615 else
1616 {
1617 if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup))
1618 SELF_CHECK (status == REG_VALID);
1619 else
1620 {
1621 /* If pseudo registers are not in save_reggroup, some of
1622 them can be computed from saved raw registers, but some
1623 of them are unknown. */
1624 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1625
1626 if (bfd_arch == bfd_arch_frv
1627 || bfd_arch == bfd_arch_m32c
1628 || bfd_arch == bfd_arch_mep
1629 || bfd_arch == bfd_arch_sh)
1630 SELF_CHECK (status == REG_VALID || status == REG_UNKNOWN);
1631 else if (bfd_arch == bfd_arch_mips
1632 || bfd_arch == bfd_arch_h8300)
1633 SELF_CHECK (status == REG_UNKNOWN);
1634 else
1635 SELF_CHECK (status == REG_VALID);
1636 }
1637 }
1638
1639 SELF_CHECK (mock_target.fetch_registers_called == 0);
1640 SELF_CHECK (mock_target.store_registers_called == 0);
1641 SELF_CHECK (mock_target.xfer_partial_called == 0);
1642
1643 mock_target.reset ();
1644 }
1b30aaa5
YQ
1645}
1646
ec7a5fcb
YQ
1647/* Test regcache::cooked_write by writing some expected contents to
1648 registers, and checking that contents read from registers and the
1649 expected contents are the same. */
1650
1651static void
1652cooked_write_test (struct gdbarch *gdbarch)
1653{
1654 /* Error out if debugging something, because we're going to push the
1655 test target, which would pop any existing target. */
8b88a78e 1656 if (current_top_target ()->to_stratum >= process_stratum)
ec7a5fcb
YQ
1657 error (_("target already pushed"));
1658
1659 /* Create a mock environment. A process_stratum target pushed. */
1660
1661 target_ops_no_register mock_target;
1662
1663 /* Push the process_stratum target so we can mock accessing
1664 registers. */
1665 push_target (&mock_target);
1666
1667 /* Pop it again on exit (return/exception). */
1668 struct on_exit
1669 {
1670 ~on_exit ()
1671 {
1672 pop_all_targets_at_and_above (process_stratum);
1673 }
1674 } pop_targets;
1675
1676 readwrite_regcache readwrite (gdbarch);
1677
1678 const int num_regs = (gdbarch_num_regs (gdbarch)
1679 + gdbarch_num_pseudo_regs (gdbarch));
1680
1681 for (auto regnum = 0; regnum < num_regs; regnum++)
1682 {
1683 if (register_size (gdbarch, regnum) == 0
1684 || gdbarch_cannot_store_register (gdbarch, regnum))
1685 continue;
1686
1687 auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch;
1688
1689 if ((bfd_arch == bfd_arch_sparc
1690 /* SPARC64_CWP_REGNUM, SPARC64_PSTATE_REGNUM,
1691 SPARC64_ASI_REGNUM and SPARC64_CCR_REGNUM are hard to test. */
1692 && gdbarch_ptr_bit (gdbarch) == 64
1693 && (regnum >= gdbarch_num_regs (gdbarch)
1694 && regnum <= gdbarch_num_regs (gdbarch) + 4))
ec7a5fcb
YQ
1695 || (bfd_arch == bfd_arch_spu
1696 /* SPU pseudo registers except SPU_SP_REGNUM are got by
1697 TARGET_OBJECT_SPU. */
1698 && regnum >= gdbarch_num_regs (gdbarch) && regnum != 130))
1699 continue;
1700
1701 std::vector<gdb_byte> expected (register_size (gdbarch, regnum), 0);
1702 std::vector<gdb_byte> buf (register_size (gdbarch, regnum), 0);
1703 const auto type = register_type (gdbarch, regnum);
1704
1705 if (TYPE_CODE (type) == TYPE_CODE_FLT
1706 || TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
1707 {
1708 /* Generate valid float format. */
1709 target_float_from_string (expected.data (), type, "1.25");
1710 }
1711 else if (TYPE_CODE (type) == TYPE_CODE_INT
1712 || TYPE_CODE (type) == TYPE_CODE_ARRAY
1713 || TYPE_CODE (type) == TYPE_CODE_PTR
1714 || TYPE_CODE (type) == TYPE_CODE_UNION
1715 || TYPE_CODE (type) == TYPE_CODE_STRUCT)
1716 {
1717 if (bfd_arch == bfd_arch_ia64
1718 || (regnum >= gdbarch_num_regs (gdbarch)
1719 && (bfd_arch == bfd_arch_xtensa
1720 || bfd_arch == bfd_arch_bfin
1721 || bfd_arch == bfd_arch_m32c
1722 /* m68hc11 pseudo registers are in memory. */
1723 || bfd_arch == bfd_arch_m68hc11
1724 || bfd_arch == bfd_arch_m68hc12
1725 || bfd_arch == bfd_arch_s390))
1726 || (bfd_arch == bfd_arch_frv
1727 /* FRV pseudo registers except iacc0. */
1728 && regnum > gdbarch_num_regs (gdbarch)))
1729 {
1730 /* Skip setting the expected values for some architecture
1731 registers. */
1732 }
1733 else if (bfd_arch == bfd_arch_rl78 && regnum == 40)
1734 {
1735 /* RL78_PC_REGNUM */
1736 for (auto j = 0; j < register_size (gdbarch, regnum) - 1; j++)
1737 expected[j] = j;
1738 }
1739 else
1740 {
1741 for (auto j = 0; j < register_size (gdbarch, regnum); j++)
1742 expected[j] = j;
1743 }
1744 }
1745 else if (TYPE_CODE (type) == TYPE_CODE_FLAGS)
1746 {
1747 /* No idea how to test flags. */
1748 continue;
1749 }
1750 else
1751 {
1752 /* If we don't know how to create the expected value for the
1753 this type, make it fail. */
1754 SELF_CHECK (0);
1755 }
1756
1757 readwrite.cooked_write (regnum, expected.data ());
1758
1759 SELF_CHECK (readwrite.cooked_read (regnum, buf.data ()) == REG_VALID);
1760 SELF_CHECK (expected == buf);
1761 }
1762}
1763
8248946c
YQ
1764} // namespace selftests
1765#endif /* GDB_SELF_TEST */
1766
32178cab
MS
1767void
1768_initialize_regcache (void)
1769{
3e43a32a
MS
1770 regcache_descr_handle
1771 = gdbarch_data_register_post_init (init_regcache_descr);
705152c5 1772
76727919
TT
1773 gdb::observers::target_changed.attach (regcache_observer_target_changed);
1774 gdb::observers::thread_ptid_changed.attach
1775 (regcache::regcache_thread_ptid_changed);
f4c5303c 1776
705152c5 1777 add_com ("flushregs", class_maintenance, reg_flush_command,
1bedd215 1778 _("Force gdb to flush its register cache (maintainer command)"));
39f77062 1779
8248946c 1780#if GDB_SELF_TEST
1526853e 1781 selftests::register_test ("current_regcache", selftests::current_regcache_test);
1b30aaa5
YQ
1782
1783 selftests::register_test_foreach_arch ("regcache::cooked_read_test",
1784 selftests::cooked_read_test);
ec7a5fcb
YQ
1785 selftests::register_test_foreach_arch ("regcache::cooked_write_test",
1786 selftests::cooked_write_test);
8248946c 1787#endif
32178cab 1788}
This page took 1.83886 seconds and 4 git commands to generate.