aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog15
-rw-r--r--gdb/breakpoint.c158
2 files changed, 123 insertions, 50 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1c5ef95..545b3d2 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,18 @@
+2011-06-22 Pedro Alves <pedro@codesourcery.com>
+
+ * breakpoint.c (add_to_breakpoint_chain)
+ (init_raw_breakpoint_without_location): New functions, factored
+ out from ...
+ (set_raw_breakpoint_without_location): ... this one.
+ (init_raw_breakpoint): New function, factored out from
+ set_raw_breakpoint and adjusted to use
+ init_raw_breakpoint_without_location.
+ (set_raw_breakpoint): Adjust.
+ (init_catchpoint): New function, factored out from
+ create_catchpoint_without_mention and adjusted to use
+ init_raw_breakpoint.
+ (create_catchpoint_without_mention): Adjust.
+
2011-06-22 Tom Tromey <tromey@redhat.com>
* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_convert>: Treat type
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 3281748..fd5890c 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -5785,18 +5785,34 @@ decref_bp_location (struct bp_location **blp)
*blp = NULL;
}
-/* Helper to set_raw_breakpoint below. Creates a breakpoint that has
- type BPTYPE and has no locations as yet. */
-/* This function is used in gdbtk sources and thus can not be made
- static. */
+/* Add breakpoint B at the end of the global breakpoint chain. */
-static struct breakpoint *
-set_raw_breakpoint_without_location (struct gdbarch *gdbarch,
- enum bptype bptype)
+static void
+add_to_breakpoint_chain (struct breakpoint *b)
{
- struct breakpoint *b, *b1;
+ struct breakpoint *b1;
- b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
+ /* Add this breakpoint to the end of the chain so that a list of
+ breakpoints will come out in order of increasing numbers. */
+
+ b1 = breakpoint_chain;
+ if (b1 == 0)
+ breakpoint_chain = b;
+ else
+ {
+ while (b1->next)
+ b1 = b1->next;
+ b1->next = b;
+ }
+}
+
+/* Initializes breakpoint B with type BPTYPE and no locations yet. */
+
+static void
+init_raw_breakpoint_without_location (struct breakpoint *b,
+ struct gdbarch *gdbarch,
+ enum bptype bptype)
+{
memset (b, 0, sizeof (*b));
b->type = bptype;
@@ -5818,18 +5834,22 @@ set_raw_breakpoint_without_location (struct gdbarch *gdbarch,
b->py_bp_object = NULL;
b->related_breakpoint = b;
- /* Add this breakpoint to the end of the chain so that a list of
- breakpoints will come out in order of increasing numbers. */
+ add_to_breakpoint_chain (b);
+}
+
+/* Helper to set_raw_breakpoint below. Creates a breakpoint
+ that has type BPTYPE and has no locations as yet. */
+/* This function is used in gdbtk sources and thus can not be made
+ static. */
+
+static struct breakpoint *
+set_raw_breakpoint_without_location (struct gdbarch *gdbarch,
+ enum bptype bptype)
+{
+ struct breakpoint *b = XNEW (struct breakpoint);
+
+ init_raw_breakpoint_without_location (b, gdbarch, bptype);
- b1 = breakpoint_chain;
- if (b1 == 0)
- breakpoint_chain = b;
- else
- {
- while (b1->next)
- b1 = b1->next;
- b1->next = b;
- }
return b;
}
@@ -5890,30 +5910,29 @@ get_sal_arch (struct symtab_and_line sal)
return NULL;
}
-/* set_raw_breakpoint is a low level routine for allocating and
- partially initializing a breakpoint of type BPTYPE. The newly
- created breakpoint's address, section, source file name, and line
- number are provided by SAL. The newly created and partially
- initialized breakpoint is added to the breakpoint chain and
- is also returned as the value of this function.
+/* Low level routine for partially initializing a breakpoint of type
+ BPTYPE. The newly created breakpoint's address, section, source
+ file name, and line number are provided by SAL. The newly created
+ and partially initialized breakpoint is added to the breakpoint
+ chain.
It is expected that the caller will complete the initialization of
the newly created breakpoint struct as well as output any status
information regarding the creation of a new breakpoint. In
- particular, set_raw_breakpoint does NOT set the breakpoint
- number! Care should be taken to not allow an error to occur
- prior to completing the initialization of the breakpoint. If this
- should happen, a bogus breakpoint will be left on the chain. */
+ particular, init_raw_breakpoint does NOT set the breakpoint number!
+ Care should be taken to not allow an error to occur prior to
+ completing the initialization of the breakpoint. If this should
+ happen, a bogus breakpoint will be left on the chain. */
-struct breakpoint *
-set_raw_breakpoint (struct gdbarch *gdbarch,
- struct symtab_and_line sal, enum bptype bptype)
+static void
+init_raw_breakpoint (struct breakpoint *b, struct gdbarch *gdbarch,
+ struct symtab_and_line sal, enum bptype bptype)
{
- struct breakpoint *b = set_raw_breakpoint_without_location (gdbarch,
- bptype);
CORE_ADDR adjusted_address;
struct gdbarch *loc_gdbarch;
+ init_raw_breakpoint_without_location (b, gdbarch, bptype);
+
loc_gdbarch = get_sal_arch (sal);
if (!loc_gdbarch)
loc_gdbarch = b->gdbarch;
@@ -5951,7 +5970,30 @@ set_raw_breakpoint (struct gdbarch *gdbarch,
sal.explicit_pc || sal.explicit_line);
breakpoints_changed ();
+}
+/* set_raw_breakpoint is a low level routine for allocating and
+ partially initializing a breakpoint of type BPTYPE. The newly
+ created breakpoint's address, section, source file name, and line
+ number are provided by SAL. The newly created and partially
+ initialized breakpoint is added to the breakpoint chain and
+ is also returned as the value of this function.
+
+ It is expected that the caller will complete the initialization of
+ the newly created breakpoint struct as well as output any status
+ information regarding the creation of a new breakpoint. In
+ particular, set_raw_breakpoint does NOT set the breakpoint
+ number! Care should be taken to not allow an error to occur
+ prior to completing the initialization of the breakpoint. If this
+ should happen, a bogus breakpoint will be left on the chain. */
+
+struct breakpoint *
+set_raw_breakpoint (struct gdbarch *gdbarch,
+ struct symtab_and_line sal, enum bptype bptype)
+{
+ struct breakpoint *b = XNEW (struct breakpoint);
+
+ init_raw_breakpoint (b, gdbarch, sal, bptype);
return b;
}
@@ -6737,28 +6779,25 @@ syscall_catchpoint_p (struct breakpoint *b)
return (b->ops == &catch_syscall_breakpoint_ops);
}
-/* Create a new breakpoint of the bp_catchpoint kind and return it,
- but does NOT mention it nor update the global location list.
- This is useful if you need to fill more fields in the
- struct breakpoint before calling mention.
-
- If TEMPFLAG is non-zero, then make the breakpoint temporary.
- If COND_STRING is not NULL, then store it in the breakpoint.
- OPS, if not NULL, is the breakpoint_ops structure associated
- to the catchpoint. */
+/* Initialize a new breakpoint of the bp_catchpoint kind. If TEMPFLAG
+ is non-zero, then make the breakpoint temporary. If COND_STRING is
+ not NULL, then store it in the breakpoint. OPS, if not NULL, is
+ the breakpoint_ops structure associated to the catchpoint. */
-static struct breakpoint *
-create_catchpoint_without_mention (struct gdbarch *gdbarch, int tempflag,
- char *cond_string,
- struct breakpoint_ops *ops)
+static void
+init_catchpoint (struct breakpoint *b,
+ struct gdbarch *gdbarch, int tempflag,
+ char *cond_string,
+ struct breakpoint_ops *ops)
{
struct symtab_and_line sal;
- struct breakpoint *b;
+
+ memset (b, 0, sizeof (*b));
init_sal (&sal);
sal.pspace = current_program_space;
- b = set_raw_breakpoint (gdbarch, sal, bp_catchpoint);
+ init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint);
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
@@ -6768,7 +6807,26 @@ create_catchpoint_without_mention (struct gdbarch *gdbarch, int tempflag,
b->enable_state = bp_enabled;
b->disposition = tempflag ? disp_del : disp_donttouch;
b->ops = ops;
+}
+
+/* Create a new breakpoint of the bp_catchpoint kind and return it,
+ but does NOT mention it nor update the global location list.
+ This is useful if you need to fill more fields in the
+ struct breakpoint before calling mention.
+
+ If TEMPFLAG is non-zero, then make the breakpoint temporary.
+ If COND_STRING is not NULL, then store it in the breakpoint.
+ OPS, if not NULL, is the breakpoint_ops structure associated
+ to the catchpoint. */
+
+static struct breakpoint *
+create_catchpoint_without_mention (struct gdbarch *gdbarch, int tempflag,
+ char *cond_string,
+ struct breakpoint_ops *ops)
+{
+ struct breakpoint *b = XNEW (struct breakpoint);
+ init_catchpoint (b, gdbarch, tempflag, cond_string, ops);
return b;
}