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