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