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