gdb: Convert language_data::la_macro_expansion to a method
[deliverable/binutils-gdb.git] / gdb / f-lang.c
1 /* Fortran language support routines for GDB, the GNU debugger.
2
3 Copyright (C) 1993-2020 Free Software Foundation, Inc.
4
5 Contributed by Motorola. Adapted from the C parser by Farooq Butt
6 (fmbutt@engage.sps.mot.com).
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22
23 #include "defs.h"
24 #include "symtab.h"
25 #include "gdbtypes.h"
26 #include "expression.h"
27 #include "parser-defs.h"
28 #include "language.h"
29 #include "varobj.h"
30 #include "gdbcore.h"
31 #include "f-lang.h"
32 #include "valprint.h"
33 #include "value.h"
34 #include "cp-support.h"
35 #include "charset.h"
36 #include "c-lang.h"
37 #include "target-float.h"
38 #include "gdbarch.h"
39
40 #include <math.h>
41
42 /* Local functions */
43
44 /* Return the encoding that should be used for the character type
45 TYPE. */
46
47 static const char *
48 f_get_encoding (struct type *type)
49 {
50 const char *encoding;
51
52 switch (TYPE_LENGTH (type))
53 {
54 case 1:
55 encoding = target_charset (get_type_arch (type));
56 break;
57 case 4:
58 if (type_byte_order (type) == BFD_ENDIAN_BIG)
59 encoding = "UTF-32BE";
60 else
61 encoding = "UTF-32LE";
62 break;
63
64 default:
65 error (_("unrecognized character type"));
66 }
67
68 return encoding;
69 }
70
71 \f
72
73 /* Table of operators and their precedences for printing expressions. */
74
75 static const struct op_print f_op_print_tab[] =
76 {
77 {"+", BINOP_ADD, PREC_ADD, 0},
78 {"+", UNOP_PLUS, PREC_PREFIX, 0},
79 {"-", BINOP_SUB, PREC_ADD, 0},
80 {"-", UNOP_NEG, PREC_PREFIX, 0},
81 {"*", BINOP_MUL, PREC_MUL, 0},
82 {"/", BINOP_DIV, PREC_MUL, 0},
83 {"DIV", BINOP_INTDIV, PREC_MUL, 0},
84 {"MOD", BINOP_REM, PREC_MUL, 0},
85 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
86 {".OR.", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
87 {".AND.", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
88 {".NOT.", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
89 {".EQ.", BINOP_EQUAL, PREC_EQUAL, 0},
90 {".NE.", BINOP_NOTEQUAL, PREC_EQUAL, 0},
91 {".LE.", BINOP_LEQ, PREC_ORDER, 0},
92 {".GE.", BINOP_GEQ, PREC_ORDER, 0},
93 {".GT.", BINOP_GTR, PREC_ORDER, 0},
94 {".LT.", BINOP_LESS, PREC_ORDER, 0},
95 {"**", UNOP_IND, PREC_PREFIX, 0},
96 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
97 {NULL, OP_NULL, PREC_REPEAT, 0}
98 };
99 \f
100 enum f_primitive_types {
101 f_primitive_type_character,
102 f_primitive_type_logical,
103 f_primitive_type_logical_s1,
104 f_primitive_type_logical_s2,
105 f_primitive_type_logical_s8,
106 f_primitive_type_integer,
107 f_primitive_type_integer_s2,
108 f_primitive_type_real,
109 f_primitive_type_real_s8,
110 f_primitive_type_real_s16,
111 f_primitive_type_complex_s8,
112 f_primitive_type_complex_s16,
113 f_primitive_type_void,
114 nr_f_primitive_types
115 };
116
117 /* Special expression evaluation cases for Fortran. */
118
119 static struct value *
120 evaluate_subexp_f (struct type *expect_type, struct expression *exp,
121 int *pos, enum noside noside)
122 {
123 struct value *arg1 = NULL, *arg2 = NULL;
124 enum exp_opcode op;
125 int pc;
126 struct type *type;
127
128 pc = *pos;
129 *pos += 1;
130 op = exp->elts[pc].opcode;
131
132 switch (op)
133 {
134 default:
135 *pos -= 1;
136 return evaluate_subexp_standard (expect_type, exp, pos, noside);
137
138 case UNOP_ABS:
139 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
140 if (noside == EVAL_SKIP)
141 return eval_skip_value (exp);
142 type = value_type (arg1);
143 switch (type->code ())
144 {
145 case TYPE_CODE_FLT:
146 {
147 double d
148 = fabs (target_float_to_host_double (value_contents (arg1),
149 value_type (arg1)));
150 return value_from_host_double (type, d);
151 }
152 case TYPE_CODE_INT:
153 {
154 LONGEST l = value_as_long (arg1);
155 l = llabs (l);
156 return value_from_longest (type, l);
157 }
158 }
159 error (_("ABS of type %s not supported"), TYPE_SAFE_NAME (type));
160
161 case BINOP_MOD:
162 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
163 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
164 if (noside == EVAL_SKIP)
165 return eval_skip_value (exp);
166 type = value_type (arg1);
167 if (type->code () != value_type (arg2)->code ())
168 error (_("non-matching types for parameters to MOD ()"));
169 switch (type->code ())
170 {
171 case TYPE_CODE_FLT:
172 {
173 double d1
174 = target_float_to_host_double (value_contents (arg1),
175 value_type (arg1));
176 double d2
177 = target_float_to_host_double (value_contents (arg2),
178 value_type (arg2));
179 double d3 = fmod (d1, d2);
180 return value_from_host_double (type, d3);
181 }
182 case TYPE_CODE_INT:
183 {
184 LONGEST v1 = value_as_long (arg1);
185 LONGEST v2 = value_as_long (arg2);
186 if (v2 == 0)
187 error (_("calling MOD (N, 0) is undefined"));
188 LONGEST v3 = v1 - (v1 / v2) * v2;
189 return value_from_longest (value_type (arg1), v3);
190 }
191 }
192 error (_("MOD of type %s not supported"), TYPE_SAFE_NAME (type));
193
194 case UNOP_FORTRAN_CEILING:
195 {
196 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
197 if (noside == EVAL_SKIP)
198 return eval_skip_value (exp);
199 type = value_type (arg1);
200 if (type->code () != TYPE_CODE_FLT)
201 error (_("argument to CEILING must be of type float"));
202 double val
203 = target_float_to_host_double (value_contents (arg1),
204 value_type (arg1));
205 val = ceil (val);
206 return value_from_host_double (type, val);
207 }
208
209 case UNOP_FORTRAN_FLOOR:
210 {
211 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
212 if (noside == EVAL_SKIP)
213 return eval_skip_value (exp);
214 type = value_type (arg1);
215 if (type->code () != TYPE_CODE_FLT)
216 error (_("argument to FLOOR must be of type float"));
217 double val
218 = target_float_to_host_double (value_contents (arg1),
219 value_type (arg1));
220 val = floor (val);
221 return value_from_host_double (type, val);
222 }
223
224 case BINOP_FORTRAN_MODULO:
225 {
226 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
227 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
228 if (noside == EVAL_SKIP)
229 return eval_skip_value (exp);
230 type = value_type (arg1);
231 if (type->code () != value_type (arg2)->code ())
232 error (_("non-matching types for parameters to MODULO ()"));
233 /* MODULO(A, P) = A - FLOOR (A / P) * P */
234 switch (type->code ())
235 {
236 case TYPE_CODE_INT:
237 {
238 LONGEST a = value_as_long (arg1);
239 LONGEST p = value_as_long (arg2);
240 LONGEST result = a - (a / p) * p;
241 if (result != 0 && (a < 0) != (p < 0))
242 result += p;
243 return value_from_longest (value_type (arg1), result);
244 }
245 case TYPE_CODE_FLT:
246 {
247 double a
248 = target_float_to_host_double (value_contents (arg1),
249 value_type (arg1));
250 double p
251 = target_float_to_host_double (value_contents (arg2),
252 value_type (arg2));
253 double result = fmod (a, p);
254 if (result != 0 && (a < 0.0) != (p < 0.0))
255 result += p;
256 return value_from_host_double (type, result);
257 }
258 }
259 error (_("MODULO of type %s not supported"), TYPE_SAFE_NAME (type));
260 }
261
262 case BINOP_FORTRAN_CMPLX:
263 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
264 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
265 if (noside == EVAL_SKIP)
266 return eval_skip_value (exp);
267 type = builtin_f_type(exp->gdbarch)->builtin_complex_s16;
268 return value_literal_complex (arg1, arg2, type);
269
270 case UNOP_FORTRAN_KIND:
271 arg1 = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
272 type = value_type (arg1);
273
274 switch (type->code ())
275 {
276 case TYPE_CODE_STRUCT:
277 case TYPE_CODE_UNION:
278 case TYPE_CODE_MODULE:
279 case TYPE_CODE_FUNC:
280 error (_("argument to kind must be an intrinsic type"));
281 }
282
283 if (!TYPE_TARGET_TYPE (type))
284 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
285 TYPE_LENGTH (type));
286 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
287 TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
288 }
289
290 /* Should be unreachable. */
291 return nullptr;
292 }
293
294 /* Special expression lengths for Fortran. */
295
296 static void
297 operator_length_f (const struct expression *exp, int pc, int *oplenp,
298 int *argsp)
299 {
300 int oplen = 1;
301 int args = 0;
302
303 switch (exp->elts[pc - 1].opcode)
304 {
305 default:
306 operator_length_standard (exp, pc, oplenp, argsp);
307 return;
308
309 case UNOP_FORTRAN_KIND:
310 case UNOP_FORTRAN_FLOOR:
311 case UNOP_FORTRAN_CEILING:
312 oplen = 1;
313 args = 1;
314 break;
315
316 case BINOP_FORTRAN_CMPLX:
317 case BINOP_FORTRAN_MODULO:
318 oplen = 1;
319 args = 2;
320 break;
321 }
322
323 *oplenp = oplen;
324 *argsp = args;
325 }
326
327 /* Helper for PRINT_SUBEXP_F. Arguments are as for PRINT_SUBEXP_F, except
328 the extra argument NAME which is the text that should be printed as the
329 name of this operation. */
330
331 static void
332 print_unop_subexp_f (struct expression *exp, int *pos,
333 struct ui_file *stream, enum precedence prec,
334 const char *name)
335 {
336 (*pos)++;
337 fprintf_filtered (stream, "%s(", name);
338 print_subexp (exp, pos, stream, PREC_SUFFIX);
339 fputs_filtered (")", stream);
340 }
341
342 /* Helper for PRINT_SUBEXP_F. Arguments are as for PRINT_SUBEXP_F, except
343 the extra argument NAME which is the text that should be printed as the
344 name of this operation. */
345
346 static void
347 print_binop_subexp_f (struct expression *exp, int *pos,
348 struct ui_file *stream, enum precedence prec,
349 const char *name)
350 {
351 (*pos)++;
352 fprintf_filtered (stream, "%s(", name);
353 print_subexp (exp, pos, stream, PREC_SUFFIX);
354 fputs_filtered (",", stream);
355 print_subexp (exp, pos, stream, PREC_SUFFIX);
356 fputs_filtered (")", stream);
357 }
358
359 /* Special expression printing for Fortran. */
360
361 static void
362 print_subexp_f (struct expression *exp, int *pos,
363 struct ui_file *stream, enum precedence prec)
364 {
365 int pc = *pos;
366 enum exp_opcode op = exp->elts[pc].opcode;
367
368 switch (op)
369 {
370 default:
371 print_subexp_standard (exp, pos, stream, prec);
372 return;
373
374 case UNOP_FORTRAN_KIND:
375 print_unop_subexp_f (exp, pos, stream, prec, "KIND");
376 return;
377
378 case UNOP_FORTRAN_FLOOR:
379 print_unop_subexp_f (exp, pos, stream, prec, "FLOOR");
380 return;
381
382 case UNOP_FORTRAN_CEILING:
383 print_unop_subexp_f (exp, pos, stream, prec, "CEILING");
384 return;
385
386 case BINOP_FORTRAN_CMPLX:
387 print_binop_subexp_f (exp, pos, stream, prec, "CMPLX");
388 return;
389
390 case BINOP_FORTRAN_MODULO:
391 print_binop_subexp_f (exp, pos, stream, prec, "MODULO");
392 return;
393 }
394 }
395
396 /* Special expression names for Fortran. */
397
398 static const char *
399 op_name_f (enum exp_opcode opcode)
400 {
401 switch (opcode)
402 {
403 default:
404 return op_name_standard (opcode);
405
406 #define OP(name) \
407 case name: \
408 return #name ;
409 #include "fortran-operator.def"
410 #undef OP
411 }
412 }
413
414 /* Special expression dumping for Fortran. */
415
416 static int
417 dump_subexp_body_f (struct expression *exp,
418 struct ui_file *stream, int elt)
419 {
420 int opcode = exp->elts[elt].opcode;
421 int oplen, nargs, i;
422
423 switch (opcode)
424 {
425 default:
426 return dump_subexp_body_standard (exp, stream, elt);
427
428 case UNOP_FORTRAN_KIND:
429 case UNOP_FORTRAN_FLOOR:
430 case UNOP_FORTRAN_CEILING:
431 case BINOP_FORTRAN_CMPLX:
432 case BINOP_FORTRAN_MODULO:
433 operator_length_f (exp, (elt + 1), &oplen, &nargs);
434 break;
435 }
436
437 elt += oplen;
438 for (i = 0; i < nargs; i += 1)
439 elt = dump_subexp (exp, stream, elt);
440
441 return elt;
442 }
443
444 /* Special expression checking for Fortran. */
445
446 static int
447 operator_check_f (struct expression *exp, int pos,
448 int (*objfile_func) (struct objfile *objfile,
449 void *data),
450 void *data)
451 {
452 const union exp_element *const elts = exp->elts;
453
454 switch (elts[pos].opcode)
455 {
456 case UNOP_FORTRAN_KIND:
457 case UNOP_FORTRAN_FLOOR:
458 case UNOP_FORTRAN_CEILING:
459 case BINOP_FORTRAN_CMPLX:
460 case BINOP_FORTRAN_MODULO:
461 /* Any references to objfiles are held in the arguments to this
462 expression, not within the expression itself, so no additional
463 checking is required here, the outer expression iteration code
464 will take care of checking each argument. */
465 break;
466
467 default:
468 return operator_check_standard (exp, pos, objfile_func, data);
469 }
470
471 return 0;
472 }
473
474 /* Expression processing for Fortran. */
475 static const struct exp_descriptor exp_descriptor_f =
476 {
477 print_subexp_f,
478 operator_length_f,
479 operator_check_f,
480 op_name_f,
481 dump_subexp_body_f,
482 evaluate_subexp_f
483 };
484
485 /* Constant data that describes the Fortran language. */
486
487 extern const struct language_data f_language_data =
488 {
489 &exp_descriptor_f,
490 f_op_print_tab, /* expression operators for printing */
491 &default_varobj_ops,
492 };
493
494 /* Class representing the Fortran language. */
495
496 class f_language : public language_defn
497 {
498 public:
499 f_language ()
500 : language_defn (language_fortran, f_language_data)
501 { /* Nothing. */ }
502
503 /* See language.h. */
504
505 const char *name () const override
506 { return "fortran"; }
507
508 /* See language.h. */
509
510 const char *natural_name () const override
511 { return "Fortran"; }
512
513 /* See language.h. */
514
515 const std::vector<const char *> &filename_extensions () const override
516 {
517 static const std::vector<const char *> extensions = {
518 ".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP",
519 ".f90", ".F90", ".f95", ".F95", ".f03", ".F03", ".f08", ".F08"
520 };
521 return extensions;
522 }
523
524 /* See language.h. */
525 void language_arch_info (struct gdbarch *gdbarch,
526 struct language_arch_info *lai) const override
527 {
528 const struct builtin_f_type *builtin = builtin_f_type (gdbarch);
529
530 lai->string_char_type = builtin->builtin_character;
531 lai->primitive_type_vector
532 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_f_primitive_types + 1,
533 struct type *);
534
535 lai->primitive_type_vector [f_primitive_type_character]
536 = builtin->builtin_character;
537 lai->primitive_type_vector [f_primitive_type_logical]
538 = builtin->builtin_logical;
539 lai->primitive_type_vector [f_primitive_type_logical_s1]
540 = builtin->builtin_logical_s1;
541 lai->primitive_type_vector [f_primitive_type_logical_s2]
542 = builtin->builtin_logical_s2;
543 lai->primitive_type_vector [f_primitive_type_logical_s8]
544 = builtin->builtin_logical_s8;
545 lai->primitive_type_vector [f_primitive_type_real]
546 = builtin->builtin_real;
547 lai->primitive_type_vector [f_primitive_type_real_s8]
548 = builtin->builtin_real_s8;
549 lai->primitive_type_vector [f_primitive_type_real_s16]
550 = builtin->builtin_real_s16;
551 lai->primitive_type_vector [f_primitive_type_complex_s8]
552 = builtin->builtin_complex_s8;
553 lai->primitive_type_vector [f_primitive_type_complex_s16]
554 = builtin->builtin_complex_s16;
555 lai->primitive_type_vector [f_primitive_type_void]
556 = builtin->builtin_void;
557
558 lai->bool_type_symbol = "logical";
559 lai->bool_type_default = builtin->builtin_logical_s2;
560 }
561
562 /* See language.h. */
563 unsigned int search_name_hash (const char *name) const override
564 {
565 return cp_search_name_hash (name);
566 }
567
568 /* See language.h. */
569
570 char *demangle (const char *mangled, int options) const override
571 {
572 /* We could support demangling here to provide module namespaces
573 also for inferiors with only minimal symbol table (ELF symbols).
574 Just the mangling standard is not standardized across compilers
575 and there is no DW_AT_producer available for inferiors with only
576 the ELF symbols to check the mangling kind. */
577 return nullptr;
578 }
579
580 /* See language.h. */
581
582 void print_type (struct type *type, const char *varstring,
583 struct ui_file *stream, int show, int level,
584 const struct type_print_options *flags) const override
585 {
586 f_print_type (type, varstring, stream, show, level, flags);
587 }
588
589 /* See language.h. This just returns default set of word break
590 characters but with the modules separator `::' removed. */
591
592 const char *word_break_characters (void) const override
593 {
594 static char *retval;
595
596 if (!retval)
597 {
598 char *s;
599
600 retval = xstrdup (language_defn::word_break_characters ());
601 s = strchr (retval, ':');
602 if (s)
603 {
604 char *last_char = &s[strlen (s) - 1];
605
606 *s = *last_char;
607 *last_char = 0;
608 }
609 }
610 return retval;
611 }
612
613
614 /* See language.h. */
615
616 void collect_symbol_completion_matches (completion_tracker &tracker,
617 complete_symbol_mode mode,
618 symbol_name_match_type name_match_type,
619 const char *text, const char *word,
620 enum type_code code) const override
621 {
622 /* Consider the modules separator :: as a valid symbol name character
623 class. */
624 default_collect_symbol_completion_matches_break_on (tracker, mode,
625 name_match_type,
626 text, word, ":",
627 code);
628 }
629
630 /* See language.h. */
631
632 void value_print_inner
633 (struct value *val, struct ui_file *stream, int recurse,
634 const struct value_print_options *options) const override
635 {
636 return f_value_print_inner (val, stream, recurse, options);
637 }
638
639 /* See language.h. */
640
641 struct block_symbol lookup_symbol_nonlocal
642 (const char *name, const struct block *block,
643 const domain_enum domain) const override
644 {
645 return cp_lookup_symbol_nonlocal (this, name, block, domain);
646 }
647
648 /* See language.h. */
649
650 int parser (struct parser_state *ps) const override
651 {
652 return f_parse (ps);
653 }
654
655 /* See language.h. */
656
657 void emitchar (int ch, struct type *chtype,
658 struct ui_file *stream, int quoter) const override
659 {
660 const char *encoding = f_get_encoding (chtype);
661 generic_emit_char (ch, chtype, stream, quoter, encoding);
662 }
663
664 /* See language.h. */
665
666 void printchar (int ch, struct type *chtype,
667 struct ui_file *stream) const override
668 {
669 fputs_filtered ("'", stream);
670 LA_EMIT_CHAR (ch, chtype, stream, '\'');
671 fputs_filtered ("'", stream);
672 }
673
674 /* See language.h. */
675
676 void printstr (struct ui_file *stream, struct type *elttype,
677 const gdb_byte *string, unsigned int length,
678 const char *encoding, int force_ellipses,
679 const struct value_print_options *options) const override
680 {
681 const char *type_encoding = f_get_encoding (elttype);
682
683 if (TYPE_LENGTH (elttype) == 4)
684 fputs_filtered ("4_", stream);
685
686 if (!encoding || !*encoding)
687 encoding = type_encoding;
688
689 generic_printstr (stream, elttype, string, length, encoding,
690 force_ellipses, '\'', 0, options);
691 }
692
693 /* See language.h. */
694
695 void print_typedef (struct type *type, struct symbol *new_symbol,
696 struct ui_file *stream) const override
697 {
698 f_print_typedef (type, new_symbol, stream);
699 }
700
701 /* See language.h. */
702
703 bool is_string_type_p (struct type *type) const override
704 {
705 type = check_typedef (type);
706 return (type->code () == TYPE_CODE_STRING
707 || (type->code () == TYPE_CODE_ARRAY
708 && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR));
709 }
710
711 /* See language.h. */
712
713 const char *struct_too_deep_ellipsis () const override
714 { return "(...)"; }
715
716 /* See language.h. */
717
718 bool c_style_arrays_p () const override
719 { return false; }
720
721 /* See language.h. */
722
723 bool range_checking_on_by_default () const override
724 { return true; }
725
726 /* See language.h. */
727
728 enum case_sensitivity case_sensitivity () const override
729 { return case_sensitive_off; }
730
731 /* See language.h. */
732
733 enum array_ordering array_ordering () const override
734 { return array_column_major; }
735
736 protected:
737
738 /* See language.h. */
739
740 symbol_name_matcher_ftype *get_symbol_name_matcher_inner
741 (const lookup_name_info &lookup_name) const override
742 {
743 return cp_get_symbol_name_matcher (lookup_name);
744 }
745 };
746
747 /* Single instance of the Fortran language class. */
748
749 static f_language f_language_defn;
750
751 static void *
752 build_fortran_types (struct gdbarch *gdbarch)
753 {
754 struct builtin_f_type *builtin_f_type
755 = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_f_type);
756
757 builtin_f_type->builtin_void
758 = arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, "void");
759
760 builtin_f_type->builtin_character
761 = arch_type (gdbarch, TYPE_CODE_CHAR, TARGET_CHAR_BIT, "character");
762
763 builtin_f_type->builtin_logical_s1
764 = arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "logical*1");
765
766 builtin_f_type->builtin_integer_s2
767 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch), 0,
768 "integer*2");
769
770 builtin_f_type->builtin_integer_s8
771 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch), 0,
772 "integer*8");
773
774 builtin_f_type->builtin_logical_s2
775 = arch_boolean_type (gdbarch, gdbarch_short_bit (gdbarch), 1,
776 "logical*2");
777
778 builtin_f_type->builtin_logical_s8
779 = arch_boolean_type (gdbarch, gdbarch_long_long_bit (gdbarch), 1,
780 "logical*8");
781
782 builtin_f_type->builtin_integer
783 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 0,
784 "integer");
785
786 builtin_f_type->builtin_logical
787 = arch_boolean_type (gdbarch, gdbarch_int_bit (gdbarch), 1,
788 "logical*4");
789
790 builtin_f_type->builtin_real
791 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
792 "real", gdbarch_float_format (gdbarch));
793 builtin_f_type->builtin_real_s8
794 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
795 "real*8", gdbarch_double_format (gdbarch));
796 auto fmt = gdbarch_floatformat_for_type (gdbarch, "real(kind=16)", 128);
797 if (fmt != nullptr)
798 builtin_f_type->builtin_real_s16
799 = arch_float_type (gdbarch, 128, "real*16", fmt);
800 else if (gdbarch_long_double_bit (gdbarch) == 128)
801 builtin_f_type->builtin_real_s16
802 = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
803 "real*16", gdbarch_long_double_format (gdbarch));
804 else
805 builtin_f_type->builtin_real_s16
806 = arch_type (gdbarch, TYPE_CODE_ERROR, 128, "real*16");
807
808 builtin_f_type->builtin_complex_s8
809 = init_complex_type ("complex*8", builtin_f_type->builtin_real);
810 builtin_f_type->builtin_complex_s16
811 = init_complex_type ("complex*16", builtin_f_type->builtin_real_s8);
812
813 if (builtin_f_type->builtin_real_s16->code () == TYPE_CODE_ERROR)
814 builtin_f_type->builtin_complex_s32
815 = arch_type (gdbarch, TYPE_CODE_ERROR, 256, "complex*32");
816 else
817 builtin_f_type->builtin_complex_s32
818 = init_complex_type ("complex*32", builtin_f_type->builtin_real_s16);
819
820 return builtin_f_type;
821 }
822
823 static struct gdbarch_data *f_type_data;
824
825 const struct builtin_f_type *
826 builtin_f_type (struct gdbarch *gdbarch)
827 {
828 return (const struct builtin_f_type *) gdbarch_data (gdbarch, f_type_data);
829 }
830
831 void _initialize_f_language ();
832 void
833 _initialize_f_language ()
834 {
835 f_type_data = gdbarch_data_register_post_init (build_fortran_types);
836 }
837
838 /* See f-lang.h. */
839
840 struct value *
841 fortran_argument_convert (struct value *value, bool is_artificial)
842 {
843 if (!is_artificial)
844 {
845 /* If the value is not in the inferior e.g. registers values,
846 convenience variables and user input. */
847 if (VALUE_LVAL (value) != lval_memory)
848 {
849 struct type *type = value_type (value);
850 const int length = TYPE_LENGTH (type);
851 const CORE_ADDR addr
852 = value_as_long (value_allocate_space_in_inferior (length));
853 write_memory (addr, value_contents (value), length);
854 struct value *val
855 = value_from_contents_and_address (type, value_contents (value),
856 addr);
857 return value_addr (val);
858 }
859 else
860 return value_addr (value); /* Program variables, e.g. arrays. */
861 }
862 return value;
863 }
864
865 /* See f-lang.h. */
866
867 struct type *
868 fortran_preserve_arg_pointer (struct value *arg, struct type *type)
869 {
870 if (value_type (arg)->code () == TYPE_CODE_PTR)
871 return value_type (arg);
872 return type;
873 }
This page took 0.046682 seconds and 5 git commands to generate.