* tm-sparc.h, tm-sysv4.h, solib.h: Move shared lib definitions
[deliverable/binutils-gdb.git] / gdb / valops.c
CommitLineData
bd5635a1 1/* Perform non-arithmetic operations on values, for GDB.
e17960fb 2 Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
bd5635a1
RP
3
4This file is part of GDB.
5
06b6c733 6This program is free software; you can redistribute it and/or modify
bd5635a1 7it under the terms of the GNU General Public License as published by
06b6c733
JG
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
bd5635a1 10
06b6c733 11This program is distributed in the hope that it will be useful,
bd5635a1
RP
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
06b6c733
JG
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
bd5635a1
RP
19
20#include <stdio.h>
21#include "defs.h"
bd5635a1
RP
22#include "symtab.h"
23#include "value.h"
24#include "frame.h"
25#include "inferior.h"
26#include "gdbcore.h"
27#include "target.h"
28
29#include <errno.h>
30
31/* Local functions. */
32static value search_struct_field ();
33\f
34/* Cast value ARG2 to type TYPE and return as a value.
35 More general than a C cast: accepts any two types of the same length,
36 and if ARG2 is an lvalue it can be cast into anything at all. */
37/* In C++, casts may change pointer representations. */
38
39value
40value_cast (type, arg2)
41 struct type *type;
42 register value arg2;
43{
44 register enum type_code code1;
45 register enum type_code code2;
46 register int scalar;
47
48 /* Coerce arrays but not enums. Enums will work as-is
49 and coercing them would cause an infinite recursion. */
50 if (TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_ENUM)
51 COERCE_ARRAY (arg2);
52
53 code1 = TYPE_CODE (type);
54 code2 = TYPE_CODE (VALUE_TYPE (arg2));
55 scalar = (code2 == TYPE_CODE_INT || code2 == TYPE_CODE_FLT
56 || code2 == TYPE_CODE_ENUM);
57
58 if (code1 == TYPE_CODE_FLT && scalar)
59 return value_from_double (type, value_as_double (arg2));
60 else if ((code1 == TYPE_CODE_INT || code1 == TYPE_CODE_ENUM)
61 && (scalar || code2 == TYPE_CODE_PTR))
06b6c733 62 return value_from_longest (type, value_as_long (arg2));
bd5635a1
RP
63 else if (TYPE_LENGTH (type) == TYPE_LENGTH (VALUE_TYPE (arg2)))
64 {
65 if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
66 {
67 /* Look in the type of the source to see if it contains the
68 type of the target as a superclass. If so, we'll need to
69 offset the pointer rather than just change its type. */
70 struct type *t1 = TYPE_TARGET_TYPE (type);
71 struct type *t2 = TYPE_TARGET_TYPE (VALUE_TYPE (arg2));
2a5ec41d 72 if ( TYPE_CODE (t1) == TYPE_CODE_STRUCT
bd5635a1
RP
73 && TYPE_CODE (t2) == TYPE_CODE_STRUCT
74 && TYPE_NAME (t1) != 0) /* if name unknown, can't have supercl */
75 {
76 value v = search_struct_field (type_name_no_tag (t1),
d3bab255 77 value_ind (arg2), 0, t2, 1);
bd5635a1
RP
78 if (v)
79 {
80 v = value_addr (v);
81 VALUE_TYPE (v) = type;
82 return v;
83 }
84 }
85 /* No superclass found, just fall through to change ptr type. */
86 }
87 VALUE_TYPE (arg2) = type;
88 return arg2;
89 }
90 else if (VALUE_LVAL (arg2) == lval_memory)
91 {
92 return value_at_lazy (type, VALUE_ADDRESS (arg2) + VALUE_OFFSET (arg2));
93 }
d11c44f1
JG
94 else if (code1 == TYPE_CODE_VOID)
95 {
96 return value_zero (builtin_type_void, not_lval);
97 }
bd5635a1
RP
98 else
99 {
100 error ("Invalid cast.");
101 return 0;
102 }
103}
104
105/* Create a value of type TYPE that is zero, and return it. */
106
107value
108value_zero (type, lv)
109 struct type *type;
110 enum lval_type lv;
111{
112 register value val = allocate_value (type);
113
8e9a3f3b 114 memset (VALUE_CONTENTS (val), 0, TYPE_LENGTH (type));
bd5635a1
RP
115 VALUE_LVAL (val) = lv;
116
117 return val;
118}
119
120/* Return a value with type TYPE located at ADDR.
121
122 Call value_at only if the data needs to be fetched immediately;
123 if we can be 'lazy' and defer the fetch, perhaps indefinately, call
124 value_at_lazy instead. value_at_lazy simply records the address of
125 the data and sets the lazy-evaluation-required flag. The lazy flag
126 is tested in the VALUE_CONTENTS macro, which is used if and when
127 the contents are actually required. */
128
129value
130value_at (type, addr)
131 struct type *type;
132 CORE_ADDR addr;
133{
134 register value val = allocate_value (type);
135
136 read_memory (addr, VALUE_CONTENTS_RAW (val), TYPE_LENGTH (type));
137
138 VALUE_LVAL (val) = lval_memory;
139 VALUE_ADDRESS (val) = addr;
140
141 return val;
142}
143
144/* Return a lazy value with type TYPE located at ADDR (cf. value_at). */
145
146value
147value_at_lazy (type, addr)
148 struct type *type;
149 CORE_ADDR addr;
150{
151 register value val = allocate_value (type);
152
153 VALUE_LVAL (val) = lval_memory;
154 VALUE_ADDRESS (val) = addr;
155 VALUE_LAZY (val) = 1;
156
157 return val;
158}
159
160/* Called only from the VALUE_CONTENTS macro, if the current data for
161 a variable needs to be loaded into VALUE_CONTENTS(VAL). Fetches the
162 data from the user's process, and clears the lazy flag to indicate
163 that the data in the buffer is valid.
164
9cb602e1
JG
165 If the value is zero-length, we avoid calling read_memory, which would
166 abort. We mark the value as fetched anyway -- all 0 bytes of it.
167
bd5635a1
RP
168 This function returns a value because it is used in the VALUE_CONTENTS
169 macro as part of an expression, where a void would not work. The
170 value is ignored. */
171
172int
173value_fetch_lazy (val)
174 register value val;
175{
176 CORE_ADDR addr = VALUE_ADDRESS (val) + VALUE_OFFSET (val);
177
9cb602e1
JG
178 if (TYPE_LENGTH (VALUE_TYPE (val)))
179 read_memory (addr, VALUE_CONTENTS_RAW (val),
180 TYPE_LENGTH (VALUE_TYPE (val)));
bd5635a1
RP
181 VALUE_LAZY (val) = 0;
182 return 0;
183}
184
185
186/* Store the contents of FROMVAL into the location of TOVAL.
187 Return a new value with the location of TOVAL and contents of FROMVAL. */
188
189value
190value_assign (toval, fromval)
191 register value toval, fromval;
192{
193 register struct type *type = VALUE_TYPE (toval);
194 register value val;
195 char raw_buffer[MAX_REGISTER_RAW_SIZE];
196 char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
197 int use_buffer = 0;
198
199 COERCE_ARRAY (fromval);
8e9a3f3b 200 COERCE_REF (toval);
bd5635a1
RP
201
202 if (VALUE_LVAL (toval) != lval_internalvar)
203 fromval = value_cast (type, fromval);
204
205 /* If TOVAL is a special machine register requiring conversion
206 of program values to a special raw format,
207 convert FROMVAL's contents now, with result in `raw_buffer',
208 and set USE_BUFFER to the number of bytes to write. */
209
210 if (VALUE_REGNO (toval) >= 0
211 && REGISTER_CONVERTIBLE (VALUE_REGNO (toval)))
212 {
213 int regno = VALUE_REGNO (toval);
214 if (VALUE_TYPE (fromval) != REGISTER_VIRTUAL_TYPE (regno))
215 fromval = value_cast (REGISTER_VIRTUAL_TYPE (regno), fromval);
8e9a3f3b 216 memcpy (virtual_buffer, VALUE_CONTENTS (fromval),
bd5635a1
RP
217 REGISTER_VIRTUAL_SIZE (regno));
218 target_convert_from_virtual (regno, virtual_buffer, raw_buffer);
219 use_buffer = REGISTER_RAW_SIZE (regno);
220 }
221
222 switch (VALUE_LVAL (toval))
223 {
224 case lval_internalvar:
225 set_internalvar (VALUE_INTERNALVAR (toval), fromval);
226 break;
227
228 case lval_internalvar_component:
229 set_internalvar_component (VALUE_INTERNALVAR (toval),
230 VALUE_OFFSET (toval),
231 VALUE_BITPOS (toval),
232 VALUE_BITSIZE (toval),
233 fromval);
234 break;
235
236 case lval_memory:
237 if (VALUE_BITSIZE (toval))
238 {
239 int v; /* FIXME, this won't work for large bitfields */
240 read_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
241 &v, sizeof v);
e17960fb 242 modify_field ((char *) &v, (int) value_as_long (fromval),
bd5635a1
RP
243 VALUE_BITPOS (toval), VALUE_BITSIZE (toval));
244 write_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
245 (char *)&v, sizeof v);
246 }
247 else if (use_buffer)
248 write_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
249 raw_buffer, use_buffer);
250 else
251 write_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
252 VALUE_CONTENTS (fromval), TYPE_LENGTH (type));
253 break;
254
255 case lval_register:
256 if (VALUE_BITSIZE (toval))
257 {
258 int v;
259
260 read_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
e17960fb
JG
261 (char *) &v, sizeof v);
262 modify_field ((char *) &v, (int) value_as_long (fromval),
bd5635a1
RP
263 VALUE_BITPOS (toval), VALUE_BITSIZE (toval));
264 write_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
e17960fb 265 (char *) &v, sizeof v);
bd5635a1
RP
266 }
267 else if (use_buffer)
268 write_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
269 raw_buffer, use_buffer);
270 else
271 write_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
272 VALUE_CONTENTS (fromval), TYPE_LENGTH (type));
273 break;
274
275 case lval_reg_frame_relative:
276 {
277 /* value is stored in a series of registers in the frame
278 specified by the structure. Copy that value out, modify
279 it, and copy it back in. */
280 int amount_to_copy = (VALUE_BITSIZE (toval) ? 1 : TYPE_LENGTH (type));
281 int reg_size = REGISTER_RAW_SIZE (VALUE_FRAME_REGNUM (toval));
282 int byte_offset = VALUE_OFFSET (toval) % reg_size;
283 int reg_offset = VALUE_OFFSET (toval) / reg_size;
284 int amount_copied;
285 char *buffer = (char *) alloca (amount_to_copy);
286 int regno;
287 FRAME frame;
288
289 /* Figure out which frame this is in currently. */
290 for (frame = get_current_frame ();
291 frame && FRAME_FP (frame) != VALUE_FRAME (toval);
292 frame = get_prev_frame (frame))
293 ;
294
295 if (!frame)
296 error ("Value being assigned to is no longer active.");
297
298 amount_to_copy += (reg_size - amount_to_copy % reg_size);
299
300 /* Copy it out. */
301 for ((regno = VALUE_FRAME_REGNUM (toval) + reg_offset,
302 amount_copied = 0);
303 amount_copied < amount_to_copy;
304 amount_copied += reg_size, regno++)
305 {
306 get_saved_register (buffer + amount_copied,
307 (int *)NULL, (CORE_ADDR)NULL,
308 frame, regno, (enum lval_type *)NULL);
309 }
310
311 /* Modify what needs to be modified. */
312 if (VALUE_BITSIZE (toval))
313 modify_field (buffer + byte_offset,
314 (int) value_as_long (fromval),
315 VALUE_BITPOS (toval), VALUE_BITSIZE (toval));
316 else if (use_buffer)
317 bcopy (raw_buffer, buffer + byte_offset, use_buffer);
318 else
319 bcopy (VALUE_CONTENTS (fromval), buffer + byte_offset,
320 TYPE_LENGTH (type));
321
322 /* Copy it back. */
323 for ((regno = VALUE_FRAME_REGNUM (toval) + reg_offset,
324 amount_copied = 0);
325 amount_copied < amount_to_copy;
326 amount_copied += reg_size, regno++)
327 {
328 enum lval_type lval;
329 CORE_ADDR addr;
330 int optim;
331
332 /* Just find out where to put it. */
333 get_saved_register ((char *)NULL,
334 &optim, &addr, frame, regno, &lval);
335
336 if (optim)
337 error ("Attempt to assign to a value that was optimized out.");
338 if (lval == lval_memory)
339 write_memory (addr, buffer + amount_copied, reg_size);
340 else if (lval == lval_register)
341 write_register_bytes (addr, buffer + amount_copied, reg_size);
342 else
343 error ("Attempt to assign to an unmodifiable value.");
344 }
345 }
346 break;
347
348
349 default:
350 error ("Left side of = operation is not an lvalue.");
351 }
352
353 /* Return a value just like TOVAL except with the contents of FROMVAL
354 (except in the case of the type if TOVAL is an internalvar). */
355
356 if (VALUE_LVAL (toval) == lval_internalvar
357 || VALUE_LVAL (toval) == lval_internalvar_component)
358 {
359 type = VALUE_TYPE (fromval);
360 }
361
362 val = allocate_value (type);
363 bcopy (toval, val, VALUE_CONTENTS_RAW (val) - (char *) val);
364 bcopy (VALUE_CONTENTS (fromval), VALUE_CONTENTS_RAW (val), TYPE_LENGTH (type));
365 VALUE_TYPE (val) = type;
366
367 return val;
368}
369
370/* Extend a value VAL to COUNT repetitions of its type. */
371
372value
373value_repeat (arg1, count)
374 value arg1;
375 int count;
376{
377 register value val;
378
379 if (VALUE_LVAL (arg1) != lval_memory)
380 error ("Only values in memory can be extended with '@'.");
381 if (count < 1)
382 error ("Invalid number %d of repetitions.", count);
383
384 val = allocate_repeat_value (VALUE_TYPE (arg1), count);
385
386 read_memory (VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1),
387 VALUE_CONTENTS_RAW (val),
388 TYPE_LENGTH (VALUE_TYPE (val)) * count);
389 VALUE_LVAL (val) = lval_memory;
390 VALUE_ADDRESS (val) = VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1);
391
392 return val;
393}
394
395value
396value_of_variable (var)
397 struct symbol *var;
398{
399 value val;
400
401 val = read_var_value (var, (FRAME) 0);
402 if (val == 0)
403 error ("Address of symbol \"%s\" is unknown.", SYMBOL_NAME (var));
404 return val;
405}
406
407/* Given a value which is an array, return a value which is
06b6c733
JG
408 a pointer to its first (actually, zeroth) element.
409 FIXME, this should be subtracting the array's lower bound. */
bd5635a1
RP
410
411value
412value_coerce_array (arg1)
413 value arg1;
414{
415 register struct type *type;
bd5635a1
RP
416
417 if (VALUE_LVAL (arg1) != lval_memory)
418 error ("Attempt to take address of value not located in memory.");
419
420 /* Get type of elements. */
421 if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_ARRAY)
422 type = TYPE_TARGET_TYPE (VALUE_TYPE (arg1));
423 else
424 /* A phony array made by value_repeat.
425 Its type is the type of the elements, not an array type. */
426 type = VALUE_TYPE (arg1);
427
06b6c733 428 return value_from_longest (lookup_pointer_type (type),
bd5635a1 429 (LONGEST) (VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1)));
bd5635a1
RP
430}
431
432/* Given a value which is a function, return a value which is a pointer
433 to it. */
434
435value
436value_coerce_function (arg1)
437 value arg1;
438{
bd5635a1
RP
439
440 if (VALUE_LVAL (arg1) != lval_memory)
441 error ("Attempt to take address of value not located in memory.");
442
06b6c733 443 return value_from_longest (lookup_pointer_type (VALUE_TYPE (arg1)),
bd5635a1 444 (LONGEST) (VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1)));
bd5635a1
RP
445}
446
447/* Return a pointer value for the object for which ARG1 is the contents. */
448
449value
450value_addr (arg1)
451 value arg1;
452{
e17960fb 453 extern value value_copy ();
8e9a3f3b
PB
454 struct type *type = VALUE_TYPE (arg1);
455 if (TYPE_CODE (type) == TYPE_CODE_REF)
456 {
457 /* Copy the value, but change the type from (T&) to (T*).
458 We keep the same location information, which is efficient,
459 and allows &(&X) to get the location containing the reference. */
460 value arg2 = value_copy (arg1);
461 VALUE_TYPE (arg2) = lookup_pointer_type (TYPE_TARGET_TYPE (type));
462 return arg2;
463 }
bd5635a1 464 if (VALUE_REPEATED (arg1)
8e9a3f3b 465 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
bd5635a1 466 return value_coerce_array (arg1);
8e9a3f3b 467 if (TYPE_CODE (type) == TYPE_CODE_FUNC)
bd5635a1
RP
468 return value_coerce_function (arg1);
469
470 if (VALUE_LVAL (arg1) != lval_memory)
471 error ("Attempt to take address of value not located in memory.");
472
8e9a3f3b 473 return value_from_longest (lookup_pointer_type (type),
bd5635a1 474 (LONGEST) (VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1)));
bd5635a1
RP
475}
476
477/* Given a value of a pointer type, apply the C unary * operator to it. */
478
479value
480value_ind (arg1)
481 value arg1;
482{
483 COERCE_ARRAY (arg1);
484
485 if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_MEMBER)
486 error ("not implemented: member types in value_ind");
487
488 /* Allow * on an integer so we can cast it to whatever we want.
489 This returns an int, which seems like the most C-like thing
490 to do. "long long" variables are rare enough that
491 BUILTIN_TYPE_LONGEST would seem to be a mistake. */
492 if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_INT)
493 return value_at (builtin_type_int,
494 (CORE_ADDR) value_as_long (arg1));
495 else if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_PTR)
496 return value_at_lazy (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)),
d11c44f1 497 value_as_pointer (arg1));
bd5635a1
RP
498 error ("Attempt to take contents of a non-pointer value.");
499 return 0; /* For lint -- never reached */
500}
501\f
502/* Pushing small parts of stack frames. */
503
504/* Push one word (the size of object that a register holds). */
505
506CORE_ADDR
507push_word (sp, buffer)
508 CORE_ADDR sp;
509 REGISTER_TYPE buffer;
510{
511 register int len = sizeof (REGISTER_TYPE);
512
f2ebc25f 513 SWAP_TARGET_AND_HOST (&buffer, len);
bd5635a1
RP
514#if 1 INNER_THAN 2
515 sp -= len;
516 write_memory (sp, (char *)&buffer, len);
517#else /* stack grows upward */
518 write_memory (sp, (char *)&buffer, len);
519 sp += len;
520#endif /* stack grows upward */
521
522 return sp;
523}
524
525/* Push LEN bytes with data at BUFFER. */
526
527CORE_ADDR
528push_bytes (sp, buffer, len)
529 CORE_ADDR sp;
530 char *buffer;
531 int len;
532{
533#if 1 INNER_THAN 2
534 sp -= len;
535 write_memory (sp, buffer, len);
536#else /* stack grows upward */
537 write_memory (sp, buffer, len);
538 sp += len;
539#endif /* stack grows upward */
540
541 return sp;
542}
543
544/* Push onto the stack the specified value VALUE. */
545
546CORE_ADDR
547value_push (sp, arg)
548 register CORE_ADDR sp;
549 value arg;
550{
551 register int len = TYPE_LENGTH (VALUE_TYPE (arg));
552
553#if 1 INNER_THAN 2
554 sp -= len;
555 write_memory (sp, VALUE_CONTENTS (arg), len);
556#else /* stack grows upward */
557 write_memory (sp, VALUE_CONTENTS (arg), len);
558 sp += len;
559#endif /* stack grows upward */
560
561 return sp;
562}
563
564/* Perform the standard coercions that are specified
565 for arguments to be passed to C functions. */
566
567value
568value_arg_coerce (arg)
569 value arg;
570{
571 register struct type *type;
572
573 COERCE_ENUM (arg);
574
575 type = VALUE_TYPE (arg);
576
577 if (TYPE_CODE (type) == TYPE_CODE_INT
2a5ec41d 578 && TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_int))
bd5635a1
RP
579 return value_cast (builtin_type_int, arg);
580
2a5ec41d
JG
581 if (TYPE_CODE (type) == TYPE_CODE_FLT
582 && TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_double))
bd5635a1
RP
583 return value_cast (builtin_type_double, arg);
584
585 return arg;
586}
587
588/* Push the value ARG, first coercing it as an argument
589 to a C function. */
590
591CORE_ADDR
592value_arg_push (sp, arg)
593 register CORE_ADDR sp;
594 value arg;
595{
596 return value_push (sp, value_arg_coerce (arg));
597}
598
599/* Determine a function's address and its return type from its value.
600 Calls error() if the function is not valid for calling. */
601
602CORE_ADDR
603find_function_addr (function, retval_type)
604 value function;
605 struct type **retval_type;
606{
607 register struct type *ftype = VALUE_TYPE (function);
608 register enum type_code code = TYPE_CODE (ftype);
609 struct type *value_type;
610 CORE_ADDR funaddr;
611
612 /* If it's a member function, just look at the function
613 part of it. */
614
615 /* Determine address to call. */
616 if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
617 {
618 funaddr = VALUE_ADDRESS (function);
619 value_type = TYPE_TARGET_TYPE (ftype);
620 }
621 else if (code == TYPE_CODE_PTR)
622 {
d11c44f1 623 funaddr = value_as_pointer (function);
bd5635a1
RP
624 if (TYPE_CODE (TYPE_TARGET_TYPE (ftype)) == TYPE_CODE_FUNC
625 || TYPE_CODE (TYPE_TARGET_TYPE (ftype)) == TYPE_CODE_METHOD)
626 value_type = TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (ftype));
627 else
628 value_type = builtin_type_int;
629 }
630 else if (code == TYPE_CODE_INT)
631 {
632 /* Handle the case of functions lacking debugging info.
633 Their values are characters since their addresses are char */
634 if (TYPE_LENGTH (ftype) == 1)
d11c44f1 635 funaddr = value_as_pointer (value_addr (function));
bd5635a1
RP
636 else
637 /* Handle integer used as address of a function. */
d11c44f1 638 funaddr = (CORE_ADDR) value_as_long (function);
bd5635a1
RP
639
640 value_type = builtin_type_int;
641 }
642 else
643 error ("Invalid data type for function to be called.");
644
645 *retval_type = value_type;
646 return funaddr;
647}
648
649#if defined (CALL_DUMMY)
650/* All this stuff with a dummy frame may seem unnecessarily complicated
651 (why not just save registers in GDB?). The purpose of pushing a dummy
652 frame which looks just like a real frame is so that if you call a
653 function and then hit a breakpoint (get a signal, etc), "backtrace"
654 will look right. Whether the backtrace needs to actually show the
655 stack at the time the inferior function was called is debatable, but
656 it certainly needs to not display garbage. So if you are contemplating
657 making dummy frames be different from normal frames, consider that. */
658
659/* Perform a function call in the inferior.
660 ARGS is a vector of values of arguments (NARGS of them).
661 FUNCTION is a value, the function to be called.
662 Returns a value representing what the function returned.
663 May fail to return, if a breakpoint or signal is hit
664 during the execution of the function. */
665
666value
667call_function_by_hand (function, nargs, args)
668 value function;
669 int nargs;
670 value *args;
671{
672 register CORE_ADDR sp;
673 register int i;
674 CORE_ADDR start_sp;
f2ebc25f 675 /* CALL_DUMMY is an array of words (REGISTER_TYPE), but each word
84d82b1c 676 is in host byte order. It is switched to target byte order before calling
f2ebc25f 677 FIX_CALL_DUMMY. */
bd5635a1
RP
678 static REGISTER_TYPE dummy[] = CALL_DUMMY;
679 REGISTER_TYPE dummy1[sizeof dummy / sizeof (REGISTER_TYPE)];
680 CORE_ADDR old_sp;
681 struct type *value_type;
682 unsigned char struct_return;
683 CORE_ADDR struct_addr;
684 struct inferior_status inf_status;
685 struct cleanup *old_chain;
686 CORE_ADDR funaddr;
687 int using_gcc;
688
e17960fb
JG
689 if (!target_has_execution)
690 noprocess();
691
bd5635a1
RP
692 save_inferior_status (&inf_status, 1);
693 old_chain = make_cleanup (restore_inferior_status, &inf_status);
694
695 /* PUSH_DUMMY_FRAME is responsible for saving the inferior registers
696 (and POP_FRAME for restoring them). (At least on most machines)
697 they are saved on the stack in the inferior. */
698 PUSH_DUMMY_FRAME;
699
700 old_sp = sp = read_register (SP_REGNUM);
701
702#if 1 INNER_THAN 2 /* Stack grows down */
703 sp -= sizeof dummy;
704 start_sp = sp;
705#else /* Stack grows up */
706 start_sp = sp;
707 sp += sizeof dummy;
708#endif
709
710 funaddr = find_function_addr (function, &value_type);
711
712 {
713 struct block *b = block_for_pc (funaddr);
714 /* If compiled without -g, assume GCC. */
715 using_gcc = b == NULL || BLOCK_GCC_COMPILED (b);
716 }
717
718 /* Are we returning a value using a structure return or a normal
719 value return? */
720
721 struct_return = using_struct_return (function, funaddr, value_type,
722 using_gcc);
723
724 /* Create a call sequence customized for this function
725 and the number of arguments for it. */
726 bcopy (dummy, dummy1, sizeof dummy);
f2ebc25f
JK
727 for (i = 0; i < sizeof dummy / sizeof (REGISTER_TYPE); i++)
728 SWAP_TARGET_AND_HOST (&dummy1[i], sizeof (REGISTER_TYPE));
bd5635a1
RP
729 FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs, args,
730 value_type, using_gcc);
731
732#if CALL_DUMMY_LOCATION == ON_STACK
733 write_memory (start_sp, (char *)dummy1, sizeof dummy);
734
735#else /* Not on stack. */
736#if CALL_DUMMY_LOCATION == BEFORE_TEXT_END
737 /* Convex Unix prohibits executing in the stack segment. */
738 /* Hope there is empty room at the top of the text segment. */
739 {
84d82b1c 740 extern CORE_ADDR text_end;
bd5635a1
RP
741 static checked = 0;
742 if (!checked)
743 for (start_sp = text_end - sizeof dummy; start_sp < text_end; ++start_sp)
744 if (read_memory_integer (start_sp, 1) != 0)
745 error ("text segment full -- no place to put call");
746 checked = 1;
747 sp = old_sp;
748 start_sp = text_end - sizeof dummy;
749 write_memory (start_sp, (char *)dummy1, sizeof dummy);
750 }
751#else /* After text_end. */
752 {
84d82b1c 753 extern CORE_ADDR text_end;
bd5635a1
RP
754 int errcode;
755 sp = old_sp;
756 start_sp = text_end;
757 errcode = target_write_memory (start_sp, (char *)dummy1, sizeof dummy);
758 if (errcode != 0)
759 error ("Cannot write text segment -- call_function failed");
760 }
761#endif /* After text_end. */
762#endif /* Not on stack. */
763
764#ifdef lint
765 sp = old_sp; /* It really is used, for some ifdef's... */
766#endif
767
768#ifdef STACK_ALIGN
769 /* If stack grows down, we must leave a hole at the top. */
770 {
771 int len = 0;
772
773 /* Reserve space for the return structure to be written on the
774 stack, if necessary */
775
776 if (struct_return)
777 len += TYPE_LENGTH (value_type);
778
779 for (i = nargs - 1; i >= 0; i--)
780 len += TYPE_LENGTH (VALUE_TYPE (value_arg_coerce (args[i])));
781#ifdef CALL_DUMMY_STACK_ADJUST
782 len += CALL_DUMMY_STACK_ADJUST;
783#endif
784#if 1 INNER_THAN 2
785 sp -= STACK_ALIGN (len) - len;
786#else
787 sp += STACK_ALIGN (len) - len;
788#endif
789 }
790#endif /* STACK_ALIGN */
791
792 /* Reserve space for the return structure to be written on the
793 stack, if necessary */
794
795 if (struct_return)
796 {
797#if 1 INNER_THAN 2
798 sp -= TYPE_LENGTH (value_type);
799 struct_addr = sp;
800#else
801 struct_addr = sp;
802 sp += TYPE_LENGTH (value_type);
803#endif
804 }
805
806#if defined (REG_STRUCT_HAS_ADDR)
807 {
808 /* This is a machine like the sparc, where we need to pass a pointer
809 to the structure, not the structure itself. */
810 if (REG_STRUCT_HAS_ADDR (using_gcc))
811 for (i = nargs - 1; i >= 0; i--)
812 if (TYPE_CODE (VALUE_TYPE (args[i])) == TYPE_CODE_STRUCT)
813 {
814 CORE_ADDR addr;
815#if !(1 INNER_THAN 2)
816 /* The stack grows up, so the address of the thing we push
817 is the stack pointer before we push it. */
818 addr = sp;
819#endif
820 /* Push the structure. */
821 sp = value_push (sp, args[i]);
822#if 1 INNER_THAN 2
823 /* The stack grows down, so the address of the thing we push
824 is the stack pointer after we push it. */
825 addr = sp;
826#endif
827 /* The value we're going to pass is the address of the thing
828 we just pushed. */
06b6c733
JG
829 args[i] = value_from_longest (lookup_pointer_type (value_type),
830 (LONGEST) addr);
bd5635a1
RP
831 }
832 }
833#endif /* REG_STRUCT_HAS_ADDR. */
834
835#ifdef PUSH_ARGUMENTS
836 PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr);
837#else /* !PUSH_ARGUMENTS */
838 for (i = nargs - 1; i >= 0; i--)
839 sp = value_arg_push (sp, args[i]);
840#endif /* !PUSH_ARGUMENTS */
841
842#ifdef CALL_DUMMY_STACK_ADJUST
843#if 1 INNER_THAN 2
844 sp -= CALL_DUMMY_STACK_ADJUST;
845#else
846 sp += CALL_DUMMY_STACK_ADJUST;
847#endif
848#endif /* CALL_DUMMY_STACK_ADJUST */
849
850 /* Store the address at which the structure is supposed to be
851 written. Note that this (and the code which reserved the space
852 above) assumes that gcc was used to compile this function. Since
853 it doesn't cost us anything but space and if the function is pcc
854 it will ignore this value, we will make that assumption.
855
856 Also note that on some machines (like the sparc) pcc uses a
857 convention like gcc's. */
858
859 if (struct_return)
860 STORE_STRUCT_RETURN (struct_addr, sp);
861
862 /* Write the stack pointer. This is here because the statements above
863 might fool with it. On SPARC, this write also stores the register
864 window into the right place in the new stack frame, which otherwise
865 wouldn't happen. (See write_inferior_registers in sparc-xdep.c.) */
866 write_register (SP_REGNUM, sp);
867
868 /* Figure out the value returned by the function. */
869 {
870 char retbuf[REGISTER_BYTES];
871
872 /* Execute the stack dummy routine, calling FUNCTION.
873 When it is done, discard the empty frame
874 after storing the contents of all regs into retbuf. */
875 run_stack_dummy (start_sp + CALL_DUMMY_START_OFFSET, retbuf);
876
877 do_cleanups (old_chain);
878
879 return value_being_returned (value_type, retbuf, struct_return);
880 }
881}
882#else /* no CALL_DUMMY. */
883value
884call_function_by_hand (function, nargs, args)
885 value function;
886 int nargs;
887 value *args;
888{
889 error ("Cannot invoke functions on this machine.");
890}
891#endif /* no CALL_DUMMY. */
892\f
893/* Create a value for a string constant:
894 Call the function malloc in the inferior to get space for it,
895 then copy the data into that space
896 and then return the address with type char *.
897 PTR points to the string constant data; LEN is number of characters. */
898
899value
900value_string (ptr, len)
901 char *ptr;
902 int len;
903{
904 register value val;
905 register struct symbol *sym;
906 value blocklen;
907 register char *copy = (char *) alloca (len + 1);
908 char *i = ptr;
909 register char *o = copy, *ibeg = ptr;
910 register int c;
911
912 /* Copy the string into COPY, processing escapes.
84d82b1c 913 We could not conveniently process them in the parser
bd5635a1
RP
914 because the string there wants to be a substring of the input. */
915
916 while (i - ibeg < len)
917 {
918 c = *i++;
919 if (c == '\\')
920 {
921 c = parse_escape (&i);
922 if (c == -1)
923 continue;
924 }
925 *o++ = c;
926 }
927 *o = 0;
928
929 /* Get the length of the string after escapes are processed. */
930
931 len = o - copy;
932
933 /* Find the address of malloc in the inferior. */
934
935 sym = lookup_symbol ("malloc", 0, VAR_NAMESPACE, 0, NULL);
936 if (sym != 0)
937 {
938 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
939 error ("\"malloc\" exists in this program but is not a function.");
940 val = value_of_variable (sym);
941 }
942 else
943 {
944 register int j;
06b6c733
JG
945 j = lookup_misc_func ("malloc");
946 if (j >= 0)
947 val = value_from_longest (
948 lookup_pointer_type (lookup_function_type (
949 lookup_pointer_type (builtin_type_char))),
950 (LONGEST) misc_function_vector[j].address);
bd5635a1
RP
951 else
952 error ("String constants require the program to have a function \"malloc\".");
953 }
954
06b6c733 955 blocklen = value_from_longest (builtin_type_int, (LONGEST) (len + 1));
e17960fb 956 val = call_function_by_hand (val, 1, &blocklen);
bd5635a1
RP
957 if (value_zerop (val))
958 error ("No memory available for string constant.");
d11c44f1 959 write_memory (value_as_pointer (val), copy, len + 1);
bd5635a1
RP
960 VALUE_TYPE (val) = lookup_pointer_type (builtin_type_char);
961 return val;
962}
963\f
964/* Helper function used by value_struct_elt to recurse through baseclasses.
965 Look for a field NAME in ARG1. Adjust the address of ARG1 by OFFSET bytes,
2a5ec41d 966 and search in it assuming it has (class) type TYPE.
d3bab255
JK
967 If found, return value, else return NULL.
968
969 If LOOKING_FOR_BASECLASS, then instead of looking for struct fields,
970 look for a baseclass named NAME. */
bd5635a1
RP
971
972static value
d3bab255 973search_struct_field (name, arg1, offset, type, looking_for_baseclass)
bd5635a1
RP
974 char *name;
975 register value arg1;
976 int offset;
977 register struct type *type;
d3bab255 978 int looking_for_baseclass;
bd5635a1
RP
979{
980 int i;
981
982 check_stub_type (type);
983
d3bab255
JK
984 if (! looking_for_baseclass)
985 for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
986 {
987 char *t_field_name = TYPE_FIELD_NAME (type, i);
988
989 if (t_field_name && !strcmp (t_field_name, name))
990 {
991 value v = (TYPE_FIELD_STATIC (type, i)
992 ? value_static_field (type, name, i)
993 : value_primitive_field (arg1, offset, i, type));
994 if (v == 0)
995 error("there is no field named %s", name);
996 return v;
997 }
998 }
bd5635a1
RP
999
1000 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
1001 {
1002 value v;
1003 /* If we are looking for baseclasses, this is what we get when we
1004 hit them. */
d3bab255
JK
1005 int found_baseclass = (looking_for_baseclass
1006 && !strcmp (name, TYPE_BASECLASS_NAME (type, i)));
bd5635a1
RP
1007
1008 if (BASETYPE_VIA_VIRTUAL (type, i))
1009 {
1010 value v2;
d11c44f1
JG
1011 baseclass_addr (type, i, VALUE_CONTENTS (arg1) + offset,
1012 &v2, (int *)NULL);
bd5635a1
RP
1013 if (v2 == 0)
1014 error ("virtual baseclass botch");
1015 if (found_baseclass)
1016 return v2;
d3bab255
JK
1017 v = search_struct_field (name, v2, 0, TYPE_BASECLASS (type, i),
1018 looking_for_baseclass);
bd5635a1
RP
1019 if (v) return v;
1020 else continue;
1021 }
1022 if (found_baseclass)
1023 v = value_primitive_field (arg1, offset, i, type);
1024 else
1025 v = search_struct_field (name, arg1,
1026 offset + TYPE_BASECLASS_BITPOS (type, i) / 8,
d3bab255
JK
1027 TYPE_BASECLASS (type, i),
1028 looking_for_baseclass);
bd5635a1
RP
1029 if (v) return v;
1030 }
1031 return NULL;
1032}
1033
1034/* Helper function used by value_struct_elt to recurse through baseclasses.
1035 Look for a field NAME in ARG1. Adjust the address of ARG1 by OFFSET bytes,
2a5ec41d 1036 and search in it assuming it has (class) type TYPE.
bd5635a1
RP
1037 If found, return value, else return NULL. */
1038
1039static value
1040search_struct_method (name, arg1, args, offset, static_memfuncp, type)
1041 char *name;
1042 register value arg1, *args;
1043 int offset, *static_memfuncp;
1044 register struct type *type;
1045{
1046 int i;
1047
1048 check_stub_type (type);
1049 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
1050 {
1051 char *t_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
1052 if (t_field_name && !strcmp (t_field_name, name))
1053 {
d3bab255 1054 int j = TYPE_FN_FIELDLIST_LENGTH (type, i) - 1;
bd5635a1
RP
1055 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
1056
d3bab255
JK
1057 if (j > 0 && args == 0)
1058 error ("cannot resolve overloaded method `%s'", name);
1059 while (j >= 0)
bd5635a1 1060 {
8e9a3f3b 1061 if (TYPE_FN_FIELD_STUB (f, j))
bd5635a1
RP
1062 check_stub_method (type, i, j);
1063 if (!typecmp (TYPE_FN_FIELD_STATIC_P (f, j),
1064 TYPE_FN_FIELD_ARGS (f, j), args))
1065 {
1066 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
e532974c 1067 return (value)value_virtual_fn_field (arg1, f, j, type);
bd5635a1
RP
1068 if (TYPE_FN_FIELD_STATIC_P (f, j) && static_memfuncp)
1069 *static_memfuncp = 1;
7d9884b9 1070 return (value)value_fn_field (f, j);
bd5635a1 1071 }
d3bab255 1072 j--;
bd5635a1
RP
1073 }
1074 }
1075 }
1076
1077 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
1078 {
1079 value v;
1080
1081 if (BASETYPE_VIA_VIRTUAL (type, i))
1082 {
1083 value v2;
d11c44f1
JG
1084 baseclass_addr (type, i, VALUE_CONTENTS (arg1) + offset,
1085 &v2, (int *)NULL);
bd5635a1
RP
1086 if (v2 == 0)
1087 error ("virtual baseclass botch");
1088 v = search_struct_method (name, v2, args, 0,
1089 static_memfuncp, TYPE_BASECLASS (type, i));
1090 if (v) return v;
1091 else continue;
1092 }
1093
1094 v = search_struct_method (name, arg1, args,
1095 TYPE_BASECLASS_BITPOS (type, i) / 8,
1096 static_memfuncp, TYPE_BASECLASS (type, i));
1097 if (v) return v;
1098 }
1099 return NULL;
1100}
1101
1102/* Given *ARGP, a value of type (pointer to a)* structure/union,
1103 extract the component named NAME from the ultimate target structure/union
1104 and return it as a value with its appropriate type.
1105 ERR is used in the error message if *ARGP's type is wrong.
1106
1107 C++: ARGS is a list of argument types to aid in the selection of
1108 an appropriate method. Also, handle derived types.
1109
1110 STATIC_MEMFUNCP, if non-NULL, points to a caller-supplied location
1111 where the truthvalue of whether the function that was resolved was
1112 a static member function or not is stored.
1113
1114 ERR is an error message to be printed in case the field is not found. */
1115
1116value
1117value_struct_elt (argp, args, name, static_memfuncp, err)
1118 register value *argp, *args;
1119 char *name;
1120 int *static_memfuncp;
1121 char *err;
1122{
1123 register struct type *t;
bd5635a1
RP
1124 value v;
1125
1126 COERCE_ARRAY (*argp);
1127
1128 t = VALUE_TYPE (*argp);
1129
1130 /* Follow pointers until we get to a non-pointer. */
1131
1132 while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_CODE (t) == TYPE_CODE_REF)
1133 {
bd5635a1 1134 *argp = value_ind (*argp);
f2ebc25f
JK
1135 /* Don't coerce fn pointer to fn and then back again! */
1136 if (TYPE_CODE (VALUE_TYPE (*argp)) != TYPE_CODE_FUNC)
1137 COERCE_ARRAY (*argp);
bd5635a1
RP
1138 t = VALUE_TYPE (*argp);
1139 }
1140
1141 if (TYPE_CODE (t) == TYPE_CODE_MEMBER)
1142 error ("not implemented: member type in value_struct_elt");
1143
2a5ec41d 1144 if ( TYPE_CODE (t) != TYPE_CODE_STRUCT
bd5635a1
RP
1145 && TYPE_CODE (t) != TYPE_CODE_UNION)
1146 error ("Attempt to extract a component of a value that is not a %s.", err);
1147
1148 /* Assume it's not, unless we see that it is. */
1149 if (static_memfuncp)
1150 *static_memfuncp =0;
1151
1152 if (!args)
1153 {
1154 /* if there are no arguments ...do this... */
1155
d3bab255 1156 /* Try as a field first, because if we succeed, there
bd5635a1 1157 is less work to be done. */
d3bab255 1158 v = search_struct_field (name, *argp, 0, t, 0);
bd5635a1
RP
1159 if (v)
1160 return v;
1161
1162 /* C++: If it was not found as a data field, then try to
1163 return it as a pointer to a method. */
1164
1165 if (destructor_name_p (name, t))
1166 error ("Cannot get value of destructor");
1167
1168 v = search_struct_method (name, *argp, args, 0, static_memfuncp, t);
1169
1170 if (v == 0)
1171 {
1172 if (TYPE_NFN_FIELDS (t))
1173 error ("There is no member or method named %s.", name);
1174 else
1175 error ("There is no member named %s.", name);
1176 }
1177 return v;
1178 }
1179
1180 if (destructor_name_p (name, t))
1181 {
1182 if (!args[1])
1183 {
1184 /* destructors are a special case. */
7d9884b9 1185 return (value)value_fn_field (TYPE_FN_FIELDLIST1 (t, 0),
bd5635a1
RP
1186 TYPE_FN_FIELDLIST_LENGTH (t, 0));
1187 }
1188 else
1189 {
1190 error ("destructor should not have any argument");
1191 }
1192 }
1193 else
1194 v = search_struct_method (name, *argp, args, 0, static_memfuncp, t);
1195
1196 if (v == 0)
1197 {
1198 /* See if user tried to invoke data as function. If so,
1199 hand it back. If it's not callable (i.e., a pointer to function),
1200 gdb should give an error. */
d3bab255 1201 v = search_struct_field (name, *argp, 0, t, 0);
bd5635a1
RP
1202 }
1203
1204 if (!v)
1205 error ("Structure has no component named %s.", name);
1206 return v;
1207}
1208
1209/* C++: return 1 is NAME is a legitimate name for the destructor
1210 of type TYPE. If TYPE does not have a destructor, or
1211 if NAME is inappropriate for TYPE, an error is signaled. */
1212int
1213destructor_name_p (name, type)
7919c3ed
JG
1214 const char *name;
1215 const struct type *type;
bd5635a1
RP
1216{
1217 /* destructors are a special case. */
1218
1219 if (name[0] == '~')
1220 {
1221 char *dname = type_name_no_tag (type);
bd5635a1
RP
1222 if (strcmp (dname, name+1))
1223 error ("name of destructor must equal name of class");
1224 else
1225 return 1;
1226 }
1227 return 0;
1228}
1229
1230/* Helper function for check_field: Given TYPE, a structure/union,
1231 return 1 if the component named NAME from the ultimate
1232 target structure/union is defined, otherwise, return 0. */
1233
1234static int
1235check_field_in (type, name)
1236 register struct type *type;
1237 char *name;
1238{
1239 register int i;
1240
1241 for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
1242 {
1243 char *t_field_name = TYPE_FIELD_NAME (type, i);
1244 if (t_field_name && !strcmp (t_field_name, name))
1245 return 1;
1246 }
1247
1248 /* C++: If it was not found as a data field, then try to
1249 return it as a pointer to a method. */
1250
1251 /* Destructors are a special case. */
1252 if (destructor_name_p (name, type))
1253 return 1;
1254
1255 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
1256 {
1257 if (!strcmp (TYPE_FN_FIELDLIST_NAME (type, i), name))
1258 return 1;
1259 }
1260
1261 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
1262 if (check_field_in (TYPE_BASECLASS (type, i), name))
1263 return 1;
1264
1265 return 0;
1266}
1267
1268
1269/* C++: Given ARG1, a value of type (pointer to a)* structure/union,
1270 return 1 if the component named NAME from the ultimate
1271 target structure/union is defined, otherwise, return 0. */
1272
1273int
1274check_field (arg1, name)
7919c3ed
JG
1275 register const value arg1;
1276 const char *name;
bd5635a1
RP
1277{
1278 register struct type *t;
1279
1280 COERCE_ARRAY (arg1);
1281
1282 t = VALUE_TYPE (arg1);
1283
1284 /* Follow pointers until we get to a non-pointer. */
1285
1286 while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_CODE (t) == TYPE_CODE_REF)
1287 t = TYPE_TARGET_TYPE (t);
1288
1289 if (TYPE_CODE (t) == TYPE_CODE_MEMBER)
1290 error ("not implemented: member type in check_field");
1291
2a5ec41d 1292 if ( TYPE_CODE (t) != TYPE_CODE_STRUCT
bd5635a1
RP
1293 && TYPE_CODE (t) != TYPE_CODE_UNION)
1294 error ("Internal error: `this' is not an aggregate");
1295
1296 return check_field_in (t, name);
1297}
1298
1299/* C++: Given an aggregate type DOMAIN, and a member name NAME,
2a5ec41d 1300 return the address of this member as a "pointer to member"
bd5635a1
RP
1301 type. If INTYPE is non-null, then it will be the type
1302 of the member we are looking for. This will help us resolve
2a5ec41d
JG
1303 "pointers to member functions". This function is only used
1304 to resolve user expressions of the form "&class::member". */
bd5635a1
RP
1305
1306value
1307value_struct_elt_for_address (domain, intype, name)
1308 struct type *domain, *intype;
1309 char *name;
1310{
1311 register struct type *t = domain;
1312 register int i;
1313 value v;
1314
1315 struct type *baseclass;
1316
2a5ec41d 1317 if ( TYPE_CODE (t) != TYPE_CODE_STRUCT
bd5635a1
RP
1318 && TYPE_CODE (t) != TYPE_CODE_UNION)
1319 error ("Internal error: non-aggregate type to value_struct_elt_for_address");
1320
1321 baseclass = t;
1322
1323 while (t)
1324 {
1325 for (i = TYPE_NFIELDS (t) - 1; i >= TYPE_N_BASECLASSES (t); i--)
1326 {
1327 char *t_field_name = TYPE_FIELD_NAME (t, i);
2a5ec41d 1328
bd5635a1
RP
1329 if (t_field_name && !strcmp (t_field_name, name))
1330 {
1331 if (TYPE_FIELD_STATIC (t, i))
1332 {
1333 char *phys_name = TYPE_FIELD_STATIC_PHYSNAME (t, i);
1334 struct symbol *sym =
1335 lookup_symbol (phys_name, 0, VAR_NAMESPACE, 0, NULL);
2a5ec41d
JG
1336 if (! sym)
1337 error (
1338 "Internal error: could not find physical static variable named %s",
1339 phys_name);
06b6c733
JG
1340 return value_from_longest (
1341 lookup_pointer_type (TYPE_FIELD_TYPE (t, i)),
1342 (LONGEST)SYMBOL_BLOCK_VALUE (sym));
bd5635a1
RP
1343 }
1344 if (TYPE_FIELD_PACKED (t, i))
1345 error ("pointers to bitfield members not allowed");
1346
06b6c733
JG
1347 return value_from_longest (
1348 lookup_pointer_type (
1349 lookup_member_type (TYPE_FIELD_TYPE (t, i), baseclass)),
bd5635a1 1350 (LONGEST) (TYPE_FIELD_BITPOS (t, i) >> 3));
bd5635a1
RP
1351 }
1352 }
1353
1354 if (TYPE_N_BASECLASSES (t) == 0)
1355 break;
1356
1357 t = TYPE_BASECLASS (t, 0);
1358 }
1359
1360 /* C++: If it was not found as a data field, then try to
1361 return it as a pointer to a method. */
1362 t = baseclass;
1363
1364 /* Destructors are a special case. */
1365 if (destructor_name_p (name, t))
1366 {
2a5ec41d 1367 error ("member pointers to destructors not implemented yet");
bd5635a1
RP
1368 }
1369
1370 /* Perform all necessary dereferencing. */
1371 while (intype && TYPE_CODE (intype) == TYPE_CODE_PTR)
1372 intype = TYPE_TARGET_TYPE (intype);
1373
1374 while (t)
1375 {
1376 for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
1377 {
1378 if (!strcmp (TYPE_FN_FIELDLIST_NAME (t, i), name))
1379 {
1380 int j = TYPE_FN_FIELDLIST_LENGTH (t, i);
1381 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);
1382
1383 if (intype == 0 && j > 1)
1384 error ("non-unique member `%s' requires type instantiation", name);
1385 if (intype)
1386 {
1387 while (j--)
1388 if (TYPE_FN_FIELD_TYPE (f, j) == intype)
1389 break;
1390 if (j < 0)
1391 error ("no member function matches that type instantiation");
1392 }
1393 else
1394 j = 0;
1395
8e9a3f3b 1396 if (TYPE_FN_FIELD_STUB (f, j))
2a5ec41d 1397 check_stub_method (t, i, j);
bd5635a1
RP
1398 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
1399 {
06b6c733
JG
1400 return value_from_longest (
1401 lookup_pointer_type (
1402 lookup_member_type (TYPE_FN_FIELD_TYPE (f, j),
1403 baseclass)),
bd5635a1
RP
1404 (LONGEST) TYPE_FN_FIELD_VOFFSET (f, j));
1405 }
1406 else
1407 {
1408 struct symbol *s = lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
1409 0, VAR_NAMESPACE, 0, NULL);
1410 v = locate_var_value (s, 0);
2a5ec41d
JG
1411 VALUE_TYPE (v) = lookup_pointer_type (
1412 lookup_member_type (TYPE_FN_FIELD_TYPE (f, j),
1413 baseclass));
06b6c733 1414 return v;
bd5635a1 1415 }
bd5635a1
RP
1416 }
1417 }
1418
1419 if (TYPE_N_BASECLASSES (t) == 0)
1420 break;
1421
1422 t = TYPE_BASECLASS (t, 0);
1423 }
1424 return 0;
1425}
1426
1427/* Compare two argument lists and return the position in which they differ,
1428 or zero if equal.
1429
1430 STATICP is nonzero if the T1 argument list came from a
1431 static member function.
1432
1433 For non-static member functions, we ignore the first argument,
1434 which is the type of the instance variable. This is because we want
1435 to handle calls with objects from derived classes. This is not
1436 entirely correct: we should actually check to make sure that a
1437 requested operation is type secure, shouldn't we? FIXME. */
1438
1439int
1440typecmp (staticp, t1, t2)
1441 int staticp;
1442 struct type *t1[];
1443 value t2[];
1444{
1445 int i;
1446
d3bab255
JK
1447 if (t2 == 0)
1448 return 1;
bd5635a1
RP
1449 if (staticp && t1 == 0)
1450 return t2[1] != 0;
1451 if (t1 == 0)
1452 return 1;
1453 if (t1[0]->code == TYPE_CODE_VOID) return 0;
1454 if (t1[!staticp] == 0) return 0;
1455 for (i = !staticp; t1[i] && t1[i]->code != TYPE_CODE_VOID; i++)
1456 {
1457 if (! t2[i]
1458 || t1[i]->code != t2[i]->type->code
1459/* Too pessimistic: || t1[i]->target_type != t2[i]->type->target_type */
1460 )
1461 return i+1;
1462 }
1463 if (!t1[i]) return 0;
1464 return t2[i] ? i+1 : 0;
1465}
1466
1467/* C++: return the value of the class instance variable, if one exists.
1468 Flag COMPLAIN signals an error if the request is made in an
1469 inappropriate context. */
1470value
1471value_of_this (complain)
1472 int complain;
1473{
1474 extern FRAME selected_frame;
1475 struct symbol *func, *sym;
1476 struct block *b;
1477 int i;
1478 static const char funny_this[] = "this";
1479 value this;
bd5635a1
RP
1480
1481 if (selected_frame == 0)
1482 if (complain)
1483 error ("no frame selected");
1484 else return 0;
1485
1486 func = get_frame_function (selected_frame);
1487 if (!func)
1488 {
1489 if (complain)
1490 error ("no `this' in nameless context");
1491 else return 0;
1492 }
1493
1494 b = SYMBOL_BLOCK_VALUE (func);
1495 i = BLOCK_NSYMS (b);
1496 if (i <= 0)
1497 if (complain)
1498 error ("no args, no `this'");
1499 else return 0;
1500
1501 /* Calling lookup_block_symbol is necessary to get the LOC_REGISTER
1502 symbol instead of the LOC_ARG one (if both exist). */
1503 sym = lookup_block_symbol (b, funny_this, VAR_NAMESPACE);
1504 if (sym == NULL)
1505 {
1506 if (complain)
1507 error ("current stack frame not in method");
1508 else
1509 return NULL;
1510 }
1511
1512 this = read_var_value (sym, selected_frame);
1513 if (this == 0 && complain)
1514 error ("`this' argument at unknown address");
1515 return this;
1516}
This page took 0.115354 seconds and 4 git commands to generate.