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:
parent
508094de01
commit
e62c965a4f
5 changed files with 84 additions and 64 deletions
|
@ -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>
|
||||
|
||||
* gdbarch.sh: Add comment documenting the target_gdbarch global.
|
||||
|
|
129
gdb/breakpoint.c
129
gdb/breakpoint.c
|
@ -150,8 +150,6 @@ static int watchpoint_check (void *);
|
|||
|
||||
static void maintenance_info_breakpoints (char *, int);
|
||||
|
||||
static void create_overlay_event_breakpoint (char *);
|
||||
|
||||
static int hw_breakpoint_used_count (void);
|
||||
|
||||
static int hw_watchpoint_used_count (enum bptype, int *);
|
||||
|
@ -1459,12 +1457,58 @@ reattach_breakpoints (int pid)
|
|||
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
|
||||
update_breakpoints_after_exec (void)
|
||||
{
|
||||
struct breakpoint *b;
|
||||
struct breakpoint *temp;
|
||||
struct bp_location *bploc;
|
||||
struct objfile *objfile;
|
||||
|
||||
/* We're about to delete breakpoints from GDB's lists. If the
|
||||
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? */
|
||||
create_overlay_event_breakpoint ("_ovly_debug_event");
|
||||
ALL_OBJFILES (objfile)
|
||||
create_overlay_event_breakpoint ("_ovly_debug_event", objfile);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -4380,26 +4425,6 @@ make_breakpoint_permanent (struct breakpoint *b)
|
|||
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
|
||||
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
|
||||
enable_overlay_breakpoints (void)
|
||||
{
|
||||
|
@ -7723,9 +7714,13 @@ breakpoint_re_set_one (void *bint)
|
|||
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
|
||||
breakpoint_re_set (void)
|
||||
breakpoint_re_set_objfile (struct objfile *objfile)
|
||||
{
|
||||
struct breakpoint *b, *temp;
|
||||
enum language save_language;
|
||||
|
@ -7744,8 +7739,20 @@ breakpoint_re_set (void)
|
|||
}
|
||||
set_language (save_language);
|
||||
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:
|
||||
|
|
|
@ -687,7 +687,7 @@ extern int breakpoint_thread_match (CORE_ADDR, ptid_t);
|
|||
extern void until_break_command (char *, int, int);
|
||||
|
||||
extern void breakpoint_re_set (void);
|
||||
|
||||
extern void breakpoint_re_set_objfile (struct objfile *);
|
||||
extern void breakpoint_re_set_thread (struct breakpoint *);
|
||||
|
||||
extern struct breakpoint *set_momentary_breakpoint
|
||||
|
|
|
@ -674,7 +674,7 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
|
|||
}
|
||||
|
||||
/* 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
|
||||
|
|
|
@ -923,7 +923,7 @@ new_symfile_objfile (struct objfile *objfile, int mainline, int verbo)
|
|||
}
|
||||
else
|
||||
{
|
||||
breakpoint_re_set ();
|
||||
breakpoint_re_set_objfile (objfile);
|
||||
}
|
||||
|
||||
/* We're done reading the symbol file; finish off complaints. */
|
||||
|
|
Loading…
Reference in a new issue