Convert init_ada_exception_catchpoint to a ctor
Currently, init_ada_exception_catchpoint is defined in breakpoint.c, I presume so it can call the static describe_other_breakpoints function. I think this is a dependency inversion. init_ada_exception_catchpoint, being code specific to Ada catchpoints, should be in ada-lang.c, and describe_other_breakpoints, a core function, should be exported. And then, we can convert init_ada_exception_catchpoint to an ada_catchpoint ctor. Change-Id: I07695572dabc5a75d3d3740fd9b95db1529406a1
This commit is contained in:
parent
8cd0bf5e7e
commit
bd21b6c9cf
3 changed files with 49 additions and 59 deletions
|
@ -12107,10 +12107,45 @@ static std::string ada_exception_catchpoint_cond_string
|
|||
struct ada_catchpoint : public base_breakpoint
|
||||
{
|
||||
ada_catchpoint (struct gdbarch *gdbarch_,
|
||||
enum ada_exception_catchpoint_kind kind)
|
||||
enum ada_exception_catchpoint_kind kind,
|
||||
struct symtab_and_line sal,
|
||||
const char *addr_string_,
|
||||
bool tempflag,
|
||||
bool enabled,
|
||||
bool from_tty)
|
||||
: base_breakpoint (gdbarch_, bp_catchpoint),
|
||||
m_kind (kind)
|
||||
{
|
||||
add_location (sal);
|
||||
|
||||
/* Unlike most base_breakpoint types, Ada catchpoints are
|
||||
pspace-specific. */
|
||||
gdb_assert (sal.pspace != nullptr);
|
||||
this->pspace = sal.pspace;
|
||||
|
||||
if (from_tty)
|
||||
{
|
||||
struct gdbarch *loc_gdbarch = get_sal_arch (sal);
|
||||
if (!loc_gdbarch)
|
||||
loc_gdbarch = gdbarch;
|
||||
|
||||
describe_other_breakpoints (loc_gdbarch,
|
||||
sal.pspace, sal.pc, sal.section, -1);
|
||||
/* FIXME: brobecker/2006-12-28: Actually, re-implement a special
|
||||
version for exception catchpoints, because two catchpoints
|
||||
used for different exception names will use the same address.
|
||||
In this case, a "breakpoint ... also set at..." warning is
|
||||
unproductive. Besides, the warning phrasing is also a bit
|
||||
inappropriate, we should use the word catchpoint, and tell
|
||||
the user what type of catchpoint it is. The above is good
|
||||
enough for now, though. */
|
||||
}
|
||||
|
||||
enable_state = enabled ? bp_enabled : bp_disabled;
|
||||
disposition = tempflag ? disp_del : disp_donttouch;
|
||||
location = string_to_event_location (&addr_string_,
|
||||
language_def (language_ada));
|
||||
language = language_ada;
|
||||
}
|
||||
|
||||
struct bp_location *allocate_location () override;
|
||||
|
@ -12759,9 +12794,9 @@ create_ada_exception_catchpoint (struct gdbarch *gdbarch,
|
|||
std::string addr_string;
|
||||
struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string);
|
||||
|
||||
std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (gdbarch, ex_kind));
|
||||
init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
|
||||
tempflag, disabled, from_tty);
|
||||
std::unique_ptr<ada_catchpoint> c
|
||||
(new ada_catchpoint (gdbarch, ex_kind, sal, addr_string.c_str (),
|
||||
tempflag, disabled, from_tty));
|
||||
c->excep_string = excep_string;
|
||||
create_excep_cond_exprs (c.get (), ex_kind);
|
||||
if (!cond_string.empty ())
|
||||
|
|
|
@ -130,10 +130,6 @@ static CORE_ADDR adjust_breakpoint_address (struct gdbarch *gdbarch,
|
|||
CORE_ADDR bpaddr,
|
||||
enum bptype bptype);
|
||||
|
||||
static void describe_other_breakpoints (struct gdbarch *,
|
||||
struct program_space *, CORE_ADDR,
|
||||
struct obj_section *, int);
|
||||
|
||||
static int watchpoint_locations_match (struct bp_location *loc1,
|
||||
struct bp_location *loc2);
|
||||
|
||||
|
@ -6862,11 +6858,9 @@ breakpoint_has_pc (struct breakpoint *b,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Print a message describing any user-breakpoints set at PC. This
|
||||
concerns with logical breakpoints, so we match program spaces, not
|
||||
address spaces. */
|
||||
/* See breakpoint.h. */
|
||||
|
||||
static void
|
||||
void
|
||||
describe_other_breakpoints (struct gdbarch *gdbarch,
|
||||
struct program_space *pspace, CORE_ADDR pc,
|
||||
struct obj_section *section, int thread)
|
||||
|
@ -10590,42 +10584,6 @@ until_break_command (const char *arg, int from_tty, int anywhere)
|
|||
proceed (-1, GDB_SIGNAL_DEFAULT);
|
||||
}
|
||||
|
||||
void
|
||||
init_ada_exception_breakpoint (struct breakpoint *b,
|
||||
struct gdbarch *gdbarch,
|
||||
struct symtab_and_line sal,
|
||||
const char *addr_string,
|
||||
int tempflag,
|
||||
int enabled,
|
||||
int from_tty)
|
||||
{
|
||||
if (from_tty)
|
||||
{
|
||||
struct gdbarch *loc_gdbarch = get_sal_arch (sal);
|
||||
if (!loc_gdbarch)
|
||||
loc_gdbarch = gdbarch;
|
||||
|
||||
describe_other_breakpoints (loc_gdbarch,
|
||||
sal.pspace, sal.pc, sal.section, -1);
|
||||
/* FIXME: brobecker/2006-12-28: Actually, re-implement a special
|
||||
version for exception catchpoints, because two catchpoints
|
||||
used for different exception names will use the same address.
|
||||
In this case, a "breakpoint ... also set at..." warning is
|
||||
unproductive. Besides, the warning phrasing is also a bit
|
||||
inappropriate, we should use the word catchpoint, and tell
|
||||
the user what type of catchpoint it is. The above is good
|
||||
enough for now, though. */
|
||||
}
|
||||
|
||||
init_raw_breakpoint (b, sal, bp_catchpoint);
|
||||
|
||||
b->enable_state = enabled ? bp_enabled : bp_disabled;
|
||||
b->disposition = tempflag ? disp_del : disp_donttouch;
|
||||
b->location = string_to_event_location (&addr_string,
|
||||
language_def (language_ada));
|
||||
b->language = language_ada;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Compare two breakpoints and return a strcmp-like result. */
|
||||
|
|
|
@ -1460,17 +1460,6 @@ extern void
|
|||
void *user_data_catch,
|
||||
void *user_data_tcatch);
|
||||
|
||||
/* Initialize a breakpoint struct for Ada exception catchpoints. */
|
||||
|
||||
extern void
|
||||
init_ada_exception_breakpoint (struct breakpoint *b,
|
||||
struct gdbarch *gdbarch,
|
||||
struct symtab_and_line sal,
|
||||
const char *addr_string,
|
||||
int tempflag,
|
||||
int enabled,
|
||||
int from_tty);
|
||||
|
||||
/* Add breakpoint B on the breakpoint list, and notify the user, the
|
||||
target and breakpoint_created observers of its existence. If
|
||||
INTERNAL is non-zero, the breakpoint number will be allocated from
|
||||
|
@ -1905,4 +1894,12 @@ extern void catch_exception_event (enum exception_event_kind ex_event,
|
|||
|
||||
extern void print_solib_event (bool is_catchpoint);
|
||||
|
||||
/* Print a message describing any user-breakpoints set at PC. This
|
||||
concerns with logical breakpoints, so we match program spaces, not
|
||||
address spaces. */
|
||||
|
||||
extern void describe_other_breakpoints (struct gdbarch *,
|
||||
struct program_space *, CORE_ADDR,
|
||||
struct obj_section *, int);
|
||||
|
||||
#endif /* !defined (BREAKPOINT_H) */
|
||||
|
|
Loading…
Add table
Reference in a new issue