xref: /openbsd-src/gnu/usr.bin/binutils/gdb/findvar.c (revision 63addd46c1e40ca0f49488ddcdc4ab598023b0c1)
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