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