gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / f-lang.h
index 8043577cf44244b2559b16615d3dd5a54a3bef07..84a63a8a410133194f5cb0da83789f250d9771c6 100644 (file)
@@ -1,7 +1,6 @@
 /* Fortran language support definitions for GDB, the GNU debugger.
 
-   Copyright (C) 1992, 1993, 1994, 1995, 1998, 2000, 2005, 2007, 2008, 2009,
-   2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 1992-2020 Free Software Foundation, Inc.
 
    Contributed by Motorola.  Adapted from the C definitions by Farooq Butt
    (fmbutt@engage.sps.mot.com).
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-extern int f_parse (void);
+#ifndef F_LANG_H
+#define F_LANG_H
 
-extern void f_error (char *);  /* Defined in f-exp.y */
+struct type_print_options;
+struct parser_state;
+
+extern int f_parse (struct parser_state *);
+
+/* Implement the la_print_typedef language method for Fortran.  */
+
+extern void f_print_typedef (struct type *type, struct symbol *new_symbol,
+                            struct ui_file *stream);
 
 extern void f_print_type (struct type *, const char *, struct ui_file *, int,
-                         int);
+                         int, const struct type_print_options *);
 
-extern int f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
-                       struct ui_file *, int,
-                       const struct value *,
-                       const struct value_print_options *);
+/* Implement la_value_print_inner for Fortran.  */
+
+extern void f_value_print_innner (struct value *val, struct ui_file *stream,
+                                 int recurse,
+                                 const struct value_print_options *options);
 
 /* Language-specific data structures */
 
-/* In F90 subrange expression, either bound could be empty, indicating that
-   its value is by default that of the corresponding bound of the array or
-   string.  So we have four sorts of subrange in F90.  This enumeration type
-   is to identify this.  */
-   
-enum f90_range_type
-  {
-    BOTH_BOUND_DEFAULT,                /* "(:)"  */
-    LOW_BOUND_DEFAULT,         /* "(:high)"  */
-    HIGH_BOUND_DEFAULT,                /* "(low:)"  */
-    NONE_BOUND_DEFAULT         /* "(low:high)"  */
-  };
-
-struct common_entry
-  {
-    struct symbol *symbol;     /* The symbol node corresponding
-                                  to this component */
-    struct common_entry *next; /* The next component */
-  };
-
-struct saved_f77_common
-  {
-    char *name;                        /* Name of COMMON */
-    char *owning_function;     /* Name of parent function */
-    int secnum;                        /* Section # of .bss */
-    CORE_ADDR offset;          /* Offset from .bss for 
-                                  this block */
-    struct common_entry *entries;      /* List of block's components */
-    struct common_entry *end_of_entries;       /* ptr. to end of components */
-    struct saved_f77_common *next;     /* Next saved COMMON block */
-  };
-
-typedef struct saved_f77_common SAVED_F77_COMMON, *SAVED_F77_COMMON_PTR;
-
-typedef struct common_entry COMMON_ENTRY, *COMMON_ENTRY_PTR;
-
-extern SAVED_F77_COMMON_PTR head_common_list;  /* Ptr to 1st saved COMMON  */
-extern SAVED_F77_COMMON_PTR tail_common_list;  /* Ptr to last saved COMMON  */
-extern SAVED_F77_COMMON_PTR current_common;    /* Ptr to current COMMON */
-
-extern SAVED_F77_COMMON_PTR find_common_for_function (char *, char *);
-
-#define UNINITIALIZED_SECNUM -1
-#define COMMON_NEEDS_PATCHING(blk) ((blk)->secnum == UNINITIALIZED_SECNUM)
-
-#define BLANK_COMMON_NAME_ORIGINAL "#BLNK_COM" /* XLF assigned  */
-#define BLANK_COMMON_NAME_MF77     "__BLNK__"  /* MF77 assigned  */
-#define BLANK_COMMON_NAME_LOCAL    "__BLANK"   /* Local GDB */
-
-/* When reasonable array bounds cannot be fetched, such as when 
-   you ask to 'mt print symbols' and there is no stack frame and 
-   therefore no way of knowing the bounds of stack-based arrays, 
-   we have to assign default bounds, these are as good as any...  */
-
-#define DEFAULT_UPPER_BOUND 999999
-#define DEFAULT_LOWER_BOUND -999999
-
-extern char *real_main_name;   /* Name of main function.  */
-extern int real_main_c_value;  /* C_value field of main function.  */
-
-extern int f77_get_upperbound (struct type *);
-
-extern int f77_get_lowerbound (struct type *);
+/* A common block.  */
+
+struct common_block
+{
+  /* The number of entries in the block.  */
+  size_t n_entries;
+
+  /* The contents of the block, allocated using the struct hack.  All
+     pointers in the array are non-NULL.  */
+  struct symbol *contents[1];
+};
+
+extern LONGEST f77_get_upperbound (struct type *);
+
+extern LONGEST f77_get_lowerbound (struct type *);
 
 extern void f77_get_dynamic_array_length (struct type *);
 
@@ -111,6 +72,7 @@ struct builtin_f_type
   struct type *builtin_character;
   struct type *builtin_integer;
   struct type *builtin_integer_s2;
+  struct type *builtin_integer_s8;
   struct type *builtin_logical;
   struct type *builtin_logical_s1;
   struct type *builtin_logical_s2;
@@ -127,3 +89,37 @@ struct builtin_f_type
 /* Return the Fortran type table for the specified architecture.  */
 extern const struct builtin_f_type *builtin_f_type (struct gdbarch *gdbarch);
 
+/* Ensures that function argument VALUE is in the appropriate form to
+   pass to a Fortran function.  Returns a possibly new value that should
+   be used instead of VALUE.
+
+   When IS_ARTIFICIAL is true this indicates an artificial argument,
+   e.g. hidden string lengths which the GNU Fortran argument passing
+   convention specifies as being passed by value.
+
+   When IS_ARTIFICIAL is false, the argument is passed by pointer.  If the
+   value is already in target memory then return a value that is a pointer
+   to VALUE.  If VALUE is not in memory (e.g. an integer literal), allocate
+   space in the target, copy VALUE in, and return a pointer to the in
+   memory copy.  */
+
+extern struct value *fortran_argument_convert (struct value *value,
+                                              bool is_artificial);
+
+/* Ensures that function argument TYPE is appropriate to inform the debugger
+   that ARG should be passed as a pointer.  Returns the potentially updated
+   argument type.
+
+   If ARG is of type pointer then the type of ARG is returned, otherwise
+   TYPE is returned untouched.
+
+   This function exists to augment the types of Fortran function call
+   parameters to be pointers to the reported value, when the corresponding ARG
+   has also been wrapped in a pointer (by fortran_argument_convert).  This
+   informs the debugger that these arguments should be passed as a pointer
+   rather than as the pointed to type.  */
+
+extern struct type *fortran_preserve_arg_pointer (struct value *arg,
+                                                 struct type *type);
+
+#endif /* F_LANG_H */
This page took 0.027022 seconds and 4 git commands to generate.