]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/findvar.c
Initial revision
[thirdparty/binutils-gdb.git] / gdb / findvar.c
1 /* Find a variable's value in memory, for GDB, the GNU debugger.
2 Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 GDB 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 1, or (at your option)
9 any later version.
10
11 GDB 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 GDB; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20 #include <stdio.h>
21 #include "defs.h"
22 #include "param.h"
23 #include "symtab.h"
24 #include "frame.h"
25 #include "value.h"
26 #include "gdbcore.h"
27 #include "inferior.h"
28 #include "target.h"
29
30 #if !defined (GET_SAVED_REGISTER)
31
32 /* Return the address in which frame FRAME's value of register REGNUM
33 has been saved in memory. Or return zero if it has not been saved.
34 If REGNUM specifies the SP, the value we return is actually
35 the SP value, not an address where it was saved. */
36
37 CORE_ADDR
38 find_saved_register (frame, regnum)
39 FRAME frame;
40 int regnum;
41 {
42 struct frame_info *fi;
43 struct frame_saved_regs saved_regs;
44
45 register FRAME frame1 = 0;
46 register CORE_ADDR addr = 0;
47
48 if (frame == 0) /* No regs saved if want current frame */
49 return 0;
50
51 #ifdef HAVE_REGISTER_WINDOWS
52 /* We assume that a register in a register window will only be saved
53 in one place (since the name changes and/or disappears as you go
54 towards inner frames), so we only call get_frame_saved_regs on
55 the current frame. This is directly in contradiction to the
56 usage below, which assumes that registers used in a frame must be
57 saved in a lower (more interior) frame. This change is a result
58 of working on a register window machine; get_frame_saved_regs
59 always returns the registers saved within a frame, within the
60 context (register namespace) of that frame. */
61
62 /* However, note that we don't want this to return anything if
63 nothing is saved (if there's a frame inside of this one). Also,
64 callers to this routine asking for the stack pointer want the
65 stack pointer saved for *this* frame; this is returned from the
66 next frame. */
67
68
69 if (REGISTER_IN_WINDOW_P(regnum))
70 {
71 frame1 = get_next_frame (frame);
72 if (!frame1) return 0; /* Registers of this frame are
73 active. */
74
75 /* Get the SP from the next frame in; it will be this
76 current frame. */
77 if (regnum != SP_REGNUM)
78 frame1 = frame;
79
80 fi = get_frame_info (frame1);
81 get_frame_saved_regs (fi, &saved_regs);
82 return saved_regs.regs[regnum]; /* ... which might be zero */
83 }
84 #endif /* HAVE_REGISTER_WINDOWS */
85
86 /* Note that this next routine assumes that registers used in
87 frame x will be saved only in the frame that x calls and
88 frames interior to it. This is not true on the sparc, but the
89 above macro takes care of it, so we should be all right. */
90 while (1)
91 {
92 QUIT;
93 frame1 = get_prev_frame (frame1);
94 if (frame1 == 0 || frame1 == frame)
95 break;
96 fi = get_frame_info (frame1);
97 get_frame_saved_regs (fi, &saved_regs);
98 if (saved_regs.regs[regnum])
99 addr = saved_regs.regs[regnum];
100 }
101
102 return addr;
103 }
104
105 /* Find register number REGNUM relative to FRAME and put its
106 (raw) contents in *RAW_BUFFER. Set *OPTIMIZED if the variable
107 was optimized out (and thus can't be fetched). Set *LVAL to
108 lval_memory, lval_register, or not_lval, depending on whether the
109 value was fetched from memory, from a register, or in a strange
110 and non-modifiable way (e.g. a frame pointer which was calculated
111 rather than fetched). Set *ADDRP to the address, either in memory
112 on as a REGISTER_BYTE offset into the registers array.
113
114 Note that this implementation never sets *LVAL to not_lval. But
115 it can be replaced by defining GET_SAVED_REGISTER and supplying
116 your own.
117
118 The argument RAW_BUFFER must point to aligned memory. */
119 void
120 get_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);
133 if (addr != NULL)
134 {
135 if (lval != NULL)
136 *lval = lval_memory;
137 if (regnum == SP_REGNUM)
138 {
139 if (raw_buffer != NULL)
140 *(CORE_ADDR *)raw_buffer = addr;
141 if (addrp != NULL)
142 *addrp = 0;
143 return;
144 }
145 if (raw_buffer != NULL)
146 read_memory (addr, raw_buffer, REGISTER_RAW_SIZE (regnum));
147 }
148 else
149 {
150 if (lval != NULL)
151 *lval = lval_register;
152 addr = REGISTER_BYTE (regnum);
153 if (raw_buffer != NULL)
154 read_register_gen (regnum, raw_buffer);
155 }
156 if (addrp != NULL)
157 *addrp = addr;
158 }
159 #endif /* GET_SAVED_REGISTER. */
160
161 /* Copy the bytes of register REGNUM, relative to the current stack frame,
162 into our memory at MYADDR, in target byte order.
163 The number of bytes copied is REGISTER_RAW_SIZE (REGNUM).
164
165 Returns 1 if could not be read, 0 if could. */
166
167 int
168 read_relative_register_raw_bytes (regnum, myaddr)
169 int regnum;
170 char *myaddr;
171 {
172 int optim;
173 if (regnum == FP_REGNUM && selected_frame)
174 {
175 bcopy (&FRAME_FP(selected_frame), myaddr, sizeof (CORE_ADDR));
176 SWAP_TARGET_AND_HOST (myaddr, sizeof (CORE_ADDR)); /* in target order */
177 return 0;
178 }
179
180 get_saved_register (myaddr, &optim, (CORE_ADDR) NULL, selected_frame,
181 regnum, (enum lval_type *)NULL);
182 return optim;
183 }
184
185 /* Return a `value' with the contents of register REGNUM
186 in its virtual format, with the type specified by
187 REGISTER_VIRTUAL_TYPE. */
188
189 value
190 value_of_register (regnum)
191 int regnum;
192 {
193 CORE_ADDR addr;
194 int optim;
195 register value val;
196 char raw_buffer[MAX_REGISTER_RAW_SIZE];
197 char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
198 enum lval_type lval;
199
200 get_saved_register (raw_buffer, &optim, &addr,
201 selected_frame, regnum, &lval);
202
203 target_convert_to_virtual (regnum, raw_buffer, virtual_buffer);
204 val = allocate_value (REGISTER_VIRTUAL_TYPE (regnum));
205 bcopy (virtual_buffer, VALUE_CONTENTS_RAW (val),
206 REGISTER_VIRTUAL_SIZE (regnum));
207 VALUE_LVAL (val) = lval;
208 VALUE_ADDRESS (val) = addr;
209 VALUE_REGNO (val) = regnum;
210 VALUE_OPTIMIZED_OUT (val) = optim;
211 return val;
212 }
213 \f
214 /* Low level examining and depositing of registers.
215
216 The caller is responsible for making
217 sure that the inferior is stopped before calling the fetching routines,
218 or it will get garbage. (a change from GDB version 3, in which
219 the caller got the value from the last stop). */
220
221 /* Contents of the registers in target byte order.
222 We allocate some extra slop since we do a lot of bcopy's around `registers',
223 and failing-soft is better than failing hard. */
224 char registers[REGISTER_BYTES + /* SLOP */ 256];
225
226 /* Nonzero if that register has been fetched. */
227 char register_valid[NUM_REGS];
228
229 /* Indicate that registers may have changed, so invalidate the cache. */
230 void
231 registers_changed ()
232 {
233 int i;
234 for (i = 0; i < NUM_REGS; i++)
235 register_valid[i] = 0;
236 }
237
238 /* Indicate that all registers have been fetched, so mark them all valid. */
239 void
240 registers_fetched ()
241 {
242 int i;
243 for (i = 0; i < NUM_REGS; i++)
244 register_valid[i] = 1;
245 }
246
247 /* Copy LEN bytes of consecutive data from registers
248 starting with the REGBYTE'th byte of register data
249 into memory at MYADDR. */
250
251 void
252 read_register_bytes (regbyte, myaddr, len)
253 int regbyte;
254 char *myaddr;
255 int len;
256 {
257 /* Fetch all registers. */
258 int i;
259 for (i = 0; i < NUM_REGS; i++)
260 if (!register_valid[i])
261 {
262 target_fetch_registers (-1);
263 break;
264 }
265 if (myaddr != NULL)
266 bcopy (&registers[regbyte], myaddr, len);
267 }
268
269 /* Read register REGNO into memory at MYADDR, which must be large enough
270 for REGISTER_RAW_BYTES (REGNO). If the register is known to be the
271 size of a CORE_ADDR or smaller, read_register can be used instead. */
272 void
273 read_register_gen (regno, myaddr)
274 int regno;
275 char *myaddr;
276 {
277 if (!register_valid[regno])
278 target_fetch_registers (regno);
279 bcopy (&registers[REGISTER_BYTE (regno)], myaddr, REGISTER_RAW_SIZE (regno));
280 }
281
282 /* Copy LEN bytes of consecutive data from memory at MYADDR
283 into registers starting with the REGBYTE'th byte of register data. */
284
285 void
286 write_register_bytes (regbyte, myaddr, len)
287 int regbyte;
288 char *myaddr;
289 int len;
290 {
291 /* Make sure the entire registers array is valid. */
292 read_register_bytes (0, (char *)NULL, REGISTER_BYTES);
293 bcopy (myaddr, &registers[regbyte], len);
294 target_store_registers (-1);
295 }
296
297 /* Return the contents of register REGNO, regarding it as an integer. */
298
299 CORE_ADDR
300 read_register (regno)
301 int regno;
302 {
303 int reg;
304 if (!register_valid[regno])
305 target_fetch_registers (regno);
306 /* FIXME, this loses when REGISTER_RAW_SIZE (regno) != sizeof (int) */
307 reg = *(int *) &registers[REGISTER_BYTE (regno)];
308 SWAP_TARGET_AND_HOST (&reg, sizeof (int));
309 return reg;
310 }
311
312 /* Registers we shouldn't try to store. */
313 #if !defined (CANNOT_STORE_REGISTER)
314 #define CANNOT_STORE_REGISTER(regno) 0
315 #endif
316
317 /* Store VALUE in the register number REGNO, regarded as an integer. */
318
319 void
320 write_register (regno, val)
321 int regno, val;
322 {
323 /* On the sparc, writing %g0 is a no-op, so we don't even want to change
324 the registers array if something writes to this register. */
325 if (CANNOT_STORE_REGISTER (regno))
326 return;
327
328 SWAP_TARGET_AND_HOST (&val, sizeof (int));
329
330 target_prepare_to_store ();
331
332 register_valid [regno] = 1;
333 /* FIXME, this loses when REGISTER_RAW_SIZE (regno) != sizeof (int) */
334 /* FIXME, this depends on REGISTER_BYTE (regno) being aligned for host */
335 *(int *) &registers[REGISTER_BYTE (regno)] = val;
336
337 target_store_registers (regno);
338 }
339
340 /* Record that register REGNO contains VAL.
341 This is used when the value is obtained from the inferior or core dump,
342 so there is no need to store the value there. */
343
344 void
345 supply_register (regno, val)
346 int regno;
347 char *val;
348 {
349 register_valid[regno] = 1;
350 bcopy (val, &registers[REGISTER_BYTE (regno)], REGISTER_RAW_SIZE (regno));
351 }
352 \f
353 /* Given a struct symbol for a variable,
354 and a stack frame id, read the value of the variable
355 and return a (pointer to a) struct value containing the value.
356 If the variable cannot be found, return a zero pointer. */
357
358 value
359 read_var_value (var, frame)
360 register struct symbol *var;
361 FRAME frame;
362 {
363 register value v;
364 struct frame_info *fi;
365 struct type *type = SYMBOL_TYPE (var);
366 CORE_ADDR addr;
367 int val;
368 register int len;
369
370 v = allocate_value (type);
371 VALUE_LVAL (v) = lval_memory; /* The most likely possibility. */
372 len = TYPE_LENGTH (type);
373
374 if (frame == 0) frame = selected_frame;
375
376 switch (SYMBOL_CLASS (var))
377 {
378 case LOC_CONST:
379 val = SYMBOL_VALUE (var);
380 bcopy (&val, VALUE_CONTENTS_RAW (v), len);
381 SWAP_TARGET_AND_HOST (VALUE_CONTENTS_RAW (v), len);
382 VALUE_LVAL (v) = not_lval;
383 return v;
384
385 case LOC_LABEL:
386 addr = SYMBOL_VALUE_ADDRESS (var);
387 bcopy (&addr, VALUE_CONTENTS_RAW (v), len);
388 SWAP_TARGET_AND_HOST (VALUE_CONTENTS_RAW (v), len);
389 VALUE_LVAL (v) = not_lval;
390 return v;
391
392 case LOC_CONST_BYTES:
393 addr = SYMBOL_VALUE_ADDRESS (var);
394 bcopy (addr, VALUE_CONTENTS_RAW (v), len);
395 VALUE_LVAL (v) = not_lval;
396 return v;
397
398 case LOC_STATIC:
399 case LOC_EXTERNAL:
400 addr = SYMBOL_VALUE_ADDRESS (var);
401 break;
402
403 /* Nonzero if a struct which is located in a register or a LOC_ARG
404 really contains
405 the address of the struct, not the struct itself. GCC_P is nonzero
406 if the function was compiled with GCC. */
407 #if !defined (REG_STRUCT_HAS_ADDR)
408 #define REG_STRUCT_HAS_ADDR(gcc_p) 0
409 #endif
410
411 case LOC_ARG:
412 fi = get_frame_info (frame);
413 addr = FRAME_ARGS_ADDRESS (fi);
414 if (!addr) {
415 return 0;
416 }
417 addr += SYMBOL_VALUE (var);
418 break;
419
420 case LOC_REF_ARG:
421 fi = get_frame_info (frame);
422 addr = FRAME_ARGS_ADDRESS (fi);
423 if (!addr) {
424 return 0;
425 }
426 addr += SYMBOL_VALUE (var);
427 addr = read_memory_integer (addr, sizeof (CORE_ADDR));
428 break;
429
430 case LOC_LOCAL:
431 case LOC_LOCAL_ARG:
432 fi = get_frame_info (frame);
433 addr = SYMBOL_VALUE (var) + FRAME_LOCALS_ADDRESS (fi);
434 break;
435
436 case LOC_TYPEDEF:
437 error ("Cannot look up value of a typedef");
438 break;
439
440 case LOC_BLOCK:
441 VALUE_ADDRESS (v) = BLOCK_START (SYMBOL_BLOCK_VALUE (var));
442 return v;
443
444 case LOC_REGISTER:
445 case LOC_REGPARM:
446 {
447 struct block *b = get_frame_block (frame);
448
449 v = value_from_register (type, SYMBOL_VALUE (var), frame);
450
451 if (REG_STRUCT_HAS_ADDR(b->gcc_compile_flag)
452 && TYPE_CODE (type) == TYPE_CODE_STRUCT)
453 addr = *(CORE_ADDR *)VALUE_CONTENTS (v);
454 else
455 return v;
456 }
457 break;
458
459 default:
460 error ("Cannot look up value of a botched symbol.");
461 break;
462 }
463
464 VALUE_ADDRESS (v) = addr;
465 VALUE_LAZY (v) = 1;
466 return v;
467 }
468
469 /* Return a value of type TYPE, stored in register REGNUM, in frame
470 FRAME. */
471
472 value
473 value_from_register (type, regnum, frame)
474 struct type *type;
475 int regnum;
476 FRAME frame;
477 {
478 char raw_buffer [MAX_REGISTER_RAW_SIZE];
479 char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
480 CORE_ADDR addr;
481 int optim;
482 value v = allocate_value (type);
483 int len = TYPE_LENGTH (type);
484 char *value_bytes = 0;
485 int value_bytes_copied = 0;
486 int num_storage_locs;
487 enum lval_type lval;
488
489 VALUE_REGNO (v) = regnum;
490
491 num_storage_locs = (len > REGISTER_VIRTUAL_SIZE (regnum) ?
492 ((len - 1) / REGISTER_RAW_SIZE (regnum)) + 1 :
493 1);
494
495 if (num_storage_locs > 1)
496 {
497 /* Value spread across multiple storage locations. */
498
499 int local_regnum;
500 int mem_stor = 0, reg_stor = 0;
501 int mem_tracking = 1;
502 CORE_ADDR last_addr = 0;
503 CORE_ADDR first_addr;
504
505 value_bytes = (char *) alloca (len + MAX_REGISTER_RAW_SIZE);
506
507 /* Copy all of the data out, whereever it may be. */
508
509 for (local_regnum = regnum;
510 value_bytes_copied < len;
511 (value_bytes_copied += REGISTER_RAW_SIZE (local_regnum),
512 ++local_regnum))
513 {
514 get_saved_register (value_bytes + value_bytes_copied,
515 &optim,
516 &addr,
517 frame,
518 local_regnum,
519 &lval);
520 if (lval == lval_register)
521 reg_stor++;
522 else
523 {
524 mem_stor++;
525
526 if (regnum == local_regnum)
527 first_addr = addr;
528
529 mem_tracking =
530 (mem_tracking
531 && (regnum == local_regnum
532 || addr == last_addr));
533 }
534 last_addr = addr;
535 }
536
537 if ((reg_stor && mem_stor)
538 || (mem_stor && !mem_tracking))
539 /* Mixed storage; all of the hassle we just went through was
540 for some good purpose. */
541 {
542 VALUE_LVAL (v) = lval_reg_frame_relative;
543 VALUE_FRAME (v) = FRAME_FP (frame);
544 VALUE_FRAME_REGNUM (v) = regnum;
545 }
546 else if (mem_stor)
547 {
548 VALUE_LVAL (v) = lval_memory;
549 VALUE_ADDRESS (v) = first_addr;
550 }
551 else if (reg_stor)
552 {
553 VALUE_LVAL (v) = lval_register;
554 VALUE_ADDRESS (v) = first_addr;
555 }
556 else
557 fatal ("value_from_register: Value not stored anywhere!");
558
559 VALUE_OPTIMIZED_OUT (v) = optim;
560
561 /* Any structure stored in more than one register will always be
562 an integral number of registers. Otherwise, you'd need to do
563 some fiddling with the last register copied here for little
564 endian machines. */
565
566 /* Copy into the contents section of the value. */
567 bcopy (value_bytes, VALUE_CONTENTS_RAW (v), len);
568
569 return v;
570 }
571
572 /* Data is completely contained within a single register. Locate the
573 register's contents in a real register or in core;
574 read the data in raw format. */
575
576 get_saved_register (raw_buffer, &optim, &addr, frame, regnum, &lval);
577 VALUE_OPTIMIZED_OUT (v) = optim;
578 VALUE_LVAL (v) = lval;
579 VALUE_ADDRESS (v) = addr;
580
581 /* Convert the raw contents to virtual contents.
582 (Just copy them if the formats are the same.) */
583
584 target_convert_to_virtual (regnum, raw_buffer, virtual_buffer);
585
586 if (REGISTER_CONVERTIBLE (regnum))
587 {
588 /* When the raw and virtual formats differ, the virtual format
589 corresponds to a specific data type. If we want that type,
590 copy the data into the value.
591 Otherwise, do a type-conversion. */
592
593 if (type != REGISTER_VIRTUAL_TYPE (regnum))
594 {
595 /* eg a variable of type `float' in a 68881 register
596 with raw type `extended' and virtual type `double'.
597 Fetch it as a `double' and then convert to `float'. */
598 v = allocate_value (REGISTER_VIRTUAL_TYPE (regnum));
599 bcopy (virtual_buffer, VALUE_CONTENTS_RAW (v), len);
600 v = value_cast (type, v);
601 }
602 else
603 bcopy (virtual_buffer, VALUE_CONTENTS_RAW (v), len);
604 }
605 else
606 {
607 /* Raw and virtual formats are the same for this register. */
608
609 #if TARGET_BYTE_ORDER == BIG_ENDIAN
610 if (len < REGISTER_RAW_SIZE (regnum))
611 {
612 /* Big-endian, and we want less than full size. */
613 VALUE_OFFSET (v) = REGISTER_RAW_SIZE (regnum) - len;
614 }
615 #endif
616
617 bcopy (virtual_buffer + VALUE_OFFSET (v),
618 VALUE_CONTENTS_RAW (v), len);
619 }
620
621 return v;
622 }
623 \f
624 /* Given a struct symbol for a variable,
625 and a stack frame id,
626 return a (pointer to a) struct value containing the variable's address. */
627
628 value
629 locate_var_value (var, frame)
630 register struct symbol *var;
631 FRAME frame;
632 {
633 CORE_ADDR addr = 0;
634 struct type *type = SYMBOL_TYPE (var);
635 struct type *result_type;
636 value lazy_value;
637
638 /* Evaluate it first; if the result is a memory address, we're fine.
639 Lazy evaluation pays off here. */
640
641 lazy_value = read_var_value (var, frame);
642 if (lazy_value == 0)
643 error ("Address of \"%s\" is unknown.", SYMBOL_NAME (var));
644
645 if (VALUE_LAZY (lazy_value))
646 {
647 addr = VALUE_ADDRESS (lazy_value);
648
649 /* C++: The "address" of a reference should yield the address
650 * of the object pointed to. So force an extra de-reference. */
651
652 if (TYPE_CODE (type) == TYPE_CODE_REF)
653 {
654 char *buf = alloca (TYPE_LENGTH (type));
655 read_memory (addr, buf, TYPE_LENGTH (type));
656 addr = unpack_long (type, buf);
657 type = TYPE_TARGET_TYPE (type);
658 }
659
660 /* Address of an array is of the type of address of it's elements. */
661 result_type =
662 lookup_pointer_type (TYPE_CODE (type) == TYPE_CODE_ARRAY ?
663 TYPE_TARGET_TYPE (type) : type);
664
665 return value_cast (result_type,
666 value_from_long (builtin_type_long, (LONGEST) addr));
667 }
668
669 /* Not a memory address; check what the problem was. */
670 switch (VALUE_LVAL (lazy_value))
671 {
672 case lval_register:
673 case lval_reg_frame_relative:
674 error ("Address requested for identifier \"%s\" which is in a register.",
675 SYMBOL_NAME (var));
676 break;
677
678 default:
679 error ("Can't take address of \"%s\" which isn't an lvalue.",
680 SYMBOL_NAME (var));
681 break;
682 }
683 return 0; /* For lint -- never reached */
684 }