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