/* 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_)
- {
- return new objfile (bfd_, name_, flags_);
- }
+ static objfile *make (bfd *bfd_, const char *name_, objfile_flags flags_,
+ objfile *parent = nullptr);
- ~objfile ();
+ /* Remove an objfile from the current program space, and free
+ it. */
+ void unlink ();
DISABLE_COPY_AND_ASSIGN (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).
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, objfile_deleter> objfile_up;
+
/* Declarations for functions defined in objfiles.c */
extern struct gdbarch *get_objfile_arch (const struct objfile *);
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);
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);