Correctly handle non-C-style arrays in c_get_string
[deliverable/binutils-gdb.git] / gdb / c-lang.c
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
284 An array is assumed to live in GDB's memory, so we take this path
285 here.
286
287 However, it's possible for the caller to request more array
288 elements than apparently exist -- this can happen when using the
289 C struct hack. So, only do this if either no length was
290 specified, or the length is within the existing bounds. This
291 avoids running off the end of the value's contents. */
292 if ((VALUE_LVAL (value) == not_lval
293 || VALUE_LVAL (value) == lval_internalvar
294 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
295 && fetchlimit != UINT_MAX
296 && (*length < 0 || *length <= fetchlimit))
297 {
298 int i;
299 const gdb_byte *contents = value_contents (value);
300
301 /* If a length is specified, use that. */
302 if (*length >= 0)
303 i = *length;
304 else
305 /* Otherwise, look for a null character. */
306 for (i = 0; i < fetchlimit; i++)
307 if (extract_unsigned_integer (contents + i * width,
308 width, byte_order) == 0)
309 break;
310
311 /* I is now either a user-defined length, the number of non-null
312 characters, or FETCHLIMIT. */
313 *length = i * width;
314 buffer->reset ((gdb_byte *) xmalloc (*length));
315 memcpy (buffer->get (), contents, *length);
316 err = 0;
317 }
318 else
319 {
320 /* value_as_address does not return an address for an array when
321 c_style_arrays is false, so we handle that specially
322 here. */
323 CORE_ADDR addr;
324 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
325 {
326 if (VALUE_LVAL (value) != lval_memory)
327 error (_("Attempt to take address of value "
328 "not located in memory."));
329 addr = value_address (value);
330 }
331 else
332 addr = value_as_address (value);
333
334 /* Prior to the fix for PR 16196 read_string would ignore fetchlimit
335 if length > 0. The old "broken" behaviour is the behaviour we want:
336 The caller may want to fetch 100 bytes from a variable length array
337 implemented using the common idiom of having an array of length 1 at
338 the end of a struct. In this case we want to ignore the declared
339 size of the array. However, it's counterintuitive to implement that
340 behaviour in read_string: what does fetchlimit otherwise mean if
341 length > 0. Therefore we implement the behaviour we want here:
342 If *length > 0, don't specify a fetchlimit. This preserves the
343 previous behaviour. We could move this check above where we know
344 whether the array is declared with a fixed size, but we only want
345 to apply this behaviour when calling read_string. PR 16286. */
346 if (*length > 0)
347 fetchlimit = UINT_MAX;
348
349 err = read_string (addr, *length, width, fetchlimit,
350 byte_order, buffer, length);
351 if (err != 0)
352 memory_error (TARGET_XFER_E_IO, addr);
353 }
354
355 /* If the LENGTH is specified at -1, we want to return the string
356 length up to the terminating null character. If an actual length
357 was specified, we want to return the length of exactly what was
358 read. */
359 if (req_length == -1)
360 /* If the last character is null, subtract it from LENGTH. */
361 if (*length > 0
362 && extract_unsigned_integer (buffer->get () + *length - width,
363 width, byte_order) == 0)
364 *length -= width;
365
366 /* The read_string function will return the number of bytes read.
367 If length returned from read_string was > 0, return the number of
368 characters read by dividing the number of bytes by width. */
369 if (*length != 0)
370 *length = *length / width;
371
372 *char_type = element_type;
373
374 return;
375
376 error:
377 {
378 std::string type_str = type_to_string (type);
379 if (!type_str.empty ())
380 {
381 error (_("Trying to read string with inappropriate type `%s'."),
382 type_str.c_str ());
383 }
384 else
385 error (_("Trying to read string with inappropriate type."));
386 }
387 }
388
389 \f
390 /* Evaluating C and C++ expressions. */
391
392 /* Convert a UCN. The digits of the UCN start at P and extend no
393 farther than LIMIT. DEST_CHARSET is the name of the character set
394 into which the UCN should be converted. The results are written to
395 OUTPUT. LENGTH is the maximum length of the UCN, either 4 or 8.
396 Returns a pointer to just after the final digit of the UCN. */
397
398 static char *
399 convert_ucn (char *p, char *limit, const char *dest_charset,
400 struct obstack *output, int length)
401 {
402 unsigned long result = 0;
403 gdb_byte data[4];
404 int i;
405
406 for (i = 0; i < length && p < limit && ISXDIGIT (*p); ++i, ++p)
407 result = (result << 4) + host_hex_value (*p);
408
409 for (i = 3; i >= 0; --i)
410 {
411 data[i] = result & 0xff;
412 result >>= 8;
413 }
414
415 convert_between_encodings ("UTF-32BE", dest_charset, data,
416 4, 4, output, translit_none);
417
418 return p;
419 }
420
421 /* Emit a character, VALUE, which was specified numerically, to
422 OUTPUT. TYPE is the target character type. */
423
424 static void
425 emit_numeric_character (struct type *type, unsigned long value,
426 struct obstack *output)
427 {
428 gdb_byte *buffer;
429
430 buffer = (gdb_byte *) alloca (TYPE_LENGTH (type));
431 pack_long (buffer, type, value);
432 obstack_grow (output, buffer, TYPE_LENGTH (type));
433 }
434
435 /* Convert an octal escape sequence. TYPE is the target character
436 type. The digits of the escape sequence begin at P and extend no
437 farther than LIMIT. The result is written to OUTPUT. Returns a
438 pointer to just after the final digit of the escape sequence. */
439
440 static char *
441 convert_octal (struct type *type, char *p,
442 char *limit, struct obstack *output)
443 {
444 int i;
445 unsigned long value = 0;
446
447 for (i = 0;
448 i < 3 && p < limit && ISDIGIT (*p) && *p != '8' && *p != '9';
449 ++i)
450 {
451 value = 8 * value + host_hex_value (*p);
452 ++p;
453 }
454
455 emit_numeric_character (type, value, output);
456
457 return p;
458 }
459
460 /* Convert a hex escape sequence. TYPE is the target character type.
461 The digits of the escape sequence begin at P and extend no farther
462 than LIMIT. The result is written to OUTPUT. Returns a pointer to
463 just after the final digit of the escape sequence. */
464
465 static char *
466 convert_hex (struct type *type, char *p,
467 char *limit, struct obstack *output)
468 {
469 unsigned long value = 0;
470
471 while (p < limit && ISXDIGIT (*p))
472 {
473 value = 16 * value + host_hex_value (*p);
474 ++p;
475 }
476
477 emit_numeric_character (type, value, output);
478
479 return p;
480 }
481
482 #define ADVANCE \
483 do { \
484 ++p; \
485 if (p == limit) \
486 error (_("Malformed escape sequence")); \
487 } while (0)
488
489 /* Convert an escape sequence to a target format. TYPE is the target
490 character type to use, and DEST_CHARSET is the name of the target
491 character set. The backslash of the escape sequence is at *P, and
492 the escape sequence will not extend past LIMIT. The results are
493 written to OUTPUT. Returns a pointer to just past the final
494 character of the escape sequence. */
495
496 static char *
497 convert_escape (struct type *type, const char *dest_charset,
498 char *p, char *limit, struct obstack *output)
499 {
500 /* Skip the backslash. */
501 ADVANCE;
502
503 switch (*p)
504 {
505 case '\\':
506 obstack_1grow (output, '\\');
507 ++p;
508 break;
509
510 case 'x':
511 ADVANCE;
512 if (!ISXDIGIT (*p))
513 error (_("\\x used with no following hex digits."));
514 p = convert_hex (type, p, limit, output);
515 break;
516
517 case '0':
518 case '1':
519 case '2':
520 case '3':
521 case '4':
522 case '5':
523 case '6':
524 case '7':
525 p = convert_octal (type, p, limit, output);
526 break;
527
528 case 'u':
529 case 'U':
530 {
531 int length = *p == 'u' ? 4 : 8;
532
533 ADVANCE;
534 if (!ISXDIGIT (*p))
535 error (_("\\u used with no following hex digits"));
536 p = convert_ucn (p, limit, dest_charset, output, length);
537 }
538 }
539
540 return p;
541 }
542
543 /* Given a single string from a (C-specific) OP_STRING list, convert
544 it to a target string, handling escape sequences specially. The
545 output is written to OUTPUT. DATA is the input string, which has
546 length LEN. DEST_CHARSET is the name of the target character set,
547 and TYPE is the type of target character to use. */
548
549 static void
550 parse_one_string (struct obstack *output, char *data, int len,
551 const char *dest_charset, struct type *type)
552 {
553 char *limit;
554
555 limit = data + len;
556
557 while (data < limit)
558 {
559 char *p = data;
560
561 /* Look for next escape, or the end of the input. */
562 while (p < limit && *p != '\\')
563 ++p;
564 /* If we saw a run of characters, convert them all. */
565 if (p > data)
566 convert_between_encodings (host_charset (), dest_charset,
567 (gdb_byte *) data, p - data, 1,
568 output, translit_none);
569 /* If we saw an escape, convert it. */
570 if (p < limit)
571 p = convert_escape (type, dest_charset, p, limit, output);
572 data = p;
573 }
574 }
575
576 /* Expression evaluator for the C language family. Most operations
577 are delegated to evaluate_subexp_standard; see that function for a
578 description of the arguments. */
579
580 struct value *
581 evaluate_subexp_c (struct type *expect_type, struct expression *exp,
582 int *pos, enum noside noside)
583 {
584 enum exp_opcode op = exp->elts[*pos].opcode;
585
586 switch (op)
587 {
588 case OP_STRING:
589 {
590 int oplen, limit;
591 struct type *type;
592 struct value *result;
593 c_string_type dest_type;
594 const char *dest_charset;
595 int satisfy_expected = 0;
596
597 auto_obstack output;
598
599 ++*pos;
600 oplen = longest_to_int (exp->elts[*pos].longconst);
601
602 ++*pos;
603 limit = *pos + BYTES_TO_EXP_ELEM (oplen + 1);
604 dest_type = ((enum c_string_type_values)
605 longest_to_int (exp->elts[*pos].longconst));
606 switch (dest_type & ~C_CHAR)
607 {
608 case C_STRING:
609 type = language_string_char_type (exp->language_defn,
610 exp->gdbarch);
611 break;
612 case C_WIDE_STRING:
613 type = lookup_typename (exp->language_defn, exp->gdbarch,
614 "wchar_t", NULL, 0);
615 break;
616 case C_STRING_16:
617 type = lookup_typename (exp->language_defn, exp->gdbarch,
618 "char16_t", NULL, 0);
619 break;
620 case C_STRING_32:
621 type = lookup_typename (exp->language_defn, exp->gdbarch,
622 "char32_t", NULL, 0);
623 break;
624 default:
625 internal_error (__FILE__, __LINE__, _("unhandled c_string_type"));
626 }
627
628 /* Ensure TYPE_LENGTH is valid for TYPE. */
629 check_typedef (type);
630
631 /* If the caller expects an array of some integral type,
632 satisfy them. If something odder is expected, rely on the
633 caller to cast. */
634 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_ARRAY)
635 {
636 struct type *element_type
637 = check_typedef (TYPE_TARGET_TYPE (expect_type));
638
639 if (TYPE_CODE (element_type) == TYPE_CODE_INT
640 || TYPE_CODE (element_type) == TYPE_CODE_CHAR)
641 {
642 type = element_type;
643 satisfy_expected = 1;
644 }
645 }
646
647 dest_charset = charset_for_string_type (dest_type, exp->gdbarch);
648
649 ++*pos;
650 while (*pos < limit)
651 {
652 int len;
653
654 len = longest_to_int (exp->elts[*pos].longconst);
655
656 ++*pos;
657 if (noside != EVAL_SKIP)
658 parse_one_string (&output, &exp->elts[*pos].string, len,
659 dest_charset, type);
660 *pos += BYTES_TO_EXP_ELEM (len);
661 }
662
663 /* Skip the trailing length and opcode. */
664 *pos += 2;
665
666 if (noside == EVAL_SKIP)
667 {
668 /* Return a dummy value of the appropriate type. */
669 if (expect_type != NULL)
670 result = allocate_value (expect_type);
671 else if ((dest_type & C_CHAR) != 0)
672 result = allocate_value (type);
673 else
674 result = value_cstring ("", 0, type);
675 return result;
676 }
677
678 if ((dest_type & C_CHAR) != 0)
679 {
680 LONGEST value;
681
682 if (obstack_object_size (&output) != TYPE_LENGTH (type))
683 error (_("Could not convert character "
684 "constant to target character set"));
685 value = unpack_long (type, (gdb_byte *) obstack_base (&output));
686 result = value_from_longest (type, value);
687 }
688 else
689 {
690 int i;
691
692 /* Write the terminating character. */
693 for (i = 0; i < TYPE_LENGTH (type); ++i)
694 obstack_1grow (&output, 0);
695
696 if (satisfy_expected)
697 {
698 LONGEST low_bound, high_bound;
699 int element_size = TYPE_LENGTH (type);
700
701 if (get_discrete_bounds (TYPE_INDEX_TYPE (expect_type),
702 &low_bound, &high_bound) < 0)
703 {
704 low_bound = 0;
705 high_bound = (TYPE_LENGTH (expect_type) / element_size) - 1;
706 }
707 if (obstack_object_size (&output) / element_size
708 > (high_bound - low_bound + 1))
709 error (_("Too many array elements"));
710
711 result = allocate_value (expect_type);
712 memcpy (value_contents_raw (result), obstack_base (&output),
713 obstack_object_size (&output));
714 }
715 else
716 result = value_cstring ((const char *) obstack_base (&output),
717 obstack_object_size (&output),
718 type);
719 }
720 return result;
721 }
722 break;
723
724 default:
725 break;
726 }
727 return evaluate_subexp_standard (expect_type, exp, pos, noside);
728 }
729 \f
730 /* la_watch_location_expression for C. */
731
732 gdb::unique_xmalloc_ptr<char>
733 c_watch_location_expression (struct type *type, CORE_ADDR addr)
734 {
735 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
736 std::string name = type_to_string (type);
737 return gdb::unique_xmalloc_ptr<char>
738 (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr)));
739 }
740
741 /* See c-lang.h. */
742
743 bool
744 c_is_string_type_p (struct type *type)
745 {
746 type = check_typedef (type);
747 while (TYPE_CODE (type) == TYPE_CODE_REF)
748 {
749 type = TYPE_TARGET_TYPE (type);
750 type = check_typedef (type);
751 }
752
753 switch (TYPE_CODE (type))
754 {
755 case TYPE_CODE_ARRAY:
756 {
757 /* See if target type looks like a string. */
758 struct type *array_target_type = TYPE_TARGET_TYPE (type);
759 return (TYPE_LENGTH (type) > 0
760 && TYPE_LENGTH (array_target_type) > 0
761 && c_textual_element_type (array_target_type, 0));
762 }
763 case TYPE_CODE_STRING:
764 return true;
765 case TYPE_CODE_PTR:
766 {
767 struct type *element_type = TYPE_TARGET_TYPE (type);
768 return c_textual_element_type (element_type, 0);
769 }
770 default:
771 break;
772 }
773
774 return false;
775 }
776
777 \f
778 /* Table mapping opcodes into strings for printing operators
779 and precedences of the operators. */
780
781 const struct op_print c_op_print_tab[] =
782 {
783 {",", BINOP_COMMA, PREC_COMMA, 0},
784 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
785 {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
786 {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
787 {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
788 {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
789 {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
790 {"==", BINOP_EQUAL, PREC_EQUAL, 0},
791 {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
792 {"<=", BINOP_LEQ, PREC_ORDER, 0},
793 {">=", BINOP_GEQ, PREC_ORDER, 0},
794 {">", BINOP_GTR, PREC_ORDER, 0},
795 {"<", BINOP_LESS, PREC_ORDER, 0},
796 {">>", BINOP_RSH, PREC_SHIFT, 0},
797 {"<<", BINOP_LSH, PREC_SHIFT, 0},
798 {"+", BINOP_ADD, PREC_ADD, 0},
799 {"-", BINOP_SUB, PREC_ADD, 0},
800 {"*", BINOP_MUL, PREC_MUL, 0},
801 {"/", BINOP_DIV, PREC_MUL, 0},
802 {"%", BINOP_REM, PREC_MUL, 0},
803 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
804 {"+", UNOP_PLUS, PREC_PREFIX, 0},
805 {"-", UNOP_NEG, PREC_PREFIX, 0},
806 {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
807 {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
808 {"*", UNOP_IND, PREC_PREFIX, 0},
809 {"&", UNOP_ADDR, PREC_PREFIX, 0},
810 {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
811 {"alignof ", UNOP_ALIGNOF, PREC_PREFIX, 0},
812 {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
813 {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
814 {NULL, OP_NULL, PREC_PREFIX, 0}
815 };
816 \f
817 enum c_primitive_types {
818 c_primitive_type_int,
819 c_primitive_type_long,
820 c_primitive_type_short,
821 c_primitive_type_char,
822 c_primitive_type_float,
823 c_primitive_type_double,
824 c_primitive_type_void,
825 c_primitive_type_long_long,
826 c_primitive_type_signed_char,
827 c_primitive_type_unsigned_char,
828 c_primitive_type_unsigned_short,
829 c_primitive_type_unsigned_int,
830 c_primitive_type_unsigned_long,
831 c_primitive_type_unsigned_long_long,
832 c_primitive_type_long_double,
833 c_primitive_type_complex,
834 c_primitive_type_double_complex,
835 c_primitive_type_decfloat,
836 c_primitive_type_decdouble,
837 c_primitive_type_declong,
838 nr_c_primitive_types
839 };
840
841 void
842 c_language_arch_info (struct gdbarch *gdbarch,
843 struct language_arch_info *lai)
844 {
845 const struct builtin_type *builtin = builtin_type (gdbarch);
846
847 lai->string_char_type = builtin->builtin_char;
848 lai->primitive_type_vector
849 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_c_primitive_types + 1,
850 struct type *);
851 lai->primitive_type_vector [c_primitive_type_int] = builtin->builtin_int;
852 lai->primitive_type_vector [c_primitive_type_long] = builtin->builtin_long;
853 lai->primitive_type_vector [c_primitive_type_short] = builtin->builtin_short;
854 lai->primitive_type_vector [c_primitive_type_char] = builtin->builtin_char;
855 lai->primitive_type_vector [c_primitive_type_float] = builtin->builtin_float;
856 lai->primitive_type_vector [c_primitive_type_double] = builtin->builtin_double;
857 lai->primitive_type_vector [c_primitive_type_void] = builtin->builtin_void;
858 lai->primitive_type_vector [c_primitive_type_long_long] = builtin->builtin_long_long;
859 lai->primitive_type_vector [c_primitive_type_signed_char] = builtin->builtin_signed_char;
860 lai->primitive_type_vector [c_primitive_type_unsigned_char] = builtin->builtin_unsigned_char;
861 lai->primitive_type_vector [c_primitive_type_unsigned_short] = builtin->builtin_unsigned_short;
862 lai->primitive_type_vector [c_primitive_type_unsigned_int] = builtin->builtin_unsigned_int;
863 lai->primitive_type_vector [c_primitive_type_unsigned_long] = builtin->builtin_unsigned_long;
864 lai->primitive_type_vector [c_primitive_type_unsigned_long_long] = builtin->builtin_unsigned_long_long;
865 lai->primitive_type_vector [c_primitive_type_long_double] = builtin->builtin_long_double;
866 lai->primitive_type_vector [c_primitive_type_complex] = builtin->builtin_complex;
867 lai->primitive_type_vector [c_primitive_type_double_complex] = builtin->builtin_double_complex;
868 lai->primitive_type_vector [c_primitive_type_decfloat] = builtin->builtin_decfloat;
869 lai->primitive_type_vector [c_primitive_type_decdouble] = builtin->builtin_decdouble;
870 lai->primitive_type_vector [c_primitive_type_declong] = builtin->builtin_declong;
871
872 lai->bool_type_default = builtin->builtin_int;
873 }
874
875 const struct exp_descriptor exp_descriptor_c =
876 {
877 print_subexp_standard,
878 operator_length_standard,
879 operator_check_standard,
880 op_name_standard,
881 dump_subexp_body_standard,
882 evaluate_subexp_c
883 };
884
885 static const char *c_extensions[] =
886 {
887 ".c", NULL
888 };
889
890 extern const struct language_defn c_language_defn =
891 {
892 "c", /* Language name */
893 "C",
894 language_c,
895 range_check_off,
896 case_sensitive_on,
897 array_row_major,
898 macro_expansion_c,
899 c_extensions,
900 &exp_descriptor_c,
901 c_parse,
902 null_post_parser,
903 c_printchar, /* Print a character constant */
904 c_printstr, /* Function to print string constant */
905 c_emit_char, /* Print a single char */
906 c_print_type, /* Print a type using appropriate syntax */
907 c_print_typedef, /* Print a typedef using appropriate syntax */
908 c_val_print, /* Print a value using appropriate syntax */
909 c_value_print, /* Print a top-level value */
910 default_read_var_value, /* la_read_var_value */
911 NULL, /* Language specific skip_trampoline */
912 NULL, /* name_of_this */
913 true, /* la_store_sym_names_in_linkage_form_p */
914 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
915 basic_lookup_transparent_type,/* lookup_transparent_type */
916 NULL, /* Language specific symbol demangler */
917 NULL,
918 NULL, /* Language specific
919 class_name_from_physname */
920 c_op_print_tab, /* expression operators for printing */
921 1, /* c-style arrays */
922 0, /* String lower bound */
923 default_word_break_characters,
924 default_collect_symbol_completion_matches,
925 c_language_arch_info,
926 default_print_array_index,
927 default_pass_by_reference,
928 c_get_string,
929 c_watch_location_expression,
930 NULL, /* la_get_symbol_name_matcher */
931 iterate_over_symbols,
932 default_search_name_hash,
933 &c_varobj_ops,
934 c_get_compile_context,
935 c_compute_program,
936 c_is_string_type_p,
937 "{...}" /* la_struct_too_deep_ellipsis */
938 };
939
940 enum cplus_primitive_types {
941 cplus_primitive_type_int,
942 cplus_primitive_type_long,
943 cplus_primitive_type_short,
944 cplus_primitive_type_char,
945 cplus_primitive_type_float,
946 cplus_primitive_type_double,
947 cplus_primitive_type_void,
948 cplus_primitive_type_long_long,
949 cplus_primitive_type_signed_char,
950 cplus_primitive_type_unsigned_char,
951 cplus_primitive_type_unsigned_short,
952 cplus_primitive_type_unsigned_int,
953 cplus_primitive_type_unsigned_long,
954 cplus_primitive_type_unsigned_long_long,
955 cplus_primitive_type_long_double,
956 cplus_primitive_type_complex,
957 cplus_primitive_type_double_complex,
958 cplus_primitive_type_bool,
959 cplus_primitive_type_decfloat,
960 cplus_primitive_type_decdouble,
961 cplus_primitive_type_declong,
962 cplus_primitive_type_char16_t,
963 cplus_primitive_type_char32_t,
964 cplus_primitive_type_wchar_t,
965 nr_cplus_primitive_types
966 };
967
968 static void
969 cplus_language_arch_info (struct gdbarch *gdbarch,
970 struct language_arch_info *lai)
971 {
972 const struct builtin_type *builtin = builtin_type (gdbarch);
973
974 lai->string_char_type = builtin->builtin_char;
975 lai->primitive_type_vector
976 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_cplus_primitive_types + 1,
977 struct type *);
978 lai->primitive_type_vector [cplus_primitive_type_int]
979 = builtin->builtin_int;
980 lai->primitive_type_vector [cplus_primitive_type_long]
981 = builtin->builtin_long;
982 lai->primitive_type_vector [cplus_primitive_type_short]
983 = builtin->builtin_short;
984 lai->primitive_type_vector [cplus_primitive_type_char]
985 = builtin->builtin_char;
986 lai->primitive_type_vector [cplus_primitive_type_float]
987 = builtin->builtin_float;
988 lai->primitive_type_vector [cplus_primitive_type_double]
989 = builtin->builtin_double;
990 lai->primitive_type_vector [cplus_primitive_type_void]
991 = builtin->builtin_void;
992 lai->primitive_type_vector [cplus_primitive_type_long_long]
993 = builtin->builtin_long_long;
994 lai->primitive_type_vector [cplus_primitive_type_signed_char]
995 = builtin->builtin_signed_char;
996 lai->primitive_type_vector [cplus_primitive_type_unsigned_char]
997 = builtin->builtin_unsigned_char;
998 lai->primitive_type_vector [cplus_primitive_type_unsigned_short]
999 = builtin->builtin_unsigned_short;
1000 lai->primitive_type_vector [cplus_primitive_type_unsigned_int]
1001 = builtin->builtin_unsigned_int;
1002 lai->primitive_type_vector [cplus_primitive_type_unsigned_long]
1003 = builtin->builtin_unsigned_long;
1004 lai->primitive_type_vector [cplus_primitive_type_unsigned_long_long]
1005 = builtin->builtin_unsigned_long_long;
1006 lai->primitive_type_vector [cplus_primitive_type_long_double]
1007 = builtin->builtin_long_double;
1008 lai->primitive_type_vector [cplus_primitive_type_complex]
1009 = builtin->builtin_complex;
1010 lai->primitive_type_vector [cplus_primitive_type_double_complex]
1011 = builtin->builtin_double_complex;
1012 lai->primitive_type_vector [cplus_primitive_type_bool]
1013 = builtin->builtin_bool;
1014 lai->primitive_type_vector [cplus_primitive_type_decfloat]
1015 = builtin->builtin_decfloat;
1016 lai->primitive_type_vector [cplus_primitive_type_decdouble]
1017 = builtin->builtin_decdouble;
1018 lai->primitive_type_vector [cplus_primitive_type_declong]
1019 = builtin->builtin_declong;
1020 lai->primitive_type_vector [cplus_primitive_type_char16_t]
1021 = builtin->builtin_char16;
1022 lai->primitive_type_vector [cplus_primitive_type_char32_t]
1023 = builtin->builtin_char32;
1024 lai->primitive_type_vector [cplus_primitive_type_wchar_t]
1025 = builtin->builtin_wchar;
1026
1027 lai->bool_type_symbol = "bool";
1028 lai->bool_type_default = builtin->builtin_bool;
1029 }
1030
1031 static const char *cplus_extensions[] =
1032 {
1033 ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++", NULL
1034 };
1035
1036 extern const struct language_defn cplus_language_defn =
1037 {
1038 "c++", /* Language name */
1039 "C++",
1040 language_cplus,
1041 range_check_off,
1042 case_sensitive_on,
1043 array_row_major,
1044 macro_expansion_c,
1045 cplus_extensions,
1046 &exp_descriptor_c,
1047 c_parse,
1048 null_post_parser,
1049 c_printchar, /* Print a character constant */
1050 c_printstr, /* Function to print string constant */
1051 c_emit_char, /* Print a single char */
1052 c_print_type, /* Print a type using appropriate syntax */
1053 c_print_typedef, /* Print a typedef using appropriate syntax */
1054 c_val_print, /* Print a value using appropriate syntax */
1055 c_value_print, /* Print a top-level value */
1056 default_read_var_value, /* la_read_var_value */
1057 cplus_skip_trampoline, /* Language specific skip_trampoline */
1058 "this", /* name_of_this */
1059 false, /* la_store_sym_names_in_linkage_form_p */
1060 cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
1061 cp_lookup_transparent_type, /* lookup_transparent_type */
1062 gdb_demangle, /* Language specific symbol demangler */
1063 gdb_sniff_from_mangled_name,
1064 cp_class_name_from_physname, /* Language specific
1065 class_name_from_physname */
1066 c_op_print_tab, /* expression operators for printing */
1067 1, /* c-style arrays */
1068 0, /* String lower bound */
1069 default_word_break_characters,
1070 default_collect_symbol_completion_matches,
1071 cplus_language_arch_info,
1072 default_print_array_index,
1073 cp_pass_by_reference,
1074 c_get_string,
1075 c_watch_location_expression,
1076 cp_get_symbol_name_matcher,
1077 iterate_over_symbols,
1078 cp_search_name_hash,
1079 &cplus_varobj_ops,
1080 cplus_get_compile_context,
1081 cplus_compute_program,
1082 c_is_string_type_p,
1083 "{...}" /* la_struct_too_deep_ellipsis */
1084 };
1085
1086 static const char *asm_extensions[] =
1087 {
1088 ".s", ".sx", ".S", NULL
1089 };
1090
1091 extern const struct language_defn asm_language_defn =
1092 {
1093 "asm", /* Language name */
1094 "assembly",
1095 language_asm,
1096 range_check_off,
1097 case_sensitive_on,
1098 array_row_major,
1099 macro_expansion_c,
1100 asm_extensions,
1101 &exp_descriptor_c,
1102 c_parse,
1103 null_post_parser,
1104 c_printchar, /* Print a character constant */
1105 c_printstr, /* Function to print string constant */
1106 c_emit_char, /* Print a single char */
1107 c_print_type, /* Print a type using appropriate syntax */
1108 c_print_typedef, /* Print a typedef using appropriate syntax */
1109 c_val_print, /* Print a value using appropriate syntax */
1110 c_value_print, /* Print a top-level value */
1111 default_read_var_value, /* la_read_var_value */
1112 NULL, /* Language specific skip_trampoline */
1113 NULL, /* name_of_this */
1114 true, /* la_store_sym_names_in_linkage_form_p */
1115 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
1116 basic_lookup_transparent_type,/* lookup_transparent_type */
1117 NULL, /* Language specific symbol demangler */
1118 NULL,
1119 NULL, /* Language specific
1120 class_name_from_physname */
1121 c_op_print_tab, /* expression operators for printing */
1122 1, /* c-style arrays */
1123 0, /* String lower bound */
1124 default_word_break_characters,
1125 default_collect_symbol_completion_matches,
1126 c_language_arch_info, /* FIXME: la_language_arch_info. */
1127 default_print_array_index,
1128 default_pass_by_reference,
1129 c_get_string,
1130 c_watch_location_expression,
1131 NULL, /* la_get_symbol_name_matcher */
1132 iterate_over_symbols,
1133 default_search_name_hash,
1134 &default_varobj_ops,
1135 NULL,
1136 NULL,
1137 c_is_string_type_p,
1138 "{...}" /* la_struct_too_deep_ellipsis */
1139 };
1140
1141 /* The following language_defn does not represent a real language.
1142 It just provides a minimal support a-la-C that should allow users
1143 to do some simple operations when debugging applications that use
1144 a language currently not supported by GDB. */
1145
1146 extern const struct language_defn minimal_language_defn =
1147 {
1148 "minimal", /* Language name */
1149 "Minimal",
1150 language_minimal,
1151 range_check_off,
1152 case_sensitive_on,
1153 array_row_major,
1154 macro_expansion_c,
1155 NULL,
1156 &exp_descriptor_c,
1157 c_parse,
1158 null_post_parser,
1159 c_printchar, /* Print a character constant */
1160 c_printstr, /* Function to print string constant */
1161 c_emit_char, /* Print a single char */
1162 c_print_type, /* Print a type using appropriate syntax */
1163 c_print_typedef, /* Print a typedef using appropriate syntax */
1164 c_val_print, /* Print a value using appropriate syntax */
1165 c_value_print, /* Print a top-level value */
1166 default_read_var_value, /* la_read_var_value */
1167 NULL, /* Language specific skip_trampoline */
1168 NULL, /* name_of_this */
1169 true, /* la_store_sym_names_in_linkage_form_p */
1170 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
1171 basic_lookup_transparent_type,/* lookup_transparent_type */
1172 NULL, /* Language specific symbol demangler */
1173 NULL,
1174 NULL, /* Language specific
1175 class_name_from_physname */
1176 c_op_print_tab, /* expression operators for printing */
1177 1, /* c-style arrays */
1178 0, /* String lower bound */
1179 default_word_break_characters,
1180 default_collect_symbol_completion_matches,
1181 c_language_arch_info,
1182 default_print_array_index,
1183 default_pass_by_reference,
1184 c_get_string,
1185 c_watch_location_expression,
1186 NULL, /* la_get_symbol_name_matcher */
1187 iterate_over_symbols,
1188 default_search_name_hash,
1189 &default_varobj_ops,
1190 NULL,
1191 NULL,
1192 c_is_string_type_p,
1193 "{...}" /* la_struct_too_deep_ellipsis */
1194 };
This page took 0.052323 seconds and 5 git commands to generate.