/* Program and address space management, for GDB, the GNU debugger.
- Copyright (C) 2009 Free Software Foundation, Inc.
+ Copyright (C) 2009-2012 Free Software Foundation, Inc.
This file is part of GDB.
#include "target.h"
#include "vec.h"
+#include "gdb_vecs.h"
+#include "registry.h"
struct target_ops;
struct bfd;
struct address_space;
struct program_space_data;
+typedef struct so_list *so_list_ptr;
+DEF_VEC_P (so_list_ptr);
+
/* A program space represents a symbolic view of an address space.
Roughly speaking, it holds all the data associated with a
non-running-yet program (main executable, main symbols), and when
to set breakpoints point at the wrong addresses. */
int executing_startup;
+ /* True if no breakpoints should be inserted in this program
+ space. */
+ int breakpoints_not_allowed;
+
/* The object file that the main symbol table was loaded from
(e.g. the argument to the "symbol-file" or "file" command). */
struct objfile *symfile_object_file;
/* All known objfiles are kept in a linked list. This points to
- the head of this list. */
+ the head of this list. */
struct objfile *objfiles;
/* The set of target sections matching the sections mapped into
solib.c. */
struct so_list *so_list;
+ /* Number of calls to solib_add. */
+ unsigned solib_add_generation;
+
+ /* When an solib is added, it is also added to this vector. This
+ is so we can properly report solib changes to the user. */
+ VEC (so_list_ptr) *added_solibs;
+
+ /* When an solib is removed, its name is added to this vector.
+ This is so we can properly report solib changes to the user. */
+ VEC (char_ptr) *deleted_solibs;
+
/* Per pspace data-pointers required by other GDB modules. */
- void **data;
- unsigned num_data;
+ REGISTRY_FIELDS;
};
/* The object file that the main symbol table was loaded from (e.g. the
#define symfile_objfile current_program_space->symfile_object_file
/* All known objfiles are kept in a linked list. This points to the
- root of this list. */
+ root of this list. */
#define object_files current_program_space->objfiles
/* The set of target sections matching the sections mapped into the
share an address space. */
extern struct address_space *maybe_new_address_space (void);
+/* Returns the integer address space id of ASPACE. */
+extern int address_space_num (struct address_space *aspace);
+
/* Update all program spaces matching to address spaces. The user may
have created several program spaces, and loaded executables into
them before connecting to the target interface that will create the
anymore. */
extern void prune_program_spaces (void);
+/* Reset saved solib data at the start of an solib event. This lets
+ us properly collect the data when calling solib_add, so it can then
+ later be printed. */
+extern void clear_program_space_solib_cache (struct program_space *);
+
/* Keep a registry of per-pspace data-pointers required by other GDB
modules. */
-extern const struct program_space_data *register_program_space_data (void);
-extern const struct program_space_data *register_program_space_data_with_cleanup
- (void (*cleanup) (struct program_space *, void *));
-extern void clear_program_space_data (struct program_space *pspace);
-extern void set_program_space_data (struct program_space *pspace,
- const struct program_space_data *data, void *value);
-extern void *program_space_data (struct program_space *pspace,
- const struct program_space_data *data);
+DECLARE_REGISTRY (program_space);
#endif