2009-05-14 Paul Pluzhnikov <ppluzhnikov@google.com>

* breakpoint.h: Add breakpoint_re_set_objfile prototype.
	* breakpoint.c (create_overlay_event_breakpoint): Renamed
	from create_overlay_event_breakpoint_1, old
	create_overlay_event_breakpoint deleted.
	(breakpoint_re_set_objfile): Don't rescan all objfiles
	unnecessarily.
	(breakpoint_re_set): New function.
	* symfile.c (new_symfile_objfile): Call breakpoint_re_set_objfile
	instead of breakpoint_re_set.
	* objfiles.c (objfile_relocate): Likewise.
This commit is contained in:
Paul Pluzhnikov 2009-05-14 23:33:08 +00:00
parent 508094de01
commit e62c965a4f
5 changed files with 84 additions and 64 deletions

View File

@ -1,3 +1,16 @@
2009-05-14 Paul Pluzhnikov <ppluzhnikov@google.com>
* breakpoint.h: Add breakpoint_re_set_objfile prototype.
* breakpoint.c (create_overlay_event_breakpoint): Renamed
from create_overlay_event_breakpoint_1, old
create_overlay_event_breakpoint deleted.
(breakpoint_re_set_objfile): Don't rescan all objfiles
unnecessarily.
(breakpoint_re_set): New function.
* symfile.c (new_symfile_objfile): Call breakpoint_re_set_objfile
instead of breakpoint_re_set.
* objfiles.c (objfile_relocate): Likewise.
2009-05-14 Joel Brobecker <brobecker@adacore.com> 2009-05-14 Joel Brobecker <brobecker@adacore.com>
* gdbarch.sh: Add comment documenting the target_gdbarch global. * gdbarch.sh: Add comment documenting the target_gdbarch global.

View File

