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