* c-lang.c (cplus_builtin_types): Remove.
[deliverable/binutils-gdb.git] / gdb / f-lang.c
CommitLineData
c906108c 1/* Fortran language support routines for GDB, the GNU debugger.
ce27fb25 2
6aba47ca
DJ
3 Copyright (C) 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003,
4 2004, 2005, 2007 Free Software Foundation, Inc.
ce27fb25 5
c906108c
SS
6 Contributed by Motorola. Adapted from the C parser by Farooq Butt
7 (fmbutt@engage.sps.mot.com).
8
c5aa993b 9 This file is part of GDB.
c906108c 10
c5aa993b
JM
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
c906108c 15
c5aa993b
JM
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
c906108c 20
c5aa993b
JM
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
197e01b6
EZ
23 Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 Boston, MA 02110-1301, USA. */
c906108c
SS
25
26#include "defs.h"
27#include "gdb_string.h"
28#include "symtab.h"
29#include "gdbtypes.h"
30#include "expression.h"
31#include "parser-defs.h"
32#include "language.h"
33#include "f-lang.h"
745b8ca0 34#include "valprint.h"
5f9a71c3 35#include "value.h"
c906108c
SS
36
37/* The built-in types of F77. FIXME: integer*4 is missing, plain
38 logical is missing (builtin_type_logical is logical*4). */
39
40struct type *builtin_type_f_character;
41struct type *builtin_type_f_logical;
42struct type *builtin_type_f_logical_s1;
43struct type *builtin_type_f_logical_s2;
c5aa993b 44struct type *builtin_type_f_integer;
c906108c
SS
45struct type *builtin_type_f_integer_s2;
46struct type *builtin_type_f_real;
47struct type *builtin_type_f_real_s8;
48struct type *builtin_type_f_real_s16;
49struct type *builtin_type_f_complex_s8;
50struct type *builtin_type_f_complex_s16;
51struct type *builtin_type_f_complex_s32;
52struct type *builtin_type_f_void;
53
54/* Following is dubious stuff that had been in the xcoff reader. */
55
56struct saved_fcn
c5aa993b
JM
57 {
58 long line_offset; /* Line offset for function */
59 struct saved_fcn *next;
60 };
c906108c
SS
61
62
c5aa993b
JM
63struct saved_bf_symnum
64 {
65 long symnum_fcn; /* Symnum of function (i.e. .function directive) */
66 long symnum_bf; /* Symnum of .bf for this function */
67 struct saved_bf_symnum *next;
68 };
c906108c 69
c5aa993b
JM
70typedef struct saved_fcn SAVED_FUNCTION, *SAVED_FUNCTION_PTR;
71typedef struct saved_bf_symnum SAVED_BF, *SAVED_BF_PTR;
c906108c
SS
72
73/* Local functions */
74
a14ed312 75extern void _initialize_f_language (void);
c906108c 76#if 0
a14ed312
KB
77static void clear_function_list (void);
78static long get_bf_for_fcn (long);
79static void clear_bf_list (void);
80static void patch_all_commons_by_name (char *, CORE_ADDR, int);
81static SAVED_F77_COMMON_PTR find_first_common_named (char *);
82static void add_common_entry (struct symbol *);
83static void add_common_block (char *, CORE_ADDR, int, char *);
84static SAVED_FUNCTION *allocate_saved_function_node (void);
85static SAVED_BF_PTR allocate_saved_bf_node (void);
86static COMMON_ENTRY_PTR allocate_common_entry_node (void);
87static SAVED_F77_COMMON_PTR allocate_saved_f77_common_node (void);
88static void patch_common_entries (SAVED_F77_COMMON_PTR, CORE_ADDR, int);
c906108c
SS
89#endif
90
a14ed312 91static struct type *f_create_fundamental_type (struct objfile *, int);
d9fcf2fb
JM
92static void f_printchar (int c, struct ui_file * stream);
93static void f_emit_char (int c, struct ui_file * stream, int quoter);
c906108c
SS
94
95/* Print the character C on STREAM as part of the contents of a literal
96 string whose delimiter is QUOTER. Note that that format for printing
97 characters and strings is language specific.
98 FIXME: This is a copy of the same function from c-exp.y. It should
99 be replaced with a true F77 version. */
100
101static void
f86f5ca3 102f_emit_char (int c, struct ui_file *stream, int quoter)
c906108c
SS
103{
104 c &= 0xFF; /* Avoid sign bit follies */
c5aa993b 105
c906108c
SS
106 if (PRINT_LITERAL_FORM (c))
107 {
108 if (c == '\\' || c == quoter)
109 fputs_filtered ("\\", stream);
110 fprintf_filtered (stream, "%c", c);
111 }
112 else
113 {
114 switch (c)
115 {
116 case '\n':
117 fputs_filtered ("\\n", stream);
118 break;
119 case '\b':
120 fputs_filtered ("\\b", stream);
121 break;
122 case '\t':
123 fputs_filtered ("\\t", stream);
124 break;
125 case '\f':
126 fputs_filtered ("\\f", stream);
127 break;
128 case '\r':
129 fputs_filtered ("\\r", stream);
130 break;
131 case '\033':
132 fputs_filtered ("\\e", stream);
133 break;
134 case '\007':
135 fputs_filtered ("\\a", stream);
136 break;
137 default:
138 fprintf_filtered (stream, "\\%.3o", (unsigned int) c);
139 break;
140 }
141 }
142}
143
144/* FIXME: This is a copy of the same function from c-exp.y. It should
145 be replaced with a true F77version. */
146
147static void
fba45db2 148f_printchar (int c, struct ui_file *stream)
c906108c
SS
149{
150 fputs_filtered ("'", stream);
151 LA_EMIT_CHAR (c, stream, '\'');
152 fputs_filtered ("'", stream);
153}
154
155/* Print the character string STRING, printing at most LENGTH characters.
156 Printing stops early if the number hits print_max; repeat counts
157 are printed as appropriate. Print ellipses at the end if we
158 had to stop before printing LENGTH characters, or if FORCE_ELLIPSES.
159 FIXME: This is a copy of the same function from c-exp.y. It should
160 be replaced with a true F77 version. */
161
162static void
fc1a4b47 163f_printstr (struct ui_file *stream, const gdb_byte *string,
ce27fb25 164 unsigned int length, int width, int force_ellipses)
c906108c 165{
f86f5ca3 166 unsigned int i;
c906108c
SS
167 unsigned int things_printed = 0;
168 int in_quotes = 0;
169 int need_comma = 0;
c5aa993b 170
c906108c
SS
171 if (length == 0)
172 {
173 fputs_filtered ("''", gdb_stdout);
174 return;
175 }
c5aa993b 176
c906108c
SS
177 for (i = 0; i < length && things_printed < print_max; ++i)
178 {
179 /* Position of the character we are examining
c5aa993b 180 to see whether it is repeated. */
c906108c
SS
181 unsigned int rep1;
182 /* Number of repetitions we have detected so far. */
183 unsigned int reps;
c5aa993b 184
c906108c 185 QUIT;
c5aa993b 186
c906108c
SS
187 if (need_comma)
188 {
189 fputs_filtered (", ", stream);
190 need_comma = 0;
191 }
c5aa993b 192
c906108c
SS
193 rep1 = i + 1;
194 reps = 1;
195 while (rep1 < length && string[rep1] == string[i])
196 {
197 ++rep1;
198 ++reps;
199 }
c5aa993b 200
c906108c
SS
201 if (reps > repeat_count_threshold)
202 {
203 if (in_quotes)
204 {
205 if (inspect_it)
206 fputs_filtered ("\\', ", stream);
207 else
208 fputs_filtered ("', ", stream);
209 in_quotes = 0;
210 }
211 f_printchar (string[i], stream);
212 fprintf_filtered (stream, " <repeats %u times>", reps);
213 i = rep1 - 1;
214 things_printed += repeat_count_threshold;
215 need_comma = 1;
216 }
217 else
218 {
219 if (!in_quotes)
220 {
221 if (inspect_it)
222 fputs_filtered ("\\'", stream);
223 else
224 fputs_filtered ("'", stream);
225 in_quotes = 1;
226 }
227 LA_EMIT_CHAR (string[i], stream, '"');
228 ++things_printed;
229 }
230 }
c5aa993b 231
c906108c
SS
232 /* Terminate the quotes if necessary. */
233 if (in_quotes)
234 {
235 if (inspect_it)
236 fputs_filtered ("\\'", stream);
237 else
238 fputs_filtered ("'", stream);
239 }
c5aa993b 240
c906108c
SS
241 if (force_ellipses || i < length)
242 fputs_filtered ("...", stream);
243}
244
245/* FIXME: This is a copy of c_create_fundamental_type(), before
246 all the non-C types were stripped from it. Needs to be fixed
247 by an experienced F77 programmer. */
248
249static struct type *
fba45db2 250f_create_fundamental_type (struct objfile *objfile, int typeid)
c906108c 251{
f86f5ca3 252 struct type *type = NULL;
c5aa993b 253
c906108c
SS
254 switch (typeid)
255 {
256 case FT_VOID:
257 type = init_type (TYPE_CODE_VOID,
258 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
259 0, "VOID", objfile);
260 break;
261 case FT_BOOLEAN:
262 type = init_type (TYPE_CODE_BOOL,
263 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
264 TYPE_FLAG_UNSIGNED, "boolean", objfile);
265 break;
266 case FT_STRING:
267 type = init_type (TYPE_CODE_STRING,
268 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
269 0, "string", objfile);
270 break;
271 case FT_CHAR:
272 type = init_type (TYPE_CODE_INT,
273 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
274 0, "character", objfile);
275 break;
276 case FT_SIGNED_CHAR:
277 type = init_type (TYPE_CODE_INT,
278 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
279 0, "integer*1", objfile);
280 break;
281 case FT_UNSIGNED_CHAR:
282 type = init_type (TYPE_CODE_BOOL,
283 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
284 TYPE_FLAG_UNSIGNED, "logical*1", objfile);
285 break;
286 case FT_SHORT:
287 type = init_type (TYPE_CODE_INT,
9a76efb6 288 gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
289 0, "integer*2", objfile);
290 break;
291 case FT_SIGNED_SHORT:
292 type = init_type (TYPE_CODE_INT,
9a76efb6 293 gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
294 0, "short", objfile); /* FIXME-fnf */
295 break;
296 case FT_UNSIGNED_SHORT:
297 type = init_type (TYPE_CODE_BOOL,
9a76efb6 298 gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
299 TYPE_FLAG_UNSIGNED, "logical*2", objfile);
300 break;
301 case FT_INTEGER:
302 type = init_type (TYPE_CODE_INT,
9a76efb6 303 gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
304 0, "integer*4", objfile);
305 break;
306 case FT_SIGNED_INTEGER:
307 type = init_type (TYPE_CODE_INT,
9a76efb6 308 gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
c5aa993b 309 0, "integer", objfile); /* FIXME -fnf */
c906108c
SS
310 break;
311 case FT_UNSIGNED_INTEGER:
c5aa993b 312 type = init_type (TYPE_CODE_BOOL,
9a76efb6 313 gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
314 TYPE_FLAG_UNSIGNED, "logical*4", objfile);
315 break;
316 case FT_FIXED_DECIMAL:
317 type = init_type (TYPE_CODE_INT,
9a76efb6 318 gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
319 0, "fixed decimal", objfile);
320 break;
321 case FT_LONG:
322 type = init_type (TYPE_CODE_INT,
9a76efb6 323 gdbarch_long_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
324 0, "long", objfile);
325 break;
326 case FT_SIGNED_LONG:
327 type = init_type (TYPE_CODE_INT,
9a76efb6 328 gdbarch_long_bit (current_gdbarch) / TARGET_CHAR_BIT,
c5aa993b 329 0, "long", objfile); /* FIXME -fnf */
c906108c
SS
330 break;
331 case FT_UNSIGNED_LONG:
332 type = init_type (TYPE_CODE_INT,
9a76efb6 333 gdbarch_long_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
334 TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
335 break;
336 case FT_LONG_LONG:
337 type = init_type (TYPE_CODE_INT,
9a76efb6
UW
338 gdbarch_long_long_bit (current_gdbarch)
339 / TARGET_CHAR_BIT,
c906108c
SS
340 0, "long long", objfile);
341 break;
342 case FT_SIGNED_LONG_LONG:
343 type = init_type (TYPE_CODE_INT,
9a76efb6
UW
344 gdbarch_long_long_bit (current_gdbarch)
345 / TARGET_CHAR_BIT,
c906108c
SS
346 0, "signed long long", objfile);
347 break;
348 case FT_UNSIGNED_LONG_LONG:
349 type = init_type (TYPE_CODE_INT,
9a76efb6
UW
350 gdbarch_long_long_bit (current_gdbarch)
351 / TARGET_CHAR_BIT,
c906108c
SS
352 TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
353 break;
354 case FT_FLOAT:
355 type = init_type (TYPE_CODE_FLT,
ea06eb3d 356 gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
357 0, "real", objfile);
358 break;
359 case FT_DBL_PREC_FLOAT:
360 type = init_type (TYPE_CODE_FLT,
ea06eb3d 361 gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
362 0, "real*8", objfile);
363 break;
364 case FT_FLOAT_DECIMAL:
365 type = init_type (TYPE_CODE_FLT,
ea06eb3d 366 gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
367 0, "floating decimal", objfile);
368 break;
369 case FT_EXT_PREC_FLOAT:
370 type = init_type (TYPE_CODE_FLT,
ea06eb3d
UW
371 gdbarch_long_double_bit (current_gdbarch)
372 / TARGET_CHAR_BIT,
c906108c
SS
373 0, "real*16", objfile);
374 break;
375 case FT_COMPLEX:
376 type = init_type (TYPE_CODE_COMPLEX,
ea06eb3d 377 2 * gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
378 0, "complex*8", objfile);
379 TYPE_TARGET_TYPE (type) = builtin_type_f_real;
380 break;
381 case FT_DBL_PREC_COMPLEX:
382 type = init_type (TYPE_CODE_COMPLEX,
ea06eb3d
UW
383 2 * gdbarch_double_bit (current_gdbarch)
384 / TARGET_CHAR_BIT,
c906108c
SS
385 0, "complex*16", objfile);
386 TYPE_TARGET_TYPE (type) = builtin_type_f_real_s8;
387 break;
388 case FT_EXT_PREC_COMPLEX:
389 type = init_type (TYPE_CODE_COMPLEX,
ea06eb3d
UW
390 2 * gdbarch_long_double_bit (current_gdbarch)
391 / TARGET_CHAR_BIT,
c906108c
SS
392 0, "complex*32", objfile);
393 TYPE_TARGET_TYPE (type) = builtin_type_f_real_s16;
394 break;
395 default:
396 /* FIXME: For now, if we are asked to produce a type not in this
c5aa993b
JM
397 language, create the equivalent of a C integer type with the
398 name "<?type?>". When all the dust settles from the type
399 reconstruction work, this should probably become an error. */
c906108c 400 type = init_type (TYPE_CODE_INT,
9a76efb6 401 gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c 402 0, "<?type?>", objfile);
8a3fe4f8 403 warning (_("internal error: no F77 fundamental type %d"), typeid);
c906108c
SS
404 break;
405 }
406 return (type);
407}
c906108c 408\f
c5aa993b 409
c906108c
SS
410/* Table of operators and their precedences for printing expressions. */
411
c5aa993b
JM
412static const struct op_print f_op_print_tab[] =
413{
414 {"+", BINOP_ADD, PREC_ADD, 0},
415 {"+", UNOP_PLUS, PREC_PREFIX, 0},
416 {"-", BINOP_SUB, PREC_ADD, 0},
417 {"-", UNOP_NEG, PREC_PREFIX, 0},
418 {"*", BINOP_MUL, PREC_MUL, 0},
419 {"/", BINOP_DIV, PREC_MUL, 0},
420 {"DIV", BINOP_INTDIV, PREC_MUL, 0},
421 {"MOD", BINOP_REM, PREC_MUL, 0},
422 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
423 {".OR.", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
424 {".AND.", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
425 {".NOT.", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
426 {".EQ.", BINOP_EQUAL, PREC_EQUAL, 0},
427 {".NE.", BINOP_NOTEQUAL, PREC_EQUAL, 0},
428 {".LE.", BINOP_LEQ, PREC_ORDER, 0},
429 {".GE.", BINOP_GEQ, PREC_ORDER, 0},
430 {".GT.", BINOP_GTR, PREC_ORDER, 0},
431 {".LT.", BINOP_LESS, PREC_ORDER, 0},
432 {"**", UNOP_IND, PREC_PREFIX, 0},
433 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
434 {NULL, 0, 0, 0}
c906108c
SS
435};
436\f
cad351d1
UW
437enum f_primitive_types {
438 f_primitive_type_character,
439 f_primitive_type_logical,
440 f_primitive_type_logical_s1,
441 f_primitive_type_logical_s2,
442 f_primitive_type_integer,
443 f_primitive_type_integer_s2,
444 f_primitive_type_real,
445 f_primitive_type_real_s8,
446 f_primitive_type_real_s16,
447 f_primitive_type_complex_s8,
448 f_primitive_type_complex_s16,
449 f_primitive_type_void,
450 nr_f_primitive_types
c906108c
SS
451};
452
cad351d1
UW
453static void
454f_language_arch_info (struct gdbarch *gdbarch,
455 struct language_arch_info *lai)
456{
457 lai->string_char_type = builtin_type_f_character;
458 lai->primitive_type_vector
459 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_f_primitive_types + 1,
460 struct type *);
461
462 lai->primitive_type_vector [f_primitive_type_character]
463 = builtin_type_f_character;
464 lai->primitive_type_vector [f_primitive_type_logical]
465 = builtin_type_f_logical;
466 lai->primitive_type_vector [f_primitive_type_logical_s1]
467 = builtin_type_f_logical_s1;
468 lai->primitive_type_vector [f_primitive_type_logical_s2]
469 = builtin_type_f_logical_s2;
470 lai->primitive_type_vector [f_primitive_type_real]
471 = builtin_type_f_real;
472 lai->primitive_type_vector [f_primitive_type_real_s8]
473 = builtin_type_f_real_s8;
474 lai->primitive_type_vector [f_primitive_type_real_s16]
475 = builtin_type_f_real_s16;
476 lai->primitive_type_vector [f_primitive_type_complex_s8]
477 = builtin_type_f_complex_s8;
478 lai->primitive_type_vector [f_primitive_type_complex_s16]
479 = builtin_type_f_complex_s16;
480 lai->primitive_type_vector [f_primitive_type_void]
481 = builtin_type_f_void;
482}
483
c906108c
SS
484/* This is declared in c-lang.h but it is silly to import that file for what
485 is already just a hack. */
d9fcf2fb
JM
486extern int c_value_print (struct value *, struct ui_file *, int,
487 enum val_prettyprint);
c906108c 488
c5aa993b
JM
489const struct language_defn f_language_defn =
490{
c906108c
SS
491 "fortran",
492 language_fortran,
cad351d1 493 NULL,
c906108c
SS
494 range_check_on,
495 type_check_on,
63872f9d 496 case_sensitive_off,
7ca2d3a3 497 array_column_major,
5f9769d1 498 &exp_descriptor_standard,
c906108c
SS
499 f_parse, /* parser */
500 f_error, /* parser error function */
e85c3284 501 null_post_parser,
c906108c
SS
502 f_printchar, /* Print character constant */
503 f_printstr, /* function to print string constant */
504 f_emit_char, /* Function to print a single character */
505 f_create_fundamental_type, /* Create fundamental type in this language */
c5aa993b 506 f_print_type, /* Print a type using appropriate syntax */
c906108c 507 f_val_print, /* Print a value using appropriate syntax */
c5aa993b 508 c_value_print, /* FIXME */
f636b87d 509 NULL, /* Language specific skip_trampoline */
5f9a71c3
DC
510 value_of_this, /* value_of_this */
511 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 512 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 513 NULL, /* Language specific symbol demangler */
31c27f77 514 NULL, /* Language specific class_name_from_physname */
c906108c
SS
515 f_op_print_tab, /* expression operators for printing */
516 0, /* arrays are first-class (not c-style) */
517 1, /* String lower bound */
cad351d1 518 NULL,
6084f43a 519 default_word_break_characters,
cad351d1 520 f_language_arch_info,
e79af960 521 default_print_array_index,
c906108c 522 LANG_MAGIC
c5aa993b 523};
c906108c 524
4e845cd3
MS
525static void
526build_fortran_types (void)
c906108c
SS
527{
528 builtin_type_f_void =
529 init_type (TYPE_CODE_VOID, 1,
530 0,
531 "VOID", (struct objfile *) NULL);
c5aa993b 532
c906108c
SS
533 builtin_type_f_character =
534 init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
535 0,
536 "character", (struct objfile *) NULL);
c5aa993b 537
c906108c
SS
538 builtin_type_f_logical_s1 =
539 init_type (TYPE_CODE_BOOL, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
540 TYPE_FLAG_UNSIGNED,
541 "logical*1", (struct objfile *) NULL);
c5aa993b 542
c906108c 543 builtin_type_f_integer_s2 =
9a76efb6
UW
544 init_type (TYPE_CODE_INT,
545 gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
546 0, "integer*2", (struct objfile *) NULL);
c5aa993b 547
c906108c 548 builtin_type_f_logical_s2 =
9a76efb6
UW
549 init_type (TYPE_CODE_BOOL,
550 gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
551 TYPE_FLAG_UNSIGNED, "logical*2", (struct objfile *) NULL);
c5aa993b 552
c906108c 553 builtin_type_f_integer =
9a76efb6
UW
554 init_type (TYPE_CODE_INT,
555 gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
556 0, "integer", (struct objfile *) NULL);
c5aa993b 557
c906108c 558 builtin_type_f_logical =
9a76efb6
UW
559 init_type (TYPE_CODE_BOOL,
560 gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
561 TYPE_FLAG_UNSIGNED, "logical*4", (struct objfile *) NULL);
c5aa993b 562
c906108c 563 builtin_type_f_real =
ea06eb3d
UW
564 init_type (TYPE_CODE_FLT,
565 gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
566 0,
567 "real", (struct objfile *) NULL);
c5aa993b 568
c906108c 569 builtin_type_f_real_s8 =
ea06eb3d
UW
570 init_type (TYPE_CODE_FLT,
571 gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
572 0,
573 "real*8", (struct objfile *) NULL);
c5aa993b 574
c906108c 575 builtin_type_f_real_s16 =
ea06eb3d
UW
576 init_type (TYPE_CODE_FLT,
577 gdbarch_long_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
578 0,
579 "real*16", (struct objfile *) NULL);
c5aa993b 580
c906108c 581 builtin_type_f_complex_s8 =
ea06eb3d
UW
582 init_type (TYPE_CODE_COMPLEX,
583 2 * gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
584 0,
585 "complex*8", (struct objfile *) NULL);
586 TYPE_TARGET_TYPE (builtin_type_f_complex_s8) = builtin_type_f_real;
c5aa993b 587
c906108c 588 builtin_type_f_complex_s16 =
ea06eb3d
UW
589 init_type (TYPE_CODE_COMPLEX,
590 2 * gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
591 0,
592 "complex*16", (struct objfile *) NULL);
593 TYPE_TARGET_TYPE (builtin_type_f_complex_s16) = builtin_type_f_real_s8;
c5aa993b 594
c906108c
SS
595 /* We have a new size == 4 double floats for the
596 complex*32 data type */
c5aa993b
JM
597
598 builtin_type_f_complex_s32 =
ea06eb3d
UW
599 init_type (TYPE_CODE_COMPLEX,
600 2 * gdbarch_long_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
c906108c
SS
601 0,
602 "complex*32", (struct objfile *) NULL);
603 TYPE_TARGET_TYPE (builtin_type_f_complex_s32) = builtin_type_f_real_s16;
4e845cd3
MS
604}
605
606void
607_initialize_f_language (void)
608{
609 build_fortran_types ();
046a4708
AC
610
611 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_character);
612 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_logical);
613 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_logical_s1);
614 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_logical_s2);
615 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_integer);
616 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_integer_s2);
617 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_real);
618 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_real_s8);
619 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_real_s16);
620 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_complex_s8);
621 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_complex_s16);
622 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_complex_s32);
623 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_f_void);
624 DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_string);
625 deprecated_register_gdbarch_swap (NULL, 0, build_fortran_types);
c906108c
SS
626
627 builtin_type_string =
628 init_type (TYPE_CODE_STRING, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
629 0,
c5aa993b
JM
630 "character string", (struct objfile *) NULL);
631
c906108c
SS
632 add_language (&f_language_defn);
633}
634
635#if 0
636static SAVED_BF_PTR
fba45db2 637allocate_saved_bf_node (void)
c906108c
SS
638{
639 SAVED_BF_PTR new;
c5aa993b 640
c906108c 641 new = (SAVED_BF_PTR) xmalloc (sizeof (SAVED_BF));
c5aa993b 642 return (new);
c906108c
SS
643}
644
645static SAVED_FUNCTION *
fba45db2 646allocate_saved_function_node (void)
c906108c
SS
647{
648 SAVED_FUNCTION *new;
c5aa993b 649
c906108c 650 new = (SAVED_FUNCTION *) xmalloc (sizeof (SAVED_FUNCTION));
c5aa993b 651 return (new);
c906108c
SS
652}
653
c5aa993b 654static SAVED_F77_COMMON_PTR
fba45db2 655allocate_saved_f77_common_node (void)
c906108c
SS
656{
657 SAVED_F77_COMMON_PTR new;
c5aa993b 658
c906108c 659 new = (SAVED_F77_COMMON_PTR) xmalloc (sizeof (SAVED_F77_COMMON));
c5aa993b 660 return (new);
c906108c
SS
661}
662
c5aa993b 663static COMMON_ENTRY_PTR
fba45db2 664allocate_common_entry_node (void)
c906108c
SS
665{
666 COMMON_ENTRY_PTR new;
c5aa993b 667
c906108c 668 new = (COMMON_ENTRY_PTR) xmalloc (sizeof (COMMON_ENTRY));
c5aa993b 669 return (new);
c906108c
SS
670}
671#endif
672
c5aa993b
JM
673SAVED_F77_COMMON_PTR head_common_list = NULL; /* Ptr to 1st saved COMMON */
674SAVED_F77_COMMON_PTR tail_common_list = NULL; /* Ptr to last saved COMMON */
675SAVED_F77_COMMON_PTR current_common = NULL; /* Ptr to current COMMON */
c906108c
SS
676
677#if 0
c5aa993b
JM
678static SAVED_BF_PTR saved_bf_list = NULL; /* Ptr to (.bf,function)
679 list */
680static SAVED_BF_PTR saved_bf_list_end = NULL; /* Ptr to above list's end */
681static SAVED_BF_PTR current_head_bf_list = NULL; /* Current head of above list
682 */
c906108c 683
c5aa993b
JM
684static SAVED_BF_PTR tmp_bf_ptr; /* Generic temporary for use
685 in macros */
c906108c
SS
686
687/* The following function simply enters a given common block onto
688 the global common block chain */
689
690static void
fba45db2 691add_common_block (char *name, CORE_ADDR offset, int secnum, char *func_stab)
c906108c
SS
692{
693 SAVED_F77_COMMON_PTR tmp;
c5aa993b
JM
694 char *c, *local_copy_func_stab;
695
c906108c
SS
696 /* If the COMMON block we are trying to add has a blank
697 name (i.e. "#BLNK_COM") then we set it to __BLANK
698 because the darn "#" character makes GDB's input
c5aa993b
JM
699 parser have fits. */
700
701
6314a349
AC
702 if (strcmp (name, BLANK_COMMON_NAME_ORIGINAL) == 0
703 || strcmp (name, BLANK_COMMON_NAME_MF77) == 0)
c906108c 704 {
c5aa993b 705
b8c9b27d 706 xfree (name);
c5aa993b
JM
707 name = alloca (strlen (BLANK_COMMON_NAME_LOCAL) + 1);
708 strcpy (name, BLANK_COMMON_NAME_LOCAL);
c906108c 709 }
c5aa993b
JM
710
711 tmp = allocate_saved_f77_common_node ();
712
713 local_copy_func_stab = xmalloc (strlen (func_stab) + 1);
714 strcpy (local_copy_func_stab, func_stab);
715
716 tmp->name = xmalloc (strlen (name) + 1);
717
c906108c 718 /* local_copy_func_stab is a stabstring, let us first extract the
c5aa993b
JM
719 function name from the stab by NULLing out the ':' character. */
720
721
722 c = NULL;
723 c = strchr (local_copy_func_stab, ':');
724
c906108c
SS
725 if (c)
726 *c = '\0';
727 else
8a3fe4f8 728 error (_("Malformed function STAB found in add_common_block()"));
c5aa993b
JM
729
730
731 tmp->owning_function = xmalloc (strlen (local_copy_func_stab) + 1);
732
733 strcpy (tmp->owning_function, local_copy_func_stab);
734
735 strcpy (tmp->name, name);
736 tmp->offset = offset;
c906108c
SS
737 tmp->next = NULL;
738 tmp->entries = NULL;
c5aa993b
JM
739 tmp->secnum = secnum;
740
c906108c 741 current_common = tmp;
c5aa993b 742
c906108c
SS
743 if (head_common_list == NULL)
744 {
745 head_common_list = tail_common_list = tmp;
746 }
747 else
748 {
c5aa993b 749 tail_common_list->next = tmp;
c906108c
SS
750 tail_common_list = tmp;
751 }
752}
753#endif
754
755/* The following function simply enters a given common entry onto
c5aa993b 756 the "current_common" block that has been saved away. */
c906108c
SS
757
758#if 0
759static void
fba45db2 760add_common_entry (struct symbol *entry_sym_ptr)
c906108c
SS
761{
762 COMMON_ENTRY_PTR tmp;
c5aa993b
JM
763
764
765
c906108c
SS
766 /* The order of this list is important, since
767 we expect the entries to appear in decl.
c5aa993b
JM
768 order when we later issue "info common" calls */
769
770 tmp = allocate_common_entry_node ();
771
c906108c
SS
772 tmp->next = NULL;
773 tmp->symbol = entry_sym_ptr;
c5aa993b 774
c906108c 775 if (current_common == NULL)
8a3fe4f8 776 error (_("Attempt to add COMMON entry with no block open!"));
c5aa993b 777 else
c906108c
SS
778 {
779 if (current_common->entries == NULL)
780 {
781 current_common->entries = tmp;
c5aa993b 782 current_common->end_of_entries = tmp;
c906108c
SS
783 }
784 else
785 {
c5aa993b
JM
786 current_common->end_of_entries->next = tmp;
787 current_common->end_of_entries = tmp;
c906108c
SS
788 }
789 }
790}
791#endif
792
c5aa993b 793/* This routine finds the first encountred COMMON block named "name" */
c906108c
SS
794
795#if 0
796static SAVED_F77_COMMON_PTR
fba45db2 797find_first_common_named (char *name)
c906108c 798{
c5aa993b 799
c906108c 800 SAVED_F77_COMMON_PTR tmp;
c5aa993b 801
c906108c 802 tmp = head_common_list;
c5aa993b 803
c906108c
SS
804 while (tmp != NULL)
805 {
6314a349 806 if (strcmp (tmp->name, name) == 0)
c5aa993b 807 return (tmp);
c906108c
SS
808 else
809 tmp = tmp->next;
810 }
c5aa993b 811 return (NULL);
c906108c
SS
812}
813#endif
814
815/* This routine finds the first encountred COMMON block named "name"
c5aa993b 816 that belongs to function funcname */
c906108c 817
c5aa993b 818SAVED_F77_COMMON_PTR
fba45db2 819find_common_for_function (char *name, char *funcname)
c906108c 820{
c5aa993b 821
c906108c 822 SAVED_F77_COMMON_PTR tmp;
c5aa993b 823
c906108c 824 tmp = head_common_list;
c5aa993b 825
c906108c
SS
826 while (tmp != NULL)
827 {
cb137aa5
AC
828 if (DEPRECATED_STREQ (tmp->name, name)
829 && DEPRECATED_STREQ (tmp->owning_function, funcname))
c5aa993b 830 return (tmp);
c906108c
SS
831 else
832 tmp = tmp->next;
833 }
c5aa993b 834 return (NULL);
c906108c
SS
835}
836
837
838#if 0
839
840/* The following function is called to patch up the offsets
841 for the statics contained in the COMMON block named
c5aa993b 842 "name." */
c906108c
SS
843
844static void
fba45db2 845patch_common_entries (SAVED_F77_COMMON_PTR blk, CORE_ADDR offset, int secnum)
c906108c
SS
846{
847 COMMON_ENTRY_PTR entry;
c5aa993b
JM
848
849 blk->offset = offset; /* Keep this around for future use. */
850
c906108c 851 entry = blk->entries;
c5aa993b 852
c906108c
SS
853 while (entry != NULL)
854 {
c5aa993b 855 SYMBOL_VALUE (entry->symbol) += offset;
c906108c 856 SYMBOL_SECTION (entry->symbol) = secnum;
c5aa993b 857
c906108c
SS
858 entry = entry->next;
859 }
c5aa993b 860 blk->secnum = secnum;
c906108c
SS
861}
862
863/* Patch all commons named "name" that need patching.Since COMMON
864 blocks occur with relative infrequency, we simply do a linear scan on
865 the name. Eventually, the best way to do this will be a
866 hashed-lookup. Secnum is the section number for the .bss section
867 (which is where common data lives). */
868
869static void
fba45db2 870patch_all_commons_by_name (char *name, CORE_ADDR offset, int secnum)
c906108c 871{
c5aa993b 872
c906108c 873 SAVED_F77_COMMON_PTR tmp;
c5aa993b 874
c906108c
SS
875 /* For blank common blocks, change the canonical reprsentation
876 of a blank name */
c5aa993b 877
6314a349
AC
878 if (strcmp (name, BLANK_COMMON_NAME_ORIGINAL) == 0
879 || strcmp (name, BLANK_COMMON_NAME_MF77) == 0)
c906108c 880 {
b8c9b27d 881 xfree (name);
c5aa993b
JM
882 name = alloca (strlen (BLANK_COMMON_NAME_LOCAL) + 1);
883 strcpy (name, BLANK_COMMON_NAME_LOCAL);
c906108c 884 }
c5aa993b 885
c906108c 886 tmp = head_common_list;
c5aa993b 887
c906108c
SS
888 while (tmp != NULL)
889 {
c5aa993b 890 if (COMMON_NEEDS_PATCHING (tmp))
6314a349 891 if (strcmp (tmp->name, name) == 0)
c5aa993b
JM
892 patch_common_entries (tmp, offset, secnum);
893
c906108c 894 tmp = tmp->next;
c5aa993b 895 }
c906108c
SS
896}
897#endif
898
899/* This macro adds the symbol-number for the start of the function
900 (the symbol number of the .bf) referenced by symnum_fcn to a
901 list. This list, in reality should be a FIFO queue but since
902 #line pragmas sometimes cause line ranges to get messed up
903 we simply create a linear list. This list can then be searched
904 first by a queueing algorithm and upon failure fall back to
c5aa993b 905 a linear scan. */
c906108c
SS
906
907#if 0
908#define ADD_BF_SYMNUM(bf_sym,fcn_sym) \
909 \
910 if (saved_bf_list == NULL) \
911{ \
912 tmp_bf_ptr = allocate_saved_bf_node(); \
913 \
914 tmp_bf_ptr->symnum_bf = (bf_sym); \
915 tmp_bf_ptr->symnum_fcn = (fcn_sym); \
916 tmp_bf_ptr->next = NULL; \
917 \
918 current_head_bf_list = saved_bf_list = tmp_bf_ptr; \
919 saved_bf_list_end = tmp_bf_ptr; \
920 } \
921else \
922{ \
923 tmp_bf_ptr = allocate_saved_bf_node(); \
924 \
925 tmp_bf_ptr->symnum_bf = (bf_sym); \
926 tmp_bf_ptr->symnum_fcn = (fcn_sym); \
927 tmp_bf_ptr->next = NULL; \
928 \
929 saved_bf_list_end->next = tmp_bf_ptr; \
930 saved_bf_list_end = tmp_bf_ptr; \
c5aa993b 931 }
c906108c
SS
932#endif
933
c5aa993b 934/* This function frees the entire (.bf,function) list */
c906108c
SS
935
936#if 0
c5aa993b 937static void
fba45db2 938clear_bf_list (void)
c906108c 939{
c5aa993b 940
c906108c 941 SAVED_BF_PTR tmp = saved_bf_list;
c5aa993b
JM
942 SAVED_BF_PTR next = NULL;
943
c906108c
SS
944 while (tmp != NULL)
945 {
946 next = tmp->next;
b8c9b27d 947 xfree (tmp);
c5aa993b 948 tmp = next;
c906108c
SS
949 }
950 saved_bf_list = NULL;
951}
952#endif
953
954int global_remote_debug;
955
956#if 0
957
958static long
fba45db2 959get_bf_for_fcn (long the_function)
c906108c
SS
960{
961 SAVED_BF_PTR tmp;
962 int nprobes = 0;
c5aa993b 963
c906108c
SS
964 /* First use a simple queuing algorithm (i.e. look and see if the
965 item at the head of the queue is the one you want) */
c5aa993b 966
c906108c 967 if (saved_bf_list == NULL)
8e65ff28 968 internal_error (__FILE__, __LINE__,
e2e0b3e5 969 _("cannot get .bf node off empty list"));
c5aa993b
JM
970
971 if (current_head_bf_list != NULL)
c906108c
SS
972 if (current_head_bf_list->symnum_fcn == the_function)
973 {
c5aa993b 974 if (global_remote_debug)
dac8068e 975 fprintf_unfiltered (gdb_stderr, "*");
c906108c 976
c5aa993b 977 tmp = current_head_bf_list;
c906108c 978 current_head_bf_list = current_head_bf_list->next;
c5aa993b 979 return (tmp->symnum_bf);
c906108c 980 }
c5aa993b 981
c906108c
SS
982 /* If the above did not work (probably because #line directives were
983 used in the sourcefile and they messed up our internal tables) we now do
984 the ugly linear scan */
c5aa993b
JM
985
986 if (global_remote_debug)
dac8068e 987 fprintf_unfiltered (gdb_stderr, "\ndefaulting to linear scan\n");
c5aa993b
JM
988
989 nprobes = 0;
c906108c
SS
990 tmp = saved_bf_list;
991 while (tmp != NULL)
992 {
c5aa993b 993 nprobes++;
c906108c 994 if (tmp->symnum_fcn == the_function)
c5aa993b 995 {
c906108c 996 if (global_remote_debug)
dac8068e 997 fprintf_unfiltered (gdb_stderr, "Found in %d probes\n", nprobes);
c906108c 998 current_head_bf_list = tmp->next;
c5aa993b
JM
999 return (tmp->symnum_bf);
1000 }
1001 tmp = tmp->next;
c906108c 1002 }
c5aa993b
JM
1003
1004 return (-1);
c906108c
SS
1005}
1006
c5aa993b
JM
1007static SAVED_FUNCTION_PTR saved_function_list = NULL;
1008static SAVED_FUNCTION_PTR saved_function_list_end = NULL;
c906108c
SS
1009
1010static void
fba45db2 1011clear_function_list (void)
c906108c
SS
1012{
1013 SAVED_FUNCTION_PTR tmp = saved_function_list;
c5aa993b
JM
1014 SAVED_FUNCTION_PTR next = NULL;
1015
c906108c
SS
1016 while (tmp != NULL)
1017 {
1018 next = tmp->next;
b8c9b27d 1019 xfree (tmp);
c906108c
SS
1020 tmp = next;
1021 }
c5aa993b 1022
c906108c
SS
1023 saved_function_list = NULL;
1024}
1025#endif
This page took 0.529537 seconds and 4 git commands to generate.