* Makefile.in (c-exp.tab.o): Remove notice about shift/reduce conflicts
[deliverable/binutils-gdb.git] / gdb / findvar.c
1 /* Find a variable's value in memory, for GDB, the GNU debugger.
2 Copyright 1986, 1987, 1989, 1991 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20 #include "defs.h"
21 #include "symtab.h"
22 #include "gdbtypes.h"
23 #include "frame.h"
24 #include "value.h"
25 #include "gdbcore.h"
26 #include "inferior.h"
27 #include "target.h"
28
29 /* Basic byte-swapping routines. GDB has needed these for a long time...
30 All extract a target-format integer at ADDR which is LEN bytes long. */
31
32 #if TARGET_CHAR_BIT != 8 || HOST_CHAR_BIT != 8
33 /* 8 bit characters are a pretty safe assumption these days, so we
34 assume it throughout all these swapping routines. If we had to deal with
35 9 bit characters, we would need to make len be in bits and would have
36 to re-write these routines... */
37 you lose
38 #endif
39
40 LONGEST
41 extract_signed_integer (addr, len)
42 PTR addr;
43 int len;
44 {
45 LONGEST retval;
46 unsigned char *p;
47 unsigned char *startaddr = (unsigned char *)addr;
48 unsigned char *endaddr = startaddr + len;
49
50 if (len > sizeof (LONGEST))
51 error ("\
52 That operation is not available on integers of more than %d bytes.",
53 sizeof (LONGEST));
54
55 /* Start at the most significant end of the integer, and work towards
56 the least significant. */
57 #if TARGET_BYTE_ORDER == BIG_ENDIAN
58 p = startaddr;
59 #else
60 p = endaddr - 1;
61 #endif
62 /* Do the sign extension once at the start. */
63 retval = ((LONGEST)*p ^ 0x80) - 0x80;
64 #if TARGET_BYTE_ORDER == BIG_ENDIAN
65 for (++p; p < endaddr; ++p)
66 #else
67 for (--p; p >= startaddr; --p)
68 #endif
69 {
70 retval = (retval << 8) | *p;
71 }
72 return retval;
73 }
74
75 unsigned LONGEST
76 extract_unsigned_integer (addr, len)
77 PTR addr;
78 int len;
79 {
80 unsigned LONGEST retval;
81 unsigned char *p;
82 unsigned char *startaddr = (unsigned char *)addr;
83 unsigned char *endaddr = startaddr + len;
84
85 if (len > sizeof (unsigned LONGEST))
86 error ("\
87 That operation is not available on integers of more than %d bytes.",
88 sizeof (unsigned LONGEST));
89
90 /* Start at the most significant end of the integer, and work towards
91 the least significant. */
92 retval = 0;
93 #if TARGET_BYTE_ORDER == BIG_ENDIAN
94 for (p = startaddr; p < endaddr; ++p)
95 #else
96 for (p = endaddr - 1; p >= startaddr; --p)
97 #endif
98 {
99 retval = (retval << 8) | *p;
100 }
101 return retval;
102 }
103
104 CORE_ADDR
105 extract_address (addr, len)
106 PTR addr;
107 int len;
108 {
109 /* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure
110 whether we want this to be true eventually. */
111 return extract_unsigned_integer (addr, len);
112 }
113
114 void
115 store_signed_integer (addr, len, val)
116 PTR addr;
117 int len;
118 LONGEST val;
119 {
120 unsigned char *p;
121 unsigned char *startaddr = (unsigned char *)addr;
122 unsigned char *endaddr = startaddr + len;
123
124 /* Start at the least significant end of the integer, and work towards
125 the most significant. */
126 #if TARGET_BYTE_ORDER == BIG_ENDIAN
127 for (p = endaddr - 1; p >= startaddr; --p)
128 #else
129 for (p = startaddr; p < endaddr; ++p)
130 #endif
131 {
132 *p = val & 0xff;
133 val >>= 8;
134 }
135 }
136
137 void
138 store_unsigned_integer (addr, len, val)
139 PTR addr;
140 int len;
141 unsigned LONGEST val;
142 {
143 unsigned char *p;
144 unsigned char *startaddr = (unsigned char *)addr;
145 unsigned char *endaddr = startaddr + len;
146
147 /* Start at the least significant end of the integer, and work towards
148 the most significant. */
149 #if TARGET_BYTE_ORDER == BIG_ENDIAN
150 for (p = endaddr - 1; p >= startaddr; --p)
151 #else
152 for (p = startaddr; p < endaddr; ++p)
153 #endif
154 {
155 *p = val & 0xff;
156 val >>= 8;
157 }
158 }
159
160 void
161 store_address (addr, len, val)
162 PTR addr;
163 int len;
164 CORE_ADDR val;
165 {
166 /* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure
167 whether we want this to be true eventually. */
168 store_unsigned_integer (addr, len, (LONGEST)val);
169 }
170 \f
171 #if !defined (GET_SAVED_REGISTER)
172
173 /* Return the address in which frame FRAME's value of register REGNUM
174 has been saved in memory. Or return zero if it has not been saved.
175 If REGNUM specifies the SP, the value we return is actually
176 the SP value, not an address where it was saved. */
177
178 CORE_ADDR
179 find_saved_register (frame, regnum)
180 FRAME frame;
181 int regnum;
182 {
183 struct frame_info *fi;
184 struct frame_saved_regs saved_regs;
185
186 register FRAME frame1 = 0;
187 register CORE_ADDR addr = 0;
188
189 if (frame == 0) /* No regs saved if want current frame */
190 return 0;
191
192 #ifdef HAVE_REGISTER_WINDOWS
193 /* We assume that a register in a register window will only be saved
194 in one place (since the name changes and/or disappears as you go
195 towards inner frames), so we only call get_frame_saved_regs on
196 the current frame. This is directly in contradiction to the
197 usage below, which assumes that registers used in a frame must be
198 saved in a lower (more interior) frame. This change is a result
199 of working on a register window machine; get_frame_saved_regs
200 always returns the registers saved within a frame, within the
201 context (register namespace) of that frame. */
202
203 /* However, note that we don't want this to return anything if
204 nothing is saved (if there's a frame inside of this one). Also,
205 callers to this routine asking for the stack pointer want the
206 stack pointer saved for *this* frame; this is returned from the
207 next frame. */
208
209
210 if (REGISTER_IN_WINDOW_P(regnum))
211 {
212 frame1 = get_next_frame (frame);
213 if (!frame1) return 0; /* Registers of this frame are
214 active. */
215
216 /* Get the SP from the next frame in; it will be this
217 current frame. */
218 if (regnum != SP_REGNUM)
219 frame1 = frame;
220
221 fi = get_frame_info (frame1);
222 get_frame_saved_regs (fi, &saved_regs);
223 return saved_regs.regs[regnum]; /* ... which might be zero */
224 }
225 #endif /* HAVE_REGISTER_WINDOWS */
226
227 /* Note that this next routine assumes that registers used in
228 frame x will be saved only in the frame that x calls and
229 frames interior to it. This is not true on the sparc, but the
230 above macro takes care of it, so we should be all right. */
231 while (1)
232 {
233 QUIT;
234 frame1 = get_prev_frame (frame1);
235 if (frame1 == 0 || frame1 == frame)
236 break;
237 fi = get_frame_info (frame1);
238 get_frame_saved_regs (fi, &saved_regs);
239 if (saved_regs.regs[regnum])
240 addr = saved_regs.regs[regnum];
241 }
242
243 return addr;
244 }
245
246 /* Find register number REGNUM relative to FRAME and put its (raw,
247 target format) contents in *RAW_BUFFER. Set *OPTIMIZED if the
248 variable was optimized out (and thus can't be fetched). Set *LVAL
249 to lval_memory, lval_register, or not_lval, depending on whether
250 the value was fetched from memory, from a register, or in a strange
251 and non-modifiable way (e.g. a frame pointer which was calculated
252 rather than fetched). Set *ADDRP to the address, either in memory
253 on as a REGISTER_BYTE offset into the registers array.
254
255 Note that this implementation never sets *LVAL to not_lval. But
256 it can be replaced by defining GET_SAVED_REGISTER and supplying
257 your own.
258
259 The argument RAW_BUFFER must point to aligned memory. */
260
261 void
262 get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval)
263 char *raw_buffer;
264 int *optimized;
265 CORE_ADDR *addrp;
266 FRAME frame;
267 int regnum;
268 enum lval_type *lval;
269 {
270 CORE_ADDR addr;
271 /* Normal systems don't optimize out things with register numbers. */
272 if (optimized != NULL)
273 *optimized = 0;
274 addr = find_saved_register (frame, regnum);
275 if (addr != 0)
276 {
277 if (lval != NULL)
278 *lval = lval_memory;
279 if (regnum == SP_REGNUM)
280 {
281 if (raw_buffer != NULL)
282 {
283 /* Put it back in target format. */
284 store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), addr);
285 }
286 if (addrp != NULL)
287 *addrp = 0;
288 return;
289 }
290 if (raw_buffer != NULL)
291 read_memory (addr, raw_buffer, REGISTER_RAW_SIZE (regnum));
292 }
293 else
294 {
295 if (lval != NULL)
296 *lval = lval_register;
297 addr = REGISTER_BYTE (regnum);
298 if (raw_buffer != NULL)
299 read_register_gen (regnum, raw_buffer);
300 }
301 if (addrp != NULL)
302 *addrp = addr;
303 }
304 #endif /* GET_SAVED_REGISTER. */
305
306 /* Copy the bytes of register REGNUM, relative to the current stack frame,
307 into our memory at MYADDR, in target byte order.
308 The number of bytes copied is REGISTER_RAW_SIZE (REGNUM).
309
310 Returns 1 if could not be read, 0 if could. */
311
312 int
313 read_relative_register_raw_bytes (regnum, myaddr)
314 int regnum;
315 char *myaddr;
316 {
317 int optim;
318 if (regnum == FP_REGNUM && selected_frame)
319 {
320 /* Put it back in target format. */
321 store_address (myaddr, REGISTER_RAW_SIZE(FP_REGNUM),
322 FRAME_FP(selected_frame));
323 return 0;
324 }
325
326 get_saved_register (myaddr, &optim, (CORE_ADDR *) NULL, selected_frame,
327 regnum, (enum lval_type *)NULL);
328 return optim;
329 }
330
331 /* Return a `value' with the contents of register REGNUM
332 in its virtual format, with the type specified by
333 REGISTER_VIRTUAL_TYPE. */
334
335 value
336 value_of_register (regnum)
337 int regnum;
338 {
339 CORE_ADDR addr;
340 int optim;
341 register value val;
342 char raw_buffer[MAX_REGISTER_RAW_SIZE];
343 char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
344 enum lval_type lval;
345
346 get_saved_register (raw_buffer, &optim, &addr,
347 selected_frame, regnum, &lval);
348
349 REGISTER_CONVERT_TO_VIRTUAL (regnum, raw_buffer, virtual_buffer);
350 val = allocate_value (REGISTER_VIRTUAL_TYPE (regnum));
351 memcpy (VALUE_CONTENTS_RAW (val), virtual_buffer,
352 REGISTER_VIRTUAL_SIZE (regnum));
353 VALUE_LVAL (val) = lval;
354 VALUE_ADDRESS (val) = addr;
355 VALUE_REGNO (val) = regnum;
356 VALUE_OPTIMIZED_OUT (val) = optim;
357 return val;
358 }
359 \f
360 /* Low level examining and depositing of registers.
361
362 The caller is responsible for making
363 sure that the inferior is stopped before calling the fetching routines,
364 or it will get garbage. (a change from GDB version 3, in which
365 the caller got the value from the last stop). */
366
367 /* Contents of the registers in target byte order.
368 We allocate some extra slop since we do a lot of memcpy's around `registers',
369 and failing-soft is better than failing hard. */
370 char registers[REGISTER_BYTES + /* SLOP */ 256];
371
372 /* Nonzero if that register has been fetched. */
373 char register_valid[NUM_REGS];
374
375 /* Indicate that registers may have changed, so invalidate the cache. */
376 void
377 registers_changed ()
378 {
379 int i;
380 for (i = 0; i < NUM_REGS; i++)
381 register_valid[i] = 0;
382 }
383
384 /* Indicate that all registers have been fetched, so mark them all valid. */
385 void
386 registers_fetched ()
387 {
388 int i;
389 for (i = 0; i < NUM_REGS; i++)
390 register_valid[i] = 1;
391 }
392
393 /* Copy LEN bytes of consecutive data from registers
394 starting with the REGBYTE'th byte of register data
395 into memory at MYADDR. */
396
397 void
398 read_register_bytes (regbyte, myaddr, len)
399 int regbyte;
400 char *myaddr;
401 int len;
402 {
403 /* Fetch all registers. */
404 int i;
405 for (i = 0; i < NUM_REGS; i++)
406 if (!register_valid[i])
407 {
408 target_fetch_registers (-1);
409 break;
410 }
411 if (myaddr != NULL)
412 memcpy (myaddr, &registers[regbyte], len);
413 }
414
415 /* Read register REGNO into memory at MYADDR, which must be large enough
416 for REGISTER_RAW_BYTES (REGNO). Target byte-order.
417 If the register is known to be the size of a CORE_ADDR or smaller,
418 read_register can be used instead. */
419 void
420 read_register_gen (regno, myaddr)
421 int regno;
422 char *myaddr;
423 {
424 if (!register_valid[regno])
425 target_fetch_registers (regno);
426 memcpy (myaddr, &registers[REGISTER_BYTE (regno)],
427 REGISTER_RAW_SIZE (regno));
428 }
429
430 /* Copy LEN bytes of consecutive data from memory at MYADDR
431 into registers starting with the REGBYTE'th byte of register data. */
432
433 void
434 write_register_bytes (regbyte, myaddr, len)
435 int regbyte;
436 char *myaddr;
437 int len;
438 {
439 /* Make sure the entire registers array is valid. */
440 read_register_bytes (0, (char *)NULL, REGISTER_BYTES);
441 memcpy (&registers[regbyte], myaddr, len);
442 target_store_registers (-1);
443 }
444
445 /* Return the raw contents of register REGNO, regarding it as an integer. */
446 /* This probably should be returning LONGEST rather than CORE_ADDR. */
447
448 CORE_ADDR
449 read_register (regno)
450 int regno;
451 {
452 if (!register_valid[regno])
453 target_fetch_registers (regno);
454
455 return extract_address (&registers[REGISTER_BYTE (regno)],
456 REGISTER_RAW_SIZE(regno));
457 }
458
459 /* Registers we shouldn't try to store. */
460 #if !defined (CANNOT_STORE_REGISTER)
461 #define CANNOT_STORE_REGISTER(regno) 0
462 #endif
463
464 /* Store VALUE, into the raw contents of register number REGNO. */
465 /* FIXME: The val arg should probably be a LONGEST. */
466
467 void
468 write_register (regno, val)
469 int regno;
470 LONGEST val;
471 {
472 PTR buf;
473 int size;
474
475 /* On the sparc, writing %g0 is a no-op, so we don't even want to change
476 the registers array if something writes to this register. */
477 if (CANNOT_STORE_REGISTER (regno))
478 return;
479
480 size = REGISTER_RAW_SIZE(regno);
481 buf = alloca (size);
482 store_signed_integer (buf, size, (LONGEST) val);
483
484 /* If we have a valid copy of the register, and new value == old value,
485 then don't bother doing the actual store. */
486
487 if (register_valid [regno])
488 {
489 if (memcmp (&registers[REGISTER_BYTE (regno)], buf, size) == 0)
490 return;
491 }
492
493 target_prepare_to_store ();
494
495 memcpy (&registers[REGISTER_BYTE (regno)], buf, size);
496
497 register_valid [regno] = 1;
498
499 target_store_registers (regno);
500 }
501
502 /* Record that register REGNO contains VAL.
503 This is used when the value is obtained from the inferior or core dump,
504 so there is no need to store the value there. */
505
506 void
507 supply_register (regno, val)
508 int regno;
509 char *val;
510 {
511 register_valid[regno] = 1;
512 memcpy (&registers[REGISTER_BYTE (regno)], val, REGISTER_RAW_SIZE (regno));
513
514 /* On some architectures, e.g. HPPA, there are a few stray bits in some
515 registers, that the rest of the code would like to ignore. */
516 #ifdef CLEAN_UP_REGISTER_VALUE
517 CLEAN_UP_REGISTER_VALUE(regno, &registers[REGISTER_BYTE(regno)]);
518 #endif
519 }
520 \f
521 /* Will calling read_var_value or locate_var_value on SYM end
522 up caring what frame it is being evaluated relative to? SYM must
523 be non-NULL. */
524 int
525 symbol_read_needs_frame (sym)
526 struct symbol *sym;
527 {
528 switch (SYMBOL_CLASS (sym))
529 {
530 /* All cases listed explicitly so that gcc -Wall will detect it if
531 we failed to consider one. */
532 case LOC_REGISTER:
533 case LOC_ARG:
534 case LOC_REF_ARG:
535 case LOC_REGPARM:
536 case LOC_REGPARM_ADDR:
537 case LOC_LOCAL:
538 case LOC_LOCAL_ARG:
539 case LOC_BASEREG:
540 case LOC_BASEREG_ARG:
541 return 1;
542
543 case LOC_UNDEF:
544 case LOC_CONST:
545 case LOC_STATIC:
546 case LOC_TYPEDEF:
547
548 case LOC_LABEL:
549 /* Getting the address of a label can be done independently of the block,
550 even if some *uses* of that address wouldn't work so well without
551 the right frame. */
552
553 case LOC_BLOCK:
554 case LOC_CONST_BYTES:
555 case LOC_OPTIMIZED_OUT:
556 return 0;
557 }
558 return 1;
559 }
560
561 /* Given a struct symbol for a variable,
562 and a stack frame id, read the value of the variable
563 and return a (pointer to a) struct value containing the value.
564 If the variable cannot be found, return a zero pointer.
565 If FRAME is NULL, use the selected_frame. */
566
567 value
568 read_var_value (var, frame)
569 register struct symbol *var;
570 FRAME frame;
571 {
572 register value v;
573 struct frame_info *fi;
574 struct type *type = SYMBOL_TYPE (var);
575 CORE_ADDR addr;
576 register int len;
577
578 v = allocate_value (type);
579 VALUE_LVAL (v) = lval_memory; /* The most likely possibility. */
580 len = TYPE_LENGTH (type);
581
582 if (frame == 0) frame = selected_frame;
583
584 switch (SYMBOL_CLASS (var))
585 {
586 case LOC_CONST:
587 /* Put the constant back in target format. */
588 store_signed_integer (VALUE_CONTENTS_RAW (v), len,
589 (LONGEST) SYMBOL_VALUE (var));
590 VALUE_LVAL (v) = not_lval;
591 return v;
592
593 case LOC_LABEL:
594 /* Put the constant back in target format. */
595 store_address (VALUE_CONTENTS_RAW (v), len, SYMBOL_VALUE_ADDRESS (var));
596 VALUE_LVAL (v) = not_lval;
597 return v;
598
599 case LOC_CONST_BYTES:
600 {
601 char *bytes_addr;
602 bytes_addr = SYMBOL_VALUE_BYTES (var);
603 memcpy (VALUE_CONTENTS_RAW (v), bytes_addr, len);
604 VALUE_LVAL (v) = not_lval;
605 return v;
606 }
607
608 case LOC_STATIC:
609 addr = SYMBOL_VALUE_ADDRESS (var);
610 break;
611
612 case LOC_ARG:
613 fi = get_frame_info (frame);
614 if (fi == NULL)
615 return 0;
616 addr = FRAME_ARGS_ADDRESS (fi);
617 if (!addr)
618 {
619 return 0;
620 }
621 addr += SYMBOL_VALUE (var);
622 break;
623
624 case LOC_REF_ARG:
625 fi = get_frame_info (frame);
626 if (fi == NULL)
627 return 0;
628 addr = FRAME_ARGS_ADDRESS (fi);
629 if (!addr)
630 {
631 return 0;
632 }
633 addr += SYMBOL_VALUE (var);
634 addr = read_memory_unsigned_integer
635 (addr, TARGET_PTR_BIT / TARGET_CHAR_BIT);
636 break;
637
638 case LOC_LOCAL:
639 case LOC_LOCAL_ARG:
640 fi = get_frame_info (frame);
641 if (fi == NULL)
642 return 0;
643 addr = FRAME_LOCALS_ADDRESS (fi);
644 addr += SYMBOL_VALUE (var);
645 break;
646
647 case LOC_BASEREG:
648 case LOC_BASEREG_ARG:
649 {
650 char buf[MAX_REGISTER_RAW_SIZE];
651 get_saved_register (buf, NULL, NULL, frame, SYMBOL_BASEREG (var),
652 NULL);
653 addr = extract_address (buf, REGISTER_RAW_SIZE (SYMBOL_BASEREG (var)));
654 addr += SYMBOL_VALUE (var);
655 break;
656 }
657
658 case LOC_TYPEDEF:
659 error ("Cannot look up value of a typedef");
660 break;
661
662 case LOC_BLOCK:
663 VALUE_ADDRESS (v) = BLOCK_START (SYMBOL_BLOCK_VALUE (var));
664 return v;
665
666 case LOC_REGISTER:
667 case LOC_REGPARM:
668 case LOC_REGPARM_ADDR:
669 {
670 struct block *b;
671
672 if (frame == NULL)
673 return 0;
674 b = get_frame_block (frame);
675
676 v = value_from_register (type, SYMBOL_VALUE (var), frame);
677
678 if (SYMBOL_CLASS (var) == LOC_REGPARM_ADDR)
679 {
680 addr = *(CORE_ADDR *)VALUE_CONTENTS (v);
681 VALUE_LVAL (v) = lval_memory;
682 }
683 else
684 return v;
685 }
686 break;
687
688 case LOC_OPTIMIZED_OUT:
689 VALUE_LVAL (v) = not_lval;
690 VALUE_OPTIMIZED_OUT (v) = 1;
691 return v;
692
693 default:
694 error ("Cannot look up value of a botched symbol.");
695 break;
696 }
697
698 VALUE_ADDRESS (v) = addr;
699 VALUE_LAZY (v) = 1;
700 return v;
701 }
702
703 /* Return a value of type TYPE, stored in register REGNUM, in frame
704 FRAME. */
705
706 value
707 value_from_register (type, regnum, frame)
708 struct type *type;
709 int regnum;
710 FRAME frame;
711 {
712 char raw_buffer [MAX_REGISTER_RAW_SIZE];
713 char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
714 CORE_ADDR addr;
715 int optim;
716 value v = allocate_value (type);
717 int len = TYPE_LENGTH (type);
718 char *value_bytes = 0;
719 int value_bytes_copied = 0;
720 int num_storage_locs;
721 enum lval_type lval;
722
723 VALUE_REGNO (v) = regnum;
724
725 num_storage_locs = (len > REGISTER_VIRTUAL_SIZE (regnum) ?
726 ((len - 1) / REGISTER_RAW_SIZE (regnum)) + 1 :
727 1);
728
729 if (num_storage_locs > 1
730 #ifdef GDB_TARGET_IS_H8500
731 || TYPE_CODE (type) == TYPE_CODE_PTR
732 #endif
733 )
734 {
735 /* Value spread across multiple storage locations. */
736
737 int local_regnum;
738 int mem_stor = 0, reg_stor = 0;
739 int mem_tracking = 1;
740 CORE_ADDR last_addr = 0;
741 CORE_ADDR first_addr = 0;
742
743 value_bytes = (char *) alloca (len + MAX_REGISTER_RAW_SIZE);
744
745 /* Copy all of the data out, whereever it may be. */
746
747 #ifdef GDB_TARGET_IS_H8500
748 /* This piece of hideosity is required because the H8500 treats registers
749 differently depending upon whether they are used as pointers or not. As a
750 pointer, a register needs to have a page register tacked onto the front.
751 An alternate way to do this would be to have gcc output different register
752 numbers for the pointer & non-pointer form of the register. But, it
753 doesn't, so we're stuck with this. */
754
755 if (TYPE_CODE (type) == TYPE_CODE_PTR
756 && len > 2)
757 {
758 int page_regnum;
759
760 switch (regnum)
761 {
762 case R0_REGNUM: case R1_REGNUM: case R2_REGNUM: case R3_REGNUM:
763 page_regnum = SEG_D_REGNUM;
764 break;
765 case R4_REGNUM: case R5_REGNUM:
766 page_regnum = SEG_E_REGNUM;
767 break;
768 case R6_REGNUM: case R7_REGNUM:
769 page_regnum = SEG_T_REGNUM;
770 break;
771 }
772
773 value_bytes[0] = 0;
774 get_saved_register (value_bytes + 1,
775 &optim,
776 &addr,
777 frame,
778 page_regnum,
779 &lval);
780
781 if (lval == lval_register)
782 reg_stor++;
783 else
784 mem_stor++;
785 first_addr = addr;
786 last_addr = addr;
787
788 get_saved_register (value_bytes + 2,
789 &optim,
790 &addr,
791 frame,
792 regnum,
793 &lval);
794
795 if (lval == lval_register)
796 reg_stor++;
797 else
798 {
799 mem_stor++;
800 mem_tracking = mem_tracking && (addr == last_addr);
801 }
802 last_addr = addr;
803 }
804 else
805 #endif /* GDB_TARGET_IS_H8500 */
806 for (local_regnum = regnum;
807 value_bytes_copied < len;
808 (value_bytes_copied += REGISTER_RAW_SIZE (local_regnum),
809 ++local_regnum))
810 {
811 get_saved_register (value_bytes + value_bytes_copied,
812 &optim,
813 &addr,
814 frame,
815 local_regnum,
816 &lval);
817
818 if (regnum == local_regnum)
819 first_addr = addr;
820 if (lval == lval_register)
821 reg_stor++;
822 else
823 {
824 mem_stor++;
825
826 mem_tracking =
827 (mem_tracking
828 && (regnum == local_regnum
829 || addr == last_addr));
830 }
831 last_addr = addr;
832 }
833
834 if ((reg_stor && mem_stor)
835 || (mem_stor && !mem_tracking))
836 /* Mixed storage; all of the hassle we just went through was
837 for some good purpose. */
838 {
839 VALUE_LVAL (v) = lval_reg_frame_relative;
840 VALUE_FRAME (v) = FRAME_FP (frame);
841 VALUE_FRAME_REGNUM (v) = regnum;
842 }
843 else if (mem_stor)
844 {
845 VALUE_LVAL (v) = lval_memory;
846 VALUE_ADDRESS (v) = first_addr;
847 }
848 else if (reg_stor)
849 {
850 VALUE_LVAL (v) = lval_register;
851 VALUE_ADDRESS (v) = first_addr;
852 }
853 else
854 fatal ("value_from_register: Value not stored anywhere!");
855
856 VALUE_OPTIMIZED_OUT (v) = optim;
857
858 /* Any structure stored in more than one register will always be
859 an integral number of registers. Otherwise, you'd need to do
860 some fiddling with the last register copied here for little
861 endian machines. */
862
863 /* Copy into the contents section of the value. */
864 memcpy (VALUE_CONTENTS_RAW (v), value_bytes, len);
865
866 /* Finally do any conversion necessary when extracting this
867 type from more than one register. */
868 #ifdef REGISTER_CONVERT_TO_TYPE
869 REGISTER_CONVERT_TO_TYPE(regnum, type, VALUE_CONTENTS_RAW(v));
870 #endif
871 return v;
872 }
873
874 /* Data is completely contained within a single register. Locate the
875 register's contents in a real register or in core;
876 read the data in raw format. */
877
878 get_saved_register (raw_buffer, &optim, &addr, frame, regnum, &lval);
879 VALUE_OPTIMIZED_OUT (v) = optim;
880 VALUE_LVAL (v) = lval;
881 VALUE_ADDRESS (v) = addr;
882
883 /* Convert the raw contents to virtual contents.
884 (Just copy them if the formats are the same.) */
885
886 REGISTER_CONVERT_TO_VIRTUAL (regnum, raw_buffer, virtual_buffer);
887
888 if (REGISTER_CONVERTIBLE (regnum))
889 {
890 /* When the raw and virtual formats differ, the virtual format
891 corresponds to a specific data type. If we want that type,
892 copy the data into the value.
893 Otherwise, do a type-conversion. */
894
895 if (type != REGISTER_VIRTUAL_TYPE (regnum))
896 {
897 /* eg a variable of type `float' in a 68881 register
898 with raw type `extended' and virtual type `double'.
899 Fetch it as a `double' and then convert to `float'. */
900 /* FIXME: This value will be not_lval, which means we can't assign
901 to it. Probably the right fix is to do the cast on a temporary
902 value, and just copy the VALUE_CONTENTS over. */
903 v = allocate_value (REGISTER_VIRTUAL_TYPE (regnum));
904 memcpy (VALUE_CONTENTS_RAW (v), virtual_buffer,
905 REGISTER_VIRTUAL_SIZE (regnum));
906 v = value_cast (type, v);
907 }
908 else
909 memcpy (VALUE_CONTENTS_RAW (v), virtual_buffer, len);
910 }
911 else
912 {
913 /* Raw and virtual formats are the same for this register. */
914
915 #if TARGET_BYTE_ORDER == BIG_ENDIAN
916 if (len < REGISTER_RAW_SIZE (regnum))
917 {
918 /* Big-endian, and we want less than full size. */
919 VALUE_OFFSET (v) = REGISTER_RAW_SIZE (regnum) - len;
920 }
921 #endif
922
923 memcpy (VALUE_CONTENTS_RAW (v), virtual_buffer + VALUE_OFFSET (v), len);
924 }
925
926 return v;
927 }
928 \f
929 /* Given a struct symbol for a variable or function,
930 and a stack frame id,
931 return a (pointer to a) struct value containing the properly typed
932 address. */
933
934 value
935 locate_var_value (var, frame)
936 register struct symbol *var;
937 FRAME frame;
938 {
939 CORE_ADDR addr = 0;
940 struct type *type = SYMBOL_TYPE (var);
941 value lazy_value;
942
943 /* Evaluate it first; if the result is a memory address, we're fine.
944 Lazy evaluation pays off here. */
945
946 lazy_value = read_var_value (var, frame);
947 if (lazy_value == 0)
948 error ("Address of \"%s\" is unknown.", SYMBOL_SOURCE_NAME (var));
949
950 if (VALUE_LAZY (lazy_value)
951 || TYPE_CODE (type) == TYPE_CODE_FUNC)
952 {
953 addr = VALUE_ADDRESS (lazy_value);
954 return value_from_longest (lookup_pointer_type (type), (LONGEST) addr);
955 }
956
957 /* Not a memory address; check what the problem was. */
958 switch (VALUE_LVAL (lazy_value))
959 {
960 case lval_register:
961 case lval_reg_frame_relative:
962 error ("Address requested for identifier \"%s\" which is in a register.",
963 SYMBOL_SOURCE_NAME (var));
964 break;
965
966 default:
967 error ("Can't take address of \"%s\" which isn't an lvalue.",
968 SYMBOL_SOURCE_NAME (var));
969 break;
970 }
971 return 0; /* For lint -- never reached */
972 }
This page took 0.065189 seconds and 5 git commands to generate.