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