]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/findvar.c
import gdb-1999-07-07 post reformat
[thirdparty/binutils-gdb.git] / gdb / findvar.c
CommitLineData
c906108c
SS
1/* Find a variable's value in memory, for GDB, the GNU debugger.
2 Copyright 1986, 87, 89, 91, 94, 95, 96, 1998
3 Free Software Foundation, Inc.
4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b
JM
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
c906108c
SS
21
22#include "defs.h"
23#include "symtab.h"
24#include "gdbtypes.h"
25#include "frame.h"
26#include "value.h"
27#include "gdbcore.h"
28#include "inferior.h"
29#include "target.h"
30#include "gdb_string.h"
31#include "floatformat.h"
c5aa993b 32#include "symfile.h" /* for overlay functions */
c906108c
SS
33
34/* This is used to indicate that we don't know the format of the floating point
35 number. Typically, this is useful for native ports, where the actual format
36 is irrelevant, since no conversions will be taking place. */
37
38const struct floatformat floatformat_unknown;
39
40/* Registers we shouldn't try to store. */
41#if !defined (CANNOT_STORE_REGISTER)
42#define CANNOT_STORE_REGISTER(regno) 0
43#endif
44
45static void write_register_gen PARAMS ((int, char *));
46
c5aa993b 47static int read_relative_register_raw_bytes_for_frame PARAMS ((int regnum, char *myaddr, struct frame_info * frame));
7a292a7a 48
c906108c
SS
49/* Basic byte-swapping routines. GDB has needed these for a long time...
50 All extract a target-format integer at ADDR which is LEN bytes long. */
51
52#if TARGET_CHAR_BIT != 8 || HOST_CHAR_BIT != 8
53 /* 8 bit characters are a pretty safe assumption these days, so we
54 assume it throughout all these swapping routines. If we had to deal with
55 9 bit characters, we would need to make len be in bits and would have
56 to re-write these routines... */
c5aa993b 57you lose
c906108c
SS
58#endif
59
c5aa993b 60 LONGEST
c906108c
SS
61extract_signed_integer (addr, len)
62 PTR addr;
63 int len;
64{
65 LONGEST retval;
66 unsigned char *p;
c5aa993b 67 unsigned char *startaddr = (unsigned char *) addr;
c906108c
SS
68 unsigned char *endaddr = startaddr + len;
69
70 if (len > (int) sizeof (LONGEST))
71 error ("\
72That operation is not available on integers of more than %d bytes.",
73 sizeof (LONGEST));
74
75 /* Start at the most significant end of the integer, and work towards
76 the least significant. */
77 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
78 {
79 p = startaddr;
80 /* Do the sign extension once at the start. */
c5aa993b 81 retval = ((LONGEST) * p ^ 0x80) - 0x80;
c906108c
SS
82 for (++p; p < endaddr; ++p)
83 retval = (retval << 8) | *p;
84 }
85 else
86 {
87 p = endaddr - 1;
88 /* Do the sign extension once at the start. */
c5aa993b 89 retval = ((LONGEST) * p ^ 0x80) - 0x80;
c906108c
SS
90 for (--p; p >= startaddr; --p)
91 retval = (retval << 8) | *p;
92 }
93 return retval;
94}
95
96ULONGEST
97extract_unsigned_integer (addr, len)
98 PTR addr;
99 int len;
100{
101 ULONGEST retval;
102 unsigned char *p;
c5aa993b 103 unsigned char *startaddr = (unsigned char *) addr;
c906108c
SS
104 unsigned char *endaddr = startaddr + len;
105
106 if (len > (int) sizeof (ULONGEST))
107 error ("\
108That operation is not available on integers of more than %d bytes.",
109 sizeof (ULONGEST));
110
111 /* Start at the most significant end of the integer, and work towards
112 the least significant. */
113 retval = 0;
114 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
115 {
116 for (p = startaddr; p < endaddr; ++p)
117 retval = (retval << 8) | *p;
118 }
119 else
120 {
121 for (p = endaddr - 1; p >= startaddr; --p)
122 retval = (retval << 8) | *p;
123 }
124 return retval;
125}
126
127/* Sometimes a long long unsigned integer can be extracted as a
128 LONGEST value. This is done so that we can print these values
129 better. If this integer can be converted to a LONGEST, this
130 function returns 1 and sets *PVAL. Otherwise it returns 0. */
131
132int
133extract_long_unsigned_integer (addr, orig_len, pval)
134 PTR addr;
135 int orig_len;
136 LONGEST *pval;
137{
138 char *p, *first_addr;
139 int len;
140
141 len = orig_len;
142 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
143 {
144 for (p = (char *) addr;
145 len > (int) sizeof (LONGEST) && p < (char *) addr + orig_len;
146 p++)
147 {
148 if (*p == 0)
149 len--;
150 else
151 break;
152 }
153 first_addr = p;
154 }
155 else
156 {
157 first_addr = (char *) addr;
158 for (p = (char *) addr + orig_len - 1;
159 len > (int) sizeof (LONGEST) && p >= (char *) addr;
160 p--)
161 {
162 if (*p == 0)
163 len--;
164 else
165 break;
166 }
167 }
168
169 if (len <= (int) sizeof (LONGEST))
170 {
171 *pval = (LONGEST) extract_unsigned_integer (first_addr,
172 sizeof (LONGEST));
173 return 1;
174 }
175
176 return 0;
177}
178
179CORE_ADDR
180extract_address (addr, len)
181 PTR addr;
182 int len;
183{
184 /* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure
185 whether we want this to be true eventually. */
c5aa993b 186 return (CORE_ADDR) extract_unsigned_integer (addr, len);
c906108c
SS
187}
188
189void
190store_signed_integer (addr, len, val)
191 PTR addr;
192 int len;
193 LONGEST val;
194{
195 unsigned char *p;
c5aa993b 196 unsigned char *startaddr = (unsigned char *) addr;
c906108c
SS
197 unsigned char *endaddr = startaddr + len;
198
199 /* Start at the least significant end of the integer, and work towards
200 the most significant. */
201 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
202 {
203 for (p = endaddr - 1; p >= startaddr; --p)
204 {
205 *p = val & 0xff;
206 val >>= 8;
207 }
208 }
209 else
210 {
211 for (p = startaddr; p < endaddr; ++p)
212 {
213 *p = val & 0xff;
214 val >>= 8;
215 }
216 }
217}
218
219void
220store_unsigned_integer (addr, len, val)
221 PTR addr;
222 int len;
223 ULONGEST val;
224{
225 unsigned char *p;
c5aa993b 226 unsigned char *startaddr = (unsigned char *) addr;
c906108c
SS
227 unsigned char *endaddr = startaddr + len;
228
229 /* Start at the least significant end of the integer, and work towards
230 the most significant. */
231 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
232 {
233 for (p = endaddr - 1; p >= startaddr; --p)
234 {
235 *p = val & 0xff;
236 val >>= 8;
237 }
238 }
239 else
240 {
241 for (p = startaddr; p < endaddr; ++p)
242 {
243 *p = val & 0xff;
244 val >>= 8;
245 }
246 }
247}
248
249/* Store the literal address "val" into
250 gdb-local memory pointed to by "addr"
251 for "len" bytes. */
252void
253store_address (addr, len, val)
254 PTR addr;
255 int len;
256 LONGEST val;
257{
c906108c
SS
258 store_unsigned_integer (addr, len, val);
259}
260\f
261/* Swap LEN bytes at BUFFER between target and host byte-order. */
262#define SWAP_FLOATING(buffer,len) \
263 do \
264 { \
265 if (TARGET_BYTE_ORDER != HOST_BYTE_ORDER) \
266 { \
267 char tmp; \
268 char *p = (char *)(buffer); \
269 char *q = ((char *)(buffer)) + len - 1; \
270 for (; p < q; p++, q--) \
271 { \
272 tmp = *q; \
273 *q = *p; \
274 *p = tmp; \
275 } \
276 } \
277 } \
278 while (0)
279
280/* Extract a floating-point number from a target-order byte-stream at ADDR.
281 Returns the value as type DOUBLEST.
282
283 If the host and target formats agree, we just copy the raw data into the
284 appropriate type of variable and return, letting the host increase precision
285 as necessary. Otherwise, we call the conversion routine and let it do the
286 dirty work. */
287
288DOUBLEST
289extract_floating (addr, len)
290 PTR addr;
291 int len;
292{
293 DOUBLEST dretval;
294
295 if (len == sizeof (float))
296 {
297 if (HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT)
298 {
299 float retval;
300
301 memcpy (&retval, addr, sizeof (retval));
302 return retval;
303 }
304 else
305 floatformat_to_doublest (TARGET_FLOAT_FORMAT, addr, &dretval);
306 }
307 else if (len == sizeof (double))
308 {
309 if (HOST_DOUBLE_FORMAT == TARGET_DOUBLE_FORMAT)
310 {
311 double retval;
312
313 memcpy (&retval, addr, sizeof (retval));
314 return retval;
315 }
316 else
317 floatformat_to_doublest (TARGET_DOUBLE_FORMAT, addr, &dretval);
318 }
319 else if (len == sizeof (DOUBLEST))
320 {
321 if (HOST_LONG_DOUBLE_FORMAT == TARGET_LONG_DOUBLE_FORMAT)
322 {
323 DOUBLEST retval;
324
325 memcpy (&retval, addr, sizeof (retval));
326 return retval;
327 }
328 else
329 floatformat_to_doublest (TARGET_LONG_DOUBLE_FORMAT, addr, &dretval);
330 }
331 else
332 {
333 error ("Can't deal with a floating point number of %d bytes.", len);
334 }
335
336 return dretval;
337}
338
339void
340store_floating (addr, len, val)
341 PTR addr;
342 int len;
343 DOUBLEST val;
344{
345 if (len == sizeof (float))
346 {
347 if (HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT)
348 {
349 float floatval = val;
350
351 memcpy (addr, &floatval, sizeof (floatval));
352 }
353 else
354 floatformat_from_doublest (TARGET_FLOAT_FORMAT, &val, addr);
355 }
356 else if (len == sizeof (double))
357 {
358 if (HOST_DOUBLE_FORMAT == TARGET_DOUBLE_FORMAT)
359 {
360 double doubleval = val;
361
362 memcpy (addr, &doubleval, sizeof (doubleval));
363 }
364 else
365 floatformat_from_doublest (TARGET_DOUBLE_FORMAT, &val, addr);
366 }
367 else if (len == sizeof (DOUBLEST))
368 {
369 if (HOST_LONG_DOUBLE_FORMAT == TARGET_LONG_DOUBLE_FORMAT)
370 memcpy (addr, &val, sizeof (val));
371 else
372 floatformat_from_doublest (TARGET_LONG_DOUBLE_FORMAT, &val, addr);
373 }
374 else
375 {
376 error ("Can't deal with a floating point number of %d bytes.", len);
377 }
378}
379\f
c906108c
SS
380
381/* Return the address in which frame FRAME's value of register REGNUM
382 has been saved in memory. Or return zero if it has not been saved.
383 If REGNUM specifies the SP, the value we return is actually
384 the SP value, not an address where it was saved. */
385
386CORE_ADDR
387find_saved_register (frame, regnum)
388 struct frame_info *frame;
389 int regnum;
390{
391 register struct frame_info *frame1 = NULL;
392 register CORE_ADDR addr = 0;
393
394 if (frame == NULL) /* No regs saved if want current frame */
395 return 0;
396
397#ifdef HAVE_REGISTER_WINDOWS
398 /* We assume that a register in a register window will only be saved
399 in one place (since the name changes and/or disappears as you go
400 towards inner frames), so we only call get_frame_saved_regs on
401 the current frame. This is directly in contradiction to the
402 usage below, which assumes that registers used in a frame must be
403 saved in a lower (more interior) frame. This change is a result
404 of working on a register window machine; get_frame_saved_regs
405 always returns the registers saved within a frame, within the
406 context (register namespace) of that frame. */
407
408 /* However, note that we don't want this to return anything if
409 nothing is saved (if there's a frame inside of this one). Also,
410 callers to this routine asking for the stack pointer want the
411 stack pointer saved for *this* frame; this is returned from the
412 next frame. */
c5aa993b
JM
413
414 if (REGISTER_IN_WINDOW_P (regnum))
c906108c
SS
415 {
416 frame1 = get_next_frame (frame);
c5aa993b
JM
417 if (!frame1)
418 return 0; /* Registers of this frame are active. */
419
c906108c 420 /* Get the SP from the next frame in; it will be this
c5aa993b 421 current frame. */
c906108c 422 if (regnum != SP_REGNUM)
c5aa993b
JM
423 frame1 = frame;
424
c906108c
SS
425 FRAME_INIT_SAVED_REGS (frame1);
426 return frame1->saved_regs[regnum]; /* ... which might be zero */
427 }
428#endif /* HAVE_REGISTER_WINDOWS */
429
430 /* Note that this next routine assumes that registers used in
431 frame x will be saved only in the frame that x calls and
432 frames interior to it. This is not true on the sparc, but the
433 above macro takes care of it, so we should be all right. */
434 while (1)
435 {
436 QUIT;
437 frame1 = get_prev_frame (frame1);
438 if (frame1 == 0 || frame1 == frame)
439 break;
440 FRAME_INIT_SAVED_REGS (frame1);
441 if (frame1->saved_regs[regnum])
442 addr = frame1->saved_regs[regnum];
443 }
444
445 return addr;
446}
447
448/* Find register number REGNUM relative to FRAME and put its (raw,
449 target format) contents in *RAW_BUFFER. Set *OPTIMIZED if the
450 variable was optimized out (and thus can't be fetched). Set *LVAL
451 to lval_memory, lval_register, or not_lval, depending on whether
452 the value was fetched from memory, from a register, or in a strange
453 and non-modifiable way (e.g. a frame pointer which was calculated
454 rather than fetched). Set *ADDRP to the address, either in memory
455 on as a REGISTER_BYTE offset into the registers array.
456
457 Note that this implementation never sets *LVAL to not_lval. But
458 it can be replaced by defining GET_SAVED_REGISTER and supplying
459 your own.
460
461 The argument RAW_BUFFER must point to aligned memory. */
462
463void
7a292a7a 464default_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval)
c906108c
SS
465 char *raw_buffer;
466 int *optimized;
467 CORE_ADDR *addrp;
468 struct frame_info *frame;
469 int regnum;
470 enum lval_type *lval;
471{
472 CORE_ADDR addr;
473
474 if (!target_has_registers)
475 error ("No registers.");
476
477 /* Normal systems don't optimize out things with register numbers. */
478 if (optimized != NULL)
479 *optimized = 0;
480 addr = find_saved_register (frame, regnum);
481 if (addr != 0)
482 {
483 if (lval != NULL)
484 *lval = lval_memory;
485 if (regnum == SP_REGNUM)
486 {
487 if (raw_buffer != NULL)
488 {
489 /* Put it back in target format. */
c5aa993b 490 store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), (LONGEST) addr);
c906108c
SS
491 }
492 if (addrp != NULL)
493 *addrp = 0;
494 return;
495 }
496 if (raw_buffer != NULL)
497 read_memory (addr, raw_buffer, REGISTER_RAW_SIZE (regnum));
498 }
499 else
500 {
501 if (lval != NULL)
502 *lval = lval_register;
503 addr = REGISTER_BYTE (regnum);
504 if (raw_buffer != NULL)
505 read_register_gen (regnum, raw_buffer);
506 }
507 if (addrp != NULL)
508 *addrp = addr;
509}
7a292a7a
SS
510
511#if !defined (GET_SAVED_REGISTER)
512#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \
513 default_get_saved_register(raw_buffer, optimized, addrp, frame, regnum, lval)
514#endif
515void
516get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval)
517 char *raw_buffer;
518 int *optimized;
519 CORE_ADDR *addrp;
520 struct frame_info *frame;
521 int regnum;
522 enum lval_type *lval;
523{
524 GET_SAVED_REGISTER (raw_buffer, optimized, addrp, frame, regnum, lval);
525}
c906108c
SS
526
527/* Copy the bytes of register REGNUM, relative to the input stack frame,
528 into our memory at MYADDR, in target byte order.
529 The number of bytes copied is REGISTER_RAW_SIZE (REGNUM).
530
531 Returns 1 if could not be read, 0 if could. */
532
7a292a7a 533static int
c906108c
SS
534read_relative_register_raw_bytes_for_frame (regnum, myaddr, frame)
535 int regnum;
536 char *myaddr;
537 struct frame_info *frame;
538{
539 int optim;
540 if (regnum == FP_REGNUM && frame)
541 {
542 /* Put it back in target format. */
c5aa993b
JM
543 store_address (myaddr, REGISTER_RAW_SIZE (FP_REGNUM),
544 (LONGEST) FRAME_FP (frame));
c906108c
SS
545
546 return 0;
547 }
548
549 get_saved_register (myaddr, &optim, (CORE_ADDR *) NULL, frame,
c5aa993b 550 regnum, (enum lval_type *) NULL);
c906108c 551
c5aa993b
JM
552 if (register_valid[regnum] < 0)
553 return 1; /* register value not available */
c906108c
SS
554
555 return optim;
556}
557
558/* Copy the bytes of register REGNUM, relative to the current stack frame,
559 into our memory at MYADDR, in target byte order.
560 The number of bytes copied is REGISTER_RAW_SIZE (REGNUM).
561
562 Returns 1 if could not be read, 0 if could. */
563
564int
565read_relative_register_raw_bytes (regnum, myaddr)
566 int regnum;
567 char *myaddr;
568{
c5aa993b 569 return read_relative_register_raw_bytes_for_frame (regnum, myaddr,
c906108c
SS
570 selected_frame);
571}
572
573/* Return a `value' with the contents of register REGNUM
574 in its virtual format, with the type specified by
575 REGISTER_VIRTUAL_TYPE.
576
577 NOTE: returns NULL if register value is not available.
578 Caller will check return value or die! */
579
580value_ptr
581value_of_register (regnum)
582 int regnum;
583{
584 CORE_ADDR addr;
585 int optim;
586 register value_ptr reg_val;
587 char raw_buffer[MAX_REGISTER_RAW_SIZE];
588 enum lval_type lval;
589
590 get_saved_register (raw_buffer, &optim, &addr,
591 selected_frame, regnum, &lval);
592
593 if (register_valid[regnum] < 0)
c5aa993b 594 return NULL; /* register value not available */
c906108c
SS
595
596 reg_val = allocate_value (REGISTER_VIRTUAL_TYPE (regnum));
597
598 /* Convert raw data to virtual format if necessary. */
599
c906108c
SS
600 if (REGISTER_CONVERTIBLE (regnum))
601 {
602 REGISTER_CONVERT_TO_VIRTUAL (regnum, REGISTER_VIRTUAL_TYPE (regnum),
603 raw_buffer, VALUE_CONTENTS_RAW (reg_val));
604 }
392a587b
JM
605 else if (REGISTER_RAW_SIZE (regnum) == REGISTER_VIRTUAL_SIZE (regnum))
606 memcpy (VALUE_CONTENTS_RAW (reg_val), raw_buffer,
607 REGISTER_RAW_SIZE (regnum));
c906108c 608 else
392a587b
JM
609 fatal ("Register \"%s\" (%d) has conflicting raw (%d) and virtual (%d) size",
610 REGISTER_NAME (regnum), regnum,
611 REGISTER_RAW_SIZE (regnum), REGISTER_VIRTUAL_SIZE (regnum));
c906108c
SS
612 VALUE_LVAL (reg_val) = lval;
613 VALUE_ADDRESS (reg_val) = addr;
614 VALUE_REGNO (reg_val) = regnum;
615 VALUE_OPTIMIZED_OUT (reg_val) = optim;
616 return reg_val;
617}
618\f
619/* Low level examining and depositing of registers.
620
621 The caller is responsible for making
622 sure that the inferior is stopped before calling the fetching routines,
623 or it will get garbage. (a change from GDB version 3, in which
624 the caller got the value from the last stop). */
625
7a292a7a 626/* Contents and state of the registers (in target byte order). */
c906108c 627
7a292a7a 628char *registers;
c906108c 629
7a292a7a
SS
630/* VALID_REGISTER is non-zero if it has been fetched, -1 if the
631 register value was not available. */
632
633signed char *register_valid;
c906108c
SS
634
635/* The thread/process associated with the current set of registers. For now,
636 -1 is special, and means `no current process'. */
637int registers_pid = -1;
638
639/* Indicate that registers may have changed, so invalidate the cache. */
640
641void
642registers_changed ()
643{
644 int i;
645 int numregs = ARCH_NUM_REGS;
646
647 registers_pid = -1;
648
649 /* Force cleanup of any alloca areas if using C alloca instead of
650 a builtin alloca. This particular call is used to clean up
651 areas allocated by low level target code which may build up
652 during lengthy interactions between gdb and the target before
653 gdb gives control to the user (ie watchpoints). */
654 alloca (0);
655
656 for (i = 0; i < numregs; i++)
657 register_valid[i] = 0;
658
659 if (registers_changed_hook)
660 registers_changed_hook ();
661}
662
663/* Indicate that all registers have been fetched, so mark them all valid. */
664void
665registers_fetched ()
666{
667 int i;
668 int numregs = ARCH_NUM_REGS;
669 for (i = 0; i < numregs; i++)
670 register_valid[i] = 1;
671}
672
673/* read_register_bytes and write_register_bytes are generally a *BAD* idea.
674 They are inefficient because they need to check for partial updates, which
675 can only be done by scanning through all of the registers and seeing if the
676 bytes that are being read/written fall inside of an invalid register. [The
c5aa993b
JM
677 main reason this is necessary is that register sizes can vary, so a simple
678 index won't suffice.] It is far better to call read_register_gen if you
c906108c
SS
679 want to get at the raw register contents, as it only takes a regno as an
680 argument, and therefore can't do a partial register update. It would also
681 be good to have a write_register_gen for similar reasons.
682
683 Prior to the recent fixes to check for partial updates, both read and
684 write_register_bytes always checked to see if any registers were stale, and
685 then called target_fetch_registers (-1) to update the whole set. This
686 caused really slowed things down for remote targets. */
687
688/* Copy INLEN bytes of consecutive data from registers
689 starting with the INREGBYTE'th byte of register data
690 into memory at MYADDR. */
691
692void
693read_register_bytes (inregbyte, myaddr, inlen)
694 int inregbyte;
695 char *myaddr;
696 int inlen;
697{
698 int inregend = inregbyte + inlen;
699 int regno;
700
701 if (registers_pid != inferior_pid)
702 {
703 registers_changed ();
704 registers_pid = inferior_pid;
705 }
706
707 /* See if we are trying to read bytes from out-of-date registers. If so,
708 update just those registers. */
709
710 for (regno = 0; regno < NUM_REGS; regno++)
711 {
712 int regstart, regend;
713 int startin, endin;
714
715 if (register_valid[regno])
716 continue;
717
718 if (REGISTER_NAME (regno) == NULL || *REGISTER_NAME (regno) == '\0')
719 continue;
720
721 regstart = REGISTER_BYTE (regno);
722 regend = regstart + REGISTER_RAW_SIZE (regno);
723
724 startin = regstart >= inregbyte && regstart < inregend;
725 endin = regend > inregbyte && regend <= inregend;
726
727 if (!startin && !endin)
728 continue;
729
730 /* We've found an invalid register where at least one byte will be read.
c5aa993b 731 Update it from the target. */
c906108c
SS
732
733 target_fetch_registers (regno);
734
735 if (!register_valid[regno])
736 error ("read_register_bytes: Couldn't update register %d.", regno);
737 }
738
739 if (myaddr != NULL)
740 memcpy (myaddr, &registers[inregbyte], inlen);
741}
742
743/* Read register REGNO into memory at MYADDR, which must be large enough
744 for REGISTER_RAW_BYTES (REGNO). Target byte-order.
745 If the register is known to be the size of a CORE_ADDR or smaller,
746 read_register can be used instead. */
747void
748read_register_gen (regno, myaddr)
749 int regno;
750 char *myaddr;
751{
752 if (registers_pid != inferior_pid)
753 {
754 registers_changed ();
755 registers_pid = inferior_pid;
756 }
757
758 if (!register_valid[regno])
759 target_fetch_registers (regno);
760 memcpy (myaddr, &registers[REGISTER_BYTE (regno)],
761 REGISTER_RAW_SIZE (regno));
762}
763
764/* Write register REGNO at MYADDR to the target. MYADDR points at
765 REGISTER_RAW_BYTES(REGNO), which must be in target byte-order. */
766
767static void
768write_register_gen (regno, myaddr)
769 int regno;
770 char *myaddr;
771{
772 int size;
773
774 /* On the sparc, writing %g0 is a no-op, so we don't even want to change
775 the registers array if something writes to this register. */
776 if (CANNOT_STORE_REGISTER (regno))
777 return;
778
779 if (registers_pid != inferior_pid)
780 {
781 registers_changed ();
782 registers_pid = inferior_pid;
783 }
784
c5aa993b 785 size = REGISTER_RAW_SIZE (regno);
c906108c
SS
786
787 /* If we have a valid copy of the register, and new value == old value,
788 then don't bother doing the actual store. */
789
c5aa993b 790 if (register_valid[regno]
c906108c
SS
791 && memcmp (&registers[REGISTER_BYTE (regno)], myaddr, size) == 0)
792 return;
c5aa993b 793
c906108c
SS
794 target_prepare_to_store ();
795
796 memcpy (&registers[REGISTER_BYTE (regno)], myaddr, size);
797
c5aa993b 798 register_valid[regno] = 1;
c906108c
SS
799
800 target_store_registers (regno);
801}
802
803/* Copy INLEN bytes of consecutive data from memory at MYADDR
804 into registers starting with the MYREGSTART'th byte of register data. */
805
806void
807write_register_bytes (myregstart, myaddr, inlen)
808 int myregstart;
809 char *myaddr;
810 int inlen;
811{
812 int myregend = myregstart + inlen;
813 int regno;
814
815 target_prepare_to_store ();
816
817 /* Scan through the registers updating any that are covered by the range
818 myregstart<=>myregend using write_register_gen, which does nice things
819 like handling threads, and avoiding updates when the new and old contents
820 are the same. */
821
822 for (regno = 0; regno < NUM_REGS; regno++)
823 {
824 int regstart, regend;
825 int startin, endin;
826 char regbuf[MAX_REGISTER_RAW_SIZE];
827
828 regstart = REGISTER_BYTE (regno);
829 regend = regstart + REGISTER_RAW_SIZE (regno);
830
831 startin = regstart >= myregstart && regstart < myregend;
832 endin = regend > myregstart && regend <= myregend;
833
834 if (!startin && !endin)
835 continue; /* Register is completely out of range */
836
837 if (startin && endin) /* register is completely in range */
838 {
839 write_register_gen (regno, myaddr + (regstart - myregstart));
840 continue;
841 }
842
843 /* We may be doing a partial update of an invalid register. Update it
c5aa993b 844 from the target before scribbling on it. */
c906108c
SS
845 read_register_gen (regno, regbuf);
846
847 if (startin)
848 memcpy (registers + regstart,
849 myaddr + regstart - myregstart,
850 myregend - regstart);
851 else /* endin */
852 memcpy (registers + myregstart,
853 myaddr,
854 regend - myregstart);
855 target_store_registers (regno);
856 }
857}
858
859/* Return the raw contents of register REGNO, regarding it as an integer. */
860/* This probably should be returning LONGEST rather than CORE_ADDR. */
861
862CORE_ADDR
863read_register (regno)
864 int regno;
865{
866 if (registers_pid != inferior_pid)
867 {
868 registers_changed ();
869 registers_pid = inferior_pid;
870 }
871
872 if (!register_valid[regno])
873 target_fetch_registers (regno);
874
c5aa993b
JM
875 return (CORE_ADDR) extract_address (&registers[REGISTER_BYTE (regno)],
876 REGISTER_RAW_SIZE (regno));
c906108c
SS
877}
878
879CORE_ADDR
880read_register_pid (regno, pid)
881 int regno, pid;
882{
883 int save_pid;
884 CORE_ADDR retval;
885
886 if (pid == inferior_pid)
887 return read_register (regno);
888
889 save_pid = inferior_pid;
890
891 inferior_pid = pid;
892
893 retval = read_register (regno);
894
895 inferior_pid = save_pid;
896
897 return retval;
898}
899
900/* Store VALUE, into the raw contents of register number REGNO.
901 This should probably write a LONGEST rather than a CORE_ADDR */
902
903void
904write_register (regno, val)
905 int regno;
906 LONGEST val;
907{
908 PTR buf;
909 int size;
910
911 /* On the sparc, writing %g0 is a no-op, so we don't even want to change
912 the registers array if something writes to this register. */
913 if (CANNOT_STORE_REGISTER (regno))
914 return;
915
916 if (registers_pid != inferior_pid)
917 {
918 registers_changed ();
919 registers_pid = inferior_pid;
920 }
921
c5aa993b 922 size = REGISTER_RAW_SIZE (regno);
c906108c 923 buf = alloca (size);
c5aa993b 924 store_signed_integer (buf, size, (LONGEST) val);
c906108c
SS
925
926 /* If we have a valid copy of the register, and new value == old value,
927 then don't bother doing the actual store. */
928
c5aa993b 929 if (register_valid[regno]
c906108c
SS
930 && memcmp (&registers[REGISTER_BYTE (regno)], buf, size) == 0)
931 return;
c5aa993b 932
c906108c
SS
933 target_prepare_to_store ();
934
935 memcpy (&registers[REGISTER_BYTE (regno)], buf, size);
936
c5aa993b 937 register_valid[regno] = 1;
c906108c
SS
938
939 target_store_registers (regno);
940}
941
942void
943write_register_pid (regno, val, pid)
944 int regno;
945 CORE_ADDR val;
946 int pid;
947{
948 int save_pid;
949
950 if (pid == inferior_pid)
951 {
952 write_register (regno, val);
953 return;
954 }
955
956 save_pid = inferior_pid;
957
958 inferior_pid = pid;
959
960 write_register (regno, val);
961
962 inferior_pid = save_pid;
963}
964
965/* Record that register REGNO contains VAL.
966 This is used when the value is obtained from the inferior or core dump,
967 so there is no need to store the value there.
968
969 If VAL is a NULL pointer, then it's probably an unsupported register. We
970 just set it's value to all zeros. We might want to record this fact, and
971 report it to the users of read_register and friends.
c5aa993b 972 */
c906108c
SS
973
974void
975supply_register (regno, val)
976 int regno;
977 char *val;
978{
979#if 1
980 if (registers_pid != inferior_pid)
981 {
982 registers_changed ();
983 registers_pid = inferior_pid;
984 }
985#endif
986
987 register_valid[regno] = 1;
988 if (val)
989 memcpy (&registers[REGISTER_BYTE (regno)], val, REGISTER_RAW_SIZE (regno));
990 else
991 memset (&registers[REGISTER_BYTE (regno)], '\000', REGISTER_RAW_SIZE (regno));
992
993 /* On some architectures, e.g. HPPA, there are a few stray bits in some
994 registers, that the rest of the code would like to ignore. */
995#ifdef CLEAN_UP_REGISTER_VALUE
c5aa993b 996 CLEAN_UP_REGISTER_VALUE (regno, &registers[REGISTER_BYTE (regno)]);
c906108c
SS
997#endif
998}
999
1000
1001/* This routine is getting awfully cluttered with #if's. It's probably
1002 time to turn this into READ_PC and define it in the tm.h file.
0f71a2f6
JM
1003 Ditto for write_pc.
1004
1005 1999-06-08: The following were re-written so that it assumes the
1006 existance of a TARGET_READ_PC et.al. macro. A default generic
1007 version of that macro is made available where needed.
1008
1009 Since the ``TARGET_READ_PC'' et.al. macro is going to be controlled
1010 by the multi-arch framework, it will eventually be possible to
1011 eliminate the intermediate read_pc_pid(). The client would call
1012 TARGET_READ_PC directly. (cagney). */
1013
1014#ifndef TARGET_READ_PC
1015#define TARGET_READ_PC generic_target_read_pc
1016#endif
1017
1018CORE_ADDR
1019generic_target_read_pc (pid)
1020{
1021#ifdef PC_REGNUM
1022 if (PC_REGNUM >= 0)
1023 {
1024 CORE_ADDR pc_val = ADDR_BITS_REMOVE ((CORE_ADDR) read_register_pid (PC_REGNUM, pid));
1025 return pc_val;
1026 }
1027#endif
1028 fatal ("generic_target_read_pc");
1029 return 0;
1030}
c906108c
SS
1031
1032CORE_ADDR
1033read_pc_pid (pid)
1034 int pid;
1035{
c5aa993b
JM
1036 int saved_inferior_pid;
1037 CORE_ADDR pc_val;
c906108c
SS
1038
1039 /* In case pid != inferior_pid. */
1040 saved_inferior_pid = inferior_pid;
1041 inferior_pid = pid;
c5aa993b 1042
c906108c 1043 pc_val = TARGET_READ_PC (pid);
c906108c
SS
1044
1045 inferior_pid = saved_inferior_pid;
1046 return pc_val;
1047}
1048
1049CORE_ADDR
1050read_pc ()
1051{
1052 return read_pc_pid (inferior_pid);
1053}
1054
0f71a2f6
JM
1055#ifndef TARGET_WRITE_PC
1056#define TARGET_WRITE_PC generic_target_write_pc
1057#endif
1058
1059void
1060generic_target_write_pc (pc, pid)
1061 CORE_ADDR pc;
1062 int pid;
1063{
1064#ifdef PC_REGNUM
1065 if (PC_REGNUM >= 0)
1066 write_register_pid (PC_REGNUM, pc, pid);
1067#ifdef NPC_REGNUM
1068 if (NPC_REGNUM >= 0)
1069 write_register_pid (NPC_REGNUM, pc + 4, pid);
1070#ifdef NNPC_REGNUM
1071 if (NNPC_REGNUM >= 0)
1072 write_register_pid (NNPC_REGNUM, pc + 8, pid);
1073#endif
1074#endif
1075#else
1076 fatal ("generic_target_write_pc");
1077#endif
1078}
1079
c906108c
SS
1080void
1081write_pc_pid (pc, pid)
1082 CORE_ADDR pc;
1083 int pid;
1084{
c5aa993b 1085 int saved_inferior_pid;
c906108c
SS
1086
1087 /* In case pid != inferior_pid. */
1088 saved_inferior_pid = inferior_pid;
1089 inferior_pid = pid;
c5aa993b 1090
c906108c 1091 TARGET_WRITE_PC (pc, pid);
c906108c
SS
1092
1093 inferior_pid = saved_inferior_pid;
1094}
1095
1096void
1097write_pc (pc)
1098 CORE_ADDR pc;
1099{
1100 write_pc_pid (pc, inferior_pid);
1101}
1102
1103/* Cope with strage ways of getting to the stack and frame pointers */
1104
0f71a2f6
JM
1105#ifndef TARGET_READ_SP
1106#define TARGET_READ_SP generic_target_read_sp
1107#endif
1108
1109CORE_ADDR
1110generic_target_read_sp ()
1111{
1112#ifdef SP_REGNUM
1113 if (SP_REGNUM >= 0)
1114 return read_register (SP_REGNUM);
1115#endif
1116 fatal ("generic_target_read_sp");
1117}
1118
c906108c
SS
1119CORE_ADDR
1120read_sp ()
1121{
c906108c 1122 return TARGET_READ_SP ();
0f71a2f6
JM
1123}
1124
1125#ifndef TARGET_WRITE_SP
1126#define TARGET_WRITE_SP generic_target_write_sp
1127#endif
1128
1129void
1130generic_target_write_sp (val)
1131 CORE_ADDR val;
1132{
1133#ifdef SP_REGNUM
1134 if (SP_REGNUM >= 0)
1135 {
1136 write_register (SP_REGNUM, val);
1137 return;
1138 }
c906108c 1139#endif
0f71a2f6 1140 fatal ("generic_target_write_sp");
c906108c
SS
1141}
1142
1143void
1144write_sp (val)
1145 CORE_ADDR val;
1146{
c906108c 1147 TARGET_WRITE_SP (val);
0f71a2f6
JM
1148}
1149
1150#ifndef TARGET_READ_FP
1151#define TARGET_READ_FP generic_target_read_fp
c906108c 1152#endif
0f71a2f6
JM
1153
1154CORE_ADDR
1155generic_target_read_fp ()
1156{
1157#ifdef FP_REGNUM
1158 if (FP_REGNUM >= 0)
1159 return read_register (FP_REGNUM);
1160#endif
1161 fatal ("generic_target_read_fp");
c906108c
SS
1162}
1163
1164CORE_ADDR
1165read_fp ()
1166{
c906108c 1167 return TARGET_READ_FP ();
0f71a2f6
JM
1168}
1169
1170#ifndef TARGET_WRITE_FP
1171#define TARGET_WRITE_FP generic_target_write_fp
1172#endif
1173
1174void
1175generic_target_write_fp (val)
1176 CORE_ADDR val;
1177{
1178#ifdef FP_REGNUM
1179 if (FP_REGNUM >= 0)
1180 {
1181 write_register (FP_REGNUM, val);
1182 return;
1183 }
c906108c 1184#endif
0f71a2f6 1185 fatal ("generic_target_write_fp");
c906108c
SS
1186}
1187
1188void
1189write_fp (val)
1190 CORE_ADDR val;
1191{
c906108c 1192 TARGET_WRITE_FP (val);
c906108c
SS
1193}
1194\f
1195/* Will calling read_var_value or locate_var_value on SYM end
1196 up caring what frame it is being evaluated relative to? SYM must
1197 be non-NULL. */
1198int
1199symbol_read_needs_frame (sym)
1200 struct symbol *sym;
1201{
1202 switch (SYMBOL_CLASS (sym))
1203 {
1204 /* All cases listed explicitly so that gcc -Wall will detect it if
c5aa993b 1205 we failed to consider one. */
c906108c
SS
1206 case LOC_REGISTER:
1207 case LOC_ARG:
1208 case LOC_REF_ARG:
1209 case LOC_REGPARM:
1210 case LOC_REGPARM_ADDR:
1211 case LOC_LOCAL:
1212 case LOC_LOCAL_ARG:
1213 case LOC_BASEREG:
1214 case LOC_BASEREG_ARG:
1215 case LOC_THREAD_LOCAL_STATIC:
1216 return 1;
1217
1218 case LOC_UNDEF:
1219 case LOC_CONST:
1220 case LOC_STATIC:
1221 case LOC_INDIRECT:
1222 case LOC_TYPEDEF:
1223
1224 case LOC_LABEL:
1225 /* Getting the address of a label can be done independently of the block,
c5aa993b
JM
1226 even if some *uses* of that address wouldn't work so well without
1227 the right frame. */
c906108c
SS
1228
1229 case LOC_BLOCK:
1230 case LOC_CONST_BYTES:
1231 case LOC_UNRESOLVED:
1232 case LOC_OPTIMIZED_OUT:
1233 return 0;
1234 }
1235 return 1;
1236}
1237
1238/* Given a struct symbol for a variable,
1239 and a stack frame id, read the value of the variable
1240 and return a (pointer to a) struct value containing the value.
1241 If the variable cannot be found, return a zero pointer.
1242 If FRAME is NULL, use the selected_frame. */
1243
1244value_ptr
1245read_var_value (var, frame)
1246 register struct symbol *var;
1247 struct frame_info *frame;
1248{
1249 register value_ptr v;
1250 struct type *type = SYMBOL_TYPE (var);
1251 CORE_ADDR addr;
1252 register int len;
1253
1254 v = allocate_value (type);
1255 VALUE_LVAL (v) = lval_memory; /* The most likely possibility. */
1256 VALUE_BFD_SECTION (v) = SYMBOL_BFD_SECTION (var);
1257
1258 len = TYPE_LENGTH (type);
1259
c5aa993b
JM
1260 if (frame == NULL)
1261 frame = selected_frame;
c906108c
SS
1262
1263 switch (SYMBOL_CLASS (var))
1264 {
1265 case LOC_CONST:
1266 /* Put the constant back in target format. */
1267 store_signed_integer (VALUE_CONTENTS_RAW (v), len,
1268 (LONGEST) SYMBOL_VALUE (var));
1269 VALUE_LVAL (v) = not_lval;
1270 return v;
1271
1272 case LOC_LABEL:
1273 /* Put the constant back in target format. */
1274 if (overlay_debugging)
c5aa993b
JM
1275 store_address (VALUE_CONTENTS_RAW (v), len,
1276 (LONGEST) symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
1277 SYMBOL_BFD_SECTION (var)));
c906108c
SS
1278 else
1279 store_address (VALUE_CONTENTS_RAW (v), len,
c5aa993b 1280 (LONGEST) SYMBOL_VALUE_ADDRESS (var));
c906108c
SS
1281 VALUE_LVAL (v) = not_lval;
1282 return v;
1283
1284 case LOC_CONST_BYTES:
1285 {
1286 char *bytes_addr;
1287 bytes_addr = SYMBOL_VALUE_BYTES (var);
1288 memcpy (VALUE_CONTENTS_RAW (v), bytes_addr, len);
1289 VALUE_LVAL (v) = not_lval;
1290 return v;
1291 }
1292
1293 case LOC_STATIC:
1294 if (overlay_debugging)
1295 addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
1296 SYMBOL_BFD_SECTION (var));
1297 else
1298 addr = SYMBOL_VALUE_ADDRESS (var);
1299 break;
1300
1301 case LOC_INDIRECT:
1302 /* The import slot does not have a real address in it from the
1303 dynamic loader (dld.sl on HP-UX), if the target hasn't begun
c5aa993b 1304 execution yet, so check for that. */
c906108c 1305 if (!target_has_execution)
c5aa993b 1306 error ("\
c906108c
SS
1307Attempt to access variable defined in different shared object or load module when\n\
1308addresses have not been bound by the dynamic loader. Try again when executable is running.");
c5aa993b 1309
c906108c
SS
1310 addr = SYMBOL_VALUE_ADDRESS (var);
1311 addr = read_memory_unsigned_integer
1312 (addr, TARGET_PTR_BIT / TARGET_CHAR_BIT);
1313 break;
1314
1315 case LOC_ARG:
1316 if (frame == NULL)
1317 return 0;
1318 addr = FRAME_ARGS_ADDRESS (frame);
1319 if (!addr)
1320 return 0;
1321 addr += SYMBOL_VALUE (var);
1322 break;
1323
1324 case LOC_REF_ARG:
1325 if (frame == NULL)
1326 return 0;
1327 addr = FRAME_ARGS_ADDRESS (frame);
1328 if (!addr)
1329 return 0;
1330 addr += SYMBOL_VALUE (var);
1331 addr = read_memory_unsigned_integer
1332 (addr, TARGET_PTR_BIT / TARGET_CHAR_BIT);
1333 break;
1334
1335 case LOC_LOCAL:
1336 case LOC_LOCAL_ARG:
1337 if (frame == NULL)
1338 return 0;
1339 addr = FRAME_LOCALS_ADDRESS (frame);
1340 addr += SYMBOL_VALUE (var);
1341 break;
1342
1343 case LOC_BASEREG:
1344 case LOC_BASEREG_ARG:
1345 {
1346 char buf[MAX_REGISTER_RAW_SIZE];
1347 get_saved_register (buf, NULL, NULL, frame, SYMBOL_BASEREG (var),
1348 NULL);
1349 addr = extract_address (buf, REGISTER_RAW_SIZE (SYMBOL_BASEREG (var)));
1350 addr += SYMBOL_VALUE (var);
1351 break;
1352 }
c5aa993b 1353
c906108c
SS
1354 case LOC_THREAD_LOCAL_STATIC:
1355 {
c5aa993b
JM
1356 char buf[MAX_REGISTER_RAW_SIZE];
1357
1358 get_saved_register (buf, NULL, NULL, frame, SYMBOL_BASEREG (var),
c906108c 1359 NULL);
c5aa993b
JM
1360 addr = extract_address (buf, REGISTER_RAW_SIZE (SYMBOL_BASEREG (var)));
1361 addr += SYMBOL_VALUE (var);
1362 break;
c906108c 1363 }
c5aa993b 1364
c906108c
SS
1365 case LOC_TYPEDEF:
1366 error ("Cannot look up value of a typedef");
1367 break;
1368
1369 case LOC_BLOCK:
1370 if (overlay_debugging)
c5aa993b 1371 VALUE_ADDRESS (v) = symbol_overlayed_address
c906108c
SS
1372 (BLOCK_START (SYMBOL_BLOCK_VALUE (var)), SYMBOL_BFD_SECTION (var));
1373 else
1374 VALUE_ADDRESS (v) = BLOCK_START (SYMBOL_BLOCK_VALUE (var));
1375 return v;
1376
1377 case LOC_REGISTER:
1378 case LOC_REGPARM:
1379 case LOC_REGPARM_ADDR:
1380 {
1381 struct block *b;
1382 int regno = SYMBOL_VALUE (var);
1383 value_ptr regval;
1384
1385 if (frame == NULL)
1386 return 0;
1387 b = get_frame_block (frame);
1388
1389 if (SYMBOL_CLASS (var) == LOC_REGPARM_ADDR)
1390 {
1391 regval = value_from_register (lookup_pointer_type (type),
c5aa993b 1392 regno,
c906108c
SS
1393 frame);
1394
1395 if (regval == NULL)
1396 error ("Value of register variable not available.");
1397
c5aa993b 1398 addr = value_as_pointer (regval);
c906108c
SS
1399 VALUE_LVAL (v) = lval_memory;
1400 }
1401 else
1402 {
1403 regval = value_from_register (type, regno, frame);
1404
1405 if (regval == NULL)
1406 error ("Value of register variable not available.");
1407 return regval;
1408 }
1409 }
1410 break;
1411
1412 case LOC_UNRESOLVED:
1413 {
1414 struct minimal_symbol *msym;
1415
1416 msym = lookup_minimal_symbol (SYMBOL_NAME (var), NULL, NULL);
1417 if (msym == NULL)
1418 return 0;
1419 if (overlay_debugging)
1420 addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (msym),
1421 SYMBOL_BFD_SECTION (msym));
1422 else
1423 addr = SYMBOL_VALUE_ADDRESS (msym);
1424 }
1425 break;
1426
1427 case LOC_OPTIMIZED_OUT:
1428 VALUE_LVAL (v) = not_lval;
1429 VALUE_OPTIMIZED_OUT (v) = 1;
1430 return v;
1431
1432 default:
1433 error ("Cannot look up value of a botched symbol.");
1434 break;
1435 }
1436
1437 VALUE_ADDRESS (v) = addr;
1438 VALUE_LAZY (v) = 1;
1439 return v;
1440}
1441
1442/* Return a value of type TYPE, stored in register REGNUM, in frame
1443 FRAME.
1444
1445 NOTE: returns NULL if register value is not available.
1446 Caller will check return value or die! */
1447
1448value_ptr
1449value_from_register (type, regnum, frame)
1450 struct type *type;
1451 int regnum;
1452 struct frame_info *frame;
1453{
c5aa993b 1454 char raw_buffer[MAX_REGISTER_RAW_SIZE];
c906108c
SS
1455 CORE_ADDR addr;
1456 int optim;
1457 value_ptr v = allocate_value (type);
1458 char *value_bytes = 0;
1459 int value_bytes_copied = 0;
1460 int num_storage_locs;
1461 enum lval_type lval;
1462 int len;
1463
1464 CHECK_TYPEDEF (type);
1465 len = TYPE_LENGTH (type);
1466
1467 VALUE_REGNO (v) = regnum;
1468
1469 num_storage_locs = (len > REGISTER_VIRTUAL_SIZE (regnum) ?
1470 ((len - 1) / REGISTER_RAW_SIZE (regnum)) + 1 :
1471 1);
1472
1473 if (num_storage_locs > 1
1474#ifdef GDB_TARGET_IS_H8500
1475 || TYPE_CODE (type) == TYPE_CODE_PTR
1476#endif
c5aa993b 1477 )
c906108c
SS
1478 {
1479 /* Value spread across multiple storage locations. */
c5aa993b 1480
c906108c
SS
1481 int local_regnum;
1482 int mem_stor = 0, reg_stor = 0;
1483 int mem_tracking = 1;
1484 CORE_ADDR last_addr = 0;
1485 CORE_ADDR first_addr = 0;
1486
1487 value_bytes = (char *) alloca (len + MAX_REGISTER_RAW_SIZE);
1488
1489 /* Copy all of the data out, whereever it may be. */
1490
1491#ifdef GDB_TARGET_IS_H8500
1492/* This piece of hideosity is required because the H8500 treats registers
1493 differently depending upon whether they are used as pointers or not. As a
1494 pointer, a register needs to have a page register tacked onto the front.
1495 An alternate way to do this would be to have gcc output different register
1496 numbers for the pointer & non-pointer form of the register. But, it
1497 doesn't, so we're stuck with this. */
1498
1499 if (TYPE_CODE (type) == TYPE_CODE_PTR
1500 && len > 2)
1501 {
1502 int page_regnum;
1503
1504 switch (regnum)
1505 {
c5aa993b
JM
1506 case R0_REGNUM:
1507 case R1_REGNUM:
1508 case R2_REGNUM:
1509 case R3_REGNUM:
c906108c
SS
1510 page_regnum = SEG_D_REGNUM;
1511 break;
c5aa993b
JM
1512 case R4_REGNUM:
1513 case R5_REGNUM:
c906108c
SS
1514 page_regnum = SEG_E_REGNUM;
1515 break;
c5aa993b
JM
1516 case R6_REGNUM:
1517 case R7_REGNUM:
c906108c
SS
1518 page_regnum = SEG_T_REGNUM;
1519 break;
1520 }
1521
1522 value_bytes[0] = 0;
1523 get_saved_register (value_bytes + 1,
1524 &optim,
1525 &addr,
1526 frame,
1527 page_regnum,
1528 &lval);
1529
1530 if (register_valid[page_regnum] == -1)
1531 return NULL; /* register value not available */
1532
1533 if (lval == lval_register)
1534 reg_stor++;
1535 else
1536 mem_stor++;
1537 first_addr = addr;
1538 last_addr = addr;
1539
1540 get_saved_register (value_bytes + 2,
1541 &optim,
1542 &addr,
1543 frame,
1544 regnum,
1545 &lval);
1546
1547 if (register_valid[regnum] == -1)
1548 return NULL; /* register value not available */
1549
1550 if (lval == lval_register)
1551 reg_stor++;
1552 else
1553 {
1554 mem_stor++;
1555 mem_tracking = mem_tracking && (addr == last_addr);
1556 }
1557 last_addr = addr;
1558 }
1559 else
c5aa993b 1560#endif /* GDB_TARGET_IS_H8500 */
c906108c
SS
1561 for (local_regnum = regnum;
1562 value_bytes_copied < len;
1563 (value_bytes_copied += REGISTER_RAW_SIZE (local_regnum),
1564 ++local_regnum))
1565 {
1566 get_saved_register (value_bytes + value_bytes_copied,
1567 &optim,
1568 &addr,
1569 frame,
1570 local_regnum,
1571 &lval);
1572
c5aa993b
JM
1573 if (register_valid[local_regnum] == -1)
1574 return NULL; /* register value not available */
c906108c
SS
1575
1576 if (regnum == local_regnum)
1577 first_addr = addr;
1578 if (lval == lval_register)
1579 reg_stor++;
1580 else
1581 {
1582 mem_stor++;
c5aa993b 1583
c906108c
SS
1584 mem_tracking =
1585 (mem_tracking
1586 && (regnum == local_regnum
1587 || addr == last_addr));
1588 }
1589 last_addr = addr;
1590 }
1591
1592 if ((reg_stor && mem_stor)
1593 || (mem_stor && !mem_tracking))
1594 /* Mixed storage; all of the hassle we just went through was
1595 for some good purpose. */
1596 {
1597 VALUE_LVAL (v) = lval_reg_frame_relative;
1598 VALUE_FRAME (v) = FRAME_FP (frame);
1599 VALUE_FRAME_REGNUM (v) = regnum;
1600 }
1601 else if (mem_stor)
1602 {
1603 VALUE_LVAL (v) = lval_memory;
1604 VALUE_ADDRESS (v) = first_addr;
1605 }
1606 else if (reg_stor)
1607 {
1608 VALUE_LVAL (v) = lval_register;
1609 VALUE_ADDRESS (v) = first_addr;
1610 }
1611 else
1612 fatal ("value_from_register: Value not stored anywhere!");
1613
1614 VALUE_OPTIMIZED_OUT (v) = optim;
1615
1616 /* Any structure stored in more than one register will always be
c5aa993b
JM
1617 an integral number of registers. Otherwise, you'd need to do
1618 some fiddling with the last register copied here for little
1619 endian machines. */
c906108c
SS
1620
1621 /* Copy into the contents section of the value. */
1622 memcpy (VALUE_CONTENTS_RAW (v), value_bytes, len);
1623
1624 /* Finally do any conversion necessary when extracting this
1625 type from more than one register. */
1626#ifdef REGISTER_CONVERT_TO_TYPE
c5aa993b 1627 REGISTER_CONVERT_TO_TYPE (regnum, type, VALUE_CONTENTS_RAW (v));
c906108c
SS
1628#endif
1629 return v;
1630 }
1631
1632 /* Data is completely contained within a single register. Locate the
1633 register's contents in a real register or in core;
1634 read the data in raw format. */
1635
1636 get_saved_register (raw_buffer, &optim, &addr, frame, regnum, &lval);
1637
1638 if (register_valid[regnum] == -1)
c5aa993b 1639 return NULL; /* register value not available */
c906108c
SS
1640
1641 VALUE_OPTIMIZED_OUT (v) = optim;
1642 VALUE_LVAL (v) = lval;
1643 VALUE_ADDRESS (v) = addr;
1644
1645 /* Convert raw data to virtual format if necessary. */
c5aa993b 1646
c906108c
SS
1647 if (REGISTER_CONVERTIBLE (regnum))
1648 {
1649 REGISTER_CONVERT_TO_VIRTUAL (regnum, type,
1650 raw_buffer, VALUE_CONTENTS_RAW (v));
1651 }
1652 else
c906108c
SS
1653 {
1654 /* Raw and virtual formats are the same for this register. */
1655
1656 if (TARGET_BYTE_ORDER == BIG_ENDIAN && len < REGISTER_RAW_SIZE (regnum))
1657 {
c5aa993b 1658 /* Big-endian, and we want less than full size. */
c906108c
SS
1659 VALUE_OFFSET (v) = REGISTER_RAW_SIZE (regnum) - len;
1660 }
1661
1662 memcpy (VALUE_CONTENTS_RAW (v), raw_buffer + VALUE_OFFSET (v), len);
1663 }
c5aa993b 1664
c906108c
SS
1665 return v;
1666}
1667\f
1668/* Given a struct symbol for a variable or function,
1669 and a stack frame id,
1670 return a (pointer to a) struct value containing the properly typed
1671 address. */
1672
1673value_ptr
1674locate_var_value (var, frame)
1675 register struct symbol *var;
1676 struct frame_info *frame;
1677{
1678 CORE_ADDR addr = 0;
1679 struct type *type = SYMBOL_TYPE (var);
1680 value_ptr lazy_value;
1681
1682 /* Evaluate it first; if the result is a memory address, we're fine.
1683 Lazy evaluation pays off here. */
1684
1685 lazy_value = read_var_value (var, frame);
1686 if (lazy_value == 0)
1687 error ("Address of \"%s\" is unknown.", SYMBOL_SOURCE_NAME (var));
1688
1689 if (VALUE_LAZY (lazy_value)
1690 || TYPE_CODE (type) == TYPE_CODE_FUNC)
1691 {
1692 value_ptr val;
1693
1694 addr = VALUE_ADDRESS (lazy_value);
c5aa993b 1695 val = value_from_longest (lookup_pointer_type (type), (LONGEST) addr);
c906108c
SS
1696 VALUE_BFD_SECTION (val) = VALUE_BFD_SECTION (lazy_value);
1697 return val;
1698 }
1699
1700 /* Not a memory address; check what the problem was. */
c5aa993b 1701 switch (VALUE_LVAL (lazy_value))
c906108c
SS
1702 {
1703 case lval_register:
1704 case lval_reg_frame_relative:
1705 error ("Address requested for identifier \"%s\" which is in a register.",
1706 SYMBOL_SOURCE_NAME (var));
1707 break;
1708
1709 default:
1710 error ("Can't take address of \"%s\" which isn't an lvalue.",
1711 SYMBOL_SOURCE_NAME (var));
1712 break;
1713 }
c5aa993b 1714 return 0; /* For lint -- never reached */
c906108c 1715}
7a292a7a 1716\f
c5aa993b 1717
7a292a7a
SS
1718static void build_findvar PARAMS ((void));
1719static void
1720build_findvar ()
1721{
1722 /* We allocate some extra slop since we do a lot of memcpy's around
1723 `registers', and failing-soft is better than failing hard. */
1724 int sizeof_registers = REGISTER_BYTES + /* SLOP */ 256;
1725 int sizeof_register_valid = NUM_REGS * sizeof (*register_valid);
1726 registers = xmalloc (sizeof_registers);
1727 memset (registers, 0, sizeof_registers);
1728 register_valid = xmalloc (sizeof_register_valid);
1729 memset (register_valid, 0, sizeof_register_valid);
1730}
1731
1732void _initialize_findvar PARAMS ((void));
1733void
1734_initialize_findvar ()
1735{
1736 build_findvar ();
0f71a2f6
JM
1737
1738 register_gdbarch_swap (&registers, sizeof (registers), NULL);
1739 register_gdbarch_swap (&register_valid, sizeof (register_valid), NULL);
1740 register_gdbarch_swap (NULL, 0, build_findvar);
7a292a7a 1741}