mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
* breakpoint.c (check_duplicates): Use the breakpoint's type, not
its address, to decide whether it's a watchpoint or not. Zero is a valid code address. (update_breakpoints_after_exec): Admonishing comments. * breakpoint.h (struct breakpoint): Doc fixes.
This commit is contained in:
@ -1,5 +1,11 @@
|
|||||||
2001-05-05 Jim Blandy <jimb@redhat.com>
|
2001-05-05 Jim Blandy <jimb@redhat.com>
|
||||||
|
|
||||||
|
* breakpoint.c (check_duplicates): Use the breakpoint's type, not
|
||||||
|
its address, to decide whether it's a watchpoint or not. Zero
|
||||||
|
is a valid code address.
|
||||||
|
(update_breakpoints_after_exec): Admonishing comments.
|
||||||
|
* breakpoint.h (struct breakpoint): Doc fixes.
|
||||||
|
|
||||||
* breakpoint.c (check_duplicates): Take a breakpoint object as an
|
* breakpoint.c (check_duplicates): Take a breakpoint object as an
|
||||||
argument, rather than an address and section. All callers changed.
|
argument, rather than an address and section. All callers changed.
|
||||||
|
|
||||||
|
@ -1144,7 +1144,17 @@ update_breakpoints_after_exec (void)
|
|||||||
|
|
||||||
??rehrauer: Let's hope that merely clearing out this catchpoint's
|
??rehrauer: Let's hope that merely clearing out this catchpoint's
|
||||||
target address field, if any, is sufficient to have it be reset
|
target address field, if any, is sufficient to have it be reset
|
||||||
automagically. Certainly on HP-UX that's true. */
|
automagically. Certainly on HP-UX that's true.
|
||||||
|
|
||||||
|
Jim Blandy <jimb@redhat.com>: Actually, zero is a perfectly
|
||||||
|
valid code address on some platforms (like the mn10200 and
|
||||||
|
mn10300 simulators). We shouldn't assign any special
|
||||||
|
interpretation to a breakpoint with a zero address. And in
|
||||||
|
fact, GDB doesn't --- I can't see what that comment above is
|
||||||
|
talking about. As far as I can tell, setting the address of a
|
||||||
|
bp_catch_exec/bp_catch_vfork/bp_catch_fork breakpoint to zero
|
||||||
|
is meaningless, since those are implemented with HP-UX kernel
|
||||||
|
hackery, not by storing breakpoint instructions somewhere. */
|
||||||
if ((b->type == bp_catch_exec) ||
|
if ((b->type == bp_catch_exec) ||
|
||||||
(b->type == bp_catch_vfork) ||
|
(b->type == bp_catch_vfork) ||
|
||||||
(b->type == bp_catch_fork))
|
(b->type == bp_catch_fork))
|
||||||
@ -1195,7 +1205,13 @@ update_breakpoints_after_exec (void)
|
|||||||
|
|
||||||
/* If this breakpoint has survived the above battery of checks, then
|
/* If this breakpoint has survived the above battery of checks, then
|
||||||
it must have a symbolic address. Be sure that it gets reevaluated
|
it must have a symbolic address. Be sure that it gets reevaluated
|
||||||
to a target address, rather than reusing the old evaluation. */
|
to a target address, rather than reusing the old evaluation.
|
||||||
|
|
||||||
|
Jim Blandy <jimb@redhat.com>: As explained above in the comment
|
||||||
|
for bp_catch_exec and friends, I'm pretty sure this is entirely
|
||||||
|
unnecessary. A call to breakpoint_re_set_one always recomputes
|
||||||
|
the breakpoint's address from scratch, or deletes it if it can't.
|
||||||
|
So I think this assignment could be deleted without effect. */
|
||||||
b->address = (CORE_ADDR) NULL;
|
b->address = (CORE_ADDR) NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3734,7 +3750,11 @@ check_duplicates (struct breakpoint *bpt)
|
|||||||
CORE_ADDR address = bpt->address;
|
CORE_ADDR address = bpt->address;
|
||||||
asection *section = bpt->section;
|
asection *section = bpt->section;
|
||||||
|
|
||||||
if (address == 0) /* Watchpoints are uninteresting */
|
/* Watchpoints are uninteresting. */
|
||||||
|
if (bpt->type == bp_watchpoint
|
||||||
|
|| bpt->type == bp_hardware_watchpoint
|
||||||
|
|| bpt->type == bp_read_watchpoint
|
||||||
|
|| bpt->type == bp_access_watchpoint)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ALL_BREAKPOINTS (b)
|
ALL_BREAKPOINTS (b)
|
||||||
|
@ -193,16 +193,17 @@ struct breakpoint
|
|||||||
/* Number assigned to distinguish breakpoints. */
|
/* Number assigned to distinguish breakpoints. */
|
||||||
int number;
|
int number;
|
||||||
|
|
||||||
/* Address to break at, or NULL if not a breakpoint. */
|
/* Address to break at.
|
||||||
|
Note that zero is a perfectly valid code address on some
|
||||||
|
platforms (for example, the mn10200 and mn10300 simulators).
|
||||||
|
NULL is not a special value for this field. */
|
||||||
CORE_ADDR address;
|
CORE_ADDR address;
|
||||||
|
|
||||||
/* Line number of this address. Only matters if address is
|
/* Line number of this address. */
|
||||||
non-NULL. */
|
|
||||||
|
|
||||||
int line_number;
|
int line_number;
|
||||||
|
|
||||||
/* Source file name of this address. Only matters if address is
|
/* Source file name of this address. */
|
||||||
non-NULL. */
|
|
||||||
|
|
||||||
char *source_file;
|
char *source_file;
|
||||||
|
|
||||||
@ -217,11 +218,10 @@ struct breakpoint
|
|||||||
control of the target insert_breakpoint and remove_breakpoint routines.
|
control of the target insert_breakpoint and remove_breakpoint routines.
|
||||||
No other code should assume anything about the value(s) here. */
|
No other code should assume anything about the value(s) here. */
|
||||||
char shadow_contents[BREAKPOINT_MAX];
|
char shadow_contents[BREAKPOINT_MAX];
|
||||||
/* Nonzero if this breakpoint is now inserted. Only matters if address
|
/* Nonzero if this breakpoint is now inserted. */
|
||||||
is non-NULL. */
|
|
||||||
char inserted;
|
char inserted;
|
||||||
/* Nonzero if this is not the first breakpoint in the list
|
/* Nonzero if this is not the first breakpoint in the list
|
||||||
for the given address. Only matters if address is non-NULL. */
|
for the given address. */
|
||||||
char duplicate;
|
char duplicate;
|
||||||
/* Chain of command lines to execute when this breakpoint is hit. */
|
/* Chain of command lines to execute when this breakpoint is hit. */
|
||||||
struct command_line *commands;
|
struct command_line *commands;
|
||||||
@ -231,8 +231,7 @@ struct breakpoint
|
|||||||
/* Conditional. Break only if this expression's value is nonzero. */
|
/* Conditional. Break only if this expression's value is nonzero. */
|
||||||
struct expression *cond;
|
struct expression *cond;
|
||||||
|
|
||||||
/* String we used to set the breakpoint (malloc'd). Only matters if
|
/* String we used to set the breakpoint (malloc'd). */
|
||||||
address is non-NULL. */
|
|
||||||
char *addr_string;
|
char *addr_string;
|
||||||
/* Language we used to set the breakpoint. */
|
/* Language we used to set the breakpoint. */
|
||||||
enum language language;
|
enum language language;
|
||||||
|
Reference in New Issue
Block a user