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