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