@ -150,8 +150,6 @@ static int watchpoint_check (void *);
static void maintenance_info_breakpoints (char *, int); static void maintenance_info_breakpoints (char *, int);
static void create_overlay_event_breakpoint (char *);
static int hw_breakpoint_used_count (void); static int hw_breakpoint_used_count (void);
static int hw_watchpoint_used_count (enum bptype, int *); static int hw_watchpoint_used_count (enum bptype, int *);
@ -1459,12 +1457,58 @@ reattach_breakpoints (int pid)
return 0; return 0;
} }
static struct breakpoint *
create_internal_breakpoint (CORE_ADDR address, enum bptype type)
{
static int internal_breakpoint_number = -1;
struct symtab_and_line sal;
struct breakpoint *b;
init_sal (&sal); /* initialize to zeroes */
sal.pc = address;
sal.section = find_pc_overlay (sal.pc);
b = set_raw_breakpoint (sal, type);
b->number = internal_breakpoint_number--;
b->disposition = disp_donttouch;
return b;
}
static void
create_overlay_event_breakpoint (char *func_name, struct objfile *objfile)
{
struct breakpoint *b;
struct minimal_symbol *m;
if ((m = lookup_minimal_symbol_text (func_name, objfile)) == NULL)
return;
b = create_internal_breakpoint (SYMBOL_VALUE_ADDRESS (m),
bp_overlay_event);
b->addr_string = xstrdup (func_name);
if (overlay_debugging == ovly_auto)
{
b->enable_state = bp_enabled;
overlay_events_enabled = 1;
}
else
{
b->enable_state = bp_disabled;
overlay_events_enabled = 0;
}
update_global_location_list (1);
}
void void
update_breakpoints_after_exec (void) update_breakpoints_after_exec (void)
{ {
struct breakpoint *b; struct breakpoint *b;
struct breakpoint *temp; struct breakpoint *temp;
struct bp_location *bploc; struct bp_location *bploc;
struct objfile *objfile;
/* We're about to delete breakpoints from GDB's lists. If the /* We're about to delete breakpoints from GDB's lists. If the
INSERTED flag is true, GDB will try to lift the breakpoints by INSERTED flag is true, GDB will try to lift the breakpoints by
@ -1559,7 +1603,8 @@ update_breakpoints_after_exec (void)
} }
} }
/* FIXME what about longjmp breakpoints? Re-create them here? */ /* FIXME what about longjmp breakpoints? Re-create them here? */
create_overlay_event_breakpoint ("_ovly_debug_event"); ALL_OBJFILES (objfile)
create_overlay_event_breakpoint ("_ovly_debug_event", objfile);
} }
int int
@ -4380,26 +4425,6 @@ make_breakpoint_permanent (struct breakpoint *b)
bl->inserted = 1; bl->inserted = 1;
} }
static struct breakpoint *
create_internal_breakpoint (CORE_ADDR address, enum bptype type)
{
static int internal_breakpoint_number = -1;
struct symtab_and_line sal;
struct breakpoint *b;
init_sal (&sal); /* initialize to zeroes */
sal.pc = address;
sal.section = find_pc_overlay (sal.pc);
b = set_raw_breakpoint (sal, type);
b->number = internal_breakpoint_number--;
b->disposition = disp_donttouch;
return b;
}
static void static void
create_longjmp_breakpoint (char *func_name) create_longjmp_breakpoint (char *func_name)
{ {
@ -4441,40 +4466,6 @@ delete_longjmp_breakpoint (int thread)
} }
} }
static void
create_overlay_event_breakpoint_1 (char *func_name, struct objfile *objfile)
{
struct breakpoint *b;
struct minimal_symbol *m;
if ((m = lookup_minimal_symbol_text (func_name, objfile)) == NULL)
return;
b = create_internal_breakpoint (SYMBOL_VALUE_ADDRESS (m),
bp_overlay_event);
b->addr_string = xstrdup (func_name);
if (overlay_debugging == ovly_auto)
{
b->enable_state = bp_enabled;
overlay_events_enabled = 1;
}
else
{
b->enable_state = bp_disabled;
overlay_events_enabled = 0;
}
update_global_location_list (1);
}
static void
create_overlay_event_breakpoint (char *func_name)
{
struct objfile *objfile;
ALL_OBJFILES (objfile)
create_overlay_event_breakpoint_1 (func_name, objfile);
}
void void
enable_overlay_breakpoints (void) enable_overlay_breakpoints (void)
{ {
@ -7723,9 +7714,13 @@ breakpoint_re_set_one (void *bint)
return 0; return 0;
} }
/* Re-set all breakpoints after symbols have been re-loaded. */ /* Re-set all breakpoints after symbols have been re-loaded.
If OBJFILE is non-null, create overlay break point only in OBJFILE
(speed optimization). Otherwise rescan all loaded objfiles. */
void void
breakpoint_re_set (void) breakpoint_re_set_objfile (struct objfile *objfile)
{ {
struct breakpoint *b, *temp; struct breakpoint *b, *temp;
enum language save_language; enum language save_language;
@ -7745,7 +7740,19 @@ breakpoint_re_set (void)
set_language (save_language); set_language (save_language);
input_radix = save_input_radix; input_radix = save_input_radix;
create_overlay_event_breakpoint ("_ovly_debug_event"); if (objfile == NULL)
ALL_OBJFILES (objfile)
create_overlay_event_breakpoint ("_ovly_debug_event", objfile);
else
create_overlay_event_breakpoint ("_ovly_debug_event", objfile);
}
/* Re-set all breakpoints after symbols have been re-loaded. */
void
breakpoint_re_set (void)
{
breakpoint_re_set_objfile (NULL);
} }
/* Reset the thread number of this breakpoint: /* Reset the thread number of this breakpoint:

View File

@ -687,7 +687,7 @@ extern int breakpoint_thread_match (CORE_ADDR, ptid_t);
extern void until_break_command (char *, int, int); extern void until_break_command (char *, int, int);
extern void breakpoint_re_set (void); extern void breakpoint_re_set (void);
extern void breakpoint_re_set_objfile (struct objfile *);
extern void breakpoint_re_set_thread (struct breakpoint *); extern void breakpoint_re_set_thread (struct breakpoint *);
extern struct breakpoint *set_momentary_breakpoint extern struct breakpoint *set_momentary_breakpoint

View File

@ -674,7 +674,7 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
} }
/* Relocate breakpoints as necessary, after things are relocated. */ /* Relocate breakpoints as necessary, after things are relocated. */
breakpoint_re_set (); breakpoint_re_set_objfile (objfile);
} }
/* Many places in gdb want to test just to see if we have any partial /* Many places in gdb want to test just to see if we have any partial

View File

@ -923,7 +923,7 @@ new_symfile_objfile (struct objfile *objfile, int mainline, int verbo)
} }
else else
{ {
breakpoint_re_set (); breakpoint_re_set_objfile (objfile);
} }
/* We're done reading the symbol file; finish off complaints. */ /* We're done reading the symbol file; finish off complaints. */