GDB (xrefs)
/tmp/gdb-8.1/gdb/f-lang.c
Go to the documentation of this file.
1 /* Fortran language support routines for GDB, the GNU debugger.
2 
3  Copyright (C) 1993-2018 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 "f-lang.h"
31 #include "valprint.h"
32 #include "value.h"
33 #include "cp-support.h"
34 #include "charset.h"
35 #include "c-lang.h"
36 
37 
38 /* Local functions */
39 
40 static void f_printchar (int c, struct type *type, struct ui_file * stream);
41 static void f_emit_char (int c, struct type *type,
42  struct ui_file * stream, int quoter);
43 
44 /* Return the encoding that should be used for the character type
45  TYPE. */
46 
47 static const char *
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 (gdbarch_byte_order (get_type_arch (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 /* Print the character C on STREAM as part of the contents of a literal
72  string whose delimiter is QUOTER. Note that that format for printing
73  characters and strings is language specific.
74  FIXME: This is a copy of the same function from c-exp.y. It should
75  be replaced with a true F77 version. */
76 
77 static void
78 f_emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
79 {
80  const char *encoding = f_get_encoding (type);
81 
82  generic_emit_char (c, type, stream, quoter, encoding);
83 }
84 
85 /* Implementation of la_printchar. */
86 
87 static void
88 f_printchar (int c, struct type *type, struct ui_file *stream)
89 {
90  fputs_filtered ("'", stream);
91  LA_EMIT_CHAR (c, type, stream, '\'');
92  fputs_filtered ("'", stream);
93 }
94 
95 /* Print the character string STRING, printing at most LENGTH characters.
96  Printing stops early if the number hits print_max; repeat counts
97  are printed as appropriate. Print ellipses at the end if we
98  had to stop before printing LENGTH characters, or if FORCE_ELLIPSES.
99  FIXME: This is a copy of the same function from c-exp.y. It should
100  be replaced with a true F77 version. */
101 
102 static void
103 f_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string,
104  unsigned int length, const char *encoding, int force_ellipses,
105  const struct value_print_options *options)
106 {
107  const char *type_encoding = f_get_encoding (type);
108 
109  if (TYPE_LENGTH (type) == 4)
110  fputs_filtered ("4_", stream);
111 
112  if (!encoding || !*encoding)
113  encoding = type_encoding;
114 
115  generic_printstr (stream, type, string, length, encoding,
116  force_ellipses, '\'', 0, options);
117 }
118 
119 
120 /* Table of operators and their precedences for printing expressions. */
121 
122 static const struct op_print f_op_print_tab[] =
123 {
124  {"+", BINOP_ADD, PREC_ADD, 0},
125  {"+", UNOP_PLUS, PREC_PREFIX, 0},
126  {"-", BINOP_SUB, PREC_ADD, 0},
127  {"-", UNOP_NEG, PREC_PREFIX, 0},
128  {"*", BINOP_MUL, PREC_MUL, 0},
129  {"/", BINOP_DIV, PREC_MUL, 0},
130  {"DIV", BINOP_INTDIV, PREC_MUL, 0},
131  {"MOD", BINOP_REM, PREC_MUL, 0},
132  {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
133  {".OR.", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
134  {".AND.", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
135  {".NOT.", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
136  {".EQ.", BINOP_EQUAL, PREC_EQUAL, 0},
137  {".NE.", BINOP_NOTEQUAL, PREC_EQUAL, 0},
138  {".LE.", BINOP_LEQ, PREC_ORDER, 0},
139  {".GE.", BINOP_GEQ, PREC_ORDER, 0},
140  {".GT.", BINOP_GTR, PREC_ORDER, 0},
141  {".LT.", BINOP_LESS, PREC_ORDER, 0},
142  {"**", UNOP_IND, PREC_PREFIX, 0},
143  {"@", BINOP_REPEAT, PREC_REPEAT, 0},
144  {NULL, OP_NULL, PREC_REPEAT, 0}
145 };
146 
162 };
163 
164 static void
166  struct language_arch_info *lai)
167 {
168  const struct builtin_f_type *builtin = builtin_f_type (gdbarch);
169 
170  lai->string_char_type = builtin->builtin_character;
173  struct type *);
174 
176  = builtin->builtin_character;
178  = builtin->builtin_logical;
180  = builtin->builtin_logical_s1;
182  = builtin->builtin_logical_s2;
184  = builtin->builtin_logical_s8;
186  = builtin->builtin_real;
188  = builtin->builtin_real_s8;
190  = builtin->builtin_real_s16;
192  = builtin->builtin_complex_s8;
194  = builtin->builtin_complex_s16;
196  = builtin->builtin_void;
197 
198  lai->bool_type_symbol = "logical";
199  lai->bool_type_default = builtin->builtin_logical_s2;
200 }
201 
202 /* Remove the modules separator :: from the default break list. */
203 
204 static const char *
206 {
207  static char *retval;
208 
209  if (!retval)
210  {
211  char *s;
212 
213  retval = xstrdup (default_word_break_characters ());
214  s = strchr (retval, ':');
215  if (s)
216  {
217  char *last_char = &s[strlen (s) - 1];
218 
219  *s = *last_char;
220  *last_char = 0;
221  }
222  }
223  return retval;
224 }
225 
226 /* Consider the modules separator :: as a valid symbol name character
227  class. */
228 
229 static void
232  symbol_name_match_type compare_name,
233  const char *text, const char *word,
234  enum type_code code)
235 {
237  compare_name,
238  text, word, ":", code);
239 }
240 
241 static const char *f_extensions[] =
242 {
243  ".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP",
244  ".f90", ".F90", ".f95", ".F95", ".f03", ".F03", ".f08", ".F08",
245  NULL
246 };
247 
248 extern const struct language_defn f_language_defn =
249 {
250  "fortran",
251  "Fortran",
257  f_extensions,
259  f_parse, /* parser */
260  f_yyerror, /* parser error function */
262  f_printchar, /* Print character constant */
263  f_printstr, /* function to print string constant */
264  f_emit_char, /* Function to print a single character */
265  f_print_type, /* Print a type using appropriate syntax */
266  default_print_typedef, /* Print a typedef using appropriate syntax */
267  f_val_print, /* Print a value using appropriate syntax */
268  c_value_print, /* FIXME */
269  default_read_var_value, /* la_read_var_value */
270  NULL, /* Language specific skip_trampoline */
271  NULL, /* name_of_this */
272  cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
273  basic_lookup_transparent_type,/* lookup_transparent_type */
274 
275  /* We could support demangling here to provide module namespaces
276  also for inferiors with only minimal symbol table (ELF symbols).
277  Just the mangling standard is not standardized across compilers
278  and there is no DW_AT_producer available for inferiors with only
279  the ELF symbols to check the mangling kind. */
280  NULL, /* Language specific symbol demangler */
281  NULL,
282  NULL, /* Language specific
283  class_name_from_physname */
284  f_op_print_tab, /* expression operators for printing */
285  0, /* arrays are first-class (not c-style) */
286  1, /* String lower bound */
294  NULL, /* la_get_symbol_name_matcher */
298  NULL,
299  NULL,
300  LANG_MAGIC
301 };
302 
303 static void *
305 {
308 
311 
313  = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
314 
316  = arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "logical*1");
317 
320  "integer*2");
321 
324  "logical*2");
325 
328  "logical*8");
329 
332  "integer");
333 
336  "logical*4");
337 
340  "real", gdbarch_float_format (gdbarch));
343  "real*8", gdbarch_double_format (gdbarch));
346  "real*16", gdbarch_long_double_format (gdbarch));
347 
349  = arch_complex_type (gdbarch, "complex*8",
352  = arch_complex_type (gdbarch, "complex*16",
355  = arch_complex_type (gdbarch, "complex*32",
357 
358  return builtin_f_type;
359 }
360 
361 static struct gdbarch_data *f_type_data;
362 
363 const struct builtin_f_type *
365 {
366  return (const struct builtin_f_type *) gdbarch_data (gdbarch, f_type_data);
367 }
368 
369 void
371 {
373 }
type_code
Definition: gdbtypes.h:80
const char * target_charset(struct gdbarch *gdbarch)
Definition: charset.c:425
struct type * arch_type(struct gdbarch *gdbarch, enum type_code code, int bit, const char *name)
Definition: gdbtypes.c:4941
const struct floatformat ** gdbarch_double_format(struct gdbarch *gdbarch)
Definition: gdbarch.c:1730
static const char * f_extensions[]
Definition: f-lang.c:241
struct type * builtin_real_s8
Definition: f-lang.h:73
int f_parse(struct parser_state *par_state)
Definition: f-exp.c:2924
unsigned int default_search_name_hash(const char *string0)
Definition: dictionary.c:769
struct type * builtin_integer_s2
Definition: f-lang.h:67
struct type * builtin_real_s16
Definition: f-lang.h:74
struct type * builtin_logical_s8
Definition: f-lang.h:71
#define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE)
Definition: gdbarch.h:1708
struct type * builtin_logical_s2
Definition: f-lang.h:70
int gdbarch_int_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1579
const char * default_word_break_characters(void)
Definition: language.c:679
static void f_printstr(struct ui_file *stream, struct type *type, const gdb_byte *string, unsigned int length, const char *encoding, int force_ellipses, const struct value_print_options *options)
Definition: f-lang.c:103
const struct floatformat ** gdbarch_long_double_format(struct gdbarch *gdbarch)
Definition: gdbarch.c:1763
void * gdbarch_data(struct gdbarch *gdbarch, struct gdbarch_data *data)
Definition: gdbarch.c:5169
complete_symbol_mode
Definition: symtab.h:1826
const struct language_defn f_language_defn
struct type * builtin_logical
Definition: f-lang.h:68
struct value * default_read_var_value(struct symbol *var, const struct block *var_block, struct frame_info *frame)
Definition: findvar.c:587
void f_yyerror(const char *)
void f_val_print(struct type *, int, CORE_ADDR, struct ui_file *, int, struct value *, const struct value_print_options *)
Definition: f-valprint.c:211
static const char * f_word_break_characters(void)
Definition: f-lang.c:205
void default_print_typedef(struct type *type, struct symbol *new_symbol, struct ui_file *stream)
Definition: typeprint.c:344
#define _(String)
Definition: gdb_locale.h:35
struct type * string_char_type
Definition: language.h:122
struct type * arch_boolean_type(struct gdbarch *gdbarch, int bit, int unsigned_p, const char *name)
Definition: gdbtypes.c:4996
struct type * arch_complex_type(struct gdbarch *gdbarch, const char *name, struct type *target_type)
Definition: gdbtypes.c:5044
#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE)
Definition: gdbarch.h:1709
static void f_language_arch_info(struct gdbarch *gdbarch, struct language_arch_info *lai)
Definition: f-lang.c:165
struct type * arch_integer_type(struct gdbarch *gdbarch, int bit, int unsigned_p, const char *name)
Definition: gdbtypes.c:4962
static void * build_fortran_types(struct gdbarch *gdbarch)
Definition: f-lang.c:304
void f_print_type(struct type *, const char *, struct ui_file *, int, int, const struct type_print_options *)
Definition: f-typeprint.c:51
#define LA_EMIT_CHAR(ch, type, stream, quoter)
Definition: language.h:532
void generic_printstr(struct ui_file *stream, struct type *type, const gdb_byte *string, unsigned int length, const char *encoding, int force_ellipses, int quote_char, int c_style_terminator, const struct value_print_options *options)
Definition: valprint.c:2683
struct type * builtin_complex_s16
Definition: f-lang.h:76
struct type * builtin_complex_s32
Definition: f-lang.h:77
struct type * bool_type_default
Definition: language.h:127
struct type * builtin_character
Definition: f-lang.h:65
struct type * builtin_integer
Definition: f-lang.h:66
struct type * arch_float_type(struct gdbarch *gdbarch, int bit, const char *name, const struct floatformat **floatformats)
Definition: gdbtypes.c:5014
void fputs_filtered(const char *linebuffer, struct ui_file *stream)
Definition: utils.c:1811
const char * bool_type_symbol
Definition: language.h:125
int default_pass_by_reference(struct type *type)
Definition: language.c:669
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
Definition: gdbarch.c:1509
struct type * basic_lookup_transparent_type(const char *name)
Definition: symtab.c:2792
#define TARGET_CHAR_BIT
Definition: host-defs.h:29
Definition: gdbtypes.h:749
struct gdbarch * get_type_arch(const struct type *type)
Definition: gdbtypes.c:234
void null_post_parser(expression_up *exp, int void_context_p)
Definition: parse.c:1319
int gdbarch_double_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1713
struct block_symbol cp_lookup_symbol_nonlocal(const struct language_defn *langdef, const char *name, const struct block *block, const domain_enum domain)
Definition: cp-namespace.c:737
void default_print_array_index(struct value *index_value, struct ui_file *stream, const struct value_print_options *options)
Definition: language.c:687
void _initialize_f_language(void)
Definition: f-lang.c:370
static void f_printchar(int c, struct type *type, struct ui_file *stream)
Definition: f-lang.c:88
bfd_byte gdb_byte
Definition: common-types.h:38
gdb::unique_xmalloc_ptr< char > c_watch_location_expression(struct type *type, CORE_ADDR addr)
Definition: c-lang.c:712
static const struct op_print f_op_print_tab[]
Definition: f-lang.c:122
void default_collect_symbol_completion_matches_break_on(completion_tracker &tracker, complete_symbol_mode mode, symbol_name_match_type name_match_type, const char *text, const char *word, const char *break_on, enum type_code code)
Definition: symtab.c:4986
f_primitive_types
Definition: f-lang.c:147
static void f_emit_char(int c, struct type *type, struct ui_file *stream, int quoter)
Definition: f-lang.c:78
void default_get_string(struct value *value, gdb_byte **buffer, int *length, struct type **char_type, const char **charset)
Definition: language.c:696
#define default_varobj_ops
Definition: varobj.h:236
struct type * builtin_complex_s8
Definition: f-lang.h:75
int gdbarch_long_long_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1613
const struct exp_descriptor exp_descriptor_standard
Definition: parse.c:58
int code
Definition: ser-unix.c:239
void generic_emit_char(int c, struct type *type, struct ui_file *stream, int quoter, const char *encoding)
Definition: valprint.c:2364
int gdbarch_float_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1680
static void f_collect_symbol_completion_matches(completion_tracker &tracker, complete_symbol_mode mode, symbol_name_match_type compare_name, const char *text, const char *word, enum type_code code)
Definition: f-lang.c:230
struct type * builtin_void
Definition: f-lang.h:78
struct type * builtin_real
Definition: f-lang.h:72
const struct floatformat ** gdbarch_float_format(struct gdbarch *gdbarch)
Definition: gdbarch.c:1697
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
void iterate_over_symbols(const struct block *block, const lookup_name_info &name, const domain_enum domain, gdb::function_view< symbol_found_callback_ftype > callback)
Definition: symtab.c:2849
static struct gdbarch_data * f_type_data
Definition: f-lang.c:361
const struct builtin_f_type * builtin_f_type(struct gdbarch *gdbarch)
Definition: f-lang.c:364
#define LANG_MAGIC
Definition: language.h:438
int gdbarch_long_double_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1746
int gdbarch_short_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1562
struct type ** primitive_type_vector
Definition: language.h:115
void c_value_print(struct value *, struct ui_file *, const struct value_print_options *)
Definition: c-valprint.c:571
void error(const char *fmt,...)
Definition: errors.c:38
struct gdbarch_data * gdbarch_data_register_post_init(gdbarch_data_post_init_ftype *post_init)
Definition: gdbarch.c:5136
struct type * builtin_logical_s1
Definition: f-lang.h:69
symbol_name_match_type
Definition: symtab.h:52
static const char * f_get_encoding(struct type *type)
Definition: f-lang.c:48