xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/c-lang.c (revision 53d1339bf7f9c7367b35a9e1ebe693f9b047a47b)
1 /* C language support routines for GDB, the GNU debugger.
2 
3    Copyright (C) 1992-2019 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
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 3 of the License, or
10    (at your option) any later version.
11 
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.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "symtab.h"
22 #include "gdbtypes.h"
23 #include "expression.h"
24 #include "parser-defs.h"
25 #include "language.h"
26 #include "varobj.h"
27 #include "c-lang.h"
28 #include "c-support.h"
29 #include "valprint.h"
30 #include "macroscope.h"
31 #include "charset.h"
32 #include "demangle.h"
33 #include "cp-abi.h"
34 #include "cp-support.h"
35 #include "gdb_obstack.h"
36 #include <ctype.h>
37 #include "gdbcore.h"
38 
39 /* Given a C string type, STR_TYPE, return the corresponding target
40    character set name.  */
41 
42 static const char *
43 charset_for_string_type (c_string_type str_type, struct gdbarch *gdbarch)
44 {
45   switch (str_type & ~C_CHAR)
46     {
47     case C_STRING:
48       return target_charset (gdbarch);
49     case C_WIDE_STRING:
50       return target_wide_charset (gdbarch);
51     case C_STRING_16:
52       /* FIXME: UTF-16 is not always correct.  */
53       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
54 	return "UTF-16BE";
55       else
56 	return "UTF-16LE";
57     case C_STRING_32:
58       /* FIXME: UTF-32 is not always correct.  */
59       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
60 	return "UTF-32BE";
61       else
62 	return "UTF-32LE";
63     }
64   internal_error (__FILE__, __LINE__, _("unhandled c_string_type"));
65 }
66 
67 /* Classify ELTTYPE according to what kind of character it is.  Return
68    the enum constant representing the character type.  Also set
69    *ENCODING to the name of the character set to use when converting
70    characters of this type in target BYTE_ORDER to the host character
71    set.  */
72 
73 static c_string_type
74 classify_type (struct type *elttype, struct gdbarch *gdbarch,
75 	       const char **encoding)
76 {
77   c_string_type result;
78 
79   /* We loop because ELTTYPE may be a typedef, and we want to
80      successively peel each typedef until we reach a type we
81      understand.  We don't use CHECK_TYPEDEF because that will strip
82      all typedefs at once -- but in C, wchar_t is itself a typedef, so
83      that would do the wrong thing.  */
84   while (elttype)
85     {
86       const char *name = TYPE_NAME (elttype);
87 
88       if (TYPE_CODE (elttype) == TYPE_CODE_CHAR || !name)
89 	{
90 	  result = C_CHAR;
91 	  goto done;
92 	}
93 
94       if (!strcmp (name, "wchar_t"))
95 	{
96 	  result = C_WIDE_CHAR;
97 	  goto done;
98 	}
99 
100       if (!strcmp (name, "char16_t"))
101 	{
102 	  result = C_CHAR_16;
103 	  goto done;
104 	}
105 
106       if (!strcmp (name, "char32_t"))
107 	{
108 	  result = C_CHAR_32;
109 	  goto done;
110 	}
111 
112       if (TYPE_CODE (elttype) != TYPE_CODE_TYPEDEF)
113 	break;
114 
115       /* Call for side effects.  */
116       check_typedef (elttype);
117 
118       if (TYPE_TARGET_TYPE (elttype))
119 	elttype = TYPE_TARGET_TYPE (elttype);
120       else
121 	{
122 	  /* Perhaps check_typedef did not update the target type.  In
123 	     this case, force the lookup again and hope it works out.
124 	     It never will for C, but it might for C++.  */
125 	  elttype = check_typedef (elttype);
126 	}
127     }
128 
129   /* Punt.  */
130   result = C_CHAR;
131 
132  done:
133   if (encoding)
134     *encoding = charset_for_string_type (result, gdbarch);
135 
136   return result;
137 }
138 
139 /* Print the character C on STREAM as part of the contents of a
140    literal string whose delimiter is QUOTER.  Note that that format
141    for printing characters and strings is language specific.  */
142 
143 void
144 c_emit_char (int c, struct type *type,
145 	     struct ui_file *stream, int quoter)
146 {
147   const char *encoding;
148 
149   classify_type (type, get_type_arch (type), &encoding);
150   generic_emit_char (c, type, stream, quoter, encoding);
151 }
152 
153 void
154 c_printchar (int c, struct type *type, struct ui_file *stream)
155 {
156   c_string_type str_type;
157 
158   str_type = classify_type (type, get_type_arch (type), NULL);
159   switch (str_type)
160     {
161     case C_CHAR:
162       break;
163     case C_WIDE_CHAR:
164       fputc_filtered ('L', stream);
165       break;
166     case C_CHAR_16:
167       fputc_filtered ('u', stream);
168       break;
169     case C_CHAR_32:
170       fputc_filtered ('U', stream);
171       break;
172     }
173 
174   fputc_filtered ('\'', stream);
175   LA_EMIT_CHAR (c, type, stream, '\'');
176   fputc_filtered ('\'', stream);
177 }
178 
179 /* Print the character string STRING, printing at most LENGTH
180    characters.  LENGTH is -1 if the string is nul terminated.  Each
181    character is WIDTH bytes long.  Printing stops early if the number
182    hits print_max; repeat counts are printed as appropriate.  Print
183    ellipses at the end if we had to stop before printing LENGTH
184    characters, or if FORCE_ELLIPSES.  */
185 
186 void
187 c_printstr (struct ui_file *stream, struct type *type,
188 	    const gdb_byte *string, unsigned int length,
189 	    const char *user_encoding, int force_ellipses,
190 	    const struct value_print_options *options)
191 {
192   c_string_type str_type;
193   const char *type_encoding;
194   const char *encoding;
195 
196   str_type = (classify_type (type, get_type_arch (type), &type_encoding)
197 	      & ~C_CHAR);
198   switch (str_type)
199     {
200     case C_STRING:
201       break;
202     case C_WIDE_STRING:
203       fputs_filtered ("L", stream);
204       break;
205     case C_STRING_16:
206       fputs_filtered ("u", stream);
207       break;
208     case C_STRING_32:
209       fputs_filtered ("U", stream);
210       break;
211     }
212 
213   encoding = (user_encoding && *user_encoding) ? user_encoding : type_encoding;
214 
215   generic_printstr (stream, type, string, length, encoding, force_ellipses,
216 		    '"', 1, options);
217 }
218 
219 /* Obtain a C string from the inferior storing it in a newly allocated
220    buffer in BUFFER, which should be freed by the caller.  If the in-
221    and out-parameter *LENGTH is specified at -1, the string is read
222    until a null character of the appropriate width is found, otherwise
223    the string is read to the length of characters specified.  The size
224    of a character is determined by the length of the target type of
225    the pointer or array.
226 
227    If VALUE is an array with a known length, and *LENGTH is -1,
228    the function will not read past the end of the array.  However, any
229    declared size of the array is ignored if *LENGTH > 0.
230 
231    On completion, *LENGTH will be set to the size of the string read in
232    characters.  (If a length of -1 is specified, the length returned
233    will not include the null character).  CHARSET is always set to the
234    target charset.  */
235 
236 void
237 c_get_string (struct value *value, gdb::unique_xmalloc_ptr<gdb_byte> *buffer,
238 	      int *length, struct type **char_type,
239 	      const char **charset)
240 {
241   int err, width;
242   unsigned int fetchlimit;
243   struct type *type = check_typedef (value_type (value));
244   struct type *element_type = TYPE_TARGET_TYPE (type);
245   int req_length = *length;
246   enum bfd_endian byte_order
247     = gdbarch_byte_order (get_type_arch (type));
248 
249   if (element_type == NULL)
250     goto error;
251 
252   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
253     {
254       /* If we know the size of the array, we can use it as a limit on
255 	 the number of characters to be fetched.  */
256       if (TYPE_NFIELDS (type) == 1
257 	  && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_RANGE)
258 	{
259 	  LONGEST low_bound, high_bound;
260 
261 	  get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
262 			       &low_bound, &high_bound);
263 	  fetchlimit = high_bound - low_bound + 1;
264 	}
265       else
266 	fetchlimit = UINT_MAX;
267     }
268   else if (TYPE_CODE (type) == TYPE_CODE_PTR)
269     fetchlimit = UINT_MAX;
270   else
271     /* We work only with arrays and pointers.  */
272     goto error;
273 
274   if (! c_textual_element_type (element_type, 0))
275     goto error;
276   classify_type (element_type, get_type_arch (element_type), charset);
277   width = TYPE_LENGTH (element_type);
278 
279   /* If the string lives in GDB's memory instead of the inferior's,
280      then we just need to copy it to BUFFER.  Also, since such strings
281      are arrays with known size, FETCHLIMIT will hold the size of the
282      array.  */
283   if ((VALUE_LVAL (value) == not_lval
284        || VALUE_LVAL (value) == lval_internalvar)
285       && fetchlimit != UINT_MAX)
286     {
287       int i;
288       const gdb_byte *contents = value_contents (value);
289 
290       /* If a length is specified, use that.  */
291       if (*length >= 0)
292 	i  = *length;
293       else
294  	/* Otherwise, look for a null character.  */
295  	for (i = 0; i < fetchlimit; i++)
296 	  if (extract_unsigned_integer (contents + i * width,
297 					width, byte_order) == 0)
298  	    break;
299 
300       /* I is now either a user-defined length, the number of non-null
301  	 characters, or FETCHLIMIT.  */
302       *length = i * width;
303       buffer->reset ((gdb_byte *) xmalloc (*length));
304       memcpy (buffer->get (), contents, *length);
305       err = 0;
306     }
307   else
308     {
309       CORE_ADDR addr = value_as_address (value);
310 
311       /* Prior to the fix for PR 16196 read_string would ignore fetchlimit
312 	 if length > 0.  The old "broken" behaviour is the behaviour we want:
313 	 The caller may want to fetch 100 bytes from a variable length array
314 	 implemented using the common idiom of having an array of length 1 at
315 	 the end of a struct.  In this case we want to ignore the declared
316 	 size of the array.  However, it's counterintuitive to implement that
317 	 behaviour in read_string: what does fetchlimit otherwise mean if
318 	 length > 0.  Therefore we implement the behaviour we want here:
319 	 If *length > 0, don't specify a fetchlimit.  This preserves the
320 	 previous behaviour.  We could move this check above where we know
321 	 whether the array is declared with a fixed size, but we only want
322 	 to apply this behaviour when calling read_string.  PR 16286.  */
323       if (*length > 0)
324 	fetchlimit = UINT_MAX;
325 
326       err = read_string (addr, *length, width, fetchlimit,
327 			 byte_order, buffer, length);
328       if (err != 0)
329 	memory_error (TARGET_XFER_E_IO, addr);
330     }
331 
332   /* If the LENGTH is specified at -1, we want to return the string
333      length up to the terminating null character.  If an actual length
334      was specified, we want to return the length of exactly what was
335      read.  */
336   if (req_length == -1)
337     /* If the last character is null, subtract it from LENGTH.  */
338     if (*length > 0
339 	&& extract_unsigned_integer (buffer->get () + *length - width,
340 				     width, byte_order) == 0)
341       *length -= width;
342 
343   /* The read_string function will return the number of bytes read.
344      If length returned from read_string was > 0, return the number of
345      characters read by dividing the number of bytes by width.  */
346   if (*length != 0)
347      *length = *length / width;
348 
349   *char_type = element_type;
350 
351   return;
352 
353  error:
354   {
355     std::string type_str = type_to_string (type);
356     if (!type_str.empty ())
357       {
358 	error (_("Trying to read string with inappropriate type `%s'."),
359 	       type_str.c_str ());
360       }
361     else
362       error (_("Trying to read string with inappropriate type."));
363   }
364 }
365 
366 
367 /* Evaluating C and C++ expressions.  */
368 
369 /* Convert a UCN.  The digits of the UCN start at P and extend no
370    farther than LIMIT.  DEST_CHARSET is the name of the character set
371    into which the UCN should be converted.  The results are written to
372    OUTPUT.  LENGTH is the maximum length of the UCN, either 4 or 8.
373    Returns a pointer to just after the final digit of the UCN.  */
374 
375 static char *
376 convert_ucn (char *p, char *limit, const char *dest_charset,
377 	     struct obstack *output, int length)
378 {
379   unsigned long result = 0;
380   gdb_byte data[4];
381   int i;
382 
383   for (i = 0; i < length && p < limit && ISXDIGIT (*p); ++i, ++p)
384     result = (result << 4) + host_hex_value (*p);
385 
386   for (i = 3; i >= 0; --i)
387     {
388       data[i] = result & 0xff;
389       result >>= 8;
390     }
391 
392   convert_between_encodings ("UTF-32BE", dest_charset, data,
393 			     4, 4, output, translit_none);
394 
395   return p;
396 }
397 
398 /* Emit a character, VALUE, which was specified numerically, to
399    OUTPUT.  TYPE is the target character type.  */
400 
401 static void
402 emit_numeric_character (struct type *type, unsigned long value,
403 			struct obstack *output)
404 {
405   gdb_byte *buffer;
406 
407   buffer = (gdb_byte *) alloca (TYPE_LENGTH (type));
408   pack_long (buffer, type, value);
409   obstack_grow (output, buffer, TYPE_LENGTH (type));
410 }
411 
412 /* Convert an octal escape sequence.  TYPE is the target character
413    type.  The digits of the escape sequence begin at P and extend no
414    farther than LIMIT.  The result is written to OUTPUT.  Returns a
415    pointer to just after the final digit of the escape sequence.  */
416 
417 static char *
418 convert_octal (struct type *type, char *p,
419 	       char *limit, struct obstack *output)
420 {
421   int i;
422   unsigned long value = 0;
423 
424   for (i = 0;
425        i < 3 && p < limit && ISDIGIT (*p) && *p != '8' && *p != '9';
426        ++i)
427     {
428       value = 8 * value + host_hex_value (*p);
429       ++p;
430     }
431 
432   emit_numeric_character (type, value, output);
433 
434   return p;
435 }
436 
437 /* Convert a hex escape sequence.  TYPE is the target character type.
438    The digits of the escape sequence begin at P and extend no farther
439    than LIMIT.  The result is written to OUTPUT.  Returns a pointer to
440    just after the final digit of the escape sequence.  */
441 
442 static char *
443 convert_hex (struct type *type, char *p,
444 	     char *limit, struct obstack *output)
445 {
446   unsigned long value = 0;
447 
448   while (p < limit && ISXDIGIT (*p))
449     {
450       value = 16 * value + host_hex_value (*p);
451       ++p;
452     }
453 
454   emit_numeric_character (type, value, output);
455 
456   return p;
457 }
458 
459 #define ADVANCE					\
460   do {						\
461     ++p;					\
462     if (p == limit)				\
463       error (_("Malformed escape sequence"));	\
464   } while (0)
465 
466 /* Convert an escape sequence to a target format.  TYPE is the target
467    character type to use, and DEST_CHARSET is the name of the target
468    character set.  The backslash of the escape sequence is at *P, and
469    the escape sequence will not extend past LIMIT.  The results are
470    written to OUTPUT.  Returns a pointer to just past the final
471    character of the escape sequence.  */
472 
473 static char *
474 convert_escape (struct type *type, const char *dest_charset,
475 		char *p, char *limit, struct obstack *output)
476 {
477   /* Skip the backslash.  */
478   ADVANCE;
479 
480   switch (*p)
481     {
482     case '\\':
483       obstack_1grow (output, '\\');
484       ++p;
485       break;
486 
487     case 'x':
488       ADVANCE;
489       if (!ISXDIGIT (*p))
490 	error (_("\\x used with no following hex digits."));
491       p = convert_hex (type, p, limit, output);
492       break;
493 
494     case '0':
495     case '1':
496     case '2':
497     case '3':
498     case '4':
499     case '5':
500     case '6':
501     case '7':
502       p = convert_octal (type, p, limit, output);
503       break;
504 
505     case 'u':
506     case 'U':
507       {
508 	int length = *p == 'u' ? 4 : 8;
509 
510 	ADVANCE;
511 	if (!ISXDIGIT (*p))
512 	  error (_("\\u used with no following hex digits"));
513 	p = convert_ucn (p, limit, dest_charset, output, length);
514       }
515     }
516 
517   return p;
518 }
519 
520 /* Given a single string from a (C-specific) OP_STRING list, convert
521    it to a target string, handling escape sequences specially.  The
522    output is written to OUTPUT.  DATA is the input string, which has
523    length LEN.  DEST_CHARSET is the name of the target character set,
524    and TYPE is the type of target character to use.  */
525 
526 static void
527 parse_one_string (struct obstack *output, char *data, int len,
528 		  const char *dest_charset, struct type *type)
529 {
530   char *limit;
531 
532   limit = data + len;
533 
534   while (data < limit)
535     {
536       char *p = data;
537 
538       /* Look for next escape, or the end of the input.  */
539       while (p < limit && *p != '\\')
540 	++p;
541       /* If we saw a run of characters, convert them all.  */
542       if (p > data)
543 	convert_between_encodings (host_charset (), dest_charset,
544 				   (gdb_byte *) data, p - data, 1,
545 				   output, translit_none);
546       /* If we saw an escape, convert it.  */
547       if (p < limit)
548 	p = convert_escape (type, dest_charset, p, limit, output);
549       data = p;
550     }
551 }
552 
553 /* Expression evaluator for the C language family.  Most operations
554    are delegated to evaluate_subexp_standard; see that function for a
555    description of the arguments.  */
556 
557 struct value *
558 evaluate_subexp_c (struct type *expect_type, struct expression *exp,
559 		   int *pos, enum noside noside)
560 {
561   enum exp_opcode op = exp->elts[*pos].opcode;
562 
563   switch (op)
564     {
565     case OP_STRING:
566       {
567 	int oplen, limit;
568 	struct type *type;
569 	struct value *result;
570 	c_string_type dest_type;
571 	const char *dest_charset;
572 	int satisfy_expected = 0;
573 
574 	auto_obstack output;
575 
576 	++*pos;
577 	oplen = longest_to_int (exp->elts[*pos].longconst);
578 
579 	++*pos;
580 	limit = *pos + BYTES_TO_EXP_ELEM (oplen + 1);
581 	dest_type = ((enum c_string_type_values)
582 		     longest_to_int (exp->elts[*pos].longconst));
583 	switch (dest_type & ~C_CHAR)
584 	  {
585 	  case C_STRING:
586 	    type = language_string_char_type (exp->language_defn,
587 					      exp->gdbarch);
588 	    break;
589 	  case C_WIDE_STRING:
590 	    type = lookup_typename (exp->language_defn, exp->gdbarch,
591 				    "wchar_t", NULL, 0);
592 	    break;
593 	  case C_STRING_16:
594 	    type = lookup_typename (exp->language_defn, exp->gdbarch,
595 				    "char16_t", NULL, 0);
596 	    break;
597 	  case C_STRING_32:
598 	    type = lookup_typename (exp->language_defn, exp->gdbarch,
599 				    "char32_t", NULL, 0);
600 	    break;
601 	  default:
602 	    internal_error (__FILE__, __LINE__, _("unhandled c_string_type"));
603 	  }
604 
605 	/* Ensure TYPE_LENGTH is valid for TYPE.  */
606 	check_typedef (type);
607 
608 	/* If the caller expects an array of some integral type,
609 	   satisfy them.  If something odder is expected, rely on the
610 	   caller to cast.  */
611 	if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_ARRAY)
612 	  {
613 	    struct type *element_type
614 	      = check_typedef (TYPE_TARGET_TYPE (expect_type));
615 
616 	    if (TYPE_CODE (element_type) == TYPE_CODE_INT
617 		|| TYPE_CODE (element_type) == TYPE_CODE_CHAR)
618 	      {
619 		type = element_type;
620 		satisfy_expected = 1;
621 	      }
622 	  }
623 
624 	dest_charset = charset_for_string_type (dest_type, exp->gdbarch);
625 
626 	++*pos;
627 	while (*pos < limit)
628 	  {
629 	    int len;
630 
631 	    len = longest_to_int (exp->elts[*pos].longconst);
632 
633 	    ++*pos;
634 	    if (noside != EVAL_SKIP)
635 	      parse_one_string (&output, &exp->elts[*pos].string, len,
636 				dest_charset, type);
637 	    *pos += BYTES_TO_EXP_ELEM (len);
638 	  }
639 
640 	/* Skip the trailing length and opcode.  */
641 	*pos += 2;
642 
643 	if (noside == EVAL_SKIP)
644 	  {
645 	    /* Return a dummy value of the appropriate type.  */
646 	    if (expect_type != NULL)
647 	      result = allocate_value (expect_type);
648 	    else if ((dest_type & C_CHAR) != 0)
649 	      result = allocate_value (type);
650 	    else
651 	      result = value_cstring ("", 0, type);
652 	    return result;
653 	  }
654 
655 	if ((dest_type & C_CHAR) != 0)
656 	  {
657 	    LONGEST value;
658 
659 	    if (obstack_object_size (&output) != TYPE_LENGTH (type))
660 	      error (_("Could not convert character "
661 		       "constant to target character set"));
662 	    value = unpack_long (type, (gdb_byte *) obstack_base (&output));
663 	    result = value_from_longest (type, value);
664 	  }
665 	else
666 	  {
667 	    int i;
668 
669 	    /* Write the terminating character.  */
670 	    for (i = 0; i < TYPE_LENGTH (type); ++i)
671 	      obstack_1grow (&output, 0);
672 
673 	    if (satisfy_expected)
674 	      {
675 		LONGEST low_bound, high_bound;
676 		int element_size = TYPE_LENGTH (type);
677 
678 		if (get_discrete_bounds (TYPE_INDEX_TYPE (expect_type),
679 					 &low_bound, &high_bound) < 0)
680 		  {
681 		    low_bound = 0;
682 		    high_bound = (TYPE_LENGTH (expect_type) / element_size) - 1;
683 		  }
684 		if (obstack_object_size (&output) / element_size
685 		    > (high_bound - low_bound + 1))
686 		  error (_("Too many array elements"));
687 
688 		result = allocate_value (expect_type);
689 		memcpy (value_contents_raw (result), obstack_base (&output),
690 			obstack_object_size (&output));
691 	      }
692 	    else
693 	      result = value_cstring ((const char *) obstack_base (&output),
694 				      obstack_object_size (&output),
695 				      type);
696 	  }
697 	return result;
698       }
699       break;
700 
701     default:
702       break;
703     }
704   return evaluate_subexp_standard (expect_type, exp, pos, noside);
705 }
706 
707 /* la_watch_location_expression for C.  */
708 
709 gdb::unique_xmalloc_ptr<char>
710 c_watch_location_expression (struct type *type, CORE_ADDR addr)
711 {
712   type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
713   std::string name = type_to_string (type);
714   return gdb::unique_xmalloc_ptr<char>
715     (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr)));
716 }
717 
718 
719 /* Table mapping opcodes into strings for printing operators
720    and precedences of the operators.  */
721 
722 const struct op_print c_op_print_tab[] =
723 {
724   {",", BINOP_COMMA, PREC_COMMA, 0},
725   {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
726   {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
727   {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
728   {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
729   {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
730   {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
731   {"==", BINOP_EQUAL, PREC_EQUAL, 0},
732   {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
733   {"<=", BINOP_LEQ, PREC_ORDER, 0},
734   {">=", BINOP_GEQ, PREC_ORDER, 0},
735   {">", BINOP_GTR, PREC_ORDER, 0},
736   {"<", BINOP_LESS, PREC_ORDER, 0},
737   {">>", BINOP_RSH, PREC_SHIFT, 0},
738   {"<<", BINOP_LSH, PREC_SHIFT, 0},
739   {"+", BINOP_ADD, PREC_ADD, 0},
740   {"-", BINOP_SUB, PREC_ADD, 0},
741   {"*", BINOP_MUL, PREC_MUL, 0},
742   {"/", BINOP_DIV, PREC_MUL, 0},
743   {"%", BINOP_REM, PREC_MUL, 0},
744   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
745   {"+", UNOP_PLUS, PREC_PREFIX, 0},
746   {"-", UNOP_NEG, PREC_PREFIX, 0},
747   {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
748   {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
749   {"*", UNOP_IND, PREC_PREFIX, 0},
750   {"&", UNOP_ADDR, PREC_PREFIX, 0},
751   {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
752   {"alignof ", UNOP_ALIGNOF, PREC_PREFIX, 0},
753   {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
754   {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
755   {NULL, OP_NULL, PREC_PREFIX, 0}
756 };
757 
758 enum c_primitive_types {
759   c_primitive_type_int,
760   c_primitive_type_long,
761   c_primitive_type_short,
762   c_primitive_type_char,
763   c_primitive_type_float,
764   c_primitive_type_double,
765   c_primitive_type_void,
766   c_primitive_type_long_long,
767   c_primitive_type_signed_char,
768   c_primitive_type_unsigned_char,
769   c_primitive_type_unsigned_short,
770   c_primitive_type_unsigned_int,
771   c_primitive_type_unsigned_long,
772   c_primitive_type_unsigned_long_long,
773   c_primitive_type_long_double,
774   c_primitive_type_complex,
775   c_primitive_type_double_complex,
776   c_primitive_type_decfloat,
777   c_primitive_type_decdouble,
778   c_primitive_type_declong,
779   nr_c_primitive_types
780 };
781 
782 void
783 c_language_arch_info (struct gdbarch *gdbarch,
784 		      struct language_arch_info *lai)
785 {
786   const struct builtin_type *builtin = builtin_type (gdbarch);
787 
788   lai->string_char_type = builtin->builtin_char;
789   lai->primitive_type_vector
790     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_c_primitive_types + 1,
791 			      struct type *);
792   lai->primitive_type_vector [c_primitive_type_int] = builtin->builtin_int;
793   lai->primitive_type_vector [c_primitive_type_long] = builtin->builtin_long;
794   lai->primitive_type_vector [c_primitive_type_short] = builtin->builtin_short;
795   lai->primitive_type_vector [c_primitive_type_char] = builtin->builtin_char;
796   lai->primitive_type_vector [c_primitive_type_float] = builtin->builtin_float;
797   lai->primitive_type_vector [c_primitive_type_double] = builtin->builtin_double;
798   lai->primitive_type_vector [c_primitive_type_void] = builtin->builtin_void;
799   lai->primitive_type_vector [c_primitive_type_long_long] = builtin->builtin_long_long;
800   lai->primitive_type_vector [c_primitive_type_signed_char] = builtin->builtin_signed_char;
801   lai->primitive_type_vector [c_primitive_type_unsigned_char] = builtin->builtin_unsigned_char;
802   lai->primitive_type_vector [c_primitive_type_unsigned_short] = builtin->builtin_unsigned_short;
803   lai->primitive_type_vector [c_primitive_type_unsigned_int] = builtin->builtin_unsigned_int;
804   lai->primitive_type_vector [c_primitive_type_unsigned_long] = builtin->builtin_unsigned_long;
805   lai->primitive_type_vector [c_primitive_type_unsigned_long_long] = builtin->builtin_unsigned_long_long;
806   lai->primitive_type_vector [c_primitive_type_long_double] = builtin->builtin_long_double;
807   lai->primitive_type_vector [c_primitive_type_complex] = builtin->builtin_complex;
808   lai->primitive_type_vector [c_primitive_type_double_complex] = builtin->builtin_double_complex;
809   lai->primitive_type_vector [c_primitive_type_decfloat] = builtin->builtin_decfloat;
810   lai->primitive_type_vector [c_primitive_type_decdouble] = builtin->builtin_decdouble;
811   lai->primitive_type_vector [c_primitive_type_declong] = builtin->builtin_declong;
812 
813   lai->bool_type_default = builtin->builtin_int;
814 }
815 
816 const struct exp_descriptor exp_descriptor_c =
817 {
818   print_subexp_standard,
819   operator_length_standard,
820   operator_check_standard,
821   op_name_standard,
822   dump_subexp_body_standard,
823   evaluate_subexp_c
824 };
825 
826 static const char *c_extensions[] =
827 {
828   ".c", NULL
829 };
830 
831 extern const struct language_defn c_language_defn =
832 {
833   "c",				/* Language name */
834   "C",
835   language_c,
836   range_check_off,
837   case_sensitive_on,
838   array_row_major,
839   macro_expansion_c,
840   c_extensions,
841   &exp_descriptor_c,
842   c_parse,
843   null_post_parser,
844   c_printchar,			/* Print a character constant */
845   c_printstr,			/* Function to print string constant */
846   c_emit_char,			/* Print a single char */
847   c_print_type,			/* Print a type using appropriate syntax */
848   c_print_typedef,		/* Print a typedef using appropriate syntax */
849   c_val_print,			/* Print a value using appropriate syntax */
850   c_value_print,		/* Print a top-level value */
851   default_read_var_value,	/* la_read_var_value */
852   NULL,				/* Language specific skip_trampoline */
853   NULL,				/* name_of_this */
854   true,				/* la_store_sym_names_in_linkage_form_p */
855   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
856   basic_lookup_transparent_type,/* lookup_transparent_type */
857   NULL,				/* Language specific symbol demangler */
858   NULL,
859   NULL,				/* Language specific
860 				   class_name_from_physname */
861   c_op_print_tab,		/* expression operators for printing */
862   1,				/* c-style arrays */
863   0,				/* String lower bound */
864   default_word_break_characters,
865   default_collect_symbol_completion_matches,
866   c_language_arch_info,
867   default_print_array_index,
868   default_pass_by_reference,
869   c_get_string,
870   c_watch_location_expression,
871   NULL,				/* la_get_symbol_name_matcher */
872   iterate_over_symbols,
873   default_search_name_hash,
874   &c_varobj_ops,
875   c_get_compile_context,
876   c_compute_program,
877   LANG_MAGIC
878 };
879 
880 enum cplus_primitive_types {
881   cplus_primitive_type_int,
882   cplus_primitive_type_long,
883   cplus_primitive_type_short,
884   cplus_primitive_type_char,
885   cplus_primitive_type_float,
886   cplus_primitive_type_double,
887   cplus_primitive_type_void,
888   cplus_primitive_type_long_long,
889   cplus_primitive_type_signed_char,
890   cplus_primitive_type_unsigned_char,
891   cplus_primitive_type_unsigned_short,
892   cplus_primitive_type_unsigned_int,
893   cplus_primitive_type_unsigned_long,
894   cplus_primitive_type_unsigned_long_long,
895   cplus_primitive_type_long_double,
896   cplus_primitive_type_complex,
897   cplus_primitive_type_double_complex,
898   cplus_primitive_type_bool,
899   cplus_primitive_type_decfloat,
900   cplus_primitive_type_decdouble,
901   cplus_primitive_type_declong,
902   cplus_primitive_type_char16_t,
903   cplus_primitive_type_char32_t,
904   cplus_primitive_type_wchar_t,
905   nr_cplus_primitive_types
906 };
907 
908 static void
909 cplus_language_arch_info (struct gdbarch *gdbarch,
910 			  struct language_arch_info *lai)
911 {
912   const struct builtin_type *builtin = builtin_type (gdbarch);
913 
914   lai->string_char_type = builtin->builtin_char;
915   lai->primitive_type_vector
916     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_cplus_primitive_types + 1,
917 			      struct type *);
918   lai->primitive_type_vector [cplus_primitive_type_int]
919     = builtin->builtin_int;
920   lai->primitive_type_vector [cplus_primitive_type_long]
921     = builtin->builtin_long;
922   lai->primitive_type_vector [cplus_primitive_type_short]
923     = builtin->builtin_short;
924   lai->primitive_type_vector [cplus_primitive_type_char]
925     = builtin->builtin_char;
926   lai->primitive_type_vector [cplus_primitive_type_float]
927     = builtin->builtin_float;
928   lai->primitive_type_vector [cplus_primitive_type_double]
929     = builtin->builtin_double;
930   lai->primitive_type_vector [cplus_primitive_type_void]
931     = builtin->builtin_void;
932   lai->primitive_type_vector [cplus_primitive_type_long_long]
933     = builtin->builtin_long_long;
934   lai->primitive_type_vector [cplus_primitive_type_signed_char]
935     = builtin->builtin_signed_char;
936   lai->primitive_type_vector [cplus_primitive_type_unsigned_char]
937     = builtin->builtin_unsigned_char;
938   lai->primitive_type_vector [cplus_primitive_type_unsigned_short]
939     = builtin->builtin_unsigned_short;
940   lai->primitive_type_vector [cplus_primitive_type_unsigned_int]
941     = builtin->builtin_unsigned_int;
942   lai->primitive_type_vector [cplus_primitive_type_unsigned_long]
943     = builtin->builtin_unsigned_long;
944   lai->primitive_type_vector [cplus_primitive_type_unsigned_long_long]
945     = builtin->builtin_unsigned_long_long;
946   lai->primitive_type_vector [cplus_primitive_type_long_double]
947     = builtin->builtin_long_double;
948   lai->primitive_type_vector [cplus_primitive_type_complex]
949     = builtin->builtin_complex;
950   lai->primitive_type_vector [cplus_primitive_type_double_complex]
951     = builtin->builtin_double_complex;
952   lai->primitive_type_vector [cplus_primitive_type_bool]
953     = builtin->builtin_bool;
954   lai->primitive_type_vector [cplus_primitive_type_decfloat]
955     = builtin->builtin_decfloat;
956   lai->primitive_type_vector [cplus_primitive_type_decdouble]
957     = builtin->builtin_decdouble;
958   lai->primitive_type_vector [cplus_primitive_type_declong]
959     = builtin->builtin_declong;
960   lai->primitive_type_vector [cplus_primitive_type_char16_t]
961     = builtin->builtin_char16;
962   lai->primitive_type_vector [cplus_primitive_type_char32_t]
963     = builtin->builtin_char32;
964   lai->primitive_type_vector [cplus_primitive_type_wchar_t]
965     = builtin->builtin_wchar;
966 
967   lai->bool_type_symbol = "bool";
968   lai->bool_type_default = builtin->builtin_bool;
969 }
970 
971 static const char *cplus_extensions[] =
972 {
973   ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++", NULL
974 };
975 
976 extern const struct language_defn cplus_language_defn =
977 {
978   "c++",			/* Language name */
979   "C++",
980   language_cplus,
981   range_check_off,
982   case_sensitive_on,
983   array_row_major,
984   macro_expansion_c,
985   cplus_extensions,
986   &exp_descriptor_c,
987   c_parse,
988   null_post_parser,
989   c_printchar,			/* Print a character constant */
990   c_printstr,			/* Function to print string constant */
991   c_emit_char,			/* Print a single char */
992   c_print_type,			/* Print a type using appropriate syntax */
993   c_print_typedef,		/* Print a typedef using appropriate syntax */
994   c_val_print,			/* Print a value using appropriate syntax */
995   c_value_print,		/* Print a top-level value */
996   default_read_var_value,	/* la_read_var_value */
997   cplus_skip_trampoline,	/* Language specific skip_trampoline */
998   "this",                       /* name_of_this */
999   false,			/* la_store_sym_names_in_linkage_form_p */
1000   cp_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
1001   cp_lookup_transparent_type,   /* lookup_transparent_type */
1002   gdb_demangle,			/* Language specific symbol demangler */
1003   gdb_sniff_from_mangled_name,
1004   cp_class_name_from_physname,  /* Language specific
1005 				   class_name_from_physname */
1006   c_op_print_tab,		/* expression operators for printing */
1007   1,				/* c-style arrays */
1008   0,				/* String lower bound */
1009   default_word_break_characters,
1010   default_collect_symbol_completion_matches,
1011   cplus_language_arch_info,
1012   default_print_array_index,
1013   cp_pass_by_reference,
1014   c_get_string,
1015   c_watch_location_expression,
1016   cp_get_symbol_name_matcher,
1017   iterate_over_symbols,
1018   cp_search_name_hash,
1019   &cplus_varobj_ops,
1020   cplus_get_compile_context,
1021   cplus_compute_program,
1022   LANG_MAGIC
1023 };
1024 
1025 static const char *asm_extensions[] =
1026 {
1027   ".s", ".sx", ".S", NULL
1028 };
1029 
1030 extern const struct language_defn asm_language_defn =
1031 {
1032   "asm",			/* Language name */
1033   "assembly",
1034   language_asm,
1035   range_check_off,
1036   case_sensitive_on,
1037   array_row_major,
1038   macro_expansion_c,
1039   asm_extensions,
1040   &exp_descriptor_c,
1041   c_parse,
1042   null_post_parser,
1043   c_printchar,			/* Print a character constant */
1044   c_printstr,			/* Function to print string constant */
1045   c_emit_char,			/* Print a single char */
1046   c_print_type,			/* Print a type using appropriate syntax */
1047   c_print_typedef,		/* Print a typedef using appropriate syntax */
1048   c_val_print,			/* Print a value using appropriate syntax */
1049   c_value_print,		/* Print a top-level value */
1050   default_read_var_value,	/* la_read_var_value */
1051   NULL,				/* Language specific skip_trampoline */
1052   NULL,				/* name_of_this */
1053   true,				/* la_store_sym_names_in_linkage_form_p */
1054   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
1055   basic_lookup_transparent_type,/* lookup_transparent_type */
1056   NULL,				/* Language specific symbol demangler */
1057   NULL,
1058   NULL,				/* Language specific
1059 				   class_name_from_physname */
1060   c_op_print_tab,		/* expression operators for printing */
1061   1,				/* c-style arrays */
1062   0,				/* String lower bound */
1063   default_word_break_characters,
1064   default_collect_symbol_completion_matches,
1065   c_language_arch_info, 	/* FIXME: la_language_arch_info.  */
1066   default_print_array_index,
1067   default_pass_by_reference,
1068   c_get_string,
1069   c_watch_location_expression,
1070   NULL,				/* la_get_symbol_name_matcher */
1071   iterate_over_symbols,
1072   default_search_name_hash,
1073   &default_varobj_ops,
1074   NULL,
1075   NULL,
1076   LANG_MAGIC
1077 };
1078 
1079 /* The following language_defn does not represent a real language.
1080    It just provides a minimal support a-la-C that should allow users
1081    to do some simple operations when debugging applications that use
1082    a language currently not supported by GDB.  */
1083 
1084 extern const struct language_defn minimal_language_defn =
1085 {
1086   "minimal",			/* Language name */
1087   "Minimal",
1088   language_minimal,
1089   range_check_off,
1090   case_sensitive_on,
1091   array_row_major,
1092   macro_expansion_c,
1093   NULL,
1094   &exp_descriptor_c,
1095   c_parse,
1096   null_post_parser,
1097   c_printchar,			/* Print a character constant */
1098   c_printstr,			/* Function to print string constant */
1099   c_emit_char,			/* Print a single char */
1100   c_print_type,			/* Print a type using appropriate syntax */
1101   c_print_typedef,		/* Print a typedef using appropriate syntax */
1102   c_val_print,			/* Print a value using appropriate syntax */
1103   c_value_print,		/* Print a top-level value */
1104   default_read_var_value,	/* la_read_var_value */
1105   NULL,				/* Language specific skip_trampoline */
1106   NULL,				/* name_of_this */
1107   true,				/* la_store_sym_names_in_linkage_form_p */
1108   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
1109   basic_lookup_transparent_type,/* lookup_transparent_type */
1110   NULL,				/* Language specific symbol demangler */
1111   NULL,
1112   NULL,				/* Language specific
1113 				   class_name_from_physname */
1114   c_op_print_tab,		/* expression operators for printing */
1115   1,				/* c-style arrays */
1116   0,				/* String lower bound */
1117   default_word_break_characters,
1118   default_collect_symbol_completion_matches,
1119   c_language_arch_info,
1120   default_print_array_index,
1121   default_pass_by_reference,
1122   c_get_string,
1123   c_watch_location_expression,
1124   NULL,				/* la_get_symbol_name_matcher */
1125   iterate_over_symbols,
1126   default_search_name_hash,
1127   &default_varobj_ops,
1128   NULL,
1129   NULL,
1130   LANG_MAGIC
1131 };
1132