X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fobjfiles.h;h=34240558da3d8823fd6206c356f0b8652a2b0cc3;hb=343cc95202fce70383551053f2efab09c5e02366;hp=0c044582e437f4e1b3ff89d05598c07b44719e2c;hpb=30baf67b6505d903bf678f9a0ba3645eb337ce49;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 0c044582e4..34240558da 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -244,11 +244,11 @@ struct objfile_per_bfd_storage /* Byte cache for file names. */ - struct bcache filename_cache; + gdb::bcache filename_cache; /* Byte cache for macros. */ - struct bcache macro_cache; + gdb::bcache macro_cache; /* The gdbarch associated with the BFD. Note that this gdbarch is determined solely from BFD information, without looking at target @@ -394,9 +394,24 @@ private: struct objfile { +private: + + /* The only way to create an objfile is to call objfile::make. */ objfile (bfd *, const char *, objfile_flags); + + /* The only way to free an objfile is via 'unlink'. */ ~objfile (); +public: + + /* Create an objfile. */ + static objfile *make (bfd *bfd_, const char *name_, objfile_flags flags_, + objfile *parent = nullptr); + + /* Remove an objfile from the current program space, and free + it. */ + void unlink (); + DISABLE_COPY_AND_ASSIGN (objfile); /* A range adapter that makes it possible to iterate over all @@ -471,12 +486,6 @@ struct objfile } - /* All struct objfile's are chained together by their next pointers. - The program space field "objfiles" (frequently referenced via - the macro "object_files") points to the first link in this chain. */ - - struct objfile *next = nullptr; - /* The object file's original name as specified by the user, made absolute, and tilde-expanded. However, it is not canonicalized (i.e., it has not been passed through gdb_realpath). @@ -627,6 +636,20 @@ struct objfile htab_up static_links; }; +/* A deleter for objfile. */ + +struct objfile_deleter +{ + void operator() (objfile *ptr) const + { + ptr->unlink (); + } +}; + +/* A unique pointer that holds an objfile. */ + +typedef std::unique_ptr objfile_up; + /* Declarations for functions defined in objfiles.c */ extern struct gdbarch *get_objfile_arch (const struct objfile *); @@ -637,12 +660,8 @@ extern CORE_ADDR entry_point_address (void); extern void build_objfile_section_table (struct objfile *); -extern void add_separate_debug_objfile (struct objfile *, struct objfile *); - extern void free_objfile_separate_debug (struct objfile *); -extern void free_all_objfiles (void); - extern void objfile_relocate (struct objfile *, const struct section_offsets *); extern void objfile_rebase (struct objfile *, CORE_ADDR); @@ -746,10 +765,6 @@ extern void default_iterate_over_objfiles_in_search_order uninitialized section index. */ #define SECT_OFF_BSS(objfile) (objfile)->sect_index_bss -/* Answer whether there is more than one object file loaded. */ - -#define MULTI_OBJFILE_P() (object_files && object_files->next) - /* Reset the per-BFD storage area on OBJ. */ void set_objfile_per_bfd (struct objfile *obj);