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