along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
+#include "arch-utils.h"
#include "mi-cmds.h"
#include "ui-out.h"
#include "mi-out.h"
int ignore_count = 0;
char *condition = NULL;
int pending = 0;
+ int enabled = 1;
+
struct gdb_exception e;
struct gdb_events *old_hooks;
enum opt
{
HARDWARE_OPT, TEMP_OPT /*, REGEXP_OPT */ , CONDITION_OPT,
- IGNORE_COUNT_OPT, THREAD_OPT, PENDING_OPT
+ IGNORE_COUNT_OPT, THREAD_OPT, PENDING_OPT, DISABLE_OPT
};
static struct mi_opt opts[] =
{
{"i", IGNORE_COUNT_OPT, 1},
{"p", THREAD_OPT, 1},
{"f", PENDING_OPT, 0},
+ {"d", DISABLE_OPT, 0},
{ 0, 0, 0 }
};
case PENDING_OPT:
pending = 1;
break;
+ case DISABLE_OPT:
+ enabled = 0;
}
}
switch (type)
{
case REG_BP:
- set_breakpoint (address, condition,
+ set_breakpoint (get_current_arch (), address, condition,
0 /*hardwareflag */ , temp_p,
thread, ignore_count,
- pending);
+ pending, enabled);
break;
case HW_BP:
- set_breakpoint (address, condition,
+ set_breakpoint (get_current_arch (), address, condition,
1 /*hardwareflag */ , temp_p,
thread, ignore_count,
- pending);
+ pending, enabled);
break;
#if 0
case REGEXP_BP:
error (_("mi_cmd_break_watch: Unknown watchpoint type."));
}
}
+
+/* The mi_read_next_line consults these variable to return successive
+ command lines. While it would be clearer to use a closure pointer,
+ it is not expected that any future code will use read_command_lines_1,
+ therefore no point of overengineering. */
+
+static char **mi_command_line_array;
+static int mi_command_line_array_cnt;
+static int mi_command_line_array_ptr;
+
+static char *
+mi_read_next_line ()
+{
+ if (mi_command_line_array_ptr == mi_command_line_array_cnt)
+ return NULL;
+ else
+ return mi_command_line_array[mi_command_line_array_ptr++];
+}
+
+void
+mi_cmd_break_commands (char *command, char **argv, int argc)
+{
+ struct command_line *break_command;
+ char *endptr;
+ int bnum;
+ struct breakpoint *b;
+
+ if (argc < 1)
+ error ("USAGE: %s <BKPT> [<COMMAND> [<COMMAND>...]]", command);
+
+ bnum = strtol (argv[0], &endptr, 0);
+ if (endptr == argv[0])
+ error ("breakpoint number argument \"%s\" is not a number.",
+ argv[0]);
+ else if (*endptr != '\0')
+ error ("junk at the end of breakpoint number argument \"%s\".",
+ argv[0]);
+
+ b = get_breakpoint (bnum);
+ if (b == NULL)
+ error ("breakpoint %d not found.", bnum);
+
+ mi_command_line_array = argv;
+ mi_command_line_array_ptr = 1;
+ mi_command_line_array_cnt = argc;
+
+ break_command = read_command_lines_1 (mi_read_next_line, 0);
+ breakpoint_set_commands (b, break_command);
+}
+