1e93f7393Sniklas /* Find a variable's value in memory, for GDB, the GNU debugger.
2b725ae77Skettenis
3b725ae77Skettenis Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
4b725ae77Skettenis 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 Free Software
5b725ae77Skettenis Foundation, Inc.
6e93f7393Sniklas
7e93f7393Sniklas This file is part of GDB.
8e93f7393Sniklas
9e93f7393Sniklas This program is free software; you can redistribute it and/or modify
10e93f7393Sniklas it under the terms of the GNU General Public License as published by
11e93f7393Sniklas the Free Software Foundation; either version 2 of the License, or
12e93f7393Sniklas (at your option) any later version.
13e93f7393Sniklas
14e93f7393Sniklas This program is distributed in the hope that it will be useful,
15e93f7393Sniklas but WITHOUT ANY WARRANTY; without even the implied warranty of
16e93f7393Sniklas MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17e93f7393Sniklas GNU General Public License for more details.
18e93f7393Sniklas
19e93f7393Sniklas You should have received a copy of the GNU General Public License
20e93f7393Sniklas along with this program; if not, write to the Free Software
21b725ae77Skettenis Foundation, Inc., 59 Temple Place - Suite 330,
22b725ae77Skettenis Boston, MA 02111-1307, USA. */
23e93f7393Sniklas
24e93f7393Sniklas #include "defs.h"
25e93f7393Sniklas #include "symtab.h"
26e93f7393Sniklas #include "gdbtypes.h"
27e93f7393Sniklas #include "frame.h"
28e93f7393Sniklas #include "value.h"
29e93f7393Sniklas #include "gdbcore.h"
30e93f7393Sniklas #include "inferior.h"
31e93f7393Sniklas #include "target.h"
32e93f7393Sniklas #include "gdb_string.h"
33b725ae77Skettenis #include "gdb_assert.h"
34e93f7393Sniklas #include "floatformat.h"
35b725ae77Skettenis #include "symfile.h" /* for overlay functions */
36b725ae77Skettenis #include "regcache.h"
37b725ae77Skettenis #include "user-regs.h"
38b725ae77Skettenis #include "block.h"
39e93f7393Sniklas
40e93f7393Sniklas /* Basic byte-swapping routines. GDB has needed these for a long time...
41e93f7393Sniklas All extract a target-format integer at ADDR which is LEN bytes long. */
42e93f7393Sniklas
43e93f7393Sniklas #if TARGET_CHAR_BIT != 8 || HOST_CHAR_BIT != 8
44e93f7393Sniklas /* 8 bit characters are a pretty safe assumption these days, so we
45e93f7393Sniklas assume it throughout all these swapping routines. If we had to deal with
46e93f7393Sniklas 9 bit characters, we would need to make len be in bits and would have
47e93f7393Sniklas to re-write these routines... */
48e93f7393Sniklas you lose
49e93f7393Sniklas #endif
50e93f7393Sniklas
51e93f7393Sniklas LONGEST
extract_signed_integer(const void * addr,int len)52b725ae77Skettenis extract_signed_integer (const void *addr, int len)
53e93f7393Sniklas {
54e93f7393Sniklas LONGEST retval;
55b725ae77Skettenis const unsigned char *p;
56b725ae77Skettenis const unsigned char *startaddr = addr;
57b725ae77Skettenis const unsigned char *endaddr = startaddr + len;
58e93f7393Sniklas
59e93f7393Sniklas if (len > (int) sizeof (LONGEST))
60e93f7393Sniklas error ("\
61e93f7393Sniklas That operation is not available on integers of more than %d bytes.",
62b725ae77Skettenis (int) sizeof (LONGEST));
63e93f7393Sniklas
64e93f7393Sniklas /* Start at the most significant end of the integer, and work towards
65e93f7393Sniklas the least significant. */
66b725ae77Skettenis if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
67e93f7393Sniklas {
68e93f7393Sniklas p = startaddr;
69e93f7393Sniklas /* Do the sign extension once at the start. */
70e93f7393Sniklas retval = ((LONGEST) * p ^ 0x80) - 0x80;
71e93f7393Sniklas for (++p; p < endaddr; ++p)
72e93f7393Sniklas retval = (retval << 8) | *p;
73e93f7393Sniklas }
74e93f7393Sniklas else
75e93f7393Sniklas {
76e93f7393Sniklas p = endaddr - 1;
77e93f7393Sniklas /* Do the sign extension once at the start. */
78e93f7393Sniklas retval = ((LONGEST) * p ^ 0x80) - 0x80;
79e93f7393Sniklas for (--p; p >= startaddr; --p)
80e93f7393Sniklas retval = (retval << 8) | *p;
81e93f7393Sniklas }
82e93f7393Sniklas return retval;
83e93f7393Sniklas }
84e93f7393Sniklas
85b725ae77Skettenis ULONGEST
extract_unsigned_integer(const void * addr,int len)86b725ae77Skettenis extract_unsigned_integer (const void *addr, int len)
87e93f7393Sniklas {
88b725ae77Skettenis ULONGEST retval;
89b725ae77Skettenis const unsigned char *p;
90b725ae77Skettenis const unsigned char *startaddr = addr;
91b725ae77Skettenis const unsigned char *endaddr = startaddr + len;
92e93f7393Sniklas
93b725ae77Skettenis if (len > (int) sizeof (ULONGEST))
94e93f7393Sniklas error ("\
95e93f7393Sniklas That operation is not available on integers of more than %d bytes.",
96b725ae77Skettenis (int) sizeof (ULONGEST));
97e93f7393Sniklas
98e93f7393Sniklas /* Start at the most significant end of the integer, and work towards
99e93f7393Sniklas the least significant. */
100e93f7393Sniklas retval = 0;
101b725ae77Skettenis if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
102e93f7393Sniklas {
103e93f7393Sniklas for (p = startaddr; p < endaddr; ++p)
104e93f7393Sniklas retval = (retval << 8) | *p;
105e93f7393Sniklas }
106e93f7393Sniklas else
107e93f7393Sniklas {
108e93f7393Sniklas for (p = endaddr - 1; p >= startaddr; --p)
109e93f7393Sniklas retval = (retval << 8) | *p;
110e93f7393Sniklas }
111e93f7393Sniklas return retval;
112e93f7393Sniklas }
113e93f7393Sniklas
114e93f7393Sniklas /* Sometimes a long long unsigned integer can be extracted as a
115e93f7393Sniklas LONGEST value. This is done so that we can print these values
116e93f7393Sniklas better. If this integer can be converted to a LONGEST, this
117e93f7393Sniklas function returns 1 and sets *PVAL. Otherwise it returns 0. */
118e93f7393Sniklas
119e93f7393Sniklas int
extract_long_unsigned_integer(const void * addr,int orig_len,LONGEST * pval)120b725ae77Skettenis extract_long_unsigned_integer (const void *addr, int orig_len, LONGEST *pval)
121e93f7393Sniklas {
122e93f7393Sniklas char *p, *first_addr;
123e93f7393Sniklas int len;
124e93f7393Sniklas
125e93f7393Sniklas len = orig_len;
126b725ae77Skettenis if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
127e93f7393Sniklas {
128e93f7393Sniklas for (p = (char *) addr;
129e93f7393Sniklas len > (int) sizeof (LONGEST) && p < (char *) addr + orig_len;
130e93f7393Sniklas p++)
131e93f7393Sniklas {
132e93f7393Sniklas if (*p == 0)
133e93f7393Sniklas len--;
134e93f7393Sniklas else
135e93f7393Sniklas break;
136e93f7393Sniklas }
137e93f7393Sniklas first_addr = p;
138e93f7393Sniklas }
139e93f7393Sniklas else
140e93f7393Sniklas {
141e93f7393Sniklas first_addr = (char *) addr;
142e93f7393Sniklas for (p = (char *) addr + orig_len - 1;
143e93f7393Sniklas len > (int) sizeof (LONGEST) && p >= (char *) addr;
144e93f7393Sniklas p--)
145e93f7393Sniklas {
146e93f7393Sniklas if (*p == 0)
147e93f7393Sniklas len--;
148e93f7393Sniklas else
149e93f7393Sniklas break;
150e93f7393Sniklas }
151e93f7393Sniklas }
152e93f7393Sniklas
153e93f7393Sniklas if (len <= (int) sizeof (LONGEST))
154e93f7393Sniklas {
155e93f7393Sniklas *pval = (LONGEST) extract_unsigned_integer (first_addr,
156e93f7393Sniklas sizeof (LONGEST));
157e93f7393Sniklas return 1;
158e93f7393Sniklas }
159e93f7393Sniklas
160e93f7393Sniklas return 0;
161e93f7393Sniklas }
162e93f7393Sniklas
163b725ae77Skettenis
164b725ae77Skettenis /* Treat the bytes at BUF as a pointer of type TYPE, and return the
165b725ae77Skettenis address it represents. */
166e93f7393Sniklas CORE_ADDR
extract_typed_address(const void * buf,struct type * type)167b725ae77Skettenis extract_typed_address (const void *buf, struct type *type)
168e93f7393Sniklas {
169b725ae77Skettenis if (TYPE_CODE (type) != TYPE_CODE_PTR
170b725ae77Skettenis && TYPE_CODE (type) != TYPE_CODE_REF)
171b725ae77Skettenis internal_error (__FILE__, __LINE__,
172b725ae77Skettenis "extract_typed_address: "
173b725ae77Skettenis "type is not a pointer or reference");
174b725ae77Skettenis
175b725ae77Skettenis return POINTER_TO_ADDRESS (type, buf);
176e93f7393Sniklas }
177e93f7393Sniklas
178b725ae77Skettenis
179e93f7393Sniklas void
store_signed_integer(void * addr,int len,LONGEST val)180b725ae77Skettenis store_signed_integer (void *addr, int len, LONGEST val)
181e93f7393Sniklas {
182e93f7393Sniklas unsigned char *p;
183e93f7393Sniklas unsigned char *startaddr = (unsigned char *) addr;
184e93f7393Sniklas unsigned char *endaddr = startaddr + len;
185e93f7393Sniklas
186e93f7393Sniklas /* Start at the least significant end of the integer, and work towards
187e93f7393Sniklas the most significant. */
188b725ae77Skettenis if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
189e93f7393Sniklas {
190e93f7393Sniklas for (p = endaddr - 1; p >= startaddr; --p)
191e93f7393Sniklas {
192e93f7393Sniklas *p = val & 0xff;
193e93f7393Sniklas val >>= 8;
194e93f7393Sniklas }
195e93f7393Sniklas }
196e93f7393Sniklas else
197e93f7393Sniklas {
198e93f7393Sniklas for (p = startaddr; p < endaddr; ++p)
199e93f7393Sniklas {
200e93f7393Sniklas *p = val & 0xff;
201e93f7393Sniklas val >>= 8;
202e93f7393Sniklas }
203e93f7393Sniklas }
204e93f7393Sniklas }
205e93f7393Sniklas
206e93f7393Sniklas void
store_unsigned_integer(void * addr,int len,ULONGEST val)207b725ae77Skettenis store_unsigned_integer (void *addr, int len, ULONGEST val)
208e93f7393Sniklas {
209e93f7393Sniklas unsigned char *p;
210e93f7393Sniklas unsigned char *startaddr = (unsigned char *) addr;
211e93f7393Sniklas unsigned char *endaddr = startaddr + len;
212e93f7393Sniklas
213e93f7393Sniklas /* Start at the least significant end of the integer, and work towards
214e93f7393Sniklas the most significant. */
215b725ae77Skettenis if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
216e93f7393Sniklas {
217e93f7393Sniklas for (p = endaddr - 1; p >= startaddr; --p)
218e93f7393Sniklas {
219e93f7393Sniklas *p = val & 0xff;
220e93f7393Sniklas val >>= 8;
221e93f7393Sniklas }
222e93f7393Sniklas }
223e93f7393Sniklas else
224e93f7393Sniklas {
225e93f7393Sniklas for (p = startaddr; p < endaddr; ++p)
226e93f7393Sniklas {
227e93f7393Sniklas *p = val & 0xff;
228e93f7393Sniklas val >>= 8;
229e93f7393Sniklas }
230e93f7393Sniklas }
231e93f7393Sniklas }
232e93f7393Sniklas
233b725ae77Skettenis /* Store the address ADDR as a pointer of type TYPE at BUF, in target
234b725ae77Skettenis form. */
235e93f7393Sniklas void
store_typed_address(void * buf,struct type * type,CORE_ADDR addr)236b725ae77Skettenis store_typed_address (void *buf, struct type *type, CORE_ADDR addr)
237e93f7393Sniklas {
238b725ae77Skettenis if (TYPE_CODE (type) != TYPE_CODE_PTR
239b725ae77Skettenis && TYPE_CODE (type) != TYPE_CODE_REF)
240b725ae77Skettenis internal_error (__FILE__, __LINE__,
241b725ae77Skettenis "store_typed_address: "
242b725ae77Skettenis "type is not a pointer or reference");
243e93f7393Sniklas
244b725ae77Skettenis ADDRESS_TO_POINTER (type, buf, addr);
245e93f7393Sniklas }
246e93f7393Sniklas
247e93f7393Sniklas
248e93f7393Sniklas
249b725ae77Skettenis /* Return a `value' with the contents of (virtual or cooked) register
250b725ae77Skettenis REGNUM as found in the specified FRAME. The register's type is
251b725ae77Skettenis determined by register_type().
252e93f7393Sniklas
253b725ae77Skettenis NOTE: returns NULL if register value is not available. Caller will
254b725ae77Skettenis check return value or die! */
255e93f7393Sniklas
256b725ae77Skettenis struct value *
value_of_register(int regnum,struct frame_info * frame)257b725ae77Skettenis value_of_register (int regnum, struct frame_info *frame)
258e93f7393Sniklas {
259e93f7393Sniklas CORE_ADDR addr;
260e93f7393Sniklas int optim;
261b725ae77Skettenis struct value *reg_val;
262b725ae77Skettenis int realnum;
263b725ae77Skettenis char raw_buffer[MAX_REGISTER_SIZE];
264e93f7393Sniklas enum lval_type lval;
265e93f7393Sniklas
266b725ae77Skettenis /* User registers lie completely outside of the range of normal
267b725ae77Skettenis registers. Catch them early so that the target never sees them. */
268b725ae77Skettenis if (regnum >= NUM_REGS + NUM_PSEUDO_REGS)
269b725ae77Skettenis return value_of_user_reg (regnum, frame);
270e93f7393Sniklas
271b725ae77Skettenis frame_register (frame, regnum, &optim, &lval, &addr, &realnum, raw_buffer);
272b725ae77Skettenis
273b725ae77Skettenis /* FIXME: cagney/2002-05-15: This test is just bogus.
274b725ae77Skettenis
275b725ae77Skettenis It indicates that the target failed to supply a value for a
276b725ae77Skettenis register because it was "not available" at this time. Problem
277b725ae77Skettenis is, the target still has the register and so get saved_register()
278b725ae77Skettenis may be returning a value saved on the stack. */
279b725ae77Skettenis
280b725ae77Skettenis if (register_cached (regnum) < 0)
281b725ae77Skettenis return NULL; /* register value not available */
282b725ae77Skettenis
283b725ae77Skettenis reg_val = allocate_value (register_type (current_gdbarch, regnum));
284e93f7393Sniklas
285e93f7393Sniklas memcpy (VALUE_CONTENTS_RAW (reg_val), raw_buffer,
286*63addd46Skettenis register_size (current_gdbarch, regnum));
287e93f7393Sniklas VALUE_LVAL (reg_val) = lval;
288e93f7393Sniklas VALUE_ADDRESS (reg_val) = addr;
289e93f7393Sniklas VALUE_REGNO (reg_val) = regnum;
290e93f7393Sniklas VALUE_OPTIMIZED_OUT (reg_val) = optim;
291e93f7393Sniklas return reg_val;
292e93f7393Sniklas }
293e93f7393Sniklas
294b725ae77Skettenis /* Given a pointer of type TYPE in target form in BUF, return the
295b725ae77Skettenis address it represents. */
296e93f7393Sniklas CORE_ADDR
unsigned_pointer_to_address(struct type * type,const void * buf)297b725ae77Skettenis unsigned_pointer_to_address (struct type *type, const void *buf)
298e93f7393Sniklas {
299b725ae77Skettenis return extract_unsigned_integer (buf, TYPE_LENGTH (type));
300e93f7393Sniklas }
301e93f7393Sniklas
302e93f7393Sniklas CORE_ADDR
signed_pointer_to_address(struct type * type,const void * buf)303b725ae77Skettenis signed_pointer_to_address (struct type *type, const void *buf)
304e93f7393Sniklas {
305b725ae77Skettenis return extract_signed_integer (buf, TYPE_LENGTH (type));
306e93f7393Sniklas }
307e93f7393Sniklas
308b725ae77Skettenis /* Given an address, store it as a pointer of type TYPE in target
309b725ae77Skettenis format in BUF. */
310e93f7393Sniklas void
unsigned_address_to_pointer(struct type * type,void * buf,CORE_ADDR addr)311b725ae77Skettenis unsigned_address_to_pointer (struct type *type, void *buf, CORE_ADDR addr)
312e93f7393Sniklas {
313b725ae77Skettenis store_unsigned_integer (buf, TYPE_LENGTH (type), addr);
314e93f7393Sniklas }
315e93f7393Sniklas
316e93f7393Sniklas void
address_to_signed_pointer(struct type * type,void * buf,CORE_ADDR addr)317b725ae77Skettenis address_to_signed_pointer (struct type *type, void *buf, CORE_ADDR addr)
318e93f7393Sniklas {
319b725ae77Skettenis store_signed_integer (buf, TYPE_LENGTH (type), addr);
320e93f7393Sniklas }
321e93f7393Sniklas
322e93f7393Sniklas /* Will calling read_var_value or locate_var_value on SYM end
323e93f7393Sniklas up caring what frame it is being evaluated relative to? SYM must
324e93f7393Sniklas be non-NULL. */
325e93f7393Sniklas int
symbol_read_needs_frame(struct symbol * sym)326b725ae77Skettenis symbol_read_needs_frame (struct symbol *sym)
327e93f7393Sniklas {
328e93f7393Sniklas switch (SYMBOL_CLASS (sym))
329e93f7393Sniklas {
330e93f7393Sniklas /* All cases listed explicitly so that gcc -Wall will detect it if
331e93f7393Sniklas we failed to consider one. */
332b725ae77Skettenis case LOC_COMPUTED:
333b725ae77Skettenis case LOC_COMPUTED_ARG:
334b725ae77Skettenis /* FIXME: cagney/2004-01-26: It should be possible to
335b725ae77Skettenis unconditionally call the SYMBOL_OPS method when available.
336b725ae77Skettenis Unfortunately DWARF 2 stores the frame-base (instead of the
337b725ae77Skettenis function) location in a function's symbol. Oops! For the
338b725ae77Skettenis moment enable this when/where applicable. */
339b725ae77Skettenis return SYMBOL_OPS (sym)->read_needs_frame (sym);
340b725ae77Skettenis
341e93f7393Sniklas case LOC_REGISTER:
342e93f7393Sniklas case LOC_ARG:
343e93f7393Sniklas case LOC_REF_ARG:
344e93f7393Sniklas case LOC_REGPARM:
345e93f7393Sniklas case LOC_REGPARM_ADDR:
346e93f7393Sniklas case LOC_LOCAL:
347e93f7393Sniklas case LOC_LOCAL_ARG:
348e93f7393Sniklas case LOC_BASEREG:
349e93f7393Sniklas case LOC_BASEREG_ARG:
350b725ae77Skettenis case LOC_HP_THREAD_LOCAL_STATIC:
351e93f7393Sniklas return 1;
352e93f7393Sniklas
353e93f7393Sniklas case LOC_UNDEF:
354e93f7393Sniklas case LOC_CONST:
355e93f7393Sniklas case LOC_STATIC:
356b725ae77Skettenis case LOC_INDIRECT:
357e93f7393Sniklas case LOC_TYPEDEF:
358e93f7393Sniklas
359e93f7393Sniklas case LOC_LABEL:
360e93f7393Sniklas /* Getting the address of a label can be done independently of the block,
361e93f7393Sniklas even if some *uses* of that address wouldn't work so well without
362e93f7393Sniklas the right frame. */
363e93f7393Sniklas
364e93f7393Sniklas case LOC_BLOCK:
365e93f7393Sniklas case LOC_CONST_BYTES:
366e93f7393Sniklas case LOC_UNRESOLVED:
367e93f7393Sniklas case LOC_OPTIMIZED_OUT:
368e93f7393Sniklas return 0;
369e93f7393Sniklas }
370e93f7393Sniklas return 1;
371e93f7393Sniklas }
372e93f7393Sniklas
373e93f7393Sniklas /* Given a struct symbol for a variable,
374e93f7393Sniklas and a stack frame id, read the value of the variable
375e93f7393Sniklas and return a (pointer to a) struct value containing the value.
376e93f7393Sniklas If the variable cannot be found, return a zero pointer.
377b725ae77Skettenis If FRAME is NULL, use the deprecated_selected_frame. */
378e93f7393Sniklas
379b725ae77Skettenis struct value *
read_var_value(struct symbol * var,struct frame_info * frame)380b725ae77Skettenis read_var_value (struct symbol *var, struct frame_info *frame)
381e93f7393Sniklas {
382b725ae77Skettenis struct value *v;
383e93f7393Sniklas struct type *type = SYMBOL_TYPE (var);
384e93f7393Sniklas CORE_ADDR addr;
385b725ae77Skettenis int len;
386e93f7393Sniklas
387e93f7393Sniklas v = allocate_value (type);
388e93f7393Sniklas VALUE_LVAL (v) = lval_memory; /* The most likely possibility. */
389b725ae77Skettenis VALUE_BFD_SECTION (v) = SYMBOL_BFD_SECTION (var);
390b725ae77Skettenis
391e93f7393Sniklas len = TYPE_LENGTH (type);
392e93f7393Sniklas
393b725ae77Skettenis
394b725ae77Skettenis /* FIXME drow/2003-09-06: this call to the selected frame should be
395b725ae77Skettenis pushed upwards to the callers. */
396b725ae77Skettenis if (frame == NULL)
397b725ae77Skettenis frame = deprecated_safe_get_selected_frame ();
398e93f7393Sniklas
399e93f7393Sniklas switch (SYMBOL_CLASS (var))
400e93f7393Sniklas {
401e93f7393Sniklas case LOC_CONST:
402e93f7393Sniklas /* Put the constant back in target format. */
403e93f7393Sniklas store_signed_integer (VALUE_CONTENTS_RAW (v), len,
404e93f7393Sniklas (LONGEST) SYMBOL_VALUE (var));
405e93f7393Sniklas VALUE_LVAL (v) = not_lval;
406e93f7393Sniklas return v;
407e93f7393Sniklas
408e93f7393Sniklas case LOC_LABEL:
409e93f7393Sniklas /* Put the constant back in target format. */
410b725ae77Skettenis if (overlay_debugging)
411b725ae77Skettenis {
412b725ae77Skettenis CORE_ADDR addr
413b725ae77Skettenis = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
414b725ae77Skettenis SYMBOL_BFD_SECTION (var));
415b725ae77Skettenis store_typed_address (VALUE_CONTENTS_RAW (v), type, addr);
416b725ae77Skettenis }
417b725ae77Skettenis else
418b725ae77Skettenis store_typed_address (VALUE_CONTENTS_RAW (v), type,
419b725ae77Skettenis SYMBOL_VALUE_ADDRESS (var));
420e93f7393Sniklas VALUE_LVAL (v) = not_lval;
421e93f7393Sniklas return v;
422e93f7393Sniklas
423e93f7393Sniklas case LOC_CONST_BYTES:
424e93f7393Sniklas {
425e93f7393Sniklas char *bytes_addr;
426e93f7393Sniklas bytes_addr = SYMBOL_VALUE_BYTES (var);
427e93f7393Sniklas memcpy (VALUE_CONTENTS_RAW (v), bytes_addr, len);
428e93f7393Sniklas VALUE_LVAL (v) = not_lval;
429e93f7393Sniklas return v;
430e93f7393Sniklas }
431e93f7393Sniklas
432e93f7393Sniklas case LOC_STATIC:
433b725ae77Skettenis if (overlay_debugging)
434b725ae77Skettenis addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
435b725ae77Skettenis SYMBOL_BFD_SECTION (var));
436b725ae77Skettenis else
437e93f7393Sniklas addr = SYMBOL_VALUE_ADDRESS (var);
438e93f7393Sniklas break;
439e93f7393Sniklas
440b725ae77Skettenis case LOC_INDIRECT:
441b725ae77Skettenis {
442b725ae77Skettenis /* The import slot does not have a real address in it from the
443b725ae77Skettenis dynamic loader (dld.sl on HP-UX), if the target hasn't
444b725ae77Skettenis begun execution yet, so check for that. */
445b725ae77Skettenis CORE_ADDR locaddr;
446b725ae77Skettenis struct value *loc;
447b725ae77Skettenis if (!target_has_execution)
448b725ae77Skettenis error ("\
449b725ae77Skettenis Attempt to access variable defined in different shared object or load module when\n\
450b725ae77Skettenis addresses have not been bound by the dynamic loader. Try again when executable is running.");
451b725ae77Skettenis
452b725ae77Skettenis locaddr = SYMBOL_VALUE_ADDRESS (var);
453b725ae77Skettenis loc = value_at (lookup_pointer_type (type), locaddr, NULL);
454b725ae77Skettenis addr = value_as_address (loc);
455b725ae77Skettenis }
456b725ae77Skettenis
457e93f7393Sniklas case LOC_ARG:
458e93f7393Sniklas if (frame == NULL)
459e93f7393Sniklas return 0;
460b725ae77Skettenis addr = get_frame_args_address (frame);
461e93f7393Sniklas if (!addr)
462e93f7393Sniklas return 0;
463e93f7393Sniklas addr += SYMBOL_VALUE (var);
464e93f7393Sniklas break;
465e93f7393Sniklas
466e93f7393Sniklas case LOC_REF_ARG:
467b725ae77Skettenis {
468b725ae77Skettenis struct value *ref;
469b725ae77Skettenis CORE_ADDR argref;
470e93f7393Sniklas if (frame == NULL)
471e93f7393Sniklas return 0;
472b725ae77Skettenis argref = get_frame_args_address (frame);
473b725ae77Skettenis if (!argref)
474e93f7393Sniklas return 0;
475b725ae77Skettenis argref += SYMBOL_VALUE (var);
476b725ae77Skettenis ref = value_at (lookup_pointer_type (type), argref, NULL);
477b725ae77Skettenis addr = value_as_address (ref);
478e93f7393Sniklas break;
479b725ae77Skettenis }
480e93f7393Sniklas
481e93f7393Sniklas case LOC_LOCAL:
482e93f7393Sniklas case LOC_LOCAL_ARG:
483e93f7393Sniklas if (frame == NULL)
484e93f7393Sniklas return 0;
485b725ae77Skettenis addr = get_frame_locals_address (frame);
486e93f7393Sniklas addr += SYMBOL_VALUE (var);
487e93f7393Sniklas break;
488e93f7393Sniklas
489e93f7393Sniklas case LOC_BASEREG:
490e93f7393Sniklas case LOC_BASEREG_ARG:
491b725ae77Skettenis case LOC_HP_THREAD_LOCAL_STATIC:
492e93f7393Sniklas {
493b725ae77Skettenis struct value *regval;
494b725ae77Skettenis
495b725ae77Skettenis regval = value_from_register (lookup_pointer_type (type),
496b725ae77Skettenis SYMBOL_BASEREG (var), frame);
497b725ae77Skettenis if (regval == NULL)
498b725ae77Skettenis error ("Value of base register not available.");
499b725ae77Skettenis addr = value_as_address (regval);
500e93f7393Sniklas addr += SYMBOL_VALUE (var);
501e93f7393Sniklas break;
502e93f7393Sniklas }
503e93f7393Sniklas
504e93f7393Sniklas case LOC_TYPEDEF:
505e93f7393Sniklas error ("Cannot look up value of a typedef");
506e93f7393Sniklas break;
507e93f7393Sniklas
508e93f7393Sniklas case LOC_BLOCK:
509b725ae77Skettenis if (overlay_debugging)
510b725ae77Skettenis VALUE_ADDRESS (v) = symbol_overlayed_address
511b725ae77Skettenis (BLOCK_START (SYMBOL_BLOCK_VALUE (var)), SYMBOL_BFD_SECTION (var));
512b725ae77Skettenis else
513e93f7393Sniklas VALUE_ADDRESS (v) = BLOCK_START (SYMBOL_BLOCK_VALUE (var));
514e93f7393Sniklas return v;
515e93f7393Sniklas
516e93f7393Sniklas case LOC_REGISTER:
517e93f7393Sniklas case LOC_REGPARM:
518e93f7393Sniklas case LOC_REGPARM_ADDR:
519e93f7393Sniklas {
520e93f7393Sniklas struct block *b;
521b725ae77Skettenis int regno = SYMBOL_VALUE (var);
522b725ae77Skettenis struct value *regval;
523e93f7393Sniklas
524e93f7393Sniklas if (frame == NULL)
525e93f7393Sniklas return 0;
526b725ae77Skettenis b = get_frame_block (frame, 0);
527e93f7393Sniklas
528e93f7393Sniklas if (SYMBOL_CLASS (var) == LOC_REGPARM_ADDR)
529e93f7393Sniklas {
530b725ae77Skettenis regval = value_from_register (lookup_pointer_type (type),
531b725ae77Skettenis regno,
532b725ae77Skettenis frame);
533b725ae77Skettenis
534b725ae77Skettenis if (regval == NULL)
535b725ae77Skettenis error ("Value of register variable not available.");
536b725ae77Skettenis
537b725ae77Skettenis addr = value_as_address (regval);
538e93f7393Sniklas VALUE_LVAL (v) = lval_memory;
539e93f7393Sniklas }
540e93f7393Sniklas else
541b725ae77Skettenis {
542b725ae77Skettenis regval = value_from_register (type, regno, frame);
543b725ae77Skettenis
544b725ae77Skettenis if (regval == NULL)
545b725ae77Skettenis error ("Value of register variable not available.");
546b725ae77Skettenis return regval;
547b725ae77Skettenis }
548e93f7393Sniklas }
549e93f7393Sniklas break;
550e93f7393Sniklas
551b725ae77Skettenis case LOC_COMPUTED:
552b725ae77Skettenis case LOC_COMPUTED_ARG:
553b725ae77Skettenis /* FIXME: cagney/2004-01-26: It should be possible to
554b725ae77Skettenis unconditionally call the SYMBOL_OPS method when available.
555b725ae77Skettenis Unfortunately DWARF 2 stores the frame-base (instead of the
556b725ae77Skettenis function) location in a function's symbol. Oops! For the
557b725ae77Skettenis moment enable this when/where applicable. */
558b725ae77Skettenis if (frame == 0 && SYMBOL_OPS (var)->read_needs_frame (var))
559b725ae77Skettenis return 0;
560b725ae77Skettenis return SYMBOL_OPS (var)->read_variable (var, frame);
561b725ae77Skettenis
562e93f7393Sniklas case LOC_UNRESOLVED:
563e93f7393Sniklas {
564e93f7393Sniklas struct minimal_symbol *msym;
565e93f7393Sniklas
566b725ae77Skettenis msym = lookup_minimal_symbol (DEPRECATED_SYMBOL_NAME (var), NULL, NULL);
567e93f7393Sniklas if (msym == NULL)
568e93f7393Sniklas return 0;
569b725ae77Skettenis if (overlay_debugging)
570b725ae77Skettenis addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (msym),
571b725ae77Skettenis SYMBOL_BFD_SECTION (msym));
572b725ae77Skettenis else
573e93f7393Sniklas addr = SYMBOL_VALUE_ADDRESS (msym);
574e93f7393Sniklas }
575e93f7393Sniklas break;
576e93f7393Sniklas
577e93f7393Sniklas case LOC_OPTIMIZED_OUT:
578e93f7393Sniklas VALUE_LVAL (v) = not_lval;
579e93f7393Sniklas VALUE_OPTIMIZED_OUT (v) = 1;
580e93f7393Sniklas return v;
581e93f7393Sniklas
582e93f7393Sniklas default:
583e93f7393Sniklas error ("Cannot look up value of a botched symbol.");
584e93f7393Sniklas break;
585e93f7393Sniklas }
586e93f7393Sniklas
587e93f7393Sniklas VALUE_ADDRESS (v) = addr;
588e93f7393Sniklas VALUE_LAZY (v) = 1;
589e93f7393Sniklas return v;
590e93f7393Sniklas }
591e93f7393Sniklas
592e93f7393Sniklas /* Return a value of type TYPE, stored in register REGNUM, in frame
593b725ae77Skettenis FRAME.
594e93f7393Sniklas
595b725ae77Skettenis NOTE: returns NULL if register value is not available.
596b725ae77Skettenis Caller will check return value or die! */
597b725ae77Skettenis
598b725ae77Skettenis struct value *
value_from_register(struct type * type,int regnum,struct frame_info * frame)599b725ae77Skettenis value_from_register (struct type *type, int regnum, struct frame_info *frame)
600e93f7393Sniklas {
601b725ae77Skettenis struct gdbarch *gdbarch = get_frame_arch (frame);
602b725ae77Skettenis struct value *v = allocate_value (type);
603e93f7393Sniklas CHECK_TYPEDEF (type);
604e93f7393Sniklas
605b725ae77Skettenis if (TYPE_LENGTH (type) == 0)
606e93f7393Sniklas {
607b725ae77Skettenis /* It doesn't matter much what we return for this: since the
608b725ae77Skettenis length is zero, it could be anything. But if allowed to see
609b725ae77Skettenis a zero-length type, the register-finding loop below will set
610b725ae77Skettenis neither mem_stor nor reg_stor, and then report an internal
611b725ae77Skettenis error.
612e93f7393Sniklas
613b725ae77Skettenis Zero-length types can legitimately arise from declarations
614b725ae77Skettenis like 'struct {}' (a GCC extension, not valid ISO C). GDB may
615b725ae77Skettenis also create them when it finds bogus debugging information;
616b725ae77Skettenis for example, in GCC 2.95.4 and binutils 2.11.93.0.2, the
617b725ae77Skettenis STABS BINCL->EXCL compression process can create bad type
618b725ae77Skettenis numbers. GDB reads these as TYPE_CODE_UNDEF types, with zero
619b725ae77Skettenis length. (That bug is actually the only known way to get a
620b725ae77Skettenis zero-length value allocated to a register --- which is what
621b725ae77Skettenis it takes to make it here.)
622b725ae77Skettenis
623b725ae77Skettenis We'll just attribute the value to the original register. */
624b725ae77Skettenis VALUE_LVAL (v) = lval_register;
625b725ae77Skettenis VALUE_ADDRESS (v) = regnum;
626b725ae77Skettenis VALUE_REGNO (v) = regnum;
627b725ae77Skettenis }
628b725ae77Skettenis else if (CONVERT_REGISTER_P (regnum, type))
629b725ae77Skettenis {
630b725ae77Skettenis /* The ISA/ABI need to something weird when obtaining the
631b725ae77Skettenis specified value from this register. It might need to
632b725ae77Skettenis re-order non-adjacent, starting with REGNUM (see MIPS and
633b725ae77Skettenis i386). It might need to convert the [float] register into
634b725ae77Skettenis the corresponding [integer] type (see Alpha). The assumption
635b725ae77Skettenis is that REGISTER_TO_VALUE populates the entire value
636b725ae77Skettenis including the location. */
637b725ae77Skettenis REGISTER_TO_VALUE (frame, regnum, type, VALUE_CONTENTS_RAW (v));
638b725ae77Skettenis VALUE_LVAL (v) = lval_reg_frame_relative;
639b725ae77Skettenis VALUE_FRAME_ID (v) = get_frame_id (frame);
640b725ae77Skettenis VALUE_FRAME_REGNUM (v) = regnum;
641b725ae77Skettenis }
642b725ae77Skettenis else
643b725ae77Skettenis {
644e93f7393Sniklas int local_regnum;
645e93f7393Sniklas int mem_stor = 0, reg_stor = 0;
646e93f7393Sniklas int mem_tracking = 1;
647e93f7393Sniklas CORE_ADDR last_addr = 0;
648e93f7393Sniklas CORE_ADDR first_addr = 0;
649b725ae77Skettenis int first_realnum = regnum;
650b725ae77Skettenis int len = TYPE_LENGTH (type);
651b725ae77Skettenis int value_bytes_copied;
652b725ae77Skettenis int optimized = 0;
653b725ae77Skettenis char *value_bytes = (char *) alloca (len + MAX_REGISTER_SIZE);
654e93f7393Sniklas
655e93f7393Sniklas /* Copy all of the data out, whereever it may be. */
656b725ae77Skettenis for (local_regnum = regnum, value_bytes_copied = 0;
657e93f7393Sniklas value_bytes_copied < len;
658*63addd46Skettenis (value_bytes_copied += register_size (current_gdbarch, local_regnum),
659e93f7393Sniklas ++local_regnum))
660e93f7393Sniklas {
661b725ae77Skettenis int realnum;
662b725ae77Skettenis int optim;
663b725ae77Skettenis enum lval_type lval;
664b725ae77Skettenis CORE_ADDR addr;
665b725ae77Skettenis frame_register (frame, local_regnum, &optim, &lval, &addr,
666b725ae77Skettenis &realnum, value_bytes + value_bytes_copied);
667b725ae77Skettenis optimized += optim;
668b725ae77Skettenis if (register_cached (local_regnum) == -1)
669b725ae77Skettenis return NULL; /* register value not available */
670e93f7393Sniklas
671e93f7393Sniklas if (regnum == local_regnum)
672b725ae77Skettenis {
673e93f7393Sniklas first_addr = addr;
674b725ae77Skettenis first_realnum = realnum;
675b725ae77Skettenis }
676e93f7393Sniklas if (lval == lval_register)
677e93f7393Sniklas reg_stor++;
678e93f7393Sniklas else
679e93f7393Sniklas {
680e93f7393Sniklas mem_stor++;
681e93f7393Sniklas
682b725ae77Skettenis mem_tracking = (mem_tracking
683e93f7393Sniklas && (regnum == local_regnum
684e93f7393Sniklas || addr == last_addr));
685e93f7393Sniklas }
686e93f7393Sniklas last_addr = addr;
687e93f7393Sniklas }
688e93f7393Sniklas
689b725ae77Skettenis /* FIXME: cagney/2003-06-04: Shouldn't this always use
690b725ae77Skettenis lval_reg_frame_relative? If it doesn't and the register's
691b725ae77Skettenis location changes (say after a resume) then this value is
692b725ae77Skettenis going to have wrong information. */
693e93f7393Sniklas if ((reg_stor && mem_stor)
694e93f7393Sniklas || (mem_stor && !mem_tracking))
695e93f7393Sniklas /* Mixed storage; all of the hassle we just went through was
696e93f7393Sniklas for some good purpose. */
697e93f7393Sniklas {
698e93f7393Sniklas VALUE_LVAL (v) = lval_reg_frame_relative;
699b725ae77Skettenis VALUE_FRAME_ID (v) = get_frame_id (frame);
700e93f7393Sniklas VALUE_FRAME_REGNUM (v) = regnum;
701e93f7393Sniklas }
702e93f7393Sniklas else if (mem_stor)
703e93f7393Sniklas {
704e93f7393Sniklas VALUE_LVAL (v) = lval_memory;
705e93f7393Sniklas VALUE_ADDRESS (v) = first_addr;
706e93f7393Sniklas }
707e93f7393Sniklas else if (reg_stor)
708e93f7393Sniklas {
709e93f7393Sniklas VALUE_LVAL (v) = lval_register;
710e93f7393Sniklas VALUE_ADDRESS (v) = first_addr;
711b725ae77Skettenis VALUE_REGNO (v) = first_realnum;
712e93f7393Sniklas }
713e93f7393Sniklas else
714b725ae77Skettenis internal_error (__FILE__, __LINE__,
715b725ae77Skettenis "value_from_register: Value not stored anywhere!");
716e93f7393Sniklas
717b725ae77Skettenis VALUE_OPTIMIZED_OUT (v) = optimized;
718e93f7393Sniklas
719e93f7393Sniklas /* Any structure stored in more than one register will always be
720b725ae77Skettenis an integral number of registers. Otherwise, you need to do
721e93f7393Sniklas some fiddling with the last register copied here for little
722e93f7393Sniklas endian machines. */
723b725ae77Skettenis if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
724*63addd46Skettenis && len < register_size (current_gdbarch, regnum))
725e93f7393Sniklas /* Big-endian, and we want less than full size. */
726*63addd46Skettenis VALUE_OFFSET (v) = register_size (current_gdbarch, regnum) - len;
727b725ae77Skettenis else
728b725ae77Skettenis VALUE_OFFSET (v) = 0;
729b725ae77Skettenis memcpy (VALUE_CONTENTS_RAW (v), value_bytes + VALUE_OFFSET (v), len);
730e93f7393Sniklas }
731e93f7393Sniklas return v;
732e93f7393Sniklas }
733b725ae77Skettenis
734e93f7393Sniklas
735e93f7393Sniklas /* Given a struct symbol for a variable or function,
736e93f7393Sniklas and a stack frame id,
737e93f7393Sniklas return a (pointer to a) struct value containing the properly typed
738e93f7393Sniklas address. */
739e93f7393Sniklas
740b725ae77Skettenis struct value *
locate_var_value(struct symbol * var,struct frame_info * frame)741b725ae77Skettenis locate_var_value (struct symbol *var, struct frame_info *frame)
742e93f7393Sniklas {
743e93f7393Sniklas CORE_ADDR addr = 0;
744e93f7393Sniklas struct type *type = SYMBOL_TYPE (var);
745b725ae77Skettenis struct value *lazy_value;
746e93f7393Sniklas
747e93f7393Sniklas /* Evaluate it first; if the result is a memory address, we're fine.
748e93f7393Sniklas Lazy evaluation pays off here. */
749e93f7393Sniklas
750e93f7393Sniklas lazy_value = read_var_value (var, frame);
751e93f7393Sniklas if (lazy_value == 0)
752b725ae77Skettenis error ("Address of \"%s\" is unknown.", SYMBOL_PRINT_NAME (var));
753e93f7393Sniklas
754e93f7393Sniklas if (VALUE_LAZY (lazy_value)
755e93f7393Sniklas || TYPE_CODE (type) == TYPE_CODE_FUNC)
756e93f7393Sniklas {
757b725ae77Skettenis struct value *val;
758b725ae77Skettenis
759e93f7393Sniklas addr = VALUE_ADDRESS (lazy_value);
760b725ae77Skettenis val = value_from_pointer (lookup_pointer_type (type), addr);
761b725ae77Skettenis VALUE_BFD_SECTION (val) = VALUE_BFD_SECTION (lazy_value);
762b725ae77Skettenis return val;
763e93f7393Sniklas }
764e93f7393Sniklas
765e93f7393Sniklas /* Not a memory address; check what the problem was. */
766e93f7393Sniklas switch (VALUE_LVAL (lazy_value))
767e93f7393Sniklas {
768e93f7393Sniklas case lval_register:
769b725ae77Skettenis gdb_assert (REGISTER_NAME (VALUE_REGNO (lazy_value)) != NULL
770b725ae77Skettenis && *REGISTER_NAME (VALUE_REGNO (lazy_value)) != '\0');
771b725ae77Skettenis error("Address requested for identifier "
772b725ae77Skettenis "\"%s\" which is in register $%s",
773b725ae77Skettenis SYMBOL_PRINT_NAME (var),
774b725ae77Skettenis REGISTER_NAME (VALUE_REGNO (lazy_value)));
775b725ae77Skettenis break;
776b725ae77Skettenis
777e93f7393Sniklas case lval_reg_frame_relative:
778b725ae77Skettenis gdb_assert (REGISTER_NAME (VALUE_FRAME_REGNUM (lazy_value)) != NULL
779b725ae77Skettenis && *REGISTER_NAME (VALUE_FRAME_REGNUM (lazy_value)) != '\0');
780b725ae77Skettenis error("Address requested for identifier "
781b725ae77Skettenis "\"%s\" which is in frame register $%s",
782b725ae77Skettenis SYMBOL_PRINT_NAME (var),
783b725ae77Skettenis REGISTER_NAME (VALUE_FRAME_REGNUM (lazy_value)));
784e93f7393Sniklas break;
785e93f7393Sniklas
786e93f7393Sniklas default:
787e93f7393Sniklas error ("Can't take address of \"%s\" which isn't an lvalue.",
788b725ae77Skettenis SYMBOL_PRINT_NAME (var));
789e93f7393Sniklas break;
790e93f7393Sniklas }
791e93f7393Sniklas return 0; /* For lint -- never reached */
792e93f7393Sniklas }
793