diff options
author | Yao Qi <yao@codesourcery.com> | 2011-11-14 03:01:01 +0000 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2011-11-14 03:01:01 +0000 |
commit | 3742cc8b4f7c8bd53a9ec513dd52189fb50c1b69 (patch) | |
tree | 04b27ed6d54060fdd3601c4bcc0fe21a63400f52 /gdb/breakpoint.c | |
parent | 8c19ceefadca03a06cbccd909b77c2b68ff47a9e (diff) | |
download | gdb-3742cc8b4f7c8bd53a9ec513dd52189fb50c1b69.zip gdb-3742cc8b4f7c8bd53a9ec513dd52189fb50c1b69.tar.gz gdb-3742cc8b4f7c8bd53a9ec513dd52189fb50c1b69.tar.bz2 |
* breakpoint.c (init_raw_breakpoint): Call
add_location_to_breakpoint to replace duplicated code.
(add_location_to_breakpoint): Adjust the breakpoint's
address prior to allocating a location.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r-- | gdb/breakpoint.c | 52 |
1 files changed, 21 insertions, 31 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index b78b011..931f433 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -111,6 +111,9 @@ static void mention (struct breakpoint *); static struct breakpoint *set_raw_breakpoint_without_location (struct gdbarch *, enum bptype, const struct breakpoint_ops *); +static struct bp_location *add_location_to_breakpoint (struct breakpoint *, + const struct symtab_and_line *); + /* This function is used in gdbtk sources and thus can not be made static. */ struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch, @@ -5763,33 +5766,13 @@ init_raw_breakpoint (struct breakpoint *b, struct gdbarch *gdbarch, struct symtab_and_line sal, enum bptype bptype, const struct breakpoint_ops *ops) { - CORE_ADDR adjusted_address; - struct gdbarch *loc_gdbarch; - init_raw_breakpoint_without_location (b, gdbarch, bptype, ops); - loc_gdbarch = get_sal_arch (sal); - if (!loc_gdbarch) - loc_gdbarch = b->gdbarch; + add_location_to_breakpoint (b, &sal); if (bptype != bp_catchpoint) gdb_assert (sal.pspace != NULL); - /* Adjust the breakpoint's address prior to allocating a location. - Once we call allocate_bp_location(), that mostly uninitialized - location will be placed on the location chain. Adjustment of the - breakpoint may cause target_read_memory() to be called and we do - not want its scan of the location chain to find a breakpoint and - location that's only been partially initialized. */ - adjusted_address = adjust_breakpoint_address (loc_gdbarch, - sal.pc, b->type); - - b->loc = allocate_bp_location (b); - b->loc->gdbarch = loc_gdbarch; - b->loc->requested_address = sal.pc; - b->loc->address = adjusted_address; - b->loc->pspace = sal.pspace; - /* Store the program space that was used to set the breakpoint, for breakpoint resetting. */ b->pspace = sal.pspace; @@ -5798,12 +5781,8 @@ init_raw_breakpoint (struct breakpoint *b, struct gdbarch *gdbarch, b->source_file = NULL; else b->source_file = xstrdup (sal.symtab->filename); - b->loc->section = sal.section; b->line_number = sal.line; - set_breakpoint_location_function (b->loc, - sal.explicit_pc || sal.explicit_line); - breakpoints_changed (); } @@ -7097,21 +7076,32 @@ add_location_to_breakpoint (struct breakpoint *b, const struct symtab_and_line *sal) { struct bp_location *loc, **tmp; + CORE_ADDR adjusted_address; + struct gdbarch *loc_gdbarch = get_sal_arch (*sal); + + if (loc_gdbarch == NULL) + loc_gdbarch = b->gdbarch; + + /* Adjust the breakpoint's address prior to allocating a location. + Once we call allocate_bp_location(), that mostly uninitialized + location will be placed on the location chain. Adjustment of the + breakpoint may cause target_read_memory() to be called and we do + not want its scan of the location chain to find a breakpoint and + location that's only been partially initialized. */ + adjusted_address = adjust_breakpoint_address (loc_gdbarch, + sal->pc, b->type); loc = allocate_bp_location (b); for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next)) ; *tmp = loc; - loc->gdbarch = get_sal_arch (*sal); - if (!loc->gdbarch) - loc->gdbarch = b->gdbarch; + loc->requested_address = sal->pc; - loc->address = adjust_breakpoint_address (loc->gdbarch, - loc->requested_address, b->type); + loc->address = adjusted_address; loc->pspace = sal->pspace; gdb_assert (loc->pspace != NULL); loc->section = sal->section; - + loc->gdbarch = loc_gdbarch; set_breakpoint_location_function (loc, sal->explicit_pc || sal->explicit_line); return loc; |