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