2013-06-10 13:04:37 +00:00
|
|
|
|
http://sourceware.org/ml/gdb-cvs/2013-06/msg00013.html
|
2013-05-19 16:44:05 +00:00
|
|
|
|
|
2013-06-10 13:04:37 +00:00
|
|
|
|
### src/gdb/ChangeLog 2013/06/04 12:50:20 1.15681
|
|
|
|
|
### src/gdb/ChangeLog 2013/06/04 12:53:33 1.15682
|
|
|
|
|
## -1,5 +1,24 @@
|
|
|
|
|
2013-06-04 Gary Benson <gbenson@redhat.com>
|
|
|
|
|
|
|
|
|
|
+ * objfiles.h (inhibit_section_map_updates): New function
|
|
|
|
|
+ declaration.
|
|
|
|
|
+ (resume_section_map_updates): Likewise.
|
|
|
|
|
+ (resume_section_map_updates_cleanup): Likewise.
|
|
|
|
|
+ * objfiles.c (objfile_pspace_info): Removed field
|
|
|
|
|
+ "objfiles_changed_p". New fields "new_objfiles_available",
|
|
|
|
|
+ "section_map_dirty" and "inhibit_updates".
|
|
|
|
|
+ (allocate_objfile): Set new_objfiles_available.
|
|
|
|
|
+ (free_objfile): Set section_map_dirty.
|
|
|
|
|
+ (objfile_relocate1): Likewise.
|
|
|
|
|
+ (in_plt_section): Likewise.
|
|
|
|
|
+ (find_pc_section): Update the conditions under which the
|
|
|
|
|
+ section map will be updated.
|
|
|
|
|
+ (inhibit_section_map_updates): New function.
|
|
|
|
|
+ (resume_section_map_updates): Likewise.
|
|
|
|
|
+ (resume_section_map_updates_cleanup): Likewise.
|
2013-05-19 16:44:05 +00:00
|
|
|
|
+
|
2013-06-10 13:04:37 +00:00
|
|
|
|
+2013-06-04 Gary Benson <gbenson@redhat.com>
|
2013-05-19 16:44:05 +00:00
|
|
|
|
+
|
2013-06-10 13:04:37 +00:00
|
|
|
|
* probe.h (get_probe_argument_count): New declaration.
|
|
|
|
|
(evaluate_probe_argument): Likewise.
|
|
|
|
|
* probe.c (get_probe_argument_count): New function.
|
|
|
|
|
--- src/gdb/objfiles.c 2013/05/06 19:15:17 1.160
|
|
|
|
|
+++ src/gdb/objfiles.c 2013/06/04 12:53:34 1.161
|
|
|
|
|
@@ -67,9 +67,18 @@
|
2013-05-19 16:44:05 +00:00
|
|
|
|
|
|
|
|
|
struct objfile_pspace_info
|
|
|
|
|
{
|
|
|
|
|
- int objfiles_changed_p;
|
|
|
|
|
struct obj_section **sections;
|
|
|
|
|
int num_sections;
|
|
|
|
|
+
|
|
|
|
|
+ /* Nonzero if object files have been added since the section map
|
|
|
|
|
+ was last updated. */
|
|
|
|
|
+ int new_objfiles_available;
|
|
|
|
|
+
|
|
|
|
|
+ /* Nonzero if the section map MUST be updated before use. */
|
|
|
|
|
+ int section_map_dirty;
|
|
|
|
|
+
|
|
|
|
|
+ /* Nonzero if section map updates should be inhibited if possible. */
|
|
|
|
|
+ int inhibit_updates;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Per-program-space data key. */
|
2013-06-10 13:04:37 +00:00
|
|
|
|
@@ -317,7 +326,7 @@
|
2013-05-19 16:44:05 +00:00
|
|
|
|
objfile->flags |= flags;
|
|
|
|
|
|
|
|
|
|
/* Rebuild section map next time we need it. */
|
|
|
|
|
- get_objfile_pspace_data (objfile->pspace)->objfiles_changed_p = 1;
|
|
|
|
|
+ get_objfile_pspace_data (objfile->pspace)->new_objfiles_available = 1;
|
|
|
|
|
|
|
|
|
|
return objfile;
|
|
|
|
|
}
|
2013-06-10 13:04:37 +00:00
|
|
|
|
@@ -646,7 +655,7 @@
|
2013-05-19 16:44:05 +00:00
|
|
|
|
obstack_free (&objfile->objfile_obstack, 0);
|
|
|
|
|
|
|
|
|
|
/* Rebuild section map next time we need it. */
|
|
|
|
|
- get_objfile_pspace_data (objfile->pspace)->objfiles_changed_p = 1;
|
|
|
|
|
+ get_objfile_pspace_data (objfile->pspace)->section_map_dirty = 1;
|
|
|
|
|
|
|
|
|
|
xfree (objfile);
|
|
|
|
|
}
|
2013-06-10 13:04:37 +00:00
|
|
|
|
@@ -826,7 +835,7 @@
|
2013-05-19 16:44:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Rebuild section map next time we need it. */
|
|
|
|
|
- get_objfile_pspace_data (objfile->pspace)->objfiles_changed_p = 1;
|
|
|
|
|
+ get_objfile_pspace_data (objfile->pspace)->section_map_dirty = 1;
|
|
|
|
|
|
|
|
|
|
/* Update the table in exec_ops, used to read memory. */
|
|
|
|
|
ALL_OBJFILE_OSECTIONS (objfile, s)
|
2013-06-10 13:04:37 +00:00
|
|
|
|
@@ -1291,11 +1300,14 @@
|
2013-05-19 16:44:05 +00:00
|
|
|
|
update_section_map (struct program_space *pspace,
|
|
|
|
|
struct obj_section ***pmap, int *pmap_size)
|
|
|
|
|
{
|
|
|
|
|
+ struct objfile_pspace_info *pspace_info;
|
|
|
|
|
int alloc_size, map_size, i;
|
|
|
|
|
struct obj_section *s, **map;
|
|
|
|
|
struct objfile *objfile;
|
|
|
|
|
|
|
|
|
|
- gdb_assert (get_objfile_pspace_data (pspace)->objfiles_changed_p != 0);
|
2013-06-10 13:04:37 +00:00
|
|
|
|
+ pspace_info = get_objfile_pspace_data (pspace);
|
2013-05-19 16:44:05 +00:00
|
|
|
|
+ gdb_assert (pspace_info->section_map_dirty != 0
|
|
|
|
|
+ || pspace_info->new_objfiles_available != 0);
|
|
|
|
|
|
|
|
|
|
map = *pmap;
|
|
|
|
|
xfree (map);
|
2013-06-10 13:04:37 +00:00
|
|
|
|
@@ -1365,7 +1377,9 @@
|
2013-05-19 16:44:05 +00:00
|
|
|
|
return s;
|
|
|
|
|
|
|
|
|
|
pspace_info = get_objfile_pspace_data (current_program_space);
|
|
|
|
|
- if (pspace_info->objfiles_changed_p != 0)
|
|
|
|
|
+ if (pspace_info->section_map_dirty
|
|
|
|
|
+ || (pspace_info->new_objfiles_available
|
|
|
|
|
+ && !pspace_info->inhibit_updates))
|
|
|
|
|
{
|
|
|
|
|
update_section_map (current_program_space,
|
|
|
|
|
&pspace_info->sections,
|
2013-06-10 13:04:37 +00:00
|
|
|
|
@@ -1373,7 +1387,8 @@
|
2013-05-19 16:44:05 +00:00
|
|
|
|
|
|
|
|
|
/* Don't need updates to section map until objfiles are added,
|
|
|
|
|
removed or relocated. */
|
|
|
|
|
- pspace_info->objfiles_changed_p = 0;
|
|
|
|
|
+ pspace_info->new_objfiles_available = 0;
|
|
|
|
|
+ pspace_info->section_map_dirty = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* The C standard (ISO/IEC 9899:TC2) requires the BASE argument to
|
2013-06-10 13:04:37 +00:00
|
|
|
|
@@ -1414,14 +1429,38 @@
|
2013-05-19 16:44:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-/* Set objfiles_changed_p so section map will be rebuilt next time it
|
|
|
|
|
+/* Set section_map_dirty so section map will be rebuilt next time it
|
|
|
|
|
is used. Called by reread_symbols. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
objfiles_changed (void)
|
|
|
|
|
{
|
|
|
|
|
/* Rebuild section map next time we need it. */
|
|
|
|
|
- get_objfile_pspace_data (current_program_space)->objfiles_changed_p = 1;
|
|
|
|
|
+ get_objfile_pspace_data (current_program_space)->section_map_dirty = 1;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/* See comments in objfiles.h. */
|
|
|
|
|
+
|
|
|
|
|
+void
|
2013-06-10 13:04:37 +00:00
|
|
|
|
+inhibit_section_map_updates (struct program_space *pspace)
|
2013-05-19 16:44:05 +00:00
|
|
|
|
+{
|
2013-06-10 13:04:37 +00:00
|
|
|
|
+ get_objfile_pspace_data (pspace)->inhibit_updates = 1;
|
2013-05-19 16:44:05 +00:00
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/* See comments in objfiles.h. */
|
|
|
|
|
+
|
|
|
|
|
+void
|
2013-06-10 13:04:37 +00:00
|
|
|
|
+resume_section_map_updates (struct program_space *pspace)
|
2013-05-19 16:44:05 +00:00
|
|
|
|
+{
|
2013-06-10 13:04:37 +00:00
|
|
|
|
+ get_objfile_pspace_data (pspace)->inhibit_updates = 0;
|
2013-05-19 16:44:05 +00:00
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/* See comments in objfiles.h. */
|
|
|
|
|
+
|
|
|
|
|
+void
|
|
|
|
|
+resume_section_map_updates_cleanup (void *arg)
|
|
|
|
|
+{
|
2013-06-10 13:04:37 +00:00
|
|
|
|
+ resume_section_map_updates (arg);
|
2013-05-19 16:44:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* The default implementation for the "iterate_over_objfiles_in_search_order"
|
2013-06-10 13:04:37 +00:00
|
|
|
|
--- src/gdb/objfiles.h 2013/05/06 19:15:17 1.106
|
|
|
|
|
+++ src/gdb/objfiles.h 2013/06/04 12:53:34 1.107
|
|
|
|
|
@@ -501,6 +501,22 @@
|
|
|
|
|
modules. */
|
|
|
|
|
DECLARE_REGISTRY(objfile);
|
|
|
|
|
|
|
|
|
|
+/* In normal use, the section map will be rebuilt by find_pc_section
|
|
|
|
|
+ if objfiles have been added, removed or relocated since it was last
|
|
|
|
|
+ called. Calling inhibit_section_map_updates will inhibit this
|
|
|
|
|
+ behavior until resume_section_map_updates is called. If you call
|
|
|
|
|
+ inhibit_section_map_updates you must ensure that every call to
|
|
|
|
|
+ find_pc_section in the inhibited region relates to a section that
|
|
|
|
|
+ is already in the section map and has not since been removed or
|
|
|
|
|
+ relocated. */
|
|
|
|
|
+extern void inhibit_section_map_updates (struct program_space *pspace);
|
|
|
|
|
+
|
|
|
|
|
+/* Resume automatically rebuilding the section map as required. */
|
|
|
|
|
+extern void resume_section_map_updates (struct program_space *pspace);
|
|
|
|
|
+
|
|
|
|
|
+/* Version of the above suitable for use as a cleanup. */
|
|
|
|
|
+extern void resume_section_map_updates_cleanup (void *arg);
|
|
|
|
|
+
|
|
|
|
|
extern void default_iterate_over_objfiles_in_search_order
|
|
|
|
|
(struct gdbarch *gdbarch,
|
|
|
|
|
iterate_over_objfiles_in_search_order_cb_ftype *cb,
|