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