summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog71
-rw-r--r--gdb/Makefile.in7
-rw-r--r--gdb/breakpoint.c349
-rw-r--r--gdb/breakpoint.h23
-rw-r--r--gdb/config/i386/tm-i386.h4
-rw-r--r--gdb/event-top.c1
-rw-r--r--gdb/gdbarch.c29
-rw-r--r--gdb/gdbarch.h6
-rwxr-xr-xgdb/gdbarch.sh35
-rw-r--r--gdb/remote.c23
-rw-r--r--gdb/stack.c1
-rw-r--r--gdb/top.c1
-rw-r--r--gdb/utils.c2
13 files changed, 380 insertions, 172 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1fb60e9222f..af0c40dea9c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,74 @@
+Mon Oct 25 18:22:06 1999 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * remote.c: Document future of compare_sections_command.
+ (remote_insert_breakpoint, remote_remove_breakpoint,
+ remote_insert_watchpoint, remote_insert_watchpoint,
+ remote_remove_watchpoint, remote_insert_hw_breakpoint,
+ remote_remove_hw_breakpoint): Use alloca instead of GCC's dynamic
+ array feature.
+
+Mon Oct 25 18:08:31 1999 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * gdbarch.h (REGISTER_GDBARCH_SWAP): Define.
+ * gdbarch.sh: Update.
+
+Sat Oct 23 16:39:34 1999 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * gdbarch.c (initialize_current_architecture): Make ``choice''
+ const.
+
+1999-10-22 Tom Tromey <tromey@cygnus.com>
+
+ * gdbarch.sh: Updated for gdbarch.[ch] changes.
+ * top.c (gdb_init): Call initialize_current_architecture.
+ * gdbarch.h (initialize_current_architecture): Declare.
+ * gdbarch.c (initialize_current_architecture): New function.
+
+1999-10-21 Michael Snyder <msnyder@cleaver.cygnus.com>
+
+ * utils.c (chars_per_line): fix typo in comment.
+
+1999-10-21 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
+
+ * breakpoint.h (bp_print_how): New enum, used for deciding how to
+ print bpstat information when we stop, instead of having 3
+ different functions.
+ (struct bpstat): Change print_it field to be an enum instead of a
+ function pointer.
+
+ * breakpoint.c (print_it_typical): New name for print_it_normal().
+ (print_bp_stop_message): New function. High level routine for
+ printing of why we stopped.
+ (bpstat_print): Call print_bp_stop_message instead of using the
+ print_it function pointer.
+ (print_it_done, print_it_noop): Delete these functions.
+
+1999-10-21 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
+
+ * breakpoint.c (print_it_normal): Reorganize into a switch
+ statement.
+
+1999-10-21 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
+
+ * Makefile.in (event-top.o): Add dependency on target.h.
+ * event-top.c: Make dependency on target.h explicit.
+
+ * breakpoint.c (bpstat_print): Clean up logic. Remove recursion.
+ (catch_exec_command_1): Surround with appropriate ifdef's,
+ to avoid compiler warnings.
+ (catch_fork_command_1): Ditto.
+
+1999-10-20 Jim Blandy <jimb@cris.red-bean.com>
+
+ * Makefile.in (dwarf2read.o): Note that this depends on bfd/elf-bfd.h.
+ (elf_bfd_h): New variable.
+
+1999-10-19 Jim Blandy <jimb@zenia.red-bean.com>
+
+ * config/i386/tm-i386.h (REGISTER_NAMES): Change names of FPU
+ instruction and operand pointer registers to improve consistency,
+ following J. T. Conklin's suggestions.
+
1999-10-18 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
* breakpoint.h: Change return type of field print_it of struct
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 0dfabdac563..edb38eed087 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -229,7 +229,7 @@ CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE) \
ADD_FILES = $(REGEX) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
ADD_DEPS = $(REGEX1) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
-VERSION = 19991018
+VERSION = 19991025
DIST=gdb
LINT=/usr/5bin/lint
@@ -414,6 +414,7 @@ LINTFILES = $(SFILES) $(YYFILES) @CONFIG_SRCS@ init.c
getopt_h = $(INCLUDE_DIR)/getopt.h
floatformat_h = $(INCLUDE_DIR)/floatformat.h
bfd_h = $(BFD_DIR)/bfd.h
+elf_bfd_h = $(BFD_DIR)/elf-bfd.h
wait_h = $(INCLUDE_DIR)/wait.h
dis-asm_h = $(INCLUDE_DIR)/dis-asm.h
remote-sim_h = $(INCLUDE_DIR)/remote-sim.h
@@ -1121,7 +1122,7 @@ dwarfread.o: dwarfread.c $(bfd_h) buildsym.h complaints.h $(defs_h) \
$(expression_h) $(gdbtypes_h) language.h objfiles.h symfile.h \
$(symtab_h) gdb_string.h
-dwarf2read.o: dwarf2read.c $(bfd_h) buildsym.h $(defs_h) \
+dwarf2read.o: dwarf2read.c $(bfd_h) $(elf_bfd_h) buildsym.h $(defs_h) \
$(expression_h) $(gdbtypes_h) language.h objfiles.h symfile.h \
$(symtab_h) gdb_string.h
@@ -1139,7 +1140,7 @@ event-loop.o: event-loop.c $(defs_h) $(top_h) $(event_loop_h) $(event_top_h)
event-top.o: event-top.c top.h $(readline_headers) \
$(defs_h) $(inferior_h) $(event_loop_h) $(event_top_h) terminal.h \
- $(gdbcmd_h)
+ $(gdbcmd_h) target.h
inf-loop.o: inf-loop.c $(defs_h) $(inferior_h) $(inf_loop_h) $(event_loop_h) \
$(event_top_h)
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index ec78b31c780..82085b0b120 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -157,7 +157,9 @@ insertion_state_t;
static int
remove_breakpoint PARAMS ((struct breakpoint *, insertion_state_t));
-static enum print_stop_action print_it_normal PARAMS ((bpstat));
+static enum print_stop_action print_it_typical PARAMS ((bpstat));
+
+static enum print_stop_action print_bp_stop_message (bpstat bs);
typedef struct
{
@@ -170,10 +172,6 @@ static int watchpoint_check PARAMS ((PTR));
static int cover_target_enable_exception_callback PARAMS ((PTR));
-static enum print_stop_action print_it_done PARAMS ((bpstat));
-
-static enum print_stop_action print_it_noop PARAMS ((bpstat));
-
static void maintenance_info_breakpoints PARAMS ((char *, int));
#ifdef GET_LONGJMP_TARGET
@@ -226,8 +224,10 @@ static char *ep_parse_optional_if_clause PARAMS ((char **arg));
static char *ep_parse_optional_filename PARAMS ((char **arg));
+#if defined(CHILD_INSERT_EXEC_CATCHPOINT)
static void catch_exec_command_1 PARAMS ((char *arg, int tempflag,
int from_tty));
+#endif
static void create_exception_catchpoint
PARAMS ((int tempflag, char *cond_string,
@@ -1740,91 +1740,98 @@ top:
discard_cleanups (old_chain);
}
-/* This is the normal print_it function for a bpstat. In the future,
+/* This is the normal print function for a bpstat. In the future,
much of this logic could (should?) be moved to bpstat_stop_status,
- by having it set different print_it functions.
-
- Current scheme: When we stop, bpstat_print() is called.
- It loops through the bpstat list of things causing this stop,
- calling the print_it function for each one. The default
- print_it function, used for breakpoints, is print_it_normal().
- (Also see print_it_noop() and print_it_done()).
-
- Return values from this routine (used by bpstat_print() to
- decide what to do):
- PRINT_NOTHING: Means we already printed all we needed to print, don't
- print anything else.
- PRINT_SRC_ONLY: Means we printed something, and we do *not* desire that
- something to be followed by a location.
- PRINT_SCR_AND_LOC: Means we printed something, and we *do* desire that
- something to be followed by a location.
- PRINT_UNKNOWN: Means we printed nothing or we need to do some more analysis. */
+ by having it set different print_it values.
+
+ Current scheme: When we stop, bpstat_print() is called. It loops
+ through the bpstat list of things causing this stop, calling the
+ print_bp_stop_message function on each one. The behavior of the
+ print_bp_stop_message function depends on the print_it field of
+ bpstat. If such field so indicates, call this function here.
+
+ Return values from this routine (ultimately used by bpstat_print()
+ and normal_stop() to decide what to do):
+ PRINT_NOTHING: Means we already printed all we needed to print,
+ don't print anything else.
+ PRINT_SRC_ONLY: Means we printed something, and we do *not* desire
+ that something to be followed by a location.
+ PRINT_SCR_AND_LOC: Means we printed something, and we *do* desire
+ that something to be followed by a location.
+ PRINT_UNKNOWN: Means we printed nothing or we need to do some more
+ analysis. */
static enum print_stop_action
-print_it_normal (bs)
+print_it_typical (bs)
bpstat bs;
{
/* bs->breakpoint_at can be NULL if it was a momentary breakpoint
which has since been deleted. */
- if (bs->breakpoint_at == NULL
- || (bs->breakpoint_at->type != bp_breakpoint
- && bs->breakpoint_at->type != bp_shlib_event
- && bs->breakpoint_at->type != bp_catch_load
- && bs->breakpoint_at->type != bp_catch_unload
- && bs->breakpoint_at->type != bp_catch_fork
- && bs->breakpoint_at->type != bp_catch_vfork
- && bs->breakpoint_at->type != bp_catch_exec
- && bs->breakpoint_at->type != bp_catch_catch
- && bs->breakpoint_at->type != bp_catch_throw
- && bs->breakpoint_at->type != bp_hardware_breakpoint
- && bs->breakpoint_at->type != bp_watchpoint
- && bs->breakpoint_at->type != bp_read_watchpoint
- && bs->breakpoint_at->type != bp_access_watchpoint
- && bs->breakpoint_at->type != bp_hardware_watchpoint))
+ if (bs->breakpoint_at == NULL)
return PRINT_UNKNOWN;
- if (ep_is_shlib_catchpoint (bs->breakpoint_at))
+ switch (bs->breakpoint_at->type)
{
- annotate_catchpoint (bs->breakpoint_at->number);
- printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
- if (bs->breakpoint_at->type == bp_catch_load)
- printf_filtered ("loaded");
- else if (bs->breakpoint_at->type == bp_catch_unload)
- printf_filtered ("unloaded");
- printf_filtered (" %s), ", bs->breakpoint_at->triggered_dll_pathname);
+ case bp_breakpoint:
+ case bp_hardware_breakpoint:
+ /* I think the user probably only wants to see one breakpoint
+ number, not all of them. */
+ annotate_breakpoint (bs->breakpoint_at->number);
+ printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
return PRINT_SRC_AND_LOC;
- }
- else if (bs->breakpoint_at->type == bp_shlib_event)
- {
+ break;
+
+ case bp_shlib_event:
/* Did we stop because the user set the stop_on_solib_events
variable? (If so, we report this as a generic, "Stopped due
to shlib event" message.) */
- printf_filtered ("Stopped due to shared library event\n");
- return PRINT_NOTHING;
- }
- else if (bs->breakpoint_at->type == bp_catch_fork ||
- bs->breakpoint_at->type == bp_catch_vfork)
- {
+ printf_filtered ("Stopped due to shared library event\n");
+ return PRINT_NOTHING;
+ break;
+
+ case bp_catch_load:
annotate_catchpoint (bs->breakpoint_at->number);
printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
- if (bs->breakpoint_at->type == bp_catch_fork)
- printf_filtered ("forked");
- else if (bs->breakpoint_at->type == bp_catch_vfork)
- printf_filtered ("vforked");
+ printf_filtered ("loaded");
+ printf_filtered (" %s), ", bs->breakpoint_at->triggered_dll_pathname);
+ return PRINT_SRC_AND_LOC;
+ break;
+
+ case bp_catch_unload:
+ annotate_catchpoint (bs->breakpoint_at->number);
+ printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
+ printf_filtered ("unloaded");
+ printf_filtered (" %s), ", bs->breakpoint_at->triggered_dll_pathname);
+ return PRINT_SRC_AND_LOC;
+ break;
+
+ case bp_catch_fork:
+ annotate_catchpoint (bs->breakpoint_at->number);
+ printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
+ printf_filtered ("forked");
printf_filtered (" process %d), ",
bs->breakpoint_at->forked_inferior_pid);
return PRINT_SRC_AND_LOC;
- }
- else if (bs->breakpoint_at->type == bp_catch_exec)
- {
+ break;
+
+ case bp_catch_vfork:
+ annotate_catchpoint (bs->breakpoint_at->number);
+ printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
+ printf_filtered ("vforked");
+ printf_filtered (" process %d), ",
+ bs->breakpoint_at->forked_inferior_pid);
+ return PRINT_SRC_AND_LOC;
+ break;
+
+ case bp_catch_exec:
annotate_catchpoint (bs->breakpoint_at->number);
printf_filtered ("\nCatchpoint %d (exec'd %s), ",
bs->breakpoint_at->number,
bs->breakpoint_at->exec_pathname);
return PRINT_SRC_AND_LOC;
- }
- else if (bs->breakpoint_at->type == bp_catch_catch)
- {
+ break;
+
+ case bp_catch_catch:
if (current_exception_event &&
(CURRENT_EXCEPTION_KIND == EX_EVENT_CATCH))
{
@@ -1848,15 +1855,17 @@ print_it_normal (bs)
printf_filtered ("unknown");
printf_filtered ("\n");
- return PRINT_SRC_ONLY; /* don't bother to print location frame info */
+ /* don't bother to print location frame info */
+ return PRINT_SRC_ONLY;
}
else
{
- return PRINT_UNKNOWN; /* really throw, some other bpstat will handle it */
+ /* really throw, some other bpstat will handle it */
+ return PRINT_UNKNOWN;
}
- }
- else if (bs->breakpoint_at->type == bp_catch_throw)
- {
+ break;
+
+ case bp_catch_throw:
if (current_exception_event &&
(CURRENT_EXCEPTION_KIND == EX_EVENT_THROW))
{
@@ -1880,64 +1889,122 @@ print_it_normal (bs)
printf_filtered ("unknown");
printf_filtered ("\n");
- return PRINT_SRC_ONLY; /* don't bother to print location frame info */
+ /* don't bother to print location frame info */
+ return PRINT_SRC_ONLY;
}
else
{
- return PRINT_UNKNOWN; /* really catch, some other bpstat willhandle it */
+ /* really catch, some other bpstat will handle it */
+ return PRINT_UNKNOWN;
}
- }
+ break;
- else if (bs->breakpoint_at->type == bp_breakpoint ||
- bs->breakpoint_at->type == bp_hardware_breakpoint)
- {
- /* I think the user probably only wants to see one breakpoint
- number, not all of them. */
- annotate_breakpoint (bs->breakpoint_at->number);
- printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
- return PRINT_SRC_AND_LOC;
- }
- else if ((bs->old_val != NULL) &&
- (bs->breakpoint_at->type == bp_watchpoint ||
- bs->breakpoint_at->type == bp_access_watchpoint ||
- bs->breakpoint_at->type == bp_hardware_watchpoint))
- {
- annotate_watchpoint (bs->breakpoint_at->number);
+ case bp_watchpoint:
+ case bp_hardware_watchpoint:
+ if (bs->old_val != NULL)
+ {
+ annotate_watchpoint (bs->breakpoint_at->number);
+ mention (bs->breakpoint_at);
+ printf_filtered ("\nOld value = ");
+ value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
+ printf_filtered ("\nNew value = ");
+ value_print (bs->breakpoint_at->val, gdb_stdout, 0,
+ Val_pretty_default);
+ printf_filtered ("\n");
+ value_free (bs->old_val);
+ bs->old_val = NULL;
+ }
+ /* More than one watchpoint may have been triggered. */
+ return PRINT_UNKNOWN;
+ break;
+
+ case bp_read_watchpoint:
mention (bs->breakpoint_at);
- printf_filtered ("\nOld value = ");
- value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
- printf_filtered ("\nNew value = ");
+ printf_filtered ("\nValue = ");
value_print (bs->breakpoint_at->val, gdb_stdout, 0,
Val_pretty_default);
printf_filtered ("\n");
- value_free (bs->old_val);
- bs->old_val = NULL;
- /* More than one watchpoint may have been triggered. */
return PRINT_UNKNOWN;
- }
- else if (bs->breakpoint_at->type == bp_access_watchpoint ||
- bs->breakpoint_at->type == bp_read_watchpoint)
- {
- mention (bs->breakpoint_at);
- printf_filtered ("\nValue = ");
+ break;
+
+ case bp_access_watchpoint:
+ if (bs->old_val != NULL)
+ {
+ annotate_watchpoint (bs->breakpoint_at->number);
+ mention (bs->breakpoint_at);
+ printf_filtered ("\nOld value = ");
+ value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
+ value_free (bs->old_val);
+ bs->old_val = NULL;
+ printf_filtered ("\nNew value = ");
+ }
+ else
+ {
+ mention (bs->breakpoint_at);
+ printf_filtered ("\nValue = ");
+ }
value_print (bs->breakpoint_at->val, gdb_stdout, 0,
Val_pretty_default);
printf_filtered ("\n");
return PRINT_UNKNOWN;
+ break;
+ /* Fall through, we don't deal with these types of breakpoints
+ here. */
+
+ case bp_none:
+ case bp_until:
+ case bp_finish:
+ case bp_longjmp:
+ case bp_longjmp_resume:
+ case bp_step_resume:
+ case bp_through_sigtramp:
+ case bp_watchpoint_scope:
+ case bp_call_dummy:
+ default:
+ return PRINT_UNKNOWN;
}
- /* We can't deal with it.
- Maybe another member of the bpstat chain can. */
- return PRINT_UNKNOWN;
}
-/* Print a message indicating what happened.
- This is called from normal_stop().
- The input to this routine is the head of the bpstat list - a list
- of the eventpoints that caused this stop.
- This routine calls the "print_it" routine(s) associated
- with these eventpoints. This will print (for example)
- the "Breakpoint n," part of the output.
- The return value of this routine is one of:
+/* Generic routine for printing messages indicating why we
+ stopped. The behavior of this function depends on the value
+ 'print_it' in the bpstat structure. Under some circumstances we
+ may decide not to print anything here and delegate the task to
+ normal_stop(). */
+
+static enum print_stop_action
+print_bp_stop_message (bpstat bs)
+{
+ switch (bs->print_it)
+ {
+ case print_it_noop:
+ /* Nothing should be printed for this bpstat entry. */
+ return PRINT_UNKNOWN;
+ break;
+
+ case print_it_done:
+ /* We still want to print the frame, but we already printed the
+ relevant messages. */
+ return PRINT_SRC_AND_LOC;
+ break;
+
+ case print_it_normal:
+ /* Normal case, we handle everything in print_it_typical. */
+ return print_it_typical (bs);
+ break;
+ default:
+ internal_error ("print_bp_stop_message: unrecognized enum value");
+ break;
+ }
+}
+
+
+/* Print a message indicating what happened. This is called from
+ normal_stop(). The input to this routine is the head of the bpstat
+ list - a list of the eventpoints that caused this stop. This
+ routine calls the generic print routine for printing a message
+ about reasons for stopping. This will print (for example) the
+ "Breakpoint n," part of the output. The return value of this
+ routine is one of:
PRINT_UNKNOWN: Means we printed nothing
PRINT_SRC_AND_LOC: Means we printed something, and expect subsequent
@@ -1957,21 +2024,21 @@ bpstat_print (bs)
{
int val;
- if (bs == NULL)
- return PRINT_UNKNOWN;
-
- val = (*bs->print_it) (bs);
- if (val == PRINT_SRC_ONLY || val == PRINT_SRC_AND_LOC || val == PRINT_NOTHING)
- return val;
-
/* Maybe another breakpoint in the chain caused us to stop.
(Currently all watchpoints go on the bpstat whether hit or not.
That probably could (should) be changed, provided care is taken
with respect to bpstat_explains_signal). */
- if (bs->next)
- return bpstat_print (bs->next);
+ for (; bs; bs = bs->next)
+ {
+ val = print_bp_stop_message (bs);
+ if (val == PRINT_SRC_ONLY
+ || val == PRINT_SRC_AND_LOC
+ || val == PRINT_NOTHING)
+ return val;
+ }
- /* We reached the end of the chain without printing anything. */
+ /* We reached the end of the chain, or we got a null BS to start
+ with and nothing was printed. */
return PRINT_UNKNOWN;
}
@@ -2098,40 +2165,6 @@ which its expression is valid.\n", bs->breakpoint_at->number);
}
}
-/* This is used when everything which needs to be printed has
- already been printed. But we still want to print the frame. */
-
-/* Background: When we stop, bpstat_print() is called.
- It loops through the bpstat list of things causing this stop,
- calling the print_it function for each one. The default
- print_it function, used for breakpoints, is print_it_normal().
- Also see print_it_noop() and print_it_done() are the other
- two possibilities. See comments in bpstat_print() and
- in header of print_it_normal() for more detail. */
-
-static enum print_stop_action
-print_it_done (bs)
- bpstat bs;
-{
- return PRINT_SRC_AND_LOC;
-}
-
-/* This is used when nothing should be printed for this bpstat entry. */
-/* Background: When we stop, bpstat_print() is called.
- It loops through the bpstat list of things causing this stop,
- calling the print_it function for each one. The default
- print_it function, used for breakpoints, is print_it_normal().
- Also see print_it_noop() and print_it_done() are the other
- two possibilities. See comments in bpstat_print() and
- in header of print_it_normal() for more detail. */
-
-static enum print_stop_action
-print_it_noop (bs)
- bpstat bs;
-{
- return PRINT_UNKNOWN;
-}
-
/* Get a bpstat associated with having just stopped at address *PC
and frame address CORE_ADDRESS. Update *PC to point at the
breakpoint (if we hit a breakpoint). NOT_A_BREAKPOINT is nonzero
@@ -5139,6 +5172,7 @@ typedef enum
}
catch_fork_kind;
+#if defined(CHILD_INSERT_FORK_CATCHPOINT) || defined(CHILD_INSERT_VFORK_CATCHPOINT)
static void catch_fork_command_1 PARAMS ((catch_fork_kind fork_kind,
char *arg,
int tempflag,
@@ -5180,7 +5214,9 @@ catch_fork_command_1 (fork_kind, arg, tempflag, from_tty)
break;
}
}
+#endif
+#if defined(CHILD_INSERT_EXEC_CATCHPOINT)
static void
catch_exec_command_1 (arg, tempflag, from_tty)
char *arg;
@@ -5205,6 +5241,7 @@ catch_exec_command_1 (arg, tempflag, from_tty)
and enable reporting of such events. */
create_exec_event_catchpoint (tempflag, cond_string);
}
+#endif
#if defined(SOLIB_ADD)
static void
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 89655fe4528..a59708490b9 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -434,6 +434,22 @@ extern void bpstat_clear_actions PARAMS ((bpstat));
extern void bpstat_get_triggered_catchpoints PARAMS ((bpstat, bpstat *));
/* Implementation: */
+
+/* Values used to tell the printing routine how to behave for this bpstat. */
+enum bp_print_how
+ {
+ /* This is used when we want to do a normal printing of the reason
+ for stopping. The output will depend on the type of eventpoint
+ we are dealing with. This is the default value, most commonly
+ used. */
+ print_it_normal,
+ /* This is used when nothing should be printed for this bpstat entry. */
+ print_it_noop,
+ /* This is used when everything which needs to be printed has
+ already been printed. But we still want to print the frame. */
+ print_it_done
+ };
+
struct bpstats
{
/* Linked list because there can be two breakpoints at the same
@@ -452,10 +468,9 @@ struct bpstats
/* Nonzero if this breakpoint tells us to stop. */
char stop;
- /* Function called by bpstat_print to print stuff associated with
- this element of the bpstat chain. Returns 0 or 1 just like
- bpstat_print, or -1 if it can't deal with it. */
- enum print_stop_action (*print_it) PARAMS ((bpstat bs));
+ /* Tell bpstat_print and print_bp_stop_message how to print stuff
+ associated with this element of the bpstat chain. */
+ enum bp_print_how print_it;
};
enum inf_context
diff --git a/gdb/config/i386/tm-i386.h b/gdb/config/i386/tm-i386.h
index 051b3c70176..9f4aaed621c 100644
--- a/gdb/config/i386/tm-i386.h
+++ b/gdb/config/i386/tm-i386.h
@@ -123,8 +123,8 @@ extern int i386_skip_prologue PARAMS ((int));
"ds", "es", "fs", "gs", \
"st0", "st1", "st2", "st3", \
"st4", "st5", "st6", "st7", \
- "fctrl", "fstat", "ftag", "fcs", \
- "fcoff", "fds", "fdoff", "fop", \
+ "fctrl", "fstat", "ftag", "fiseg", \
+ "fioff", "foseg", "fooff", "fop", \
"xmm0", "xmm1", "xmm2", "xmm3", \
"xmm4", "xmm5", "xmm6", "xmm7", \
"mxcsr" \
diff --git a/gdb/event-top.c b/gdb/event-top.c
index 7e6cf8351ae..cac492220b7 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -22,6 +22,7 @@
#include "defs.h"
#include "top.h"
#include "inferior.h"
+#include "target.h"
#include "terminal.h" /* for job_control */
#include "signals.h"
#include "event-loop.h"
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index 54fd44469ba..f7fbea45eac 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -3161,6 +3161,35 @@ int sizeof_call_dummy_words = sizeof (call_dummy_words);
#endif
+/* Initialize the current architecture. */
+void
+initialize_current_architecture ()
+{
+ if (GDB_MULTI_ARCH)
+ {
+ struct gdbarch_init_registration *rego;
+ const struct bfd_arch_info *chosen = NULL;
+ for (rego = gdbarch_init_registrary; rego != NULL; rego = rego->next)
+ {
+ const struct bfd_arch_info *ap
+ = bfd_lookup_arch (rego->bfd_architecture, 0);
+
+ /* Choose the first architecture alphabetically. */
+ if (chosen == NULL
+ || strcmp (ap->printable_name, chosen->printable_name) < 0)
+ chosen = ap;
+ }
+
+ if (chosen != NULL)
+ {
+ struct gdbarch_info info;
+ memset (&info, 0, sizeof info);
+ info.bfd_arch_info = chosen;
+ gdbarch_update (info);
+ }
+ }
+}
+
extern void _initialize_gdbarch (void);
void
_initialize_gdbarch ()
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
index 95776adf6fc..34075c6146f 100644
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -948,6 +948,7 @@ extern void *gdbarch_data (struct gdbarch_data*);
typedef void (gdbarch_swap_ftype) (void);
extern void register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
+#define REGISTER_GDBARCH_SWAP(VAR) register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
@@ -1097,6 +1098,11 @@ extern void set_gdbarch_from_file (bfd *);
extern void set_architecture_from_arch_mach (enum bfd_architecture, unsigned long);
+/* Initialize the current architecture to the "first" one we find on
+ our list. */
+
+extern void initialize_current_architecture (void);
+
/* Helper function for targets that don't know how my arguments are
being passed */
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
index 7da02047af4..92f31709020 100755
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -564,6 +564,7 @@ extern void *gdbarch_data (struct gdbarch_data*);
typedef void (gdbarch_swap_ftype) (void);
extern void register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
+#define REGISTER_GDBARCH_SWAP(VAR) register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
@@ -713,6 +714,11 @@ extern void set_gdbarch_from_file (bfd *);
extern void set_architecture_from_arch_mach (enum bfd_architecture, unsigned long);
+/* Initialize the current architecture to the "first" one we find on
+ our list. */
+
+extern void initialize_current_architecture (void);
+
/* Helper function for targets that don't know how my arguments are
being passed */
@@ -1889,6 +1895,35 @@ int sizeof_call_dummy_words = sizeof (call_dummy_words);
#endif
+/* Initialize the current architecture. */
+void
+initialize_current_architecture ()
+{
+ if (GDB_MULTI_ARCH)
+ {
+ struct gdbarch_init_registration *rego;
+ const struct bfd_arch_info *chosen = NULL;
+ for (rego = gdbarch_init_registrary; rego != NULL; rego = rego->next)
+ {
+ const struct bfd_arch_info *ap
+ = bfd_lookup_arch (rego->bfd_architecture, 0);
+
+ /* Choose the first architecture alphabetically. */
+ if (chosen == NULL
+ || strcmp (ap->printable_name, chosen->printable_name) < 0)
+ chosen = ap;
+ }
+
+ if (chosen != NULL)
+ {
+ struct gdbarch_info info;
+ memset (&info, 0, sizeof info);
+ info.bfd_arch_info = chosen;
+ gdbarch_update (info);
+ }
+ }
+}
+
extern void _initialize_gdbarch (void);
void
_initialize_gdbarch ()
diff --git a/gdb/remote.c b/gdb/remote.c
index 24d382e86eb..cd4eda0a083 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -3977,7 +3977,8 @@ remote_insert_breakpoint (addr, contents_cache)
if ((remote_protocol_Z.support == PACKET_ENABLE)
|| (remote_protocol_Z.support == PACKET_SUPPORT_UNKNOWN))
{
- char buf[PBUFSIZ], *p = buf;
+ char *buf = alloca (PBUFSIZ);
+ char *p = buf;
addr = remote_address_masked (addr);
*(p++) = 'Z';
@@ -4040,7 +4041,8 @@ remote_remove_breakpoint (addr, contents_cache)
if ((remote_protocol_Z.support == PACKET_ENABLE)
|| (remote_protocol_Z.support == PACKET_SUPPORT_UNKNOWN))
{
- char buf[PBUFSIZ], *p = buf;
+ char *buf = alloca (PBUFSIZ);
+ char *p = buf;
*(p++) = 'z';
*(p++) = '0';
@@ -4071,7 +4073,8 @@ remote_insert_watchpoint (addr, len, type)
int len;
int type;
{
- char buf[PBUFSIZ], *p;
+ char *buf = alloca (PBUFSIZ);
+ char *p;
if (remote_protocol_Z.support == PACKET_DISABLE)
error ("Can't set hardware watchpoints without the 'Z' packet\n");
@@ -4097,7 +4100,8 @@ remote_remove_watchpoint (addr, len, type)
int len;
int type;
{
- char buf[PBUFSIZ], *p;
+ char *buf = alloca (PBUFSIZ);
+ char *p;
sprintf (buf, "z%x,", type + 2 );
p = strchr (buf, '\0');
@@ -4118,7 +4122,8 @@ remote_insert_hw_breakpoint (addr, len)
CORE_ADDR addr;
int len;
{
- char buf[PBUFSIZ], *p = buf;
+ char *buf = alloca (PBUFSIZ);
+ char *p = buf;
if (remote_protocol_Z.support == PACKET_DISABLE)
error ("Can't set hardware breakpoints without the 'Z' packet\n");
@@ -4145,7 +4150,8 @@ remote_remove_hw_breakpoint (addr, len)
CORE_ADDR addr;
int len;
{
- char buf[PBUFSIZ], *p = buf;
+ char *buf = alloca (PBUFSIZ);
+ char *p = buf;
*(p++) = 'z';
*(p++) = '1';
@@ -4239,6 +4245,11 @@ crc32 (buf, len, crc)
Useful for verifying the image on the target against the exec file.
Depends on the target understanding the new "qCRC:" request. */
+/* FIXME: cagney/1999-10-26: This command should be broken down into a
+ target method (target verify memory) and generic version of the
+ actual command. This will allow other high-level code (especially
+ generic_load()) to make use of this target functionality. */
+
static void
compare_sections_command (args, from_tty)
char *args;
diff --git a/gdb/stack.c b/gdb/stack.c
index 30486be7c92..52a7d9984b0 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -575,6 +575,7 @@ print_frame_info_base (fi, level, source, args)
}
current_source_line = max (sal.line - lines_to_list / 2, 1);
}
+
if (source != 0)
set_default_breakpoint (1, fi->pc, sal.symtab, sal.line);
diff --git a/gdb/top.c b/gdb/top.c
index 5baf38a51b3..73b286caa1d 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -686,6 +686,7 @@ gdb_init (argv0)
initialize_targets (); /* Setup target_terminal macros for utils.c */
initialize_utils (); /* Make errors and warnings possible */
initialize_all_files ();
+ initialize_current_architecture ();
init_main (); /* But that omits this file! Do it now */
/* The signal handling mechanism is different depending whether or
diff --git a/gdb/utils.c b/gdb/utils.c
index 61d9e46796e..e657c5a374f 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -1367,7 +1367,7 @@ fputstrn_unfiltered (str, n, quoter, stream)
/* Number of lines per page or UINT_MAX if paging is disabled. */
static unsigned int lines_per_page;
-/* Number of chars per line or UNIT_MAX is line folding is disabled. */
+/* Number of chars per line or UNIT_MAX if line folding is disabled. */
static unsigned int chars_per_line;
/* Current count of lines printed on this page, chars on this line. */
static unsigned int lines_printed, chars_printed;