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