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