/* Definitions for symbol file management in GDB.
- Copyright (C) 1992-2015 Free Software Foundation, Inc.
+ Copyright (C) 1992-2017 Free Software Foundation, Inc.
This file is part of GDB.
#if !defined (OBJFILES_H)
#define OBJFILES_H
+#include "hashtab.h"
#include "gdb_obstack.h" /* For obstack internals. */
+#include "objfile-flags.h"
#include "symfile.h" /* For struct psymbol_allocation_list. */
#include "progspace.h"
#include "registry.h"
CORE_ADDR addr_low;
- /* Some flag bits for this objfile.
- The values are defined by OBJF_*. */
+ /* Some flag bits for this objfile. */
- unsigned short flags;
+ objfile_flags flags;
/* The program space associated with this objfile. */
properly. */
struct symbol *template_symbols;
-};
-
-/* Defines for the objfile flag word. */
-
-/* When an object file has its functions reordered (currently Irix-5.2
- shared libraries exhibit this behaviour), we will need an expensive
- algorithm to locate a partial symtab or symtab via an address.
- To avoid this penalty for normal object files, we use this flag,
- whose setting is determined upon symbol table read in. */
-
-#define OBJF_REORDERED (1 << 0) /* Functions are reordered */
-
-/* Distinguish between an objfile for a shared library and a "vanilla"
- objfile. This may come from a target's implementation of the solib
- interface, from add-symbol-file, or any other mechanism that loads
- dynamic objects. */
-
-#define OBJF_SHARED (1 << 1) /* From a shared library */
-
-/* User requested that this objfile be read in it's entirety. */
-
-#define OBJF_READNOW (1 << 2) /* Immediate full read */
-
-/* This objfile was created because the user explicitly caused it
- (e.g., used the add-symbol-file command). This bit offers a way
- for run_command to remove old objfile entries which are no longer
- valid (i.e., are associated with an old inferior), but to preserve
- ones that the user explicitly loaded via the add-symbol-file
- command. */
-
-#define OBJF_USERLOADED (1 << 3) /* User loaded */
-/* Set if we have tried to read partial symtabs for this objfile.
- This is used to allow lazy reading of partial symtabs. */
+ /* Associate a static link (struct dynamic_prop *) to all blocks (struct
+ block *) that have one.
-#define OBJF_PSYMTABS_READ (1 << 4)
+ In the context of nested functions (available in Pascal, Ada and GNU C,
+ for instance), a static link (as in DWARF's DW_AT_static_link attribute)
+ for a function is a way to get the frame corresponding to the enclosing
+ function.
-/* Set if this is the main symbol file
- (as opposed to symbol file for dynamically loaded code). */
-
-#define OBJF_MAINLINE (1 << 5)
-
-/* ORIGINAL_NAME and OBFD->FILENAME correspond to text description unrelated to
- filesystem names. It can be for example "<image in memory>". */
-
-#define OBJF_NOT_FILENAME (1 << 6)
+ Very few blocks have a static link, so it's more memory efficient to
+ store these here rather than in struct block. Static links must be
+ allocated on the objfile's obstack. */
+ htab_t static_links;
+};
/* Declarations for functions defined in objfiles.c */
-extern struct objfile *allocate_objfile (bfd *, const char *name, int);
+extern struct objfile *allocate_objfile (bfd *, const char *name,
+ objfile_flags);
extern struct gdbarch *get_objfile_arch (const struct objfile *);
extern void build_objfile_section_table (struct objfile *);
-extern void terminate_minimal_symbol_table (struct objfile *objfile);
-
extern struct objfile *objfile_separate_debug_iterate (const struct objfile *,
const struct objfile *);
extern struct obj_section *find_pc_section (CORE_ADDR pc);
/* Return non-zero if PC is in a section called NAME. */
-extern int pc_in_section (CORE_ADDR, char *);
+extern int pc_in_section (CORE_ADDR, const char *);
/* Return non-zero if PC is in a SVR4-style procedure linkage table
section. */
extern const char *objfile_debug_name (const struct objfile *objfile);
+/* Return the name of the file format of OBJFILE if the file has been opened,
+ otherwise return NULL. */
+
+const char *objfile_flavour_name (struct objfile *objfile);
+
/* Set the objfile's notion of the "main" name and language. */
extern void set_objfile_main_name (struct objfile *objfile,
const char *name, enum language lang);
+extern void objfile_register_static_link
+ (struct objfile *objfile,
+ const struct block *block,
+ const struct dynamic_prop *static_link);
+
+extern const struct dynamic_prop *objfile_lookup_static_link
+ (struct objfile *objfile, const struct block *block);
+
#endif /* !defined (OBJFILES_H) */