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