import gdb-1999-10-11 snapshot
[deliverable/binutils-gdb.git] / gdb / valops.c
CommitLineData
c906108c
SS
1/* Perform non-arithmetic operations on values, for GDB.
2 Copyright 1986, 87, 89, 91, 92, 93, 94, 95, 96, 97, 1998
3 Free Software Foundation, Inc.
4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b
JM
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
c906108c
SS
21
22#include "defs.h"
23#include "symtab.h"
24#include "gdbtypes.h"
25#include "value.h"
26#include "frame.h"
27#include "inferior.h"
28#include "gdbcore.h"
29#include "target.h"
30#include "demangle.h"
31#include "language.h"
32#include "gdbcmd.h"
33
34#include <errno.h>
35#include "gdb_string.h"
36
37/* Default to coercing float to double in function calls only when there is
38 no prototype. Otherwise on targets where the debug information is incorrect
39 for either the prototype or non-prototype case, we can force it by defining
40 COERCE_FLOAT_TO_DOUBLE in the target configuration file. */
41
42#ifndef COERCE_FLOAT_TO_DOUBLE
43#define COERCE_FLOAT_TO_DOUBLE (param_type == NULL)
44#endif
45
46/* Flag indicating HP compilers were used; needed to correctly handle some
47 value operations with HP aCC code/runtime. */
48extern int hp_som_som_object_present;
49
50
51/* Local functions. */
52
c5aa993b 53static int typecmp PARAMS ((int staticp, struct type * t1[], value_ptr t2[]));
c906108c 54
c906108c
SS
55static CORE_ADDR find_function_addr PARAMS ((value_ptr, struct type **));
56static value_ptr value_arg_coerce PARAMS ((value_ptr, struct type *, int));
c906108c
SS
57
58
c906108c 59static CORE_ADDR value_push PARAMS ((CORE_ADDR, value_ptr));
c906108c
SS
60
61static value_ptr search_struct_field PARAMS ((char *, value_ptr, int,
62 struct type *, int));
63
c906108c
SS
64static value_ptr search_struct_method PARAMS ((char *, value_ptr *,
65 value_ptr *,
66 int, int *, struct type *));
67
68static int check_field_in PARAMS ((struct type *, const char *));
69
70static CORE_ADDR allocate_space_in_inferior PARAMS ((int));
71
72static value_ptr cast_into_complex PARAMS ((struct type *, value_ptr));
73
c5aa993b 74static struct fn_field *find_method_list PARAMS ((value_ptr * argp, char *method, int offset, int *static_memfuncp, struct type * type, int *num_fns, struct type ** basetype, int *boffset));
7a292a7a 75
c906108c
SS
76void _initialize_valops PARAMS ((void));
77
78#define VALUE_SUBSTRING_START(VAL) VALUE_FRAME(VAL)
79
80/* Flag for whether we want to abandon failed expression evals by default. */
81
82#if 0
83static int auto_abandon = 0;
84#endif
85
86int overload_resolution = 0;
c5aa993b 87\f
c906108c
SS
88
89
c906108c
SS
90/* Find the address of function name NAME in the inferior. */
91
92value_ptr
93find_function_in_inferior (name)
94 char *name;
95{
96 register struct symbol *sym;
97 sym = lookup_symbol (name, 0, VAR_NAMESPACE, 0, NULL);
98 if (sym != NULL)
99 {
100 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
101 {
102 error ("\"%s\" exists in this program but is not a function.",
103 name);
104 }
105 return value_of_variable (sym, NULL);
106 }
107 else
108 {
c5aa993b 109 struct minimal_symbol *msymbol = lookup_minimal_symbol (name, NULL, NULL);
c906108c
SS
110 if (msymbol != NULL)
111 {
112 struct type *type;
113 LONGEST maddr;
114 type = lookup_pointer_type (builtin_type_char);
115 type = lookup_function_type (type);
116 type = lookup_pointer_type (type);
117 maddr = (LONGEST) SYMBOL_VALUE_ADDRESS (msymbol);
118 return value_from_longest (type, maddr);
119 }
120 else
121 {
c5aa993b 122 if (!target_has_execution)
c906108c 123 error ("evaluation of this expression requires the target program to be active");
c5aa993b 124 else
c906108c
SS
125 error ("evaluation of this expression requires the program to have a function \"%s\".", name);
126 }
127 }
128}
129
130/* Allocate NBYTES of space in the inferior using the inferior's malloc
131 and return a value that is a pointer to the allocated space. */
132
133value_ptr
134value_allocate_space_in_inferior (len)
135 int len;
136{
137 value_ptr blocklen;
138 register value_ptr val = find_function_in_inferior ("malloc");
139
140 blocklen = value_from_longest (builtin_type_int, (LONGEST) len);
141 val = call_function_by_hand (val, 1, &blocklen);
142 if (value_logical_not (val))
143 {
144 if (!target_has_execution)
c5aa993b
JM
145 error ("No memory available to program now: you need to start the target first");
146 else
147 error ("No memory available to program: call to malloc failed");
c906108c
SS
148 }
149 return val;
150}
151
152static CORE_ADDR
153allocate_space_in_inferior (len)
154 int len;
155{
156 return value_as_long (value_allocate_space_in_inferior (len));
157}
158
159/* Cast value ARG2 to type TYPE and return as a value.
160 More general than a C cast: accepts any two types of the same length,
161 and if ARG2 is an lvalue it can be cast into anything at all. */
162/* In C++, casts may change pointer or object representations. */
163
164value_ptr
165value_cast (type, arg2)
166 struct type *type;
167 register value_ptr arg2;
168{
169 register enum type_code code1;
170 register enum type_code code2;
171 register int scalar;
172 struct type *type2;
173
174 int convert_to_boolean = 0;
c5aa993b 175
c906108c
SS
176 if (VALUE_TYPE (arg2) == type)
177 return arg2;
178
179 CHECK_TYPEDEF (type);
180 code1 = TYPE_CODE (type);
c5aa993b 181 COERCE_REF (arg2);
c906108c
SS
182 type2 = check_typedef (VALUE_TYPE (arg2));
183
184 /* A cast to an undetermined-length array_type, such as (TYPE [])OBJECT,
185 is treated like a cast to (TYPE [N])OBJECT,
186 where N is sizeof(OBJECT)/sizeof(TYPE). */
187 if (code1 == TYPE_CODE_ARRAY)
188 {
189 struct type *element_type = TYPE_TARGET_TYPE (type);
190 unsigned element_length = TYPE_LENGTH (check_typedef (element_type));
191 if (element_length > 0
c5aa993b 192 && TYPE_ARRAY_UPPER_BOUND_TYPE (type) == BOUND_CANNOT_BE_DETERMINED)
c906108c
SS
193 {
194 struct type *range_type = TYPE_INDEX_TYPE (type);
195 int val_length = TYPE_LENGTH (type2);
196 LONGEST low_bound, high_bound, new_length;
197 if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
198 low_bound = 0, high_bound = 0;
199 new_length = val_length / element_length;
200 if (val_length % element_length != 0)
c5aa993b 201 warning ("array element type size does not divide object size in cast");
c906108c
SS
202 /* FIXME-type-allocation: need a way to free this type when we are
203 done with it. */
204 range_type = create_range_type ((struct type *) NULL,
205 TYPE_TARGET_TYPE (range_type),
206 low_bound,
207 new_length + low_bound - 1);
208 VALUE_TYPE (arg2) = create_array_type ((struct type *) NULL,
209 element_type, range_type);
210 return arg2;
211 }
212 }
213
214 if (current_language->c_style_arrays
215 && TYPE_CODE (type2) == TYPE_CODE_ARRAY)
216 arg2 = value_coerce_array (arg2);
217
218 if (TYPE_CODE (type2) == TYPE_CODE_FUNC)
219 arg2 = value_coerce_function (arg2);
220
221 type2 = check_typedef (VALUE_TYPE (arg2));
222 COERCE_VARYING_ARRAY (arg2, type2);
223 code2 = TYPE_CODE (type2);
224
225 if (code1 == TYPE_CODE_COMPLEX)
226 return cast_into_complex (type, arg2);
227 if (code1 == TYPE_CODE_BOOL)
228 {
229 code1 = TYPE_CODE_INT;
230 convert_to_boolean = 1;
231 }
232 if (code1 == TYPE_CODE_CHAR)
233 code1 = TYPE_CODE_INT;
234 if (code2 == TYPE_CODE_BOOL || code2 == TYPE_CODE_CHAR)
235 code2 = TYPE_CODE_INT;
236
237 scalar = (code2 == TYPE_CODE_INT || code2 == TYPE_CODE_FLT
238 || code2 == TYPE_CODE_ENUM || code2 == TYPE_CODE_RANGE);
239
c5aa993b 240 if (code1 == TYPE_CODE_STRUCT
c906108c
SS
241 && code2 == TYPE_CODE_STRUCT
242 && TYPE_NAME (type) != 0)
243 {
244 /* Look in the type of the source to see if it contains the
c5aa993b
JM
245 type of the target as a superclass. If so, we'll need to
246 offset the object in addition to changing its type. */
c906108c
SS
247 value_ptr v = search_struct_field (type_name_no_tag (type),
248 arg2, 0, type2, 1);
249 if (v)
250 {
251 VALUE_TYPE (v) = type;
252 return v;
253 }
254 }
255 if (code1 == TYPE_CODE_FLT && scalar)
256 return value_from_double (type, value_as_double (arg2));
257 else if ((code1 == TYPE_CODE_INT || code1 == TYPE_CODE_ENUM
258 || code1 == TYPE_CODE_RANGE)
259 && (scalar || code2 == TYPE_CODE_PTR))
260 {
261 LONGEST longest;
c5aa993b
JM
262
263 if (hp_som_som_object_present && /* if target compiled by HP aCC */
264 (code2 == TYPE_CODE_PTR))
265 {
266 unsigned int *ptr;
267 value_ptr retvalp;
268
269 switch (TYPE_CODE (TYPE_TARGET_TYPE (type2)))
270 {
271 /* With HP aCC, pointers to data members have a bias */
272 case TYPE_CODE_MEMBER:
273 retvalp = value_from_longest (type, value_as_long (arg2));
274 ptr = (unsigned int *) VALUE_CONTENTS (retvalp); /* force evaluation */
275 *ptr &= ~0x20000000; /* zap 29th bit to remove bias */
276 return retvalp;
277
278 /* While pointers to methods don't really point to a function */
279 case TYPE_CODE_METHOD:
280 error ("Pointers to methods not supported with HP aCC");
281
282 default:
283 break; /* fall out and go to normal handling */
284 }
285 }
c906108c
SS
286 longest = value_as_long (arg2);
287 return value_from_longest (type, convert_to_boolean ? (LONGEST) (longest ? 1 : 0) : longest);
288 }
289 else if (TYPE_LENGTH (type) == TYPE_LENGTH (type2))
290 {
291 if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
292 {
293 struct type *t1 = check_typedef (TYPE_TARGET_TYPE (type));
294 struct type *t2 = check_typedef (TYPE_TARGET_TYPE (type2));
c5aa993b 295 if (TYPE_CODE (t1) == TYPE_CODE_STRUCT
c906108c
SS
296 && TYPE_CODE (t2) == TYPE_CODE_STRUCT
297 && !value_logical_not (arg2))
298 {
299 value_ptr v;
300
301 /* Look in the type of the source to see if it contains the
c5aa993b
JM
302 type of the target as a superclass. If so, we'll need to
303 offset the pointer rather than just change its type. */
c906108c
SS
304 if (TYPE_NAME (t1) != NULL)
305 {
306 v = search_struct_field (type_name_no_tag (t1),
307 value_ind (arg2), 0, t2, 1);
308 if (v)
309 {
310 v = value_addr (v);
311 VALUE_TYPE (v) = type;
312 return v;
313 }
314 }
315
316 /* Look in the type of the target to see if it contains the
c5aa993b
JM
317 type of the source as a superclass. If so, we'll need to
318 offset the pointer rather than just change its type.
319 FIXME: This fails silently with virtual inheritance. */
c906108c
SS
320 if (TYPE_NAME (t2) != NULL)
321 {
322 v = search_struct_field (type_name_no_tag (t2),
c5aa993b 323 value_zero (t1, not_lval), 0, t1, 1);
c906108c
SS
324 if (v)
325 {
326 value_ptr v2 = value_ind (arg2);
327 VALUE_ADDRESS (v2) -= VALUE_ADDRESS (v)
c5aa993b 328 + VALUE_OFFSET (v);
c906108c
SS
329 v2 = value_addr (v2);
330 VALUE_TYPE (v2) = type;
331 return v2;
332 }
333 }
334 }
335 /* No superclass found, just fall through to change ptr type. */
336 }
337 VALUE_TYPE (arg2) = type;
c5aa993b
JM
338 VALUE_ENCLOSING_TYPE (arg2) = type; /* pai: chk_val */
339 VALUE_POINTED_TO_OFFSET (arg2) = 0; /* pai: chk_val */
c906108c
SS
340 return arg2;
341 }
342 else if (chill_varying_type (type))
343 {
344 struct type *range1, *range2, *eltype1, *eltype2;
345 value_ptr val;
346 int count1, count2;
347 LONGEST low_bound, high_bound;
348 char *valaddr, *valaddr_data;
349 /* For lint warning about eltype2 possibly uninitialized: */
350 eltype2 = NULL;
351 if (code2 == TYPE_CODE_BITSTRING)
352 error ("not implemented: converting bitstring to varying type");
353 if ((code2 != TYPE_CODE_ARRAY && code2 != TYPE_CODE_STRING)
354 || (eltype1 = check_typedef (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 1))),
355 eltype2 = check_typedef (TYPE_TARGET_TYPE (type2)),
356 (TYPE_LENGTH (eltype1) != TYPE_LENGTH (eltype2)
c5aa993b 357 /* || TYPE_CODE (eltype1) != TYPE_CODE (eltype2) */ )))
c906108c
SS
358 error ("Invalid conversion to varying type");
359 range1 = TYPE_FIELD_TYPE (TYPE_FIELD_TYPE (type, 1), 0);
360 range2 = TYPE_FIELD_TYPE (type2, 0);
361 if (get_discrete_bounds (range1, &low_bound, &high_bound) < 0)
362 count1 = -1;
363 else
364 count1 = high_bound - low_bound + 1;
365 if (get_discrete_bounds (range2, &low_bound, &high_bound) < 0)
c5aa993b 366 count1 = -1, count2 = 0; /* To force error before */
c906108c
SS
367 else
368 count2 = high_bound - low_bound + 1;
369 if (count2 > count1)
370 error ("target varying type is too small");
371 val = allocate_value (type);
372 valaddr = VALUE_CONTENTS_RAW (val);
373 valaddr_data = valaddr + TYPE_FIELD_BITPOS (type, 1) / 8;
374 /* Set val's __var_length field to count2. */
375 store_signed_integer (valaddr, TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)),
376 count2);
377 /* Set the __var_data field to count2 elements copied from arg2. */
378 memcpy (valaddr_data, VALUE_CONTENTS (arg2),
379 count2 * TYPE_LENGTH (eltype2));
380 /* Zero the rest of the __var_data field of val. */
381 memset (valaddr_data + count2 * TYPE_LENGTH (eltype2), '\0',
382 (count1 - count2) * TYPE_LENGTH (eltype2));
383 return val;
384 }
385 else if (VALUE_LVAL (arg2) == lval_memory)
386 {
387 return value_at_lazy (type, VALUE_ADDRESS (arg2) + VALUE_OFFSET (arg2),
388 VALUE_BFD_SECTION (arg2));
389 }
390 else if (code1 == TYPE_CODE_VOID)
391 {
392 return value_zero (builtin_type_void, not_lval);
393 }
394 else
395 {
396 error ("Invalid cast.");
397 return 0;
398 }
399}
400
401/* Create a value of type TYPE that is zero, and return it. */
402
403value_ptr
404value_zero (type, lv)
405 struct type *type;
406 enum lval_type lv;
407{
408 register value_ptr val = allocate_value (type);
409
410 memset (VALUE_CONTENTS (val), 0, TYPE_LENGTH (check_typedef (type)));
411 VALUE_LVAL (val) = lv;
412
413 return val;
414}
415
416/* Return a value with type TYPE located at ADDR.
417
418 Call value_at only if the data needs to be fetched immediately;
419 if we can be 'lazy' and defer the fetch, perhaps indefinately, call
420 value_at_lazy instead. value_at_lazy simply records the address of
421 the data and sets the lazy-evaluation-required flag. The lazy flag
422 is tested in the VALUE_CONTENTS macro, which is used if and when
423 the contents are actually required.
424
425 Note: value_at does *NOT* handle embedded offsets; perform such
426 adjustments before or after calling it. */
427
428value_ptr
429value_at (type, addr, sect)
430 struct type *type;
431 CORE_ADDR addr;
432 asection *sect;
433{
434 register value_ptr val;
435
436 if (TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID)
437 error ("Attempt to dereference a generic pointer.");
438
439 val = allocate_value (type);
440
7a292a7a
SS
441 if (GDB_TARGET_IS_D10V
442 && TYPE_CODE (type) == TYPE_CODE_PTR
c906108c
SS
443 && TYPE_TARGET_TYPE (type)
444 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC))
445 {
446 /* pointer to function */
447 unsigned long num;
448 unsigned short snum;
449 snum = read_memory_unsigned_integer (addr, 2);
7a292a7a
SS
450 num = D10V_MAKE_IADDR (snum);
451 store_address (VALUE_CONTENTS_RAW (val), 4, num);
c906108c 452 }
7a292a7a 453 else if (GDB_TARGET_IS_D10V
c5aa993b 454 && TYPE_CODE (type) == TYPE_CODE_PTR)
c906108c
SS
455 {
456 /* pointer to data */
457 unsigned long num;
458 unsigned short snum;
459 snum = read_memory_unsigned_integer (addr, 2);
7a292a7a 460 num = D10V_MAKE_DADDR (snum);
c5aa993b 461 store_address (VALUE_CONTENTS_RAW (val), 4, num);
c906108c
SS
462 }
463 else
c906108c
SS
464 read_memory_section (addr, VALUE_CONTENTS_ALL_RAW (val), TYPE_LENGTH (type), sect);
465
466 VALUE_LVAL (val) = lval_memory;
467 VALUE_ADDRESS (val) = addr;
468 VALUE_BFD_SECTION (val) = sect;
469
470 return val;
471}
472
473/* Return a lazy value with type TYPE located at ADDR (cf. value_at). */
474
475value_ptr
476value_at_lazy (type, addr, sect)
477 struct type *type;
478 CORE_ADDR addr;
479 asection *sect;
480{
481 register value_ptr val;
482
483 if (TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID)
484 error ("Attempt to dereference a generic pointer.");
485
486 val = allocate_value (type);
487
488 VALUE_LVAL (val) = lval_memory;
489 VALUE_ADDRESS (val) = addr;
490 VALUE_LAZY (val) = 1;
491 VALUE_BFD_SECTION (val) = sect;
492
493 return val;
494}
495
496/* Called only from the VALUE_CONTENTS and VALUE_CONTENTS_ALL macros,
497 if the current data for a variable needs to be loaded into
498 VALUE_CONTENTS(VAL). Fetches the data from the user's process, and
499 clears the lazy flag to indicate that the data in the buffer is valid.
500
501 If the value is zero-length, we avoid calling read_memory, which would
502 abort. We mark the value as fetched anyway -- all 0 bytes of it.
503
504 This function returns a value because it is used in the VALUE_CONTENTS
505 macro as part of an expression, where a void would not work. The
506 value is ignored. */
507
508int
509value_fetch_lazy (val)
510 register value_ptr val;
511{
512 CORE_ADDR addr = VALUE_ADDRESS (val) + VALUE_OFFSET (val);
513 int length = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (val));
514
c5aa993b 515 struct type *type = VALUE_TYPE (val);
7a292a7a
SS
516 if (GDB_TARGET_IS_D10V
517 && TYPE_CODE (type) == TYPE_CODE_PTR
c906108c
SS
518 && TYPE_TARGET_TYPE (type)
519 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC))
520 {
521 /* pointer to function */
522 unsigned long num;
523 unsigned short snum;
524 snum = read_memory_unsigned_integer (addr, 2);
c5aa993b
JM
525 num = D10V_MAKE_IADDR (snum);
526 store_address (VALUE_CONTENTS_RAW (val), 4, num);
c906108c 527 }
7a292a7a 528 else if (GDB_TARGET_IS_D10V
c5aa993b 529 && TYPE_CODE (type) == TYPE_CODE_PTR)
c906108c
SS
530 {
531 /* pointer to data */
532 unsigned long num;
533 unsigned short snum;
534 snum = read_memory_unsigned_integer (addr, 2);
c5aa993b
JM
535 num = D10V_MAKE_DADDR (snum);
536 store_address (VALUE_CONTENTS_RAW (val), 4, num);
c906108c 537 }
7a292a7a 538 else if (length)
c906108c
SS
539 read_memory_section (addr, VALUE_CONTENTS_ALL_RAW (val), length,
540 VALUE_BFD_SECTION (val));
541 VALUE_LAZY (val) = 0;
542 return 0;
543}
544
545
546/* Store the contents of FROMVAL into the location of TOVAL.
547 Return a new value with the location of TOVAL and contents of FROMVAL. */
548
549value_ptr
550value_assign (toval, fromval)
551 register value_ptr toval, fromval;
552{
553 register struct type *type;
554 register value_ptr val;
555 char raw_buffer[MAX_REGISTER_RAW_SIZE];
556 int use_buffer = 0;
557
558 if (!toval->modifiable)
559 error ("Left operand of assignment is not a modifiable lvalue.");
560
561 COERCE_REF (toval);
562
563 type = VALUE_TYPE (toval);
564 if (VALUE_LVAL (toval) != lval_internalvar)
565 fromval = value_cast (type, fromval);
566 else
567 COERCE_ARRAY (fromval);
568 CHECK_TYPEDEF (type);
569
570 /* If TOVAL is a special machine register requiring conversion
571 of program values to a special raw format,
572 convert FROMVAL's contents now, with result in `raw_buffer',
573 and set USE_BUFFER to the number of bytes to write. */
574
ac9a91a7 575 if (VALUE_REGNO (toval) >= 0)
c906108c
SS
576 {
577 int regno = VALUE_REGNO (toval);
578 if (REGISTER_CONVERTIBLE (regno))
579 {
580 struct type *fromtype = check_typedef (VALUE_TYPE (fromval));
581 REGISTER_CONVERT_TO_RAW (fromtype, regno,
582 VALUE_CONTENTS (fromval), raw_buffer);
583 use_buffer = REGISTER_RAW_SIZE (regno);
584 }
585 }
c906108c
SS
586
587 switch (VALUE_LVAL (toval))
588 {
589 case lval_internalvar:
590 set_internalvar (VALUE_INTERNALVAR (toval), fromval);
591 val = value_copy (VALUE_INTERNALVAR (toval)->value);
592 VALUE_ENCLOSING_TYPE (val) = VALUE_ENCLOSING_TYPE (fromval);
593 VALUE_EMBEDDED_OFFSET (val) = VALUE_EMBEDDED_OFFSET (fromval);
594 VALUE_POINTED_TO_OFFSET (val) = VALUE_POINTED_TO_OFFSET (fromval);
595 return val;
596
597 case lval_internalvar_component:
598 set_internalvar_component (VALUE_INTERNALVAR (toval),
599 VALUE_OFFSET (toval),
600 VALUE_BITPOS (toval),
601 VALUE_BITSIZE (toval),
602 fromval);
603 break;
604
605 case lval_memory:
606 {
607 char *dest_buffer;
c5aa993b
JM
608 CORE_ADDR changed_addr;
609 int changed_len;
c906108c 610
c5aa993b
JM
611 if (VALUE_BITSIZE (toval))
612 {
c906108c
SS
613 char buffer[sizeof (LONGEST)];
614 /* We assume that the argument to read_memory is in units of
615 host chars. FIXME: Is that correct? */
616 changed_len = (VALUE_BITPOS (toval)
c5aa993b
JM
617 + VALUE_BITSIZE (toval)
618 + HOST_CHAR_BIT - 1)
619 / HOST_CHAR_BIT;
c906108c
SS
620
621 if (changed_len > (int) sizeof (LONGEST))
622 error ("Can't handle bitfields which don't fit in a %d bit word.",
623 sizeof (LONGEST) * HOST_CHAR_BIT);
624
625 read_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
626 buffer, changed_len);
627 modify_field (buffer, value_as_long (fromval),
628 VALUE_BITPOS (toval), VALUE_BITSIZE (toval));
629 changed_addr = VALUE_ADDRESS (toval) + VALUE_OFFSET (toval);
630 dest_buffer = buffer;
631 }
632 else if (use_buffer)
633 {
634 changed_addr = VALUE_ADDRESS (toval) + VALUE_OFFSET (toval);
635 changed_len = use_buffer;
636 dest_buffer = raw_buffer;
637 }
638 else
639 {
640 changed_addr = VALUE_ADDRESS (toval) + VALUE_OFFSET (toval);
641 changed_len = TYPE_LENGTH (type);
642 dest_buffer = VALUE_CONTENTS (fromval);
643 }
644
645 write_memory (changed_addr, dest_buffer, changed_len);
646 if (memory_changed_hook)
647 memory_changed_hook (changed_addr, changed_len);
648 }
649 break;
650
651 case lval_register:
652 if (VALUE_BITSIZE (toval))
653 {
654 char buffer[sizeof (LONGEST)];
c5aa993b 655 int len = REGISTER_RAW_SIZE (VALUE_REGNO (toval));
c906108c
SS
656
657 if (len > (int) sizeof (LONGEST))
658 error ("Can't handle bitfields in registers larger than %d bits.",
659 sizeof (LONGEST) * HOST_CHAR_BIT);
660
661 if (VALUE_BITPOS (toval) + VALUE_BITSIZE (toval)
662 > len * HOST_CHAR_BIT)
663 /* Getting this right would involve being very careful about
664 byte order. */
665 error ("\
666Can't handle bitfield which doesn't fit in a single register.");
667
c5aa993b
JM
668 read_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
669 buffer, len);
670 modify_field (buffer, value_as_long (fromval),
671 VALUE_BITPOS (toval), VALUE_BITSIZE (toval));
672 write_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
673 buffer, len);
c906108c
SS
674 }
675 else if (use_buffer)
676 write_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
677 raw_buffer, use_buffer);
678 else
c5aa993b 679 {
c906108c
SS
680 /* Do any conversion necessary when storing this type to more
681 than one register. */
682#ifdef REGISTER_CONVERT_FROM_TYPE
683 memcpy (raw_buffer, VALUE_CONTENTS (fromval), TYPE_LENGTH (type));
c5aa993b 684 REGISTER_CONVERT_FROM_TYPE (VALUE_REGNO (toval), type, raw_buffer);
c906108c
SS
685 write_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
686 raw_buffer, TYPE_LENGTH (type));
687#else
688 write_register_bytes (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval),
c5aa993b 689 VALUE_CONTENTS (fromval), TYPE_LENGTH (type));
c906108c
SS
690#endif
691 }
692 /* Assigning to the stack pointer, frame pointer, and other
c5aa993b
JM
693 (architecture and calling convention specific) registers may
694 cause the frame cache to be out of date. We just do this
695 on all assignments to registers for simplicity; I doubt the slowdown
696 matters. */
c906108c
SS
697 reinit_frame_cache ();
698 break;
699
700 case lval_reg_frame_relative:
701 {
702 /* value is stored in a series of registers in the frame
703 specified by the structure. Copy that value out, modify
704 it, and copy it back in. */
705 int amount_to_copy = (VALUE_BITSIZE (toval) ? 1 : TYPE_LENGTH (type));
706 int reg_size = REGISTER_RAW_SIZE (VALUE_FRAME_REGNUM (toval));
707 int byte_offset = VALUE_OFFSET (toval) % reg_size;
708 int reg_offset = VALUE_OFFSET (toval) / reg_size;
709 int amount_copied;
710
711 /* Make the buffer large enough in all cases. */
712 char *buffer = (char *) alloca (amount_to_copy
713 + sizeof (LONGEST)
714 + MAX_REGISTER_RAW_SIZE);
715
716 int regno;
717 struct frame_info *frame;
718
719 /* Figure out which frame this is in currently. */
720 for (frame = get_current_frame ();
721 frame && FRAME_FP (frame) != VALUE_FRAME (toval);
722 frame = get_prev_frame (frame))
723 ;
724
725 if (!frame)
726 error ("Value being assigned to is no longer active.");
727
728 amount_to_copy += (reg_size - amount_to_copy % reg_size);
729
730 /* Copy it out. */
731 for ((regno = VALUE_FRAME_REGNUM (toval) + reg_offset,
732 amount_copied = 0);
733 amount_copied < amount_to_copy;
734 amount_copied += reg_size, regno++)
735 {
736 get_saved_register (buffer + amount_copied,
c5aa993b
JM
737 (int *) NULL, (CORE_ADDR *) NULL,
738 frame, regno, (enum lval_type *) NULL);
c906108c
SS
739 }
740
741 /* Modify what needs to be modified. */
742 if (VALUE_BITSIZE (toval))
743 modify_field (buffer + byte_offset,
744 value_as_long (fromval),
745 VALUE_BITPOS (toval), VALUE_BITSIZE (toval));
746 else if (use_buffer)
747 memcpy (buffer + byte_offset, raw_buffer, use_buffer);
748 else
749 memcpy (buffer + byte_offset, VALUE_CONTENTS (fromval),
750 TYPE_LENGTH (type));
751
752 /* Copy it back. */
753 for ((regno = VALUE_FRAME_REGNUM (toval) + reg_offset,
754 amount_copied = 0);
755 amount_copied < amount_to_copy;
756 amount_copied += reg_size, regno++)
757 {
758 enum lval_type lval;
759 CORE_ADDR addr;
760 int optim;
761
762 /* Just find out where to put it. */
c5aa993b
JM
763 get_saved_register ((char *) NULL,
764 &optim, &addr, frame, regno, &lval);
765
c906108c
SS
766 if (optim)
767 error ("Attempt to assign to a value that was optimized out.");
768 if (lval == lval_memory)
769 write_memory (addr, buffer + amount_copied, reg_size);
770 else if (lval == lval_register)
771 write_register_bytes (addr, buffer + amount_copied, reg_size);
772 else
773 error ("Attempt to assign to an unmodifiable value.");
774 }
775
776 if (register_changed_hook)
777 register_changed_hook (-1);
778 }
779 break;
c5aa993b 780
c906108c
SS
781
782 default:
783 error ("Left operand of assignment is not an lvalue.");
784 }
785
786 /* If the field does not entirely fill a LONGEST, then zero the sign bits.
787 If the field is signed, and is negative, then sign extend. */
788 if ((VALUE_BITSIZE (toval) > 0)
789 && (VALUE_BITSIZE (toval) < 8 * (int) sizeof (LONGEST)))
790 {
791 LONGEST fieldval = value_as_long (fromval);
792 LONGEST valmask = (((ULONGEST) 1) << VALUE_BITSIZE (toval)) - 1;
793
794 fieldval &= valmask;
795 if (!TYPE_UNSIGNED (type) && (fieldval & (valmask ^ (valmask >> 1))))
796 fieldval |= ~valmask;
797
798 fromval = value_from_longest (type, fieldval);
799 }
800
801 val = value_copy (toval);
802 memcpy (VALUE_CONTENTS_RAW (val), VALUE_CONTENTS (fromval),
803 TYPE_LENGTH (type));
804 VALUE_TYPE (val) = type;
805 VALUE_ENCLOSING_TYPE (val) = VALUE_ENCLOSING_TYPE (fromval);
806 VALUE_EMBEDDED_OFFSET (val) = VALUE_EMBEDDED_OFFSET (fromval);
807 VALUE_POINTED_TO_OFFSET (val) = VALUE_POINTED_TO_OFFSET (fromval);
c5aa993b 808
c906108c
SS
809 return val;
810}
811
812/* Extend a value VAL to COUNT repetitions of its type. */
813
814value_ptr
815value_repeat (arg1, count)
816 value_ptr arg1;
817 int count;
818{
819 register value_ptr val;
820
821 if (VALUE_LVAL (arg1) != lval_memory)
822 error ("Only values in memory can be extended with '@'.");
823 if (count < 1)
824 error ("Invalid number %d of repetitions.", count);
825
826 val = allocate_repeat_value (VALUE_ENCLOSING_TYPE (arg1), count);
827
828 read_memory (VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1),
829 VALUE_CONTENTS_ALL_RAW (val),
830 TYPE_LENGTH (VALUE_ENCLOSING_TYPE (val)));
831 VALUE_LVAL (val) = lval_memory;
832 VALUE_ADDRESS (val) = VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1);
833
834 return val;
835}
836
837value_ptr
838value_of_variable (var, b)
839 struct symbol *var;
840 struct block *b;
841{
842 value_ptr val;
843 struct frame_info *frame = NULL;
844
845 if (!b)
846 frame = NULL; /* Use selected frame. */
847 else if (symbol_read_needs_frame (var))
848 {
849 frame = block_innermost_frame (b);
850 if (!frame)
c5aa993b 851 {
c906108c
SS
852 if (BLOCK_FUNCTION (b)
853 && SYMBOL_SOURCE_NAME (BLOCK_FUNCTION (b)))
854 error ("No frame is currently executing in block %s.",
855 SYMBOL_SOURCE_NAME (BLOCK_FUNCTION (b)));
856 else
857 error ("No frame is currently executing in specified block");
c5aa993b 858 }
c906108c
SS
859 }
860
861 val = read_var_value (var, frame);
862 if (!val)
863 error ("Address of symbol \"%s\" is unknown.", SYMBOL_SOURCE_NAME (var));
864
865 return val;
866}
867
868/* Given a value which is an array, return a value which is a pointer to its
869 first element, regardless of whether or not the array has a nonzero lower
870 bound.
871
872 FIXME: A previous comment here indicated that this routine should be
873 substracting the array's lower bound. It's not clear to me that this
874 is correct. Given an array subscripting operation, it would certainly
875 work to do the adjustment here, essentially computing:
876
877 (&array[0] - (lowerbound * sizeof array[0])) + (index * sizeof array[0])
878
879 However I believe a more appropriate and logical place to account for
880 the lower bound is to do so in value_subscript, essentially computing:
881
882 (&array[0] + ((index - lowerbound) * sizeof array[0]))
883
884 As further evidence consider what would happen with operations other
885 than array subscripting, where the caller would get back a value that
886 had an address somewhere before the actual first element of the array,
887 and the information about the lower bound would be lost because of
888 the coercion to pointer type.
c5aa993b 889 */
c906108c
SS
890
891value_ptr
892value_coerce_array (arg1)
893 value_ptr arg1;
894{
895 register struct type *type = check_typedef (VALUE_TYPE (arg1));
896
897 if (VALUE_LVAL (arg1) != lval_memory)
898 error ("Attempt to take address of value not located in memory.");
899
900 return value_from_longest (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
c5aa993b 901 (LONGEST) (VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1)));
c906108c
SS
902}
903
904/* Given a value which is a function, return a value which is a pointer
905 to it. */
906
907value_ptr
908value_coerce_function (arg1)
909 value_ptr arg1;
910{
911 value_ptr retval;
912
913 if (VALUE_LVAL (arg1) != lval_memory)
914 error ("Attempt to take address of value not located in memory.");
915
916 retval = value_from_longest (lookup_pointer_type (VALUE_TYPE (arg1)),
c5aa993b 917 (LONGEST) (VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1)));
c906108c
SS
918 VALUE_BFD_SECTION (retval) = VALUE_BFD_SECTION (arg1);
919 return retval;
c5aa993b 920}
c906108c
SS
921
922/* Return a pointer value for the object for which ARG1 is the contents. */
923
924value_ptr
925value_addr (arg1)
926 value_ptr arg1;
927{
928 value_ptr arg2;
929
930 struct type *type = check_typedef (VALUE_TYPE (arg1));
931 if (TYPE_CODE (type) == TYPE_CODE_REF)
932 {
933 /* Copy the value, but change the type from (T&) to (T*).
c5aa993b
JM
934 We keep the same location information, which is efficient,
935 and allows &(&X) to get the location containing the reference. */
c906108c
SS
936 arg2 = value_copy (arg1);
937 VALUE_TYPE (arg2) = lookup_pointer_type (TYPE_TARGET_TYPE (type));
938 return arg2;
939 }
940 if (TYPE_CODE (type) == TYPE_CODE_FUNC)
941 return value_coerce_function (arg1);
942
943 if (VALUE_LVAL (arg1) != lval_memory)
944 error ("Attempt to take address of value not located in memory.");
945
c5aa993b 946 /* Get target memory address */
c906108c 947 arg2 = value_from_longest (lookup_pointer_type (VALUE_TYPE (arg1)),
c5aa993b
JM
948 (LONGEST) (VALUE_ADDRESS (arg1)
949 + VALUE_OFFSET (arg1)
950 + VALUE_EMBEDDED_OFFSET (arg1)));
c906108c
SS
951
952 /* This may be a pointer to a base subobject; so remember the
c5aa993b 953 full derived object's type ... */
c906108c 954 VALUE_ENCLOSING_TYPE (arg2) = lookup_pointer_type (VALUE_ENCLOSING_TYPE (arg1));
c5aa993b
JM
955 /* ... and also the relative position of the subobject in the full object */
956 VALUE_POINTED_TO_OFFSET (arg2) = VALUE_EMBEDDED_OFFSET (arg1);
c906108c
SS
957 VALUE_BFD_SECTION (arg2) = VALUE_BFD_SECTION (arg1);
958 return arg2;
959}
960
961/* Given a value of a pointer type, apply the C unary * operator to it. */
962
963value_ptr
964value_ind (arg1)
965 value_ptr arg1;
966{
967 struct type *base_type;
968 value_ptr arg2;
c906108c
SS
969
970 COERCE_ARRAY (arg1);
971
972 base_type = check_typedef (VALUE_TYPE (arg1));
973
974 if (TYPE_CODE (base_type) == TYPE_CODE_MEMBER)
975 error ("not implemented: member types in value_ind");
976
977 /* Allow * on an integer so we can cast it to whatever we want.
978 This returns an int, which seems like the most C-like thing
979 to do. "long long" variables are rare enough that
980 BUILTIN_TYPE_LONGEST would seem to be a mistake. */
981 if (TYPE_CODE (base_type) == TYPE_CODE_INT)
982 return value_at (builtin_type_int,
983 (CORE_ADDR) value_as_long (arg1),
984 VALUE_BFD_SECTION (arg1));
985 else if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
986 {
987 struct type *enc_type;
988 /* We may be pointing to something embedded in a larger object */
c5aa993b 989 /* Get the real type of the enclosing object */
c906108c
SS
990 enc_type = check_typedef (VALUE_ENCLOSING_TYPE (arg1));
991 enc_type = TYPE_TARGET_TYPE (enc_type);
c5aa993b
JM
992 /* Retrieve the enclosing object pointed to */
993 arg2 = value_at_lazy (enc_type,
994 value_as_pointer (arg1) - VALUE_POINTED_TO_OFFSET (arg1),
995 VALUE_BFD_SECTION (arg1));
996 /* Re-adjust type */
c906108c
SS
997 VALUE_TYPE (arg2) = TYPE_TARGET_TYPE (base_type);
998 /* Add embedding info */
999 VALUE_ENCLOSING_TYPE (arg2) = enc_type;
1000 VALUE_EMBEDDED_OFFSET (arg2) = VALUE_POINTED_TO_OFFSET (arg1);
1001
1002 /* We may be pointing to an object of some derived type */
1003 arg2 = value_full_object (arg2, NULL, 0, 0, 0);
1004 return arg2;
1005 }
1006
1007 error ("Attempt to take contents of a non-pointer value.");
c5aa993b 1008 return 0; /* For lint -- never reached */
c906108c
SS
1009}
1010\f
1011/* Pushing small parts of stack frames. */
1012
1013/* Push one word (the size of object that a register holds). */
1014
1015CORE_ADDR
1016push_word (sp, word)
1017 CORE_ADDR sp;
1018 ULONGEST word;
1019{
1020 register int len = REGISTER_SIZE;
1021 char buffer[MAX_REGISTER_RAW_SIZE];
1022
1023 store_unsigned_integer (buffer, len, word);
1024 if (INNER_THAN (1, 2))
1025 {
1026 /* stack grows downward */
1027 sp -= len;
1028 write_memory (sp, buffer, len);
1029 }
1030 else
1031 {
1032 /* stack grows upward */
1033 write_memory (sp, buffer, len);
1034 sp += len;
1035 }
1036
1037 return sp;
1038}
1039
1040/* Push LEN bytes with data at BUFFER. */
1041
1042CORE_ADDR
1043push_bytes (sp, buffer, len)
1044 CORE_ADDR sp;
1045 char *buffer;
1046 int len;
1047{
1048 if (INNER_THAN (1, 2))
1049 {
1050 /* stack grows downward */
1051 sp -= len;
1052 write_memory (sp, buffer, len);
1053 }
1054 else
1055 {
1056 /* stack grows upward */
1057 write_memory (sp, buffer, len);
1058 sp += len;
1059 }
1060
1061 return sp;
1062}
1063
1064/* Push onto the stack the specified value VALUE. */
1065
c906108c
SS
1066static CORE_ADDR
1067value_push (sp, arg)
1068 register CORE_ADDR sp;
1069 value_ptr arg;
1070{
1071 register int len = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (arg));
1072
1073 if (INNER_THAN (1, 2))
1074 {
1075 /* stack grows downward */
1076 sp -= len;
1077 write_memory (sp, VALUE_CONTENTS_ALL (arg), len);
1078 }
1079 else
1080 {
1081 /* stack grows upward */
1082 write_memory (sp, VALUE_CONTENTS_ALL (arg), len);
1083 sp += len;
1084 }
1085
1086 return sp;
1087}
1088
392a587b
JM
1089#ifndef PUSH_ARGUMENTS
1090#define PUSH_ARGUMENTS default_push_arguments
1091#endif
1092
1093CORE_ADDR
ac9a91a7 1094default_push_arguments (nargs, args, sp, struct_return, struct_addr)
392a587b
JM
1095 int nargs;
1096 value_ptr *args;
392a587b 1097 CORE_ADDR sp;
ac9a91a7 1098 int struct_return;
392a587b
JM
1099 CORE_ADDR struct_addr;
1100{
1101 /* ASSERT ( !struct_return); */
1102 int i;
1103 for (i = nargs - 1; i >= 0; i--)
1104 sp = value_push (sp, args[i]);
1105 return sp;
1106}
1107
c906108c 1108
c906108c
SS
1109/* Perform the standard coercions that are specified
1110 for arguments to be passed to C functions.
1111
1112 If PARAM_TYPE is non-NULL, it is the expected parameter type.
1113 IS_PROTOTYPED is non-zero if the function declaration is prototyped. */
1114
1115static value_ptr
1116value_arg_coerce (arg, param_type, is_prototyped)
1117 value_ptr arg;
1118 struct type *param_type;
1119 int is_prototyped;
1120{
1121 register struct type *arg_type = check_typedef (VALUE_TYPE (arg));
1122 register struct type *type
c5aa993b 1123 = param_type ? check_typedef (param_type) : arg_type;
c906108c
SS
1124
1125 switch (TYPE_CODE (type))
1126 {
1127 case TYPE_CODE_REF:
1128 if (TYPE_CODE (arg_type) != TYPE_CODE_REF)
1129 {
1130 arg = value_addr (arg);
1131 VALUE_TYPE (arg) = param_type;
1132 return arg;
1133 }
1134 break;
1135 case TYPE_CODE_INT:
1136 case TYPE_CODE_CHAR:
1137 case TYPE_CODE_BOOL:
1138 case TYPE_CODE_ENUM:
1139 /* If we don't have a prototype, coerce to integer type if necessary. */
1140 if (!is_prototyped)
1141 {
1142 if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_int))
1143 type = builtin_type_int;
1144 }
1145 /* Currently all target ABIs require at least the width of an integer
c5aa993b
JM
1146 type for an argument. We may have to conditionalize the following
1147 type coercion for future targets. */
c906108c
SS
1148 if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_int))
1149 type = builtin_type_int;
1150 break;
1151 case TYPE_CODE_FLT:
1152 /* FIXME: We should always convert floats to doubles in the
c5aa993b
JM
1153 non-prototyped case. As many debugging formats include
1154 no information about prototyping, we have to live with
1155 COERCE_FLOAT_TO_DOUBLE for now. */
c906108c
SS
1156 if (!is_prototyped && COERCE_FLOAT_TO_DOUBLE)
1157 {
1158 if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_double))
1159 type = builtin_type_double;
1160 else if (TYPE_LENGTH (type) > TYPE_LENGTH (builtin_type_double))
1161 type = builtin_type_long_double;
1162 }
1163 break;
1164 case TYPE_CODE_FUNC:
1165 type = lookup_pointer_type (type);
1166 break;
1167 case TYPE_CODE_ARRAY:
1168 if (current_language->c_style_arrays)
1169 type = lookup_pointer_type (TYPE_TARGET_TYPE (type));
1170 break;
1171 case TYPE_CODE_UNDEF:
1172 case TYPE_CODE_PTR:
1173 case TYPE_CODE_STRUCT:
1174 case TYPE_CODE_UNION:
1175 case TYPE_CODE_VOID:
1176 case TYPE_CODE_SET:
1177 case TYPE_CODE_RANGE:
1178 case TYPE_CODE_STRING:
1179 case TYPE_CODE_BITSTRING:
1180 case TYPE_CODE_ERROR:
1181 case TYPE_CODE_MEMBER:
1182 case TYPE_CODE_METHOD:
1183 case TYPE_CODE_COMPLEX:
1184 default:
1185 break;
1186 }
1187
1188 return value_cast (type, arg);
1189}
1190
1191/* Determine a function's address and its return type from its value.
1192 Calls error() if the function is not valid for calling. */
1193
1194static CORE_ADDR
1195find_function_addr (function, retval_type)
1196 value_ptr function;
1197 struct type **retval_type;
1198{
1199 register struct type *ftype = check_typedef (VALUE_TYPE (function));
1200 register enum type_code code = TYPE_CODE (ftype);
1201 struct type *value_type;
1202 CORE_ADDR funaddr;
1203
1204 /* If it's a member function, just look at the function
1205 part of it. */
1206
1207 /* Determine address to call. */
1208 if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
1209 {
1210 funaddr = VALUE_ADDRESS (function);
1211 value_type = TYPE_TARGET_TYPE (ftype);
1212 }
1213 else if (code == TYPE_CODE_PTR)
1214 {
1215 funaddr = value_as_pointer (function);
1216 ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
1217 if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
1218 || TYPE_CODE (ftype) == TYPE_CODE_METHOD)
1219 {
1220#ifdef CONVERT_FROM_FUNC_PTR_ADDR
1221 /* FIXME: This is a workaround for the unusual function
1222 pointer representation on the RS/6000, see comment
1223 in config/rs6000/tm-rs6000.h */
1224 funaddr = CONVERT_FROM_FUNC_PTR_ADDR (funaddr);
1225#endif
1226 value_type = TYPE_TARGET_TYPE (ftype);
1227 }
1228 else
1229 value_type = builtin_type_int;
1230 }
1231 else if (code == TYPE_CODE_INT)
1232 {
1233 /* Handle the case of functions lacking debugging info.
c5aa993b 1234 Their values are characters since their addresses are char */
c906108c
SS
1235 if (TYPE_LENGTH (ftype) == 1)
1236 funaddr = value_as_pointer (value_addr (function));
1237 else
1238 /* Handle integer used as address of a function. */
1239 funaddr = (CORE_ADDR) value_as_long (function);
1240
1241 value_type = builtin_type_int;
1242 }
1243 else
1244 error ("Invalid data type for function to be called.");
1245
1246 *retval_type = value_type;
1247 return funaddr;
1248}
1249
1250/* All this stuff with a dummy frame may seem unnecessarily complicated
1251 (why not just save registers in GDB?). The purpose of pushing a dummy
1252 frame which looks just like a real frame is so that if you call a
1253 function and then hit a breakpoint (get a signal, etc), "backtrace"
1254 will look right. Whether the backtrace needs to actually show the
1255 stack at the time the inferior function was called is debatable, but
1256 it certainly needs to not display garbage. So if you are contemplating
1257 making dummy frames be different from normal frames, consider that. */
1258
1259/* Perform a function call in the inferior.
1260 ARGS is a vector of values of arguments (NARGS of them).
1261 FUNCTION is a value, the function to be called.
1262 Returns a value representing what the function returned.
1263 May fail to return, if a breakpoint or signal is hit
1264 during the execution of the function.
1265
1266 ARGS is modified to contain coerced values. */
1267
c5aa993b 1268static value_ptr hand_function_call PARAMS ((value_ptr function, int nargs, value_ptr * args));
7a292a7a
SS
1269static value_ptr
1270hand_function_call (function, nargs, args)
c906108c
SS
1271 value_ptr function;
1272 int nargs;
1273 value_ptr *args;
1274{
1275 register CORE_ADDR sp;
1276 register int i;
1277 CORE_ADDR start_sp;
1278 /* CALL_DUMMY is an array of words (REGISTER_SIZE), but each word
1279 is in host byte order. Before calling FIX_CALL_DUMMY, we byteswap it
1280 and remove any extra bytes which might exist because ULONGEST is
1281 bigger than REGISTER_SIZE.
1282
1283 NOTE: This is pretty wierd, as the call dummy is actually a
c5aa993b
JM
1284 sequence of instructions. But CISC machines will have
1285 to pack the instructions into REGISTER_SIZE units (and
1286 so will RISC machines for which INSTRUCTION_SIZE is not
1287 REGISTER_SIZE).
7a292a7a
SS
1288
1289 NOTE: This is pretty stupid. CALL_DUMMY should be in strict
c5aa993b 1290 target byte order. */
c906108c 1291
7a292a7a
SS
1292 static ULONGEST *dummy;
1293 int sizeof_dummy1;
1294 char *dummy1;
c906108c
SS
1295 CORE_ADDR old_sp;
1296 struct type *value_type;
1297 unsigned char struct_return;
1298 CORE_ADDR struct_addr = 0;
7a292a7a 1299 struct inferior_status *inf_status;
c906108c
SS
1300 struct cleanup *old_chain;
1301 CORE_ADDR funaddr;
c5aa993b 1302 int using_gcc; /* Set to version of gcc in use, or zero if not gcc */
c906108c
SS
1303 CORE_ADDR real_pc;
1304 struct type *param_type = NULL;
1305 struct type *ftype = check_typedef (SYMBOL_TYPE (function));
1306
7a292a7a
SS
1307 dummy = alloca (SIZEOF_CALL_DUMMY_WORDS);
1308 sizeof_dummy1 = REGISTER_SIZE * SIZEOF_CALL_DUMMY_WORDS / sizeof (ULONGEST);
1309 dummy1 = alloca (sizeof_dummy1);
1310 memcpy (dummy, CALL_DUMMY_WORDS, SIZEOF_CALL_DUMMY_WORDS);
1311
c906108c 1312 if (!target_has_execution)
c5aa993b 1313 noprocess ();
c906108c 1314
7a292a7a 1315 inf_status = save_inferior_status (1);
c5aa993b
JM
1316 old_chain = make_cleanup ((make_cleanup_func) restore_inferior_status,
1317 inf_status);
c906108c
SS
1318
1319 /* PUSH_DUMMY_FRAME is responsible for saving the inferior registers
1320 (and POP_FRAME for restoring them). (At least on most machines)
1321 they are saved on the stack in the inferior. */
1322 PUSH_DUMMY_FRAME;
1323
1324 old_sp = sp = read_sp ();
1325
1326 if (INNER_THAN (1, 2))
1327 {
1328 /* Stack grows down */
7a292a7a 1329 sp -= sizeof_dummy1;
c906108c
SS
1330 start_sp = sp;
1331 }
1332 else
1333 {
1334 /* Stack grows up */
1335 start_sp = sp;
7a292a7a 1336 sp += sizeof_dummy1;
c906108c
SS
1337 }
1338
1339 funaddr = find_function_addr (function, &value_type);
1340 CHECK_TYPEDEF (value_type);
1341
1342 {
1343 struct block *b = block_for_pc (funaddr);
1344 /* If compiled without -g, assume GCC 2. */
1345 using_gcc = (b == NULL ? 2 : BLOCK_GCC_COMPILED (b));
1346 }
1347
1348 /* Are we returning a value using a structure return or a normal
1349 value return? */
1350
1351 struct_return = using_struct_return (function, funaddr, value_type,
1352 using_gcc);
1353
1354 /* Create a call sequence customized for this function
1355 and the number of arguments for it. */
7a292a7a 1356 for (i = 0; i < (int) (SIZEOF_CALL_DUMMY_WORDS / sizeof (dummy[0])); i++)
c906108c
SS
1357 store_unsigned_integer (&dummy1[i * REGISTER_SIZE],
1358 REGISTER_SIZE,
c5aa993b 1359 (ULONGEST) dummy[i]);
c906108c
SS
1360
1361#ifdef GDB_TARGET_IS_HPPA
1362 real_pc = FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs, args,
1363 value_type, using_gcc);
1364#else
1365 FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs, args,
1366 value_type, using_gcc);
1367 real_pc = start_sp;
1368#endif
1369
7a292a7a
SS
1370 if (CALL_DUMMY_LOCATION == ON_STACK)
1371 {
c5aa993b 1372 write_memory (start_sp, (char *) dummy1, sizeof_dummy1);
7a292a7a 1373 }
c906108c 1374
7a292a7a
SS
1375 if (CALL_DUMMY_LOCATION == BEFORE_TEXT_END)
1376 {
1377 /* Convex Unix prohibits executing in the stack segment. */
1378 /* Hope there is empty room at the top of the text segment. */
1379 extern CORE_ADDR text_end;
392a587b 1380 static int checked = 0;
7a292a7a
SS
1381 if (!checked)
1382 for (start_sp = text_end - sizeof_dummy1; start_sp < text_end; ++start_sp)
1383 if (read_memory_integer (start_sp, 1) != 0)
1384 error ("text segment full -- no place to put call");
1385 checked = 1;
1386 sp = old_sp;
1387 real_pc = text_end - sizeof_dummy1;
c5aa993b 1388 write_memory (real_pc, (char *) dummy1, sizeof_dummy1);
7a292a7a 1389 }
c5aa993b 1390
7a292a7a
SS
1391 if (CALL_DUMMY_LOCATION == AFTER_TEXT_END)
1392 {
1393 extern CORE_ADDR text_end;
1394 int errcode;
1395 sp = old_sp;
1396 real_pc = text_end;
c5aa993b 1397 errcode = target_write_memory (real_pc, (char *) dummy1, sizeof_dummy1);
7a292a7a
SS
1398 if (errcode != 0)
1399 error ("Cannot write text segment -- call_function failed");
1400 }
c906108c 1401
7a292a7a
SS
1402 if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
1403 {
1404 real_pc = funaddr;
1405 }
c906108c
SS
1406
1407#ifdef lint
c5aa993b 1408 sp = old_sp; /* It really is used, for some ifdef's... */
c906108c
SS
1409#endif
1410
1411 if (nargs < TYPE_NFIELDS (ftype))
1412 error ("too few arguments in function call");
1413
1414 for (i = nargs - 1; i >= 0; i--)
1415 {
1416 /* If we're off the end of the known arguments, do the standard
c5aa993b
JM
1417 promotions. FIXME: if we had a prototype, this should only
1418 be allowed if ... were present. */
c906108c
SS
1419 if (i >= TYPE_NFIELDS (ftype))
1420 args[i] = value_arg_coerce (args[i], NULL, 0);
1421
c5aa993b 1422 else
c906108c
SS
1423 {
1424 int is_prototyped = TYPE_FLAGS (ftype) & TYPE_FLAG_PROTOTYPED;
1425 param_type = TYPE_FIELD_TYPE (ftype, i);
1426
1427 args[i] = value_arg_coerce (args[i], param_type, is_prototyped);
1428 }
1429
1430 /*elz: this code is to handle the case in which the function to be called
c5aa993b
JM
1431 has a pointer to function as parameter and the corresponding actual argument
1432 is the address of a function and not a pointer to function variable.
1433 In aCC compiled code, the calls through pointers to functions (in the body
1434 of the function called by hand) are made via $$dyncall_external which
1435 requires some registers setting, this is taken care of if we call
1436 via a function pointer variable, but not via a function address.
1437 In cc this is not a problem. */
c906108c
SS
1438
1439 if (using_gcc == 0)
1440 if (param_type)
c5aa993b 1441 /* if this parameter is a pointer to function */
c906108c
SS
1442 if (TYPE_CODE (param_type) == TYPE_CODE_PTR)
1443 if (TYPE_CODE (param_type->target_type) == TYPE_CODE_FUNC)
1444 /* elz: FIXME here should go the test about the compiler used
c5aa993b
JM
1445 to compile the target. We want to issue the error
1446 message only if the compiler used was HP's aCC.
1447 If we used HP's cc, then there is no problem and no need
1448 to return at this point */
1449 if (using_gcc == 0) /* && compiler == aCC */
c906108c 1450 /* go see if the actual parameter is a variable of type
c5aa993b 1451 pointer to function or just a function */
c906108c
SS
1452 if (args[i]->lval == not_lval)
1453 {
1454 char *arg_name;
c5aa993b
JM
1455 if (find_pc_partial_function ((CORE_ADDR) args[i]->aligner.contents[0], &arg_name, NULL, NULL))
1456 error ("\
c906108c
SS
1457You cannot use function <%s> as argument. \n\
1458You must use a pointer to function type variable. Command ignored.", arg_name);
c5aa993b 1459 }
c906108c
SS
1460 }
1461
1462#if defined (REG_STRUCT_HAS_ADDR)
1463 {
1464 /* This is a machine like the sparc, where we may need to pass a pointer
1465 to the structure, not the structure itself. */
1466 for (i = nargs - 1; i >= 0; i--)
1467 {
1468 struct type *arg_type = check_typedef (VALUE_TYPE (args[i]));
1469 if ((TYPE_CODE (arg_type) == TYPE_CODE_STRUCT
1470 || TYPE_CODE (arg_type) == TYPE_CODE_UNION
1471 || TYPE_CODE (arg_type) == TYPE_CODE_ARRAY
1472 || TYPE_CODE (arg_type) == TYPE_CODE_STRING
1473 || TYPE_CODE (arg_type) == TYPE_CODE_BITSTRING
1474 || TYPE_CODE (arg_type) == TYPE_CODE_SET
1475 || (TYPE_CODE (arg_type) == TYPE_CODE_FLT
1476 && TYPE_LENGTH (arg_type) > 8)
c5aa993b
JM
1477 )
1478 && REG_STRUCT_HAS_ADDR (using_gcc, arg_type))
c906108c
SS
1479 {
1480 CORE_ADDR addr;
c5aa993b
JM
1481 int len; /* = TYPE_LENGTH (arg_type); */
1482 int aligned_len;
1483 arg_type = check_typedef (VALUE_ENCLOSING_TYPE (args[i]));
1484 len = TYPE_LENGTH (arg_type);
c906108c
SS
1485
1486#ifdef STACK_ALIGN
c5aa993b
JM
1487 /* MVS 11/22/96: I think at least some of this stack_align code is
1488 really broken. Better to let PUSH_ARGUMENTS adjust the stack in
1489 a target-defined manner. */
c906108c
SS
1490 aligned_len = STACK_ALIGN (len);
1491#else
1492 aligned_len = len;
1493#endif
1494 if (INNER_THAN (1, 2))
1495 {
1496 /* stack grows downward */
1497 sp -= aligned_len;
1498 }
1499 else
1500 {
1501 /* The stack grows up, so the address of the thing we push
1502 is the stack pointer before we push it. */
1503 addr = sp;
1504 }
1505 /* Push the structure. */
1506 write_memory (sp, VALUE_CONTENTS_ALL (args[i]), len);
1507 if (INNER_THAN (1, 2))
1508 {
1509 /* The stack grows down, so the address of the thing we push
1510 is the stack pointer after we push it. */
1511 addr = sp;
1512 }
1513 else
1514 {
1515 /* stack grows upward */
1516 sp += aligned_len;
1517 }
1518 /* The value we're going to pass is the address of the thing
1519 we just pushed. */
1520 /*args[i] = value_from_longest (lookup_pointer_type (value_type),
c5aa993b
JM
1521 (LONGEST) addr); */
1522 args[i] = value_from_longest (lookup_pointer_type (arg_type),
c906108c
SS
1523 (LONGEST) addr);
1524 }
1525 }
1526 }
1527#endif /* REG_STRUCT_HAS_ADDR. */
1528
1529 /* Reserve space for the return structure to be written on the
1530 stack, if necessary */
1531
1532 if (struct_return)
1533 {
1534 int len = TYPE_LENGTH (value_type);
1535#ifdef STACK_ALIGN
c5aa993b
JM
1536 /* MVS 11/22/96: I think at least some of this stack_align code is
1537 really broken. Better to let PUSH_ARGUMENTS adjust the stack in
1538 a target-defined manner. */
c906108c
SS
1539 len = STACK_ALIGN (len);
1540#endif
1541 if (INNER_THAN (1, 2))
1542 {
1543 /* stack grows downward */
1544 sp -= len;
1545 struct_addr = sp;
1546 }
1547 else
1548 {
1549 /* stack grows upward */
1550 struct_addr = sp;
1551 sp += len;
1552 }
1553 }
1554
1555/* elz: on HPPA no need for this extra alignment, maybe it is needed
1556 on other architectures. This is because all the alignment is taken care
1557 of in the above code (ifdef REG_STRUCT_HAS_ADDR) and in
c5aa993b 1558 hppa_push_arguments */
c906108c
SS
1559#ifndef NO_EXTRA_ALIGNMENT_NEEDED
1560
1561#if defined(STACK_ALIGN)
1562 /* MVS 11/22/96: I think at least some of this stack_align code is
1563 really broken. Better to let PUSH_ARGUMENTS adjust the stack in
1564 a target-defined manner. */
1565 if (INNER_THAN (1, 2))
1566 {
1567 /* If stack grows down, we must leave a hole at the top. */
1568 int len = 0;
1569
1570 for (i = nargs - 1; i >= 0; i--)
1571 len += TYPE_LENGTH (VALUE_ENCLOSING_TYPE (args[i]));
7a292a7a
SS
1572 if (CALL_DUMMY_STACK_ADJUST_P)
1573 len += CALL_DUMMY_STACK_ADJUST;
c906108c
SS
1574 sp -= STACK_ALIGN (len) - len;
1575 }
1576#endif /* STACK_ALIGN */
1577#endif /* NO_EXTRA_ALIGNMENT_NEEDED */
1578
392a587b 1579 sp = PUSH_ARGUMENTS (nargs, args, sp, struct_return, struct_addr);
c906108c
SS
1580
1581#ifdef PUSH_RETURN_ADDRESS /* for targets that use no CALL_DUMMY */
1582 /* There are a number of targets now which actually don't write any
1583 CALL_DUMMY instructions into the target, but instead just save the
1584 machine state, push the arguments, and jump directly to the callee
1585 function. Since this doesn't actually involve executing a JSR/BSR
1586 instruction, the return address must be set up by hand, either by
1587 pushing onto the stack or copying into a return-address register
1588 as appropriate. Formerly this has been done in PUSH_ARGUMENTS,
1589 but that's overloading its functionality a bit, so I'm making it
1590 explicit to do it here. */
c5aa993b
JM
1591 sp = PUSH_RETURN_ADDRESS (real_pc, sp);
1592#endif /* PUSH_RETURN_ADDRESS */
c906108c
SS
1593
1594#if defined(STACK_ALIGN)
c5aa993b 1595 if (!INNER_THAN (1, 2))
c906108c
SS
1596 {
1597 /* If stack grows up, we must leave a hole at the bottom, note
c5aa993b 1598 that sp already has been advanced for the arguments! */
7a292a7a
SS
1599 if (CALL_DUMMY_STACK_ADJUST_P)
1600 sp += CALL_DUMMY_STACK_ADJUST;
c906108c
SS
1601 sp = STACK_ALIGN (sp);
1602 }
1603#endif /* STACK_ALIGN */
1604
1605/* XXX This seems wrong. For stacks that grow down we shouldn't do
1606 anything here! */
1607 /* MVS 11/22/96: I think at least some of this stack_align code is
1608 really broken. Better to let PUSH_ARGUMENTS adjust the stack in
1609 a target-defined manner. */
7a292a7a
SS
1610 if (CALL_DUMMY_STACK_ADJUST_P)
1611 if (INNER_THAN (1, 2))
1612 {
1613 /* stack grows downward */
1614 sp -= CALL_DUMMY_STACK_ADJUST;
1615 }
c906108c
SS
1616
1617 /* Store the address at which the structure is supposed to be
1618 written. Note that this (and the code which reserved the space
1619 above) assumes that gcc was used to compile this function. Since
1620 it doesn't cost us anything but space and if the function is pcc
1621 it will ignore this value, we will make that assumption.
1622
1623 Also note that on some machines (like the sparc) pcc uses a
1624 convention like gcc's. */
1625
1626 if (struct_return)
1627 STORE_STRUCT_RETURN (struct_addr, sp);
1628
1629 /* Write the stack pointer. This is here because the statements above
1630 might fool with it. On SPARC, this write also stores the register
1631 window into the right place in the new stack frame, which otherwise
1632 wouldn't happen. (See store_inferior_registers in sparc-nat.c.) */
1633 write_sp (sp);
1634
43ff13b4
JM
1635#ifdef SAVE_DUMMY_FRAME_TOS
1636 SAVE_DUMMY_FRAME_TOS (sp);
1637#endif
1638
c906108c
SS
1639 {
1640 char retbuf[REGISTER_BYTES];
1641 char *name;
1642 struct symbol *symbol;
1643
1644 name = NULL;
1645 symbol = find_pc_function (funaddr);
1646 if (symbol)
1647 {
1648 name = SYMBOL_SOURCE_NAME (symbol);
1649 }
1650 else
1651 {
1652 /* Try the minimal symbols. */
1653 struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (funaddr);
1654
1655 if (msymbol)
1656 {
1657 name = SYMBOL_SOURCE_NAME (msymbol);
1658 }
1659 }
1660 if (name == NULL)
1661 {
1662 char format[80];
1663 sprintf (format, "at %s", local_hex_format ());
1664 name = alloca (80);
1665 /* FIXME-32x64: assumes funaddr fits in a long. */
1666 sprintf (name, format, (unsigned long) funaddr);
1667 }
1668
1669 /* Execute the stack dummy routine, calling FUNCTION.
1670 When it is done, discard the empty frame
1671 after storing the contents of all regs into retbuf. */
1672 if (run_stack_dummy (real_pc + CALL_DUMMY_START_OFFSET, retbuf))
1673 {
1674 /* We stopped somewhere besides the call dummy. */
1675
7a292a7a
SS
1676 /* If we did the cleanups, we would print a spurious error
1677 message (Unable to restore previously selected frame),
1678 would write the registers from the inf_status (which is
1679 wrong), and would do other wrong things. */
c906108c 1680 discard_cleanups (old_chain);
7a292a7a 1681 discard_inferior_status (inf_status);
c906108c
SS
1682
1683 /* The following error message used to say "The expression
1684 which contained the function call has been discarded." It
1685 is a hard concept to explain in a few words. Ideally, GDB
1686 would be able to resume evaluation of the expression when
1687 the function finally is done executing. Perhaps someday
1688 this will be implemented (it would not be easy). */
1689
1690 /* FIXME: Insert a bunch of wrap_here; name can be very long if it's
1691 a C++ name with arguments and stuff. */
1692 error ("\
1693The program being debugged stopped while in a function called from GDB.\n\
1694When the function (%s) is done executing, GDB will silently\n\
1695stop (instead of continuing to evaluate the expression containing\n\
1696the function call).", name);
1697 }
1698
1699 do_cleanups (old_chain);
1700
1701 /* Figure out the value returned by the function. */
1702/* elz: I defined this new macro for the hppa architecture only.
1703 this gives us a way to get the value returned by the function from the stack,
1704 at the same address we told the function to put it.
1705 We cannot assume on the pa that r28 still contains the address of the returned
1706 structure. Usually this will be overwritten by the callee.
1707 I don't know about other architectures, so I defined this macro
c5aa993b 1708 */
c906108c
SS
1709
1710#ifdef VALUE_RETURNED_FROM_STACK
1711 if (struct_return)
1712 return (value_ptr) VALUE_RETURNED_FROM_STACK (value_type, struct_addr);
1713#endif
1714
1715 return value_being_returned (value_type, retbuf, struct_return);
1716 }
1717}
7a292a7a 1718
c906108c
SS
1719value_ptr
1720call_function_by_hand (function, nargs, args)
1721 value_ptr function;
1722 int nargs;
1723 value_ptr *args;
1724{
7a292a7a
SS
1725 if (CALL_DUMMY_P)
1726 {
1727 return hand_function_call (function, nargs, args);
1728 }
1729 else
1730 {
1731 error ("Cannot invoke functions on this machine.");
1732 }
c906108c 1733}
c5aa993b 1734\f
7a292a7a 1735
c906108c 1736
c906108c
SS
1737/* Create a value for an array by allocating space in the inferior, copying
1738 the data into that space, and then setting up an array value.
1739
1740 The array bounds are set from LOWBOUND and HIGHBOUND, and the array is
1741 populated from the values passed in ELEMVEC.
1742
1743 The element type of the array is inherited from the type of the
1744 first element, and all elements must have the same size (though we
1745 don't currently enforce any restriction on their types). */
1746
1747value_ptr
1748value_array (lowbound, highbound, elemvec)
1749 int lowbound;
1750 int highbound;
1751 value_ptr *elemvec;
1752{
1753 int nelem;
1754 int idx;
1755 unsigned int typelength;
1756 value_ptr val;
1757 struct type *rangetype;
1758 struct type *arraytype;
1759 CORE_ADDR addr;
1760
1761 /* Validate that the bounds are reasonable and that each of the elements
1762 have the same size. */
1763
1764 nelem = highbound - lowbound + 1;
1765 if (nelem <= 0)
1766 {
1767 error ("bad array bounds (%d, %d)", lowbound, highbound);
1768 }
1769 typelength = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (elemvec[0]));
1770 for (idx = 1; idx < nelem; idx++)
1771 {
1772 if (TYPE_LENGTH (VALUE_ENCLOSING_TYPE (elemvec[idx])) != typelength)
1773 {
1774 error ("array elements must all be the same size");
1775 }
1776 }
1777
1778 rangetype = create_range_type ((struct type *) NULL, builtin_type_int,
1779 lowbound, highbound);
c5aa993b
JM
1780 arraytype = create_array_type ((struct type *) NULL,
1781 VALUE_ENCLOSING_TYPE (elemvec[0]), rangetype);
c906108c
SS
1782
1783 if (!current_language->c_style_arrays)
1784 {
1785 val = allocate_value (arraytype);
1786 for (idx = 0; idx < nelem; idx++)
1787 {
1788 memcpy (VALUE_CONTENTS_ALL_RAW (val) + (idx * typelength),
1789 VALUE_CONTENTS_ALL (elemvec[idx]),
1790 typelength);
1791 }
1792 VALUE_BFD_SECTION (val) = VALUE_BFD_SECTION (elemvec[0]);
1793 return val;
1794 }
1795
1796 /* Allocate space to store the array in the inferior, and then initialize
1797 it by copying in each element. FIXME: Is it worth it to create a
1798 local buffer in which to collect each value and then write all the
1799 bytes in one operation? */
1800
1801 addr = allocate_space_in_inferior (nelem * typelength);
1802 for (idx = 0; idx < nelem; idx++)
1803 {
1804 write_memory (addr + (idx * typelength), VALUE_CONTENTS_ALL (elemvec[idx]),
1805 typelength);
1806 }
1807
1808 /* Create the array type and set up an array value to be evaluated lazily. */
1809
1810 val = value_at_lazy (arraytype, addr, VALUE_BFD_SECTION (elemvec[0]));
1811 return (val);
1812}
1813
1814/* Create a value for a string constant by allocating space in the inferior,
1815 copying the data into that space, and returning the address with type
1816 TYPE_CODE_STRING. PTR points to the string constant data; LEN is number
1817 of characters.
1818 Note that string types are like array of char types with a lower bound of
1819 zero and an upper bound of LEN - 1. Also note that the string may contain
1820 embedded null bytes. */
1821
1822value_ptr
1823value_string (ptr, len)
1824 char *ptr;
1825 int len;
1826{
1827 value_ptr val;
1828 int lowbound = current_language->string_lower_bound;
1829 struct type *rangetype = create_range_type ((struct type *) NULL,
1830 builtin_type_int,
1831 lowbound, len + lowbound - 1);
1832 struct type *stringtype
c5aa993b 1833 = create_string_type ((struct type *) NULL, rangetype);
c906108c
SS
1834 CORE_ADDR addr;
1835
1836 if (current_language->c_style_arrays == 0)
1837 {
1838 val = allocate_value (stringtype);
1839 memcpy (VALUE_CONTENTS_RAW (val), ptr, len);
1840 return val;
1841 }
1842
1843
1844 /* Allocate space to store the string in the inferior, and then
1845 copy LEN bytes from PTR in gdb to that address in the inferior. */
1846
1847 addr = allocate_space_in_inferior (len);
1848 write_memory (addr, ptr, len);
1849
1850 val = value_at_lazy (stringtype, addr, NULL);
1851 return (val);
1852}
1853
1854value_ptr
1855value_bitstring (ptr, len)
1856 char *ptr;
1857 int len;
1858{
1859 value_ptr val;
1860 struct type *domain_type = create_range_type (NULL, builtin_type_int,
1861 0, len - 1);
c5aa993b 1862 struct type *type = create_set_type ((struct type *) NULL, domain_type);
c906108c
SS
1863 TYPE_CODE (type) = TYPE_CODE_BITSTRING;
1864 val = allocate_value (type);
1865 memcpy (VALUE_CONTENTS_RAW (val), ptr, TYPE_LENGTH (type));
1866 return val;
1867}
1868\f
1869/* See if we can pass arguments in T2 to a function which takes arguments
1870 of types T1. Both t1 and t2 are NULL-terminated vectors. If some
1871 arguments need coercion of some sort, then the coerced values are written
1872 into T2. Return value is 0 if the arguments could be matched, or the
1873 position at which they differ if not.
1874
1875 STATICP is nonzero if the T1 argument list came from a
1876 static member function.
1877
1878 For non-static member functions, we ignore the first argument,
1879 which is the type of the instance variable. This is because we want
1880 to handle calls with objects from derived classes. This is not
1881 entirely correct: we should actually check to make sure that a
1882 requested operation is type secure, shouldn't we? FIXME. */
1883
1884static int
1885typecmp (staticp, t1, t2)
1886 int staticp;
1887 struct type *t1[];
1888 value_ptr t2[];
1889{
1890 int i;
1891
1892 if (t2 == 0)
1893 return 1;
1894 if (staticp && t1 == 0)
1895 return t2[1] != 0;
1896 if (t1 == 0)
1897 return 1;
c5aa993b
JM
1898 if (TYPE_CODE (t1[0]) == TYPE_CODE_VOID)
1899 return 0;
1900 if (t1[!staticp] == 0)
1901 return 0;
c906108c
SS
1902 for (i = !staticp; t1[i] && TYPE_CODE (t1[i]) != TYPE_CODE_VOID; i++)
1903 {
c5aa993b
JM
1904 struct type *tt1, *tt2;
1905 if (!t2[i])
1906 return i + 1;
c906108c 1907 tt1 = check_typedef (t1[i]);
c5aa993b 1908 tt2 = check_typedef (VALUE_TYPE (t2[i]));
c906108c 1909 if (TYPE_CODE (tt1) == TYPE_CODE_REF
c5aa993b 1910 /* We should be doing hairy argument matching, as below. */
c906108c
SS
1911 && (TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (tt1))) == TYPE_CODE (tt2)))
1912 {
1913 if (TYPE_CODE (tt2) == TYPE_CODE_ARRAY)
1914 t2[i] = value_coerce_array (t2[i]);
1915 else
1916 t2[i] = value_addr (t2[i]);
1917 continue;
1918 }
1919
1920 while (TYPE_CODE (tt1) == TYPE_CODE_PTR
c5aa993b
JM
1921 && (TYPE_CODE (tt2) == TYPE_CODE_ARRAY
1922 || TYPE_CODE (tt2) == TYPE_CODE_PTR))
c906108c 1923 {
c5aa993b
JM
1924 tt1 = check_typedef (TYPE_TARGET_TYPE (tt1));
1925 tt2 = check_typedef (TYPE_TARGET_TYPE (tt2));
c906108c 1926 }
c5aa993b
JM
1927 if (TYPE_CODE (tt1) == TYPE_CODE (tt2))
1928 continue;
c906108c
SS
1929 /* Array to pointer is a `trivial conversion' according to the ARM. */
1930
1931 /* We should be doing much hairier argument matching (see section 13.2
c5aa993b
JM
1932 of the ARM), but as a quick kludge, just check for the same type
1933 code. */
c906108c 1934 if (TYPE_CODE (t1[i]) != TYPE_CODE (VALUE_TYPE (t2[i])))
c5aa993b 1935 return i + 1;
c906108c 1936 }
c5aa993b
JM
1937 if (!t1[i])
1938 return 0;
1939 return t2[i] ? i + 1 : 0;
c906108c
SS
1940}
1941
1942/* Helper function used by value_struct_elt to recurse through baseclasses.
1943 Look for a field NAME in ARG1. Adjust the address of ARG1 by OFFSET bytes,
1944 and search in it assuming it has (class) type TYPE.
1945 If found, return value, else return NULL.
1946
1947 If LOOKING_FOR_BASECLASS, then instead of looking for struct fields,
1948 look for a baseclass named NAME. */
1949
1950static value_ptr
1951search_struct_field (name, arg1, offset, type, looking_for_baseclass)
1952 char *name;
1953 register value_ptr arg1;
1954 int offset;
1955 register struct type *type;
1956 int looking_for_baseclass;
1957{
1958 int i;
1959 int nbases = TYPE_N_BASECLASSES (type);
1960
1961 CHECK_TYPEDEF (type);
1962
c5aa993b 1963 if (!looking_for_baseclass)
c906108c
SS
1964 for (i = TYPE_NFIELDS (type) - 1; i >= nbases; i--)
1965 {
1966 char *t_field_name = TYPE_FIELD_NAME (type, i);
1967
1968 if (t_field_name && STREQ (t_field_name, name))
1969 {
1970 value_ptr v;
1971 if (TYPE_FIELD_STATIC (type, i))
1972 v = value_static_field (type, i);
1973 else
1974 v = value_primitive_field (arg1, offset, i, type);
1975 if (v == 0)
c5aa993b 1976 error ("there is no field named %s", name);
c906108c
SS
1977 return v;
1978 }
1979
1980 if (t_field_name
1981 && (t_field_name[0] == '\0'
1982 || (TYPE_CODE (type) == TYPE_CODE_UNION
1983 && STREQ (t_field_name, "else"))))
1984 {
1985 struct type *field_type = TYPE_FIELD_TYPE (type, i);
1986 if (TYPE_CODE (field_type) == TYPE_CODE_UNION
1987 || TYPE_CODE (field_type) == TYPE_CODE_STRUCT)
1988 {
1989 /* Look for a match through the fields of an anonymous union,
1990 or anonymous struct. C++ provides anonymous unions.
1991
1992 In the GNU Chill implementation of variant record types,
1993 each <alternative field> has an (anonymous) union type,
1994 each member of the union represents a <variant alternative>.
1995 Each <variant alternative> is represented as a struct,
1996 with a member for each <variant field>. */
c5aa993b 1997
c906108c
SS
1998 value_ptr v;
1999 int new_offset = offset;
2000
2001 /* This is pretty gross. In G++, the offset in an anonymous
2002 union is relative to the beginning of the enclosing struct.
2003 In the GNU Chill implementation of variant records,
2004 the bitpos is zero in an anonymous union field, so we
2005 have to add the offset of the union here. */
2006 if (TYPE_CODE (field_type) == TYPE_CODE_STRUCT
2007 || (TYPE_NFIELDS (field_type) > 0
2008 && TYPE_FIELD_BITPOS (field_type, 0) == 0))
2009 new_offset += TYPE_FIELD_BITPOS (type, i) / 8;
2010
2011 v = search_struct_field (name, arg1, new_offset, field_type,
2012 looking_for_baseclass);
2013 if (v)
2014 return v;
2015 }
2016 }
2017 }
2018
c5aa993b 2019 for (i = 0; i < nbases; i++)
c906108c
SS
2020 {
2021 value_ptr v;
2022 struct type *basetype = check_typedef (TYPE_BASECLASS (type, i));
2023 /* If we are looking for baseclasses, this is what we get when we
c5aa993b
JM
2024 hit them. But it could happen that the base part's member name
2025 is not yet filled in. */
c906108c
SS
2026 int found_baseclass = (looking_for_baseclass
2027 && TYPE_BASECLASS_NAME (type, i) != NULL
2028 && STREQ (name, TYPE_BASECLASS_NAME (type, i)));
2029
2030 if (BASETYPE_VIA_VIRTUAL (type, i))
2031 {
2032 int boffset;
2033 value_ptr v2 = allocate_value (basetype);
2034
2035 boffset = baseclass_offset (type, i,
2036 VALUE_CONTENTS (arg1) + offset,
2037 VALUE_ADDRESS (arg1)
c5aa993b 2038 + VALUE_OFFSET (arg1) + offset);
c906108c
SS
2039 if (boffset == -1)
2040 error ("virtual baseclass botch");
2041
2042 /* The virtual base class pointer might have been clobbered by the
2043 user program. Make sure that it still points to a valid memory
2044 location. */
2045
2046 boffset += offset;
2047 if (boffset < 0 || boffset >= TYPE_LENGTH (type))
2048 {
2049 CORE_ADDR base_addr;
c5aa993b 2050
c906108c
SS
2051 base_addr = VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1) + boffset;
2052 if (target_read_memory (base_addr, VALUE_CONTENTS_RAW (v2),
2053 TYPE_LENGTH (basetype)) != 0)
2054 error ("virtual baseclass botch");
2055 VALUE_LVAL (v2) = lval_memory;
2056 VALUE_ADDRESS (v2) = base_addr;
2057 }
2058 else
2059 {
2060 VALUE_LVAL (v2) = VALUE_LVAL (arg1);
2061 VALUE_ADDRESS (v2) = VALUE_ADDRESS (arg1);
2062 VALUE_OFFSET (v2) = VALUE_OFFSET (arg1) + boffset;
2063 if (VALUE_LAZY (arg1))
2064 VALUE_LAZY (v2) = 1;
2065 else
2066 memcpy (VALUE_CONTENTS_RAW (v2),
2067 VALUE_CONTENTS_RAW (arg1) + boffset,
2068 TYPE_LENGTH (basetype));
2069 }
2070
2071 if (found_baseclass)
2072 return v2;
2073 v = search_struct_field (name, v2, 0, TYPE_BASECLASS (type, i),
2074 looking_for_baseclass);
2075 }
2076 else if (found_baseclass)
2077 v = value_primitive_field (arg1, offset, i, type);
2078 else
2079 v = search_struct_field (name, arg1,
c5aa993b 2080 offset + TYPE_BASECLASS_BITPOS (type, i) / 8,
c906108c 2081 basetype, looking_for_baseclass);
c5aa993b
JM
2082 if (v)
2083 return v;
c906108c
SS
2084 }
2085 return NULL;
2086}
2087
2088
2089/* Return the offset (in bytes) of the virtual base of type BASETYPE
2090 * in an object pointed to by VALADDR (on the host), assumed to be of
2091 * type TYPE. OFFSET is number of bytes beyond start of ARG to start
2092 * looking (in case VALADDR is the contents of an enclosing object).
2093 *
2094 * This routine recurses on the primary base of the derived class because
2095 * the virtual base entries of the primary base appear before the other
2096 * virtual base entries.
2097 *
2098 * If the virtual base is not found, a negative integer is returned.
2099 * The magnitude of the negative integer is the number of entries in
2100 * the virtual table to skip over (entries corresponding to various
2101 * ancestral classes in the chain of primary bases).
2102 *
2103 * Important: This assumes the HP / Taligent C++ runtime
2104 * conventions. Use baseclass_offset() instead to deal with g++
2105 * conventions. */
2106
2107void
c5aa993b
JM
2108find_rt_vbase_offset (type, basetype, valaddr, offset, boffset_p, skip_p)
2109 struct type *type;
2110 struct type *basetype;
2111 char *valaddr;
2112 int offset;
2113 int *boffset_p;
2114 int *skip_p;
c906108c 2115{
c5aa993b
JM
2116 int boffset; /* offset of virtual base */
2117 int index; /* displacement to use in virtual table */
c906108c 2118 int skip;
c5aa993b
JM
2119
2120 value_ptr vp;
2121 CORE_ADDR vtbl; /* the virtual table pointer */
2122 struct type *pbc; /* the primary base class */
c906108c
SS
2123
2124 /* Look for the virtual base recursively in the primary base, first.
2125 * This is because the derived class object and its primary base
2126 * subobject share the primary virtual table. */
c5aa993b 2127
c906108c 2128 boffset = 0;
c5aa993b 2129 pbc = TYPE_PRIMARY_BASE (type);
c906108c
SS
2130 if (pbc)
2131 {
2132 find_rt_vbase_offset (pbc, basetype, valaddr, offset, &boffset, &skip);
2133 if (skip < 0)
c5aa993b
JM
2134 {
2135 *boffset_p = boffset;
2136 *skip_p = -1;
2137 return;
2138 }
c906108c
SS
2139 }
2140 else
2141 skip = 0;
2142
2143
2144 /* Find the index of the virtual base according to HP/Taligent
2145 runtime spec. (Depth-first, left-to-right.) */
2146 index = virtual_base_index_skip_primaries (basetype, type);
2147
c5aa993b
JM
2148 if (index < 0)
2149 {
2150 *skip_p = skip + virtual_base_list_length_skip_primaries (type);
2151 *boffset_p = 0;
2152 return;
2153 }
c906108c 2154
c5aa993b 2155 /* pai: FIXME -- 32x64 possible problem */
c906108c 2156 /* First word (4 bytes) in object layout is the vtable pointer */
c5aa993b 2157 vtbl = *(CORE_ADDR *) (valaddr + offset);
c906108c 2158
c5aa993b 2159 /* Before the constructor is invoked, things are usually zero'd out. */
c906108c
SS
2160 if (vtbl == 0)
2161 error ("Couldn't find virtual table -- object may not be constructed yet.");
2162
2163
2164 /* Find virtual base's offset -- jump over entries for primary base
2165 * ancestors, then use the index computed above. But also adjust by
2166 * HP_ACC_VBASE_START for the vtable slots before the start of the
2167 * virtual base entries. Offset is negative -- virtual base entries
2168 * appear _before_ the address point of the virtual table. */
c5aa993b 2169
c906108c 2170 /* pai: FIXME -- 32x64 problem, if word = 8 bytes, change multiplier
c5aa993b 2171 & use long type */
c906108c
SS
2172
2173 /* epstein : FIXME -- added param for overlay section. May not be correct */
c5aa993b 2174 vp = value_at (builtin_type_int, vtbl + 4 * (-skip - index - HP_ACC_VBASE_START), NULL);
c906108c
SS
2175 boffset = value_as_long (vp);
2176 *skip_p = -1;
2177 *boffset_p = boffset;
2178 return;
2179}
2180
2181
2182/* Helper function used by value_struct_elt to recurse through baseclasses.
2183 Look for a field NAME in ARG1. Adjust the address of ARG1 by OFFSET bytes,
2184 and search in it assuming it has (class) type TYPE.
2185 If found, return value, else if name matched and args not return (value)-1,
2186 else return NULL. */
2187
2188static value_ptr
2189search_struct_method (name, arg1p, args, offset, static_memfuncp, type)
2190 char *name;
2191 register value_ptr *arg1p, *args;
2192 int offset, *static_memfuncp;
2193 register struct type *type;
2194{
2195 int i;
2196 value_ptr v;
2197 int name_matched = 0;
2198 char dem_opname[64];
2199
2200 CHECK_TYPEDEF (type);
2201 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
2202 {
2203 char *t_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
2204 /* FIXME! May need to check for ARM demangling here */
c5aa993b
JM
2205 if (strncmp (t_field_name, "__", 2) == 0 ||
2206 strncmp (t_field_name, "op", 2) == 0 ||
2207 strncmp (t_field_name, "type", 4) == 0)
c906108c 2208 {
c5aa993b
JM
2209 if (cplus_demangle_opname (t_field_name, dem_opname, DMGL_ANSI))
2210 t_field_name = dem_opname;
2211 else if (cplus_demangle_opname (t_field_name, dem_opname, 0))
c906108c 2212 t_field_name = dem_opname;
c906108c
SS
2213 }
2214 if (t_field_name && STREQ (t_field_name, name))
2215 {
2216 int j = TYPE_FN_FIELDLIST_LENGTH (type, i) - 1;
2217 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
c5aa993b 2218 name_matched = 1;
c906108c
SS
2219
2220 if (j > 0 && args == 0)
2221 error ("cannot resolve overloaded method `%s': no arguments supplied", name);
2222 while (j >= 0)
2223 {
2224 if (TYPE_FN_FIELD_STUB (f, j))
2225 check_stub_method (type, i, j);
2226 if (!typecmp (TYPE_FN_FIELD_STATIC_P (f, j),
2227 TYPE_FN_FIELD_ARGS (f, j), args))
2228 {
2229 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
2230 return value_virtual_fn_field (arg1p, f, j, type, offset);
2231 if (TYPE_FN_FIELD_STATIC_P (f, j) && static_memfuncp)
2232 *static_memfuncp = 1;
2233 v = value_fn_field (arg1p, f, j, type, offset);
c5aa993b
JM
2234 if (v != NULL)
2235 return v;
c906108c
SS
2236 }
2237 j--;
2238 }
2239 }
2240 }
2241
2242 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
2243 {
2244 int base_offset;
2245
2246 if (BASETYPE_VIA_VIRTUAL (type, i))
2247 {
c5aa993b
JM
2248 if (TYPE_HAS_VTABLE (type))
2249 {
2250 /* HP aCC compiled type, search for virtual base offset
2251 according to HP/Taligent runtime spec. */
2252 int skip;
2253 find_rt_vbase_offset (type, TYPE_BASECLASS (type, i),
2254 VALUE_CONTENTS_ALL (*arg1p),
2255 offset + VALUE_EMBEDDED_OFFSET (*arg1p),
2256 &base_offset, &skip);
2257 if (skip >= 0)
2258 error ("Virtual base class offset not found in vtable");
2259 }
2260 else
2261 {
2262 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
2263 char *base_valaddr;
2264
2265 /* The virtual base class pointer might have been clobbered by the
2266 user program. Make sure that it still points to a valid memory
2267 location. */
2268
2269 if (offset < 0 || offset >= TYPE_LENGTH (type))
2270 {
2271 base_valaddr = (char *) alloca (TYPE_LENGTH (baseclass));
2272 if (target_read_memory (VALUE_ADDRESS (*arg1p)
2273 + VALUE_OFFSET (*arg1p) + offset,
2274 base_valaddr,
2275 TYPE_LENGTH (baseclass)) != 0)
2276 error ("virtual baseclass botch");
2277 }
2278 else
2279 base_valaddr = VALUE_CONTENTS (*arg1p) + offset;
2280
2281 base_offset =
2282 baseclass_offset (type, i, base_valaddr,
2283 VALUE_ADDRESS (*arg1p)
2284 + VALUE_OFFSET (*arg1p) + offset);
2285 if (base_offset == -1)
2286 error ("virtual baseclass botch");
2287 }
2288 }
c906108c
SS
2289 else
2290 {
2291 base_offset = TYPE_BASECLASS_BITPOS (type, i) / 8;
c5aa993b 2292 }
c906108c
SS
2293 v = search_struct_method (name, arg1p, args, base_offset + offset,
2294 static_memfuncp, TYPE_BASECLASS (type, i));
c5aa993b 2295 if (v == (value_ptr) - 1)
c906108c
SS
2296 {
2297 name_matched = 1;
2298 }
2299 else if (v)
2300 {
2301/* FIXME-bothner: Why is this commented out? Why is it here? */
c5aa993b 2302/* *arg1p = arg1_tmp; */
c906108c 2303 return v;
c5aa993b 2304 }
c906108c 2305 }
c5aa993b
JM
2306 if (name_matched)
2307 return (value_ptr) - 1;
2308 else
2309 return NULL;
c906108c
SS
2310}
2311
2312/* Given *ARGP, a value of type (pointer to a)* structure/union,
2313 extract the component named NAME from the ultimate target structure/union
2314 and return it as a value with its appropriate type.
2315 ERR is used in the error message if *ARGP's type is wrong.
2316
2317 C++: ARGS is a list of argument types to aid in the selection of
2318 an appropriate method. Also, handle derived types.
2319
2320 STATIC_MEMFUNCP, if non-NULL, points to a caller-supplied location
2321 where the truthvalue of whether the function that was resolved was
2322 a static member function or not is stored.
2323
2324 ERR is an error message to be printed in case the field is not found. */
2325
2326value_ptr
2327value_struct_elt (argp, args, name, static_memfuncp, err)
2328 register value_ptr *argp, *args;
2329 char *name;
2330 int *static_memfuncp;
2331 char *err;
2332{
2333 register struct type *t;
2334 value_ptr v;
2335
2336 COERCE_ARRAY (*argp);
2337
2338 t = check_typedef (VALUE_TYPE (*argp));
2339
2340 /* Follow pointers until we get to a non-pointer. */
2341
2342 while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_CODE (t) == TYPE_CODE_REF)
2343 {
2344 *argp = value_ind (*argp);
2345 /* Don't coerce fn pointer to fn and then back again! */
2346 if (TYPE_CODE (VALUE_TYPE (*argp)) != TYPE_CODE_FUNC)
2347 COERCE_ARRAY (*argp);
2348 t = check_typedef (VALUE_TYPE (*argp));
2349 }
2350
2351 if (TYPE_CODE (t) == TYPE_CODE_MEMBER)
2352 error ("not implemented: member type in value_struct_elt");
2353
c5aa993b 2354 if (TYPE_CODE (t) != TYPE_CODE_STRUCT
c906108c
SS
2355 && TYPE_CODE (t) != TYPE_CODE_UNION)
2356 error ("Attempt to extract a component of a value that is not a %s.", err);
2357
2358 /* Assume it's not, unless we see that it is. */
2359 if (static_memfuncp)
c5aa993b 2360 *static_memfuncp = 0;
c906108c
SS
2361
2362 if (!args)
2363 {
2364 /* if there are no arguments ...do this... */
2365
2366 /* Try as a field first, because if we succeed, there
c5aa993b 2367 is less work to be done. */
c906108c
SS
2368 v = search_struct_field (name, *argp, 0, t, 0);
2369 if (v)
2370 return v;
2371
2372 /* C++: If it was not found as a data field, then try to
2373 return it as a pointer to a method. */
2374
2375 if (destructor_name_p (name, t))
2376 error ("Cannot get value of destructor");
2377
2378 v = search_struct_method (name, argp, args, 0, static_memfuncp, t);
2379
c5aa993b 2380 if (v == (value_ptr) - 1)
c906108c
SS
2381 error ("Cannot take address of a method");
2382 else if (v == 0)
2383 {
2384 if (TYPE_NFN_FIELDS (t))
2385 error ("There is no member or method named %s.", name);
2386 else
2387 error ("There is no member named %s.", name);
2388 }
2389 return v;
2390 }
2391
2392 if (destructor_name_p (name, t))
2393 {
2394 if (!args[1])
2395 {
2396 /* Destructors are a special case. */
2397 int m_index, f_index;
2398
2399 v = NULL;
2400 if (get_destructor_fn_field (t, &m_index, &f_index))
2401 {
2402 v = value_fn_field (NULL, TYPE_FN_FIELDLIST1 (t, m_index),
2403 f_index, NULL, 0);
2404 }
2405 if (v == NULL)
2406 error ("could not find destructor function named %s.", name);
2407 else
2408 return v;
2409 }
2410 else
2411 {
2412 error ("destructor should not have any argument");
2413 }
2414 }
2415 else
2416 v = search_struct_method (name, argp, args, 0, static_memfuncp, t);
2417
c5aa993b 2418 if (v == (value_ptr) - 1)
c906108c 2419 {
c5aa993b 2420 error ("Argument list of %s mismatch with component in the structure.", name);
c906108c
SS
2421 }
2422 else if (v == 0)
2423 {
2424 /* See if user tried to invoke data as function. If so,
c5aa993b
JM
2425 hand it back. If it's not callable (i.e., a pointer to function),
2426 gdb should give an error. */
c906108c
SS
2427 v = search_struct_field (name, *argp, 0, t, 0);
2428 }
2429
2430 if (!v)
2431 error ("Structure has no component named %s.", name);
2432 return v;
2433}
2434
2435/* Search through the methods of an object (and its bases)
2436 * to find a specified method. Return the pointer to the
2437 * fn_field list of overloaded instances.
2438 * Helper function for value_find_oload_list.
2439 * ARGP is a pointer to a pointer to a value (the object)
2440 * METHOD is a string containing the method name
2441 * OFFSET is the offset within the value
2442 * STATIC_MEMFUNCP is set if the method is static
2443 * TYPE is the assumed type of the object
2444 * NUM_FNS is the number of overloaded instances
2445 * BASETYPE is set to the actual type of the subobject where the method is found
2446 * BOFFSET is the offset of the base subobject where the method is found */
2447
7a292a7a 2448static struct fn_field *
c906108c 2449find_method_list (argp, method, offset, static_memfuncp, type, num_fns, basetype, boffset)
7a292a7a 2450 value_ptr *argp;
c5aa993b 2451 char *method;
7a292a7a 2452 int offset;
c5aa993b
JM
2453 int *static_memfuncp;
2454 struct type *type;
2455 int *num_fns;
2456 struct type **basetype;
2457 int *boffset;
c906108c
SS
2458{
2459 int i;
c5aa993b 2460 struct fn_field *f;
c906108c
SS
2461 CHECK_TYPEDEF (type);
2462
2463 *num_fns = 0;
2464
c5aa993b
JM
2465 /* First check in object itself */
2466 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
c906108c
SS
2467 {
2468 /* pai: FIXME What about operators and type conversions? */
c5aa993b 2469 char *fn_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
c906108c 2470 if (fn_field_name && STREQ (fn_field_name, method))
c5aa993b
JM
2471 {
2472 *num_fns = TYPE_FN_FIELDLIST_LENGTH (type, i);
2473 *basetype = type;
2474 *boffset = offset;
2475 return TYPE_FN_FIELDLIST1 (type, i);
2476 }
2477 }
2478
c906108c
SS
2479 /* Not found in object, check in base subobjects */
2480 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
2481 {
2482 int base_offset;
2483 if (BASETYPE_VIA_VIRTUAL (type, i))
2484 {
c5aa993b
JM
2485 if (TYPE_HAS_VTABLE (type))
2486 {
2487 /* HP aCC compiled type, search for virtual base offset
2488 * according to HP/Taligent runtime spec. */
2489 int skip;
2490 find_rt_vbase_offset (type, TYPE_BASECLASS (type, i),
2491 VALUE_CONTENTS_ALL (*argp),
2492 offset + VALUE_EMBEDDED_OFFSET (*argp),
2493 &base_offset, &skip);
2494 if (skip >= 0)
2495 error ("Virtual base class offset not found in vtable");
2496 }
2497 else
2498 {
2499 /* probably g++ runtime model */
2500 base_offset = VALUE_OFFSET (*argp) + offset;
2501 base_offset =
2502 baseclass_offset (type, i,
2503 VALUE_CONTENTS (*argp) + base_offset,
2504 VALUE_ADDRESS (*argp) + base_offset);
2505 if (base_offset == -1)
2506 error ("virtual baseclass botch");
2507 }
2508 }
2509 else
2510 /* non-virtual base, simply use bit position from debug info */
c906108c
SS
2511 {
2512 base_offset = TYPE_BASECLASS_BITPOS (type, i) / 8;
c5aa993b 2513 }
c906108c 2514 f = find_method_list (argp, method, base_offset + offset,
c5aa993b 2515 static_memfuncp, TYPE_BASECLASS (type, i), num_fns, basetype, boffset);
c906108c 2516 if (f)
c5aa993b 2517 return f;
c906108c 2518 }
c5aa993b 2519 return NULL;
c906108c
SS
2520}
2521
2522/* Return the list of overloaded methods of a specified name.
2523 * ARGP is a pointer to a pointer to a value (the object)
2524 * METHOD is the method name
2525 * OFFSET is the offset within the value contents
2526 * STATIC_MEMFUNCP is set if the method is static
2527 * NUM_FNS is the number of overloaded instances
2528 * BASETYPE is set to the type of the base subobject that defines the method
2529 * BOFFSET is the offset of the base subobject which defines the method */
2530
2531struct fn_field *
2532value_find_oload_method_list (argp, method, offset, static_memfuncp, num_fns, basetype, boffset)
c5aa993b
JM
2533 value_ptr *argp;
2534 char *method;
2535 int offset;
2536 int *static_memfuncp;
2537 int *num_fns;
2538 struct type **basetype;
2539 int *boffset;
c906108c 2540{
c5aa993b 2541 struct type *t;
c906108c
SS
2542
2543 t = check_typedef (VALUE_TYPE (*argp));
2544
c5aa993b 2545 /* code snarfed from value_struct_elt */
c906108c
SS
2546 while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_CODE (t) == TYPE_CODE_REF)
2547 {
2548 *argp = value_ind (*argp);
2549 /* Don't coerce fn pointer to fn and then back again! */
2550 if (TYPE_CODE (VALUE_TYPE (*argp)) != TYPE_CODE_FUNC)
2551 COERCE_ARRAY (*argp);
2552 t = check_typedef (VALUE_TYPE (*argp));
2553 }
c5aa993b 2554
c906108c
SS
2555 if (TYPE_CODE (t) == TYPE_CODE_MEMBER)
2556 error ("Not implemented: member type in value_find_oload_lis");
c5aa993b
JM
2557
2558 if (TYPE_CODE (t) != TYPE_CODE_STRUCT
2559 && TYPE_CODE (t) != TYPE_CODE_UNION)
c906108c 2560 error ("Attempt to extract a component of a value that is not a struct or union");
c5aa993b 2561
c906108c
SS
2562 /* Assume it's not static, unless we see that it is. */
2563 if (static_memfuncp)
c5aa993b 2564 *static_memfuncp = 0;
c906108c
SS
2565
2566 return find_method_list (argp, method, 0, static_memfuncp, t, num_fns, basetype, boffset);
c5aa993b 2567
c906108c
SS
2568}
2569
2570/* Given an array of argument types (ARGTYPES) (which includes an
2571 entry for "this" in the case of C++ methods), the number of
2572 arguments NARGS, the NAME of a function whether it's a method or
2573 not (METHOD), and the degree of laxness (LAX) in conforming to
2574 overload resolution rules in ANSI C++, find the best function that
2575 matches on the argument types according to the overload resolution
2576 rules.
2577
2578 In the case of class methods, the parameter OBJ is an object value
2579 in which to search for overloaded methods.
2580
2581 In the case of non-method functions, the parameter FSYM is a symbol
2582 corresponding to one of the overloaded functions.
2583
2584 Return value is an integer: 0 -> good match, 10 -> debugger applied
2585 non-standard coercions, 100 -> incompatible.
2586
2587 If a method is being searched for, VALP will hold the value.
2588 If a non-method is being searched for, SYMP will hold the symbol for it.
2589
2590 If a method is being searched for, and it is a static method,
2591 then STATICP will point to a non-zero value.
2592
2593 Note: This function does *not* check the value of
2594 overload_resolution. Caller must check it to see whether overload
2595 resolution is permitted.
c5aa993b 2596 */
c906108c
SS
2597
2598int
2599find_overload_match (arg_types, nargs, name, method, lax, obj, fsym, valp, symp, staticp)
c5aa993b
JM
2600 struct type **arg_types;
2601 int nargs;
2602 char *name;
2603 int method;
2604 int lax;
2605 value_ptr obj;
2606 struct symbol *fsym;
2607 value_ptr *valp;
2608 struct symbol **symp;
2609 int *staticp;
c906108c
SS
2610{
2611 int nparms;
c5aa993b 2612 struct type **parm_types;
c906108c 2613 int champ_nparms = 0;
c5aa993b
JM
2614
2615 short oload_champ = -1; /* Index of best overloaded function */
2616 short oload_ambiguous = 0; /* Current ambiguity state for overload resolution */
2617 /* 0 => no ambiguity, 1 => two good funcs, 2 => incomparable funcs */
2618 short oload_ambig_champ = -1; /* 2nd contender for best match */
2619 short oload_non_standard = 0; /* did we have to use non-standard conversions? */
2620 short oload_incompatible = 0; /* are args supplied incompatible with any function? */
2621
2622 struct badness_vector *bv; /* A measure of how good an overloaded instance is */
2623 struct badness_vector *oload_champ_bv = NULL; /* The measure for the current best match */
2624
c906108c 2625 value_ptr temp = obj;
c5aa993b
JM
2626 struct fn_field *fns_ptr = NULL; /* For methods, the list of overloaded methods */
2627 struct symbol **oload_syms = NULL; /* For non-methods, the list of overloaded function symbols */
2628 int num_fns = 0; /* Number of overloaded instances being considered */
2629 struct type *basetype = NULL;
c906108c
SS
2630 int boffset;
2631 register int jj;
2632 register int ix;
2633
c5aa993b
JM
2634 char *obj_type_name = NULL;
2635 char *func_name = NULL;
c906108c
SS
2636
2637 /* Get the list of overloaded methods or functions */
2638 if (method)
2639 {
2640 obj_type_name = TYPE_NAME (VALUE_TYPE (obj));
2641 /* Hack: evaluate_subexp_standard often passes in a pointer
2642 value rather than the object itself, so try again */
2643 if ((!obj_type_name || !*obj_type_name) &&
c5aa993b
JM
2644 (TYPE_CODE (VALUE_TYPE (obj)) == TYPE_CODE_PTR))
2645 obj_type_name = TYPE_NAME (TYPE_TARGET_TYPE (VALUE_TYPE (obj)));
c906108c
SS
2646
2647 fns_ptr = value_find_oload_method_list (&temp, name, 0,
c5aa993b
JM
2648 staticp,
2649 &num_fns,
2650 &basetype, &boffset);
c906108c 2651 if (!fns_ptr || !num_fns)
c5aa993b
JM
2652 error ("Couldn't find method %s%s%s",
2653 obj_type_name,
2654 (obj_type_name && *obj_type_name) ? "::" : "",
2655 name);
c906108c
SS
2656 }
2657 else
2658 {
2659 int i = -1;
2660 func_name = cplus_demangle (SYMBOL_NAME (fsym), DMGL_NO_OPTS);
2661
2662 oload_syms = make_symbol_overload_list (fsym);
2663 while (oload_syms[++i])
c5aa993b 2664 num_fns++;
c906108c 2665 if (!num_fns)
c5aa993b 2666 error ("Couldn't find function %s", func_name);
c906108c 2667 }
c5aa993b 2668
c906108c
SS
2669 oload_champ_bv = NULL;
2670
c5aa993b 2671 /* Consider each candidate in turn */
c906108c
SS
2672 for (ix = 0; ix < num_fns; ix++)
2673 {
c5aa993b 2674 /* Number of parameters for current candidate */
c906108c 2675 nparms = method ? TYPE_NFIELDS (fns_ptr[ix].type)
c5aa993b 2676 : TYPE_NFIELDS (SYMBOL_TYPE (oload_syms[ix]));
c906108c 2677
c5aa993b 2678 /* Prepare array of parameter types */
c906108c
SS
2679 parm_types = (struct type **) xmalloc (nparms * (sizeof (struct type *)));
2680 for (jj = 0; jj < nparms; jj++)
c5aa993b
JM
2681 parm_types[jj] = method ? TYPE_FIELD_TYPE (fns_ptr[ix].type, jj)
2682 : TYPE_FIELD_TYPE (SYMBOL_TYPE (oload_syms[ix]), jj);
c906108c
SS
2683
2684 /* Compare parameter types to supplied argument types */
2685 bv = rank_function (parm_types, nparms, arg_types, nargs);
c5aa993b 2686
c906108c 2687 if (!oload_champ_bv)
c5aa993b
JM
2688 {
2689 oload_champ_bv = bv;
2690 oload_champ = 0;
2691 champ_nparms = nparms;
2692 }
c906108c 2693 else
c5aa993b
JM
2694 /* See whether current candidate is better or worse than previous best */
2695 switch (compare_badness (bv, oload_champ_bv))
2696 {
2697 case 0:
2698 oload_ambiguous = 1; /* top two contenders are equally good */
2699 oload_ambig_champ = ix;
2700 break;
2701 case 1:
2702 oload_ambiguous = 2; /* incomparable top contenders */
2703 oload_ambig_champ = ix;
2704 break;
2705 case 2:
2706 oload_champ_bv = bv; /* new champion, record details */
2707 oload_ambiguous = 0;
2708 oload_champ = ix;
2709 oload_ambig_champ = -1;
2710 champ_nparms = nparms;
2711 break;
2712 case 3:
2713 default:
2714 break;
2715 }
c906108c
SS
2716 free (parm_types);
2717#ifdef DEBUG_OLOAD
2718 if (method)
c5aa993b 2719 printf ("Overloaded method instance %s, # of parms %d\n", fns_ptr[ix].physname, nparms);
c906108c 2720 else
c5aa993b 2721 printf ("Overloaded function instance %s # of parms %d\n", SYMBOL_DEMANGLED_NAME (oload_syms[ix]), nparms);
c906108c 2722 for (jj = 0; jj <= nargs; jj++)
c5aa993b
JM
2723 printf ("...Badness @ %d : %d\n", jj, bv->rank[jj]);
2724 printf ("Overload resolution champion is %d, ambiguous? %d\n", oload_champ, oload_ambiguous);
c906108c 2725#endif
c5aa993b 2726 } /* end loop over all candidates */
c906108c
SS
2727
2728 if (oload_ambiguous)
2729 {
2730 if (method)
c5aa993b
JM
2731 error ("Cannot resolve overloaded method %s%s%s to unique instance; disambiguate by specifying function signature",
2732 obj_type_name,
2733 (obj_type_name && *obj_type_name) ? "::" : "",
2734 name);
c906108c 2735 else
c5aa993b
JM
2736 error ("Cannot resolve overloaded function %s to unique instance; disambiguate by specifying function signature",
2737 func_name);
c906108c
SS
2738 }
2739
c5aa993b 2740 /* Check how bad the best match is */
c906108c
SS
2741 for (ix = 1; ix <= nargs; ix++)
2742 {
2743 switch (oload_champ_bv->rank[ix])
c5aa993b
JM
2744 {
2745 case 10:
2746 oload_non_standard = 1; /* non-standard type conversions needed */
2747 break;
2748 case 100:
2749 oload_incompatible = 1; /* truly mismatched types */
2750 break;
2751 }
c906108c
SS
2752 }
2753 if (oload_incompatible)
2754 {
2755 if (method)
c5aa993b
JM
2756 error ("Cannot resolve method %s%s%s to any overloaded instance",
2757 obj_type_name,
2758 (obj_type_name && *obj_type_name) ? "::" : "",
2759 name);
c906108c 2760 else
c5aa993b
JM
2761 error ("Cannot resolve function %s to any overloaded instance",
2762 func_name);
c906108c
SS
2763 }
2764 else if (oload_non_standard)
2765 {
2766 if (method)
c5aa993b
JM
2767 warning ("Using non-standard conversion to match method %s%s%s to supplied arguments",
2768 obj_type_name,
2769 (obj_type_name && *obj_type_name) ? "::" : "",
2770 name);
c906108c 2771 else
c5aa993b
JM
2772 warning ("Using non-standard conversion to match function %s to supplied arguments",
2773 func_name);
c906108c
SS
2774 }
2775
2776 if (method)
2777 {
2778 if (TYPE_FN_FIELD_VIRTUAL_P (fns_ptr, oload_champ))
c5aa993b 2779 *valp = value_virtual_fn_field (&temp, fns_ptr, oload_champ, basetype, boffset);
c906108c 2780 else
c5aa993b 2781 *valp = value_fn_field (&temp, fns_ptr, oload_champ, basetype, boffset);
c906108c
SS
2782 }
2783 else
2784 {
2785 *symp = oload_syms[oload_champ];
2786 free (func_name);
2787 }
2788
2789 return oload_incompatible ? 100 : (oload_non_standard ? 10 : 0);
2790}
2791
2792/* C++: return 1 is NAME is a legitimate name for the destructor
2793 of type TYPE. If TYPE does not have a destructor, or
2794 if NAME is inappropriate for TYPE, an error is signaled. */
2795int
2796destructor_name_p (name, type)
2797 const char *name;
2798 const struct type *type;
2799{
2800 /* destructors are a special case. */
2801
2802 if (name[0] == '~')
2803 {
2804 char *dname = type_name_no_tag (type);
2805 char *cp = strchr (dname, '<');
2806 unsigned int len;
2807
2808 /* Do not compare the template part for template classes. */
2809 if (cp == NULL)
2810 len = strlen (dname);
2811 else
2812 len = cp - dname;
2813 if (strlen (name + 1) != len || !STREQN (dname, name + 1, len))
2814 error ("name of destructor must equal name of class");
2815 else
2816 return 1;
2817 }
2818 return 0;
2819}
2820
2821/* Helper function for check_field: Given TYPE, a structure/union,
2822 return 1 if the component named NAME from the ultimate
2823 target structure/union is defined, otherwise, return 0. */
2824
2825static int
2826check_field_in (type, name)
2827 register struct type *type;
2828 const char *name;
2829{
2830 register int i;
2831
2832 for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
2833 {
2834 char *t_field_name = TYPE_FIELD_NAME (type, i);
2835 if (t_field_name && STREQ (t_field_name, name))
2836 return 1;
2837 }
2838
2839 /* C++: If it was not found as a data field, then try to
2840 return it as a pointer to a method. */
2841
2842 /* Destructors are a special case. */
2843 if (destructor_name_p (name, type))
2844 {
2845 int m_index, f_index;
2846
2847 return get_destructor_fn_field (type, &m_index, &f_index);
2848 }
2849
2850 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
2851 {
2852 if (STREQ (TYPE_FN_FIELDLIST_NAME (type, i), name))
2853 return 1;
2854 }
2855
2856 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
2857 if (check_field_in (TYPE_BASECLASS (type, i), name))
2858 return 1;
c5aa993b 2859
c906108c
SS
2860 return 0;
2861}
2862
2863
2864/* C++: Given ARG1, a value of type (pointer to a)* structure/union,
2865 return 1 if the component named NAME from the ultimate
2866 target structure/union is defined, otherwise, return 0. */
2867
2868int
2869check_field (arg1, name)
2870 register value_ptr arg1;
2871 const char *name;
2872{
2873 register struct type *t;
2874
2875 COERCE_ARRAY (arg1);
2876
2877 t = VALUE_TYPE (arg1);
2878
2879 /* Follow pointers until we get to a non-pointer. */
2880
2881 for (;;)
2882 {
2883 CHECK_TYPEDEF (t);
2884 if (TYPE_CODE (t) != TYPE_CODE_PTR && TYPE_CODE (t) != TYPE_CODE_REF)
2885 break;
2886 t = TYPE_TARGET_TYPE (t);
2887 }
2888
2889 if (TYPE_CODE (t) == TYPE_CODE_MEMBER)
2890 error ("not implemented: member type in check_field");
2891
c5aa993b 2892 if (TYPE_CODE (t) != TYPE_CODE_STRUCT
c906108c
SS
2893 && TYPE_CODE (t) != TYPE_CODE_UNION)
2894 error ("Internal error: `this' is not an aggregate");
2895
2896 return check_field_in (t, name);
2897}
2898
2899/* C++: Given an aggregate type CURTYPE, and a member name NAME,
2900 return the address of this member as a "pointer to member"
2901 type. If INTYPE is non-null, then it will be the type
2902 of the member we are looking for. This will help us resolve
2903 "pointers to member functions". This function is used
2904 to resolve user expressions of the form "DOMAIN::NAME". */
2905
2906value_ptr
2907value_struct_elt_for_reference (domain, offset, curtype, name, intype)
2908 struct type *domain, *curtype, *intype;
2909 int offset;
2910 char *name;
2911{
2912 register struct type *t = curtype;
2913 register int i;
2914 value_ptr v;
2915
c5aa993b 2916 if (TYPE_CODE (t) != TYPE_CODE_STRUCT
c906108c
SS
2917 && TYPE_CODE (t) != TYPE_CODE_UNION)
2918 error ("Internal error: non-aggregate type to value_struct_elt_for_reference");
2919
2920 for (i = TYPE_NFIELDS (t) - 1; i >= TYPE_N_BASECLASSES (t); i--)
2921 {
2922 char *t_field_name = TYPE_FIELD_NAME (t, i);
c5aa993b 2923
c906108c
SS
2924 if (t_field_name && STREQ (t_field_name, name))
2925 {
2926 if (TYPE_FIELD_STATIC (t, i))
2927 {
2928 v = value_static_field (t, i);
2929 if (v == NULL)
2930 error ("Internal error: could not find static variable %s",
2931 name);
2932 return v;
2933 }
2934 if (TYPE_FIELD_PACKED (t, i))
2935 error ("pointers to bitfield members not allowed");
c5aa993b 2936
c906108c
SS
2937 return value_from_longest
2938 (lookup_reference_type (lookup_member_type (TYPE_FIELD_TYPE (t, i),
2939 domain)),
2940 offset + (LONGEST) (TYPE_FIELD_BITPOS (t, i) >> 3));
2941 }
2942 }
2943
2944 /* C++: If it was not found as a data field, then try to
2945 return it as a pointer to a method. */
2946
2947 /* Destructors are a special case. */
2948 if (destructor_name_p (name, t))
2949 {
2950 error ("member pointers to destructors not implemented yet");
2951 }
2952
2953 /* Perform all necessary dereferencing. */
2954 while (intype && TYPE_CODE (intype) == TYPE_CODE_PTR)
2955 intype = TYPE_TARGET_TYPE (intype);
2956
2957 for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
2958 {
2959 char *t_field_name = TYPE_FN_FIELDLIST_NAME (t, i);
2960 char dem_opname[64];
2961
c5aa993b
JM
2962 if (strncmp (t_field_name, "__", 2) == 0 ||
2963 strncmp (t_field_name, "op", 2) == 0 ||
2964 strncmp (t_field_name, "type", 4) == 0)
c906108c 2965 {
c5aa993b
JM
2966 if (cplus_demangle_opname (t_field_name, dem_opname, DMGL_ANSI))
2967 t_field_name = dem_opname;
2968 else if (cplus_demangle_opname (t_field_name, dem_opname, 0))
c906108c 2969 t_field_name = dem_opname;
c906108c
SS
2970 }
2971 if (t_field_name && STREQ (t_field_name, name))
2972 {
2973 int j = TYPE_FN_FIELDLIST_LENGTH (t, i);
2974 struct fn_field *f = TYPE_FN_FIELDLIST1 (t, i);
c5aa993b 2975
c906108c
SS
2976 if (intype == 0 && j > 1)
2977 error ("non-unique member `%s' requires type instantiation", name);
2978 if (intype)
2979 {
2980 while (j--)
2981 if (TYPE_FN_FIELD_TYPE (f, j) == intype)
2982 break;
2983 if (j < 0)
2984 error ("no member function matches that type instantiation");
2985 }
2986 else
2987 j = 0;
c5aa993b 2988
c906108c
SS
2989 if (TYPE_FN_FIELD_STUB (f, j))
2990 check_stub_method (t, i, j);
2991 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
2992 {
2993 return value_from_longest
2994 (lookup_reference_type
2995 (lookup_member_type (TYPE_FN_FIELD_TYPE (f, j),
2996 domain)),
2997 (LONGEST) METHOD_PTR_FROM_VOFFSET (TYPE_FN_FIELD_VOFFSET (f, j)));
2998 }
2999 else
3000 {
3001 struct symbol *s = lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
3002 0, VAR_NAMESPACE, 0, NULL);
3003 if (s == NULL)
3004 {
3005 v = 0;
3006 }
3007 else
3008 {
3009 v = read_var_value (s, 0);
3010#if 0
3011 VALUE_TYPE (v) = lookup_reference_type
3012 (lookup_member_type (TYPE_FN_FIELD_TYPE (f, j),
3013 domain));
3014#endif
3015 }
3016 return v;
3017 }
3018 }
3019 }
3020 for (i = TYPE_N_BASECLASSES (t) - 1; i >= 0; i--)
3021 {
3022 value_ptr v;
3023 int base_offset;
3024
3025 if (BASETYPE_VIA_VIRTUAL (t, i))
3026 base_offset = 0;
3027 else
3028 base_offset = TYPE_BASECLASS_BITPOS (t, i) / 8;
3029 v = value_struct_elt_for_reference (domain,
3030 offset + base_offset,
3031 TYPE_BASECLASS (t, i),
3032 name,
3033 intype);
3034 if (v)
3035 return v;
3036 }
3037 return 0;
3038}
3039
3040
3041/* Find the real run-time type of a value using RTTI.
3042 * V is a pointer to the value.
3043 * A pointer to the struct type entry of the run-time type
3044 * is returneed.
3045 * FULL is a flag that is set only if the value V includes
3046 * the entire contents of an object of the RTTI type.
3047 * TOP is the offset to the top of the enclosing object of
3048 * the real run-time type. This offset may be for the embedded
3049 * object, or for the enclosing object of V.
3050 * USING_ENC is the flag that distinguishes the two cases.
3051 * If it is 1, then the offset is for the enclosing object,
3052 * otherwise for the embedded object.
3053 *
3054 * This currently works only for RTTI information generated
3055 * by the HP ANSI C++ compiler (aCC). g++ today (1997-06-10)
3056 * does not appear to support RTTI. This function returns a
3057 * NULL value for objects in the g++ runtime model. */
3058
3059struct type *
3060value_rtti_type (v, full, top, using_enc)
c5aa993b
JM
3061 value_ptr v;
3062 int *full;
3063 int *top;
3064 int *using_enc;
c906108c 3065{
c5aa993b
JM
3066 struct type *known_type;
3067 struct type *rtti_type;
c906108c
SS
3068 CORE_ADDR coreptr;
3069 value_ptr vp;
3070 int using_enclosing = 0;
3071 long top_offset = 0;
3072 char rtti_type_name[256];
3073
3074 if (full)
3075 *full = 0;
3076 if (top)
3077 *top = -1;
3078 if (using_enc)
3079 *using_enc = 0;
3080
c5aa993b 3081 /* Get declared type */
c906108c
SS
3082 known_type = VALUE_TYPE (v);
3083 CHECK_TYPEDEF (known_type);
c5aa993b 3084 /* RTTI works only or class objects */
c906108c
SS
3085 if (TYPE_CODE (known_type) != TYPE_CODE_CLASS)
3086 return NULL;
3087
3088 /* If neither the declared type nor the enclosing type of the
3089 * value structure has a HP ANSI C++ style virtual table,
3090 * we can't do anything. */
3091 if (!TYPE_HAS_VTABLE (known_type))
3092 {
3093 known_type = VALUE_ENCLOSING_TYPE (v);
3094 CHECK_TYPEDEF (known_type);
3095 if ((TYPE_CODE (known_type) != TYPE_CODE_CLASS) ||
c5aa993b
JM
3096 !TYPE_HAS_VTABLE (known_type))
3097 return NULL; /* No RTTI, or not HP-compiled types */
c906108c
SS
3098 CHECK_TYPEDEF (known_type);
3099 using_enclosing = 1;
3100 }
3101
3102 if (using_enclosing && using_enc)
3103 *using_enc = 1;
3104
3105 /* First get the virtual table address */
c5aa993b
JM
3106 coreptr = *(CORE_ADDR *) ((VALUE_CONTENTS_ALL (v))
3107 + VALUE_OFFSET (v)
3108 + (using_enclosing ? 0 : VALUE_EMBEDDED_OFFSET (v)));
c906108c 3109 if (coreptr == 0)
c5aa993b 3110 return NULL; /* return silently -- maybe called on gdb-generated value */
c906108c 3111
c5aa993b 3112 /* Fetch the top offset of the object */
c906108c 3113 /* FIXME possible 32x64 problem with pointer size & arithmetic */
c5aa993b
JM
3114 vp = value_at (builtin_type_int,
3115 coreptr + 4 * HP_ACC_TOP_OFFSET_OFFSET,
3116 VALUE_BFD_SECTION (v));
c906108c
SS
3117 top_offset = value_as_long (vp);
3118 if (top)
3119 *top = top_offset;
3120
3121 /* Fetch the typeinfo pointer */
3122 /* FIXME possible 32x64 problem with pointer size & arithmetic */
3123 vp = value_at (builtin_type_int, coreptr + 4 * HP_ACC_TYPEINFO_OFFSET, VALUE_BFD_SECTION (v));
3124 /* Indirect through the typeinfo pointer and retrieve the pointer
3125 * to the string name */
c5aa993b 3126 coreptr = *(CORE_ADDR *) (VALUE_CONTENTS (vp));
c906108c
SS
3127 if (!coreptr)
3128 error ("Retrieved null typeinfo pointer in trying to determine run-time type");
c5aa993b
JM
3129 vp = value_at (builtin_type_int, coreptr + 4, VALUE_BFD_SECTION (v)); /* 4 -> offset of name field */
3130 /* FIXME possible 32x64 problem */
c906108c 3131
c5aa993b 3132 coreptr = *(CORE_ADDR *) (VALUE_CONTENTS (vp));
c906108c
SS
3133
3134 read_memory_string (coreptr, rtti_type_name, 256);
3135
3136 if (strlen (rtti_type_name) == 0)
3137 error ("Retrieved null type name from typeinfo");
c5aa993b 3138
c906108c
SS
3139 /* search for type */
3140 rtti_type = lookup_typename (rtti_type_name, (struct block *) 0, 1);
c5aa993b 3141
c906108c
SS
3142 if (!rtti_type)
3143 error ("Could not find run-time type: invalid type name %s in typeinfo??", rtti_type_name);
3144 CHECK_TYPEDEF (rtti_type);
3145
c5aa993b
JM
3146#if 0 /* debugging */
3147 printf ("RTTI type name %s, tag %s, full? %d\n", TYPE_NAME (rtti_type), TYPE_TAG_NAME (rtti_type), full ? *full : -1);
c906108c
SS
3148#endif
3149
3150 /* Check whether we have the entire object */
c5aa993b 3151 if (full /* Non-null pointer passed */
c906108c
SS
3152
3153 &&
c5aa993b
JM
3154 /* Either we checked on the whole object in hand and found the
3155 top offset to be zero */
3156 (((top_offset == 0) &&
3157 using_enclosing &&
3158 TYPE_LENGTH (known_type) == TYPE_LENGTH (rtti_type))
3159 ||
3160 /* Or we checked on the embedded object and top offset was the
3161 same as the embedded offset */
3162 ((top_offset == VALUE_EMBEDDED_OFFSET (v)) &&
3163 !using_enclosing &&
3164 TYPE_LENGTH (VALUE_ENCLOSING_TYPE (v)) == TYPE_LENGTH (rtti_type))))
3165
c906108c 3166 *full = 1;
c5aa993b 3167
c906108c
SS
3168 return rtti_type;
3169}
3170
3171/* Given a pointer value V, find the real (RTTI) type
3172 of the object it points to.
3173 Other parameters FULL, TOP, USING_ENC as with value_rtti_type()
3174 and refer to the values computed for the object pointed to. */
3175
3176struct type *
3177value_rtti_target_type (v, full, top, using_enc)
c5aa993b
JM
3178 value_ptr v;
3179 int *full;
3180 int *top;
3181 int *using_enc;
c906108c
SS
3182{
3183 value_ptr target;
3184
3185 target = value_ind (v);
3186
3187 return value_rtti_type (target, full, top, using_enc);
3188}
3189
3190/* Given a value pointed to by ARGP, check its real run-time type, and
3191 if that is different from the enclosing type, create a new value
3192 using the real run-time type as the enclosing type (and of the same
3193 type as ARGP) and return it, with the embedded offset adjusted to
3194 be the correct offset to the enclosed object
3195 RTYPE is the type, and XFULL, XTOP, and XUSING_ENC are the other
3196 parameters, computed by value_rtti_type(). If these are available,
3197 they can be supplied and a second call to value_rtti_type() is avoided.
3198 (Pass RTYPE == NULL if they're not available */
3199
3200value_ptr
3201value_full_object (argp, rtype, xfull, xtop, xusing_enc)
c5aa993b
JM
3202 value_ptr argp;
3203 struct type *rtype;
3204 int xfull;
3205 int xtop;
3206 int xusing_enc;
3207
c906108c 3208{
c5aa993b 3209 struct type *real_type;
c906108c
SS
3210 int full = 0;
3211 int top = -1;
3212 int using_enc = 0;
3213 value_ptr new_val;
3214
3215 if (rtype)
3216 {
3217 real_type = rtype;
3218 full = xfull;
3219 top = xtop;
3220 using_enc = xusing_enc;
3221 }
3222 else
3223 real_type = value_rtti_type (argp, &full, &top, &using_enc);
3224
3225 /* If no RTTI data, or if object is already complete, do nothing */
3226 if (!real_type || real_type == VALUE_ENCLOSING_TYPE (argp))
3227 return argp;
3228
3229 /* If we have the full object, but for some reason the enclosing
c5aa993b 3230 type is wrong, set it *//* pai: FIXME -- sounds iffy */
c906108c
SS
3231 if (full)
3232 {
3233 VALUE_ENCLOSING_TYPE (argp) = real_type;
3234 return argp;
3235 }
3236
3237 /* Check if object is in memory */
3238 if (VALUE_LVAL (argp) != lval_memory)
3239 {
3240 warning ("Couldn't retrieve complete object of RTTI type %s; object may be in register(s).", TYPE_NAME (real_type));
c5aa993b 3241
c906108c
SS
3242 return argp;
3243 }
c5aa993b 3244
c906108c
SS
3245 /* All other cases -- retrieve the complete object */
3246 /* Go back by the computed top_offset from the beginning of the object,
3247 adjusting for the embedded offset of argp if that's what value_rtti_type
3248 used for its computation. */
3249 new_val = value_at_lazy (real_type, VALUE_ADDRESS (argp) - top +
c5aa993b
JM
3250 (using_enc ? 0 : VALUE_EMBEDDED_OFFSET (argp)),
3251 VALUE_BFD_SECTION (argp));
c906108c
SS
3252 VALUE_TYPE (new_val) = VALUE_TYPE (argp);
3253 VALUE_EMBEDDED_OFFSET (new_val) = using_enc ? top + VALUE_EMBEDDED_OFFSET (argp) : top;
3254 return new_val;
3255}
3256
3257
3258
3259
3260/* C++: return the value of the class instance variable, if one exists.
3261 Flag COMPLAIN signals an error if the request is made in an
3262 inappropriate context. */
3263
3264value_ptr
3265value_of_this (complain)
3266 int complain;
3267{
3268 struct symbol *func, *sym;
3269 struct block *b;
3270 int i;
3271 static const char funny_this[] = "this";
3272 value_ptr this;
3273
3274 if (selected_frame == 0)
3275 {
3276 if (complain)
c5aa993b
JM
3277 error ("no frame selected");
3278 else
3279 return 0;
c906108c
SS
3280 }
3281
3282 func = get_frame_function (selected_frame);
3283 if (!func)
3284 {
3285 if (complain)
3286 error ("no `this' in nameless context");
c5aa993b
JM
3287 else
3288 return 0;
c906108c
SS
3289 }
3290
3291 b = SYMBOL_BLOCK_VALUE (func);
3292 i = BLOCK_NSYMS (b);
3293 if (i <= 0)
3294 {
3295 if (complain)
c5aa993b
JM
3296 error ("no args, no `this'");
3297 else
3298 return 0;
c906108c
SS
3299 }
3300
3301 /* Calling lookup_block_symbol is necessary to get the LOC_REGISTER
3302 symbol instead of the LOC_ARG one (if both exist). */
3303 sym = lookup_block_symbol (b, funny_this, VAR_NAMESPACE);
3304 if (sym == NULL)
3305 {
3306 if (complain)
3307 error ("current stack frame not in method");
3308 else
3309 return NULL;
3310 }
3311
3312 this = read_var_value (sym, selected_frame);
3313 if (this == 0 && complain)
3314 error ("`this' argument at unknown address");
3315 return this;
3316}
3317
3318/* Create a slice (sub-string, sub-array) of ARRAY, that is LENGTH elements
3319 long, starting at LOWBOUND. The result has the same lower bound as
3320 the original ARRAY. */
3321
3322value_ptr
3323value_slice (array, lowbound, length)
3324 value_ptr array;
3325 int lowbound, length;
3326{
3327 struct type *slice_range_type, *slice_type, *range_type;
3328 LONGEST lowerbound, upperbound, offset;
3329 value_ptr slice;
3330 struct type *array_type;
3331 array_type = check_typedef (VALUE_TYPE (array));
3332 COERCE_VARYING_ARRAY (array, array_type);
3333 if (TYPE_CODE (array_type) != TYPE_CODE_ARRAY
3334 && TYPE_CODE (array_type) != TYPE_CODE_STRING
3335 && TYPE_CODE (array_type) != TYPE_CODE_BITSTRING)
3336 error ("cannot take slice of non-array");
3337 range_type = TYPE_INDEX_TYPE (array_type);
3338 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
3339 error ("slice from bad array or bitstring");
3340 if (lowbound < lowerbound || length < 0
3341 || lowbound + length - 1 > upperbound
c5aa993b 3342 /* Chill allows zero-length strings but not arrays. */
c906108c
SS
3343 || (current_language->la_language == language_chill
3344 && length == 0 && TYPE_CODE (array_type) == TYPE_CODE_ARRAY))
3345 error ("slice out of range");
3346 /* FIXME-type-allocation: need a way to free this type when we are
3347 done with it. */
c5aa993b 3348 slice_range_type = create_range_type ((struct type *) NULL,
c906108c
SS
3349 TYPE_TARGET_TYPE (range_type),
3350 lowbound, lowbound + length - 1);
3351 if (TYPE_CODE (array_type) == TYPE_CODE_BITSTRING)
3352 {
3353 int i;
c5aa993b 3354 slice_type = create_set_type ((struct type *) NULL, slice_range_type);
c906108c
SS
3355 TYPE_CODE (slice_type) = TYPE_CODE_BITSTRING;
3356 slice = value_zero (slice_type, not_lval);
3357 for (i = 0; i < length; i++)
3358 {
3359 int element = value_bit_index (array_type,
3360 VALUE_CONTENTS (array),
3361 lowbound + i);
3362 if (element < 0)
3363 error ("internal error accessing bitstring");
3364 else if (element > 0)
3365 {
3366 int j = i % TARGET_CHAR_BIT;
3367 if (BITS_BIG_ENDIAN)
3368 j = TARGET_CHAR_BIT - 1 - j;
3369 VALUE_CONTENTS_RAW (slice)[i / TARGET_CHAR_BIT] |= (1 << j);
3370 }
3371 }
3372 /* We should set the address, bitssize, and bitspos, so the clice
c5aa993b
JM
3373 can be used on the LHS, but that may require extensions to
3374 value_assign. For now, just leave as a non_lval. FIXME. */
c906108c
SS
3375 }
3376 else
3377 {
3378 struct type *element_type = TYPE_TARGET_TYPE (array_type);
3379 offset
3380 = (lowbound - lowerbound) * TYPE_LENGTH (check_typedef (element_type));
c5aa993b 3381 slice_type = create_array_type ((struct type *) NULL, element_type,
c906108c
SS
3382 slice_range_type);
3383 TYPE_CODE (slice_type) = TYPE_CODE (array_type);
3384 slice = allocate_value (slice_type);
3385 if (VALUE_LAZY (array))
3386 VALUE_LAZY (slice) = 1;
3387 else
3388 memcpy (VALUE_CONTENTS (slice), VALUE_CONTENTS (array) + offset,
3389 TYPE_LENGTH (slice_type));
3390 if (VALUE_LVAL (array) == lval_internalvar)
3391 VALUE_LVAL (slice) = lval_internalvar_component;
3392 else
3393 VALUE_LVAL (slice) = VALUE_LVAL (array);
3394 VALUE_ADDRESS (slice) = VALUE_ADDRESS (array);
3395 VALUE_OFFSET (slice) = VALUE_OFFSET (array) + offset;
3396 }
3397 return slice;
3398}
3399
3400/* Assuming chill_varying_type (VARRAY) is true, return an equivalent
3401 value as a fixed-length array. */
3402
3403value_ptr
3404varying_to_slice (varray)
3405 value_ptr varray;
3406{
3407 struct type *vtype = check_typedef (VALUE_TYPE (varray));
3408 LONGEST length = unpack_long (TYPE_FIELD_TYPE (vtype, 0),
3409 VALUE_CONTENTS (varray)
3410 + TYPE_FIELD_BITPOS (vtype, 0) / 8);
3411 return value_slice (value_primitive_field (varray, 0, 1, vtype), 0, length);
3412}
3413
3414/* Create a value for a FORTRAN complex number. Currently most of
3415 the time values are coerced to COMPLEX*16 (i.e. a complex number
3416 composed of 2 doubles. This really should be a smarter routine
3417 that figures out precision inteligently as opposed to assuming
c5aa993b 3418 doubles. FIXME: fmb */
c906108c
SS
3419
3420value_ptr
3421value_literal_complex (arg1, arg2, type)
3422 value_ptr arg1;
3423 value_ptr arg2;
3424 struct type *type;
3425{
3426 register value_ptr val;
3427 struct type *real_type = TYPE_TARGET_TYPE (type);
3428
3429 val = allocate_value (type);
3430 arg1 = value_cast (real_type, arg1);
3431 arg2 = value_cast (real_type, arg2);
3432
3433 memcpy (VALUE_CONTENTS_RAW (val),
3434 VALUE_CONTENTS (arg1), TYPE_LENGTH (real_type));
3435 memcpy (VALUE_CONTENTS_RAW (val) + TYPE_LENGTH (real_type),
3436 VALUE_CONTENTS (arg2), TYPE_LENGTH (real_type));
3437 return val;
3438}
3439
3440/* Cast a value into the appropriate complex data type. */
3441
3442static value_ptr
3443cast_into_complex (type, val)
3444 struct type *type;
3445 register value_ptr val;
3446{
3447 struct type *real_type = TYPE_TARGET_TYPE (type);
3448 if (TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_COMPLEX)
3449 {
3450 struct type *val_real_type = TYPE_TARGET_TYPE (VALUE_TYPE (val));
3451 value_ptr re_val = allocate_value (val_real_type);
3452 value_ptr im_val = allocate_value (val_real_type);
3453
3454 memcpy (VALUE_CONTENTS_RAW (re_val),
3455 VALUE_CONTENTS (val), TYPE_LENGTH (val_real_type));
3456 memcpy (VALUE_CONTENTS_RAW (im_val),
3457 VALUE_CONTENTS (val) + TYPE_LENGTH (val_real_type),
c5aa993b 3458 TYPE_LENGTH (val_real_type));
c906108c
SS
3459
3460 return value_literal_complex (re_val, im_val, type);
3461 }
3462 else if (TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_FLT
3463 || TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT)
3464 return value_literal_complex (val, value_zero (real_type, not_lval), type);
3465 else
3466 error ("cannot cast non-number to complex");
3467}
3468
3469void
3470_initialize_valops ()
3471{
3472#if 0
3473 add_show_from_set
c5aa993b 3474 (add_set_cmd ("abandon", class_support, var_boolean, (char *) &auto_abandon,
c906108c
SS
3475 "Set automatic abandonment of expressions upon failure.",
3476 &setlist),
3477 &showlist);
3478#endif
3479
3480 add_show_from_set
c5aa993b 3481 (add_set_cmd ("overload-resolution", class_support, var_boolean, (char *) &overload_resolution,
c906108c
SS
3482 "Set overload resolution in evaluating C++ functions.",
3483 &setlist),
3484 &showlist);
3485 overload_resolution = 1;
3486
3487}
This page took 0.17702 seconds and 4 git commands to generate.