diff options
Diffstat (limited to 'gdb')
234 files changed, 5840 insertions, 4447 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0ae5117..500a28a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,51 +1,344 @@ -1999-04-07 Jim Blandy <jimb@zwingli.cygnus.com> +1999-04-22 Jason Molenda (jsm@bugshack.cygnus.com) + + * README: Note that readline is not installed as a part of + make install. + +Thu Apr 22 21:02:28 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * value.h (get_saved_register): Cleanup prototype. + * findvar.c (default_get_saved_register): Rename function + get_saved_register. + (GET_SAVED_REGISTER): Define as default_get_saved_register when + undefined. + (get_saved_register): Always declare. Call GET_SAVED_REGISTER. + + * sparc-tdep.c (sparc_get_saved_register): Rename function + get_saved_register. + * config/sparc/tm-sparc.h (GET_SAVED_REGISTER): Update. + * a29k-tdep.c (a29k_get_saved_register): Rename function + get_saved_register. + * config/a29k/tm-a29k.h (GET_SAVED_REGISTER): Update. + + * config/d10v/tm-d10v.h, config/powerpc/tm-ppc-eabi.h, + config/h8300/tm-h8300.h, config/m32r/tm-m32r.h, + config/mn10200/tm-mn10200.h, config/mn10300/tm-mn10300.h, + config/sh/tm-sh.h, config/tic80/tm-tic80.h, config/v850/tm-v850.h: + Update macro GET_SAVED_REGISTER so that it calls + generic_get_saved_register. + * v850-tdep.c, tic80-tdep.c, sh-tdep.c, mn10300-tdep.c, + mn10200-tdep.c, m32r-tdep.c, h8300-tdep.c, rs6000-tdep.c: Delete + function get_saved_register. + +Thu Apr 22 11:07:21 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * config/v850/tm-v850.h, config/tic80/tm-tic80.h, + config/sh/tm-sh.h, config/powerpc/tm-ppc-eabi.h, + config/mn10300/tm-mn10300.h, config/mn10200/tm-mn10200.h, + config/m32r/tm-m32r.h, config/h8300/tm-h8300.h, + config/fr30/tm-fr30.h, config/d10v/tm-d10v.h: Give the + USE_GENERIC_DUMMY_FRAMES macro the value one. + * inferior.h (USE_GENERIC_DUMMY_FRAMES): Default to a value of + zero. + + * blockframe.c (generic_find_dummy_frame, + generic_pc_in_call_dummy, generic_read_register_dummy, + generic_push_dummy_frame, generic_pop_current_frame, + generic_pop_dummy_frame, generic_frame_chain_valid, + generic_get_saved_register): Always define. + + * breakpoint.c (frame_in_dummy): Convert #ifdef + USE_GENERIC_DUMMY_FRAMES to runtime test. + + * rs6000-tdep.c (pop_frame, push_arguments, push_arguments, + push_arguments, frame_saved_pc, rs6000_frame_chain, + rs6000_frame_chain): Convert #ifdef USE_GENERIC_DUMMY_FRAMES to + runtime test. + (get_saved_register): Always define. + +Wed Apr 21 14:45:44 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * gdbarch.c (enum set_arch): Declare. + (set_arch): Add type parameter. Only disable + ``target_architecture_auto'' when set_arch_manual. + (set_architecture, set_architecture_from_arch_mach, + set_architecture_from_file): Update. + +Wed Apr 21 10:48:53 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * frame.h (generic_pc_in_call_dummy): Make signature consistent + with other pc_in_call_dummy functions by adding SP parameter. + * blockframe.c (generic_pc_in_call_dummy): Update. Pass SP and + not FP to generic_find_dummy_frame(). + * breakpoint.c (frame_in_dummy): Update. + * config/v850/tm-v850.h, config/tic80/tm-tic80.h, + config/sh/tm-sh.h, config/mn10300/tm-mn10300.h, + config/mn10200/tm-mn10200.h, config/m32r/tm-m32r.h, + config/h8300/tm-h8300.h, config/fr30/tm-fr30.h, + config/d10v/tm-d10v.h: Update PC_IN_CALL_DUMMY definition. + +Tue Apr 20 12:15:45 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * config/d10v/tm-d10v.h (GDB_TARGET_IS_D10V): Move from here. + * gdbarch.h (GDB_TARGET_IS_D10V): To here. Implement using + TARGET_ARCHITECTURE. + (D10V_MAKE_DADDR, D10V_MAKE_IADDR): Provide fatal default + definitions. + + * valops.c (value_at): Replace #ifdef GDB_TARGET_IS_D10V code with + runtime test. + (value_fetch_lazy): Ditto. + * values.c (unpack_long): Ditto. + * printcmd.c (print_frame_args): Ditto. + +1999-04-15 Stan Shebs <shebs@andros.cygnus.com> + + * infrun.c (wait_for_inferior) [HAVE_STEPPABLE_WATCHPOINT, + HAVE_NONSTEPPABLE_WATCHPOINT, HAVE_CONTINUABLE_WATCHPOINT]: Test + at runtime instead of compile time. + +1999-04-14 Philippe De Muyter <phdm@macqel.be> + + * breakpoint.c (maintenance_info_breakpoints): Function made + static to match previous prototype. + + * coffread.c (coff_record_line): Static function removed. + (enter_linenos): Call `record_line' instead of `coff_record_line'. + (FILE-LEVEL, coff_start_symtab, coff_end_symtab): `coff_record_line' + -related stuff removed. + (coff_symfile_read): Redundant statement removed. + (coff_symtab_read): `record_line' is now called with the first line + number of each function, given by the ".bf" symbol. This solves + the line-number bug for one-line functions. + +Wed Apr 14 11:09:45 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * stabsread.c (BELIEVE_PCC_PROMOTION_TYPE): Provide default. + (define_symbol): Change #if BELIEVE_PCC_PROMOTION_TYPE and #if + BELIEVE_PCC_PROMOTION to if(). + +1999-04-13 Jason Molenda (jsm@bugshack.cygnus.com) + + * configure.in (HAVE_MULTIPLE_PROC_FDS): Don't define if we're + on a Solaris host (of any architecture). + * configure: Regenerated. + +1999-04-13 Jason Molenda (jsm@bugshack.cygnus.com) + + * rom68k-rom.c (init_rom68k_cmds): Fix an accidental substitution + in monitor command strings, fix some formatting mistakes. + +1999-04-13 Stan Shebs <shebs@andros.cygnus.com> + + * configure.tgt (arm-*-*): Whack another vestige of wingdb. + +1999-04-12 James Ingham <jingham@cygnus.com> + + * arm-tdep.c (arm_pop_frame): don't clobber the previous frame's + stack pointer (stored in frame->framereg's register) BEFORE + reading it. This was causing "return" to behave very oddly. + +1999-04-12 Stan Shebs <shebs@andros.cygnus.com> + + * NEWS: Mention tic80. + +1999-04-12 Elena Zannoni <ezannoni@kwikemart.cygnus.com> + + * a68v-nat.c: Remove reference to 'extern char registers[]' throughout. + * altos-xdep.c: Ditto. + * arm-xdep.c: Ditto. + * convex-xdep.c: Ditto. + * cxux-nat.c: Ditto. + * hp300ux-nat.c: Ditto. + * hppab-nat.c: Ditto. + * i386aix-nat.c: Ditto. + * i386mach-nat.c: Ditto. + * m88k-nat.c: Ditto. + * ptx4-nat.c: Ditto. + * pyr-xdep.c: Ditto. + * rs6000-nat.c: Ditto. + * sun3-nat.c: Ditto. + * sun386-nat.c: Ditto. + * symm-nat.c: Ditto. + * umax-xdep.c: Ditto. + * i386v4-nat.c: Ditto. Also include inferior.h. + * m68k-tdep.c: Ditto. Also include inferior.h. + +Mon Apr 12 15:57:16 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * inferior.h (CALL_DUMMY_STACK_ADJUST, CALL_DUMMY_STACK_ADJUST_P): + Provide default definitions. + * valops.c (hand_function_call): Replace #ifdef + CALL_DUMMY_STACK_ADJUST with if (CALL_DUMMY_STACK_ADJUST_P). + +1999-04-09 Jim Blandy <jimb@zwingli.cygnus.com> + + * ax-gdb.c, ax-gdb.h, ax-general.c, ax.h: Remove RCS Id strings. + They're a pain. * GDB 4.18 released. + * Makefile.in (VERSION): Bump to 4.18.1. -1999-04-06 Jim Blandy <jimb@zwingli.cygnus.com> +Thu Apr 8 16:04:34 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * inferior.h (CALL_DUMMY_P, CALL_DUMMY_WORDS, + SIZEOF_CALL_DUMMY_WORDS): Define macros. + (PUSH_DUMMY_FRAME, FIX_CALL_DUMMY, STORE_STRUCT_RETURN): Provide + fatal default. + + * inferior.h, gdbarch.c (call_dummy_words, + sizeof_call_dummy_words): Declare/Define variables. + * valops.c (value_arg_coerce, find_function_addr, + call_function_by_hand): Always define. + (hand_function_call): Rename CALL_DUMMY version of + call_function_by_hand. Make static. Add prototype. + (hand_function_call): Update. Allocate space for *dummy and + *dummy1 using alloca. + * breakpoint.c (frame_in_dummy): Update. - * README: Change revision numbers in text to "4.18". - * Makefile.in (VERSION): Set to 4.18. +1999-04-08 Jason Molenda (jsm@bugshack.cygnus.com) + + * monitor.c (monitor_read_memory): If a MO_GETMEM_NEEDS_RANGE + monitor, increase the end address by one byte. + +1999-04-08 Jason Molenda (jsm@bugshack.cygnus.com) + + * dbug-rom.c (init_dbug_cmds): Fix strings in + dbug_cmds.{step,clr_break,clr_all_break,fill} to send correct + commands to the monitor. + +1999-04-08 Keith Seitz <keiths@cygnus.com> + + * m32r-stub.c (branchDestination): Undo overly ambitious + sed script's conversion of cast from "char" to "unsigned char". + Return offset should now be properly computed. + +Thu Apr 8 14:13:19 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * inferior.h (CALL_DUMMY_BREAKPOINT_OFFSET_P): New macro. + Non-zero when CALL_DUMMY_BREAKPOINT_OFFSET is valid. + + * infcmd.c (breakpoint_auto_delete_contents): Always define. + (run_stack_dummy): Update. + * infrun.c (wait_for_inferior): Update + +1999-04-07 Stan Shebs <shebs@andros.cygnus.com> + + * MAINTAINERS: Mark Alexander can no longer maintain + h8300 and other embedded targets, sniff. 1999-04-06 Stan Shebs <shebs@andros.cygnus.com> + * inftarg.c (child_wait): Initialize execd_pathname. + * target.c (debug_to_has_execd): Handle NULL execd_pathname. + * solib.c (clear_solib): Don't call disable_breakpoints_in_shlibs, this breaks rerunning on sun4 native. -1999-04-05 Stan Shebs <shebs@andros.cygnus.com> +1999-04-06 Jim Blandy <jimb@zwingli.cygnus.com> - * NEWS: Incorporate suggestions from David Taylor and Jason Molenda. - -1999-04-02 Jim Blandy <jimb@zwingli.cygnus.com> + * config/sparc/nm-linux.h: Don't redefine PT_ATTACH to use the + deprecated PTRACE_SUNATTACH compatibility commands. The + definitions from <sys/ptrace.h> are fine. + +1999-04-06 Martin Hunt <hunt@cygnus.com> + + * annotate.h: Declare annotate_signal_hook. + + * annotate.c (annotate_signal): Add a call to + annotate_signal_hook(). + +1999-04-06 Jim Blandy <jimb@zwingli.cygnus.com> + + * dwarf2read.c (dwarf_decode_lines): Don't call record_line when + we hit a DW_LNE_end_sequence instruction. * README: Note that GDB requires an ANSI C compiler, and explain how to get GCC. * README: Update. - It says we provide HTML documentation, but we don't. - The instructions for building the .info files were wrong. - It didn't mention that texinfo.tex was provided with GDB. - It didn't mention the intl, texinfo, etc, or util directories. - (Perhaps util would be best left unmentioned.) - It didn't mention the --enable-build-warnings flag, or the --host - flag. - It didn't mention remote-array.c or remote-d10v.c. - It had an old address for reporting bugs. It's now gdb@gnu.org. - It mentioned xxgdb, which is obsolete, but didn't mention DDD. - * config/sparc/nm-linux.h: Don't redefine PT_ATTACH to use the - deprecated PTRACE_SUNATTACH compatibility commands. The - definitions from <sys/ptrace.h> are fine. - -1999-04-01 Stan Shebs <shebs@andros.cygnus.com> +1999-04-05 Stan Shebs <shebs@andros.cygnus.com> * NEWS: Add more notes about user-visible changes. +Mon Apr 5 14:56:59 1999 Michael Snyder <msnyder@cleaver.cygnus.com> + + * target.c (target_signal_to_string): check for signal + number in range; otherwise if the target board returns + a bogus signal number we might core dump (per David Taylor). + +1999-04-05 David Taylor <taylor@ryobi.cygnus.com> + + * utils.c (fputs_maybe_filtered): test value of + pagination_enabled before paginating. + +1999-04-02 James Ingham <jingham@cygnus.com> + + * blockframe.c (get_prev_frame): Remove the redundant + get_prev_frame_info. It is now exactly the same as + get_prev_frame, so there is no reason to have both functions. + + * rs6000-tdep.c (rs6000_init_extra_frame_info): + frame.h: + a29k-tdep.c (init_extra_frame_info): + config/a29k/tm-a29k.h: + i386-tdep.c: + Change all references to get_prev_frame_info to get_prev_frame. + +1999-04-02 Stan Shebs <shebs@andros.cygnus.com> + + * bcache.c, bcache.h, breakpoint.c, defs.h, expprint.c, + expression.h, gdbarch.c, gdbtypes.c, gdbtypes.h, gnu-nat.c, + gnu-nat.h, hppa-tdep.c, maint.c, monitor.c, objfiles.h, parse.c, + remote-mips.c, remote-sds.c, remote.c, sol-thread.c, symmisc.c, + symtab.h, target.c, top.c, typeprint.c, config/nm-gnu.h: Evaporate + the unused MAINTENANCE_CMDS conditional. + +1999-04-02 James Ingham <jingham@cygnus.com> + + * config/arm/tm-arm.h: (EXTRACT_STRUCT_VALUE_ADDRESS): This needs + to call extract_address, not just cast the first 4 bytes, since + the result will be passed to value_at which expects host-byte + order. + + * arm-tdep.c (arm_scan_prologue): The prologue_start address was + directly &'ed with 0x03fffffc, rather than using + ADDR_BITS_REMOVE. This would cause inferior function calls to + report the stack incorrectly on return. + + +1999-04-02 Keith Seitz <keiths@cygnus.com> + + * top.c (ui_loop_hook): Change declaration. Now returns an int. + * win32-nat.c (child_wait): Timeout WaitForDebugEvent and call + the ui_loop_hook if there was no debug event. + * top.c (ui_loop_hook): Change to return an int and include + on all non-Cygwin builds. + * v850ice.c: Change prototype of ui_loop_hook. + (v850ice_wait): Update call to ui_loop_hook. + * ser-unix.c (hardwire_readchar): Enable ui_loop_hook callbacks + for non-Cygwin builds. Check return status of ui_loop_hook and + return a timeout if told to detach. Add more documentation. + * ser-tcp.c (tcp_readchar): Break up timeouts into one second + intervals and call ui_loop_hook so that other UIs can + keep up to date. If ui_loop_hook returns non-zero, then + return SERIAL_TIMEOUT to facilitate detaching from the + target. + * remote.c (remote_interrupted_already): Remove. + (remote_interrupt_twice): Revive. + (remote_interrupt): Call remote_stop to interrupt the target + and install remote_interrupt_twice to take more severe + actions if this fails. + (remote_stop): Only attempt to stop the target. This separates + the command line from other UIs. + * remote-sim.c (gdb_os_poll_quit): Add a call to ui_loop_hook, + if it is defined. + 1999-04-01 Jim Blandy <jimb@zwingli.cygnus.com> Fix for cross-debugging on an AIX host from Johanna Svenningsson: * ax-gdb.h (enum axs_lvalue_kind): Remove trailing comma from enum. - * ax.h (enum agent_op, enum agent_flaws): Same. + * ax.h (enum agent_op): Same. * tracepoint.h (enum actionline_type): Same. * config/xm-aix4.h: Add declaration for termdef. @@ -54,9 +347,10 @@ * jv-lang.h (dynamics_objfile): Remove decl, conflicts with static decl in jv-lang.c. -1999-03-31 Jim Blandy <jimb@zwingli.cygnus.com> + * infrun.c (follow_inferior_fork): Add ifdefs around + SOLIB_REMOVE_INFERIOR_HOOK. - Mon Mar 29 14:40:44 1999 David Taylor <taylor@ryobi.cygnus.com> +Wed Mar 31 11:39:49 1999 David Taylor <taylor@ryobi.cygnus.com> * valops.c (search_struct_field): revert HP merge change to this function -- it causes messages to be printed about @@ -64,33 +358,63 @@ (search_struct_field_aux): delete -- added as part of HP merge change; with aforementioned change it is no longer called. -1999-03-26 Jim Blandy <jimb@zwingli.cygnus.com> +1999-03-30 Stan Shebs <shebs@andros.cygnus.com> - Merged change from Keith Seitz: - - 1999-03-16 Keith Seitz <keiths@cygnus.com> + Make more HPUX-specific code generic. + * infrun.c: Include top.h. + (MAY_SWITCH_FROM_INFERIOR_PID, MAY_FOLLOW_EXEC, + USE_THREAD_STEP_NEEDED): New native macros. + (may_switch_from_inferior_pid, may_follow_exec, + use_thread_step_needed): New globals. + (follow_inferior_fork): Remove HPUXHPPA ifdef. + (follow_exec): Ditto, also save run target and re-push instead of + always pushing child_ops, add ifdefs around SOLIB_RESTART and + SOLIB_CREATE_INFERIOR_HOOK. + (wait_for_inferior): Use new globals instead of ifdefing HPUXHPPA, + always use printf_filtered to report new threads. + (normal_stop): Ditto. + * target.h, target.c (find_run_target): New function. + * config/pa/nm-hppah.h: Define new macros. - * remote.c (reomte_binary_checked): New file global. - (check_binary_download): New function to check if - stub supports binary downloading that works with - stubs that are not eight bit clean. - (remote_write_bytes): Check for binary download capability - and use it if available. - Remove references to global remote_binary_length. What a hack. - (putpkt_binary): New function. - (putpkt): Call putpkt_binary. - Use xor to escape trouble characters. - * m32r-stub.c (bin2mem): Follow escape char convention change. +1999-03-29 Stan Shebs <shebs@andros.cygnus.com> - Applied patch from Stu Grossman: + * top.h: Include setjmp.h here. + * main.c, top.c: Don't include it here. - Mon Feb 22 12:32:19 1999 Per Bothner <bothner@cygnus.com> +1999-03-29 Keith Seitz <keiths@cygnus.com> - * jv-valprint.c (java_val_print): Restore line that somehow got lost. + * symtab.c (decode_line_1): Take out change which breaks symbols + which include class names and methods, e.g., "Foo::bar". + +1999-03-26 Stan Shebs <shebs@andros.cygnus.com> + + * configure.tgt (i[3456]86-*-sysv4.2MP, i[3456]86-*-sysv4.2uw2*): + Recognize both, as i[3456]86-*-sysv4.2*. + (i[3456]86-*-sysv5*): Recognize. + + * infrun.c (wait_for_inferior): Remove most #if 0 segments. + +Fri Mar 26 17:27:27 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * blockframe.c (pc_in_call_dummy_on_stack): Fix. Had copied code + from at_entry_point. + +Thu Mar 25 19:30:02 1999 Andrew Cagney <cagney@amy.cygnus.com> + + * gdbarch.c: Include all headers. + + * inferior.h, blockframe.c (pc_in_call_dummy_before_text_end, + pc_in_call_dummy_after_text_end, pc_in_call_dummy_on_stack, + pc_in_call_dummy_at_entry_point): Convert PC_IN_CALL_DUMMY macro's + into functions. + +Tue Mar 23 17:22:57 1999 Philippe De Muyter <phdm@macqel.be> + + * remote.c, parse.c: Include ctype.h. 1999-03-24 Stan Shebs <shebs@andros.cygnus.com> - * Makefile (VERSION): Bump to 4.17.87. + * configure.host (mips-dec-mach3*): Use mipsm3 not mach3. Attempt to sort out SCO-related configs. * configure.host (i[3456]86-*-sysv4.2*): Use instead of @@ -99,93 +423,340 @@ * configure.tgt (i[3456]86-*-sco3.2v5*, i[3456]86-*-sco3.2v4*): Recognize. +Wed Mar 24 16:19:01 1999 Christopher Faylor <cgf@cygnus.com> + + * MAINTAINERS: Add DJ Delorie (dj@cygnus.com) as the djgpp + maintainer. + +Wed Mar 24 21:19:57 1999 Andrew Cagney <cagney@amy.cygnus.com> + + * target.h (enum target_signal): Do not hardwire values of MACH + signals. + +1999-03-14 Ken Raeburn <raeburn@raeburn.org> + + * target.h (enum target_signal): Add TARGET_SIGNAL_INFO. + * target.c (signals): Add SIGINFO description. + (target_signal_from_host, target_signal_to_host): Translate + SIGINFO to/from TARGET_SIGNAL_INFO. + Wed Mar 24 01:01:27 1999 Andrew Cagney <cagney@sludge.cygnus.com> * rs6000-tdep.c (rs6000_software_single_step): Change SIGNAL to unsigned int. - From Rodney Brown <rodneybrown@pmsc.com>: + From Rodney Brown <rodneybrown@pmsc.com> * target.h (enum thread_control_capabilities), breakpoint.h (enum bptype), breakpoint.c (enum insertion_state_t): Strict ISO-C doesn't allow trailing comma in enum definition. -1999-03-23 Jason Molenda (jsm@bugshack.cygnus.com) +Mon Mar 22 15:56:04 1999 Andrew Cagney <cagney@b1.cygnus.com> - * hppa-tdep.c (pa_register_look_aside): Remove CPU_HPPA_RISC_20 - check, test for presence of struct save_state_t and the ss_wide - member directly. - * configure.in: Remove CPU_HPPA_RISC_20 test. Add tests for - HAVE_STRUCT_SAVE_STATE_T and HAVE_STRUCT_MEMBER_SS_WIDE. - * acconfig.h: Add HAVE_STRUCT_SAVE_STATE_T HAVE_STRUCT_MEMBER_SS_WIDE. - * configure, config.in: Regenerated. + * blockframe.c (inside_entry_file, inside_entry_func): Convert #if + CALL_DUMMY_LOCATION to if. + * valops.c (call_function_by_hand): Ditto. + * infcmd.c (run_stack_dummy): Ditto. + * inferior.h (CALL_DUMMY_ADDRESS, CALL_DUMMY_START_OFFSET, + CALL_DUMMY_BREAKPOINT_OFFSET): Provide default. -Tue Mar 23 17:22:57 1999 Philippe De Muyter <phdm@macqel.be> +1999-03-23 Jason Molenda (jsm@bugshack.cygnus.com) - * remote.c, parse.c: Include ctype.h. + * hppa-tdep.c (pa_register_look_aside): Remove CPU_HPPA_RISC_20 + check, test for presence of struct save_state_t and the ss_wide + member directly. + * configure.in: Remove CPU_HPPA_RISC_20 test. Add tests for + HAVE_STRUCT_SAVE_STATE_T and HAVE_STRUCT_MEMBER_SS_WIDE. + * acconfig.h: Add HAVE_STRUCT_SAVE_STATE_T HAVE_STRUCT_MEMBER_SS_WIDE. + * configure, config.in: Regenerated. Mon Mar 22 13:25:13 1999 Michael Snyder <msnyder@cleaver.cygnus.com> * infttrace.c (proc_wait): rename to ptrace_wait. +1999-03-18 Jim Blandy <jimb@zwingli.cygnus.com> + + * dwarf2read.c: Correctly recognize location expressions that + designate LOC_REF_ARG arguments. Doc fixes. + (isderef): New global. (Yuck.) + (dwarf2_complex_location_expr): New complaint. + (read_func_scope): Reject frame_base attributes that use the + `deref' opcode as too complex. + (new_symbol): If both regoff and isderef are set, and the base + register is the frame pointer, then it's a LOC_REF_ARG argument. + (decode_locdesc): Recognize the `deref' opcode in location + expressions. Complain if it's not the last op in the expression. + + * config/fr30/tm-fr30.h (COERCE_FLOAT_TO_DOUBLE): #define this to + be true, or else value_arg_coere won't respect the (accurate) + information we have about whether a function is prototyped. + +1999-03-17 Jim Blandy <jimb@zwingli.cygnus.com> + + * config/fr30/tm-fr30.h (STACK_ALIGN): Define this here, so + calling functions by hand with odd-sized arguments doesn't munge + the stack. + 1999-03-17 Jason Molenda (jsm@bugshack.cygnus.com) * configure.in (HAVE_MULTIPLE_PROC_FDS): Don't define for Solaris hosts--gdb doesn't support this yet. * configure: Regenerated. +1999-03-16 Keith Seitz <keiths@cygnus.com> + + * remote.c (remote_binary_checked): New file global. + (check_binary_download): New function to check if + stub supports binary downloading that works with + stubs that are not eight bit clean. + (remote_write_bytes): Check for binary download capability + and use it if available. + Remove references to global remote_binary_length. What a hack. + (putpkt_binary): New function. + (putpkt): Call putpkt_binary. + Use xor to escape trouble characters. + * m32r-stub.c (bin2mem): Follow escape char convention change. + Tue Mar 16 01:11:33 1999 Andrew Cagney <cagney@rhino.cygnus.com> * target.h (struct target_ops), target.c (debug_to_query), remote.c (pack_hex_byte, remote_query): Promote char parameters to int. Stops compile problems with pedantic ISO-C compilers. - + Tue Mar 16 15:29:04 1999 Stan Shebs <shebs@andros.cygnus.com> + * go32-xdep.c: Remove, no longer used by anything. + * Makefile.in: Remove references. + * jv-lang.c, jv-lang.h (java_primitive_type): Declare argument as int instead of char. -1999-03-15 Jim Blandy <jimb@zwingli.cygnus.com> +Mon Mar 15 11:42:43 1999 Andrew Cagney <cagney@b1.cygnus.com> - Merged changes for binary downloads from Michael Snyder: + * d10v-tdep.c (push_stack_item, pop_stack_item): New function. + (d10v_push_arguments): Use. - Fri Mar 12 13:11:48 1999 Michael Snyder <msnyder@cleaver.cygnus.com> + From Martin M. Hunt <hunt@cygnus.com>: + * d10v-tdep.c (d10v_push_arguments): When arguments + must be pushed onto the stack, they go on in + reverse order. + +1999-03-16 Jim Blandy <jimb@zwingli.cygnus.com> - * remote.c (remote_write_bytes): fix 'X' packet protocol so that it - can't overwrite the end of its buffer with escaped characters. + * symtab.c (make_symbol_overload_list): Don't try to stuff minimal + or partial symbols into the overload list; we don't know their + types. (Thanks to Rajiv Mirani.) + +1999-03-15 Jason Molenda (jsm@bugshack.cygnus.com) + + * acinclude.m4 (--with-itclconfig, --with-itkconfig, --with-tixconfig): + Fix whitespace so --help messages line up. + * configure.in (--with-cpu): Fix capitalization for --help messages. + * configure, aclocal.m4: Regenerated. + +Mon Mar 15 11:39:03 1999 Ian Carmichael <iancarm@cygnus.com> + + Support building gdb w/o simulator: + * configure.in: Support --disable-sim. Check for sim directory. + * Makefile.in (IGNORE_SIM, IGNORE_SIM_OBS): New. + * acconfig.h (WITH_SIM): Define. + * configure, config.in: Regenerate. + +Mon Mar 15 08:01:33 1999 Elena Zannoni <ezannoni@cygnus.com> + + Patch from Andreas Schwab <schwab@issan.cs.uni-dortmund.de> + + * top.c (read_command_lines): Reset control_level to 0. + (define_command): Don't do it here. + +Sun Mar 14 16:12:15 1999 Andrew Cagney <cagney@rhino.cygnus.com> + + * hppah-nat.c (store_inferior_registers): Delete extern + registers[] declaration. + +Sun Mar 14 19:17:30 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * infrun.c (write_inferior_status_register): New function. Provide + update access to an inf_status register buffer. Only used by HP. + * inferior.h (write_inferior_status_register): Add prototype. + + * hppa-tdep.c (push_dummy_frame): Use + write_inferior_status_register when hacking around a sleeping + inferior. Accidently fix byte-order problem. + +Sun Mar 14 16:40:10 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * config/pa/tm-hppa.h (PUSH_DUMMY_FRAME): Fix parameter. Address + not needed. + +Fri Mar 12 13:11:48 1999 Michael Snyder <msnyder@cleaver.cygnus.com> + + * remote.c (remote_write_bytes): fix 'X' packet protocol so that it + can't overwrite the end of its buffer with escaped characters. 1999-03-12 Jim Blandy <jimb@zwingli.cygnus.com> - Merged changes for HP/UX 9 from Jason Molenda: + Alpha patches from Richard Henderson: - 1999-03-08 Jason Molenda (jsm@bugshack.cygnus.com) + * alpha-tdep.c (alpha_skip_prologue): Recognize subq. - * infttrace.c (hppa_get_process_events): Removed. Function only - usable on HPUX 10 and above. It is not called by any other part - of GDB. - * hppah-nat.c (hppa_get_process_events): Ditto. - (child_pid_to_exec_file): Only call ptrace with PT_GET_PROCESS_PATHNAME - if that symbol has been defined. - * config/pa/nm-hppah.h: Don't set up prototypes et al for - hppa_get_process_events. + * config/alpha/tm-alpha.h (REGISTER_NAMES): No f31, but fpcr. + (FPCR_REGNUM): New. + (REGISTER_CONVERTIBLE): Don't convert fpcr. + (REGISTER_VIRTUAL_TYPE): Don't make fpcr a double. - * config/pa/hppahpux.mh (TERM_LIB): Do not initialize, let autoconf - determine best library automatically. - * config/pa/hpux1020.mh: Ditto. - * config/pa/hpux1100.mh: Ditto. - * configure.in (TERM_LIB): Also check for libHcurses. - * configure: Regenerated. + * stabsread.c (define_symbol): Only consider live range extension + if we have an open parenthesis. - Merged changes to accomodate the Hurd: - - Thu Mar 11 18:05:11 1999 Michael Snyder <msnyder@cleaver.cygnus.com> +1999-03-11 Jim Blandy <jimb@zwingli.cygnus.com> + + * monitor.c (monitor_fetch_register): Print RDEBUG info correctly + when the register name is null. + +Thu Mar 11 19:33:07 1999 Stan Shebs <shebs@andros.cygnus.com> + + * infrun.c (wait_for_inferior): Change #if DECR_PC_AFTER_BREAK + uses to expressions, remove redundant extern decls. + +Thu Mar 11 18:05:11 1999 Michael Snyder <msnyder@cleaver.cygnus.com> * infptrace.c (proc_wait): Rename to ptrace_wait. * inftarg.c (child_wait): call ptrace_wait instead of proc_wait. * inferior.h: Declare ptrace_wait instead of proc_wait. -1999-03-11 Jim Blandy <jimb@zwingli.cygnus.com> - - * Makefile.in (VERSION): click to 4.17.86, for next snapshot. +Thu Mar 11 11:46:25 1999 Andrew Cagney <cagney@amy.cygnus.com> + + * breakpoint.c (create_solib_load_unload_event_breakpoint, + create_fork_vfork_event_catchpoint, tcatch_command, + create_exception_catchpoint, break_at_finish_at_depth_command_1, + catch_fork_command_1, ep_skip_leading_whitespace, + break_at_finish_command_1, catch_exec_command_1, + catch_exception_command_1, stop_command, stopin_command, + stopat_command, ep_parse_optional_filename, + ep_find_event_name_end, ep_parse_optional_if_clause, + catch_fork_command_1), stack.c (show_and_print_stack_frame_stub, + print_stack_frame_stub, print_only_stack_frame_stub, + backtrace_command_1, backtrace_full_command, func_command), + valprint.c (print_decimal), source.c (print_source_lines_base): + Add prototype. + + * stack.c (print_stack_frame_stub, show_and_print_stack_frame_stub, + print_only_stack_frame_stub): Make param void*. + +Wed Mar 10 19:33:28 1999 Geoffrey Noer <noer@cygnus.com> + + * win32-nat.c: If old Cygwin Win32 API headers aren't being used, + define some gdb-specific defines that shouldn't have been in the + global headers. + +Wed Mar 10 21:20:25 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * findvar.c (registers, register_valid): Replace array with pointer. + (build_findvar): New function. Allocate space for REGISTERS and + REGISTER_VALID. + (_initialize_findvar): Call build_findvar. + + * inferior.h (registers, register_valid): Replace array with + pointer. + + * inferior.h (struct inferior_status): Move definition from here. + + * infrun.c (struct inferior_status): To here. + (struct inferior_status): Change ``stop_registers'' and + ``registers'' to pointers. + (xmalloc_inferior_status, free_inferior_status): New functions. + (restore_inferior_status): Call free_inferior_status. + (save_inferior_status): Call xmalloc_inferior_status. + (discard_inferior_status): New function, discard inf_status + buffer. Call free_inferior_status. + + * inferior.h (stop_registers): Replace array with pointer. + * infrun.c (stop_registers): Update. + (build_infrun): Initialize stop_registers. + (_initialize_infrun): Call build_infrun. + +Wed Mar 10 14:50:42 1999 Andrew Cagney <cagney@amy.cygnus.com> + + * alpha-tdep.c (alpha_linux_sigtramp_offset): Only compile when + LINUXALPHA target. Hack. + + * infrun.c (set_follow_fork_mode_command): Make static. Add + prototype. + * tracepoint.c (add_register): Ditto. + * valprint.c (strcat_longest): Comment out. Does not appear to be + used. + * valops.c (find_method_list): Make static. Add prototype. + * thread.c (target_find_new_threads): Make static. Add prototype. + * stack.c (stack_publish_stopped_with_no_frame, + select_and_maybe_print_frame): Comment out. Does not appear to be + used. + (current_frame_command): Add prototype. + * breakpoint.c (break_at_finish_command, + break_at_finish_at_depth_command, tbreak_at_finish_command): Make + static. Add prototype. + * findvar.c (read_relative_register_raw_bytes_for_frame): Ditto. + +Wed Mar 10 23:38:54 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * corefile.c (registers): Delete redundant variable declaration. + * inferior.h (run_stack_dummy): Change array argument to pointer. + * infcmd.c (run_stack_dummy): Update. + * value.h (value_being_returned): Change RETBUF to a pointer. + * values.c (value_being_returned): Update. + +Wed Mar 10 11:08:16 1999 Andrew Cagney <cagney@amy.cygnus.com> + + * source.c (list_command): GCC suggested explicit braces to avoid + ambiguous `else'. + + * jv-typeprint.c: Include "c-lang.h". + * Makefile.in (jv-typeprint.o): Add dependency. + * jv-valprint.c: Include "gdbcore.h", "annotate.h". + * Makefile.in (jv-valprint.o): Add dependencies. + * objfiles.c: Include "breakpoint.h". + * Makefile.in (objfiles.o): Add dependency. + * main.c: Include <unistd.h>. + * parse.c: Include <ctype.h>. + * remote.c: Include <ctype.h>. + * ser-tcp.c: Include <unistd.h>. + * ax-general.c: Include "value.h". + * Makefile.in (ax-general.o): Add dependency. + + * alpha-tdep.c (alpha_push_arguments): Make ``i'' an int instead + of a register. + * frame.h (show_and_print_stack_frame): Add function prototype. + * language.h (language_enum): Add function prototype. + * value.h (find_overload_match): Add function prototype. + + * defs.h, utils.c (subset_compare): Rename subsetCompare. Add + prototype. + * stack.c (backtrace_command): Update. + +Wed Mar 10 13:58:36 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * configure.in (AC_CHECK_HEADERS): Check for <sys/select.h> + * configure, config.in: Re-generate. + * inflow.c: Conditionally include <sys/select.h>. + +Wed Mar 10 13:44:38 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * frame.h (struct dummy_frame): Move from here. + * blockframe.c (struct dummy_frame): To here. + + * blockframe.c (struct dummy_frame): Replace ``regs'' with pointer + ``registers''. + (generic_pop_dummy_frame): Free it. + (generic_push_dummy_frame): Allocate dummy frame register buffer. + +Wed Mar 10 11:08:16 1999 Andrew Cagney <cagney@amy.cygnus.com> + + * thread.c (_initialize_thread): Delete redundant ``extern struct + cmd_list_element *cmdlist''. + * printcmd.c (print_command_1): Ditto for ``objectprint''; + +1999-03-09 Stan Shebs <shebs@andros.cygnus.com> + + * MAINTAINERS: New file, list of maintainers and areas they + maintain. 1999-03-09 Rodney Brown <RodneyBrown@pmsc.com> @@ -201,11 +772,185 @@ Tue Mar 16 15:29:04 1999 Stan Shebs <shebs@andros.cygnus.com> * config/i386/tm-i386v42mp.h: Remove HAVE_PSTATUS_T, HAVE_NO_PRRUN_T; now set by configure. +Tue Mar 9 16:29:24 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * i386-tdep.c (gdb_print_insn_i386): Abort when disassembly_flavor + undefined.. + + * fr30-tdep.c (_initialize_fr30_tdep): Add prototype. Fix + coding style. + + * target.c (debug_to_enable_exception_callback, + debug_to_get_current_exception_event): Return result of call to + debug_target(). + +1999-03-09 Jim Blandy <jimb@zwingli.cygnus.com> + + Another HURD fix from Mark Kettenis: + * gnu-nat.c: Include <string.h>. Remove declaration of strerror. + Include <bits/waitflags.h> instead of <waitflags.h> and define + _SYS_WAIT_H to prevent the warning that we should not include it. + (gnu_create_inferior): Change return type of attach_to_child to + void. Do not return INFERIOR_PID. + (gnu_pid_to_exec_file): Change return type to char *. + Return NULL. + + Fix for the HURD from Mark Kettenis: + * configure.in: Add AC_PROG_AWK. Needed by the machine-dependent + makefile fragments for the Hurd. + * Makefile.in (AWK): Add. Set by configure. + * configure: Regenerated. + +1999-03-08 Jason Molenda (jsm@bugshack.cygnus.com) + + * infttrace.c (hppa_get_process_events): Removed. Function only + usable on HPUX 10 and above. It is not called by any other part + of GDB. + * hppah-nat.c (hppa_get_process_events): Ditto. + (child_pid_to_exec_file): Only call ptrace with + PT_GET_PROCESS_PATHNAME if that symbol has been defined. + * config/pa/nm-hppah.h: Don't set up prototypes et al for + hppa_get_process_events. + + * config/pa/hppahpux.mh (TERM_LIB): Do not initialize, let autoconf + determine best library automatically. + * config/pa/hpux1020.mh: Ditto. + * config/pa/hpux1100.mh: Ditto. + * configure.in (TERM_LIB): Also check for libHcurses. + * configure: Regenerated. + +Thu Mar 4 17:16:04 1999 Michael Snyder <msnyder@cleaver.cygnus.com> + + * m32r-stub.c: add support for crc "Compare" command. + 1999-03-04 Jim Blandy <jimb@zwingli.cygnus.com> - Merged changes from Jason Molenda: + * fr30-tdep.c (fr30_store_return_value): Allocate zeroes + dynamically, to save BSS space, and to remove assumptions about + the size of the largest value we'll return. + + * config/fr30/tm-fr30.h (fr30_store_return_value): Use PARAMS in + prototype. + +Thu Mar 4 08:37:35 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * sh3-rom.c (sh3_supply_register, sh3_supply_register), + mips-tdep.c (mips_push_arguments), m32r-rom.c + (m32r_upload_command), m32r-tdep.c (decode_prologue), monitor.c + (longlong_hexchars), tracepoint.c (validate_actionline, + read_actions), mdebugread.c + (parse_symbol), jv-typeprint.c + (java_type_print_base, java_type_print_base), mdebugread.c + (parse_symbol), top.c (source_command), utils.c + (floatformat_to_doublest): GCC suggest explicit braces to avoid + ambiguous `else'. - 1999-02-24 Jason Molenda (jsm@bugshack.cygnus.com) + * tracepoint.c (map_args_over_tracepoints, trace_actions_command), + m32r-rom.c (m32r_supply_register), win32-nat.c + (handle_output_debug_string, child_continue), i960-tdep.c + (pop_frame), m32r-rom.c (m32r_upload_command): GCC suggested + parentheses around assignment used as truth value. + + * remote-sds.c (sds_wait), monitor.c (monitor_fetch_register), + ser-e7kpc.c, (dosasync_write), arc-tdep.c (arc_get_frame_setup): + GCC suggested parentheses around operands. + + * c-typeprint.c (c_type_print_base): GCC suggested enclosing + "while" expression in paren. + +Wed Mar 3 18:14:33 1999 Andrew Cagney <cagney@chook.cygnus.com> + + * sol-thread.c (save_inferior_pid): Cast the saved pid to void*. + (restore_inferior_pid): Takes void* as required by make_cleanup. + Casts pid back to an int. + + * procfs.c (make_cleanup_close_proc_file, + close_proc_file_cleanup): Create a proc_file cleanup. + (info_proc): Use. + + * defs.h (make_cleanup_freeargv): Helper function. Establish + cleanup using freeargv. Can not just typecast/pass freeargv as it + violates ISO-C. + * utils.c (do_freeargv): Helper. + (make_cleanup_freeargv): New function. + + * symmisc.c (maintenance_print_symbols, + maintenance_print_psymbols, maintenance_print_msymbols), symfile.c + (symbol_file_command), stack.c (backtrace_command), remote-sim.c + (gdbsim_create_inferior, gdbsim_open), remote-mips.c + (common_open), procfs.c (info_proc), infrun.c (handle_command, + xdb_handle_command), exec.c (exec_file_attach): Call + make_cleanup_freeargv. + +1999-03-03 James Ingham <jingham@cygnus.com> + + * i386-tdep.c (_initialize_i386_tdep): Set the inital value for + disassembly flavor at startup, rather than hardcoding it. + +1999-03-03 Jim Blandy <jimb@zwingli.cygnus.com> + + Put return values in the right place. + * fr30-tdep.c (fr30_store_return_value): New function. + * config/fr30/tm-fr30.h (STORE_RETURN_VALUE): Call + fr30_store_return_value. + +Wed Mar 3 18:10:55 1999 Andrew Cagney <cagney@chook.cygnus.com> + + * gdbtypes.c (virtual_base_list_aux): Return void. Add prototype. + + * breakpoint.c (map_catch_names): Comment out unused function. + +1999-03-02 Jason Molenda (jsm@bugshack.cygnus.com) + + * hppa-tdep.c (pa_register_look_aside): Only refer to save_state_t + structure on PA 2.0 systems. + +1999-03-02 Stan Shebs <shebs@andros.cygnus.com> + + From Gary Thomas <gthomas@cygnus.co.uk>: + * arm-tdep.c (ARM_LE_BREAKPOINT, ARM_BE_BREAKPOINT, + THUMB_LE_BREAKPOINT, THUMB_BE_BREAKPOINT): Use illegal instruction + instead of SWI 24. + * config/arm/tm-arm.h (CALL_DUMMY): Ditto. + (IN_SIGTRAMP): Define. + +1999-03-02 Nick Clifton <nickc@cygnus.com> + + * findvar.c (store_address): Delete incorrect big endian + code. + +Tue Mar 2 18:02:42 1999 Andrew Cagney <cagney@chook> + + * configure.in (gdb_cv_os_cygwin): Compat. Continue to reconize + __CYGWIN32__. + +1999-03-01 Jason Molenda (jsm@bugshack.cygnus.com) + + * configure.in: Move setting of gdb_cv_os_cygwin to before + setting of TERM_LIB. Check for __CYGWIN__ instead of __CYGWIN32__. + * configure: Regenerated. + +1999-03-01 DJ Delorie <dj@cygnus.com> + + * configure.in: Change -cygwin32* to -cygwin*. + * configure: Ditto. + +1999-02-25 Stan Shebs <shebs@andros.cygnus.com> + + * breakpoint.c (SOLIB_LOADED_LIBRARY_PATHNAME, + SOLIB_UNLOADED_LIBRARY_PATHNAME, SOLIB_CREATE_CATCH_LOAD_HOOK, + SOLIB_CREATE_CATCH_UNLOAD_HOOK): Supply default definitions. + * infrun.c (SOLIB_IN_DYNAMIC_LINKER): Ditto. + +1999-02-25 Keith Seitz <keiths@cygnus.com> + + * corelow.c (core_close): Clear out solib state before + closing the bfd associated with the core file. + * solib.c (clear_solib): Mention that clear_solib requires + an open BFD in order for disable_breakpoints_in_shlibs to + determine whether breakpoints live in shared libraries. + +1999-02-24 Jason Molenda (jsm@bugshack.cygnus.com) * configure.in: Set CPU_HPPA_RISC_20 if the host CPU is a PA 2.0 processor. @@ -215,15 +960,90 @@ Tue Mar 16 15:29:04 1999 Stan Shebs <shebs@andros.cygnus.com> structure elements if we are on a PA2.0 system. * defs.h: Include limits.h. - Merged changes from Stu Grossman: +Tue Feb 23 14:37:08 1999 Michael Snyder <msnyder@cleaver.cygnus.com> + + * infrun.c (wait_for_inferior): Check scheduler_locking state + before resuming after a thread-specific breakpoint. + +1999-02-23 Jim Blandy <jimb@zwingli.cygnus.com> + + * aclocal.m4, config.in, configure: Regenerated with latest + autotools. + +Mon Feb 22 12:32:19 1999 Per Bothner <bothner@cygnus.com> + + * jv-valprint.c (java_val_print): Restore line that somehow got lost. + + * jv-valprint.c (java_print_value_fields): Check for NULL type. + +1999-02-21 Jim Blandy <jimb@zwingli.cygnus.com> + + * tm-h8500.h, i386lynx-nat.c: Removed. These files are long + dead; it seems that they only appeared due to some CVS weirdness. + If they appear again, we may need to distribute garlic and holy + water. + +1999-02-19 Jason Molenda (jsm@bugshack.cygnus.com) + + * configure.in (TERM_LIB): Move checking for TERM_LIB, substituting. + * configure: Regenerated. + +1999-02-19 Robert Hoehne (robert.hoehne@gmx.net) + + * configure.host (i[3456]86-*-msdosdjgpp*): New host. + * configure.tgt (i[3456]86-*-msdosdjgpp*): New target. + * go32-nat.c: New file, native DJGPP support. + * config/i386/go32.mh: Rewrite for DJGPP (go32) host. + * config/i386/go32.mt: New file, DJGPP (go32) target. + * config/i386/nm-go32.h: New file. + * config/i386/tm-go32.h: New file. + * config/i386/xm-go32.h: Rewritten for current DJGPP. + +1999-02-18 Jason Molenda (jsm@bugshack.cygnus.com) + + * reply_mig_hack.awk, config/nm-gnu.h, config/alpha/nm-linux.h + config/alpha/xm-alphalinux.h, config/alpha/xm-alphaosf.h + config/i386/nm-i386sco5.h, config/i386/tm-fbsd.h, config/i386/tm-i386.h + config/powerpc/nm-aix.h, config/powerpc/tm-macos.h + config/powerpc/tm-ppc-aix.h, config/powerpc/xm-aix.h + config/rs6000/tm-rs6000-aix4.h, testsuite/gdb.chill/tests1.ch + testsuite/gdb.chill/tests2.ch, testsuite/gdb.chill/tests2.exp: + Update FSF address in copyright notices. + +1999-02-18 Jason Molenda (jsm@bugshack.cygnus.com) + + * configure.in: Quote "$GCC" correctly. + * configure: Regenerated. + +1999-02-18 Jim Blandy <jimb@zwingli.cygnus.com> + + * dbxread.c (elfstab_build_psymtabs): Don't assume that there's a + section named ".text", which has all the code in it. Instead, look + at all the sections in the file with the `code' flag set. + (find_text_range): New function, that does all the work. + +Thu Feb 18 17:50:45 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * mips-tdep.c (FP_REGISTER_DOUBLE): Conditionally define. + +Fri Jan 29 16:51:11 1999 Andrew Cagney <cagney@chook.cygnus.com> + + * mips-tdep.c (return_value_location): New function. Merge/rewrite + of return-value code in mips_extract_return_value, + mips_store_return_value. Stop buffer overflow when 64 bit value + in 32 bit registers. Extract 64bit float from 32 bit register + pair of correct order. + (mips_extract_return_value, mips_store_return_value): Call + return_value_location. For store, ensure that remainder of + register is zero. - Wed Feb 17 10:10:27 1999 Stu Grossman <grossman@babylon-5.cygnus.com> +Wed Feb 17 10:10:27 1999 Stu Grossman <grossman@babylon-5.cygnus.com> * gdbtypes.h (get_discrete_bounds): Remove duplicate decl. * jv-typeprint.c (java_type_print_base): Change fputs => fputs_filtered. - Mon Jan 25 18:30:57 1999 Per Bothner <bothner@cygnus.com> +Mon Jan 25 18:30:57 1999 Per Bothner <bothner@cygnus.com> * jv-lang.h (JAVA_OBJECT_SIZE): Change from hard-wired constant. (java_primitive_type_from_name, get_java_object_header_size): Declare. @@ -247,7 +1067,7 @@ Tue Mar 16 15:29:04 1999 Stan Shebs <shebs@andros.cygnus.com> is a waste of effort. Also, handle TYPE_CODE_INT, to make sure Java bytes as not printed as C chars. - Fri Jan 8 16:58:22 1999 Stu Grossman <grossman@babylon-5.cygnus.com> +Fri Jan 8 16:58:22 1999 Stu Grossman <grossman@babylon-5.cygnus.com> * blockframe.c (find_pc_sect_partial_function): Search full symtabs as a last ditch effort (after the partial & minimal symtabs). @@ -263,7 +1083,7 @@ Tue Mar 16 15:29:04 1999 Stan Shebs <shebs@andros.cygnus.com> * values.c (value_virtual_fn_field): Fixes code to handle new vtable debug info format. Patch from marka. - Wed Dec 16 23:11:25 1998 Stu Grossman <grossman@fencer.cygnus.com> +Wed Dec 16 23:11:25 1998 Stu Grossman <grossman@fencer.cygnus.com> * jv-lang.c (java_class_from_object java_class_is_primitive is_object_type): Change dtable to vtable. @@ -271,13 +1091,13 @@ Tue Mar 16 15:29:04 1999 Stan Shebs <shebs@andros.cygnus.com> * (_initialize_java_language): Make java_char_type be unsigned. * jv-lang.h: Fixup prototypes. - Mon Dec 7 19:02:15 1998 Stu Grossman <grossman@babylon-5.cygnus.com> +Mon Dec 7 19:02:15 1998 Stu Grossman <grossman@babylon-5.cygnus.com> * jv-valprint.c (java_value_print): Fix printing of values where run time type != compile time type. - Fri Dec 4 15:23:38 1998 Stu Grossman <grossman@fencer.cygnus.com> - +Fri Dec 4 15:23:38 1998 Stu Grossman <grossman@fencer.cygnus.com> + * Makefile.in: Whack out m2-typeprint.c. * c-typeprint.c (c_type_print_varspec_suffix) typeprint.h: Make this global. It's needed by Java. @@ -296,71 +1116,37 @@ Tue Mar 16 15:29:04 1999 Stan Shebs <shebs@andros.cygnus.com> * jv-valprint.c (java_val_print): Minor formatting. * m2-lang.c (m2_language_d): Change m2_print_type to c_print_type. * stabsread.c (read_member_functions): Save public and static attributes. + +Wed Feb 17 15:32:57 1999 Elena Zannoni <ezannoni@kwikemart.cygnus.com> -1999-03-02 Stan Shebs <shebs@andros.cygnus.com> - - From Gary Thomas <gthomas@cygnus.co.uk>: - * arm-tdep.c (ARM_LE_BREAKPOINT, ARM_BE_BREAKPOINT, - THUMB_LE_BREAKPOINT, THUMB_BE_BREAKPOINT): Use illegal instruction - instead of SWI 24. - * config/arm/tm-arm.h (CALL_DUMMY): Ditto. - (IN_SIGTRAMP): Define. - -1999-03-01 Jim Blandy <jimb@zwingli.cygnus.com> - - * configure.in (TERM_LIB): Move the code which sets this to a - better place. - -1999-02-25 Stan Shebs <shebs@andros.cygnus.com> - - * breakpoint.c (SOLIB_LOADED_LIBRARY_PATHNAME, - SOLIB_UNLOADED_LIBRARY_PATHNAME, SOLIB_CREATE_CATCH_LOAD_HOOK, - SOLIB_CREATE_CATCH_UNLOAD_HOOK): Supply default definitions. - * infrun.c (SOLIB_IN_DYNAMIC_LINKER): Ditto. - -1999-02-23 Jim Blandy <jimb@zwingli.cygnus.com> - - Patch from Jason Molenda (jsm@bugshack.cygnus.com) - * configure.in (TERM_LIB): Move checking for TERM_LIB, substituting. - * configure, aclocal.m4, config.in: Regenerated. - -1999-02-22 Jim Blandy <jimb@zwingli.cygnus.com> - - * Makefile.in (VERSION): Bump to 4.17.85, for the release process. - - Patch from Elena Zannoni <ezannoni@kwikemart.cygnus.com> * breakpoint.c (watch_command_1): Reformat comment. - Patch from Elena Zannoni <ezannoni@kwikemart.cygnus.com> * c-typeprint.c (c_type_print_base): Reformat comments. - Patch from Edith Epstein <eepstein@sophia.cygnus.com>: +1999-02-17 Jim Blandy <jimb@zwingli.cygnus.com> + + * Makefile.in (VERSION): Bump version to 4.17.2. + +Tue Feb 16 15:48:20 1999 Edith Epstein <eepstein@sophia.cygnus.com> + * config/pa/nm-hppah.h: Added prototype declarations for hppa_enable_page_protection_events and hppa_disable_page_protection_events. - - Patch from Edith Epstein <eepstein@sophia.cygnus.com>: - * infttrace.c (hppa_insert_hw_watchpoint): Make sure that - function always returns a value. - (hppa_remove_hw_watchpoint): Make sure that function always - returns a value. - - Patch from Edith Epstein <eepstein@sophia.cygnus.com>: + * inftarg.c (child_wait): Fixed code that checks whether or not the target program has done a fork/vfork. related_pid does not have a value unless the target program has forked/vforked. - -1999-02-22 Jim Blandy <jimb@zwingli.cygnus.com> - - * tm-h8500.h, i386lynx-nat.c: Removed. These files are long - dead; it seems that they only appeared due to some CVS weirdness. - If they appear again, we may need to distribute garlic and holy - water. + + * infttrace.c (hppa_insert_hw_watchpoint): Make sure that + function always returns a value. + (hppa_remove_hw_watchpoint): Make sure that function always + returns a value. -1999-02-16 Jim Blandy <jimb@zwingli.cygnus.com> +Tue Feb 16 06:31:58 1999 Keith Seitz <keiths@cygnus.com> - * Makefile.in (VERSION): Bump to 4.17.2. + * config/powerpc/tm-ppc-eabi.h: Do not define PC_IN_CALL_DUMMY, + let the generic call dummy infrastructure do it. Sun Feb 14 18:21:08 1999 Mark Alexander <marka@cygnus.com> diff --git a/gdb/ChangeLog-97 b/gdb/ChangeLog-97 index 4f9a949..026c9a5 100644 --- a/gdb/ChangeLog-97 +++ b/gdb/ChangeLog-97 @@ -143,6 +143,12 @@ Thu Dec 11 13:40:46 1997 Andrew Cagney <cagney@b1.cygnus.com> * dwarf2read.c (dwarf_decode_lines): Change type of address to CORE_ADDR. +Thu Dec 11 22:39:02 1997 Mark Alexander <marka@cygnus.com> + + From change made to branch by Bob Manson <manson@cygnus.com>: + * tic80-tdep.c (tic80_push_arguments): The compiler always + passes structs by reference. + Thu Dec 11 14:28:01 1997 Michael Snyder (msnyder@cleaver.cygnus.com) * tracepoint.c (trace_find_command): don't error if going @@ -1016,6 +1022,10 @@ Sat Aug 9 01:50:14 1997 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) Fri Aug 8 21:35:44 1997 Mark Alexander <marka@cygnus.com> + * config/tic80/tic80.mt: + (GDBSERVER-DEPFILES, GDBSERVER_LIBS): Define for gdbserver. + (SIM): Remove -lm to prevent make errors. + * configure.tgt: add gdbserver to configdirs for tic80. * gdbserver/utils.c (error): Change prototype to match defs.h. * gdbserver/low-sim.c: Change simulator calls to use new interface. * remote.c (remote_write_bytes): Include '$' at start of packet @@ -1151,6 +1161,11 @@ Wed Aug 6 16:15:31 1997 Geoffrey Noer <noer@cygnus.com> (_initialize_bdm_ppc): new * config/powerpc/tm-ppc-eabi.h: add necessary CPU32 BDM defines +Tue Aug 5 23:56:14 1997 Mark Alexander <marka@cygnus.com> + + * tic80-tdep.c (tic80_init_extra_frame_info): Allow zero + as a valid SP-relative offset of a saved register. + Wed Aug 6 00:24:08 1997 Jeffrey A Law (law@cygnus.com) * hpread.c (hpread_read_struct_type): Use accessor macros rather @@ -1654,6 +1669,15 @@ Wed May 14 08:58:55 1997 Jeffrey A Law (law@cygnus.com) symbols to find the end of the prologue. * mn10300-tdep.c (mn10300_skip_prologue): Likewise. +Wed May 14 12:04:49 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * config/tic80/tm-tic80.h (NUM_REGS): 38 not 37. + +Mon May 12 11:35:04 1997 Mark Alexander <marka@cygnus.com> + + * tic80-tdep.c, config/tic80/tm-tic80.h: First cut at getting + basic C80 features working. + Thu May 8 08:42:47 1997 Andrew Cagney <cagney@b1.cygnus.com> * configure.in (AC_TYPE_SIGNAL): Add @@ -1695,6 +1719,10 @@ Thu May 1 02:28:21 1997 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * printcmd.c (disassemble_command): Adjust low function bound by FUNCTION_START_OFFSET. +Wed Apr 30 15:23:02 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * config/tic80/tm-tic80.h (BREAKPOINT): Set it to trap 73. + Mon Apr 28 21:25:32 1997 Michael Snyder <msnyder@cleaver.cygnus.com> * Makefile.in: Add rule for gnu-nat.o and i386gnu-nat.o (Gnu Hurd) @@ -1762,6 +1790,15 @@ Thu Apr 24 13:31:10 1997 Jeffrey A Law (law@cygnus.com) * mn10300-tdep.c (mn10300_analyze_prologue): Check for a return insn at "pc", not "fi->pc". +Thu Apr 24 16:11:47 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * config/tic80/tm-tic80.h (NUM_REGS): Four 64bit accumulators. + (REGISTER_BYTE, REGISTER_RAW_SIZE, REGISTER_SIZE, + MAX_REGISTER_RAW_SIZE, REGISTER_VIRTUAL_TYPE): Adjust. + (NPC_REGNUM): Tic80 has a delay slot. + (R0_REGNUM, Rn_REGNUM, An_REGNUM): For sim, provide base/bound for + register blocks. + Wed Apr 23 11:18:45 1997 Jeffrey A Law (law@cygnus.com) * config/mn10200/tm-mn10200.h (STORE_RETURN_VALUE): Pointers are @@ -1780,6 +1817,10 @@ Tue Apr 22 11:58:15 1997 Fred Fish <fnf@cygnus.com> (floatformat_from_doublest): Postswap output words for the floatformat_littlebyte_bigwords format. +Mon Apr 21 22:44:47 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * config/tic80/tic80.mt (SIM): Link in simulator. + Tue Apr 22 09:02:10 1997 Stu Grossman (grossman@critters.cygnus.com) * config/alpha/alpha-osf3.mh config/i386/{i386gnu linux}.mh @@ -2102,6 +2143,11 @@ Mon Mar 31 14:55:53 1997 Ian Lance Taylor <ian@cygnus.com> * configure.in: Generate .gdbinit from gdbinit.in. * configure: Rebuild. +Sun Mar 30 12:28:24 1997 Fred Fish <fnf@cygnus.com> + + * config/tic80/tic80.mt: Disable using the simulator + until it is ready. + Sat Mar 29 13:57:20 1997 Fred Fish <fnf@cygnus.com> * COPYING: Install new version of file from FSF. @@ -2111,6 +2157,10 @@ Fri Mar 28 18:33:41 1997 Ian Lance Taylor <ian@cygnus.com> * Makefile.in (distclean): Remove .gdbinit. +Fri Mar 28 15:37:30 1997 Fred Fish <fnf@cygnus.com> + + * config/tic80/tm-tic80.h (NAMES_HAVE_UNDERSCORE): Define. + Fri Mar 28 15:38:04 1997 Mike Meissner <meissner@cygnus.com> * remote-sim.c (gdb_os_{,e}vprintf_filtered): Change stdarg type @@ -2167,6 +2217,10 @@ Sat Mar 22 16:41:35 1997 Fred Fish <fnf@cygnus.com> * remote-sim.c (simulator_command): Add comment about dealing with NULL or empty args. + * Makefile.in (tic80-tdep.o): Add target. + * configure.tgt: Add tic80 case. + * tic80-tdep.c: New file. + * config/tic80/{tic80.mt, tm-tic80.h}: New files. Sat Mar 22 02:48:11 1997 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) diff --git a/gdb/ChangeLog-98 b/gdb/ChangeLog-98 index bd19b49..f60cd5b 100644 --- a/gdb/ChangeLog-98 +++ b/gdb/ChangeLog-98 @@ -5718,6 +5718,13 @@ Wed Apr 29 14:02:59 1998 David Taylor <taylor@texas.cygnus.com> Wed Apr 29 10:20:40 1998 John Metzler <jmetzler@cygnus.com> + * nec4102rom.c: New file implements ROM monitor adapter for + nec-vr4102 board. This board hosts the vr4111 chip. This file + required extensions to the monitor_ops structure, hooks for wait + filter, new flags. This version does not support more than one + breakpoint and resuming after a breakpoint in 16 bit mode is + completely disfunctional. + * monitor.h: Defined additional hooks for dmpregs, configure_hooks and wait_filter. These additions require that all ROM monitor interfaces be recoded to initialize monitor ops using assignments @@ -6481,6 +6488,9 @@ Wed Mar 4 01:39:08 1998 Ron Unrau <runrau@cygnus.com> Tue Mar 3 17:19:08 1998 John Metzler <jmetzler@cygnus.com> + * config/mips/tm-vr4xxx.h: implements vr4111 as separate from 4300 + * config/mips/vr4xxx.tm: implements vr4111 as separate from 4300 + * configure.tgt: Recognise mips64vr4111-*-elf as vr4xxx * dwarfread.c (read_tag_pointer_type): Pointer sizes now come from TARGET_PTR_BIT rather from sizeof(char *) on host. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 2c6dfb5..7799e09 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1,4 +1,4 @@ -# Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 +# Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 # Free Software Foundation, Inc. # This file is part of GDB. @@ -47,6 +47,8 @@ top_builddir = . SHELL = @SHELL@ EXEEXT = @EXEEXT@ +AWK = @AWK@ + INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ @@ -215,7 +217,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=4.18 +VERSION = 19990422 DIST=gdb LINT=/usr/5bin/lint @@ -249,6 +251,13 @@ ANNOTATE_OBS = annotate.o @target_makefile_frag@ # End of host and target-dependent makefile fragments +# Possibly ignore the simulator. If the simulator is being ignored, +# these expand into SIM= and SIM_OBJ=, overriding the entries from +# target_makefile_frag +# +@IGNORE_SIM@ +@IGNORE_SIM_OBS@ + FLAGS_TO_PASS = \ "prefix=$(prefix)" \ "exec_prefix=$(exec_prefix)" \ @@ -919,7 +928,7 @@ ALLDEPFILES = 29k-share/udi/udip2soc.c 29k-share/udi/udr.c \ convex-tdep.c convex-xdep.c \ core-sol2.c core-regset.c core-aout.c corelow.c \ dcache.c delta68-nat.c dpx2-nat.c dstread.c exec.c fork-child.c \ - go32-xdep.c gould-tdep.c gould-xdep.c h8300-tdep.c h8500-tdep.c \ + gould-tdep.c gould-xdep.c h8300-tdep.c h8500-tdep.c \ hp300ux-nat.c hppa-tdep.c hppab-nat.c hppah-nat.c \ hp-psymtab-read.c hp-symtab-read.c \ i386-tdep.c i386b-nat.c i386mach-nat.c i386v-nat.c \ @@ -1117,8 +1126,6 @@ gdbtypes.o: gdbtypes.c $(bfd_h) complaints.h $(defs_h) $(expression_h) \ gnu-nat.o: process_reply_S.h exc_request_S.h notify_S.h msg_reply_S.h \ exc_request_U.h msg_U.h gnu-nat.h -go32-xdep.o: go32-xdep.c - # OBSOLETE gould-tdep.o: gould-tdep.c $(OP_INCLUDE)/np1.h $(defs_h) $(frame_h) \ # OBSOLETE $(gdbcore_h) $(symtab_h) @@ -1196,11 +1203,11 @@ jv-lang.o: jv-lang.c $(bfd_h) $(defs_h) $(symtab_h) $(gdbtypes_h) \ jv-typeprint.o: jv-typeprint.c $(bfd_h) $(defs_h) $(symtab_h) $(gdbtypes_h) \ $(value_h) $(INCLUDE_DIR)/demangle.h jv-lang.h gdb_string.h \ - typeprint.h + typeprint.h c-lang.h jv-valprint.o: jv-valprint.c $(bfd_h) $(defs_h) $(symtab_h) $(gdbtypes_h) \ $(expression_h) $(value_h) $(INCLUDE_DIR)/demangle.h valprint.h \ - language.h jv-lang.h c-lang.h + language.h jv-lang.h c-lang.h gdbcore.h annotate.h language.o: language.c $(bfd_h) $(defs_h) $(expression_h) $(frame_h) \ $(gdbcmd_h) $(gdbtypes_h) language.h parser-defs.h $(symtab_h) \ @@ -1297,7 +1304,7 @@ nindy-tdep.o: nindy-tdep.c $(defs_h) $(frame_h) $(symtab_h) $(gdbcore_h) ns32k-tdep.o: ns32k-tdep.c $(bfd_h) $(dis-asm_h) $(defs_h) objfiles.o: objfiles.c $(bfd_h) $(defs_h) objfiles.h symfile.h \ - $(symtab_h) gdb_string.h + $(symtab_h) gdb_string.h $(breakpoint_h) osfsolib.o: osfsolib.c $(command_h) $(defs_h) $(gdbcore_h) $(inferior_h) \ objfiles.h gnu-regex.h symfile.h target.h language.h gdb_string.h @@ -1504,7 +1511,7 @@ stabsread.o: stabsread.c $(bfd_h) $(INCLUDE_DIR)/aout/stab.def \ stack.o: stack.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) $(inferior_h) \ language.h target.h gdb_string.h -ax-general.o: ax-general.c $(ax_h) $(defs_h) +ax-general.o: ax-general.c $(ax_h) $(defs_h) $(value_h) ax-gdb.o: ax-gdb.c $(defs_h) $(symtab_h) symfile.h $(gdbtypes_h) \ $(value_h) $(expression_h) $(command_h) $(ax_h) $(gdbcmd_h) ax-gdb.h @@ -1533,6 +1540,8 @@ symtab.o: symtab.c call-cmds.h $(defs_h) $(expression_h) $(frame_h) \ tahoe-tdep.o: tahoe-tdep.c $(OP_INCLUDE)/tahoe.h $(defs_h) \ $(symtab_h) +tic80-tdep.o: tic80-tdep.c $(defs_h) + target.o: target.c $(bfd_h) $(defs_h) $(gdbcmd_h) $(inferior_h) \ objfiles.h symfile.h target.h gdb_string.h @@ -1,6 +1,13 @@ What has changed in GDB? (Organized release by release) +*** Changes since GDB-4.18: + +* New targets + +TI TMS320C80 tic80-*-* + + *** Changes in GDB-4.18: * New native configurations @@ -4,8 +4,8 @@ This is GDB, the GNU source-level debugger. A summary of new features is in the file `NEWS'. -See the GDB home page at http://www.cygnus.com/gdb/ for up to date -release information, mailing list links and archives, etc. +See the GDB home page at http://sourceware.cygnus.com/gdb/ for up to +date release information, mailing list links and archives, etc. Unpacking and Installation -- quick overview @@ -152,6 +152,8 @@ directory. That directory contains: `gdb-4.18/readline' source for the GNU command-line interface + NOTE: The readline library is compiled for use by GDB, but will + not be installed on your system when "make install" is issued. `gdb-4.18/sim' source for some simulators (ARM, D10V, SPARC, M32R, MIPS, PPC, V850, etc) diff --git a/gdb/a29k-tdep.c b/gdb/a29k-tdep.c index b3c0567..114922c 100644 --- a/gdb/a29k-tdep.c +++ b/gdb/a29k-tdep.c @@ -510,7 +510,7 @@ init_extra_frame_info (frame) but there isn't any way to tell the difference. */ init_frame_info (1, frame); else { - /* We're in get_prev_frame_info. + /* We're in get_prev_frame. Take care of everything in init_frame_pc. */ ; } @@ -668,7 +668,7 @@ write_register_stack (memaddr, myaddr, actual_mem_addr) The argument RAW_BUFFER must point to aligned memory. */ void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lvalp) +a29k_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lvalp) char *raw_buffer; int *optimized; CORE_ADDR *addrp; diff --git a/gdb/a68v-nat.c b/gdb/a68v-nat.c index 95bb3c8..deb9247 100644 --- a/gdb/a68v-nat.c +++ b/gdb/a68v-nat.c @@ -35,7 +35,6 @@ fetch_inferior_registers (ignored) struct ptrace_$data_regs_m68k inferior_registers; struct ptrace_$floating_regs_m68k inferior_fp_registers; struct ptrace_$control_regs_m68k inferior_control_registers; - extern char registers[]; ptrace_$init_control(&inferior_control_registers); inferior_fp_registers.size = sizeof(inferior_fp_registers); @@ -78,7 +77,6 @@ store_inferior_registers (regno) struct ptrace_$data_regs_m68k inferior_registers; struct ptrace_$floating_regs_m68k inferior_fp_registers; struct ptrace_$control_regs_m68k inferior_control_registers; - extern char registers[]; ptrace_$init_control(&inferior_control_registers); inferior_fp_registers.size = sizeof(inferior_fp_registers); diff --git a/gdb/acconfig.h b/gdb/acconfig.h index 9ad5020..8128e4e 100644 --- a/gdb/acconfig.h +++ b/gdb/acconfig.h @@ -88,6 +88,9 @@ name, as a C string. */ #undef TARGET_CPU_DEFAULT +/* Define if the simulator is being linked in. */ +#undef WITH_SIM + /* Set to true if the save_state_t structure is present */ #define HAVE_STRUCT_SAVE_STATE_T 0 diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4 index 43a0b0d..d614f2a 100644 --- a/gdb/acinclude.m4 +++ b/gdb/acinclude.m4 @@ -493,7 +493,7 @@ AC_DEFUN(CY_AC_PATH_ITCLCONFIG, [ if test x"${no_itcl}" = x ; then # we reset no_itcl in case something fails here no_itcl=true - AC_ARG_WITH(itclconfig, [ --with-itclconfig directory containing itcl configuration (itclConfig.sh)], + AC_ARG_WITH(itclconfig, [ --with-itclconfig Directory containing itcl configuration (itclConfig.sh)], with_itclconfig=${withval}) AC_MSG_CHECKING([for Itcl configuration]) AC_CACHE_VAL(ac_cv_c_itclconfig,[ @@ -619,7 +619,7 @@ AC_DEFUN(CY_AC_PATH_ITKCONFIG, [ if test x"${no_itk}" = x ; then # we reset no_itk in case something fails here no_itk=true - AC_ARG_WITH(itkconfig, [ --with-itkconfig directory containing itk configuration (itkConfig.sh)], + AC_ARG_WITH(itkconfig, [ --with-itkconfig Directory containing itk configuration (itkConfig.sh)], with_itkconfig=${withval}) AC_MSG_CHECKING([for Itk configuration]) AC_CACHE_VAL(ac_cv_c_itkconfig,[ @@ -765,7 +765,7 @@ AC_DEFUN(CY_AC_PATH_TIXCONFIG, [ if test x"${no_tix}" = x ; then # we reset no_tix in case something fails here no_tix=true - AC_ARG_WITH(tixconfig, [ --with-tixconfig directory containing tix configuration (tixConfig.sh)], + AC_ARG_WITH(tixconfig, [ --with-tixconfig Directory containing tix configuration (tixConfig.sh)], with_tixconfig=${withval}) AC_MSG_CHECKING([for Tix configuration]) AC_CACHE_VAL(ac_cv_c_tixconfig,[ diff --git a/gdb/aclocal.m4 b/gdb/aclocal.m4 index 4fd3658..1a11832 100644 --- a/gdb/aclocal.m4 +++ b/gdb/aclocal.m4 @@ -505,7 +505,7 @@ AC_DEFUN(CY_AC_PATH_ITCLCONFIG, [ if test x"${no_itcl}" = x ; then # we reset no_itcl in case something fails here no_itcl=true - AC_ARG_WITH(itclconfig, [ --with-itclconfig directory containing itcl configuration (itclConfig.sh)], + AC_ARG_WITH(itclconfig, [ --with-itclconfig Directory containing itcl configuration (itclConfig.sh)], with_itclconfig=${withval}) AC_MSG_CHECKING([for Itcl configuration]) AC_CACHE_VAL(ac_cv_c_itclconfig,[ @@ -631,7 +631,7 @@ AC_DEFUN(CY_AC_PATH_ITKCONFIG, [ if test x"${no_itk}" = x ; then # we reset no_itk in case something fails here no_itk=true - AC_ARG_WITH(itkconfig, [ --with-itkconfig directory containing itk configuration (itkConfig.sh)], + AC_ARG_WITH(itkconfig, [ --with-itkconfig Directory containing itk configuration (itkConfig.sh)], with_itkconfig=${withval}) AC_MSG_CHECKING([for Itk configuration]) AC_CACHE_VAL(ac_cv_c_itkconfig,[ @@ -777,7 +777,7 @@ AC_DEFUN(CY_AC_PATH_TIXCONFIG, [ if test x"${no_tix}" = x ; then # we reset no_tix in case something fails here no_tix=true - AC_ARG_WITH(tixconfig, [ --with-tixconfig directory containing tix configuration (tixConfig.sh)], + AC_ARG_WITH(tixconfig, [ --with-tixconfig Directory containing tix configuration (tixConfig.sh)], with_tixconfig=${withval}) AC_MSG_CHECKING([for Tix configuration]) AC_CACHE_VAL(ac_cv_c_tixconfig,[ diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c index 0201016..35430a4 100644 --- a/gdb/alpha-tdep.c +++ b/gdb/alpha-tdep.c @@ -154,8 +154,14 @@ struct linked_proc_info think this will be a problem in praxis, though. */ +#ifndef TM_LINUXALPHA_H +/* HACK: Provide a prototype when compiling this file for non + linuxalpha targets. */ +long alpha_linux_sigtramp_offset PARAMS ((CORE_ADDR pc)); +#endif long -alpha_linux_sigtramp_offset (CORE_ADDR pc) +alpha_linux_sigtramp_offset (pc) + CORE_ADDR pc; { unsigned int i[3], w; long off; @@ -903,7 +909,7 @@ alpha_push_arguments (nargs, args, sp, struct_return, struct_addr) int struct_return; CORE_ADDR struct_addr; { - register i; + int i; int accumulate_size = struct_return ? 8 : 0; int arg_regs_size = ALPHA_NUM_ARG_REGS * 8; struct alpha_arg { char *contents; int len; int offset; }; @@ -1209,18 +1215,21 @@ alpha_skip_prologue (pc, lenient) continue; if ((inst & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */ continue; - else if ((inst & 0xfc1f0000) == 0xb41e0000 - && (inst & 0xffff0000) != 0xb7fe0000) + if ((inst & 0xffe01fff) == 0x43c0153e) /* subq $sp,n,$sp */ + continue; + + if ((inst & 0xfc1f0000) == 0xb41e0000 + && (inst & 0xffff0000) != 0xb7fe0000) continue; /* stq reg,n($sp) */ /* reg != $zero */ - else if ((inst & 0xfc1f0000) == 0x9c1e0000 - && (inst & 0xffff0000) != 0x9ffe0000) + if ((inst & 0xfc1f0000) == 0x9c1e0000 + && (inst & 0xffff0000) != 0x9ffe0000) continue; /* stt reg,n($sp) */ /* reg != $zero */ - else if (inst == 0x47de040f) /* bis sp,sp,fp */ + if (inst == 0x47de040f) /* bis sp,sp,fp */ continue; - else - break; + + break; } return pc + offset; } @@ -1383,6 +1392,7 @@ alpha_call_dummy_address () return SYMBOL_VALUE_ADDRESS (sym) + 4; } +void _initialize_alpha_tdep PARAMS ((void)); void _initialize_alpha_tdep () { diff --git a/gdb/altos-xdep.c b/gdb/altos-xdep.c index 5727332..272c581 100644 --- a/gdb/altos-xdep.c +++ b/gdb/altos-xdep.c @@ -54,7 +54,6 @@ core_file_command (filename, from_tty) int from_tty; { int val; - extern char registers[]; /* Discard all vestiges of any previous core file and mark data and stack spaces as empty. */ diff --git a/gdb/annotate.c b/gdb/annotate.c index ec3e424..5cde626 100644 --- a/gdb/annotate.c +++ b/gdb/annotate.c @@ -1,5 +1,5 @@ /* Annotation routines for GDB. - Copyright 1986, 89, 90, 91, 92, 95, 1998 Free Software Foundation, Inc. + Copyright 1986, 89, 90, 91, 92, 95, 98, 1999 Free Software Foundation, Inc. This file is part of GDB. @@ -34,6 +34,7 @@ static void breakpoint_changed PARAMS ((struct breakpoint *)); void (*annotate_starting_hook) PARAMS ((void)); void (*annotate_stopped_hook) PARAMS ((void)); void (*annotate_signalled_hook) PARAMS ((void)); +void (*annotate_signal_hook) PARAMS ((void)); void (*annotate_exited_hook) PARAMS ((void)); static void @@ -161,6 +162,9 @@ annotate_signal_string_end () void annotate_signal () { + if (annotate_signal_hook) + annotate_signal_hook (); + if (annotation_level > 1) printf_filtered ("\n\032\032signal\n"); } diff --git a/gdb/annotate.h b/gdb/annotate.h index 59739db..406ee04 100644 --- a/gdb/annotate.h +++ b/gdb/annotate.h @@ -1,5 +1,5 @@ /* Annotation routines for GDB. - Copyright 1986, 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Copyright 1986, 1989, 1990, 1991, 1992, 1999 Free Software Foundation, Inc. This file is part of GDB. @@ -101,4 +101,5 @@ extern void annotate_array_section_end PARAMS ((void)); extern void (*annotate_starting_hook) PARAMS ((void)); extern void (*annotate_stopped_hook) PARAMS ((void)); extern void (*annotate_signalled_hook) PARAMS ((void)); +extern void (*annotate_signal_hook) PARAMS ((void)); extern void (*annotate_exited_hook) PARAMS ((void)); diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c index 9295770..c5dd847 100644 --- a/gdb/arc-tdep.c +++ b/gdb/arc-tdep.c @@ -234,7 +234,7 @@ arc_get_frame_setup (pc) /* This sequence is used to get the address of the return buffer for a function that returns a structure. */ insn = codestream_peek (); - if (insn & OPMASK == 0x60000000) + if ((insn & OPMASK) == 0x60000000) codestream_get (); } /* Frameless fn. */ diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 607dc8f..d6970a2 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -1,5 +1,5 @@ -/* Target-dependent code for the Acorn Risc Machine, for GDB, the GNU Debugger. - Copyright (C) 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1998, 1999 +/* Target-dependent code for the Acorn Risc Machine (ARM). + Copyright (C) 1988, 1989, 1991, 1992, 1993, 1995-1999 Free Software Foundation, Inc. This file is part of GDB. @@ -479,7 +479,7 @@ arm_scan_prologue (fi) { /* Get address of the stmfd in the prologue of the callee; the saved PC is the address of the stmfd + 12. */ - prologue_start = (read_memory_integer (fi->frame, 4) & 0x03fffffc) - 12; + prologue_start = ADDR_BITS_REMOVE(read_memory_integer (fi->frame, 4)) - 12; prologue_end = prologue_start + 40; /* FIXME: should be big enough */ } @@ -974,14 +974,16 @@ arm_pop_frame () { struct frame_info *frame = get_current_frame(); int regnum; + CORE_ADDR old_SP; + old_SP = read_register (frame->framereg); for (regnum = 0; regnum < NUM_REGS; regnum++) if (frame->fsr.regs[regnum] != 0) write_register (regnum, read_memory_integer (frame->fsr.regs[regnum], 4)); write_register (PC_REGNUM, FRAME_SAVED_PC (frame)); - write_register (SP_REGNUM, read_register (frame->framereg)); + write_register (SP_REGNUM, old_SP); flush_cached_frames (); } diff --git a/gdb/arm-xdep.c b/gdb/arm-xdep.c index f0d806e..19781c2 100644 --- a/gdb/arm-xdep.c +++ b/gdb/arm-xdep.c @@ -161,7 +161,6 @@ core_file_command (filename, from_tty) int from_tty; { int val; - extern char registers[]; /* Discard all vestiges of any previous core file and mark data and stack spaces as empty. */ diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c index c518e19..8312031 100644 --- a/gdb/ax-gdb.c +++ b/gdb/ax-gdb.c @@ -17,8 +17,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id$ */ - #include "defs.h" #include "symtab.h" #include "symfile.h" diff --git a/gdb/ax-gdb.h b/gdb/ax-gdb.h index bca70d6..feab188 100644 --- a/gdb/ax-gdb.h +++ b/gdb/ax-gdb.h @@ -17,8 +17,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id$ */ - #ifndef AX_GDB_H #define AX_GDB_H diff --git a/gdb/ax-general.c b/gdb/ax-general.c index 76e9bb4..30022a3 100644 --- a/gdb/ax-general.c +++ b/gdb/ax-general.c @@ -17,8 +17,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id$ */ - /* Despite what the above comment says about this file being part of GDB, we would like to keep these functions free of GDB dependencies, since we want to be able to use them in contexts @@ -27,6 +25,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" #include "ax.h" +#include "value.h" + /* Functions for building expressions. */ @@ -17,8 +17,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id$ */ - #ifndef AGENTEXPR_H #define AGENTEXPR_H diff --git a/gdb/bcache.c b/gdb/bcache.c index d28515b..0d6d205 100644 --- a/gdb/bcache.c +++ b/gdb/bcache.c @@ -138,8 +138,6 @@ bcache (bytes, count, bcachep) return (location); } -#if MAINTENANCE_CMDS - void print_bcache_statistics (bcachep, id) struct bcache *bcachep; @@ -215,5 +213,3 @@ print_bcache_statistics (bcachep, id) } printf_filtered (" Maximum chain length %d at %d:%d\n", lmax, lmaxt, lmaxh); } - -#endif /* MAINTENANCE_CMDS */ diff --git a/gdb/bcache.h b/gdb/bcache.h index cf0c62e..4b753be 100644 --- a/gdb/bcache.h +++ b/gdb/bcache.h @@ -62,11 +62,7 @@ struct bcache { extern void * bcache PARAMS ((void *bytes, int count, struct bcache *bcachep)); -#if MAINTENANCE_CMDS - extern void print_bcache_statistics PARAMS ((struct bcache *, char *)); -#endif /* MAINTENANCE_CMDS */ - #endif /* BCACHE_H */ diff --git a/gdb/blockframe.c b/gdb/blockframe.c index 9366ca6..c3b377e 100644 --- a/gdb/blockframe.c +++ b/gdb/blockframe.c @@ -88,13 +88,14 @@ inside_entry_file (addr) return 1; if (symfile_objfile == 0) return 0; -#if CALL_DUMMY_LOCATION == AT_ENTRY_POINT - /* Do not stop backtracing if the pc is in the call dummy - at the entry point. */ -/* FIXME: Won't always work with zeros for the last two arguments */ - if (PC_IN_CALL_DUMMY (addr, 0, 0)) - return 0; -#endif + if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT) + { + /* Do not stop backtracing if the pc is in the call dummy + at the entry point. */ + /* FIXME: Won't always work with zeros for the last two arguments */ + if (PC_IN_CALL_DUMMY (addr, 0, 0)) + return 0; + } return (addr >= symfile_objfile -> ei.entry_file_lowpc && addr < symfile_objfile -> ei.entry_file_highpc); } @@ -148,19 +149,20 @@ CORE_ADDR pc; int inside_entry_func (pc) -CORE_ADDR pc; + CORE_ADDR pc; { if (pc == 0) return 1; if (symfile_objfile == 0) return 0; -#if CALL_DUMMY_LOCATION == AT_ENTRY_POINT - /* Do not stop backtracing if the pc is in the call dummy - at the entry point. */ -/* FIXME: Won't always work with zeros for the last two arguments */ - if (PC_IN_CALL_DUMMY (pc, 0, 0)) - return 0; -#endif + if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT) + { + /* Do not stop backtracing if the pc is in the call dummy + at the entry point. */ + /* FIXME: Won't always work with zeros for the last two arguments */ + if (PC_IN_CALL_DUMMY (pc, 0, 0)) + return 0; + } return (symfile_objfile -> ei.entry_func_lowpc <= pc && symfile_objfile -> ei.entry_func_highpc > pc); } @@ -245,16 +247,6 @@ create_new_frame (addr, pc) return fi; } -/* Return the frame that called FI. - If FI is the original frame (it has no caller), return 0. */ - -struct frame_info * -get_prev_frame (frame) - struct frame_info *frame; -{ - return get_prev_frame_info (frame); -} - /* Return the frame that FRAME calls (NULL if FRAME is the innermost frame). */ @@ -352,7 +344,7 @@ frameless_look_for_prologue (frame) if there is no such frame. */ struct frame_info * -get_prev_frame_info (next_frame) +get_prev_frame (next_frame) struct frame_info *next_frame; { CORE_ADDR address = 0; @@ -1034,7 +1026,72 @@ sigtramp_saved_pc (frame) } #endif /* SIGCONTEXT_PC_OFFSET */ -#ifdef USE_GENERIC_DUMMY_FRAMES + +/* Are we in a call dummy? The code below which allows DECR_PC_AFTER_BREAK + below is for infrun.c, which may give the macro a pc without that + subtracted out. */ + +extern CORE_ADDR text_end; + +int +pc_in_call_dummy_before_text_end (pc, sp, frame_address) + CORE_ADDR pc; + CORE_ADDR sp; + CORE_ADDR frame_address; +{ + return ((pc) >= text_end - CALL_DUMMY_LENGTH + && (pc) <= text_end + DECR_PC_AFTER_BREAK); +} + +int +pc_in_call_dummy_after_text_end (pc, sp, frame_address) + CORE_ADDR pc; + CORE_ADDR sp; + CORE_ADDR frame_address; +{ + return ((pc) >= text_end + && (pc) <= text_end + CALL_DUMMY_LENGTH + DECR_PC_AFTER_BREAK); +} + +/* Is the PC in a call dummy? SP and FRAME_ADDRESS are the bottom and + top of the stack frame which we are checking, where "bottom" and + "top" refer to some section of memory which contains the code for + the call dummy. Calls to this macro assume that the contents of + SP_REGNUM and FP_REGNUM (or the saved values thereof), respectively, + are the things to pass. + + This won't work on the 29k, where SP_REGNUM and FP_REGNUM don't + have that meaning, but the 29k doesn't use ON_STACK. This could be + fixed by generalizing this scheme, perhaps by passing in a frame + and adding a few fields, at least on machines which need them for + PC_IN_CALL_DUMMY. + + Something simpler, like checking for the stack segment, doesn't work, + since various programs (threads implementations, gcc nested function + stubs, etc) may either allocate stack frames in another segment, or + allocate other kinds of code on the stack. */ + +int +pc_in_call_dummy_on_stack (pc, sp, frame_address) + CORE_ADDR pc; + CORE_ADDR sp; + CORE_ADDR frame_address; +{ + return (INNER_THAN ((sp), (pc)) + && (frame_address != 0) + && INNER_THAN ((pc), (frame_address))); +} + +int +pc_in_call_dummy_at_entry_point (pc, sp, frame_address) + CORE_ADDR pc; + CORE_ADDR sp; + CORE_ADDR frame_address; +{ + return ((pc) >= CALL_DUMMY_ADDRESS () + && (pc) <= (CALL_DUMMY_ADDRESS () + DECR_PC_AFTER_BREAK)); +} + /* * GENERIC DUMMY FRAMES @@ -1053,6 +1110,20 @@ sigtramp_saved_pc (frame) * being executed by the target. Also FRAME_CHAIN_VALID as * generic_frame_chain_valid. */ +/* Dummy frame. This saves the processor state just prior to setting + up the inferior function call. Older targets save the registers + target stack (but that really slows down function calls). */ + +struct dummy_frame +{ + struct dummy_frame *next; + + CORE_ADDR pc; + CORE_ADDR fp; + CORE_ADDR sp; + char *registers; +}; + static struct dummy_frame *dummy_frame_stack = NULL; /* Function: find_dummy_frame(pc, fp, sp) @@ -1073,7 +1144,7 @@ generic_find_dummy_frame (pc, fp) dummyframe = dummyframe->next) if (fp == dummyframe->fp || fp == dummyframe->sp) /* The frame in question lies between the saved fp and sp, inclusive */ - return dummyframe->regs; + return dummyframe->registers; return 0; } @@ -1082,12 +1153,14 @@ generic_find_dummy_frame (pc, fp) Return true if this is a dummy frame created by gdb for an inferior call */ int -generic_pc_in_call_dummy (pc, fp) +generic_pc_in_call_dummy (pc, sp, fp) CORE_ADDR pc; + CORE_ADDR sp; CORE_ADDR fp; { /* if find_dummy_frame succeeds, then PC is in a call dummy */ - return (generic_find_dummy_frame (pc, fp) != 0); + /* Note: SP and not FP is passed on. */ + return (generic_find_dummy_frame (pc, sp) != 0); } /* Function: read_register_dummy @@ -1137,10 +1210,12 @@ generic_push_dummy_frame () dummy_frame = dummy_frame->next; dummy_frame = xmalloc (sizeof (struct dummy_frame)); + dummy_frame->registers = xmalloc (REGISTER_BYTES); + dummy_frame->pc = read_register (PC_REGNUM); dummy_frame->sp = read_register (SP_REGNUM); dummy_frame->fp = fp; - read_register_bytes (0, dummy_frame->regs, REGISTER_BYTES); + read_register_bytes (0, dummy_frame->registers, REGISTER_BYTES); dummy_frame->next = dummy_frame_stack; dummy_frame_stack = dummy_frame; } @@ -1174,8 +1249,10 @@ generic_pop_dummy_frame () if (!dummy_frame) error ("Can't pop dummy frame!"); dummy_frame_stack = dummy_frame->next; - write_register_bytes (0, dummy_frame->regs, REGISTER_BYTES); + write_register_bytes (0, dummy_frame->registers, REGISTER_BYTES); flush_cached_frames (); + + free (dummy_frame->registers); free (dummy_frame); } @@ -1292,7 +1369,6 @@ generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) if (raw_buffer) read_register_gen (regnum, raw_buffer); } -#endif /* USE_GENERIC_DUMMY_FRAMES */ void _initialize_blockframe () diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 4b05949..30e94ed 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -88,9 +88,14 @@ watch_command PARAMS ((char *, int)); static int can_use_hardware_watchpoint PARAMS ((struct value *)); +static void break_at_finish_command PARAMS ((char *, int)); +static void break_at_finish_at_depth_command PARAMS ((char *, int)); + void tbreak_command PARAMS ((char *, int)); +static void tbreak_at_finish_command PARAMS ((char *, int)); + static void break_command_1 PARAMS ((char *, int, int)); @@ -182,6 +187,36 @@ static void awatch_command PARAMS ((char *, int)); static void do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp)); +static void create_solib_load_unload_event_breakpoint PARAMS ((char *hookname, int tempflag, char *dll_pathname, char *cond_string, enum bptype bp_kind)); + +static void create_fork_vfork_event_catchpoint PARAMS ((int tempflag, char * cond_string, enum bptype bp_kind)); + +static void break_at_finish_at_depth_command_1 PARAMS ((char *arg, int flag, int from_tty)); + +static void break_at_finish_command_1 PARAMS ((char *arg, int flag, int from_tty)); + +static void stop_command PARAMS ((char *arg, int from_tty)); + +static void stopin_command PARAMS ((char *arg, int from_tty)); + +static void stopat_command PARAMS ((char *arg, int from_tty)); + +static char *ep_find_event_name_end PARAMS ((char *arg)); + +static char *ep_parse_optional_if_clause PARAMS ((char **arg)); + +static char *ep_parse_optional_filename PARAMS ((char **arg)); + +static void catch_exec_command_1 PARAMS ((char *arg, int tempflag, int from_tty)); + +static void create_exception_catchpoint PARAMS ((int tempflag, char *cond_string, enum exception_event_kind ex_event, struct symtab_and_line *sal)); + +static void catch_exception_command_1 PARAMS ((enum exception_event_kind ex_event, char *arg, int tempflag, int from_tty)); + +static void tcatch_command PARAMS ((char *arg, int from_tty)); + +static void ep_skip_leading_whitespace PARAMS ((char **s)); + /* Prototypes for exported functions. */ static void @@ -1327,29 +1362,26 @@ int frame_in_dummy (frame) struct frame_info *frame; { -#ifdef CALL_DUMMY -#ifdef USE_GENERIC_DUMMY_FRAMES - return generic_pc_in_call_dummy (frame->pc, frame->frame); -#else struct breakpoint *b; + if (! CALL_DUMMY_P) + return 0; + + if (USE_GENERIC_DUMMY_FRAMES) + return generic_pc_in_call_dummy (frame->pc, frame->frame, frame->frame); + ALL_BREAKPOINTS (b) { - static ULONGEST dummy[] = CALL_DUMMY; - if (b->type == bp_call_dummy && b->frame == frame->frame - /* We need to check the PC as well as the frame on the sparc, for signals.exp in the testsuite. */ && (frame->pc >= (b->address - - sizeof (dummy) / sizeof (LONGEST) * REGISTER_SIZE)) + - SIZEOF_CALL_DUMMY_WORDS / sizeof (LONGEST) * REGISTER_SIZE)) && frame->pc <= b->address) return 1; } -#endif /* GENERIC_DUMMY_FRAMES */ -#endif /* CALL_DUMMY */ return 0; } @@ -2932,10 +2964,8 @@ breakpoints_info (bnum_exp, from_tty) breakpoint_1 (bnum, 0); } -#if MAINTENANCE_CMDS - /* ARGSUSED */ -void +static void maintenance_info_breakpoints (bnum_exp, from_tty) char *bnum_exp; int from_tty; @@ -2948,8 +2978,6 @@ maintenance_info_breakpoints (bnum_exp, from_tty) breakpoint_1 (bnum, 1); } -#endif - /* Print a message describing any breakpoints set at PC. */ static void @@ -3241,11 +3269,11 @@ re_enable_breakpoints_in_shlibs () static void create_solib_load_unload_event_breakpoint (hookname, tempflag, dll_pathname, cond_string, bp_kind) - char * hookname; - int tempflag; - char * dll_pathname; - char * cond_string; - enum bptype bp_kind; + char *hookname; + int tempflag; + char *dll_pathname; + char *cond_string; + enum bptype bp_kind; { struct breakpoint * b; struct symtabs_and_lines sals; @@ -3351,9 +3379,9 @@ create_solib_unload_event_breakpoint (hookname, tempflag, dll_pathname, cond_str static void create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_kind) - int tempflag; - char * cond_string; - enum bptype bp_kind; + int tempflag; + char *cond_string; + enum bptype bp_kind; { struct symtab_and_line sal; struct breakpoint * b; @@ -4092,7 +4120,7 @@ break_command (arg, from_tty) break_command_1 (arg, 0, from_tty); } -void +static void break_at_finish_command (arg, from_tty) char *arg; int from_tty; @@ -4100,7 +4128,7 @@ break_at_finish_command (arg, from_tty) break_at_finish_command_1 (arg, 0, from_tty); } -void +static void break_at_finish_at_depth_command (arg, from_tty) char *arg; int from_tty; @@ -4116,7 +4144,7 @@ tbreak_command (arg, from_tty) break_command_1 (arg, BP_TEMPFLAG, from_tty); } -void +static void tbreak_at_finish_command (arg, from_tty) char *arg; int from_tty; @@ -4531,6 +4559,7 @@ struct sal_chain struct symtab_and_line sal; }; +#if 0 /* Not really used -- invocation in handle_gnu_4_16_catch_command had been commented out in the v.4.16 sources, and stays disabled there now because "catch NAME" syntax isn't allowed. @@ -4594,6 +4623,7 @@ map_catch_names (args, function) while (*p == ' ' || *p == '\t') p++; } } +#endif /* This shares a lot of code with `print_frame_label_vars' from stack.c. */ @@ -4711,7 +4741,7 @@ get_catch_sals (this_level_only) static void ep_skip_leading_whitespace (s) - char ** s; + char **s; { if ((s == NULL) || (*s == NULL)) return; @@ -4725,7 +4755,7 @@ ep_skip_leading_whitespace (s) the token is returned. Else, NULL is returned. */ static char * ep_find_event_name_end (arg) - char * arg; + char *arg; { char * s = arg; char * event_name_end = NULL; @@ -4758,7 +4788,7 @@ ep_find_event_name_end (arg) if clause in the arg string. */ static char * ep_parse_optional_if_clause (arg) - char ** arg; + char **arg; { char * cond_string; @@ -4791,7 +4821,7 @@ ep_parse_optional_if_clause (arg) future access should copy it to their own buffers. */ static char * ep_parse_optional_filename (arg) - char ** arg; + char **arg; { static char filename [1024]; char * arg_p = *arg; @@ -4821,12 +4851,14 @@ ep_parse_optional_filename (arg) typedef enum {catch_fork, catch_vfork} catch_fork_kind; +static void catch_fork_command_1 PARAMS ((catch_fork_kind fork_kind, char *arg, int tempflag, int from_tty)); + static void catch_fork_command_1 (fork_kind, arg, tempflag, from_tty) - catch_fork_kind fork_kind; - char * arg; - int tempflag; - int from_tty; + catch_fork_kind fork_kind; + char *arg; + int tempflag; + int from_tty; { char * cond_string = NULL; @@ -4859,9 +4891,9 @@ catch_fork_command_1 (fork_kind, arg, tempflag, from_tty) static void catch_exec_command_1 (arg, tempflag, from_tty) - char * arg; - int tempflag; - int from_tty; + char *arg; + int tempflag; + int from_tty; { char * cond_string = NULL; @@ -4979,10 +5011,10 @@ catch_unload_command_1 (arg, tempflag, from_tty) static void create_exception_catchpoint (tempflag, cond_string, ex_event, sal) - int tempflag; - char * cond_string; - enum exception_event_kind ex_event; - struct symtab_and_line * sal; + int tempflag; + char *cond_string; + enum exception_event_kind ex_event; + struct symtab_and_line *sal; { struct breakpoint * b; int i; @@ -5020,10 +5052,10 @@ create_exception_catchpoint (tempflag, cond_string, ex_event, sal) static void catch_exception_command_1 (ex_event, arg, tempflag, from_tty) - enum exception_event_kind ex_event; - char * arg; - int tempflag; - int from_tty; + enum exception_event_kind ex_event; + char *arg; + int tempflag; + int from_tty; { char * cond_string = NULL; struct symtab_and_line * sal = NULL; @@ -6587,8 +6619,6 @@ are set to the address of the last breakpoint listed.\n\n\ Convenience variable \"$bpnum\" contains the number of the last\n\ breakpoint set.", NULL)); -#if MAINTENANCE_CMDS - add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints, concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\ The \"Type\" column indicates one of:\n\ @@ -6608,8 +6638,6 @@ Convenience variable \"$bpnum\" contains the number of the last\n\ breakpoint set.", NULL), &maintenanceinfolist); -#endif /* MAINTENANCE_CMDS */ - add_com ("catch", class_breakpoint, catch_command, "Set catchpoints to catch events.\n\ Raised signals may be caught:\n\ diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index e2febac..8eec1f5 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -112,6 +112,7 @@ enum bptype { commands for C++ exception handling. */ bp_catch_catch, bp_catch_throw + }; diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c index e155503..c0d0333 100644 --- a/gdb/c-typeprint.c +++ b/gdb/c-typeprint.c @@ -913,7 +913,7 @@ c_type_print_base (type, stream, show, level) char *p; char *demangled_no_class = demangled_name; - while (p = strchr (demangled_no_class, ':')) + while ((p = strchr (demangled_no_class, ':'))) { demangled_no_class = p; if (*++demangled_no_class == ':') diff --git a/gdb/coffread.c b/gdb/coffread.c index 340e77f..9c8f475 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -84,21 +84,6 @@ static CORE_ADDR current_source_end_addr; static bfd *nlist_bfd_global; static int nlist_nsyms_global; -/* Vector of line number information. */ - -static struct linetable *line_vector; - -/* Index of next entry to go in line_vector_index. */ - -static int line_vector_index; - -/* Last line number recorded in the line vector. */ - -static int prev_line_number; - -/* Number of elements allocated for line_vector currently. */ - -static int line_vector_length; /* Pointers to scratch storage, used for reading raw symbols and auxents. */ @@ -252,8 +237,6 @@ static void complete_symtab PARAMS ((char *, CORE_ADDR, unsigned int)); static void coff_start_symtab PARAMS ((char *)); -static void coff_record_line PARAMS ((int, CORE_ADDR)); - static struct type *coff_alloc_type PARAMS ((int)); static struct type **coff_lookup_type PARAMS ((int)); @@ -440,30 +423,6 @@ coff_alloc_type (index) return type; } -/* Record a line number entry for line LINE at address PC. - FIXME: Use record_line instead. */ - -static void -coff_record_line (line, pc) - int line; - CORE_ADDR pc; -{ - struct linetable_entry *e; - /* Make sure line vector is big enough. */ - - if (line_vector_index + 2 >= line_vector_length) - { - line_vector_length *= 2; - line_vector = (struct linetable *) - xrealloc ((char *) line_vector, sizeof (struct linetable) - + (line_vector_length - * sizeof (struct linetable_entry))); - } - - e = line_vector->item + line_vector_index++; - e->line = line; e->pc = pc; -} - /* Start a new symtab for a new source file. This is called when a COFF ".file" symbol is seen; it indicates the start of data for one original source file. */ @@ -484,17 +443,6 @@ coff_start_symtab (name) last_source_start_addr in coff_end_symtab. */ 0); record_debugformat ("COFF"); - - /* Initialize the source file line number information for this file. */ - - if (line_vector) /* Unlikely, but maybe possible? */ - free ((PTR)line_vector); - line_vector_index = 0; - line_vector_length = 1000; - prev_line_number = -2; /* Force first line number to be explicit */ - line_vector = (struct linetable *) - xmalloc (sizeof (struct linetable) - + line_vector_length * sizeof (struct linetable_entry)); } /* Save the vital information from when starting to read a file, @@ -535,26 +483,12 @@ coff_end_symtab (objfile) last_source_start_addr = current_source_start_addr; - /* For no good reason, this file stores the number of entries in a - separate variable instead of in line_vector->nitems. Fix it. */ - if (line_vector) - line_vector->nitems = line_vector_index; - - /* For COFF, we only have one subfile, so we can just look at - subfiles and not worry about there being other elements in the - chain. We fill in various fields now because we didn't know them - before (or because doing it now is simply an artifact of how this - file used to be written). */ - subfiles->line_vector = line_vector; - symtab = end_symtab (current_source_end_addr, objfile, 0); if (symtab != NULL) free_named_symtabs (symtab->filename); /* Reinitialize for beginning of new file. */ - line_vector = 0; - line_vector_length = -1; last_source_file = NULL; } @@ -683,7 +617,6 @@ coff_symfile_read (objfile, section_offsets, mainline) /* Set a few file-statics that give us specific information about the particular COFF file format we're reading. */ - local_linesz = cdata->local_linesz; local_n_btmask = cdata->local_n_btmask; local_n_btshft = cdata->local_n_btshft; local_n_tmask = cdata->local_n_tmask; @@ -1086,6 +1019,7 @@ coff_symtab_read (symtab_offset, nsyms, section_offsets, objfile) new->name = process_coff_symbol (&fcn_cs_saved, &fcn_aux_saved, section_offsets, objfile); + record_line (current_subfile, fcn_first_line, cs->c_value); } else if (STREQ (cs->c_name, ".ef")) { @@ -1458,7 +1392,7 @@ enter_linenos (file_offset, first_line, last_line, section_offsets) rawptr += local_linesz; /* The next function, or the sentinel, will have L_LNNO32 zero; we exit. */ if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line) - coff_record_line (first_line + L_LNNO32 (&lptr), + record_line (current_subfile, first_line + L_LNNO32 (&lptr), lptr.l_addr.l_paddr + ANOFFSET (section_offsets, SECT_OFF_TEXT)); else diff --git a/gdb/config.in b/gdb/config.in index d6bfe94..4d206a4 100644 --- a/gdb/config.in +++ b/gdb/config.in @@ -116,6 +116,13 @@ size_t, and assorted other type changes. */ #undef PROC_SERVICE_IS_OLD +/* If you want to specify a default CPU variant, define this to be its + name, as a C string. */ +#undef TARGET_CPU_DEFAULT + +/* Define if the simulator is being linked in. */ +#undef WITH_SIM + /* Set to true if the save_state_t structure is present */ #define HAVE_STRUCT_SAVE_STATE_T 0 @@ -248,6 +255,9 @@ /* Define if you have the <sys/reg.h> header file. */ #undef HAVE_SYS_REG_H +/* Define if you have the <sys/select.h> header file. */ +#undef HAVE_SYS_SELECT_H + /* Define if you have the <sys/wait.h> header file. */ #undef HAVE_SYS_WAIT_H diff --git a/gdb/config/a29k/tm-a29k.h b/gdb/config/a29k/tm-a29k.h index 4892ec5..0936e83 100644 --- a/gdb/config/a29k/tm-a29k.h +++ b/gdb/config/a29k/tm-a29k.h @@ -429,7 +429,7 @@ long read_register_stack_integer (); /* Because INIT_FRAME_PC gets passed fromleaf, that's where we init not only ->pc and ->frame, but all the extra stuff, when called from - get_prev_frame_info, that is. */ + get_prev_frame, that is. */ #define INIT_EXTRA_FRAME_INFO(fromleaf, fci) init_extra_frame_info(fci) void init_extra_frame_info (); @@ -506,7 +506,13 @@ extern CORE_ADDR frame_locals_address (); /* Provide our own get_saved_register. HAVE_REGISTER_WINDOWS is insufficient because registers get renumbered on the a29k without getting saved. */ -#define GET_SAVED_REGISTER +#ifdef __STDC__ +enum lval_type; +struct frame_info; +#endif +void a29k_get_saved_register PARAMS ((char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lvalp)); +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + a29k_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) /* Call function stuff. */ diff --git a/gdb/config/alpha/nm-linux.h b/gdb/config/alpha/nm-linux.h index eedb1a9..1c16730 100644 --- a/gdb/config/alpha/nm-linux.h +++ b/gdb/config/alpha/nm-linux.h @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Figure out where the longjmp will land. We expect that we have just entered longjmp and haven't yet setup the stack frame, so the args are still in the diff --git a/gdb/config/alpha/tm-alpha.h b/gdb/config/alpha/tm-alpha.h index d9b9812..c079809 100644 --- a/gdb/config/alpha/tm-alpha.h +++ b/gdb/config/alpha/tm-alpha.h @@ -110,7 +110,7 @@ alpha_saved_pc_after_call PARAMS ((struct frame_info *)); "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",\ - "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",\ + "f24", "f25", "f26", "f27", "f28", "f29", "f30", "fpcr",\ "pc", "vfp", \ } @@ -132,6 +132,7 @@ alpha_saved_pc_after_call PARAMS ((struct frame_info *)); #define ZERO_REGNUM 31 /* Read-only register, always 0 */ #define FP0_REGNUM 32 /* Floating point register 0 */ #define FPA0_REGNUM 48 /* First float arg during a subr call */ +#define FPCR_REGNUM 63 /* Floating point control register */ #define PC_REGNUM 64 /* Contains program counter */ #define FP_REGNUM 65 /* Virtual frame pointer */ @@ -176,7 +177,7 @@ alpha_saved_pc_after_call PARAMS ((struct frame_info *)); memory format is an integer with 4 bytes or less, as the representation of integers in floating point registers is different. */ -#define REGISTER_CONVERTIBLE(N) ((N) >= FP0_REGNUM && (N) < FP0_REGNUM + 32) +#define REGISTER_CONVERTIBLE(N) ((N) >= FP0_REGNUM && (N) < FP0_REGNUM + 31) /* Convert data from raw format for register REGNUM in buffer FROM to virtual format with type TYPE in buffer TO. */ @@ -198,7 +199,7 @@ alpha_register_convert_to_raw PARAMS ((struct type *, int, char *, char *)); of data in register N. */ #define REGISTER_VIRTUAL_TYPE(N) \ - (((N) >= FP0_REGNUM && (N) < FP0_REGNUM+32) \ + (((N) >= FP0_REGNUM && (N) < FP0_REGNUM+31) \ ? builtin_type_double : builtin_type_long) \ /* Store the address of the place in which to copy the structure the diff --git a/gdb/config/alpha/xm-alphalinux.h b/gdb/config/alpha/xm-alphalinux.h index a7aeab0..fb4316b 100644 --- a/gdb/config/alpha/xm-alphalinux.h +++ b/gdb/config/alpha/xm-alphalinux.h @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if !defined (HOST_BYTE_ORDER) #define HOST_BYTE_ORDER LITTLE_ENDIAN diff --git a/gdb/config/alpha/xm-alphaosf.h b/gdb/config/alpha/xm-alphaosf.h index 40b7fe0..e143538 100644 --- a/gdb/config/alpha/xm-alphaosf.h +++ b/gdb/config/alpha/xm-alphaosf.h @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if !defined (HOST_BYTE_ORDER) #define HOST_BYTE_ORDER LITTLE_ENDIAN diff --git a/gdb/config/arm/tm-arm.h b/gdb/config/arm/tm-arm.h index b327ac3..26bdf37 100644 --- a/gdb/config/arm/tm-arm.h +++ b/gdb/config/arm/tm-arm.h @@ -1,5 +1,5 @@ /* Definitions to make GDB target for an ARM - Copyright 1986, 1987, 1989, 1991, 1993, 1997, 1998 Free Software Foundation, Inc. + Copyright 1986-1989, 1991, 1993-1999 Free Software Foundation, Inc. This file is part of GDB. @@ -268,7 +268,8 @@ extern use_struct_convention_fn arm_use_struct_convention; the address in which a function should return its structure value, as a CORE_ADDR (or an expression that can be used as one). */ -#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(int *)(REGBUF)) +#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \ + (extract_address ((PTR) (REGBUF), REGISTER_RAW_SIZE(0))) /* Specify that for the native compiler variables for a particular lexical context are listed after the beginning LBRAC instead of diff --git a/gdb/config/d10v/tm-d10v.h b/gdb/config/d10v/tm-d10v.h index ef75bc5..edfa62f 100644 --- a/gdb/config/d10v/tm-d10v.h +++ b/gdb/config/d10v/tm-d10v.h @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Contributed by Martin Hunt, hunt@cygnus.com */ -#define GDB_TARGET_IS_D10V +/* #define GDB_TARGET_IS_D10V - moved to gdbarch.h */ /* Define the bit, byte, and word ordering of the machine. */ @@ -262,7 +262,7 @@ extern void d10v_frame_find_saved_regs PARAMS ((struct frame_info *, struct fram extern void d10v_pop_frame PARAMS ((struct frame_info *frame)); #define POP_FRAME generic_pop_current_frame (d10v_pop_frame) -#define USE_GENERIC_DUMMY_FRAMES +#define USE_GENERIC_DUMMY_FRAMES 1 #define CALL_DUMMY {0} #define CALL_DUMMY_START_OFFSET (0) #define CALL_DUMMY_BREAKPOINT_OFFSET (0) @@ -272,15 +272,15 @@ extern void d10v_pop_frame PARAMS ((struct frame_info *frame)); extern CORE_ADDR d10v_push_return_address PARAMS ((CORE_ADDR pc, CORE_ADDR sp)); #define PUSH_RETURN_ADDRESS(PC, SP) d10v_push_return_address (PC, SP) -#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP) +#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP) /* #define PC_IN_CALL_DUMMY(pc, sp, frame_address) ( pc == IMEM_START + 4 ) */ #define PUSH_DUMMY_FRAME generic_push_dummy_frame () /* override the default get_saved_register function with one that takes account of generic CALL_DUMMY frames */ -#define GET_SAVED_REGISTER -#define get_saved_register generic_get_saved_register +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) #define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \ sp = d10v_push_arguments((nargs), (args), (sp), (struct_return), (struct_addr)) diff --git a/gdb/config/fr30/tm-fr30.h b/gdb/config/fr30/tm-fr30.h index ea32792..5478b93 100644 --- a/gdb/config/fr30/tm-fr30.h +++ b/gdb/config/fr30/tm-fr30.h @@ -1,4 +1,5 @@ /* Parameters for execution on a Fujitsu FR30 processor. + Copyright 1999, Free Software Foundation, Inc. This file is part of GDB. @@ -95,7 +96,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern void fr30_pop_frame PARAMS ((void)); #define POP_FRAME fr30_pop_frame() -#define USE_GENERIC_DUMMY_FRAMES +#define USE_GENERIC_DUMMY_FRAMES 1 #define CALL_DUMMY {0} #define CALL_DUMMY_START_OFFSET (0) #define CALL_DUMMY_BREAKPOINT_OFFSET (0) @@ -129,7 +130,7 @@ extern void fr30_pop_frame PARAMS ((void)); #define STORE_STRUCT_RETURN(ADDR, SP) \ { write_register (RETVAL_REG, (ADDR)); } -#define FRAME_ARGS_ADDRESS(fi) (fi->frame) +#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame) #define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame) /* Return number of args passed to a frame. @@ -160,11 +161,14 @@ extern CORE_ADDR fr30_frame_saved_pc PARAMS ((struct frame_info *)); extern CORE_ADDR fr30_skip_prologue PARAMS ((CORE_ADDR pc)); #define SKIP_PROLOGUE(pc) pc = fr30_skip_prologue (pc) -/* Write into appropriate registers a function return value - of type TYPE, given in virtual format. */ +/* Write into appropriate registers a function return value of type + TYPE, given in virtual format. VALBUF is in the target byte order; + it's typically the VALUE_CONTENTS of some struct value, and those + are in the target's byte order. */ +extern void fr30_store_return_value PARAMS ((struct type *type, char *valbuf)); #define STORE_RETURN_VALUE(TYPE,VALBUF) \ - write_register_bytes (0, VALBUF, TYPE_LENGTH (TYPE)) + (fr30_store_return_value ((TYPE), (VALBUF))) /* Put here the code to store, into a struct frame_saved_regs, the addresses of the saved registers of frame described by FRAME_INFO. @@ -211,7 +215,7 @@ fr30_push_arguments PARAMS ((int nargs, struct value **args, CORE_ADDR sp, #define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \ (SP) = fr30_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) -#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP) +#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP) /* Fujitsu's ABI requires all structs to be passed using a pointer. That is obviously not very efficient, so I am leaving the definitions @@ -230,3 +234,12 @@ fr30_push_arguments PARAMS ((int nargs, struct value **args, CORE_ADDR sp, #endif /* alway return struct by value by input pointer */ #define USE_STRUCT_CONVENTION(GCC_P, TYPE) 1 + +/* The stack should always be aligned on a four-word boundary. */ +#define STACK_ALIGN(len) (((len) + 3) & ~3) + +/* I think the comment about this in value_arg_coerce is wrong; this + should be true on any system where you can rely on the prototyping + information. When this is true, value_arg_coerce will promote + floats to doubles iff the function is not prototyped. */ +#define COERCE_FLOAT_TO_DOUBLE 1 diff --git a/gdb/config/h8300/tm-h8300.h b/gdb/config/h8300/tm-h8300.h index b398d2f..929d6ff 100644 --- a/gdb/config/h8300/tm-h8300.h +++ b/gdb/config/h8300/tm-h8300.h @@ -271,7 +271,7 @@ typedef unsigned short INSN_WORD; * CALL_DUMMY stuff: */ -#define USE_GENERIC_DUMMY_FRAMES +#define USE_GENERIC_DUMMY_FRAMES 1 #define CALL_DUMMY {0} #define CALL_DUMMY_LENGTH (0) #define CALL_DUMMY_ADDRESS() entry_point_address () @@ -286,7 +286,7 @@ extern CORE_ADDR h8300_push_arguments PARAMS ((int nargs, CORE_ADDR struct_addr)); extern CORE_ADDR h8300_push_return_address PARAMS ((CORE_ADDR, CORE_ADDR)); -#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP) +#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP) #define FIX_CALL_DUMMY(DUMMY, START_SP, FUNADDR, NARGS, ARGS, TYPE, GCCP) #define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \ (SP) = h8300_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) @@ -298,6 +298,8 @@ extern CORE_ADDR h8300_push_return_address PARAMS ((CORE_ADDR, CORE_ADDR)); /* override the standard get_saved_register function with one that takes account of generic CALL_DUMMY frames */ -#define GET_SAVED_REGISTER +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) + diff --git a/gdb/config/i386/go32.mh b/gdb/config/i386/go32.mh index 311ee1c..d4fa352 100644 --- a/gdb/config/i386/go32.mh +++ b/gdb/config/i386/go32.mh @@ -1,8 +1,19 @@ -MH_CFLAGS=-D__GO32__ -D__MSDOS__ -XDEPFILES= go32-xdep.o +# Host: Intel x86 running DJGPP +# we don't need mmalloc on DJGPP +MH_CFLAGS= -DNO_MMALLOC +MMALLOC= +MMALLOC_CFLAGS= + XM_FILE= xm-go32.h -HOST_IPC=-DDOS_IPC +XDEPFILES= + +NAT_FILE= nm-go32.h +NATDEPFILES= go32-nat.o + +TERMCAP= +HOST_IPC= SER_HARDWIRE= ser-go32.o -CC=i386-go32-gcc -O2 -fno-omit-frame-pointer +CC= gcc +XM_CLIBS= -ldbg diff --git a/gdb/config/i386/nm-i386sco5.h b/gdb/config/i386/nm-i386sco5.h index 10e749b..155336c 100644 --- a/gdb/config/i386/nm-i386sco5.h +++ b/gdb/config/i386/nm-i386sco5.h @@ -19,7 +19,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Basically, its a lot like the older versions ... */ #include "i386/nm-i386sco.h" diff --git a/gdb/config/i386/tm-fbsd.h b/gdb/config/i386/tm-fbsd.h index 9933e10..419993d 100644 --- a/gdb/config/i386/tm-fbsd.h +++ b/gdb/config/i386/tm-fbsd.h @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "i386/tm-i386bsd.h" diff --git a/gdb/config/i386/tm-i386.h b/gdb/config/i386/tm-i386.h index e2039e5..aeff2e1 100644 --- a/gdb/config/i386/tm-i386.h +++ b/gdb/config/i386/tm-i386.h @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TM_I386_H #define TM_I386_H 1 diff --git a/gdb/config/i386/xm-go32.h b/gdb/config/i386/xm-go32.h index 0797833..562d457 100644 --- a/gdb/config/i386/xm-go32.h +++ b/gdb/config/i386/xm-go32.h @@ -1,5 +1,5 @@ -/* Definitions for hosting on GO32, for GDB. - Copyright 1991, 1992 Free Software Foundation, Inc. +/* Host-dependent definitions for Intel x86 running DJGPP. + Copyright 1993-1996 Free Software Foundation, Inc. This file is part of GDB. @@ -18,14 +18,20 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define HOST_BYTE_ORDER LITTLE_ENDIAN + #include "fopen-bin.h" -/* Define this lseek(n) != nth byte of file */ -#define LSEEK_NOT_LINEAR +#define GDBINIT_FILENAME "gdb.ini" -#define CANT_FORK +#define SLASH_P(X) ((X)=='\\' || (X) == '/') -#undef QUIT -#define QUIT { pollquit(); } +#define ROOTED_P(X) ((SLASH_P((X)[0]))|| ((X)[1] ==':')) -#define GDBINIT_FILENAME "gdb.ini" +#define SLASH_CHAR '/' +#define SLASH_STRING "/" + +#define CRLF_SOURCE_FILES + +#define DIRNAME_SEPARATOR ';' + +#define HOST_I386 diff --git a/gdb/config/m32r/tm-m32r.h b/gdb/config/m32r/tm-m32r.h index 8273b4e..e03558a 100644 --- a/gdb/config/m32r/tm-m32r.h +++ b/gdb/config/m32r/tm-m32r.h @@ -193,7 +193,7 @@ extern use_struct_convention_fn m32r_use_struct_convention; /* generic dummy frame stuff */ #define PUSH_DUMMY_FRAME generic_push_dummy_frame () -#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP) +#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP) /* target-specific dummy_frame stuff */ @@ -222,9 +222,11 @@ extern CORE_ADDR m32r_push_arguments PARAMS ((int nargs, /* override the standard get_saved_register function with one that takes account of generic CALL_DUMMY frames */ -#define GET_SAVED_REGISTER +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) -#define USE_GENERIC_DUMMY_FRAMES + +#define USE_GENERIC_DUMMY_FRAMES 1 #define CALL_DUMMY {0} #define CALL_DUMMY_LENGTH (0) #define CALL_DUMMY_START_OFFSET (0) diff --git a/gdb/config/mn10200/tm-mn10200.h b/gdb/config/mn10200/tm-mn10200.h index 671b534..e15cdae 100644 --- a/gdb/config/mn10200/tm-mn10200.h +++ b/gdb/config/mn10200/tm-mn10200.h @@ -177,7 +177,7 @@ extern CORE_ADDR mn10200_skip_prologue PARAMS ((CORE_ADDR)); extern void mn10200_pop_frame PARAMS ((struct frame_info *)); #define POP_FRAME mn10200_pop_frame (get_current_frame ()) -#define USE_GENERIC_DUMMY_FRAMES +#define USE_GENERIC_DUMMY_FRAMES 1 #define CALL_DUMMY {0} #define CALL_DUMMY_START_OFFSET (0) #define CALL_DUMMY_BREAKPOINT_OFFSET (0) @@ -196,7 +196,7 @@ mn10200_push_arguments PARAMS ((int, struct value **, CORE_ADDR, #define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \ (SP) = mn10200_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) -#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP) +#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP) #define REG_STRUCT_HAS_ADDR(gcc_p,TYPE) \ (TYPE_LENGTH (TYPE) > 8) @@ -206,7 +206,8 @@ extern use_struct_convention_fn mn10200_use_struct_convention; /* Override the default get_saved_register function with one that takes account of generic CALL_DUMMY frames. */ -#define GET_SAVED_REGISTER +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) /* Define this for Wingdb */ #define TARGET_MN10200 diff --git a/gdb/config/mn10300/tm-mn10300.h b/gdb/config/mn10300/tm-mn10300.h index e7d3fd7..f073642 100644 --- a/gdb/config/mn10300/tm-mn10300.h +++ b/gdb/config/mn10300/tm-mn10300.h @@ -124,7 +124,7 @@ extern CORE_ADDR mn10300_skip_prologue PARAMS ((CORE_ADDR)); extern void mn10300_pop_frame PARAMS ((struct frame_info *)); #define POP_FRAME mn10300_pop_frame (get_current_frame ()) -#define USE_GENERIC_DUMMY_FRAMES +#define USE_GENERIC_DUMMY_FRAMES 1 #define CALL_DUMMY {0} #define CALL_DUMMY_START_OFFSET (0) #define CALL_DUMMY_BREAKPOINT_OFFSET (0) @@ -143,7 +143,7 @@ mn10300_push_arguments PARAMS ((int, struct value **, CORE_ADDR, #define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \ (SP) = mn10300_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) -#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP) +#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP) #define REG_STRUCT_HAS_ADDR(gcc_p,TYPE) \ (TYPE_LENGTH (TYPE) > 8) @@ -153,7 +153,8 @@ extern use_struct_convention_fn mn10300_use_struct_convention; /* override the default get_saved_register function with one that takes account of generic CALL_DUMMY frames */ -#define GET_SAVED_REGISTER +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) /* Cons up virtual frame pointer for trace */ extern void mn10300_virtual_frame_pointer PARAMS ((CORE_ADDR, long *, long *)); diff --git a/gdb/config/nm-gnu.h b/gdb/config/nm-gnu.h index b7ee4dc..38a85f7 100644 --- a/gdb/config/nm-gnu.h +++ b/gdb/config/nm-gnu.h @@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __NM_GNU_H__ #define __NM_GNU_H__ @@ -40,6 +40,4 @@ extern char *gnu_target_pid_to_str (int pid); #include "solib.h" #define NO_CORE_OPS -#define MAINTENANCE_CMDS 1 - #endif /* __NM_GNU_H__ */ diff --git a/gdb/config/pa/nm-hppah.h b/gdb/config/pa/nm-hppah.h index 0f5ef01..5883c1b 100644 --- a/gdb/config/pa/nm-hppah.h +++ b/gdb/config/pa/nm-hppah.h @@ -279,3 +279,10 @@ extern char *hpux_pid_to_str PARAMS ((int pid)); #endif /* HAVE_HPUX_THREAD_SUPPORT */ #define HPUXHPPA + +#define MAY_SWITCH_FROM_INFERIOR_PID (1) + +#define MAY_FOLLOW_EXEC (1) + +#define USE_THREAD_STEP_NEEDED (1) + diff --git a/gdb/config/pa/tm-hppa.h b/gdb/config/pa/tm-hppa.h index 559534a..e5b5acd9 100644 --- a/gdb/config/pa/tm-hppa.h +++ b/gdb/config/pa/tm-hppa.h @@ -469,7 +469,7 @@ hppa_frame_find_saved_regs PARAMS ((struct frame_info *, /* Push an empty stack frame, to record the current PC, etc. */ -#define PUSH_DUMMY_FRAME push_dummy_frame (&inf_status) +#define PUSH_DUMMY_FRAME push_dummy_frame (inf_status) extern void push_dummy_frame PARAMS ((struct inferior_status *)); /* Discard from the stack the innermost frame, diff --git a/gdb/config/powerpc/nm-aix.h b/gdb/config/powerpc/nm-aix.h index 9661d50..c771e8c 100644 --- a/gdb/config/powerpc/nm-aix.h +++ b/gdb/config/powerpc/nm-aix.h @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "rs6000/nm-rs6000.h" diff --git a/gdb/config/powerpc/tm-macos.h b/gdb/config/powerpc/tm-macos.h index b29d285..d32d0de 100644 --- a/gdb/config/powerpc/tm-macos.h +++ b/gdb/config/powerpc/tm-macos.h @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Use generic RS6000 definitions. */ #include "rs6000/tm-rs6000.h" diff --git a/gdb/config/powerpc/tm-ppc-aix.h b/gdb/config/powerpc/tm-ppc-aix.h index 5dfb3c4..521b9af 100644 --- a/gdb/config/powerpc/tm-ppc-aix.h +++ b/gdb/config/powerpc/tm-ppc-aix.h @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TM_PPC_AIX_H #define TM_PPC_AIX_H diff --git a/gdb/config/powerpc/tm-ppc-eabi.h b/gdb/config/powerpc/tm-ppc-eabi.h index c2828b2..cd0ec32 100644 --- a/gdb/config/powerpc/tm-ppc-eabi.h +++ b/gdb/config/powerpc/tm-ppc-eabi.h @@ -46,8 +46,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* FIXME: This just checks for the end of the stack, which is broken for things like stepping through gcc nested function stubs. */ #undef PC_IN_CALL_DUMMY -#define PC_IN_CALL_DUMMY(STOP_PC, STOP_SP, STOP_FRAME_ADDR) \ - (STOP_SP < STOP_PC) /* generic dummy frame stuff */ @@ -71,9 +69,10 @@ extern CORE_ADDR rs6000_push_arguments PARAMS ((int nargs, /* override the standard get_saved_register function with one that takes account of generic CALL_DUMMY frames */ -#define GET_SAVED_REGISTER +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) -#define USE_GENERIC_DUMMY_FRAMES +#define USE_GENERIC_DUMMY_FRAMES 1 #define CALL_DUMMY_BREAKPOINT_OFFSET (0) #define CALL_DUMMY_LOCATION AT_ENTRY_POINT #define CALL_DUMMY_ADDRESS() entry_point_address () diff --git a/gdb/config/powerpc/xm-aix.h b/gdb/config/powerpc/xm-aix.h index efd0e74..e616d9e 100644 --- a/gdb/config/powerpc/xm-aix.h +++ b/gdb/config/powerpc/xm-aix.h @@ -16,7 +16,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xm-aix4.h" diff --git a/gdb/config/rs6000/tm-rs6000-aix4.h b/gdb/config/rs6000/tm-rs6000-aix4.h index f65eae3..c7889e4 100644 --- a/gdb/config/rs6000/tm-rs6000-aix4.h +++ b/gdb/config/rs6000/tm-rs6000-aix4.h @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TM_RS6000_AIX4_H #define TM_RS6000_AIX4_H diff --git a/gdb/config/sh/tm-sh.h b/gdb/config/sh/tm-sh.h index 2177909..291677b 100644 --- a/gdb/config/sh/tm-sh.h +++ b/gdb/config/sh/tm-sh.h @@ -239,7 +239,7 @@ extern CORE_ADDR sh_push_arguments PARAMS ((int nargs, unsigned char struct_return, CORE_ADDR struct_addr)); -#define USE_GENERIC_DUMMY_FRAMES +#define USE_GENERIC_DUMMY_FRAMES 1 #define CALL_DUMMY {0} #define CALL_DUMMY_LENGTH (0) #define CALL_DUMMY_START_OFFSET (0) @@ -255,13 +255,14 @@ extern CORE_ADDR sh_frame_chain PARAMS ((struct frame_info *)); #define FRAME_CHAIN(FRAME) sh_frame_chain(FRAME) #define PUSH_DUMMY_FRAME generic_push_dummy_frame () #define FRAME_CHAIN_VALID(FP, FRAME) generic_frame_chain_valid (FP, FRAME) -#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP) +#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP) #define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \ (SP) = sh_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) /* override the standard get_saved_register function with one that takes account of generic CALL_DUMMY frames */ -#define GET_SAVED_REGISTER +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) /* Discard from the stack the innermost frame, restoring all saved registers. */ diff --git a/gdb/config/sparc/tm-sparc.h b/gdb/config/sparc/tm-sparc.h index ecbe9e2..6d56508 100644 --- a/gdb/config/sparc/tm-sparc.h +++ b/gdb/config/sparc/tm-sparc.h @@ -206,7 +206,13 @@ extern CORE_ADDR sparc_pc_adjust PARAMS ((CORE_ADDR)); outs change into ins in different frames. HAVE_REGISTER_WINDOWS can't deal with this case and also handle flat frames at the same time. */ -#define GET_SAVED_REGISTER 1 +#ifdef __STDC__ +struct frame_info; +enum lval_type; +#endif +void sparc_get_saved_register PARAMS ((char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lvalp)); +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + sparc_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) /* Number of bytes of storage in the actual machine representation for register N. */ diff --git a/gdb/config/v850/tm-v850.h b/gdb/config/v850/tm-v850.h index 14dd7f0..287ff86 100644 --- a/gdb/config/v850/tm-v850.h +++ b/gdb/config/v850/tm-v850.h @@ -137,7 +137,7 @@ extern CORE_ADDR v850_skip_prologue PARAMS ((CORE_ADDR pc)); extern void v850_pop_frame PARAMS ((struct frame_info *frame)); #define POP_FRAME v850_pop_frame (get_current_frame ()) -#define USE_GENERIC_DUMMY_FRAMES +#define USE_GENERIC_DUMMY_FRAMES 1 #define CALL_DUMMY {0} #define CALL_DUMMY_START_OFFSET (0) #define CALL_DUMMY_BREAKPOINT_OFFSET (0) @@ -160,14 +160,15 @@ v850_push_arguments PARAMS ((int nargs, struct value **args, CORE_ADDR sp, #define STORE_STRUCT_RETURN(STRUCT_ADDR, SP) -#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP) +#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP) extern use_struct_convention_fn v850_use_struct_convention; #define USE_STRUCT_CONVENTION(GCC_P, TYPE) v850_use_struct_convention (GCC_P, TYPE); /* override the default get_saved_register function with one that takes account of generic CALL_DUMMY frames */ -#define GET_SAVED_REGISTER +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) /* Define this for Wingdb */ diff --git a/gdb/configure b/gdb/configure index f70d046..8d39270 100755 --- a/gdb/configure +++ b/gdb/configure @@ -24,8 +24,40 @@ ac_help="$ac_help ac_help="$ac_help --with-mmalloc Use memory mapped malloc package" ac_help="$ac_help + --enable-carp Configure alternative readaptive paradigm " +ac_help="$ac_help + --enable-targets Alternative target configurations" +ac_help="$ac_help + --enable-ide Enable IDE support" +ac_help="$ac_help + --with-foundry-libs=DIR Use the Foundry SDK in DIR" +ac_help="$ac_help + --with-cpu=CPU Set the default CPU variant to debug" +ac_help="$ac_help + --enable-gdbtk Enable GDBTK GUI front end" +ac_help="$ac_help + --with-tclconfig=DIR Directory containing tcl configuration (tclConfig.sh)" +ac_help="$ac_help + --with-tkconfig=DIR Directory containing tk configuration (tkConfig.sh)" +ac_help="$ac_help + --with-tclinclude=DIR Directory where tcl private headers are" +ac_help="$ac_help + --with-tkinclude=DIR Directory where tk private headers are" +ac_help="$ac_help + --with-itclconfig Directory containing itcl configuration (itclConfig.sh)" +ac_help="$ac_help + --with-itkconfig Directory containing itk configuration (itkConfig.sh)" +ac_help="$ac_help + --with-tixconfig Directory containing tix configuration (tixConfig.sh)" +ac_help="$ac_help --with-x use the X Window System" ac_help="$ac_help + --with-sim-gpu2=DIR Use GPU2 library under given DIR" +ac_help="$ac_help + --with-sim-funit=DIR Use target FP lib under given DIR" +ac_help="$ac_help + --enable-sim Link gdb with simulator" +ac_help="$ac_help --enable-shared Use shared libraries" # Initialize some variables set by options. @@ -542,7 +574,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:546: checking for $ac_word" >&5 +echo "configure:578: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -572,7 +604,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:576: checking for $ac_word" >&5 +echo "configure:608: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -623,7 +655,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:627: checking for $ac_word" >&5 +echo "configure:659: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -655,7 +687,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:659: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:691: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -666,12 +698,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 670 "configure" +#line 702 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -697,12 +729,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:701: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:733: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:706: checking whether we are using GNU C" >&5 +echo "configure:738: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -711,7 +743,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:747: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -730,7 +762,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:734: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:766: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -762,7 +794,7 @@ else fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:766: checking how to run the C preprocessor" >&5 +echo "configure:798: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -777,13 +809,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext <<EOF -#line 781 "configure" +#line 813 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:787: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:819: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -794,13 +826,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext <<EOF -#line 798 "configure" +#line 830 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:804: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -811,13 +843,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext <<EOF -#line 815 "configure" +#line 847 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:821: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:853: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -842,9 +874,9 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for AIX""... $ac_c" 1>&6 -echo "configure:846: checking for AIX" >&5 +echo "configure:878: checking for AIX" >&5 cat > conftest.$ac_ext <<EOF -#line 848 "configure" +#line 880 "configure" #include "confdefs.h" #ifdef _AIX yes @@ -866,7 +898,7 @@ rm -f conftest* echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:870: checking for POSIXized ISC" >&5 +echo "configure:902: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -890,7 +922,7 @@ fi echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6 -echo "configure:894: checking for ${CC-cc} option to accept ANSI C" >&5 +echo "configure:926: checking for ${CC-cc} option to accept ANSI C" >&5 if eval "test \"`echo '$''{'am_cv_prog_cc_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -906,7 +938,7 @@ for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__ do CC="$ac_save_CC $ac_arg" cat > conftest.$ac_ext <<EOF -#line 910 "configure" +#line 942 "configure" #include "confdefs.h" #include <stdarg.h> #include <stdio.h> @@ -943,7 +975,7 @@ return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } EOF -if { (eval echo configure:947: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:979: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* am_cv_prog_cc_stdc="$ac_arg"; break else @@ -1014,7 +1046,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1018: checking host system type" >&5 +echo "configure:1050: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1035,7 +1067,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1039: checking target system type" >&5 +echo "configure:1071: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1053,7 +1085,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1057: checking build system type" >&5 +echo "configure:1089: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1078,7 +1110,7 @@ test "$host_alias" != "$target_alias" && ALL_LINGUAS= echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:1082: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:1114: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1107,7 +1139,7 @@ fi # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1111: checking for $ac_word" >&5 +echo "configure:1143: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1135,12 +1167,12 @@ else fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1139: checking for ANSI C header files" >&5 +echo "configure:1171: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1144 "configure" +#line 1176 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdarg.h> @@ -1148,7 +1180,7 @@ else #include <float.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1152: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1184: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1165,7 +1197,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 1169 "configure" +#line 1201 "configure" #include "confdefs.h" #include <string.h> EOF @@ -1183,7 +1215,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 1187 "configure" +#line 1219 "configure" #include "confdefs.h" #include <stdlib.h> EOF @@ -1204,7 +1236,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext <<EOF -#line 1208 "configure" +#line 1240 "configure" #include "confdefs.h" #include <ctype.h> #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1215,7 +1247,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1239,12 +1271,12 @@ EOF fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:1243: checking for working const" >&5 +echo "configure:1275: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1248 "configure" +#line 1280 "configure" #include "confdefs.h" int main() { @@ -1293,7 +1325,7 @@ ccp = (char const *const *) p; ; return 0; } EOF -if { (eval echo configure:1297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1329: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -1314,21 +1346,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1318: checking for inline" >&5 +echo "configure:1350: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <<EOF -#line 1325 "configure" +#line 1357 "configure" #include "confdefs.h" int main() { } $ac_kw foo() { ; return 0; } EOF -if { (eval echo configure:1332: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1364: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1354,12 +1386,12 @@ EOF esac echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:1358: checking for off_t" >&5 +echo "configure:1390: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1363 "configure" +#line 1395 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS @@ -1387,12 +1419,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:1391: checking for size_t" >&5 +echo "configure:1423: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1396 "configure" +#line 1428 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS @@ -1422,19 +1454,19 @@ fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:1426: checking for working alloca.h" >&5 +echo "configure:1458: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1431 "configure" +#line 1463 "configure" #include "confdefs.h" #include <alloca.h> int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:1438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -1455,12 +1487,12 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:1459: checking for alloca" >&5 +echo "configure:1491: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1464 "configure" +#line 1496 "configure" #include "confdefs.h" #ifdef __GNUC__ @@ -1488,7 +1520,7 @@ int main() { char *p = (char *) alloca(1); ; return 0; } EOF -if { (eval echo configure:1492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -1520,12 +1552,12 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:1524: checking whether alloca needs Cray hooks" >&5 +echo "configure:1556: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1529 "configure" +#line 1561 "configure" #include "confdefs.h" #if defined(CRAY) && ! defined(CRAY2) webecray @@ -1550,12 +1582,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1554: checking for $ac_func" >&5 +echo "configure:1586: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1559 "configure" +#line 1591 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -1578,7 +1610,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:1582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1605,7 +1637,7 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:1609: checking stack direction for C alloca" >&5 +echo "configure:1641: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1613,7 +1645,7 @@ else ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <<EOF -#line 1617 "configure" +#line 1649 "configure" #include "confdefs.h" find_stack_direction () { @@ -1632,7 +1664,7 @@ main () exit (find_stack_direction() < 0); } EOF -if { (eval echo configure:1636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1668: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -1657,17 +1689,17 @@ for ac_hdr in unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1661: checking for $ac_hdr" >&5 +echo "configure:1693: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1666 "configure" +#line 1698 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1671: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1703: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1696,12 +1728,12 @@ done for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1700: checking for $ac_func" >&5 +echo "configure:1732: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1705 "configure" +#line 1737 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -1724,7 +1756,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:1728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1749,7 +1781,7 @@ fi done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:1753: checking for working mmap" >&5 +echo "configure:1785: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1757,7 +1789,7 @@ else ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext <<EOF -#line 1761 "configure" +#line 1793 "configure" #include "confdefs.h" /* Thanks to Mike Haertel and Jim Avera for this test. @@ -1897,7 +1929,7 @@ main() } EOF -if { (eval echo configure:1901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else @@ -1925,17 +1957,17 @@ unistd.h values.h sys/param.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1929: checking for $ac_hdr" >&5 +echo "configure:1961: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1934 "configure" +#line 1966 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1939: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1971: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1965,12 +1997,12 @@ done __argz_count __argz_stringify __argz_next do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1969: checking for $ac_func" >&5 +echo "configure:2001: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1974 "configure" +#line 2006 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -1993,7 +2025,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:1997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2022,12 +2054,12 @@ done for ac_func in stpcpy do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2026: checking for $ac_func" >&5 +echo "configure:2058: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2031 "configure" +#line 2063 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -2050,7 +2082,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:2054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2084,19 +2116,19 @@ EOF if test $ac_cv_header_locale_h = yes; then echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 -echo "configure:2088: checking for LC_MESSAGES" >&5 +echo "configure:2120: checking for LC_MESSAGES" >&5 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2093 "configure" +#line 2125 "configure" #include "confdefs.h" #include <locale.h> int main() { return LC_MESSAGES ; return 0; } EOF -if { (eval echo configure:2100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_val_LC_MESSAGES=yes else @@ -2117,7 +2149,7 @@ EOF fi fi echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 -echo "configure:2121: checking whether NLS is requested" >&5 +echo "configure:2153: checking whether NLS is requested" >&5 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" @@ -2137,7 +2169,7 @@ fi EOF echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 -echo "configure:2141: checking whether included gettext is requested" >&5 +echo "configure:2173: checking whether included gettext is requested" >&5 # Check whether --with-included-gettext or --without-included-gettext was given. if test "${with_included_gettext+set}" = set; then withval="$with_included_gettext" @@ -2156,17 +2188,17 @@ fi ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 -echo "configure:2160: checking for libintl.h" >&5 +echo "configure:2192: checking for libintl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2165 "configure" +#line 2197 "configure" #include "confdefs.h" #include <libintl.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2170: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2202: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2183,19 +2215,19 @@ fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6 -echo "configure:2187: checking for gettext in libc" >&5 +echo "configure:2219: checking for gettext in libc" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2192 "configure" +#line 2224 "configure" #include "confdefs.h" #include <libintl.h> int main() { return (int) gettext ("") ; return 0; } EOF -if { (eval echo configure:2199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gettext_libc=yes else @@ -2211,7 +2243,7 @@ echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6 if test "$gt_cv_func_gettext_libc" != "yes"; then echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6 -echo "configure:2215: checking for bindtextdomain in -lintl" >&5 +echo "configure:2247: checking for bindtextdomain in -lintl" >&5 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2219,7 +2251,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <<EOF -#line 2223 "configure" +#line 2255 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2230,7 +2262,7 @@ int main() { bindtextdomain() ; return 0; } EOF -if { (eval echo configure:2234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2246,19 +2278,19 @@ fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6 -echo "configure:2250: checking for gettext in libintl" >&5 +echo "configure:2282: checking for gettext in libintl" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2255 "configure" +#line 2287 "configure" #include "confdefs.h" int main() { return (int) gettext ("") ; return 0; } EOF -if { (eval echo configure:2262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gettext_libintl=yes else @@ -2286,7 +2318,7 @@ EOF # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2290: checking for $ac_word" >&5 +echo "configure:2322: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2320,12 +2352,12 @@ fi for ac_func in dcgettext do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2324: checking for $ac_func" >&5 +echo "configure:2356: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2329 "configure" +#line 2361 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -2348,7 +2380,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:2352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2375,7 +2407,7 @@ done # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2379: checking for $ac_word" >&5 +echo "configure:2411: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2411,7 +2443,7 @@ fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2415: checking for $ac_word" >&5 +echo "configure:2447: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2443,7 +2475,7 @@ else fi cat > conftest.$ac_ext <<EOF -#line 2447 "configure" +#line 2479 "configure" #include "confdefs.h" int main() { @@ -2451,7 +2483,7 @@ extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } EOF -if { (eval echo configure:2455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* CATOBJEXT=.gmo DATADIRNAME=share @@ -2483,7 +2515,7 @@ fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2487: checking for $ac_word" >&5 +echo "configure:2519: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2517,7 +2549,7 @@ fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2521: checking for $ac_word" >&5 +echo "configure:2553: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2553,7 +2585,7 @@ fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2557: checking for $ac_word" >&5 +echo "configure:2589: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2643,7 +2675,7 @@ fi LINGUAS= else echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 -echo "configure:2647: checking for catalogs to be installed" >&5 +echo "configure:2679: checking for catalogs to be installed" >&5 NEW_LINGUAS= for lang in ${LINGUAS=$ALL_LINGUAS}; do case "$ALL_LINGUAS" in @@ -2671,17 +2703,17 @@ echo "configure:2647: checking for catalogs to be installed" >&5 if test "$CATOBJEXT" = ".cat"; then ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6 -echo "configure:2675: checking for linux/version.h" >&5 +echo "configure:2707: checking for linux/version.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2680 "configure" +#line 2712 "configure" #include "confdefs.h" #include <linux/version.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2685: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2717: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2756,6 +2788,40 @@ configdirs="doc testsuite" . ${srcdir}/configure.tgt +for ac_prog in mawk gawk nawk awk +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2797: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_AWK="$ac_prog" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +AWK="$ac_cv_prog_AWK" +if test -n "$AWK"; then + echo "$ac_t""$AWK" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$AWK" && break +done + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -2768,7 +2834,7 @@ configdirs="doc testsuite" # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:2772: checking for a BSD compatible install" >&5 +echo "configure:2838: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2829,7 +2895,7 @@ fi # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2833: checking for $ac_word" >&5 +echo "configure:2899: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2861,7 +2927,7 @@ fi # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2865: checking for $ac_word" >&5 +echo "configure:2931: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2893,7 +2959,7 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2897: checking for $ac_word" >&5 +echo "configure:2963: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2930,7 +2996,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2934: checking for $ac_word" >&5 +echo "configure:3000: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2982,12 +3048,12 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:2986: checking return type of signal handlers" >&5 +echo "configure:3052: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2991 "configure" +#line 3057 "configure" #include "confdefs.h" #include <sys/types.h> #include <signal.h> @@ -3004,7 +3070,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3008: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3074: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3024,12 +3090,12 @@ EOF echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:3028: checking for ANSI C header files" >&5 +echo "configure:3094: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3033 "configure" +#line 3099 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdarg.h> @@ -3037,7 +3103,7 @@ else #include <float.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3041: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3107: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3054,7 +3120,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 3058 "configure" +#line 3124 "configure" #include "confdefs.h" #include <string.h> EOF @@ -3072,7 +3138,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 3076 "configure" +#line 3142 "configure" #include "confdefs.h" #include <stdlib.h> EOF @@ -3093,7 +3159,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext <<EOF -#line 3097 "configure" +#line 3163 "configure" #include "confdefs.h" #include <ctype.h> #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -3104,7 +3170,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:3108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -3132,21 +3198,21 @@ for ac_hdr in ctype.h curses.h endian.h link.h \ memory.h objlist.h ptrace.h sgtty.h stddef.h stdlib.h \ string.h sys/procfs.h sys/ptrace.h sys/reg.h \ term.h termio.h termios.h unistd.h wait.h sys/wait.h \ - wchar.h wctype.h asm/debugreg.h sys/debugreg.h + wchar.h wctype.h asm/debugreg.h sys/debugreg.h sys/select.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3140: checking for $ac_hdr" >&5 +echo "configure:3206: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3145 "configure" +#line 3211 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3150: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3173,12 +3239,12 @@ fi done echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6 -echo "configure:3177: checking whether stat file-mode macros are broken" >&5 +echo "configure:3243: checking whether stat file-mode macros are broken" >&5 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3182 "configure" +#line 3248 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/stat.h> @@ -3230,12 +3296,12 @@ fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3234: checking for working const" >&5 +echo "configure:3300: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3239 "configure" +#line 3305 "configure" #include "confdefs.h" int main() { @@ -3284,7 +3350,7 @@ ccp = (char const *const *) p; ; return 0; } EOF -if { (eval echo configure:3288: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3308,12 +3374,12 @@ fi for ac_func in setpgid sbrk sigaction isascii bzero bcopy btowc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3312: checking for $ac_func" >&5 +echo "configure:3378: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3317 "configure" +#line 3383 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -3336,7 +3402,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:3340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3363,19 +3429,19 @@ done # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:3367: checking for working alloca.h" >&5 +echo "configure:3433: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3372 "configure" +#line 3438 "configure" #include "confdefs.h" #include <alloca.h> int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:3379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -3396,12 +3462,12 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:3400: checking for alloca" >&5 +echo "configure:3466: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3405 "configure" +#line 3471 "configure" #include "confdefs.h" #ifdef __GNUC__ @@ -3429,7 +3495,7 @@ int main() { char *p = (char *) alloca(1); ; return 0; } EOF -if { (eval echo configure:3433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -3461,12 +3527,12 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:3465: checking whether alloca needs Cray hooks" >&5 +echo "configure:3531: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3470 "configure" +#line 3536 "configure" #include "confdefs.h" #if defined(CRAY) && ! defined(CRAY2) webecray @@ -3491,12 +3557,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3495: checking for $ac_func" >&5 +echo "configure:3561: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3500 "configure" +#line 3566 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -3519,7 +3585,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:3523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3546,7 +3612,7 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:3550: checking stack direction for C alloca" >&5 +echo "configure:3616: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3554,7 +3620,7 @@ else ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <<EOF -#line 3558 "configure" +#line 3624 "configure" #include "confdefs.h" find_stack_direction () { @@ -3573,7 +3639,7 @@ main () exit (find_stack_direction() < 0); } EOF -if { (eval echo configure:3577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -3596,12 +3662,12 @@ fi echo $ac_n "checking whether malloc must be declared""... $ac_c" 1>&6 -echo "configure:3600: checking whether malloc must be declared" >&5 +echo "configure:3666: checking whether malloc must be declared" >&5 if eval "test \"`echo '$''{'bfd_cv_decl_needed_malloc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3605 "configure" +#line 3671 "configure" #include "confdefs.h" #include <stdio.h> @@ -3622,7 +3688,7 @@ int main() { char *(*pfn) = (char *(*)) malloc ; return 0; } EOF -if { (eval echo configure:3626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_decl_needed_malloc=no else @@ -3643,12 +3709,12 @@ EOF fi echo $ac_n "checking whether realloc must be declared""... $ac_c" 1>&6 -echo "configure:3647: checking whether realloc must be declared" >&5 +echo "configure:3713: checking whether realloc must be declared" >&5 if eval "test \"`echo '$''{'bfd_cv_decl_needed_realloc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3652 "configure" +#line 3718 "configure" #include "confdefs.h" #include <stdio.h> @@ -3669,7 +3735,7 @@ int main() { char *(*pfn) = (char *(*)) realloc ; return 0; } EOF -if { (eval echo configure:3673: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3739: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_decl_needed_realloc=no else @@ -3690,12 +3756,12 @@ EOF fi echo $ac_n "checking whether free must be declared""... $ac_c" 1>&6 -echo "configure:3694: checking whether free must be declared" >&5 +echo "configure:3760: checking whether free must be declared" >&5 if eval "test \"`echo '$''{'bfd_cv_decl_needed_free'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3699 "configure" +#line 3765 "configure" #include "confdefs.h" #include <stdio.h> @@ -3716,7 +3782,7 @@ int main() { char *(*pfn) = (char *(*)) free ; return 0; } EOF -if { (eval echo configure:3720: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_decl_needed_free=no else @@ -3737,12 +3803,12 @@ EOF fi echo $ac_n "checking whether strerror must be declared""... $ac_c" 1>&6 -echo "configure:3741: checking whether strerror must be declared" >&5 +echo "configure:3807: checking whether strerror must be declared" >&5 if eval "test \"`echo '$''{'bfd_cv_decl_needed_strerror'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3746 "configure" +#line 3812 "configure" #include "confdefs.h" #include <stdio.h> @@ -3763,7 +3829,7 @@ int main() { char *(*pfn) = (char *(*)) strerror ; return 0; } EOF -if { (eval echo configure:3767: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3833: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_decl_needed_strerror=no else @@ -3784,12 +3850,12 @@ EOF fi echo $ac_n "checking whether strdup must be declared""... $ac_c" 1>&6 -echo "configure:3788: checking whether strdup must be declared" >&5 +echo "configure:3854: checking whether strdup must be declared" >&5 if eval "test \"`echo '$''{'bfd_cv_decl_needed_strdup'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3793 "configure" +#line 3859 "configure" #include "confdefs.h" #include <stdio.h> @@ -3810,7 +3876,7 @@ int main() { char *(*pfn) = (char *(*)) strdup ; return 0; } EOF -if { (eval echo configure:3814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_decl_needed_strdup=no else @@ -3837,9 +3903,9 @@ fi # could be expunged. --jsm 1999-03-22 echo $ac_n "checking for HPUX save_state structure""... $ac_c" 1>&6 -echo "configure:3841: checking for HPUX save_state structure" >&5 +echo "configure:3907: checking for HPUX save_state structure" >&5 cat > conftest.$ac_ext <<EOF -#line 3843 "configure" +#line 3909 "configure" #include "confdefs.h" #include <machine/save_state.h> EOF @@ -3854,7 +3920,7 @@ fi rm -f conftest* cat > conftest.$ac_ext <<EOF -#line 3858 "configure" +#line 3924 "configure" #include "confdefs.h" #include <machine/save_state.h> EOF @@ -3890,6 +3956,7 @@ echo "$ac_t""$gdb_cv_hpux_sswide" 1>&6 # Also detect which type of /proc is in use, such as for Unixware. if test "${target}" = "${host}"; then + gdb_cv_hostos_is_solaris=no case "${host}" in i[3456]86-*-linux*) cat >> confdefs.h <<\EOF @@ -3901,12 +3968,15 @@ EOF EOF ;; + *-*-solaris*) + gdb_cv_hostos_is_solaris=yes ;; esac echo $ac_n "checking for directory proc entries""... $ac_c" 1>&6 -echo "configure:3907: checking for directory proc entries" >&5 +echo "configure:3976: checking for directory proc entries" >&5 # The [gdb_host != sun4sol2] hack is because Solaris does provide the # multiple procfs files as of Solaris 2.6, but GDB can't use it right now. - if test "$ac_cv_header_sys_procfs_h" = yes -a "$gdb_host" != sun4sol2 \ + if test "$ac_cv_header_sys_procfs_h" = yes -a \ + "$gdb_cv_hostos_is_solaris" = no \ -a -d /proc/$$ \ -a -f /proc/$$/ctl \ -a -f /proc/$$/as \ @@ -3924,19 +3994,19 @@ fi if test "$ac_cv_header_sys_procfs_h" = yes; then echo $ac_n "checking for pstatus_t in sys/procfs.h""... $ac_c" 1>&6 -echo "configure:3928: checking for pstatus_t in sys/procfs.h" >&5 +echo "configure:3998: checking for pstatus_t in sys/procfs.h" >&5 if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_pstatus_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3933 "configure" +#line 4003 "configure" #include "confdefs.h" #include <sys/procfs.h> int main() { pstatus_t avar ; return 0; } EOF -if { (eval echo configure:3940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_have_sys_procfs_type_pstatus_t=yes else @@ -3958,19 +4028,19 @@ EOF echo "$ac_t""$bfd_cv_have_sys_procfs_type_pstatus_t" 1>&6 echo $ac_n "checking for prrun_t in sys/procfs.h""... $ac_c" 1>&6 -echo "configure:3962: checking for prrun_t in sys/procfs.h" >&5 +echo "configure:4032: checking for prrun_t in sys/procfs.h" >&5 if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prrun_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3967 "configure" +#line 4037 "configure" #include "confdefs.h" #include <sys/procfs.h> int main() { prrun_t avar ; return 0; } EOF -if { (eval echo configure:3974: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_have_sys_procfs_type_prrun_t=yes else @@ -3992,19 +4062,19 @@ EOF echo "$ac_t""$bfd_cv_have_sys_procfs_type_prrun_t" 1>&6 echo $ac_n "checking for gregset_t in sys/procfs.h""... $ac_c" 1>&6 -echo "configure:3996: checking for gregset_t in sys/procfs.h" >&5 +echo "configure:4066: checking for gregset_t in sys/procfs.h" >&5 if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_gregset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4001 "configure" +#line 4071 "configure" #include "confdefs.h" #include <sys/procfs.h> int main() { gregset_t avar ; return 0; } EOF -if { (eval echo configure:4008: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_have_sys_procfs_type_gregset_t=yes else @@ -4026,19 +4096,19 @@ EOF echo "$ac_t""$bfd_cv_have_sys_procfs_type_gregset_t" 1>&6 echo $ac_n "checking for fpregset_t in sys/procfs.h""... $ac_c" 1>&6 -echo "configure:4030: checking for fpregset_t in sys/procfs.h" >&5 +echo "configure:4100: checking for fpregset_t in sys/procfs.h" >&5 if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_fpregset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4035 "configure" +#line 4105 "configure" #include "confdefs.h" #include <sys/procfs.h> int main() { fpregset_t avar ; return 0; } EOF -if { (eval echo configure:4042: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bfd_cv_have_sys_procfs_type_fpregset_t=yes else @@ -4062,12 +4132,12 @@ EOF echo $ac_n "checking for PIOCSET ioctl entry in sys/procfs.h""... $ac_c" 1>&6 -echo "configure:4066: checking for PIOCSET ioctl entry in sys/procfs.h" >&5 +echo "configure:4136: checking for PIOCSET ioctl entry in sys/procfs.h" >&5 if eval "test \"`echo '$''{'gdb_cv_have_procfs_piocset'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4071 "configure" +#line 4141 "configure" #include "confdefs.h" #include <unistd.h> #include <sys/types.h> @@ -4080,7 +4150,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:4084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4154: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gdb_cv_have_procfs_piocset=yes else @@ -4102,7 +4172,7 @@ EOF fi echo $ac_n "checking for main in -lm""... $ac_c" 1>&6 -echo "configure:4106: checking for main in -lm" >&5 +echo "configure:4176: checking for main in -lm" >&5 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4110,14 +4180,14 @@ else ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext <<EOF -#line 4114 "configure" +#line 4184 "configure" #include "confdefs.h" int main() { main() ; return 0; } EOF -if { (eval echo configure:4121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4146,7 +4216,7 @@ fi echo $ac_n "checking for wctype in -lc""... $ac_c" 1>&6 -echo "configure:4150: checking for wctype in -lc" >&5 +echo "configure:4220: checking for wctype in -lc" >&5 ac_lib_var=`echo c'_'wctype | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4154,7 +4224,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lc $LIBS" cat > conftest.$ac_ext <<EOF -#line 4158 "configure" +#line 4228 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -4165,7 +4235,7 @@ int main() { wctype() ; return 0; } EOF -if { (eval echo configure:4169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4184,7 +4254,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for wctype in -lw""... $ac_c" 1>&6 -echo "configure:4188: checking for wctype in -lw" >&5 +echo "configure:4258: checking for wctype in -lw" >&5 ac_lib_var=`echo w'_'wctype | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4192,7 +4262,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lw $LIBS" cat > conftest.$ac_ext <<EOF -#line 4196 "configure" +#line 4266 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -4203,7 +4273,7 @@ int main() { wctype() ; return 0; } EOF -if { (eval echo configure:4207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4235,12 +4305,12 @@ fi echo $ac_n "checking for long long support in compiler""... $ac_c" 1>&6 -echo "configure:4239: checking for long long support in compiler" >&5 +echo "configure:4309: checking for long long support in compiler" >&5 if eval "test \"`echo '$''{'gdb_cv_c_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4244 "configure" +#line 4314 "configure" #include "confdefs.h" int main() { @@ -4250,7 +4320,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:4254: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4324: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gdb_cv_c_long_long=yes else @@ -4272,7 +4342,7 @@ fi echo $ac_n "checking for long long support in printf""... $ac_c" 1>&6 -echo "configure:4276: checking for long long support in printf" >&5 +echo "configure:4346: checking for long long support in printf" >&5 if eval "test \"`echo '$''{'gdb_cv_printf_has_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4280,7 +4350,7 @@ else gdb_cv_printf_has_long_long=no else cat > conftest.$ac_ext <<EOF -#line 4284 "configure" +#line 4354 "configure" #include "confdefs.h" int main () { @@ -4294,7 +4364,7 @@ int main () { return (strcmp ("0x0123456789abcdef", buf)); } EOF -if { (eval echo configure:4298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then gdb_cv_printf_has_long_long=yes else @@ -4318,19 +4388,19 @@ echo "$ac_t""$gdb_cv_printf_has_long_long" 1>&6 echo $ac_n "checking for long double support in compiler""... $ac_c" 1>&6 -echo "configure:4322: checking for long double support in compiler" >&5 +echo "configure:4392: checking for long double support in compiler" >&5 if eval "test \"`echo '$''{'ac_cv_c_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4327 "configure" +#line 4397 "configure" #include "confdefs.h" int main() { long double foo; ; return 0; } EOF -if { (eval echo configure:4334: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4404: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_long_double=yes else @@ -4352,7 +4422,7 @@ fi echo $ac_n "checking for long double support in printf""... $ac_c" 1>&6 -echo "configure:4356: checking for long double support in printf" >&5 +echo "configure:4426: checking for long double support in printf" >&5 if eval "test \"`echo '$''{'gdb_cv_printf_has_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4360,7 +4430,7 @@ else gdb_cv_printf_has_long_double=no else cat > conftest.$ac_ext <<EOF -#line 4364 "configure" +#line 4434 "configure" #include "confdefs.h" int main () { @@ -4370,7 +4440,7 @@ int main () { return (strncmp ("3.14159", buf, 7)); } EOF -if { (eval echo configure:4374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then gdb_cv_printf_has_long_double=yes else @@ -4394,7 +4464,7 @@ echo "$ac_t""$gdb_cv_printf_has_long_double" 1>&6 echo $ac_n "checking for long double support in scanf""... $ac_c" 1>&6 -echo "configure:4398: checking for long double support in scanf" >&5 +echo "configure:4468: checking for long double support in scanf" >&5 if eval "test \"`echo '$''{'gdb_cv_scanf_has_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4402,7 +4472,7 @@ else gdb_cv_scanf_has_long_double=no else cat > conftest.$ac_ext <<EOF -#line 4406 "configure" +#line 4476 "configure" #include "confdefs.h" int main () { @@ -4412,7 +4482,7 @@ int main () { return !(f > 3.14159 && f < 3.14160); } EOF -if { (eval echo configure:4416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then gdb_cv_scanf_has_long_double=yes else @@ -4438,17 +4508,17 @@ for ac_hdr in unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4442: checking for $ac_hdr" >&5 +echo "configure:4512: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4447 "configure" +#line 4517 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4452: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4477,12 +4547,12 @@ done for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4481: checking for $ac_func" >&5 +echo "configure:4551: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4486 "configure" +#line 4556 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -4505,7 +4575,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:4509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4530,7 +4600,7 @@ fi done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:4534: checking for working mmap" >&5 +echo "configure:4604: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4538,7 +4608,7 @@ else ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext <<EOF -#line 4542 "configure" +#line 4612 "configure" #include "confdefs.h" /* Thanks to Mike Haertel and Jim Avera for this test. @@ -4678,7 +4748,7 @@ main() } EOF -if { (eval echo configure:4682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else @@ -4707,7 +4777,7 @@ if test ${build} = ${host} -a ${host} = ${target} ; then case ${host_os} in hpux*) echo $ac_n "checking for HPUX/OSF thread support""... $ac_c" 1>&6 -echo "configure:4711: checking for HPUX/OSF thread support" >&5 +echo "configure:4781: checking for HPUX/OSF thread support" >&5 if test -f /usr/include/dce/cma_config.h ; then if test "$GCC" = "yes" ; then echo "$ac_t""yes" 1>&6 @@ -4726,7 +4796,7 @@ EOF ;; solaris*) echo $ac_n "checking for Solaris thread debugging library""... $ac_c" 1>&6 -echo "configure:4730: checking for Solaris thread debugging library" >&5 +echo "configure:4800: checking for Solaris thread debugging library" >&5 if test -f /usr/lib/libthread_db.so.1 ; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF @@ -4736,7 +4806,7 @@ EOF CONFIG_OBS="${CONFIG_OBS} sol-thread.o" CONFIG_SRCS="${CONFIG_SRCS} sol-thread.c" echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:4740: checking for dlopen in -ldl" >&5 +echo "configure:4810: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4744,7 +4814,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <<EOF -#line 4748 "configure" +#line 4818 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -4755,7 +4825,7 @@ int main() { dlopen() ; return 0; } EOF -if { (eval echo configure:4759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4787,17 +4857,17 @@ fi # all symbols visible in the dynamic symbol table. hold_ldflags=$LDFLAGS echo $ac_n "checking for the ld -export-dynamic flag""... $ac_c" 1>&6 -echo "configure:4791: checking for the ld -export-dynamic flag" >&5 +echo "configure:4861: checking for the ld -export-dynamic flag" >&5 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic" cat > conftest.$ac_ext <<EOF -#line 4794 "configure" +#line 4864 "configure" #include "confdefs.h" int main() { int i; ; return 0; } EOF -if { (eval echo configure:4801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* found=yes else @@ -4816,13 +4886,13 @@ rm -f conftest* # Sun randomly tweaked the prototypes in <proc_service.h> # at one point. echo $ac_n "checking if <proc_service.h> is old""... $ac_c" 1>&6 -echo "configure:4820: checking if <proc_service.h> is old" >&5 +echo "configure:4890: checking if <proc_service.h> is old" >&5 if eval "test \"`echo '$''{'gdb_cv_proc_service_is_old'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4826 "configure" +#line 4896 "configure" #include "confdefs.h" #include <proc_service.h> @@ -4833,7 +4903,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:4837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4907: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gdb_cv_proc_service_is_old=no else @@ -4965,12 +5035,46 @@ EOF MMALLOC='../mmalloc/libmmalloc.a' fi + +# In the Cygwin environment, we need some additional flags. +echo $ac_n "checking for cygwin""... $ac_c" 1>&6 +echo "configure:5165: checking for cygwin" >&5 +if eval "test \"`echo '$''{'gdb_cv_os_cygwin'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 5170 "configure" +#include "confdefs.h" + +#if defined (__CYGWIN__) || defined (__CYGWIN32__) +lose +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "lose" >/dev/null 2>&1; then + rm -rf conftest* + gdb_cv_os_cygwin=yes +else + rm -rf conftest* + gdb_cv_os_cygwin=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$gdb_cv_os_cygwin" 1>&6 + +DLLTOOL=${DLLTOOL-dlltool} +WINDRES=${WINDRES-windres} + + + if test x$gdb_cv_os_cygwin = xyes; then TERM_LIB='`if test -r ../libtermcap/libtermcap.a; then echo ../libtermcap/libtermcap.a; else echo -ltermcap; fi`' else TERM_LIB= echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 -echo "configure:4974: checking for tgetent in -lncurses" >&5 +echo "configure:5201: checking for tgetent in -lncurses" >&5 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4978,7 +5082,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lncurses $LIBS" cat > conftest.$ac_ext <<EOF -#line 4982 "configure" +#line 5209 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -4989,7 +5093,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:4993: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5008,7 +5112,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -lHcurses""... $ac_c" 1>&6 -echo "configure:5012: checking for tgetent in -lHcurses" >&5 +echo "configure:5239: checking for tgetent in -lHcurses" >&5 ac_lib_var=`echo Hcurses'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5016,7 +5120,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lHcurses $LIBS" cat > conftest.$ac_ext <<EOF -#line 5020 "configure" +#line 5247 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -5027,7 +5131,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:5031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5046,7 +5150,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -ltermlib""... $ac_c" 1>&6 -echo "configure:5050: checking for tgetent in -ltermlib" >&5 +echo "configure:5277: checking for tgetent in -ltermlib" >&5 ac_lib_var=`echo termlib'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5054,7 +5158,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ltermlib $LIBS" cat > conftest.$ac_ext <<EOF -#line 5058 "configure" +#line 5285 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -5065,7 +5169,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:5069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5084,7 +5188,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 -echo "configure:5088: checking for tgetent in -ltermcap" >&5 +echo "configure:5315: checking for tgetent in -ltermcap" >&5 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5092,7 +5196,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ltermcap $LIBS" cat > conftest.$ac_ext <<EOF -#line 5096 "configure" +#line 5323 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -5103,7 +5207,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:5107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5122,7 +5226,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6 -echo "configure:5126: checking for tgetent in -lcurses" >&5 +echo "configure:5353: checking for tgetent in -lcurses" >&5 ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5130,7 +5234,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcurses $LIBS" cat > conftest.$ac_ext <<EOF -#line 5134 "configure" +#line 5361 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -5141,7 +5245,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:5145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5160,7 +5264,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -lterminfo""... $ac_c" 1>&6 -echo "configure:5164: checking for tgetent in -lterminfo" >&5 +echo "configure:5391: checking for tgetent in -lterminfo" >&5 ac_lib_var=`echo terminfo'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5168,7 +5272,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lterminfo $LIBS" cat > conftest.$ac_ext <<EOF -#line 5172 "configure" +#line 5399 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -5179,7 +5283,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:5183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5218,12 +5322,14 @@ fi + + # If we find X, set shell vars x_includes and x_libraries to the # paths, otherwise set no_x=yes. # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 -echo "configure:5227: checking for X" >&5 +echo "configure:6542: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then @@ -5285,12 +5391,12 @@ if test "$ac_x_includes" = NO; then # First, try using that file with no special directory specified. cat > conftest.$ac_ext <<EOF -#line 5289 "configure" +#line 6604 "configure" #include "confdefs.h" #include <$x_direct_test_include> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5294: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6609: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5359,14 +5465,14 @@ if test "$ac_x_libraries" = NO; then ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <<EOF -#line 5363 "configure" +#line 6678 "configure" #include "confdefs.h" int main() { ${x_direct_test_function}() ; return 0; } EOF -if { (eval echo configure:5370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBS="$ac_save_LIBS" # We can link X programs with no special library path. @@ -5453,6 +5559,47 @@ else fi + +# Unlike the sim directory, whether a simulator is linked is controlled by +# presence of a SIM= and a SIM_OBS= definition in the target '.mt' file. +# This code just checks for a few cases where we'd like to ignore those +# definitions, even when they're present in the '.mt' file. These cases +# are when --disable-sim is specified, or if the simulator directory is +# not part of the soruce tree. +# +# Check whether --enable-sim or --disable-sim was given. +if test "${enable_sim+set}" = set; then + enableval="$enable_sim" + echo "enable_sim = $enable_sim"; + echo "enableval = ${enableval}"; + case "${enableval}" in + yes) ignore_sim=false ;; + no) ignore_sim=true ;; + *) ignore_sim=false ;; + esac +else + ignore_sim=false +fi + + +if test ! -d "${srcdir}/../sim"; then + ignore_sim=true +fi + +if test "${ignore_sim}" = "true"; then + IGNORE_SIM="SIM=" + IGNORE_SIM_OBS="SIM_OBS=" +else + IGNORE_SIM="" + IGNORE_SIM_OBS="" + cat >> confdefs.h <<\EOF +#define WITH_SIM 1 +EOF + +fi + + + @@ -5598,12 +5745,12 @@ fi echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 -echo "configure:5602: checking for Cygwin environment" >&5 +echo "configure:7029: checking for Cygwin environment" >&5 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5607 "configure" +#line 7034 "configure" #include "confdefs.h" int main() { @@ -5614,7 +5761,7 @@ int main() { return __CYGWIN__; ; return 0; } EOF -if { (eval echo configure:5618: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:7045: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_cygwin=yes else @@ -5631,19 +5778,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6 CYGWIN= test "$ac_cv_cygwin" = yes && CYGWIN=yes echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 -echo "configure:5635: checking for mingw32 environment" >&5 +echo "configure:7062: checking for mingw32 environment" >&5 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5640 "configure" +#line 7067 "configure" #include "confdefs.h" int main() { return __MINGW32__; ; return 0; } EOF -if { (eval echo configure:5647: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:7074: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mingw32=yes else @@ -5662,7 +5809,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 -echo "configure:5666: checking for executable suffix" >&5 +echo "configure:7093: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5672,7 +5819,7 @@ else rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= - if { (eval echo configure:5676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + if { (eval echo configure:7103: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in *.c | *.o | *.obj | *.ilk | *.pdb) ;; @@ -5868,6 +6015,7 @@ s%@GT_NO@%$GT_NO%g s%@GT_YES@%$GT_YES%g s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g s%@l@%$l%g +s%@AWK@%$AWK%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g @@ -5879,7 +6027,76 @@ s%@TUI_LIBRARY@%$TUI_LIBRARY%g s%@WARN_CFLAGS@%$WARN_CFLAGS%g s%@MMALLOC_CFLAGS@%$MMALLOC_CFLAGS%g s%@MMALLOC@%$MMALLOC%g +s%@MACHINE_OBS@%$MACHINE_OBS%g +s%@DLLTOOL@%$DLLTOOL%g +s%@WINDRES@%$WINDRES%g s%@TERM_LIB@%$TERM_LIB%g +s%@ENABLE_IDE@%$ENABLE_IDE%g +s%@FOUNDRY_LIB_BASE@%$FOUNDRY_LIB_BASE%g +s%@LIBGUI@%$LIBGUI%g +s%@GUI_CFLAGS_X@%$GUI_CFLAGS_X%g +s%@IDE_CFLAGS_X@%$IDE_CFLAGS_X%g +s%@IDE_X@%$IDE_X%g +s%@LIBIDETCL@%$LIBIDETCL%g +s%@LIBIDE@%$LIBIDE%g +s%@IDE_DEPS@%$IDE_DEPS%g +s%@WIN32LIBS@%$WIN32LIBS%g +s%@WIN32LDAPP@%$WIN32LDAPP%g +s%@TCL_VERSION@%$TCL_VERSION%g +s%@TCL_MAJOR_VERSION@%$TCL_MAJOR_VERSION%g +s%@TCL_MINOR_VERSION@%$TCL_MINOR_VERSION%g +s%@TCL_CC@%$TCL_CC%g +s%@TCL_DEFS@%$TCL_DEFS%g +s%@TCL_SHLIB_CFLAGS@%$TCL_SHLIB_CFLAGS%g +s%@TCL_SHLIB_LD@%$TCL_SHLIB_LD%g +s%@TCL_SHLIB_LD_LIBS@%$TCL_SHLIB_LD_LIBS%g +s%@TCL_SHLIB_SUFFIX@%$TCL_SHLIB_SUFFIX%g +s%@TCL_DL_LIBS@%$TCL_DL_LIBS%g +s%@TCL_LD_FLAGS@%$TCL_LD_FLAGS%g +s%@TCL_LD_SEARCH_FLAGS@%$TCL_LD_SEARCH_FLAGS%g +s%@TCL_COMPAT_OBJS@%$TCL_COMPAT_OBJS%g +s%@TCL_RANLIB@%$TCL_RANLIB%g +s%@TCL_BUILD_LIB_SPEC@%$TCL_BUILD_LIB_SPEC%g +s%@TCL_LIB_SPEC@%$TCL_LIB_SPEC%g +s%@TCL_LIB_VERSIONS_OK@%$TCL_LIB_VERSIONS_OK%g +s%@TK_VERSION@%$TK_VERSION%g +s%@TK_DEFS@%$TK_DEFS%g +s%@TK_BUILD_INCLUDES@%$TK_BUILD_INCLUDES%g +s%@TK_XINCLUDES@%$TK_XINCLUDES%g +s%@TK_XLIBSW@%$TK_XLIBSW%g +s%@TK_BUILD_LIB_SPEC@%$TK_BUILD_LIB_SPEC%g +s%@TK_LIB_SPEC@%$TK_LIB_SPEC%g +s%@TCLHDIR@%$TCLHDIR%g +s%@TKHDIR@%$TKHDIR%g +s%@ITCLHDIR@%$ITCLHDIR%g +s%@ITKHDIR@%$ITKHDIR%g +s%@TIXHDIR@%$TIXHDIR%g +s%@ITCL_VERSION@%$ITCL_VERSION%g +s%@ITCL_DEFS@%$ITCL_DEFS%g +s%@ITCL_BUILD_INCLUDES@%$ITCL_BUILD_INCLUDES%g +s%@ITCL_BUILD_LIB_SPEC@%$ITCL_BUILD_LIB_SPEC%g +s%@ITCL_LIB_SPEC@%$ITCL_LIB_SPEC%g +s%@ITK_VERSION@%$ITK_VERSION%g +s%@ITK_DEFS@%$ITK_DEFS%g +s%@ITK_BUILD_INCLUDES@%$ITK_BUILD_INCLUDES%g +s%@ITK_BUILD_LIB_SPEC@%$ITK_BUILD_LIB_SPEC%g +s%@ITK_LIB_SPEC@%$ITK_LIB_SPEC%g +s%@TIX_VERSION@%$TIX_VERSION%g +s%@TIX_BUILD_LIB_SPEC@%$TIX_BUILD_LIB_SPEC%g +s%@ENABLE_GDBTK@%$ENABLE_GDBTK%g +s%@X_CFLAGS@%$X_CFLAGS%g +s%@X_LDFLAGS@%$X_LDFLAGS%g +s%@X_LIBS@%$X_LIBS%g +s%@ITCLLIB@%$ITCLLIB%g +s%@ITCL_DEPS@%$ITCL_DEPS%g +s%@ITKLIB@%$ITKLIB%g +s%@ITK_DEPS@%$ITK_DEPS%g +s%@TIXLIB@%$TIXLIB%g +s%@TIX_DEPS@%$TIX_DEPS%g +s%@GDBTKLIBS@%$GDBTKLIBS%g +s%@GDBTK_CFLAGS@%$GDBTK_CFLAGS%g +s%@IGNORE_SIM@%$IGNORE_SIM%g +s%@IGNORE_SIM_OBS@%$IGNORE_SIM_OBS%g s%@ENABLE_CFLAGS@%$ENABLE_CFLAGS%g s%@CONFIG_OBS@%$CONFIG_OBS%g s%@CONFIG_DEPS@%$CONFIG_DEPS%g @@ -5892,6 +6109,7 @@ s%@host_makefile_frag@%%g /@target_makefile_frag@/r $target_makefile_frag s%@target_makefile_frag@%%g s%@frags@%$frags%g +s%@LN_S@%$LN_S%g s%@EXEEXT@%$EXEEXT%g s%@subdirs@%$subdirs%g diff --git a/gdb/configure.host b/gdb/configure.host index aca63e6..0a4695f 100644 --- a/gdb/configure.host +++ b/gdb/configure.host @@ -56,6 +56,7 @@ i[3456]86-*-dgux*) gdb_host=i386dgux ;; i[3456]86-*-freebsd*) gdb_host=fbsd ;; i[3456]86-*-netbsd*) gdb_host=nbsd ;; i[3456]86-*-go32*) gdb_host=go32 ;; +i[3456]86-*-msdosdjgpp*) gdb_host=go32 ;; i[3456]86-*-linux*) gdb_host=linux ;; i[3456]86-*-lynxos*) gdb_host=i386lynx ;; i[3456]86-*-mach3*) gdb_host=i386m3 ;; @@ -104,7 +105,7 @@ m88*-motorola-sysv4*) gdb_host=delta88v4 ;; m88*-motorola-sysv*) gdb_host=delta88 ;; m88*-*-*) gdb_host=m88k ;; -mips-dec-mach3*) gdb_host=mach3 ;; +mips-dec-mach3*) gdb_host=mipsm3 ;; mips-dec-*) gdb_host=decstation ;; mips-little-*) gdb_host=littlemips ;; mips-sgi-irix3*) gdb_host=irix3 ;; diff --git a/gdb/configure.in b/gdb/configure.in index d658118..363438a 100644 --- a/gdb/configure.in +++ b/gdb/configure.in @@ -54,6 +54,7 @@ changequote(,)dnl dnl changequote([,])dnl +AC_PROG_AWK AC_PROG_INSTALL AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(RANLIB, ranlib, :) @@ -69,7 +70,7 @@ AC_CHECK_HEADERS(ctype.h curses.h endian.h link.h \ memory.h objlist.h ptrace.h sgtty.h stddef.h stdlib.h \ string.h sys/procfs.h sys/ptrace.h sys/reg.h \ term.h termio.h termios.h unistd.h wait.h sys/wait.h \ - wchar.h wctype.h asm/debugreg.h sys/debugreg.h) + wchar.h wctype.h asm/debugreg.h sys/debugreg.h sys/select.h) AC_HEADER_STAT AC_C_CONST @@ -109,16 +110,20 @@ AC_MSG_RESULT($gdb_cv_hpux_sswide) # Also detect which type of /proc is in use, such as for Unixware. if test "${target}" = "${host}"; then + gdb_cv_hostos_is_solaris=no case "${host}" in i[[3456]]86-*-linux*) AC_DEFINE(START_INFERIOR_TRAPS_EXPECTED,2) AC_DEFINE(sys_quotactl) ;; + *-*-solaris*) + gdb_cv_hostos_is_solaris=yes ;; esac AC_MSG_CHECKING(for directory proc entries) # The [gdb_host != sun4sol2] hack is because Solaris does provide the # multiple procfs files as of Solaris 2.6, but GDB can't use it right now. - if test "$ac_cv_header_sys_procfs_h" = yes -a "$gdb_host" != sun4sol2 \ + if test "$ac_cv_header_sys_procfs_h" = yes -a \ + "$gdb_cv_hostos_is_solaris" = no \ -a -d /proc/$$ \ -a -f /proc/$$/ctl \ -a -f /proc/$$/as \ @@ -405,6 +410,19 @@ if test x$want_mmalloc = xtrue; then MMALLOC='../mmalloc/libmmalloc.a' fi + +# In the Cygwin environment, we need some additional flags. +AC_CACHE_CHECK([for cygwin], gdb_cv_os_cygwin, +[AC_EGREP_CPP(lose, [ +#if defined (__CYGWIN__) || defined (__CYGWIN32__) +lose +#endif],[gdb_cv_os_cygwin=yes],[gdb_cv_os_cygwin=no])]) + +DLLTOOL=${DLLTOOL-dlltool} +WINDRES=${WINDRES-windres} +AC_SUBST(DLLTOOL) +AC_SUBST(WINDRES) + dnl Figure out which term library to use. if test x$gdb_cv_os_cygwin = xyes; then TERM_LIB='`if test -r ../libtermcap/libtermcap.a; then echo ../libtermcap/libtermcap.a; else echo -ltermcap; fi`' @@ -425,8 +443,44 @@ fi AC_SUBST(TERM_LIB) + + AC_PATH_X + +# Unlike the sim directory, whether a simulator is linked is controlled by +# presence of a SIM= and a SIM_OBS= definition in the target '.mt' file. +# This code just checks for a few cases where we'd like to ignore those +# definitions, even when they're present in the '.mt' file. These cases +# are when --disable-sim is specified, or if the simulator directory is +# not part of the soruce tree. +# +AC_ARG_ENABLE(sim, +[ --enable-sim Link gdb with simulator], +[echo "enable_sim = $enable_sim"; + echo "enableval = ${enableval}"; + case "${enableval}" in + yes) ignore_sim=false ;; + no) ignore_sim=true ;; + *) ignore_sim=false ;; + esac], +[ignore_sim=false]) + +if test ! -d "${srcdir}/../sim"; then + ignore_sim=true +fi + +if test "${ignore_sim}" = "true"; then + IGNORE_SIM="SIM=" + IGNORE_SIM_OBS="SIM_OBS=" +else + IGNORE_SIM="" + IGNORE_SIM_OBS="" + AC_DEFINE(WITH_SIM) +fi +AC_SUBST(IGNORE_SIM) +AC_SUBST(IGNORE_SIM_OBS) + AC_SUBST(ENABLE_CFLAGS) AC_SUBST(CONFIG_OBS) diff --git a/gdb/configure.tgt b/gdb/configure.tgt index 95fc274..2358545 100644 --- a/gdb/configure.tgt +++ b/gdb/configure.tgt @@ -50,17 +50,8 @@ alpha*-*-linux*) gdb_target=alpha-linux ;; arc-*-*) gdb_target=arc ;; -arm-*-* | thumb-*-* | strongarm-*-*) gdb_target=arm - - # rdi doesn't work for wingdb yet - case $gdb_host in - windows) ;; - *) - configdirs="$configdirs rdi-share" - CONFIG_OBS="$CONFIG_OBS remote-rdi.o rdi-share/libangsd.a" - ;; - esac - ;; +arm-*-* | thumb-*-* | strongarm-*-*) + gdb_target=arm ;; c1-*-*) gdb_target=convex ;; c2-*-*) gdb_target=convex ;; @@ -94,13 +85,14 @@ i[3456]86-*-freebsd*) gdb_target=fbsd ;; i[3456]86-*-netbsd*) gdb_target=nbsd ;; i[3456]86-*-os9k) gdb_target=i386os9k ;; i[3456]86-*-go32*) gdb_target=i386aout ;; +i[3456]86-*-msdosdjgpp*) gdb_target=go32 ;; i[3456]86-*-lynxos*) gdb_target=i386lynx configdirs="${configdirs} gdbserver" ;; i[3456]86-*-solaris*) gdb_target=i386sol2 ;; i[3456]86-*-sunos*) gdb_target=sun386 ;; -i[3456]86-*-sysv4.2MP) gdb_target=i386v42mp ;; -i[3456]86-*-sysv4.2uw2*) gdb_target=i386v42mp ;; +i[3456]86-*-sysv4.2*) gdb_target=i386v42mp ;; i[3456]86-*-sysv4*) gdb_target=i386v4 ;; +i[3456]86-*-sysv5*) gdb_target=i386v42mp ;; i[3456]86-*-unixware2*) gdb_target=i386v42mp ;; i[3456]86-*-unixware*) gdb_target=i386v4 ;; i[3456]86-*-sco3.2v4*) gdb_target=i386sco4 ;; @@ -118,12 +110,12 @@ i[3456]86-*-netware*) gdb_target=i386nw configdirs="${configdirs} nlm" ;; i[3456]86-*-osf1mk*) gdb_target=i386mk ;; i[3456]86-*-cygwin*) gdb_target=cygwin ;; + i960-*-bout*) gdb_target=vxworks960 ;; i960-nindy-coff*) gdb_target=nindy960 ;; i960-*-coff*) gdb_target=mon960 ;; i960-nindy-elf*) gdb_target=nindy960 ;; i960-*-elf*) gdb_target=mon960 ;; - i960-*-nindy*) gdb_target=nindy960 ;; i960-*-vxworks*) gdb_target=vxworks960 ;; @@ -266,6 +258,8 @@ sparc64-*-*) gdb_target=sp64 ;; tahoe-*-*) gdb_target=tahoe ;; +tic80-*-*) gdb_target=tic80 + configdirs="${configdirs} gdbserver" ;; vax-*-*) gdb_target=vax ;; diff --git a/gdb/convex-xdep.c b/gdb/convex-xdep.c index 8bfc0d8..ad128c1 100644 --- a/gdb/convex-xdep.c +++ b/gdb/convex-xdep.c @@ -123,9 +123,6 @@ static struct user u; static thread_t th; static proc_t pr; -/* The registers of the currently selected thread. */ - -extern char registers[REGISTER_BYTES]; /* Vector and communication registers from core dump or from inferior. These are read on demand, ie, not normally valid. */ diff --git a/gdb/corefile.c b/gdb/corefile.c index 94e56eb..6a0bea4 100644 --- a/gdb/corefile.c +++ b/gdb/corefile.c @@ -37,8 +37,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "symfile.h" #include "objfiles.h" -extern char registers[]; - /* Local function declarations. */ static void call_extra_exec_file_hooks PARAMS ((char *filename)); diff --git a/gdb/corelow.c b/gdb/corelow.c index e635257..0cff040 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -95,15 +95,18 @@ core_close (quitting) { inferior_pid = 0; /* Avoid confusion from thread stuff */ + /* Clear out solib state while the bfd is still open. See + comments in clear_solib in solib.c. */ +#ifdef CLEAR_SOLIB + CLEAR_SOLIB (); +#endif + name = bfd_get_filename (core_bfd); if (!bfd_close (core_bfd)) warning ("cannot close \"%s\": %s", name, bfd_errmsg (bfd_get_error ())); free (name); core_bfd = NULL; -#ifdef CLEAR_SOLIB - CLEAR_SOLIB (); -#endif if (core_ops.to_sections) { free ((PTR)core_ops.to_sections); diff --git a/gdb/cxux-nat.c b/gdb/cxux-nat.c index 2c4b6f1..f693a30 100644 --- a/gdb/cxux-nat.c +++ b/gdb/cxux-nat.c @@ -63,7 +63,6 @@ extern int have_symbol_file_p(); extern jmp_buf stack_jmp; extern int errno; -extern char registers[REGISTER_BYTES]; void fetch_inferior_registers (regno) @@ -310,7 +309,6 @@ fill_gregset (gregsetp, regno) { int regi; register greg_t *regp = (greg_t *) gregsetp; - extern char registers[]; for (regi = 0 ; regi <= R_R31 ; regi++) if ((regno == -1) || (regno == regi)) diff --git a/gdb/d10v-tdep.c b/gdb/d10v-tdep.c index f4b52f6..7f60603 100644 --- a/gdb/d10v-tdep.c +++ b/gdb/d10v-tdep.c @@ -552,6 +552,45 @@ d10v_push_return_address (pc, sp) } +/* When arguments must be pushed onto the stack, they go on in reverse + order. The below implements a FILO (stack) to do this. */ + +struct stack_item +{ + int len; + struct stack_item *prev; + void *data; +}; + +static struct stack_item *push_stack_item PARAMS ((struct stack_item *prev, void *contents, int len)); +static struct stack_item * +push_stack_item (prev, contents, len) + struct stack_item *prev; + void *contents; + int len; +{ + struct stack_item *si; + si = xmalloc (sizeof (struct stack_item)); + si->data = xmalloc (len); + si->len = len; + si->prev = prev; + memcpy (si->data, contents, len); + return si; +} + +static struct stack_item *pop_stack_item PARAMS ((struct stack_item *si)); +static struct stack_item * +pop_stack_item (si) + struct stack_item *si; +{ + struct stack_item *dead = si; + si = si->prev; + free (dead->data); + free (dead); + return si; +} + + CORE_ADDR d10v_push_arguments (nargs, args, sp, struct_return, struct_addr) int nargs; @@ -562,6 +601,7 @@ d10v_push_arguments (nargs, args, sp, struct_return, struct_addr) { int i; int regnum = ARG1_REGNUM; + struct stack_item *si = NULL; /* Fill in registers and arg lists */ for (i = 0; i < nargs; i++) @@ -598,9 +638,9 @@ d10v_push_arguments (nargs, args, sp, struct_return, struct_addr) else { char ptr[2]; - sp -= 2; + /* arg will go onto stack */ store_address (ptr, val & 0xffff, 2); - write_memory (sp, ptr, 2); + si = push_stack_item (si, ptr, 2); } } else @@ -631,13 +671,20 @@ d10v_push_arguments (nargs, args, sp, struct_return, struct_addr) } else { - /* arg goes straight on stack */ - regnum = ARGN_REGNUM + 1; - sp = (sp - len) & ~1; - write_memory (sp, contents, len); + /* arg will go onto stack */ + regnum = ARGN_REGNUM + 1; + si = push_stack_item (si, contents, len); } } } + + while (si) + { + sp = (sp - si->len) & ~1; + write_memory (sp, si->data, si->len); + si = pop_stack_item (si); + } + return sp; } diff --git a/gdb/dbug-rom.c b/gdb/dbug-rom.c index fa9c974..494bd44 100644 --- a/gdb/dbug-rom.c +++ b/gdb/dbug-rom.c @@ -1,5 +1,5 @@ /* Remote debugging interface to dBUG ROM monitor for GDB, the GNU debugger. - Copyright 1996 Free Software Foundation, Inc. + Copyright 1996, 1999 Free Software Foundation, Inc. Written by Stan Shebs of Cygnus Support. @@ -97,12 +97,12 @@ init_dbug_cmds(void) dbug_cmds.flags = MO_CLR_BREAK_USES_ADDR | MO_GETMEM_NEEDS_RANGE | MO_FILL_USES_ADDR; dbug_cmds.init = dbug_inits; /* Init strings */ dbug_cmds.cont = "go\r"; /* continue command */ - dbug_cmds.step = "step\r"; /* single step */ + dbug_cmds.step = "trace\r"; /* single step */ dbug_cmds.stop = NULL; /* interrupt command */ dbug_cmds.set_break = "br %x\r"; /* set a breakpoint */ - dbug_cmds.clr_break = "br -c %x\r"; /* clear a breakpoint */ - dbug_cmds.clr_all_break = "br -c\r"; /* clear all breakpoints */ - dbug_cmds.fill = "bf.b %x %x %x"; /* fill (start end val) */ + dbug_cmds.clr_break = "br -r %x\r"; /* clear a breakpoint */ + dbug_cmds.clr_all_break = "br -r\r"; /* clear all breakpoints */ + dbug_cmds.fill = "bf.b %x %x %x\r"; /* fill (start end val) */ dbug_cmds.setmem.cmdb = "mm.b %x %x\r"; /* setmem.cmdb (addr, value) */ dbug_cmds.setmem.cmdw = "mm.w %x %x\r"; /* setmem.cmdw (addr, value) */ dbug_cmds.setmem.cmdl = "mm.l %x %x\r"; /* setmem.cmdl (addr, value) */ diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 0749412..f752130 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -197,6 +197,51 @@ struct complaint repeated_header_complaint = struct complaint unclaimed_bincl_complaint = {"N_BINCL %s not in entries for any file, at symtab pos %d", 0, 0}; +/* find_text_range --- find start and end of loadable code sections + + The find_text_range function finds the shortest address range that + encloses all sections containing executable code, and stores it in + objfile's text_addr and text_size members. + + dbx_symfile_read will use this to finish off the partial symbol + table, in some cases. */ + +static void +find_text_range (bfd *sym_bfd, struct objfile *objfile) +{ + asection *sec; + int found_any = 0; + CORE_ADDR start, end; + + for (sec = sym_bfd->sections; sec; sec = sec->next) + if (bfd_get_section_flags (sym_bfd, sec) & SEC_CODE) + { + CORE_ADDR sec_start = bfd_section_vma (sym_bfd, sec); + CORE_ADDR sec_end = sec_start + bfd_section_size (sym_bfd, sec); + + if (found_any) + { + if (sec_start < start) start = sec_start; + if (sec_end > end) end = sec_end; + } + else + { + start = sec_start; + end = sec_end; + } + + found_any = 1; + } + + if (! found_any) + error ("Can't find any code sections in symbol file"); + + DBX_TEXT_ADDR (objfile) = start; + DBX_TEXT_SIZE (objfile) = end - start; +} + + + /* During initial symbol readin, we need to have a structure to keep track of which psymtabs have which bincls in them. This structure is used during readin to setup the list of dependencies within each @@ -2589,11 +2634,9 @@ elfstab_build_psymtabs (objfile, section_offsets, mainline, It might even contain some info from the ELF symtab to help us. */ info = objfile->sym_stab_info; - text_sect = bfd_get_section_by_name (sym_bfd, ".text"); - if (!text_sect) - error ("Can't find .text section in symbol file"); - DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect); - DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect); + /* Find the first and last text address. dbx_symfile_read seems to + want this. */ + find_text_range (sym_bfd, objfile); #define ELF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */ DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE; @@ -1,5 +1,5 @@ /* Basic, host-specific, and target-specific definitions for GDB. - Copyright (C) 1986, 89, 91, 92, 93, 94, 95, 96, 98, 1999 + Copyright (C) 1986, 89, 91, 92, 93, 94, 95, 96, 1998 Free Software Foundation, Inc. This file is part of GDB. @@ -252,6 +252,8 @@ extern void notice_quit PARAMS ((void)); extern int strcmp_iw PARAMS ((const char *, const char *)); +extern int subset_compare PARAMS ((char *, char *)); + extern char *safe_strerror PARAMS ((int)); extern char *safe_strsignal PARAMS ((int)); @@ -273,6 +275,8 @@ typedef void (*make_cleanup_func) PARAMS ((void *)); extern struct cleanup *make_cleanup PARAMS ((make_cleanup_func, void *)); +extern struct cleanup *make_cleanup_freeargv PARAMS ((char **)); + extern struct cleanup *make_final_cleanup PARAMS ((make_cleanup_func, void *)); extern struct cleanup *make_my_cleanup PARAMS ((struct cleanup **, @@ -1019,24 +1023,7 @@ extern CORE_ADDR push_bytes PARAMS ((CORE_ADDR, char *, int)); extern CORE_ADDR push_word PARAMS ((CORE_ADDR, ULONGEST)); -/* Some parts of gdb might be considered optional, in the sense that they - are not essential for being able to build a working, usable debugger - for a specific environment. For example, the maintenance commands - are there for the benefit of gdb maintainers. As another example, - some environments really don't need gdb's that are able to read N - different object file formats. In order to make it possible (but - not necessarily recommended) to build "stripped down" versions of - gdb, the following defines control selective compilation of those - parts of gdb which can be safely left out when necessary. Note that - the default is to include everything. */ - -#ifndef MAINTENANCE_CMDS -#define MAINTENANCE_CMDS 1 -#endif - -#ifdef MAINTENANCE_CMDS extern int watchdog; -#endif /* Hooks for alternate command interfaces. */ diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 1e03a80..19f11db 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,41 @@ +Thu Apr 22 13:07:37 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * gdbint.texinfo (USE_GENERIC_DUMMY_FRAMES): Document. + (GET_SAVED_REGISTER): Update, not just the a29k uses this. + +Wed Apr 21 13:59:01 1999 Dave Brolley <brolley@cygnus.com> + + * gdbint.texinfo: Fix typos: $ -> @. + +Tue Apr 20 11:59:38 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * gdbint.texinfo (REGISTER_NAMES, BREAKPOINT, BIG_BREAKPOINT, + LITTLE_BREAKPOINT, LITTLE_REMOTE_BREAKPOINT, + BIG_REMOTE_BREAKPOINT): Deprecate in favor of REGISTER_NAME and + BREAKPOINT_FROM_PC. + +Mon Apr 12 16:00:44 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * gdbint.texinfo (CALL_DUMMY_STACK_ADJUST_P, + CALL_DUMMY_STACK_ADJUST): Document. + +Thu Apr 8 17:23:15 1999 Andrew Cagney <cagney@b1.cygnus.com> + + * gdbint.texinfo (CALL_DUMMY_P, CALL_DUMMY_WORDS, + SIZEOF_CALL_DUMMY_WORDS, CALL_DUMMY): Define. + +1999-04-02 Stan Shebs <shebs@andros.cygnus.com> + + * gdbint.texinfo (MAINTENANCE_CMDS): Remove ref, since it no + longer exists. + +Tue Mar 9 19:25:11 1999 Stan Shebs <shebs@andros.cygnus.com> + + * gdb.texinfo, remote.texi, all-cfg.texi, HPPA-cfg.texi: Remove + nearly all @ifset/@ifclear conditionals; nobody uses them, and + they make the manual source incomprehensible. + * h8-cfg.texi: Remove, hasn't been used in years. + Thu Feb 11 18:00:59 1999 Stan Shebs <shebs@andros.cygnus.com> * gdb.texinfo: Update the credits. diff --git a/gdb/doc/HPPA-cfg.texi b/gdb/doc/HPPA-cfg.texi index 88a138c..8e44a4c 100644 --- a/gdb/doc/HPPA-cfg.texi +++ b/gdb/doc/HPPA-cfg.texi @@ -1,5 +1,5 @@ @c GDB MANUAL configuration file. -@c Copyright (c) 1993 Free Software Foundation, Inc. +@c Copyright (c) 1997, 1998 Free Software Foundation, Inc. @c @c NOTE: While the GDB manual is configurable (by changing these @c switches), its configuration is ***NOT*** automatically tied in to @@ -21,75 +21,9 @@ @c HP PA-RISC target: @set HPPA @c -@c Hitachi H8/300 target: -@clear H8 -@c Hitachi H8/300 target ONLY: -@clear H8EXCLUSIVE -@c -@c remote MIPS target: -@clear MIPS -@c -@c SPARC target: -@clear SPARC -@c -@c AMD 29000 target: -@clear AMD29K -@c -@c Intel 960 target: -@clear I960 -@c -@c Tandem ST2000 (phone switch) target: -@clear ST2000 -@c -@c Zilog 8000 target: -@clear Z8K -@c -@c Wind River Systems VxWorks environment: -@clear VXWORKS -@c -@c ---------------------------------------------------------------------- -@c DOC FEATURE FLAGS: -@c -@c Bare-board target? -@clear BARETARGET -@c -@c Restrict languages discussed to C? -@c This is backward. As time permits, change this to language-specific -@c switches for what to include. -@clear CONLY -@c Discuss Fortran? -@clear FORTRAN -@c -@c Discuss Modula 2? -@clear MOD2 -@c -@c Specifically for host machine running DOS? -@clear DOSHOST -@c -@c Talk about CPU simulator targets? -@clear SIMS -@c -@c Remote serial line settings of interest? -@set SERIAL -@c -@c Discuss features requiring Posix or similar OS environment? -@set POSIX -@c -@c Discuss remote serial debugging stub? -@clear REMOTESTUB -@c -@c Discuss gdbserver? -@set GDBSERVER -@c -@c Discuss gdbserve.nlm? -@set GDBSERVE -@c @c Refrain from discussing how to configure sw and format doc? @clear PRECONFIGURED @c -@c Refrain from referring to unfree publications? -@set FSFDOC -@c @c ---------------------------------------------------------------------- @c STRINGS: @c diff --git a/gdb/doc/all-cfg.texi b/gdb/doc/all-cfg.texi index 74d8090..755f334 100644 --- a/gdb/doc/all-cfg.texi +++ b/gdb/doc/all-cfg.texi @@ -21,76 +21,9 @@ @c HP PA-RISC target ONLY: @clear HPPA @c -@c Hitachi H8/300 target: -@set H8 -@c Hitachi H8/300 target ONLY: -@clear H8EXCLUSIVE -@c -@c remote MIPS target: -@set MIPS -@c -@c SPARC target: -@set SPARC -@set SPARCLET -@c -@c AMD 29000 target: -@set AMD29K -@c -@c Intel 960 target: -@set I960 -@c -@c Tandem ST2000 (phone switch) target: -@set ST2000 -@c -@c Zilog 8000 target: -@set Z8K -@c -@c Wind River Systems VxWorks environment: -@set VXWORKS -@c -@c ---------------------------------------------------------------------- -@c DOC FEATURE FLAGS: -@c -@c Bare-board target? -@clear BARETARGET -@c -@c Restrict languages discussed to C? -@c This is backward. As time permits, change this to language-specific -@c switches for what to include. -@clear CONLY -@c Discuss Fortran? -@set FORTRAN -@c -@c Discuss Modula 2? -@set MOD2 -@c -@c Specifically for host machine running DOS? -@clear DOSHOST -@c -@c Talk about CPU simulator targets? -@set SIMS -@c -@c Remote serial line settings of interest? -@set SERIAL -@c -@c Discuss features requiring Posix or similar OS environment? -@set POSIX -@c -@c Discuss remote serial debugging stub? -@set REMOTESTUB -@c -@c Discuss gdbserver? -@set GDBSERVER -@c -@c Discuss gdbserve.nlm? -@set GDBSERVE -@c @c Refrain from discussing how to configure sw and format doc? @clear PRECONFIGURED @c -@c Refrain from referring to unfree publications? -@set FSFDOC -@c @c ---------------------------------------------------------------------- @c STRINGS: @c diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index fc920bb..d7c9d83 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -9,12 +9,7 @@ @c @include gdb-cfg.texi @c -@ifset GENERIC @settitle Debugging with @value{GDBN} -@end ifset -@ifclear GENERIC -@settitle Debugging with @value{GDBN} (@value{TARGET}) -@end ifclear @setchapternewpage odd @c %**end of header @@ -81,9 +76,6 @@ into another language, under the above conditions for modified versions. @titlepage @title Debugging with @value{GDBN} @subtitle The @sc{gnu} Source-Level Debugger -@ifclear GENERIC -@subtitle (@value{TARGET}) -@end ifclear @sp 1 @ifclear HPPA @subtitle @value{EDITION} Edition, for @value{GDBN} version @value{GDBVN} @@ -151,9 +143,7 @@ This is the @value{EDITION} Edition, @value{DATE}, for @value{GDBN} Version Copyright (C) 1988-1999 Free Software Foundation, Inc. @menu * Summary:: Summary of @value{GDBN} -@ifclear BARETARGET * Sample Session:: A sample @value{GDBN} session -@end ifclear * Invocation:: Getting in and out of @value{GDBN} * Commands:: @value{GDBN} commands @@ -162,13 +152,9 @@ Copyright (C) 1988-1999 Free Software Foundation, Inc. * Stack:: Examining the stack * Source:: Examining source files * Data:: Examining data -@ifclear CONLY -* Languages:: Using @value{GDBN} with different languages -@end ifclear -@ifset CONLY +* Languages:: Using @value{GDBN} with different languages * C:: C language support -@end ifset * Symbols:: Examining the symbol table * Altering:: Altering execution @@ -176,9 +162,7 @@ Copyright (C) 1988-1999 Free Software Foundation, Inc. * Targets:: Specifying a debugging target * Controlling GDB:: Controlling @value{GDBN} * Sequences:: Canned sequences of commands -@ifclear DOSHOST * Emacs:: Using @value{GDBN} under @sc{gnu} Emacs -@end ifclear * GDB Bugs:: Reporting bugs in @value{GDBN} @@ -222,18 +206,13 @@ Running Programs Under @value{GDBN} * Compilation:: Compiling for debugging * Starting:: Starting your program -@ifclear BARETARGET * Arguments:: Your program's arguments * Environment:: Your program's environment -@end ifclear - * Working Directory:: Your program's working directory * Input/Output:: Your program's input and output * Attach:: Debugging an already-running process * Kill Process:: Killing the child process -@ifclear HPPA * Process Information:: Additional process information -@end ifclear * Threads:: Debugging programs with multiple threads * Processes:: Debugging programs with multiple processes @@ -242,12 +221,8 @@ Stopping and Continuing * Breakpoints:: Breakpoints, watchpoints, and catchpoints * Continuing and Stepping:: Resuming execution -@ifset POSIX * Signals:: Signals -@end ifset -@ifclear BARETARGET * Thread Stops:: Stopping and starting multi-thread programs -@end ifclear Breakpoints and watchpoints @@ -258,9 +233,7 @@ Breakpoints and watchpoints * Disabling:: Disabling breakpoints * Conditions:: Break conditions * Break Commands:: Breakpoint command lists -@ifclear CONLY * Breakpoint Menus:: Breakpoint menus -@end ifclear Examining the Stack @@ -273,9 +246,7 @@ Examining the Stack Examining Source Files * List:: Printing source lines -@ifclear DOSHOST * Search:: Searching source files -@end ifclear * Source Path:: Specifying source directories * Machine Code:: Source and machine code @@ -291,18 +262,13 @@ Examining Data * Value History:: Value history * Convenience Vars:: Convenience variables * Registers:: Registers -@ifclear HAVE-FLOAT * Floating Point Hardware:: Floating point hardware -@end ifclear Using @value{GDBN} with Different Languages * Setting:: Switching between source languages * Show:: Displaying the language -@ifset MOD2 * Checks:: Type and range checks -@end ifset - * Support:: Supported languages Switching between source languages @@ -311,36 +277,24 @@ Switching between source languages * Manually:: Setting the working language manually * Automatically:: Having @value{GDBN} infer the source language -@ifset MOD2 Type and range checking * Type Checking:: An overview of type checking * Range Checking:: An overview of range checking -@end ifset Supported languages -@ifset MOD2 -* C:: C and C++ - -C Language Support - -* C Operators:: C operators - C Language Support -@end ifset +* C:: C and C++ * C Operators:: C and C++ operators * C Constants:: C and C++ constants -* Cplus expressions:: C++ expressions +* C plus plus expressions:: C++ expressions * C Defaults:: Default settings for C and C++ -@ifset MOD2 * C Checks:: C and C++ type and range checks -@end ifset * Debugging C:: @value{GDBN} and C * Debugging C plus plus:: @value{GDBN} features for C++ -@ifset MOD2 Modula-2 * M2 Operators:: Built-in operators @@ -351,15 +305,12 @@ Modula-2 * M2 Checks:: Modula-2 type and range checks * M2 Scope:: The scope operators @code{::} and @code{.} * GDB/M2:: @value{GDBN} and Modula-2 -@end ifset Altering Execution * Assignment:: Assignment to variables * Jumping:: Continuing at a different address -@ifclear BARETARGET * Signaling:: Giving your program a signal -@end ifclear * Returning:: Returning from a function * Calling:: Calling your program's functions * Patching:: Patching your program @@ -380,38 +331,23 @@ Specifying a Debugging Target Remote debugging @end ifclear -@ifset REMOTESTUB * Remote Serial:: @value{GDBN} remote serial protocol -@end ifset -@ifset I960 * i960-Nindy Remote:: @value{GDBN} with a remote i960 (Nindy) -@end ifset -@ifset AMD29K * UDI29K Remote:: The UDI protocol for AMD29K + * EB29K Remote:: The EBMON protocol for AMD29K -@end ifset -@ifset VXWORKS * VxWorks Remote:: @value{GDBN} and VxWorks -@end ifset -@ifset ST2000 * ST2000 Remote:: @value{GDBN} with a Tandem ST2000 -@end ifset -@ifset H8 * Hitachi Remote:: @value{GDBN} and Hitachi Microprocessors -@end ifset -@ifset MIPS * MIPS Remote:: @value{GDBN} and MIPS boards -@end ifset -@ifset SIMS * Simulator:: Simulated CPU target -@end ifset Controlling @value{GDBN} @@ -468,14 +404,10 @@ Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another. @end itemize -@ifclear CONLY You can use @value{GDBN} to debug programs written in C or C++. @c "MOD2" used as a "miscellaneous languages" flag here. @c This is acceptable while there is no real doc for Chill and Pascal. -@ifclear MOD2 For more information, see @ref{Support,,Supported languages}. -@end ifclear -@ifset MOD2 For more information, see @ref{C,,C and C++}. Support for Modula-2 and Chill is partial. For information on Modula-2, @@ -484,16 +416,12 @@ see @ref{Modula-2,,Modula-2}. There is no further documentation on Chill yet. Debugging Pascal programs which use sets, subranges, file variables, or nested functions does not currently work. @value{GDBN} does not support entering expressions, printing values, or similar features using Pascal syntax. -@end ifset -@ifset FORTRAN @cindex Fortran @value{GDBN} can be used to debug programs written in Fortran, although it does not yet support entering expressions, printing values, or similar features using Fortran syntax. It may be necessary to refer to some variables with a trailing underscore. -@end ifset -@end ifclear @ifset HPPA This version of the manual documents HP Wildebeest (WDB) Version 0.75, @@ -559,12 +487,10 @@ and Randy Smith (releases 3.2, 3.1, and 3.0). Richard Stallman, assisted at various times by Peter TerMaat, Chris Hanson, and Richard Mlynarik, handled releases through 2.8. -@ifclear CONLY Michael Tiemann is the author of most of the @sc{gnu} C++ support in GDB, with significant additional contributions from Per Bothner. James Clark wrote the @sc{gnu} C++ demangler. Early work on C++ was by Peter TerMaat (who also did much general update work leading to release 3.0). -@end ifclear @value{GDBN} 4 uses the BFD subroutine library to examine multiple object-file formats; BFD was a joint project of David V. @@ -610,17 +536,12 @@ and RDI targets, respectively. Brian Fox is the author of the readline libraries providing command-line editing and command history. -Andrew Beers of SUNY Buffalo wrote the language-switching code, -@ifset MOD2 -the Modula-2 support, -@end ifset -and contributed the Languages chapter of this manual. +Andrew Beers of SUNY Buffalo wrote the language-switching code, the +Modula-2 support, and contributed the Languages chapter of this manual. Fred Fish wrote most of the support for Unix System Vr4. -@ifclear CONLY He also enhanced the command-completion support to cover C++ overloaded symbols. -@end ifclear Hitachi America, Ltd. sponsored the support for H8/300, H8/500, and Super-H processors. @@ -670,7 +591,6 @@ Unrau, Jim Wilson, and David Zuhn have made contributions both large and small. -@ifclear BARETARGET @node Sample Session, Invocation, Summary, Top @chapter A Sample @value{GDBN} Session @@ -956,7 +876,6 @@ session with the @value{GDBN} @code{quit} command. @smallexample (@value{GDBP}) @b{quit} @end smallexample -@end ifclear @node Invocation, Commands, Sample Session, Top @chapter Getting In and Out of @value{GDBN} @@ -979,23 +898,15 @@ type @kbd{quit} or @kbd{C-d} to exit. @node Invoking GDB, Quitting GDB, Invocation, Invocation @section Invoking @value{GDBN} -@ifset H8EXCLUSIVE -For details on starting up @value{GDBP} as a -remote debugger attached to a Hitachi microprocessor, see @ref{Hitachi -Remote,,@value{GDBN} and Hitachi Microprocessors}. -@end ifset - Invoke @value{GDBN} by running the program @code{@value{GDBP}}. Once started, @value{GDBN} reads commands from the terminal until you tell it to exit. You can also run @code{@value{GDBP}} with a variety of arguments and options, to specify more of your debugging environment at the outset. -@ifset GENERIC The command-line options described here are designed to cover a variety of situations; in some environments, some of these options may effectively be unavailable. -@end ifset The most usual way to start @value{GDBN} is with one argument, specifying an executable program: @@ -1004,7 +915,6 @@ specifying an executable program: @value{GDBP} @var{program} @end example -@ifclear BARETARGET @noindent You can also start with both an executable program and a core file specified: @@ -1030,7 +940,6 @@ complete operating system; when you use @value{GDBN} as a remote debugger attached to a bare board, there may not be any notion of ``process'', and there is often no way to get a core dump. @end ifclear -@end ifclear You can run @code{gdb} without printing the front material, which describes @value{GDBN}'s non-warranty, by specifying @code{-silent}: @@ -1060,52 +969,13 @@ in sequential order. The order makes a difference when the @menu -@ifclear GENERIC -@ifset REMOTESTUB -* Remote Serial:: @value{GDBN} remote serial protocol -@end ifset -@ifset I960 -* i960-Nindy Remote:: @value{GDBN} with a remote i960 (Nindy) -@end ifset -@ifset AMD29K -* UDI29K Remote:: The UDI protocol for AMD29K -* EB29K Remote:: The EBMON protocol for AMD29K -@end ifset -@ifset VXWORKS -* VxWorks Remote:: @value{GDBN} and VxWorks -@end ifset -@ifset ST2000 -* ST2000 Remote:: @value{GDBN} with a Tandem ST2000 -@end ifset -@ifset H8 -* Hitachi Remote:: @value{GDBN} and Hitachi Microprocessors -@end ifset -@ifset MIPS -* MIPS Remote:: @value{GDBN} and MIPS boards -@end ifset -@ifset SPARCLET -* Sparclet Remote:: @value{GDBN} and Sparclet boards -@end ifset -@ifset SIMS -* Simulator:: Simulated CPU target -@end ifset -@end ifclear -@c remnant makeinfo bug requires this blank line after *two* end-ifblahs: - * File Options:: Choosing files * Mode Options:: Choosing modes @end menu -@ifclear GENERIC -@ifclear HPPA -@include remote.texi -@end ifclear -@end ifclear - @node File Options @subsection Choosing files -@ifclear BARETARGET When @value{GDBN} starts, it reads any arguments other than options as specifying an executable file and core file (or process ID). This is the same as if the arguments were specified by the @samp{-se} and @@ -1114,12 +984,10 @@ that does not have an associated option flag as equivalent to the @samp{-se} option followed by that argument; and the second argument that does not have an associated option flag, if any, as equivalent to the @samp{-c} option followed by that argument.) -@end ifclear -@ifset BARETARGET -When @value{GDBN} starts, it reads any argument other than options as -specifying an executable file. This is the same as if the argument was -specified by the @samp{-se} option. -@end ifset + +If @value{GDBN} has not been configured to included core file support, +such as for most embedded targets, then it will complain about a second +argument and ignore it. Many options have both long and short forms; both are shown in the following list. @value{GDBN} also recognizes the long forms if you truncate @@ -1134,20 +1002,13 @@ Read symbol table from file @var{file}. @item -exec @var{file} @itemx -e @var{file} -Use file @var{file} as the executable file to execute when -@ifset BARETARGET -appropriate. -@end ifset -@ifclear BARETARGET -appropriate, and for examining pure data in conjunction with a core -dump. -@end ifclear +Use file @var{file} as the executable file to execute when appropriate, +and for examining pure data in conjunction with a core dump. @item -se @var{file} Read symbol table from file @var{file} and use it as the executable file. -@ifclear BARETARGET @item -core @var{file} @itemx -c @var{file} Use file @var{file} as a core dump to examine. @@ -1156,7 +1017,6 @@ Use file @var{file} as a core dump to examine. Connect to process ID @var{number}, as with the @code{attach} command (unless there is a file in core-dump format named @var{number}, in which case @samp{-c} specifies that file as a core dump to read). -@end ifclear @item -command @var{file} @itemx -x @var{file} @@ -1167,7 +1027,6 @@ Files,, Command files}. @itemx -d @var{directory} Add @var{directory} to the path to search for source files. -@ifclear BARETARGET @ifclear HPPA @item -m @itemx -mapped @@ -1186,7 +1045,6 @@ The @file{.syms} file is specific to the host machine where @value{GDBN} is run. It holds an exact image of the internal @value{GDBN} symbol table. It cannot be shared across multiple host platforms. @end ifclear -@end ifclear @ifclear HPPA @item -r @@ -1197,7 +1055,6 @@ This makes startup slower, but makes future operations faster. @end ifclear @end table -@ifclear BARETARGET @ifclear HPPA The @code{-mapped} and @code{-readnow} options are typically combined in order to build a @file{.syms} file that contains complete symbol @@ -1209,7 +1066,6 @@ nothing but build a @file{.syms} file for future use is: gdb -batch -nx -mapped -readnow programname @end example @end ifclear -@end ifclear @node Mode Options, , File Options, Invoking GDB @subsection Choosing modes @@ -1253,20 +1109,18 @@ terminates) is not issued when running in batch mode. Run @value{GDBN} using @var{directory} as its working directory, instead of the current directory. -@ifclear DOSHOST @item -fullname @itemx -f -@sc{gnu} Emacs sets this option when it runs @value{GDBN} as a subprocess. It tells @value{GDBN} -to output the full file name and line number in a standard, -recognizable fashion each time a stack frame is displayed (which -includes each time your program stops). This recognizable format looks -like two @samp{\032} characters, followed by the file name, line number -and character position separated by colons, and a newline. The -Emacs-to-@value{GDBN} interface program uses the two @samp{\032} characters as -a signal to display the source code for the frame. -@end ifclear +@sc{gnu} Emacs sets this option when it runs @value{GDBN} as a +subprocess. It tells @value{GDBN} to output the full file name and line +number in a standard, recognizable fashion each time a stack frame is +displayed (which includes each time your program stops). This +recognizable format looks like two @samp{\032} characters, followed by +the file name, line number and character position separated by colons, +and a newline. The Emacs-to-@value{GDBN} interface program uses the two +@samp{\032} characters as a signal to display the source code for the +frame. -@ifset SERIAL @ifclear HPPA @item -b @var{bps} Set the line speed (baud rate or bits per second) of any serial @@ -1276,7 +1130,6 @@ interface used by @value{GDBN} for remote debugging. @item -tty @var{device} Run using @var{device} for your program's standard input and output. @c FIXME: kingdon thinks there is more to -tty. Investigate. -@end ifset @ifset HPPA @item -tui @@ -1316,11 +1169,9 @@ returns to @value{GDBN} command level. It is safe to type the interrupt character at any time because @value{GDBN} does not allow it to take effect until a time when it is safe. -@ifclear BARETARGET If you have been using @value{GDBN} to control an attached process or device, you can release it with the @code{detach} command (@pxref{Attach, ,Debugging an already-running process}). -@end ifclear @node Shell Commands, , Quitting GDB, Invocation @section Shell commands @@ -1334,10 +1185,8 @@ just use the @code{shell} command. @cindex shell escape @item shell @var{command string} Invoke a standard shell to execute @var{command string}. -@ifclear DOSHOST If it exists, the environment variable @code{SHELL} determines which shell to run. Otherwise @value{GDBN} uses @code{/bin/sh}. -@end ifclear @end table The utility @code{make} is often needed in development environments. @@ -1477,22 +1326,18 @@ command. If you just want to see the list of alternatives in the first place, you can press @kbd{M-?} rather than pressing @key{TAB} twice. @kbd{M-?} -means @kbd{@key{META} ?}. You can type this -@ifclear DOSHOST -either by holding down a +means @kbd{@key{META} ?}. You can type this either by holding down a key designated as the @key{META} shift on your keyboard (if there is -one) while typing @kbd{?}, or -@end ifclear -as @key{ESC} followed by @kbd{?}. +one) while typing @kbd{?}, or as @key{ESC} followed by @kbd{?}. @cindex quotes in commands @cindex completion of quoted strings Sometimes the string you need, while logically a ``word'', may contain -parentheses or other characters that @value{GDBN} normally excludes from its -notion of a word. To permit word completion to work in this situation, -you may enclose words in @code{'} (single quote marks) in @value{GDBN} commands. +parentheses or other characters that @value{GDBN} normally excludes from +its notion of a word. To permit word completion to work in this +situation, you may enclose words in @code{'} (single quote marks) in +@value{GDBN} commands. -@ifclear CONLY The most likely situation where you might need this is in typing the name of a C++ function. This is because C++ allows function overloading (multiple definitions of the same function, distinguished by argument @@ -1527,11 +1372,10 @@ In general, @value{GDBN} can tell that a quote is needed (and inserts it) if you have not yet started typing the argument list when you ask for completion on an overloaded symbol. -For more information about overloaded functions, @pxref{Cplus +For more information about overloaded functions, @pxref{C plus plus expressions, ,C++ expressions}. You can use the command @code{set overload-resolution off} to disable overload resolution; @pxref{Debugging C plus plus, ,@value{GDBN} features for C++}. -@end ifclear @node Help, , Completion, Commands @@ -1694,27 +1538,23 @@ Display the @sc{gnu} ``NO WARRANTY'' statement. When you run a program under @value{GDBN}, you must first generate debugging information when you compile it. -@ifclear BARETARGET -You may start @value{GDBN} with its arguments, if any, in an environment -of your choice. You may redirect your program's input and output, debug an -already running process, or kill a child process. -@end ifclear + +You may start @value{GDBN} with its arguments, if any, in an environment +of your choice. If you are doing native debugging, you may redirect +your program's input and output, debug an already running process, or +kill a child process. @menu * Compilation:: Compiling for debugging * Starting:: Starting your program -@ifclear BARETARGET * Arguments:: Your program's arguments * Environment:: Your program's environment -@end ifclear * Working Directory:: Your program's working directory * Input/Output:: Your program's input and output * Attach:: Debugging an already-running process * Kill Process:: Killing the child process -@ifclear HPPA * Process Information:: Additional process information -@end ifclear * Threads:: Debugging programs with multiple threads * Processes:: Debugging programs with multiple processes @@ -1776,18 +1616,14 @@ format; if your @sc{gnu} C compiler has this option, do not use it. @kindex run @item run @itemx r -Use the @code{run} command to start your program under @value{GDBN}. You must -first specify the program name -@ifset VXWORKS -(except on VxWorks) -@end ifset -with an argument to @value{GDBN} (@pxref{Invocation, ,Getting In and -Out of @value{GDBN}}), or by using the @code{file} or @code{exec-file} -command (@pxref{Files, ,Commands to specify files}). +Use the @code{run} command to start your program under @value{GDBN}. +You must first specify the program name (except on VxWorks) with an +argument to @value{GDBN} (@pxref{Invocation, ,Getting In and Out of +@value{GDBN}}), or by using the @code{file} or @code{exec-file} command +(@pxref{Files, ,Commands to specify files}). @end table -@ifclear BARETARGET If you are running your program in an execution environment that supports processes, @code{run} creates an inferior process and makes that process run your program. (In environments without processes, @@ -1835,7 +1671,6 @@ pipes to pass the output of the program you are debugging to another program; if you attempt this, @value{GDBN} is likely to wind up debugging the wrong program. @end table -@end ifclear When you issue the @code{run} command, your program begins to execute immediately. @xref{Stopping, ,Stopping and continuing}, for discussion @@ -1848,7 +1683,6 @@ time @value{GDBN} read its symbols, @value{GDBN} discards its symbol table, and reads it again. When it does this, @value{GDBN} tries to retain your current breakpoints. -@ifclear BARETARGET @node Arguments, Environment, Starting, Running @section Your program's arguments @@ -2099,14 +1933,8 @@ control whether or not you need to confirm by using the @code{set confirm} command (@pxref{Messages/Warnings, ,Optional warnings and messages}). -@ifset HPPA -@node Kill Process, Threads, Attach, Running -@section Killing the child process -@end ifset -@ifclear HPPA @node Kill Process, Process Information, Attach, Running @section Killing the child process -@end ifclear @table @code @kindex kill @@ -2130,18 +1958,20 @@ next type @code{run}, @value{GDBN} notices that the file has changed, and reads the symbol table again (while trying to preserve your current breakpoint settings). -@ifclear HPPA @node Process Information, Threads, Kill Process, Running @section Additional process information @kindex /proc @cindex process image + Some operating systems provide a facility called @samp{/proc} that can be used to examine the image of a running process using file-system subroutines. If @value{GDBN} is configured for an operating system with this facility, the command @code{info proc} is available to report on several kinds of information about the process running your program. @code{info proc} works only on SVR4 systems that support @code{procfs}. +This includes OSF/1 (Digital Unix), Solaris, Irix, and Unixware, +but not HP-UX or Linux, for example. @table @code @kindex info proc @@ -2172,16 +2002,9 @@ received. @item info proc all Show all the above information about the process. @end table -@end ifclear -@ifset HPPA -@node Threads, Processes, Kill Process, Running -@section Debugging programs with multiple threads -@end ifset -@ifclear HPPA @node Threads, Processes, Process Information, Running @section Debugging programs with multiple threads -@end ifclear @cindex threads of execution @cindex multiple threads @@ -2405,7 +2228,6 @@ programs with multiple threads. @xref{Set Watchpoints,,Setting watchpoints}, for information about watchpoints in programs with multiple threads. -@end ifclear @ifclear HPPA @node Processes, , Threads, Running @@ -2499,40 +2321,26 @@ The principal purposes of using a debugger are so that you can stop your program before it terminates; or so that, if your program runs into trouble, you can investigate and find out why. -Inside @value{GDBN}, your program may stop for any of several reasons, such -as -@ifclear BARETARGET -a signal, -@end ifclear -a breakpoint, or reaching a new line after a @value{GDBN} -command such as @code{step}. You may then examine and change -variables, set new breakpoints or remove old ones, and then continue -execution. Usually, the messages shown by @value{GDBN} provide ample -explanation of the status of your program---but you can also explicitly -request this information at any time. +Inside @value{GDBN}, your program may stop for any of several reasons, +such as a signal, a breakpoint, or reaching a new line after a +@value{GDBN} command such as @code{step}. You may then examine and +change variables, set new breakpoints or remove old ones, and then +continue execution. Usually, the messages shown by @value{GDBN} provide +ample explanation of the status of your program---but you can also +explicitly request this information at any time. @table @code @kindex info program @item info program Display information about the status of your program: whether it is -running or not, -@ifclear BARETARGET -what process it is, -@end ifclear -and why it stopped. +running or not, what process it is, and why it stopped. @end table @menu * Breakpoints:: Breakpoints, watchpoints, and catchpoints * Continuing and Stepping:: Resuming execution -@ifset POSIX * Signals:: Signals -@end ifset - -@ifclear BARETARGET * Thread Stops:: Stopping and starting multi-thread programs -@end ifclear - @end menu @node Breakpoints, Continuing and Stepping, Stopping, Stopping @@ -2597,13 +2405,9 @@ enable it again. * Disabling:: Disabling breakpoints * Conditions:: Break conditions * Break Commands:: Breakpoint command lists -@ifclear CONLY * Breakpoint Menus:: Breakpoint menus -@end ifclear -@c @ifclear BARETARGET @c * Error in Breakpoints:: ``Cannot insert breakpoints'' -@c @end ifclear @end menu @node Set Breaks, Set Watchpoints, Breakpoints, Breakpoints @@ -2629,11 +2433,9 @@ You have several ways to say where the breakpoint should go. @table @code @item break @var{function} Set a breakpoint at entry to function @var{function}. -@ifclear CONLY When using source languages that permit overloading of symbols, such as C++, @var{function} may refer to more than one possible place to break. @xref{Breakpoint Menus,,Breakpoint menus}, for a discussion of that situation. -@end ifclear @item break +@var{offset} @itemx break -@var{offset} @@ -2733,11 +2535,9 @@ just like the breakpoints set with the @code{break} command. You can delete them, disable them, or make them conditional the same way as any other breakpoint. -@ifclear CONLY When debugging C++ programs, @code{rbreak} is useful for setting breakpoints on overloaded functions that are not members of any special classes. -@end ifclear @kindex info breakpoints @cindex @code{$_} and @code{info breakpoints} @@ -2912,7 +2712,6 @@ If you call a function interactively using @code{print} or @code{call}, any watchpoints you have set will be inactive until GDB reaches another kind of breakpoint or the call completes. -@ifclear BARETARGET @quotation @cindex watchpoints and threads @cindex threads and watchpoints @@ -2938,7 +2737,6 @@ activity changes the expression. (Hardware watchpoints, in contrast, watch an expression in all threads.) @end ifset @end quotation -@end ifclear @node Set Catchpoints, Delete Breaks, Set Watchpoints, Breakpoints @subsection Setting catchpoints @@ -3362,7 +3160,6 @@ cont end @end example -@ifclear CONLY @node Breakpoint Menus, , Break Commands, Breakpoints @subsection Breakpoint menus @cindex overloading @@ -3408,7 +3205,6 @@ Use the "delete" command to delete unwanted (@value{GDBP}) @end group @end smallexample -@end ifclear @c @ifclear BARETARGET @c @node Error in Breakpoints @@ -3450,16 +3246,10 @@ Use the "delete" command to delete unwanted completes normally. In contrast, @dfn{stepping} means executing just one more ``step'' of your program, where ``step'' may mean either one line of source code, or one machine instruction (depending on what -particular command you use). Either when continuing -or when stepping, your program may stop even sooner, due to -@ifset BARETARGET -a breakpoint. -@end ifset -@ifclear BARETARGET -a breakpoint or a signal. (If due to a signal, you may want to use -@code{handle}, or use @samp{signal 0} to resume execution. -@xref{Signals, ,Signals}.) -@end ifclear +particular command you use). Either when continuing or when stepping, +your program may stop even sooner, due to a breakpoint or a signal. (If +due to a signal, you may want to use @code{handle}, or use @samp{signal +0} to resume execution. @xref{Signals, ,Signals}.) @table @code @kindex continue @@ -3529,21 +3319,18 @@ was any debugging information about the routine. @item step @var{count} Continue running as in @code{step}, but do so @var{count} times. If a -breakpoint is reached, -@ifclear BARETARGET -or a signal not related to stepping occurs before @var{count} steps, -@end ifclear -stepping stops right away. +breakpoint is reached, or a signal not related to stepping occurs before +@var{count} steps, stepping stops right away. @kindex next @kindex n @item next @r{[}@var{count}@r{]} Continue to the next source line in the current (innermost) stack frame. -This is similar to @code{step}, but function calls that appear within the line -of code are executed without stopping. Execution stops when control -reaches a different line of code at the original stack level that was -executing when you gave the @code{next} command. This command is abbreviated -@code{n}. +This is similar to @code{step}, but function calls that appear within +the line of code are executed without stopping. Execution stops when +control reaches a different line of code at the original stack level +that was executing when you gave the @code{next} command. This command +is abbreviated @code{n}. An argument @var{count} is a repeat count, as for @code{step}. @@ -3645,7 +3432,6 @@ proceed until the function returns. An argument is a repeat count, as in @code{next}. @end table -@ifset POSIX @node Signals, Thread Stops, Continuing and Stepping, Stopping @section Signals @cindex signals @@ -3739,9 +3525,7 @@ execution; but your program would probably terminate immediately as a result of the fatal signal once it saw the signal. To prevent this, you can continue with @samp{signal 0}. @xref{Signaling, ,Giving your program a signal}. -@end ifset -@ifclear BARETARGET @node Thread Stops, , Signals, Stopping @section Stopping and starting multi-thread programs @@ -3826,8 +3610,6 @@ GDB prompt away from the thread that you are debugging. Display the current scheduler locking mode. @end table -@end ifclear - @node Stack, Source, Stopping, Top @chapter Examining the Stack @@ -4024,7 +3806,6 @@ impossible for @value{GDBN} to assign numbers properly to all frames. In addition, this can be useful when your program has multiple stacks and switches between them. -@ifclear H8EXCLUSIVE @ifclear HPPA On the SPARC architecture, @code{frame} needs two addresses to select an arbitrary frame: a frame pointer and a stack pointer. @@ -4038,7 +3819,6 @@ pointer, a program counter, and a memory stack pointer. @c SETUP_ARBITRARY_FRAME in the tm-*.h files. The above is up to date @c as of 27 Jan 1994. @end ifclear -@end ifclear @kindex up @item up @var{n} @@ -4149,7 +3929,6 @@ Print the local variables of the selected frame, each on a separate line. These are all variables (declared either static or automatic) accessible at the point of execution of the selected frame. -@ifclear CONLY @ifclear HPPA @kindex info catch @cindex catch exceptions @@ -4161,7 +3940,6 @@ exception handlers, visit the associated frame (using the @code{up}, @code{down}, or @code{frame} commands); then type @code{info catch}. @xref{Set Catchpoints, , Setting catchpoints}. @end ifclear -@end ifclear @end table @node Alpha/MIPS Stack, , Frame Info, Stack @@ -4210,18 +3988,13 @@ the line where it stopped. Likewise, when you select a stack frame execution in that frame has stopped. You can print other portions of source files by explicit command. -@ifclear DOSHOST -If you use @value{GDBN} through its @sc{gnu} Emacs interface, you may prefer -to use -Emacs facilities to view source; @pxref{Emacs, ,Using @value{GDBN} under @sc{gnu} Emacs}. -@end ifclear +If you use @value{GDBN} through its @sc{gnu} Emacs interface, you may +prefer to use Emacs facilities to view source; @pxref{Emacs, ,Using +@value{GDBN} under @sc{gnu} Emacs}. @menu * List:: Printing source lines -@ifclear DOSHOST * Search:: Searching source files -@end ifclear - * Source Path:: Specifying source directories * Machine Code:: Source and machine code @end menu @@ -4343,7 +4116,6 @@ Specifies the line containing the program address @var{address}. @var{address} may be any expression. @end table -@ifclear DOSHOST @node Search, Source Path, List, Source @section Searching source files @cindex searching @@ -4369,7 +4141,6 @@ with the one before the last line listed and going backward, for a match for @var{regexp}. It lists the line that is found. You can abbreviate this command as @code{rev}. @end table -@end ifclear @node Source Path, Machine Code, Search, Source @section Specifying source directories @@ -4510,7 +4281,6 @@ surrounding this value. Two arguments specify a range of addresses (first inclusive, second exclusive) to dump. @end table -@ifclear H8EXCLUSIVE The following example shows the disassembly of a range of addresses of HP PA-RISC 2.0 code: @@ -4527,28 +4297,6 @@ Dump of assembler code from 0x32c4 to 0x32e4: 0x32e0 <main+232>: ldil 0x3000,r31 End of assembler dump. @end smallexample -@end ifclear - -@ifset H8EXCLUSIVE -For example, here is the beginning of the output for the -disassembly of a function @code{fact}: - - -@smallexample -(@value{GDBP}) disas fact -Dump of assembler code for function fact: -to 0x808c: -0x802c <fact>: 6d f2 mov.w r2,@@-r7 -0x802e <fact+2>: 6d f3 mov.w r3,@@-r7 -0x8030 <fact+4>: 6d f6 mov.w r6,@@-r7 -0x8032 <fact+6>: 0d 76 mov.w r7,r6 -0x8034 <fact+8>: 6f 70 00 08 mov.w @@(0x8,r7),r0 -0x8038 <fact+12> 19 11 sub.w r1,r1 - . - . - . -@end smallexample -@end ifset Some architectures have more than one commonly-used set of instruction mnemonics or other syntax. @@ -4580,12 +4328,10 @@ The default is @code{i386}. @c document because it is nonstandard... Under Epoch it displays in a @c different window or something like that. The usual way to examine data in your program is with the @code{print} -command (abbreviated @code{p}), or its synonym @code{inspect}. -@ifclear CONLY -It evaluates and prints the value of an expression of the language your -program is written in (@pxref{Languages, ,Using @value{GDBN} with Different -Languages}). -@end ifclear +command (abbreviated @code{p}), or its synonym @code{inspect}. It +evaluates and prints the value of an expression of the language your +program is written in (@pxref{Languages, ,Using @value{GDBN} with +Different Languages}). @table @code @item print @var{exp} @@ -4607,13 +4353,10 @@ A more low-level way of examining data is with the @code{x} command. It examines data in memory at a specified address and prints it in a specified format. @xref{Memory, ,Examining memory}. -If you are interested in information about types, or about how the fields -of a struct -@ifclear CONLY -or class -@end ifclear -are declared, use the @code{ptype @var{exp}} -command rather than @code{print}. @xref{Symbols, ,Examining the Symbol Table}. +If you are interested in information about types, or about how the +fields of a struct or class are declared, use the @code{ptype @var{exp}} +command rather than @code{print}. @xref{Symbols, ,Examining the Symbol +Table}. @menu * Expressions:: Expressions @@ -4626,10 +4369,7 @@ command rather than @code{print}. @xref{Symbols, ,Examining the Symbol Table}. * Value History:: Value history * Convenience Vars:: Convenience variables * Registers:: Registers -@ifclear HAVE-FLOAT * Floating Point Hardware:: Floating point hardware -@end ifclear - @end menu @node Expressions, Variables, Data, Data @@ -4648,7 +4388,6 @@ the user. The syntax is @var{@{element, element@dots{}@}}. For example, you can now use the command @code{print @{1, 2, 3@}} to build up an array in memory that is malloc'd in the target program. -@ifclear CONLY Because C is so widespread, most of the expressions shown in examples in this manual are in C. @xref{Languages, , Using @value{GDBN} with Different Languages}, for information on how to use expressions in other @@ -4661,7 +4400,6 @@ Casts are supported in all languages, not just in C, because it is so useful to cast a number into a pointer in order to examine a structure at that address in memory. @c FIXME: casts supported---Mod2 true? -@end ifclear @value{GDBN} supports these operators, in addition to those common to programming languages: @@ -4758,14 +4496,12 @@ to print a global value of @code{x} defined in @file{f2.c}: (@value{GDBP}) p 'f2.c'::x @end example -@ifclear CONLY @cindex C++ scope resolution This use of @samp{::} is very rarely in conflict with the very similar use of the same notation in C++. @value{GDBN} also supports use of the C++ scope resolution operator in @value{GDBN} expressions. @c FIXME: Um, so what happens in one of those rare cases where it's in @c conflict?? --mew -@end ifclear @cindex wrong values @cindex variable values, wrong @@ -5382,7 +5118,6 @@ $1 = @{it = Tree, form = @{...@}@} @end smallexample @end table -@ifclear CONLY @need 1000 @noindent These settings are of interest when debugging C++ programs: @@ -5492,7 +5227,6 @@ Do not pretty print C++ virtual function tables. @item show print vtbl Show whether C++ virtual function tables are pretty printed, or not. @end table -@end ifclear @node Value History, Convenience Vars, Print Settings, Data @section Value history @@ -5756,7 +5490,6 @@ code generated by your compiler. If some registers are not saved, or if @value{GDBN} is unable to locate the saved registers, the selected stack frame makes no difference. -@ifset AMD29K @table @code @kindex set rstack_high_address @cindex AMD 29K register stack @@ -5777,9 +5510,7 @@ hexadecimal. Display the current limit of the register stack, on AMD 29000 family processors. @end table -@end ifset -@ifclear HAVE-FLOAT @node Floating Point Hardware, , Registers, Data @section Floating point hardware @cindex floating point @@ -5795,21 +5526,17 @@ point unit. The exact contents and layout vary depending on the floating point chip. Currently, @samp{info float} is supported on the ARM and x86 machines. @end table -@end ifclear -@ifclear CONLY @node Languages, Symbols, Data, Top @chapter Using @value{GDBN} with Different Languages @cindex languages -@ifset MOD2 Although programming languages generally have common aspects, they are rarely expressed in the same manner. For instance, in ANSI C, dereferencing a pointer @code{p} is accomplished by @code{*p}, but in Modula-2, it is accomplished by @code{p^}. Values can also be represented (and displayed) differently. Hex numbers in C appear as @samp{0x1ae}, while in Modula-2 they appear as @samp{1AEH}. -@end ifset @cindex working language Language-specific information is built into @value{GDBN} for some languages, @@ -5822,10 +5549,7 @@ language}. @menu * Setting:: Switching between source languages * Show:: Displaying the language -@ifset MOD2 * Checks:: Type and range checks -@end ifset - * Support:: Supported languages @end menu @@ -5891,10 +5615,8 @@ Fortran source file CHILL source file. @end ifclear -@ifset MOD2 @item .mod Modula-2 source file -@end ifset @item .s @itemx .S @@ -5916,22 +5638,9 @@ your program. If you wish, you may set the language manually. To do this, issue the command @samp{set language @var{lang}}, where @var{lang} is the name of a language, such as -@ifclear MOD2 -@code{c}. -@end ifclear -@ifset MOD2 @code{c} or @code{modula-2}. -@end ifset For a list of the supported languages, type @samp{set language}. -@ifclear MOD2 -Setting the language manually prevents @value{GDBN} from updating the -working language automatically. For example, if you used the @code{c} -setting to debug a C++ program, names might not be demangled properly, -overload resolution would not work, user-defined operators might not be -interpreted correctly, and so on. -@end ifclear -@ifset MOD2 Setting the language manually prevents @value{GDBN} from updating the working language automatically. This can lead to confusion if you try to debug a program when the working language is not the same as the @@ -5949,7 +5658,6 @@ might not have the effect you intended. In C, this means to add @code{b} and @code{c} and place the result in @code{a}. The result printed would be the value of @code{a}. In Modula-2, this means to compare @code{a} to the result of @code{b+c}, yielding a @code{BOOLEAN} value. -@end ifset @node Automatically, , Manually, Setting @subsection Having @value{GDBN} infer the source language @@ -5970,14 +5678,8 @@ written in one source language can be used by a main program written in a different source language. Using @samp{set language auto} in this case frees you from having to set the working language manually. -@ifset MOD2 @node Show, Checks, Setting, Languages @section Displaying the language -@end ifset -@ifclear MOD2 -@node Show, Support, Setting, Languages -@section Displaying the language -@end ifclear The following commands help you find out which language is the working language, and also what language source files were written in. @@ -6018,7 +5720,6 @@ the source language @var{language}. List all the filename extensions and the associated languages. @end table -@ifset MOD2 @node Checks, Support, Show, Languages @section Type and range checking @@ -6181,23 +5882,11 @@ systems). Show the current setting of the range checker, and whether or not it is being set automatically by @value{GDBN}. @end table -@end ifset -@ifset MOD2 @node Support, , Checks, Languages @section Supported languages -@end ifset -@ifclear MOD2 -@node Support, , Show, Languages -@section Supported languages -@end ifclear -@ifset MOD2 @value{GDBN} supports C, C++, Fortran, Chill, assembly, and Modula-2. -@end ifset -@ifclear MOD2 -@value{GDBN} supports C, C++, Fortran, Chill, and assembly. -@end ifclear Some @value{GDBN} features may be used in expressions regardless of the language you use: the @value{GDBN} @code{@@} and @code{::} operators, and the @samp{@{type@}addr} construct (@pxref{Expressions, @@ -6212,27 +5901,21 @@ formats should look like for different languages. There are many good books written on each of these languages; please look to these for a language reference or tutorial. -@ifset MOD2 @menu -* C:: C and C++ +* C:: C and C++ * Modula-2:: Modula-2 @end menu @node C, Modula-2, , Support @subsection C and C++ + @cindex C and C++ @cindex expressions in C or C++ -@end ifset Since C and C++ are so closely related, many features of @value{GDBN} apply to both languages. Whenever this is the case, we discuss those languages together. -@ifclear MOD2 -@c Cancel this below, under same condition, at end of this chapter! -@raisesections -@end ifclear - @ifclear HPPA @cindex C++ @kindex g++ @@ -6265,56 +5948,27 @@ explicitly with the @code{g++} command-line options @samp{-gstabs} or Program or @sc{gnu} CC, gcc.info, Using @sc{gnu} CC}, for more information. @end ifset -@end ifclear - -@ifset CONLY -@node C, Symbols, Data, Top -@chapter C Language Support -@cindex C language -@cindex expressions in C -Information specific to the C language is built into @value{GDBN} so that you -can use C expressions while debugging. This also permits @value{GDBN} to -output values in a manner consistent with C conventions. - -@menu -* C Operators:: C operators -@end menu -@end ifset - -@ifclear CONLY @menu * C Operators:: C and C++ operators * C Constants:: C and C++ constants -* Cplus expressions:: C++ expressions +* C plus plus expressions:: C++ expressions * C Defaults:: Default settings for C and C++ -@ifset MOD2 * C Checks:: C and C++ type and range checks -@end ifset - * Debugging C:: @value{GDBN} and C * Debugging C plus plus:: @value{GDBN} features for C++ @end menu -@end ifclear -@ifclear CONLY -@cindex C and C++ operators @node C Operators, C Constants, , C @subsubsection C and C++ operators -@end ifclear -@ifset CONLY -@cindex C operators -@node C Operators, C Constants, C, C -@section C operators -@end ifset + +@cindex C and C++ operators Operators must be defined on values of specific types. For instance, @code{+} is defined on numbers, but not on structures. Operators are often defined on groups of types. -@ifclear CONLY For the purposes of C and C++, the following definitions hold: -@end ifclear @itemize @bullet @item @@ -6416,13 +6070,11 @@ Pointer dereferencing. Defined on pointer types. Same precedence as @item & Address operator. Defined on variables. Same precedence as @code{++}. -@ifclear CONLY For debugging C++, @value{GDBN} implements a use of @samp{&} beyond what is allowed in the C++ language itself: you can use @samp{&(&@var{ref})} (or, if you prefer, simply @samp{&&@var{ref}}) to examine the address where a C++ reference variable (declared with @samp{&@var{ref}}) is stored. -@end ifclear @item - Negative. Defined on integral and floating-point types. Same @@ -6455,22 +6107,14 @@ Array indexing. @code{@var{a}[@var{i}]} is defined as @item () Function parameter list. Same precedence as @code{->}. -@ifclear CONLY @item :: -C++ scope resolution operator. Defined on -@code{struct}, @code{union}, and @code{class} types. -@end ifclear +C++ scope resolution operator. Defined on @code{struct}, @code{union}, +and @code{class} types. @item :: -Doubled colons -@ifclear CONLY -also -@end ifclear -represent the @value{GDBN} scope operator (@pxref{Expressions, -,Expressions}). -@ifclear CONLY -Same precedence as @code{::}, above. -@end ifclear +Doubled colons also represent the @value{GDBN} scope operator +(@pxref{Expressions, ,Expressions}). Same precedence as @code{::}, +above. @end table @ifset HPPA @@ -6479,32 +6123,17 @@ attempts to invoke the redefined version instead of using the operator's predefined meaning. @end ifset -@ifclear CONLY @menu * C Constants:: @end menu -@ifset MOD2 -@node C Constants, Cplus expressions, C Operators, C +@node C Constants, C plus plus expressions, C Operators, C @subsubsection C and C++ constants -@end ifset -@ifclear MOD2 -@node C Constants, Cplus expressions, C Operators, Support -@subsubsection C and C++ constants -@end ifclear @cindex C and C++ constants -@value{GDBN} allows you to express the constants of C and C++ in the -following ways: -@end ifclear -@ifset CONLY -@cindex C constants -@node C Constants, Debugging C, C Operators, C -@section C constants -@value{GDBN} allows you to express the constants of C in the +@value{GDBN} allows you to express the constants of C and C++ in the following ways: -@end ifset @itemize @bullet @item @@ -6550,25 +6179,16 @@ integers, @samp{@{@{1,2@}, @{3,4@}, @{5,6@}@}} is a three-by-two array, and @samp{@{&"hi", &"there", &"fred"@}} is a three-element array of pointers. @end itemize -@ifclear CONLY @menu -* Cplus expressions:: +* C plus plus expressions:: * C Defaults:: -@ifset MOD2 * C Checks:: -@end ifset * Debugging C:: @end menu -@ifset MOD2 -@node Cplus expressions, C Defaults, C Constants, C -@subsubsection C++ expressions -@end ifset -@ifclear MOD2 -@node Cplus expressions, C Defaults, C Constants, Support +@node C plus plus expressions, C Defaults, C Constants, C @subsubsection C++ expressions -@end ifclear @cindex expressions in C++ @value{GDBN} expression handling can interpret most C++ expressions. @@ -6687,14 +6307,9 @@ printing out virtual bases of objects, calling functions in a base subobject, casting objects, and invoking user-defined operators. @end ifset -@ifset MOD2 -@node C Defaults, C Checks, Cplus expressions, C +@node C Defaults, C Checks, C plus plus expressions, C @subsubsection C and C++ defaults -@end ifset -@ifclear MOD2 -@node C Defaults, Debugging C, Cplus expressions, Support -@subsubsection C and C++ defaults -@end ifclear + @cindex C and C++ defaults @ifclear HPPA @@ -6711,12 +6326,13 @@ these files, it sets the working language to C or C++. @xref{Automatically, ,Having @value{GDBN} infer the source language}, for further details. -@ifset MOD2 @c Type checking is (a) primarily motivated by Modula-2, and (b) @c unimplemented. If (b) changes, it might make sense to let this node @c appear even if Mod-2 does not, but meanwhile ignore it. roland 16jul93. + @node C Checks, Debugging C, C Defaults, C Constants @subsubsection C and C++ type and range checks + @cindex C and C++ checks By default, when @value{GDBN} parses C or C++ expressions, type checking @@ -6745,52 +6361,28 @@ compilers.) Range checking, if turned on, is done on mathematical operations. Array indices are not checked, since they are often used to index a pointer that is not itself an array. -@end ifset -@end ifclear -@ifclear CONLY -@ifset MOD2 @node Debugging C, Debugging C plus plus, C Checks, C @subsubsection @value{GDBN} and C -@end ifset -@ifclear MOD2 -@node Debugging C, Debugging C plus plus, C Defaults, Support -@subsubsection @value{GDBN} and C -@end ifclear -@end ifclear -@ifset CONLY -@node Debugging C, , C Constants, C -@section @value{GDBN} and C -@end ifset The @code{set print union} and @code{show print union} commands apply to the @code{union} type. When set to @samp{on}, any @code{union} that is -inside a @code{struct} -@ifclear CONLY -or @code{class} -@end ifclear -is also printed. -Otherwise, it appears as @samp{@{...@}}. +inside a @code{struct} or @code{class} is also printed. Otherwise, it +appears as @samp{@{...@}}. The @code{@@} operator aids in the debugging of dynamic arrays, formed with pointers and a memory allocation function. @xref{Expressions, ,Expressions}. -@ifclear CONLY @menu * Debugging C plus plus:: @end menu -@ifset MOD2 @node Debugging C plus plus, , Debugging C, C @subsubsection @value{GDBN} features for C++ -@end ifset -@ifclear MOD2 -@node Debugging C plus plus, , Debugging C, Support -@subsubsection @value{GDBN} features for C++ -@end ifclear @cindex commands for C++ + Some @value{GDBN} commands are particularly useful with C++, and some are designed specifically for use with C++. Here is a summary: @@ -6848,7 +6440,7 @@ ANSI C++ compiler (@code{aCC}).) Enable overload resolution for C++ expression evaluation. The default is on. For overloaded functions, @value{GDBN} evaluates the arguments and searches for a function whose signature matches the argument types, -using the standard C++ conversion rules (@pxref{Cplus expressions, ,C++ +using the standard C++ conversion rules (@pxref{C plus plus expressions, ,C++ expressions} for details). If it cannot find a match, it emits a message. @@ -6870,14 +6462,10 @@ also use the @value{GDBN} command-line word completion facilities to list the available choices, or to finish the type list for you. @xref{Completion,, Command completion}, for details on how to do this. @end table -@ifclear MOD2 -@c cancels "raisesections" under same conditions near bgn of chapter -@lowersections -@end ifclear -@ifset MOD2 -@node Modula-2, ,C , Support +@node Modula-2, , C, Support @subsection Modula-2 + @cindex Modula-2 The extensions made to @value{GDBN} to support Modula-2 only support @@ -7316,8 +6904,6 @@ address can be specified by an integral constant, the construct @cindex @code{#} in Modula-2 In @value{GDBN} scripts, the Modula-2 inequality operator @code{#} is interpreted as the beginning of a comment. Use @code{<>} instead. -@end ifset -@end ifclear @node Symbols, Altering, Languages, Top @chapter Examining the Symbol Table @@ -7374,12 +6960,9 @@ Print the data type of @code{$}, the last value in the value history. @kindex ptype @item ptype @var{typename} Print a description of data type @var{typename}. @var{typename} may be -the name of a type, or for C code it may have the form -@ifclear CONLY -@samp{class @var{class-name}}, -@end ifclear -@samp{struct @var{struct-tag}}, @samp{union @var{union-tag}} or -@samp{enum @var{enum-tag}}. +the name of a type, or for C code it may have the form @samp{class +@var{class-name}}, @samp{struct @var{struct-tag}}, @samp{union +@var{union-tag}} or @samp{enum @var{enum-tag}}. @item ptype @var{exp} @itemx ptype @@ -7476,13 +7059,10 @@ which match the regular-expression @var{regexp}. @ifclear HPPA @cindex reloading symbols Some systems allow individual object files that make up your program to -be replaced without stopping and restarting your program. -@ifset VXWORKS -For example, in VxWorks you can simply recompile a defective object file -and keep on running. -@end ifset -If you are running on one of these systems, you can allow @value{GDBN} to -reload the symbols for automatically relinked modules: +be replaced without stopping and restarting your program. For example, +in VxWorks you can simply recompile a defective object file and keep on +running. If you are running on one of these systems, you can allow +@value{GDBN} to reload the symbols for automatically relinked modules: @table @code @kindex set symbol-reloading @@ -7561,22 +7141,13 @@ experiment, using the @value{GDBN} features for altering execution of the program. For example, you can store new values into variables or memory -locations, -@ifclear BARETARGET -give your program a signal, restart it -@end ifclear -@ifset BARETARGET -restart your program -@end ifset -at a different address, or even return prematurely from a function. +locations, give your program a signal, restart it at a different +address, or even return prematurely from a function. @menu * Assignment:: Assignment to variables * Jumping:: Continuing at a different address -@ifclear BARETARGET * Signaling:: Giving your program a signal -@end ifclear - * Returning:: Returning from a function * Calling:: Calling your program's functions * Patching:: Patching your program @@ -7597,10 +7168,8 @@ print x=4 @noindent stores the value 4 into the variable @code{x}, and then prints the value of the assignment expression (which is 4). -@ifclear CONLY @xref{Languages, ,Using @value{GDBN} with Different Languages}, for more information on operators in supported languages. -@end ifclear @kindex set variable @cindex variables, setting @@ -7746,7 +7315,6 @@ up---perhaps with more breakpoints set---over a portion of a program that has already executed, in order to examine its execution in more detail. -@ifclear BARETARGET @c @group @node Signaling, Returning, Jumping, Altering @section Giving your program a signal @@ -7776,7 +7344,6 @@ causes @value{GDBN} to decide what to do with the signal depending on the signal handling tables (@pxref{Signals}). The @code{signal} command passes the signal directly to your program. -@end ifclear @node Returning, Calling, Signaling, Altering @section Returning from a function @@ -7835,20 +7402,15 @@ that have separate instruction and data spaces. @node Patching, , Calling, Altering @section Patching programs + @cindex patching binaries @cindex writing into executables -@ifclear BARETARGET @cindex writing into corefiles -@end ifclear -By default, @value{GDBN} opens the file containing your program's executable -code -@ifclear BARETARGET -(or the corefile) -@end ifclear -read-only. This prevents accidental alterations -to machine code; but it also prevents you from intentionally patching -your program's binary. +By default, @value{GDBN} opens the file containing your program's +executable code (or the corefile) read-only. This prevents accidental +alterations to machine code; but it also prevents you from intentionally +patching your program's binary. If you'd like to be able to patch the binary, you can specify that explicitly with the @code{set write} command. For example, you might @@ -7859,39 +7421,27 @@ repairs. @kindex set write @item set write on @itemx set write off -If you specify @samp{set write on}, @value{GDBN} opens executable -@ifclear BARETARGET -and core -@end ifclear -files for both reading and writing; if you specify @samp{set write +If you specify @samp{set write on}, @value{GDBN} opens executable and +core files for both reading and writing; if you specify @samp{set write off} (the default), @value{GDBN} opens them read-only. If you have already loaded a file, you must load it again (using the -@code{exec-file} -@ifclear BARETARGET -or @code{core-file} -@end ifclear -command) after changing @code{set write}, for your new setting to take -effect. +@code{exec-file} or @code{core-file} command) after changing @code{set +write}, for your new setting to take effect. @item show write @kindex show write -Display whether executable files -@ifclear BARETARGET -and core files -@end ifclear -are opened for writing as well as reading. +Display whether executable files and core files are opened for writing +as well as reading. @end table @node GDB Files, Targets, Altering, Top @chapter @value{GDBN} Files -@value{GDBN} needs to know the file name of the program to be debugged, both in -order to read its symbol table and in order to start your program. -@ifclear BARETARGET -To debug a core dump of a previous run, you must also tell @value{GDBN} -the name of the core dump file. -@end ifclear +@value{GDBN} needs to know the file name of the program to be debugged, +both in order to read its symbol table and in order to start your +program. To debug a core dump of a previous run, you must also tell +@value{GDBN} the name of the core dump file. @menu * Files:: Commands to specify files @@ -7900,20 +7450,14 @@ the name of the core dump file. @node Files, Symbol Errors, GDB Files, GDB Files @section Commands to specify files -@cindex symbol table -@ifclear BARETARGET +@cindex symbol table @cindex core dump file -You may want to specify executable and core dump file names. -The usual way to do this is at start-up time, using the arguments to -@value{GDBN}'s start-up commands (@pxref{Invocation, , -Getting In and Out of @value{GDBN}}). -@end ifclear -@ifset BARETARGET -The usual way to specify an executable file name is with -the command argument given when you start @value{GDBN}, (@pxref{Invocation, -,Getting In and Out of @value{GDBN}}. -@end ifset + +You may want to specify executable and core dump file names. The usual +way to do this is at start-up time, using the arguments to +@value{GDBN}'s start-up commands (@pxref{Invocation, , Getting In and +Out of @value{GDBN}}). Occasionally it is necessary to change to a different file during a @value{GDBN} session. Or you may run @value{GDBN} and forget to specify @@ -8017,7 +7561,6 @@ load symbol table information, if you want to be sure @value{GDBN} has the entire symbol table available. @end ifclear -@ifclear BARETARGET @ifclear HPPA If memory-mapped files are available on your system through the @code{mmap} system call, you can use another option, @samp{-mapped}, to @@ -8040,7 +7583,6 @@ needed. The @file{.syms} file is specific to the host machine where you run @value{GDBN}. It holds an exact image of the internal @value{GDBN} symbol table. It cannot be shared across multiple host platforms. -@end ifclear @c FIXME: for now no mention of directories, since this seems to be in @c flux. 13mar1992 status is that in theory GDB would look either in @@ -8062,13 +7604,12 @@ executable file itself for other parts. to be used. Note that the core file is ignored when your program is actually running -under @value{GDBN}. So, if you have been running your program and you wish to -debug a core file instead, you must kill the subprocess in which the -program is running. To do this, use the @code{kill} command +under @value{GDBN}. So, if you have been running your program and you +wish to debug a core file instead, you must kill the subprocess in which +the program is running. To do this, use the @code{kill} command (@pxref{Kill Process, ,Killing the child process}). @end ifclear -@ifclear BARETARGET @ifclear HPPA @kindex add-symbol-file @cindex dynamic linking @@ -8100,7 +7641,6 @@ operating system for the Motorola 88k. @value{GDBN} automatically looks for shared libraries, however if @value{GDBN} does not find yours, you can run @code{add-shared-symbol-file}. It takes no arguments. @end ifclear -@end ifclear @ifclear HPPA @kindex section @@ -8117,25 +7657,19 @@ addresses. @kindex info target @item info files @itemx info target -@code{info files} and @code{info target} are synonymous; both print -the current target (@pxref{Targets, ,Specifying a Debugging Target}), -including the -@ifclear BARETARGET -names of the executable and core dump files -@end ifclear -@ifset BARETARGET -name of the executable file -@end ifset -currently in use by @value{GDBN}, and the files from which symbols were -loaded. The command @code{help target} lists all possible targets -rather than current ones. +@code{info files} and @code{info target} are synonymous; both print the +current target (@pxref{Targets, ,Specifying a Debugging Target}), +including the names of the executable and core dump files currently in +use by @value{GDBN}, and the files from which symbols were loaded. The +command @code{help target} lists all possible targets rather than +current ones. + @end table All file-specifying commands allow both absolute and relative file names as arguments. @value{GDBN} always converts the file name to an absolute file name and remembers it that way. -@ifclear BARETARGET @cindex shared libraries @ifclear HPPA @c added HP-UX -- Kim (HP writer) @@ -8207,8 +7741,6 @@ Display the current autoloading size threshold, in megabytes. @end table @end ifset -@end ifclear - @node Symbol Errors, , Files, GDB Files @section Errors reading symbol files @@ -8272,47 +7804,40 @@ with this name. @item unknown symbol type @code{0x@var{nn}} -The symbol information contains new data types that @value{GDBN} does not yet -know how to read. @code{0x@var{nn}} is the symbol type of the misunderstood -information, in hexadecimal. +The symbol information contains new data types that @value{GDBN} does +not yet know how to read. @code{0x@var{nn}} is the symbol type of the +misunderstood information, in hexadecimal. -@value{GDBN} circumvents the error by ignoring this symbol information. This -usually allows you to debug your program, though certain symbols +@value{GDBN} circumvents the error by ignoring this symbol information. +This usually allows you to debug your program, though certain symbols are not accessible. If you encounter such a problem and feel like -debugging it, you can debug @code{@value{GDBP}} with itself, breakpoint on -@code{complain}, then go up to the function @code{read_dbx_symtab} and -examine @code{*bufp} to see the symbol. +debugging it, you can debug @code{@value{GDBP}} with itself, breakpoint +on @code{complain}, then go up to the function @code{read_dbx_symtab} +and examine @code{*bufp} to see the symbol. @item stub type has NULL name -@value{GDBN} could not find the full definition for -@ifclear CONLY -a struct or class. -@end ifclear -@ifset CONLY -a struct. -@end ifset -@ifclear CONLY -@item const/volatile indicator missing (ok if using g++ v1.x), got@dots{} +@value{GDBN} could not find the full definition for a struct or class. +@item const/volatile indicator missing (ok if using g++ v1.x), got@dots{} The symbol information for a C++ member function is missing some -information that recent versions of the compiler should have output -for it. -@end ifclear +information that recent versions of the compiler should have output for +it. @item info mismatch between compiler and debugger @value{GDBN} could not parse a type specification output by the compiler. + @end table @node Targets, Controlling GDB, GDB Files, Top @chapter Specifying a Debugging Target + @cindex debugging target @kindex target A @dfn{target} is the execution environment occupied by your program. @ifclear HPPA -@ifclear BARETARGET Often, @value{GDBN} runs in the same host environment as your program; in that case, the debugging target is specified as a side effect when you use the @code{file} or @code{core} commands. When you need more @@ -8320,7 +7845,6 @@ flexibility---for example, running @value{GDBN} on a physically separate host, or controlling a standalone system over a serial port or a realtime system over a TCP/IP connection---you @end ifclear -@end ifclear @ifset HPPA On HP-UX systems, @value{GDBN} has been configured to support debugging of processes running on the PA-RISC architecture. This means that the @@ -8342,36 +7866,31 @@ execution @value{GDBN} on HP-UX has not been configured to support remote debugging, or to support programs running on other platforms. You -@end ifset -@ifset BARETARGET -You -@end ifset can use the @code{target} command to specify one of the target types configured for @value{GDBN} (@pxref{Target Commands, ,Commands for managing targets}). +@end ifset @menu * Active Targets:: Active targets * Target Commands:: Commands for managing targets -@ifset REMOTESTUB * Byte Order:: Choosing target byte order * Remote:: Remote debugging -@end ifset @end menu @node Active Targets, Target Commands, Targets, Targets @section Active targets + @cindex stacking targets @cindex active targets @cindex multiple targets -@ifclear BARETARGET There are three classes of targets: processes, core files, and -executable files. @value{GDBN} can work concurrently on up to three active -targets, one in each class. This allows you to (for example) start a -process and inspect its activity without abandoning your work on a core -file. +executable files. @value{GDBN} can work concurrently on up to three +active targets, one in each class. This allows you to (for example) +start a process and inspect its activity without abandoning your work on +a core file. For example, if you execute @samp{gdb a.out}, then the executable file @code{a.out} is the only active target. If you designate a core file as @@ -8382,48 +7901,32 @@ requests for memory addresses. (Typically, these two classes of target are complementary, since core files contain only a program's read-write memory---variables and so on---plus machine status, while executable files contain only the program text and initialized data.) -@end ifclear When you type @code{run}, your executable file becomes an active process -target as well. When a process target is active, all @value{GDBN} commands -requesting memory addresses refer to that target; addresses in an -@ifclear BARETARGET -active core file or -@end ifclear -executable file target are obscured while the process -target is active. +target as well. When a process target is active, all @value{GDBN} +commands requesting memory addresses refer to that target; addresses in +an active core file or executable file target are obscured while the +process target is active. -@ifset BARETARGET -Use the @code{exec-file} command to select a -new executable target (@pxref{Files, ,Commands to specify -files}). -@end ifset -@ifclear BARETARGET -Use the @code{core-file} and @code{exec-file} commands to select a -new core file or executable target (@pxref{Files, ,Commands to specify +Use the @code{core-file} and @code{exec-file} commands to select a new +core file or executable target (@pxref{Files, ,Commands to specify files}). To specify as a target a process that is already running, use -the @code{attach} command (@pxref{Attach, ,Debugging an -already-running process}). -@end ifclear +the @code{attach} command (@pxref{Attach, ,Debugging an already-running +process}). @node Target Commands, Byte Order, Active Targets, Targets @section Commands for managing targets @table @code @item target @var{type} @var{parameters} -Connects the @value{GDBN} host environment to a target -@ifset BARETARGET -machine. -@end ifset -@ifclear BARETARGET -machine or process. A target is typically a protocol for talking to -debugging facilities. You use the argument @var{type} to specify the -type or protocol of the target machine. +Connects the @value{GDBN} host environment to a target machine or +process. A target is typically a protocol for talking to debugging +facilities. You use the argument @var{type} to specify the type or +protocol of the target machine. Further @var{parameters} are interpreted by the target protocol, but typically include things like device names or host names to connect with, process numbers, and baud rates. -@end ifclear The @code{target} command does not repeat if you press @key{RET} again after executing the command. @@ -8473,12 +7976,10 @@ These are the valid targets on HP-UX systems: An executable file. @samp{target exec @var{program}} is the same as @samp{exec-file @var{program}}. -@ifclear BARETARGET @kindex target core @item target core @var{filename} A core dump file. @samp{target core @var{filename}} is the same as @samp{core-file @var{filename}}. -@end ifclear @kindex target remote @item target remote @var{dev} @@ -8558,7 +8059,6 @@ EST-300 ICE monitor, running on a CPU32 (M68K) board. @kindex target hms @item target hms @var{dev} A Hitachi SH, H8/300, or H8/500 board, attached via serial line to your host. -@ifclear H8EXCLUSIVE Use special commands @code{device} and @code{speed} to control the serial line and the communications speed used. @xref{Hitachi Remote,,@value{GDBN} and Hitachi Microprocessors}. @@ -8664,13 +8164,10 @@ is the target system's machine name or IP address. @item target w89k @var{dev} W89K monitor, running on a Winbond HPPA board. -@end ifclear @end table -@ifset GENERIC Different targets are available on different configurations of @value{GDBN}; your configuration may have more or fewer targets. -@end ifset Many remote targets require you to download the executable's code once you've successfully established a connection. @@ -8679,7 +8176,6 @@ once you've successfully established a connection. @kindex load @var{filename} @item load @var{filename} -@ifset GENERIC Depending on what remote debugging facilities are configured into @value{GDBN}, the @code{load} command may be available. Where it exists, it is meant to make @var{filename} (an executable) available for debugging @@ -8690,7 +8186,6 @@ the @code{add-symbol-file} command. If your @value{GDBN} does not have a @code{load} command, attempting to execute it gets the error message ``@code{You can't do that when your target is @dots{}}'' -@end ifset The file is loaded at whatever address is specified in the executable. For some object file formats, you can specify the load address when you @@ -8698,19 +8193,14 @@ link the program; for other formats, like a.out, the object file format specifies a fixed address. @c FIXME! This would be a good place for an xref to the GNU linker doc. -@ifset VXWORKS On VxWorks, @code{load} links @var{filename} dynamically on the current target system as well as adding its symbols in @value{GDBN}. -@end ifset -@ifset I960 @cindex download to Nindy-960 With the Nindy interface to an Intel 960 board, @code{load} downloads @var{filename} to the 960 as well as adding its symbols in @value{GDBN}. -@end ifset -@ifset H8 @cindex download to H8/300 or H8/500 @cindex H8/300 or H8/500 download @cindex download to Hitachi SH @@ -8720,14 +8210,13 @@ When you select remote debugging to a Hitachi SH, H8/300, or H8/500 board the @code{load} command downloads your program to the Hitachi board and also opens it as the current executable target for @value{GDBN} on your host (like the @code{file} command). -@end ifset @code{load} does not repeat if you press @key{RET} again after using it. @end table -@ifset REMOTESTUB @node Byte Order, Remote, Target Commands, Targets @section Choosing target byte order + @cindex choosing target byte order @cindex target byte order @kindex set endian big @@ -8784,45 +8273,25 @@ communicate with @value{GDBN}. Other remote targets may be available in your configuration of @value{GDBN}; use @code{help target} to list them. -@end ifset -@ifset GENERIC @c Text on starting up GDB in various specific cases; it goes up front @c in manuals configured for any of those particular situations, here @c otherwise. @menu -@ifset REMOTESTUB * Remote Serial:: @value{GDBN} remote serial protocol -@end ifset -@ifset I960 * i960-Nindy Remote:: @value{GDBN} with a remote i960 (Nindy) -@end ifset -@ifset AMD29K * UDI29K Remote:: The UDI protocol for AMD29K * EB29K Remote:: The EBMON protocol for AMD29K -@end ifset -@ifset VXWORKS * VxWorks Remote:: @value{GDBN} and VxWorks -@end ifset -@ifset ST2000 * ST2000 Remote:: @value{GDBN} with a Tandem ST2000 -@end ifset -@ifset H8 * Hitachi Remote:: @value{GDBN} and Hitachi Microprocessors -@end ifset -@ifset MIPS * MIPS Remote:: @value{GDBN} and MIPS boards -@end ifset -@ifset SPARCLET * Sparclet Remote:: @value{GDBN} and Sparclet boards -@end ifset -@ifset SIMS * Simulator:: Simulated CPU target -@end ifset @end menu @include remote.texi -@end ifset + @node Controlling GDB @chapter Controlling @value{GDBN} @@ -9268,7 +8737,6 @@ In addition, a pseudo-command, @samp{stop} exists. Defining execution stops in your program: before breakpoint commands are run, displays are printed, or the stack frame is printed. -@ifclear BARETARGET For example, to ignore @code{SIGALRM} signals while single-stepping, but treat them normally during normal execution, you could define: @@ -9286,7 +8754,6 @@ define hook-continue handle SIGLARM pass end @end example -@end ifclear You can define a hook for any single-word command in @value{GDBN}, but not for command aliases; you should define a hook for the basic command @@ -9321,7 +8788,6 @@ options (such as @code{set complaints}) which affect the processing of the command line options and operands. The init files are not executed if you use the @samp{-nx} option; @pxref{Mode Options, ,Choosing modes}. -@ifset GENERIC @cindex init file name On some configurations of @value{GDBN}, the init file is known by a different name (these are typically environments where a specialized @@ -9342,7 +8808,6 @@ OS68K (Enea Data Systems real-time OS): @samp{.os68gdbinit} @item ES-1800 (Ericsson Telecom AB M68000 emulator): @samp{.esgdbinit} @end itemize -@end ifset You can also request the execution of a command file with the @code{source} command: @@ -9438,7 +8903,6 @@ string are the simple ones that consist of backslash followed by a letter. @end table -@ifclear DOSHOST @node Emacs, GDB Bugs, Sequences, Top @chapter Using @value{GDBN} under @sc{gnu} Emacs @@ -9614,7 +9078,6 @@ environment. Users of this environment can use a new command, @code{inspect} which performs identically to @code{print} except that each value is printed in its own window. @end ignore -@end ifclear @node GDB Bugs @c links whacked to pacify makeinfo diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo index 99f081d..3ebeae5 100644 --- a/gdb/doc/gdbint.texinfo +++ b/gdb/doc/gdbint.texinfo @@ -1017,10 +1017,6 @@ This macro is used as the argument to lseek (or, most commonly, bfd_seek). FIXME, should be replaced by SEEK_SET instead, which is the POSIX equivalent. -@item MAINTENANCE_CMDS -If the value of this is 1, then a number of optional maintenance -commands are compiled in. - @item MALLOC_INCOMPATIBLE Define this if the system's prototype for @code{malloc} differs from the @sc{ANSI} definition. @@ -1048,6 +1044,10 @@ of functions to indicate that they never return. The default is already set correctly if compiling with GCC. This will almost never need to be defined. +@item USE_GENERIC_DUMMY_FRAMES +Define this to 1 if the target is using the generic inferior function +call code. See @code{blockframe.c} for more information. + @item USE_MMALLOC GDB will use the @code{mmalloc} library for memory allocation for symbol reading if this symbol is defined. Be careful defining it since there @@ -1198,15 +1198,24 @@ instruction for a breakpoint, it's not required; for instance, the bit pattern could be an invalid instruction. The breakpoint must be no longer than the shortest instruction of the architecture. +@var{BREAKPOINT} has been deprecated in favour of +@var{BREAKPOINT_FROM_PC}. + @item BIG_BREAKPOINT @item LITTLE_BREAKPOINT Similar to BREAKPOINT, but used for bi-endian targets. +@var{BIG_BREAKPOINT} and @var{LITTLE_BREAKPOINT} have been deprecated in +favour of @var{BREAKPOINT_FROM_PC}. + @item REMOTE_BREAKPOINT @item LITTLE_REMOTE_BREAKPOINT @item BIG_REMOTE_BREAKPOINT Similar to BREAKPOINT, but used for remote targets. +@var{BIG_REMOTE_BREAKPOINT} and @var{LITTLE_REMOTE_BREAKPOINT} have been +deprecated in favour of @var{BREAKPOINT_FROM_PC}. + @item BREAKPOINT_FROM_PC (pcptr, lenptr) Use the program counter to determine the contents and size of a @@ -1220,14 +1229,40 @@ not required; for instance, the bit pattern could be an invalid instruction. The breakpoint must be no longer than the shortest instruction of the architecture. -Replaces all the other BREAKPOINTs. +Replaces all the other @var{BREAKPOINT} macros. + +@item CALL_DUMMY_P +A C expresson that is non-zero when the target suports inferior function +calls. + +@item CALL_DUMMY_WORDS +Pointer to an array of @var{LONGEST} words of data containing +host-byte-ordered @var{REGISTER_BYTES} sized values that partially +specify the sequence of instructions needed for an inferior function +call. + +Should be deprecated in favour of a macro that uses target-byte-ordered +data. + +@item SIZEOF_CALL_DUMMY_WORDS +The size of @var{CALL_DUMMY_WORDS}. When @var{CALL_DUMMY_P} this must +return a positive value. See also @var{CALL_DUMMY_LENGTH}. @item CALL_DUMMY -valops.c +A static initializer for @var{CALL_DUMMY_WORDS}. Deprecated. + @item CALL_DUMMY_LOCATION inferior.h + @item CALL_DUMMY_STACK_ADJUST -valops.c +Stack adjustment needed when performing an inferior function call. + +Should be deprecated in favor of something like @var{STACK_ALIGN}. + +@item CALL_DUMMY_STACK_ADJUST_P +Predicate for use of @var{CALL_DUMMY_STACK_ADJUST}. + +Should be deprecated in favor of something like @var{STACK_ALIGN}. @item CANNOT_FETCH_REGISTER (regno) A C expression that should be nonzero if @var{regno} cannot be fetched @@ -1375,7 +1410,7 @@ pointer. It examines the current state of the machine as needed. @item GET_SAVED_REGISTER Define this if you need to supply your own definition for the function -@code{get_saved_register}. Currently this is only done for the a29k. +@code{get_saved_register}. @item HAVE_REGISTER_WINDOWS Define this if the target has register windows. @@ -1507,6 +1542,9 @@ register state. Return the name of register @var{i} as a string. May return @var{NULL} or @var{NUL} to indicate that register @var{i} is not valid. +@item REGISTER_NAMES +Deprecated in favor of @var{REGISTER_NAME}. + @item REG_STRUCT_HAS_ADDR (gcc_p, type) Define this to return 1 if the given type will be passed by pointer rather than directly. diff --git a/gdb/doc/remote.texi b/gdb/doc/remote.texi index 816b658..adf8e00 100644 --- a/gdb/doc/remote.texi +++ b/gdb/doc/remote.texi @@ -1,11 +1,7 @@ @c -*- Texinfo -*- @c Copyright (c) 1990 1991 1992 1993 Free Software Foundation, Inc. @c This file is part of the source for the GDB manual. -@c This text diverted to "Remote Debugging" section in general case; -@c however, if we're doing a manual specifically for one of these, it -@c belongs up front (in "Getting In and Out" chapter). -@ifset REMOTESTUB @node Remote Serial @subsection The @value{GDBN} remote serial protocol @@ -47,11 +43,9 @@ you must link with your program a few special-purpose subroutines that implement the @value{GDBN} remote serial protocol. The file containing these subroutines is called a @dfn{debugging stub}. -@ifset GDBSERVER On certain remote targets, you can use an auxiliary program @code{gdbserver} instead of linking a stub into your program. @xref{Server,,Using the @code{gdbserver} program}, for details. -@end ifset @end table The debugging stub is specific to the architecture of the remote @@ -102,12 +96,8 @@ recently added stubs. * Bootstrapping:: What you must do for the stub * Debug Session:: Putting it all together * Protocol:: Outline of the communication protocol -@ifset GDBSERVER * Server:: Using the `gdbserver' program -@end ifset -@ifset GDBSERVE * NetWare:: Using the `gdbserve.nlm' program -@end ifset @end menu @node Stub Contents @@ -221,7 +211,7 @@ should be a simple jump, not a jump to subroutine. For the 386, @var{exception_address} should be installed as an interrupt gate so that interrupts are masked while the handler runs. The gate should be at privilege level 0 (the most privileged level). The -@sc{sparc} and 68k stubs are able to mask interrup themselves without +@sc{sparc} and 68k stubs are able to mask interrupts themselves without help from @code{exceptionHandler}. @item void flush_i_cache() @@ -460,7 +450,6 @@ packet-debugging information is printed on the @value{GDBN} standard output stream. @code{set remotedebug off} turns it off, and @code{show remotedebug} shows you its current state. -@ifset GDBSERVER @node Server @subsubsection Using the @code{gdbserver} program @@ -562,9 +551,7 @@ the @code{target remote} command. Otherwise you may get an error whose text depends on the host system, but which usually looks something like @samp{Connection refused}. @end table -@end ifset -@ifset GDBSERVE @node NetWare @subsubsection Using the @code{gdbserve.nlm} program @@ -621,11 +608,7 @@ argument is a device name (usually a serial device, like @noindent communications with the server via serial line @file{/dev/ttyb}. @end table -@end ifset -@end ifset - -@ifset I960 @node i960-Nindy Remote @subsection @value{GDBN} with a remote i960 (Nindy) @@ -728,9 +711,7 @@ circuit to perform a hard reset (or some other interesting action) when a break is detected. @end table @c @end group -@end ifset -@ifset AMD29K @node UDI29K Remote @subsection The UDI protocol for AMD29K @@ -943,9 +924,6 @@ of the commands sent to it. Running @samp{tail -f} on this file in another window often helps to understand trouble with @code{EBMON}, or unexpected events on the PC side of the connection. -@end ifset - -@ifset ST2000 @node ST2000 Remote @subsection @value{GDBN} with a Tandem ST2000 @@ -991,11 +969,10 @@ sequences gets you back to the @value{GDBN} command prompt: @kbd{@key{RET}~.} (Return, followed by tilde and period) or @kbd{@key{RET}~@key{C-d}} (Return, followed by tilde and control-D). @end table -@end ifset -@ifset VXWORKS @node VxWorks Remote @subsection @value{GDBN} and VxWorks + @cindex VxWorks @value{GDBN} enables developers to spawn and debug tasks running on networked @@ -1141,9 +1118,7 @@ follows: where @var{task} is the VxWorks hexadecimal task ID. The task can be running or suspended when you attach to it. Running tasks are suspended at the time of attachment. -@end ifset -@ifset SPARCLET @node Sparclet Remote @subsection @value{GDBN} and Sparclet @cindex Sparclet @@ -1292,9 +1267,6 @@ Breakpoint 1, main (argc=1, argv=0xeffff21c) at prog.c:3 (gdbslet) @end example -@end ifset - -@ifset H8 @node Hitachi Remote @subsection @value{GDBN} and Hitachi microprocessors @value{GDBN} needs to know these things to talk to your @@ -1312,11 +1284,8 @@ H8/300, or H8/500.) what serial device connects your host to your Hitachi board (the first serial device available on your host is the default). -@ifclear H8EXCLUSIVE -@c this is only for Unix hosts, not of interest to Hitachi @item what speed to use over the serial device. -@end ifclear @end enumerate @menu @@ -1328,7 +1297,6 @@ what speed to use over the serial device. @node Hitachi Boards @subsubsection Connecting to Hitachi boards -@ifclear H8EXCLUSIVE @c only for Unix hosts @kindex device @cindex serial device, Hitachi micros @@ -1348,13 +1316,11 @@ com2:9600,n,8,1,p}} for a 9600 bps connection). The @samp{device} and @samp{speed} commands are available only when you use a Unix host to debug your Hitachi microprocessor programs. If you use a DOS host, -@end ifclear @value{GDBN} depends on an auxiliary terminate-and-stay-resident program called @code{asynctsr} to communicate with the development board through a PC serial port. You must also use the DOS @code{mode} command to set up the serial port on the DOS side. -@ifset DOSHOST The following sample session illustrates the steps needed to start a program under @value{GDBN} control on an H8/300. The example uses a sample H8/300 program called @file{t.x}. The procedure is the same for @@ -1440,7 +1406,6 @@ to detect program completion. In either case, @value{GDBN} sees the effect of a @sc{reset} on the development board as a ``normal exit'' of your program. -@end ifset @node Hitachi ICE @subsubsection Using the E7000 in-circuit emulator @@ -1487,9 +1452,6 @@ memory}. The accepted values for @var{mod} are @code{small}, @code{big}, @code{medium}, and @code{compact}. @end table -@end ifset - -@ifset MIPS @node MIPS Remote @subsection @value{GDBN} and remote MIPS boards @@ -1622,13 +1584,10 @@ is waiting for your program to stop. In that case, @value{GDBN} waits forever because it has no way of knowing how long the program is going to run before stopping. @end table -@end ifset -@ifset SIMS @node Simulator @subsection Simulated CPU target -@ifset GENERIC @cindex simulator @cindex simulator, Z8000 @cindex Z8000 simulator @@ -1642,33 +1601,16 @@ can use instead of a hardware CPU to debug your programs. Currently, simulators are available for ARM, D10V, D30V, FR30, H8/300, H8/500, i960, M32R, MIPS, MN10200, MN10300, PowerPC, SH, Sparc, V850, W65, and Z8000. -@end ifset - -@ifclear GENERIC -@ifset H8 -@cindex simulator, H8/300 or H8/500 -@cindex Hitachi H8/300 or H8/500 simulator -@cindex simulator, Hitachi SH -@cindex Hitachi SH simulator -When configured for debugging Hitachi microprocessor targets, -@value{GDBN} includes a CPU simulator for the target chip (a Hitachi SH, -H8/300, or H8/500). -@end ifset -@ifset Z8K @cindex simulator, Z8000 @cindex Zilog Z8000 simulator When configured for debugging Zilog Z8000 targets, @value{GDBN} includes a Z8000 simulator. -@end ifset -@end ifclear -@ifset Z8K For the Z8000 family, @samp{target sim} simulates either the Z8002 (the unsegmented variant of the Z8000 architecture) or the Z8001 (the segmented variant). The simulator recognizes which architecture is appropriate by inspecting the object code. -@end ifset @table @code @item target sim @var{args} @@ -1703,6 +1645,5 @@ You can refer to these values in @value{GDBN} expressions with the usual conventions; for example, @w{@samp{b fputc if $cycles>5000}} sets a conditional breakpoint that suspends only after at least 5000 simulated clock ticks. -@end ifset @c need to add much more detail about sims! diff --git a/gdb/doc/stabs.texinfo b/gdb/doc/stabs.texinfo index a4f0bc9..2e4f7b8 100644 --- a/gdb/doc/stabs.texinfo +++ b/gdb/doc/stabs.texinfo @@ -3048,7 +3048,7 @@ the derivation of this class is encoded as follows. @node Virtual Base Classes @section Virtual Base Classes -A derived class object consists of a concatination in memory of the data +A derived class object consists of a concatenation in memory of the data areas defined by each base class, starting with the leftmost and ending with the rightmost in the list of base classes. The exception to this rule is for virtual inheritence. In the example above, class @code{D} diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index cf52066..35be19d 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -302,13 +302,28 @@ static struct partial_die_info zeroed_partial_die; in buildsym.c. */ static struct pending **list_in_scope = &file_symbols; -/* FIXME: The following variables pass additional information from - decode_locdesc to the caller. */ -static int optimized_out; /* Kludge to identify optimized out variables */ -static int isreg; /* Kludge to identify register variables */ -static int offreg; /* Kludge to identify basereg references */ -static int basereg; /* Which base register is it relative to? */ -static int islocal; /* Kludge to identify local variables */ +/* FIXME: decode_locdesc sets these variables to describe the location + to the caller. These ought to be a structure or something. If + none of the flags are set, the object lives at the address returned + by decode_locdesc. */ + +static int optimized_out; /* No ops in location in expression, + so object was optimized out. */ +static int isreg; /* Object lives in register. + decode_locdesc's return value is + the register number. */ +static int offreg; /* Object's address is the sum of the + register specified by basereg, plus + the offset returned. */ +static int basereg; /* See `offreg'. */ +static int isderef; /* Value described by flags above is + the address of a pointer to the object. */ +static int islocal; /* Variable is at the returned offset + from the frame start, but there's + no identified frame pointer for + this function, so we can't say + which register it's relative to; + use LOC_LOCAL. */ /* DW_AT_frame_base values for the current function. frame_base_reg is -1 if DW_AT_frame_base is missing, otherwise it @@ -464,6 +479,10 @@ static struct complaint dwarf2_unsupported_stack_op = { "unsupported stack op: '%s'", 0, 0 }; +static struct complaint dwarf2_complex_location_expr = +{ + "location expression too complex", 0, 0 +}; static struct complaint dwarf2_unsupported_tag = { "unsupported tag: '%s'", 0, 0 @@ -1595,7 +1614,9 @@ read_func_scope (die, objfile) if (attr) { CORE_ADDR addr = decode_locdesc (DW_BLOCK (attr), objfile); - if (isreg) + if (isderef) + complain (&dwarf2_unsupported_at_frame_base, name); + else if (isreg) frame_base_reg = addr; else if (offreg) { @@ -3922,7 +3943,12 @@ dwarf_decode_lines (offset, comp_dir, abfd) { case DW_LNE_end_sequence: end_sequence = 1; - record_line (current_subfile, line, address); + /* Don't call record_line here. The end_sequence + instruction provides the address of the first byte + *after* the last line in the sequence; it's not the + address of any real source line. However, the GDB + linetable structure only records the starts of lines, + not the ends. This is a weakness of GDB. */ break; case DW_LNE_set_address: address = read_address (abfd, line_ptr) + baseaddr; @@ -4238,8 +4264,17 @@ new_symbol (die, type, objfile) } else if (offreg) { - SYMBOL_CLASS (sym) = LOC_BASEREG_ARG; - SYMBOL_BASEREG (sym) = basereg; + if (isderef) + { + if (basereg != frame_base_reg) + complain (&dwarf2_complex_location_expr); + SYMBOL_CLASS (sym) = LOC_REF_ARG; + } + else + { + SYMBOL_CLASS (sym) = LOC_BASEREG_ARG; + SYMBOL_BASEREG (sym) = basereg; + } } else { @@ -5643,6 +5678,7 @@ decode_locdesc (blk, objfile) stack[stacki] = 0; isreg = 0; offreg = 0; + isderef = 0; islocal = 0; optimized_out = 1; @@ -5816,6 +5852,14 @@ decode_locdesc (blk, objfile) stacki--; break; + case DW_OP_deref: + isderef = 1; + /* If we're not the last op, then we definitely can't encode + this using GDB's address_class enum. */ + if (i < size) + complain (&dwarf2_complex_location_expr); + break; + default: complain (&dwarf2_unsupported_stack_op, dwarf_stack_op_name(op)); return (stack[stacki]); @@ -191,7 +191,7 @@ exec_file_attach (args, from_tty) if (argv == NULL) nomem (0); - make_cleanup ((make_cleanup_func) freeargv, (char *) argv); + make_cleanup_freeargv (argv); for (; (*argv != NULL) && (**argv == '-'); argv++) {;} if (*argv == NULL) diff --git a/gdb/expprint.c b/gdb/expprint.c index 939919a..7cd35ec 100644 --- a/gdb/expprint.c +++ b/gdb/expprint.c @@ -497,8 +497,6 @@ op_string(op) return NULL; } -#ifdef MAINTENANCE_CMDS - /* Support for dumping the raw data from expressions in a human readable form. */ @@ -899,5 +897,3 @@ dump_postfix_expression (exp, stream, note) elt = dump_subexp (exp, stream, elt); fputs_filtered ("\n", stream); } - -#endif /* MAINTENANCE_CMDS */ diff --git a/gdb/expression.h b/gdb/expression.h index 310b2e2..52471c5 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -370,13 +370,11 @@ extern void print_expression PARAMS ((struct expression *, GDB_FILE *)); extern char *op_string PARAMS ((enum exp_opcode)); -#ifdef MAINTENANCE_CMDS extern void dump_prefix_expression PARAMS ((struct expression *, GDB_FILE *, char *)); extern void dump_postfix_expression PARAMS ((struct expression *, GDB_FILE *, char *)); -#endif /* MAINTENANCE_CMDS */ #endif /* !defined (EXPRESSION_H) */ diff --git a/gdb/findvar.c b/gdb/findvar.c index 5bfecc2..74be8c7 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -43,6 +43,8 @@ const struct floatformat floatformat_unknown; static void write_register_gen PARAMS ((int, char *)); +static int read_relative_register_raw_bytes_for_frame PARAMS ((int regnum, char *myaddr, struct frame_info *frame)); + /* Basic byte-swapping routines. GDB has needed these for a long time... All extract a target-format integer at ADDR which is LEN bytes long. */ @@ -252,25 +254,6 @@ store_address (addr, len, val) int len; LONGEST val; { - if( TARGET_BYTE_ORDER == BIG_ENDIAN - && len != sizeof( LONGEST )) { - /* On big-endian machines (e.g., HPPA 2.0, narrow mode) - * just letting this fall through to the call below will - * lead to the wrong bits being stored. - * - * Only the simplest case is fixed here, the others just - * get the old behavior. - */ - if( (len == sizeof( CORE_ADDR )) - && (sizeof( LONGEST ) == 2 * sizeof( CORE_ADDR ))) { - /* Watch out! The high bits are garbage! */ - CORE_ADDR coerce[2]; - *(LONGEST*)&coerce = val; - - store_unsigned_integer (addr, len, coerce[1] ); /* BIG_ENDIAN code! */ - return; - } - } store_unsigned_integer (addr, len, val); } @@ -393,7 +376,6 @@ store_floating (addr, len, val) } } -#if !defined (GET_SAVED_REGISTER) /* Return the address in which frame FRAME's value of register REGNUM has been saved in memory. Or return zero if it has not been saved. @@ -477,7 +459,7 @@ find_saved_register (frame, regnum) The argument RAW_BUFFER must point to aligned memory. */ void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) +default_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) char *raw_buffer; int *optimized; CORE_ADDR *addrp; @@ -523,7 +505,22 @@ get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) if (addrp != NULL) *addrp = addr; } -#endif /* GET_SAVED_REGISTER. */ + +#if !defined (GET_SAVED_REGISTER) +#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) \ + default_get_saved_register(raw_buffer, optimized, addrp, frame, regnum, lval) +#endif +void +get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) + char *raw_buffer; + int *optimized; + CORE_ADDR *addrp; + struct frame_info *frame; + int regnum; + enum lval_type *lval; +{ + GET_SAVED_REGISTER (raw_buffer, optimized, addrp, frame, regnum, lval); +} /* Copy the bytes of register REGNUM, relative to the input stack frame, into our memory at MYADDR, in target byte order. @@ -531,7 +528,7 @@ get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) Returns 1 if could not be read, 0 if could. */ -int +static int read_relative_register_raw_bytes_for_frame (regnum, myaddr, frame) int regnum; char *myaddr; @@ -627,15 +624,14 @@ value_of_register (regnum) or it will get garbage. (a change from GDB version 3, in which the caller got the value from the last stop). */ -/* Contents of the registers in target byte order. - We allocate some extra slop since we do a lot of memcpy's around - `registers', and failing-soft is better than failing hard. */ +/* Contents and state of the registers (in target byte order). */ -char registers[REGISTER_BYTES + /* SLOP */ 256]; +char *registers; -/* Nonzero if that register has been fetched, - -1 if register value not available. */ -SIGNED char register_valid[NUM_REGS]; +/* VALID_REGISTER is non-zero if it has been fetched, -1 if the + register value was not available. */ + +signed char *register_valid; /* The thread/process associated with the current set of registers. For now, -1 is special, and means `no current process'. */ @@ -1628,3 +1624,25 @@ locate_var_value (var, frame) } return 0; /* For lint -- never reached */ } + + +static void build_findvar PARAMS ((void)); +static void +build_findvar () +{ + /* We allocate some extra slop since we do a lot of memcpy's around + `registers', and failing-soft is better than failing hard. */ + int sizeof_registers = REGISTER_BYTES + /* SLOP */ 256; + int sizeof_register_valid = NUM_REGS * sizeof (*register_valid); + registers = xmalloc (sizeof_registers); + memset (registers, 0, sizeof_registers); + register_valid = xmalloc (sizeof_register_valid); + memset (register_valid, 0, sizeof_register_valid); +} + +void _initialize_findvar PARAMS ((void)); +void +_initialize_findvar () +{ + build_findvar (); +} diff --git a/gdb/fr30-tdep.c b/gdb/fr30-tdep.c index 0d442da..ae3b886 100644 --- a/gdb/fr30-tdep.c +++ b/gdb/fr30-tdep.c @@ -56,6 +56,48 @@ fr30_pop_frame () flush_cached_frames (); } + +/* Function: fr30_store_return_value + Put a value where a caller expects to see it. Used by the 'return' + command. */ +void +fr30_store_return_value (struct type *type, + char *valbuf) +{ + /* Here's how the FR30 returns values (gleaned from gcc/config/ + fr30/fr30.h): + + If the return value is 32 bits long or less, it goes in r4. + + If the return value is 64 bits long or less, it goes in r4 (most + significant word) and r5 (least significant word. + + If the function returns a structure, of any size, the caller + passes the function an invisible first argument where the callee + should store the value. But GDB doesn't let you do that anyway. + + If you're returning a value smaller than a word, it's not really + necessary to zero the upper bytes of the register; the caller is + supposed to ignore them. However, the FR30 typically keeps its + values extended to the full register width, so we should emulate + that. */ + + /* The FR30 is big-endian, so if we return a small value (like a + short or a char), we need to position it correctly within the + register. We round the size up to a register boundary, and then + adjust the offset so as to place the value at the right end. */ + int value_size = TYPE_LENGTH (type); + int returned_size = (value_size + FR30_REGSIZE - 1) & ~(FR30_REGSIZE - 1); + int offset = (REGISTER_BYTE (RETVAL_REG) + + (returned_size - value_size)); + char *zeros = alloca (returned_size); + memset (zeros, 0, returned_size); + + write_register_bytes (REGISTER_BYTE (RETVAL_REG), zeros, returned_size); + write_register_bytes (offset, valbuf, value_size); +} + + /* Function: skip_prologue Return the address of the first code past the prologue of the function. */ @@ -180,11 +222,13 @@ fr30_push_arguments(nargs, args, sp, struct_return, struct_addr) return sp; } -_initialize_fr30_tdep() -{ - extern int print_insn_fr30(bfd_vma, disassemble_info *); +void _initialize_fr30_tdep PARAMS ((void)); - tm_print_insn = print_insn_fr30; +void +_initialize_fr30_tdep () +{ + extern int print_insn_fr30(bfd_vma, disassemble_info *); + tm_print_insn = print_insn_fr30; } /* Function: check_prologue_cache diff --git a/gdb/frame.h b/gdb/frame.h index 6836c6c..0bb9b6f 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -42,7 +42,7 @@ struct frame_saved_regs frame_info". The innermost one gets allocated (in wait_for_inferior) each time the inferior stops; current_frame points to it. Additional frames get allocated (in - get_prev_frame_info) as needed, and are chained through the next + get_prev_frame) as needed, and are chained through the next and prev fields. Any time that the frame cache becomes invalid (most notably when we execute something, but also if we change how we interpret the frames (e.g. "set heuristic-fence-post" in @@ -106,20 +106,6 @@ struct frame_info extern void *frame_obstack_alloc PARAMS ((unsigned long size)); extern void frame_saved_regs_zalloc PARAMS ((struct frame_info *)); -/* Dummy frame. This saves the processor state just prior to setting up the - inferior function call. On most targets, the registers are saved on the - target stack, but that really slows down function calls. */ - -struct dummy_frame -{ - struct dummy_frame *next; - - CORE_ADDR pc; - CORE_ADDR fp; - CORE_ADDR sp; - char regs[REGISTER_BYTES]; -}; - /* Return the frame address from FR. Except in the machine-dependent *FRAME* macros, a frame address has no defined meaning other than as a magic cookie which identifies a frame over calls to the @@ -171,8 +157,6 @@ extern struct frame_info *selected_frame; extern int selected_frame_level; -extern struct frame_info *get_prev_frame_info PARAMS ((struct frame_info *)); - extern struct frame_info *create_new_frame PARAMS ((CORE_ADDR, CORE_ADDR)); extern void flush_cached_frames PARAMS ((void)); @@ -218,6 +202,8 @@ extern void print_frame_args PARAMS ((struct symbol *, struct frame_info *, extern struct frame_info *find_relative_frame PARAMS ((struct frame_info *, int*)); +extern void show_and_print_stack_frame PARAMS ((struct frame_info *fi, int level, int source)); + extern void print_stack_frame PARAMS ((struct frame_info *, int, int)); extern void print_only_stack_frame PARAMS ((struct frame_info *, int, int)); @@ -250,6 +236,7 @@ extern void generic_pop_current_frame PARAMS ((void (*) (struct frame_inf extern void generic_pop_dummy_frame PARAMS ((void)); extern int generic_pc_in_call_dummy PARAMS ((CORE_ADDR pc, + CORE_ADDR sp, CORE_ADDR fp)); extern char * generic_find_dummy_frame PARAMS ((CORE_ADDR pc, CORE_ADDR fp)); diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index 154fa8f..b9ee310 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -18,9 +18,23 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" -#include "bfd.h" -#include "gdbcmd.h" +/* Just include everything in sight so that the every old definition + of macro is visible. */ +#include "gdb_string.h" +#include <ctype.h> +#include "symtab.h" +#include "frame.h" +#include "inferior.h" +#include "breakpoint.h" +#include "wait.h" +#include "gdbcore.h" +#include "gdbcmd.h" +#include "target.h" +#include "gdbthread.h" +#include "annotate.h" +#include "symfile.h" /* for overlay functions */ +#include "symcat.h" /* Non-zero if we want to trace architecture code. */ @@ -40,6 +54,7 @@ int gdbarch_debug = GDBARCH_DEBUG; #define TARGET_BYTE_ORDER_DEFAULT BIG_ENDIAN #endif #endif +#if !TARGET_BYTE_ORDER_SELECTABLE_P #ifndef TARGET_BYTE_ORDER_DEFAULT /* compat - Catch old non byte-order selectable targets that do not define TARGET_BYTE_ORDER_DEFAULT and instead expect @@ -48,6 +63,10 @@ int gdbarch_debug = GDBARCH_DEBUG; below will get a strange compiler warning. */ #define TARGET_BYTE_ORDER_DEFAULT TARGET_BYTE_ORDER #endif +#endif +#ifndef TARGET_BYTE_ORDER_DEFAULT +#define TARGET_BYTE_ORDER_DEFAULT BIG_ENDIAN /* arbitrary */ +#endif int target_byte_order = TARGET_BYTE_ORDER_DEFAULT; int target_byte_order_auto = 1; @@ -177,20 +196,37 @@ const struct bfd_arch_info *target_architecture = &bfd_default_arch_struct; int (*target_architecture_hook) PARAMS ((const struct bfd_arch_info *ap)); /* Do the real work of changing the current architecture */ +enum set_arch { set_arch_auto, set_arch_manual }; static void -set_arch (arch) +set_arch (arch, type) const struct bfd_arch_info *arch; + enum set_arch type; { - /* FIXME: Is it compatible with gdb? */ - /* Check with the target on the setting */ - if (target_architecture_hook != NULL - && !target_architecture_hook (arch)) - printf_unfiltered ("Target does not support `%s' architecture.\n", - arch->printable_name); - else + /* FIXME: Should be performing the more basic check that the binary + is compatible with GDB. */ + /* Check with the target that the architecture is valid. */ + int arch_valid = (target_architecture_hook != NULL + && !target_architecture_hook (arch)); + switch (type) { - target_architecture_auto = 0; + case set_arch_auto: + if (!arch_valid) + warning ("Target may not support %s architecture", + arch->printable_name); target_architecture = arch; + break; + case set_arch_manual: + if (!arch_valid) + { + printf_unfiltered ("Target does not support `%s' architecture.\n", + arch->printable_name); + } + else + { + target_architecture_auto = 0; + target_architecture = arch; + } + break; } } @@ -229,7 +265,7 @@ set_architecture (args, from_tty) { const struct bfd_arch_info *arch = bfd_scan_arch (args); if (arch != NULL) - set_arch (arch); + set_arch (arch, set_arch_manual); else printf_unfiltered ("Architecture `%s' not reconized.\n", args); } @@ -268,7 +304,7 @@ set_architecture_from_arch_mach (arch, mach) { const struct bfd_arch_info *wanted = bfd_lookup_arch (arch, mach); if (wanted != NULL) - set_arch (wanted); + set_arch (wanted, set_arch_manual); else fatal ("hardwired architecture/machine not reconized"); } @@ -282,11 +318,7 @@ set_architecture_from_file (abfd) const struct bfd_arch_info *wanted = bfd_get_arch_info (abfd); if (target_architecture_auto) { - if (target_architecture_hook != NULL - && !target_architecture_hook (wanted)) - warning ("Target may not support %s architecture", - wanted->printable_name); - target_architecture = wanted; + set_arch (wanted, set_arch_auto); } else if (wanted != target_architecture) { @@ -318,6 +350,13 @@ set_gdbarch_from_file (abfd) } +#if defined (CALL_DUMMY) +/* FIXME - this should go away */ +LONGEST call_dummy_words[] = CALL_DUMMY; +int sizeof_call_dummy_words = sizeof (call_dummy_words); +#endif + + extern void _initialize_gdbarch PARAMS ((void)); void _initialize_gdbarch () @@ -348,7 +387,6 @@ _initialize_gdbarch () tm_print_insn_info.memory_error_func = dis_asm_memory_error; tm_print_insn_info.print_address_func = dis_asm_print_address; -#ifdef MAINTENANCE_CMDS add_show_from_set (add_set_cmd ("archdebug", class_maintenance, var_zinteger, @@ -356,5 +394,4 @@ _initialize_gdbarch () "Set architecture debugging.\n\ When non-zero, architecture debugging is enabled.", &setlist), &showlist); -#endif } diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index 098db4c..beb206b 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -20,7 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef GDBARCH_H #define GDBARCH_H - /* The target-system-dependant byte order is dynamic */ /* TARGET_BYTE_ORDER_SELECTABLE_P determines if the target endianness @@ -100,6 +99,21 @@ extern disassemble_info tm_print_insn_info; +/* Explicit test for D10V architecture. + USE of these macro's is *STRONGLY* discouraged. */ + +#define GDB_TARGET_IS_D10V (TARGET_ARCHITECTURE->arch == bfd_arch_d10v) +#ifndef D10V_MAKE_DADDR +#define D10V_MAKE_DADDR(X) (abort (), 0) +#endif +#ifndef D10V_MAKE_IADDR +#define D10V_MAKE_IADDR(X) (abort (), 0) +#endif + + + + + /* Set the dynamic target-system-dependant parameters (architecture, byte-order, ...) using information found in the BFD */ diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 0393462..ca9764b 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -78,6 +78,8 @@ static void print_bit_vector PARAMS ((B_TYPE *, int)); static void print_arg_types PARAMS ((struct type **, int)); static void dump_fn_fieldlists PARAMS ((struct type *, int)); static void print_cplus_stuff PARAMS ((struct type *, int)); +static void virtual_base_list_aux PARAMS ((struct type *dclass)); + /* Alloc a new type structure and fill it with some defaults. If OBJFILE is non-NULL, then allocate the space for the type structure @@ -1719,15 +1721,15 @@ static struct vbase * current_vbase_list = NULL; Note: the list goes backward, right-to-left. virtual_base_list() copies the items out in reverse order. */ -struct vbase * +static void virtual_base_list_aux (dclass) - struct type * dclass; + struct type * dclass; { struct vbase * tmp_vbase; register int i; if (TYPE_CODE(dclass) != TYPE_CODE_CLASS) - return NULL; + return; for (i = 0; i < TYPE_N_BASECLASSES (dclass); i++) { @@ -2390,10 +2392,6 @@ rank_one_type (parm, arg) /* End of functions for overload resolution */ - - -#if MAINTENANCE_CMDS - static void print_bit_vector (bits, nbits) B_TYPE *bits; @@ -2766,9 +2764,6 @@ recursive_dump_type (type, spaces) obstack_free (&dont_print_type_obstack, NULL); } -#endif /* MAINTENANCE_CMDS */ - - static void build_gdbtypes PARAMS ((void)); static void build_gdbtypes () diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 107eb46..5b7d77d 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1112,10 +1112,7 @@ rank_function PARAMS ((struct type **, int, struct type **, int)); extern int rank_one_type PARAMS ((struct type *, struct type *)); - -#if MAINTENANCE_CMDS extern void recursive_dump_type PARAMS ((struct type *, int)); -#endif /* printcmd.c */ @@ -1124,9 +1121,7 @@ print_scalar_formatted PARAMS ((char *, struct type *, int, int, GDB_FILE *)); extern int can_dereference PARAMS ((struct type *)); -#if MAINTENANCE_CMDS extern void maintenance_print_type PARAMS ((char *, int)); -#endif /* typeprint.c */ diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c index 156d981..795f8a8 100644 --- a/gdb/gnu-nat.c +++ b/gdb/gnu-nat.c @@ -23,6 +23,7 @@ */ #include <stdio.h> +#include <string.h> #include <errno.h> #include <signal.h> #include <assert.h> @@ -32,7 +33,8 @@ /* We include this because we don't need the access macros and they conflict with gdb's definitions (ick). This is very non standard! */ -#include <waitflags.h> +#define _SYS_WAIT_H /* Inhibit warning from <bits/waitflags.h>. */ +#include <bits/waitflags.h> #include <mach.h> #include <mach/message.h> @@ -84,7 +86,6 @@ int gnu_debug_flag = 0; /* Forward decls */ extern struct target_ops gnu_ops; -extern char *strerror(); int inf_update_procs (struct inf *inf); struct inf *make_inf (); @@ -1911,7 +1912,7 @@ gnu_create_inferior (exec_file, allargs, env) if (ptrace (PTRACE_TRACEME) != 0) error ("ptrace (PTRACE_TRACEME) failed!"); } - int attach_to_child (int pid) + void attach_to_child (int pid) { /* Attach to the now stopped child, which is actually a shell... */ inf_debug (inf, "attaching to child: %d", pid); @@ -1930,13 +1931,12 @@ gnu_create_inferior (exec_file, allargs, env) inferior_pid = inf_pick_first_thread (); startup_inferior (inf->pending_execs); - - return inferior_pid; } inf_debug (inf, "creating inferior"); - fork_inferior (exec_file, allargs, env, trace_me, attach_to_child, NULL, NULL); + fork_inferior (exec_file, allargs, env, trace_me, attach_to_child, + NULL, NULL); inf_update_signal_thread (inf); inf_set_traced (inf, inf->want_signals); @@ -2082,10 +2082,11 @@ gnu_stop () error ("to_stop target function not implemented"); } -static void +static char * gnu_pid_to_exec_file () { error ("to_pid_to_exec_file target function not implemented"); + return NULL; } @@ -3169,11 +3170,9 @@ _initialize_gnu_nat () add_task_commands (); add_thread_commands (); -#if MAINTENANCE_CMDS add_set_cmd ("gnu-debug", class_maintenance, var_boolean, (char *)&gnu_debug_flag, "Set debugging output for the gnu backend.", &maintenancelist); -#endif } #ifdef FLUSH_INFERIOR_CACHE diff --git a/gdb/gnu-nat.h b/gdb/gnu-nat.h index d238dc0..f50ba60 100644 --- a/gdb/gnu-nat.h +++ b/gdb/gnu-nat.h @@ -81,13 +81,10 @@ extern thread_state_t proc_get_state (struct proc *proc, int will_modify); debug ("{proc %d/%d %p}: " msg, \ __proc_pid (__proc), __proc->tid, __proc , ##args); } while (0) -#if MAINTENANCE_CMDS extern int gnu_debug_flag; + #define debug(msg, args...) \ do { if (gnu_debug_flag) \ fprintf (stderr, "%s: " msg "\r\n", __FUNCTION__ , ##args); } while (0) -#else -#define debug(msg, args...) (void)0 -#endif #endif /* __GNU_NAT_H__ */ diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c index 3fbe9e1..4fc502e 100644 --- a/gdb/h8300-tdep.c +++ b/gdb/h8300-tdep.c @@ -750,22 +750,6 @@ h8300_store_return_value (type, valbuf) } } -/* Function: get_saved_register - Just call the generic_get_saved_register function. */ - -void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) - char *raw_buffer; - int *optimized; - CORE_ADDR *addrp; - struct frame_info *frame; - int regnum; - enum lval_type *lval; -{ - generic_get_saved_register (raw_buffer, optimized, addrp, - frame, regnum, lval); -} - struct cmd_list_element *setmemorylist; static void diff --git a/gdb/hp300ux-nat.c b/gdb/hp300ux-nat.c index 38f68e1..e3ee41b 100644 --- a/gdb/hp300ux-nat.c +++ b/gdb/hp300ux-nat.c @@ -148,7 +148,6 @@ store_inferior_register (regno, regaddr) #endif /* not HPUX_VERSION_5 */ { register int i; - extern char registers[]; for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (int)) { diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index d911750..69188c7 100644 --- a/gdb/hppa-tdep.c +++ b/gdb/hppa-tdep.c @@ -1425,20 +1425,16 @@ push_dummy_frame (inf_status) { unsigned int sid; int_buffer &= ~0x2; - memcpy (inf_status->registers, &int_buffer, 4); - memcpy (inf_status->registers + REGISTER_BYTE (PCOQ_HEAD_REGNUM), &pc, 4); - pc += 4; - memcpy (inf_status->registers + REGISTER_BYTE (PCOQ_TAIL_REGNUM), &pc, 4); - pc -= 4; + write_inferior_status_register (inf_status, 0, int_buffer); + write_inferior_status_register (inf_status, PCOQ_HEAD_REGNUM, pc + 0); + write_inferior_status_register (inf_status, PCOQ_TAIL_REGNUM, pc + 4); sid = (pc >> 30) & 0x3; if (sid == 0) pcspace = read_register (SR4_REGNUM); else pcspace = read_register (SR4_REGNUM + 4 + sid); - memcpy (inf_status->registers + REGISTER_BYTE (PCSQ_HEAD_REGNUM), - &pcspace, 4); - memcpy (inf_status->registers + REGISTER_BYTE (PCSQ_TAIL_REGNUM), - &pcspace, 4); + write_inferior_status_register (inf_status, PCSQ_HEAD_REGNUM, pcspace); + write_inferior_status_register (inf_status, PCSQ_TAIL_REGNUM, pcspace); } else pcspace = read_register (PCSQ_HEAD_REGNUM); @@ -2429,6 +2425,13 @@ pa_register_look_aside(raw_regs, regnum, raw_val) have to cast away the type in our offset calculation: otherwise we get an offset of 1! */ + /* NB: save_state_t is not available before HPUX 9. + The ss_wide field is not available previous to HPUX 10.20, + so to avoid compile-time warnings, we only compile this for + PA 2.0 processors. This control path should only be followed + if we're debugging a PA 2.0 processor, so this should not cause + problems. */ + /* #if the following code out so that this file can still be compiled on older HPUX boxes (< 10.20) which don't have this structure/structure member. */ @@ -4276,9 +4279,6 @@ child_get_current_exception_event () return ¤t_ex_event; } - -#ifdef MAINTENANCE_CMDS - static void unwind_command (exp, from_tty) char *exp; @@ -4350,7 +4350,6 @@ unwind_command (exp, from_tty) pin (Entry_GR); pin (Total_frame_size); } -#endif /* MAINTENANCE_CMDS */ #ifdef PREPARE_TO_PROCEED @@ -4437,9 +4436,7 @@ _initialize_hppa_tdep () { tm_print_insn = print_insn_hppa; -#ifdef MAINTENANCE_CMDS add_cmd ("unwind", class_maintenance, unwind_command, "Print unwind table entry at given address.", &maintenanceprintlist); -#endif /* MAINTENANCE_CMDS */ } diff --git a/gdb/hppab-nat.c b/gdb/hppab-nat.c index 52ce1fd..a795e02 100644 --- a/gdb/hppab-nat.c +++ b/gdb/hppab-nat.c @@ -106,7 +106,6 @@ store_inferior_registers (regno) { register unsigned int regaddr; char buf[80]; - extern char registers[]; register int i; unsigned int offset = U_REGS_OFFSET; int scratch; diff --git a/gdb/hppah-nat.c b/gdb/hppah-nat.c index ac7f69f..dbf41c4 100644 --- a/gdb/hppah-nat.c +++ b/gdb/hppah-nat.c @@ -55,7 +55,6 @@ store_inferior_registers (regno) { register unsigned int regaddr; char buf[80]; - extern char registers[]; register int i; unsigned int offset = U_REGS_OFFSET; int scratch; diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index 1daa81d..228b1ac 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -56,6 +56,12 @@ static char *valid_flavors[] = { }; static char *disassembly_flavor = att_flavor; +/* This is used to keep the bfd arch_info in sync with the disassembly flavor. */ +static void set_disassembly_flavor_sfunc PARAMS ((char *, int, struct cmd_list_element *)); +static void set_disassembly_flavor (); + +void (*disassembly_flavor_hook) PARAMS((char *args, int from_tty)); + /* Stdio style buffering was used to minimize calls to ptrace, but this buffering did not take into account that the code section being accessed may not be an even number of buffers long (even if the buffer is only @@ -366,7 +372,7 @@ i386_frame_num_args (fi) nameless arguments. */ return -1; - pfi = get_prev_frame_info (fi); + pfi = get_prev_frame (fi); if (pfi == 0) { /* Note: this can happen if we are looking at the frame for @@ -772,23 +778,58 @@ gdb_print_insn_i386 (memaddr, info) return print_insn_i386_att (memaddr, info); else if (disassembly_flavor == intel_flavor) return print_insn_i386_intel (memaddr, info); + /* Never reached - disassembly_flavour is always either att_flavor + or intel_flavor */ + abort (); +} + +/* If the disassembly mode is intel, we have to also switch the + bfd mach_type. This function is run in the set disassembly_flavor + command, and does that. */ + +static void +set_disassembly_flavor_sfunc (args, from_tty, c) + char *args; + int from_tty; + struct cmd_list_element *c; +{ + set_disassembly_flavor (); + + if (disassembly_flavor_hook != NULL) + disassembly_flavor_hook(args, from_tty); +} + +static void +set_disassembly_flavor () +{ + if (disassembly_flavor == att_flavor) + set_architecture_from_arch_mach (bfd_arch_i386, bfd_mach_i386_i386); + else if (disassembly_flavor == intel_flavor) + set_architecture_from_arch_mach (bfd_arch_i386, bfd_mach_i386_i386_intel_syntax); } void _initialize_i386_tdep () { + struct cmd_list_element *new_cmd; + tm_print_insn = gdb_print_insn_i386; tm_print_insn_info.mach = bfd_lookup_arch (bfd_arch_i386, 0)->mach; /* Add the variable that controls the disassembly flavor */ - add_show_from_set( - add_set_enum_cmd ("disassembly-flavor", no_class, + + new_cmd = add_set_enum_cmd ("disassembly-flavor", no_class, valid_flavors, (char *) &disassembly_flavor, "Set the disassembly flavor, the valid values are \"att\" and \"intel\", \ and the default value is \"att\".", - &setlist), - &showlist); + &setlist); + new_cmd->function.sfunc = set_disassembly_flavor_sfunc; + add_show_from_set(new_cmd, &showlist); + + /* Finally, initialize the disassembly flavor to the default given + in the disassembly_flavor variable */ + set_disassembly_flavor (); } diff --git a/gdb/i386aix-nat.c b/gdb/i386aix-nat.c index 20e656e..83e9624 100644 --- a/gdb/i386aix-nat.c +++ b/gdb/i386aix-nat.c @@ -253,7 +253,6 @@ store_register (regno) int regno; { char buf[80]; - extern char registers[]; errno = 0; if (regno < FP0_REGNUM) ptrace (PT_WRITE_GPR, inferior_pid, PT_REG(regmap[regno]), diff --git a/gdb/i386mach-nat.c b/gdb/i386mach-nat.c index f843d7f..91090db 100644 --- a/gdb/i386mach-nat.c +++ b/gdb/i386mach-nat.c @@ -44,7 +44,6 @@ fetch_inferior_registers (regno) { struct regs inferior_registers; struct fp_state inferior_fp_registers; - extern char registers[]; registers_fetched (); @@ -73,7 +72,6 @@ store_inferior_registers (regno) { struct regs inferior_registers; struct fp_state inferior_fp_registers; - extern char registers[]; memcpy (&inferior_registers, registers, 20 * 4); @@ -121,7 +119,6 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) CORE_ADDR reg_addr; /* Unused in this version */ { int val; - extern char registers[]; switch (which) { case 0: diff --git a/gdb/i386v4-nat.c b/gdb/i386v4-nat.c index ea84c65..074c1da 100644 --- a/gdb/i386v4-nat.c +++ b/gdb/i386v4-nat.c @@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" #include "value.h" +#include "inferior.h" #ifdef HAVE_SYS_REG_H #include <sys/reg.h> @@ -127,7 +128,6 @@ fill_gregset (gregsetp, regno) { int regi; register greg_t *regp = (greg_t *) gregsetp; - extern char registers[]; extern int regmap[]; for (regi = 0 ; regi < (NUM_REGS - NUM_FREGS) ; regi++) diff --git a/gdb/i960-tdep.c b/gdb/i960-tdep.c index e33415d..bb2087a 100644 --- a/gdb/i960-tdep.c +++ b/gdb/i960-tdep.c @@ -581,7 +581,8 @@ pop_frame () get_frame_saved_regs (current_fi, &fsr); for (i = G0_REGNUM; i < G14_REGNUM; i++) { - if (save_addr = fsr.regs[i]) + save_addr = fsr.regs[i]; + if (save_addr != 0) write_register (i, read_memory_integer (save_addr, 4)); } diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 4add1f0..b6df2e9 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -94,9 +94,7 @@ void _initialize_infcmd PARAMS ((void)); #define GO_USAGE "Usage: go <location>\n" -#ifdef CALL_DUMMY_BREAKPOINT_OFFSET static void breakpoint_auto_delete_contents PARAMS ((PTR)); -#endif #define ERROR_NO_INFERIOR \ if (!target_has_execution) error ("The program is not being run."); @@ -570,8 +568,6 @@ signal_command (signum_exp, from_tty) /* Call breakpoint_auto_delete on the current contents of the bpstat pointed to by arg (which is really a bpstat *). */ -#ifdef CALL_DUMMY_BREAKPOINT_OFFSET - static void breakpoint_auto_delete_contents (arg) PTR arg; @@ -579,7 +575,6 @@ breakpoint_auto_delete_contents (arg) breakpoint_auto_delete (*(bpstat *)arg); } -#endif /* CALL_DUMMY_BREAKPOINT_OFFSET */ /* Execute a "stack dummy", a piece of code stored in the stack by the debugger to be executed in the inferior. @@ -604,7 +599,7 @@ static int stack_dummy_testing = 0; int run_stack_dummy (addr, buffer) CORE_ADDR addr; - char buffer[REGISTER_BYTES]; + char *buffer; { struct cleanup *old_cleanups = make_cleanup (null_cleanup, 0); @@ -615,43 +610,45 @@ run_stack_dummy (addr, buffer) POP_FRAME; return(0); } -#ifdef CALL_DUMMY_BREAKPOINT_OFFSET - { - struct breakpoint *bpt; - struct symtab_and_line sal; - - INIT_SAL (&sal); /* initialize to zeroes */ -#if CALL_DUMMY_LOCATION != AT_ENTRY_POINT - sal.pc = addr - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET; -#else - sal.pc = CALL_DUMMY_ADDRESS (); -#endif - sal.section = find_pc_overlay (sal.pc); - - /* Set up a FRAME for the dummy frame so we can pass it to - set_momentary_breakpoint. We need to give the breakpoint a - frame in case there is only one copy of the dummy (e.g. - CALL_DUMMY_LOCATION == AFTER_TEXT_END). */ - flush_cached_frames (); - set_current_frame (create_new_frame (read_fp (), sal.pc)); - - /* If defined, CALL_DUMMY_BREAKPOINT_OFFSET is where we need to put - a breakpoint instruction. If not, the call dummy already has the - breakpoint instruction in it. - - addr is the address of the call dummy plus the CALL_DUMMY_START_OFFSET, - so we need to subtract the CALL_DUMMY_START_OFFSET. */ - bpt = set_momentary_breakpoint (sal, - get_current_frame (), - bp_call_dummy); - bpt->disposition = del; - - /* If all error()s out of proceed ended up calling normal_stop (and - perhaps they should; it already does in the special case of error - out of resume()), then we wouldn't need this. */ - make_cleanup (breakpoint_auto_delete_contents, &stop_bpstat); - } -#endif /* CALL_DUMMY_BREAKPOINT_OFFSET. */ + if (CALL_DUMMY_BREAKPOINT_OFFSET_P) + { + struct breakpoint *bpt; + struct symtab_and_line sal; + + INIT_SAL (&sal); /* initialize to zeroes */ + if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT) + { + sal.pc = CALL_DUMMY_ADDRESS (); + } + else + { + sal.pc = addr - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET; + } + sal.section = find_pc_overlay (sal.pc); + + /* Set up a FRAME for the dummy frame so we can pass it to + set_momentary_breakpoint. We need to give the breakpoint a + frame in case there is only one copy of the dummy (e.g. + CALL_DUMMY_LOCATION == AFTER_TEXT_END). */ + flush_cached_frames (); + set_current_frame (create_new_frame (read_fp (), sal.pc)); + + /* If defined, CALL_DUMMY_BREAKPOINT_OFFSET is where we need to put + a breakpoint instruction. If not, the call dummy already has the + breakpoint instruction in it. + + addr is the address of the call dummy plus the CALL_DUMMY_START_OFFSET, + so we need to subtract the CALL_DUMMY_START_OFFSET. */ + bpt = set_momentary_breakpoint (sal, + get_current_frame (), + bp_call_dummy); + bpt->disposition = del; + + /* If all error()s out of proceed ended up calling normal_stop (and + perhaps they should; it already does in the special case of error + out of resume()), then we wouldn't need this. */ + make_cleanup (breakpoint_auto_delete_contents, &stop_bpstat); + } disable_watchpoints_before_interactive_call_start (); proceed_to_finish = 1; /* We want stop_registers, please... */ @@ -665,7 +662,7 @@ run_stack_dummy (addr, buffer) /* On return, the stack dummy has been popped already. */ - memcpy (buffer, stop_registers, sizeof stop_registers); + memcpy (buffer, stop_registers, REGISTER_BYTES); return 0; } diff --git a/gdb/inferior.h b/gdb/inferior.h index fa59c2a..02d942e 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -27,42 +27,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* For enum target_signal. */ #include "target.h" -/* Structure in which to save the status of the inferior. Save +/* Structure in which to save the status of the inferior. Create/Save through "save_inferior_status", restore through "restore_inferior_status". + This pair of routines should be called around any transfer of control to the inferior which you don't want showing up in your control variables. */ -struct inferior_status - { - enum target_signal stop_signal; - CORE_ADDR stop_pc; - bpstat stop_bpstat; - int stop_step; - int stop_stack_dummy; - int stopped_by_random_signal; - int trap_expected; - CORE_ADDR step_range_start; - CORE_ADDR step_range_end; - CORE_ADDR step_frame_address; - int step_over_calls; - CORE_ADDR step_resume_break_address; - int stop_after_trap; - int stop_soon_quietly; - CORE_ADDR selected_frame_address; - char stop_registers[REGISTER_BYTES]; - - /* These are here because if call_function_by_hand has written some - registers and then decides to call error(), we better not have changed - any registers. */ - char registers[REGISTER_BYTES]; - - int selected_level; - int breakpoint_proceeded; - int restore_stack_info; - int proceed_to_finish; - }; +#ifdef __STDC__ +struct inferior_status; +#endif + +extern struct inferior_status *save_inferior_status PARAMS ((int)); + +extern void restore_inferior_status PARAMS ((struct inferior_status *)); + +extern void discard_inferior_status PARAMS ((struct inferior_status *)); + +extern void write_inferior_status_register PARAMS ((struct inferior_status *inf_status, int regno, LONGEST val)); /* This macro gives the number of registers actually in use by the inferior. This may be less than the total number of registers, @@ -72,10 +55,6 @@ struct inferior_status #define ARCH_NUM_REGS NUM_REGS #endif -extern void save_inferior_status PARAMS ((struct inferior_status *, int)); - -extern void restore_inferior_status PARAMS ((struct inferior_status *)); - extern void set_sigint_trap PARAMS ((void)); extern void clear_sigint_trap PARAMS ((void)); @@ -117,15 +96,15 @@ extern int inferior_ignoring_leading_exec_events; extern struct environ *inferior_environ; -/* Character array containing an image of the inferior programs' registers. */ +/* Character array containing an image of the inferior programs' + registers. */ -extern char registers[]; +extern char *registers; -/* Array of validity bits (one per register). Nonzero at position XXX_REGNUM - means that `registers' contains a valid copy of inferior register XXX. - -1 if register value is not available. */ +/* Character array containing the current state of each register + (unavailable<0, valid=0, invalid>0). */ -extern SIGNED char register_valid[NUM_REGS]; +extern signed char *register_valid; extern void clear_proceed_status PARAMS ((void)); @@ -137,7 +116,7 @@ extern void generic_mourn_inferior PARAMS ((void)); extern void terminal_ours PARAMS ((void)); -extern int run_stack_dummy PARAMS ((CORE_ADDR, char[REGISTER_BYTES])); +extern int run_stack_dummy PARAMS ((CORE_ADDR, char*)); extern CORE_ADDR read_pc PARAMS ((void)); @@ -202,6 +181,7 @@ extern int attach PARAMS ((int)); extern void detach PARAMS ((int)); +/* PTRACE method of waiting for inferior process. */ int ptrace_wait PARAMS ((int, int *)); extern void child_resume PARAMS ((int, int, enum target_signal)); @@ -340,7 +320,7 @@ extern int proceed_to_finish; Thus this contains the return value from the called function (assuming values are returned in a register). */ -extern char stop_registers[REGISTER_BYTES]; +extern char *stop_registers; /* Nonzero if the child process in inferior_pid was attached rather than forked. */ @@ -376,57 +356,103 @@ extern int attach_flag; #define AFTER_TEXT_END 3 #define AT_ENTRY_POINT 4 +#if !defined (USE_GENERIC_DUMMY_FRAMES) +#define USE_GENERIC_DUMMY_FRAMES 0 +#endif + #if !defined (CALL_DUMMY_LOCATION) #define CALL_DUMMY_LOCATION ON_STACK #endif /* No CALL_DUMMY_LOCATION. */ -/* Are we in a call dummy? The code below which allows DECR_PC_AFTER_BREAK - below is for infrun.c, which may give the macro a pc without that - subtracted out. */ -#if !defined (PC_IN_CALL_DUMMY) -#if CALL_DUMMY_LOCATION == BEFORE_TEXT_END -extern CORE_ADDR text_end; -#define PC_IN_CALL_DUMMY(pc, sp, frame_address) \ - ((pc) >= text_end - CALL_DUMMY_LENGTH \ - && (pc) <= text_end + DECR_PC_AFTER_BREAK) +#if !defined (CALL_DUMMY_ADDRESS) +#define CALL_DUMMY_ADDRESS() (abort (), 0) /* anything to abort GDB */ +#endif +#if !defined (CALL_DUMMY_START_OFFSET) +#define CALL_DUMMY_START_OFFSET (abort (), 0) /* anything to abort GDB */ +#endif +#if !defined (CALL_DUMMY_BREAKPOINT_OFFSET) +#define CALL_DUMMY_BREAKPOINT_OFFSET_P (0) +#define CALL_DUMMY_BREAKPOINT_OFFSET (abort (), 0) /* anything to abort GDB */ +#endif +#if !defined CALL_DUMMY_BREAKPOINT_OFFSET_P +#define CALL_DUMMY_BREAKPOINT_OFFSET_P (1) +#endif +#if !defined (CALL_DUMMY_LENGTH) +#define CALL_DUMMY_LENGTH (abort (), 0) /* anything to abort GDB */ +#endif + +#if defined (CALL_DUMMY_STACK_ADJUST) +#if !defined (CALL_DUMMY_STACK_ADJUST_P) +#define CALL_DUMMY_STACK_ADJUST_P (1) +#endif +#endif +#if !defined (CALL_DUMMY_STACK_ADJUST) +#define CALL_DUMMY_STACK_ADJUST (abort (), 0) +#endif +#if !defined (CALL_DUMMY_STACK_ADJUST_P) +#define CALL_DUMMY_STACK_ADJUST_P (0) +#endif + +#if !defined (CALL_DUMMY_P) +#if defined (CALL_DUMMY) +#define CALL_DUMMY_P 1 +#else +#define CALL_DUMMY_P 0 +#endif +#endif + +#if !defined (CALL_DUMMY_WORDS) +#if defined (CALL_DUMMY) +extern LONGEST call_dummy_words[]; +#define CALL_DUMMY_WORDS (call_dummy_words) +#else +#define CALL_DUMMY_WORDS (abort (), (void*) 0) /* anything to abort GDB */ +#endif +#endif + +#if !defined (SIZEOF_CALL_DUMMY_WORDS) +#if defined (CALL_DUMMY) +extern int sizeof_call_dummy_words; +#define SIZEOF_CALL_DUMMY_WORDS (sizeof_call_dummy_words) +#else +#define SIZEOF_CALL_DUMMY_WORDS (abort (), 0) /* anything to abort GDB */ +#endif +#endif + +#if !defined PUSH_DUMMY_FRAME +#define PUSH_DUMMY_FRAME (abort ()) +#endif + +#if !defined FIX_CALL_DUMMY +#define FIX_CALL_DUMMY(a1,a2,a3,a4,a5,a6,a7) (abort ()) +#endif + +#if !defined STORE_STRUCT_RETURN +#define STORE_STRUCT_RETURN(a1,a2) (abort ()) +#endif + + +/* Are we in a call dummy? */ + +extern int pc_in_call_dummy_before_text_end PARAMS ((CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address)); +#if !defined (PC_IN_CALL_DUMMY) && CALL_DUMMY_LOCATION == BEFORE_TEXT_END +#define PC_IN_CALL_DUMMY(pc, sp, frame_address) pc_in_call_dummy_before_text_end (pc, sp, frame_address) #endif /* Before text_end. */ -#if CALL_DUMMY_LOCATION == AFTER_TEXT_END -extern CORE_ADDR text_end; -#define PC_IN_CALL_DUMMY(pc, sp, frame_address) \ - ((pc) >= text_end \ - && (pc) <= text_end + CALL_DUMMY_LENGTH + DECR_PC_AFTER_BREAK) -#endif /* After text_end. */ - -#if CALL_DUMMY_LOCATION == ON_STACK -/* Is the PC in a call dummy? SP and FRAME_ADDRESS are the bottom and - top of the stack frame which we are checking, where "bottom" and - "top" refer to some section of memory which contains the code for - the call dummy. Calls to this macro assume that the contents of - SP_REGNUM and FP_REGNUM (or the saved values thereof), respectively, - are the things to pass. - - This won't work on the 29k, where SP_REGNUM and FP_REGNUM don't - have that meaning, but the 29k doesn't use ON_STACK. This could be - fixed by generalizing this scheme, perhaps by passing in a frame - and adding a few fields, at least on machines which need them for - PC_IN_CALL_DUMMY. - - Something simpler, like checking for the stack segment, doesn't work, - since various programs (threads implementations, gcc nested function - stubs, etc) may either allocate stack frames in another segment, or - allocate other kinds of code on the stack. */ - -#define PC_IN_CALL_DUMMY(pc, sp, frame_address) \ - (INNER_THAN ((sp), (pc)) && (frame_address != 0) && INNER_THAN ((pc), (frame_address))) -#endif /* On stack. */ - -#if CALL_DUMMY_LOCATION == AT_ENTRY_POINT -#define PC_IN_CALL_DUMMY(pc, sp, frame_address) \ - ((pc) >= CALL_DUMMY_ADDRESS () \ - && (pc) <= (CALL_DUMMY_ADDRESS () + DECR_PC_AFTER_BREAK)) -#endif /* At entry point. */ -#endif /* No PC_IN_CALL_DUMMY. */ +extern int pc_in_call_dummy_after_text_end PARAMS ((CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address)); +#if !defined (PC_IN_CALL_DUMMY) && CALL_DUMMY_LOCATION == AFTER_TEXT_END +#define PC_IN_CALL_DUMMY(pc, sp, frame_address) pc_in_call_dummy_after_text_end (pc, sp, frame_address) +#endif + +extern int pc_in_call_dummy_on_stack PARAMS ((CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address)); +#if !defined (PC_IN_CALL_DUMMY) && CALL_DUMMY_LOCATION == ON_STACK +#define PC_IN_CALL_DUMMY(pc, sp, frame_address) pc_in_call_dummy_on_stack (pc, sp, frame_address) +#endif + +extern int pc_in_call_dummy_at_entry_point PARAMS ((CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address)); +#if !defined (PC_IN_CALL_DUMMY) && CALL_DUMMY_LOCATION == AT_ENTRY_POINT +#define PC_IN_CALL_DUMMY(pc, sp, frame_address) pc_in_call_dummy_at_entry_point (pc, sp, frame_address) +#endif /* It's often not enough for our clients to know whether the PC is merely somewhere within the call dummy. They may need to know whether the diff --git a/gdb/inflow.c b/gdb/inflow.c index 9033675..d6a3bb1 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -33,6 +33,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_UNISTD_H #include <unistd.h> #endif +#ifdef HAVE_SYS_SELECT_H +#include <sys/select.h> +#endif #ifdef HAVE_TERMIOS #define PROCESS_GROUP_TYPE pid_t diff --git a/gdb/infrun.c b/gdb/infrun.c index 5fd8fc1..12f1cd3 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1,6 +1,5 @@ /* Target-struct-independent code to start (run) and stop an inferior process. - Copyright 1986, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 1998 - Free Software Foundation, Inc. + Copyright 1986-1989, 1991-1999 Free Software Foundation, Inc. This file is part of GDB. @@ -32,6 +31,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gdbthread.h" #include "annotate.h" #include "symfile.h" /* for overlay functions */ +#include "top.h" #include <signal.h> @@ -51,16 +51,35 @@ static int hook_stop_stub PARAMS ((PTR)); static void delete_breakpoint_current_contents PARAMS ((PTR)); +static void set_follow_fork_mode_command PARAMS ((char *arg, int from_tty, struct cmd_list_element *c)); + int inferior_ignoring_startup_exec_events = 0; int inferior_ignoring_leading_exec_events = 0; -#ifdef HPUXHPPA /* wait_for_inferior and normal_stop use this to notify the user when the inferior stopped in a different thread than it had been running in. */ static int switched_from_inferior_pid; + +/* This will be true for configurations that may actually report an + inferior pid different from the original. At present this is only + true for HP-UX native. */ + +#ifndef MAY_SWITCH_FROM_INFERIOR_PID +#define MAY_SWITCH_FROM_INFERIOR_PID (0) +#endif + +static int may_switch_from_inferior_pid = MAY_SWITCH_FROM_INFERIOR_PID; + +/* This is true for configurations that may follow through execl() and + similar functions. At present this is only true for HP-UX native. */ + +#ifndef MAY_FOLLOW_EXEC +#define MAY_FOLLOW_EXEC (0) #endif +static int may_follow_exec = MAY_FOLLOW_EXEC; + /* resume and wait_for_inferior use this to ensure that when stepping over a hit breakpoint in a threaded application only the thread that hit the breakpoint is stepped and the @@ -76,6 +95,15 @@ static int switched_from_inferior_pid; thread steps and others wait" shouldn't do this. */ static int thread_step_needed = 0; +/* This is true if thread_step_needed should actually be used. At + present this is only true for HP-UX native. */ + +#ifndef USE_THREAD_STEP_NEEDED +#define USE_THREAD_STEP_NEEDED (0) +#endif + +static int use_thread_step_needed = USE_THREAD_STEP_NEEDED; + void _initialize_infrun PARAMS ((void)); /* GET_LONGJMP_TARGET returns the PC at which longjmp() will resume the @@ -164,6 +192,30 @@ void _initialize_infrun PARAMS ((void)); #define INSTRUCTION_NULLIFIED 0 #endif +/* Convert the #defines into values. This is temporary until wfi control + flow is completely sorted out. */ + +#ifndef HAVE_STEPPABLE_WATCHPOINT +#define HAVE_STEPPABLE_WATCHPOINT 0 +#else +#undef HAVE_STEPPABLE_WATCHPOINT +#define HAVE_STEPPABLE_WATCHPOINT 1 +#endif + +#ifndef HAVE_NONSTEPPABLE_WATCHPOINT +#define HAVE_NONSTEPPABLE_WATCHPOINT 0 +#else +#undef HAVE_NONSTEPPABLE_WATCHPOINT +#define HAVE_NONSTEPPABLE_WATCHPOINT 1 +#endif + +#ifndef HAVE_CONTINUABLE_WATCHPOINT +#define HAVE_CONTINUABLE_WATCHPOINT 0 +#else +#undef HAVE_CONTINUABLE_WATCHPOINT +#define HAVE_CONTINUABLE_WATCHPOINT 1 +#endif + /* Tables of how to react to signals; the user sets them. */ static unsigned char *signal_stop; @@ -239,7 +291,7 @@ int proceed_to_finish; Thus this contains the return value from the called function (assuming values are returned in a register). */ -char stop_registers[REGISTER_BYTES]; +char *stop_registers; /* Nonzero if program stopped due to error trying to insert breakpoints. */ @@ -308,7 +360,6 @@ static char *follow_fork_mode_kind_names[] = static char *follow_fork_mode_string = NULL; -#if defined(HPUXHPPA) static void follow_inferior_fork (parent_pid, child_pid, has_forked, has_vforked) int parent_pid; @@ -349,7 +400,9 @@ follow_inferior_fork (parent_pid, child_pid, has_forked, has_vforked) if (!has_vforked || !follow_vfork_when_exec) { detach_breakpoints (child_pid); +#ifdef SOLIB_REMOVE_INFERIOR_HOOK SOLIB_REMOVE_INFERIOR_HOOK (child_pid); +#endif } /* Detach from the child. */ @@ -381,7 +434,9 @@ follow_inferior_fork (parent_pid, child_pid, has_forked, has_vforked) remove_breakpoints (); /* Also reset the solib inferior hook from the parent. */ +#ifdef SOLIB_REMOVE_INFERIOR_HOOK SOLIB_REMOVE_INFERIOR_HOOK (inferior_pid); +#endif /* Detach from the parent. */ dont_repeat (); @@ -508,16 +563,17 @@ follow_vfork (parent_pid, child_pid) free (pending_follow.execd_pathname); } } -#endif /* HPUXHPPA */ static void follow_exec (pid, execd_pathname) int pid; char *execd_pathname; { -#ifdef HPUXHPPA int saved_pid = pid; - extern struct target_ops child_ops; + struct target_ops *tgt; + + if (!may_follow_exec) + return; /* Did this exec() follow a vfork()? If so, we must follow the vfork now too. Do it before following the exec. */ @@ -571,10 +627,17 @@ follow_exec (pid, execd_pathname) /* We've followed the inferior through an exec. Therefore, the inferior has essentially been killed & reborn. */ + + /* First collect the run target in effect. */ + tgt = find_run_target (); + /* If we can't find one, things are in a very strange state... */ + if (tgt == NULL) + error ("Could find run target to save before following exec"); + gdb_flush (gdb_stdout); target_mourn_inferior (); - inferior_pid = saved_pid; /* Because mourn_inferior resets inferior_pid. */ - push_target (&child_ops); + inferior_pid = saved_pid; /* Because mourn_inferior resets inferior_pid. */ + push_target (tgt); /* That a.out is now the one to use. */ exec_file_attach (execd_pathname, 0); @@ -585,8 +648,12 @@ follow_exec (pid, execd_pathname) /* Reset the shared library package. This ensures that we get a shlib event when the child reaches "_start", at which point the dld will have had a chance to initialize the child. */ +#if defined(SOLIB_RESTART) SOLIB_RESTART (); +#endif +#ifdef SOLIB_CREATE_INFERIOR_HOOK SOLIB_CREATE_INFERIOR_HOOK (inferior_pid); +#endif /* Reinsert all breakpoints. (Those which were symbolic have been reset to the proper address in the new a.out, thanks @@ -597,7 +664,6 @@ follow_exec (pid, execd_pathname) startup breakpoints. (If the user had also set bp's on "main" from the old (parent) process, then they'll auto- matically get reset there in the new process.) */ -#endif } /* Non-zero if we just simulating a single-step. This is needed @@ -680,7 +746,6 @@ resume (step, sig) DO_DEFERRED_STORES; #endif -#ifdef HPUXHPPA /* If there were any forks/vforks/execs that were caught and are now to be followed, then do so. */ switch (pending_follow.kind) @@ -717,15 +782,13 @@ resume (step, sig) default: break; } -#endif /* HPUXHPPA */ /* Install inferior's terminal modes. */ target_terminal_inferior (); if (should_resume) { -#ifdef HPUXHPPA - if (thread_step_needed) + if (use_thread_step_needed && thread_step_needed) { /* We stopped on a BPT instruction; don't continue other threads and @@ -753,7 +816,6 @@ resume (step, sig) } } else -#endif /* HPUXHPPA */ { /* Vanilla resume. */ @@ -1004,9 +1066,6 @@ wait_for_inferior () CORE_ADDR stop_func_start; CORE_ADDR stop_func_end; char *stop_func_name; -#if 0 - CORE_ADDR prologue_pc = 0; -#endif CORE_ADDR tmp; struct symtab_and_line sal; int remove_breakpoints_on_following_step = 0; @@ -1021,10 +1080,7 @@ wait_for_inferior () int enable_hw_watchpoints_after_wait = 0; int stepping_through_sigtramp = 0; int new_thread_event; - -#ifdef HAVE_NONSTEPPABLE_WATCHPOINT int stepped_after_stopped_by_watchpoint; -#endif old_cleanups = make_cleanup (delete_breakpoint_current_contents, &step_resume_breakpoint); @@ -1045,15 +1101,12 @@ wait_for_inferior () ; thread_step_needed = 0; -#ifdef HPUXHPPA /* We'll update this if & when we switch to a new thread. */ - switched_from_inferior_pid = inferior_pid; -#endif + if (may_switch_from_inferior_pid) + switched_from_inferior_pid = inferior_pid; while (1) { - extern int overlay_cache_invalid; /* declared in symfile.h */ - overlay_cache_invalid = 1; /* We have to invalidate the registers BEFORE calling target_wait because @@ -1081,10 +1134,7 @@ wait_for_inferior () enable_hw_watchpoints_after_wait = 0; } - -#ifdef HAVE_NONSTEPPABLE_WATCHPOINT stepped_after_stopped_by_watchpoint = 0; -#endif /* Gross. @@ -1105,14 +1155,7 @@ wait_for_inferior () { add_thread (pid); - -#ifdef HPUXHPPA - fprintf_unfiltered (gdb_stderr, "[New %s]\n", - target_pid_or_tid_to_str (pid)); - -#else - printf_filtered ("[New %s]\n", target_pid_to_str (pid)); -#endif + printf_filtered ("[New %s]\n", target_pid_or_tid_to_str (pid)); #if 0 /* NOTE: This block is ONLY meant to be invoked in case of a @@ -1148,8 +1191,6 @@ wait_for_inferior () #ifdef SOLIB_ADD if (!stop_soon_quietly) { - extern int auto_solib_add; - /* Remove breakpoints, SOLIB_ADD might adjust breakpoint addresses via breakpoint_re_set. */ if (breakpoints_inserted) @@ -1255,12 +1296,10 @@ wait_for_inferior () inferior_pid = pid; stop_bpstat = bpstat_stop_status (&stop_pc, -#if DECR_PC_AFTER_BREAK - (prev_pc != stop_pc - DECR_PC_AFTER_BREAK - && CURRENTLY_STEPPING ()) -#else /* DECR_PC_AFTER_BREAK zero */ - 0 -#endif /* DECR_PC_AFTER_BREAK zero */ + (DECR_PC_AFTER_BREAK ? + (prev_pc != stop_pc - DECR_PC_AFTER_BREAK + && CURRENTLY_STEPPING ()) + : 0) ); random_signal = !bpstat_explains_signal (stop_bpstat); inferior_pid = saved_inferior_pid; @@ -1310,13 +1349,11 @@ wait_for_inferior () stop_pc = read_pc (); stop_bpstat = bpstat_stop_status (&stop_pc, -#if DECR_PC_AFTER_BREAK - (prev_pc != stop_pc - DECR_PC_AFTER_BREAK - && CURRENTLY_STEPPING ()) -#else /* DECR_PC_AFTER_BREAK zero */ - 0 -#endif /* DECR_PC_AFTER_BREAK zero */ - ); + (DECR_PC_AFTER_BREAK ? + (prev_pc != stop_pc - DECR_PC_AFTER_BREAK + && CURRENTLY_STEPPING ()) + : 0) + ); random_signal = !bpstat_explains_signal (stop_bpstat); goto process_event_stop_test; @@ -1380,13 +1417,11 @@ wait_for_inferior () inferior_pid = pid; stop_bpstat = bpstat_stop_status (&stop_pc, -#if DECR_PC_AFTER_BREAK - (prev_pc != stop_pc - DECR_PC_AFTER_BREAK - && CURRENTLY_STEPPING ()) -#else /* DECR_PC_AFTER_BREAK zero */ - 0 -#endif /* DECR_PC_AFTER_BREAK zero */ - ); + (DECR_PC_AFTER_BREAK ? + (prev_pc != stop_pc - DECR_PC_AFTER_BREAK + && CURRENTLY_STEPPING ()) + : 0) + ); random_signal = !bpstat_explains_signal (stop_bpstat); inferior_pid = saved_inferior_pid; goto process_event_stop_test; @@ -1508,8 +1543,14 @@ wait_for_inferior () insert_breakpoints (); } - /* We need to restart all the threads now. */ - target_resume (-1, 0, TARGET_SIGNAL_0); + /* We need to restart all the threads now, + * unles we're running in scheduler-locked mode. + * FIXME: shouldn't we look at CURRENTLY_STEPPING ()? + */ + if (scheduler_mode == schedlock_on) + target_resume (pid, 0, TARGET_SIGNAL_0); + else + target_resume (-1, 0, TARGET_SIGNAL_0); continue; } else @@ -1594,9 +1635,8 @@ wait_for_inferior () stepping_through_solib_catchpoints, stepping_through_sigtramp); -#ifdef HPUXHPPA - switched_from_inferior_pid = inferior_pid; -#endif + if (may_switch_from_inferior_pid) + switched_from_inferior_pid = inferior_pid; inferior_pid = pid; @@ -1630,16 +1670,11 @@ wait_for_inferior () it so that the user won't be confused when GDB appears to be ready to execute it. */ -#if 0 /* XXX DEBUG */ - printf ("infrun.c:1607: pc = 0x%x\n", read_pc ()); -#endif /* if (INSTRUCTION_NULLIFIED && CURRENTLY_STEPPING ()) */ if (INSTRUCTION_NULLIFIED) { struct target_waitstatus tmpstatus; -#if 0 - all_registers_info ((char *) 0, 0); -#endif + registers_changed (); target_resume (pid, 1, TARGET_SIGNAL_0); @@ -1655,37 +1690,36 @@ wait_for_inferior () goto have_waited; } -#ifdef HAVE_STEPPABLE_WATCHPOINT /* It may not be necessary to disable the watchpoint to stop over it. For example, the PA can (with some kernel cooperation) single step over a watchpoint without disabling the watchpoint. */ - if (STOPPED_BY_WATCHPOINT (w)) + if (HAVE_STEPPABLE_WATCHPOINT && STOPPED_BY_WATCHPOINT (w)) { resume (1, 0); continue; } -#endif -#ifdef HAVE_NONSTEPPABLE_WATCHPOINT - /* It is far more common to need to disable a watchpoint - to step the inferior over it. FIXME. What else might - a debug register or page protection watchpoint scheme need - here? */ - if (STOPPED_BY_WATCHPOINT (w)) + /* It is far more common to need to disable a watchpoint to step + the inferior over it. FIXME. What else might a debug + register or page protection watchpoint scheme need here? */ + if (HAVE_NONSTEPPABLE_WATCHPOINT && STOPPED_BY_WATCHPOINT (w)) { -/* At this point, we are stopped at an instruction which has attempted to write - to a piece of memory under control of a watchpoint. The instruction hasn't - actually executed yet. If we were to evaluate the watchpoint expression - now, we would get the old value, and therefore no change would seem to have - occurred. - - In order to make watchpoints work `right', we really need to complete the - memory write, and then evaluate the watchpoint expression. The following - code does that by removing the watchpoint (actually, all watchpoints and - breakpoints), single-stepping the target, re-inserting watchpoints, and then - falling through to let normal single-step processing handle proceed. Since - this includes evaluating watchpoints, things will come to a stop in the - correct manner. */ + /* At this point, we are stopped at an instruction which has + attempted to write to a piece of memory under control of + a watchpoint. The instruction hasn't actually executed + yet. If we were to evaluate the watchpoint expression + now, we would get the old value, and therefore no change + would seem to have occurred. + + In order to make watchpoints work `right', we really need + to complete the memory write, and then evaluate the + watchpoint expression. The following code does that by + removing the watchpoint (actually, all watchpoints and + breakpoints), single-stepping the target, re-inserting + watchpoints, and then falling through to let normal + single-step processing handle proceed. Since this + includes evaluating watchpoints, things will come to a + stop in the correct manner. */ write_pc (stop_pc - DECR_PC_AFTER_BREAK); @@ -1705,12 +1739,10 @@ wait_for_inferior () stepped_after_stopped_by_watchpoint = 1; goto have_waited; } -#endif -#ifdef HAVE_CONTINUABLE_WATCHPOINT /* It may be possible to simply continue after a watchpoint. */ - STOPPED_BY_WATCHPOINT (w); -#endif + if (HAVE_CONTINUABLE_WATCHPOINT) + STOPPED_BY_WATCHPOINT (w); stop_func_start = 0; stop_func_end = 0; @@ -1800,23 +1832,21 @@ wait_for_inferior () random_signal = !(bpstat_explains_signal (stop_bpstat) || trap_expected -#ifndef CALL_DUMMY_BREAKPOINT_OFFSET - || PC_IN_CALL_DUMMY (stop_pc, read_sp (), - FRAME_FP (get_current_frame ())) -#endif /* No CALL_DUMMY_BREAKPOINT_OFFSET. */ + || (!CALL_DUMMY_BREAKPOINT_OFFSET_P + && PC_IN_CALL_DUMMY (stop_pc, read_sp (), + FRAME_FP (get_current_frame ()))) || (step_range_end && step_resume_breakpoint == NULL)); else { random_signal = !(bpstat_explains_signal (stop_bpstat) - /* End of a stack dummy. Some systems (e.g. Sony - news) give another signal besides SIGTRAP, - so check here as well as above. */ -#ifndef CALL_DUMMY_BREAKPOINT_OFFSET - || PC_IN_CALL_DUMMY (stop_pc, read_sp (), - FRAME_FP (get_current_frame ())) -#endif /* No CALL_DUMMY_BREAKPOINT_OFFSET. */ + /* End of a stack dummy. Some systems (e.g. Sony + news) give another signal besides SIGTRAP, so + check here as well as above. */ + || (!CALL_DUMMY_BREAKPOINT_OFFSET_P + && PC_IN_CALL_DUMMY (stop_pc, read_sp (), + FRAME_FP (get_current_frame ()))) ); if (!random_signal) stop_signal = TARGET_SIGNAL_TRAP; @@ -2063,8 +2093,6 @@ wait_for_inferior () case BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK: #ifdef SOLIB_ADD { - extern int auto_solib_add; - /* Remove breakpoints, we eventually want to step over the shlib event breakpoint, and SOLIB_ADD might adjust breakpoint addresses via breakpoint_re_set. */ @@ -2177,29 +2205,30 @@ wait_for_inferior () goto stop_stepping; } -#ifndef CALL_DUMMY_BREAKPOINT_OFFSET - /* This is the old way of detecting the end of the stack dummy. - An architecture which defines CALL_DUMMY_BREAKPOINT_OFFSET gets - handled above. As soon as we can test it on all of them, all - architectures should define it. */ - - /* If this is the breakpoint at the end of a stack dummy, - just stop silently, unless the user was doing an si/ni, in which - case she'd better know what she's doing. */ - - if (CALL_DUMMY_HAS_COMPLETED (stop_pc, read_sp (), - FRAME_FP (get_current_frame ())) - && !step_range_end) + if (!CALL_DUMMY_BREAKPOINT_OFFSET_P) { - stop_print_frame = 0; - stop_stack_dummy = 1; + /* This is the old way of detecting the end of the stack dummy. + An architecture which defines CALL_DUMMY_BREAKPOINT_OFFSET gets + handled above. As soon as we can test it on all of them, all + architectures should define it. */ + + /* If this is the breakpoint at the end of a stack dummy, + just stop silently, unless the user was doing an si/ni, in which + case she'd better know what she's doing. */ + + if (CALL_DUMMY_HAS_COMPLETED (stop_pc, read_sp (), + FRAME_FP (get_current_frame ())) + && !step_range_end) + { + stop_print_frame = 0; + stop_stack_dummy = 1; #ifdef HP_OS_BUG - trap_expected_after_continue = 1; + trap_expected_after_continue = 1; #endif - break; + break; + } } -#endif /* No CALL_DUMMY_BREAKPOINT_OFFSET. */ - + if (step_resume_breakpoint) /* Having a step-resume breakpoint overrides anything else having to do with stepping commands until @@ -2207,34 +2236,20 @@ wait_for_inferior () /* I'm not sure whether this needs to be check_sigtramp2 or whether it could/should be keep_going. */ goto check_sigtramp2; - + if (step_range_end == 0) /* Likewise if we aren't even stepping. */ /* I'm not sure whether this needs to be check_sigtramp2 or whether it could/should be keep_going. */ goto check_sigtramp2; - + /* If stepping through a line, keep going if still within it. - + Note that step_range_end is the address of the first instruction beyond the step range, and NOT the address of the last instruction within it! */ if (stop_pc >= step_range_start - && stop_pc < step_range_end -#if 0 -/* I haven't a clue what might trigger this clause, and it seems wrong - anyway, so I've disabled it until someone complains. -Stu 10/24/95 */ - - /* The step range might include the start of the - function, so if we are at the start of the - step range and either the stack or frame pointers - just changed, we've stepped outside */ - && !(stop_pc == step_range_start - && FRAME_FP (get_current_frame ()) - && (INNER_THAN (read_sp (), step_sp) - || FRAME_FP (get_current_frame ()) != step_frame_address)) -#endif - ) + && stop_pc < step_range_end) { /* We might be doing a BPSTAT_WHAT_SINGLE and getting a signal. So definately need to check for sigtramp here. */ @@ -2338,91 +2353,11 @@ wait_for_inferior () goto keep_going; } -#if 0 - /* I disabled this test because it was too complicated and slow. - The SKIP_PROLOGUE was especially slow, because it caused - unnecessary prologue examination on various architectures. - The code in the #else clause has been tested on the Sparc, - Mips, PA, and Power architectures, so it's pretty likely to - be correct. -Stu 10/24/95 */ - - /* See if we left the step range due to a subroutine call that - we should proceed to the end of. */ - - if (stop_func_start) - { - struct symtab *s; - - /* Do this after the IN_SIGTRAMP check; it might give - an error. */ - prologue_pc = stop_func_start; - - /* Don't skip the prologue if this is assembly source */ - s = find_pc_symtab (stop_pc); - if (s && s->language != language_asm) - SKIP_PROLOGUE (prologue_pc); - } - - if (!(INNER_THAN (step_sp, read_sp ())) /* don't mistake (sig)return - as a call */ - && ( /* Might be a non-recursive call. If the symbols are missing - enough that stop_func_start == prev_func_start even though - they are really two functions, we will treat some calls as - jumps. */ - stop_func_start != prev_func_start - - /* Might be a recursive call if either we have a prologue - or the call instruction itself saves the PC on the stack. */ - || prologue_pc != stop_func_start - || read_sp () != step_sp) - && ( /* PC is completely out of bounds of any known objfiles. Treat - like a subroutine call. */ - !stop_func_start - - /* If we do a call, we will be at the start of a function... */ - || stop_pc == stop_func_start - - /* ...except on the Alpha with -O (and also Irix 5 and - perhaps others), in which we might call the address - after the load of gp. Since prologues don't contain - calls, we can't return to within one, and we don't - jump back into them, so this check is OK. */ - - || stop_pc < prologue_pc - - /* ...and if it is a leaf function, the prologue might - consist of gp loading only, so the call transfers to - the first instruction after the prologue. */ - || (stop_pc == prologue_pc - - /* Distinguish this from the case where we jump back - to the first instruction after the prologue, - within a function. */ - && stop_func_start != prev_func_start) - - /* If we end up in certain places, it means we did a subroutine - call. I'm not completely sure this is necessary now that we - have the above checks with stop_func_start (and now that - find_pc_partial_function is pickier). */ - || IN_SOLIB_CALL_TRAMPOLINE (stop_pc, stop_func_name) - - /* If none of the above apply, it is a jump within a function, - or a return from a subroutine. The other case is longjmp, - which can no longer happen here as long as the - handling_longjmp stuff is working. */ - )) -#else - /* This test is a much more streamlined, (but hopefully correct) - replacement for the code above. It's been tested on the Sparc, - Mips, PA, and Power architectures with good results. */ - if (stop_pc == stop_func_start /* Quick test */ || (in_prologue (stop_pc, stop_func_start) && !IN_SOLIB_RETURN_TRAMPOLINE (stop_pc, stop_func_name)) || IN_SOLIB_CALL_TRAMPOLINE (stop_pc, stop_func_name) || stop_func_name == 0) -#endif - { /* It's a subroutine call. */ @@ -2853,7 +2788,6 @@ stop_stepping: while (parent_pid != inferior_pid); } - /* Assuming the inferior still exists, set these up for next time, just like we did above if we didn't break out of the loop. */ @@ -2941,23 +2875,21 @@ stopped_for_shlib_catchpoint (bs, cp_p) void normal_stop () { - -#ifdef HPUXHPPA /* As with the notification of thread events, we want to delay notifying the user that we've switched thread context until the inferior actually stops. (Note that there's no point in saying anything if the inferior has exited!) */ - if ((switched_from_inferior_pid != inferior_pid) && - target_has_execution) + if (may_switch_from_inferior_pid + && (switched_from_inferior_pid != inferior_pid) + && target_has_execution) { target_terminal_ours_for_output (); printf_filtered ("[Switched to %s]\n", target_pid_or_tid_to_str (inferior_pid)); switched_from_inferior_pid = inferior_pid; } -#endif /* Make sure that the current_frame's pc is correct. This is a correction for setting up the frame info before doing @@ -3190,7 +3122,7 @@ handle_command (args, from_tty) { nomem (0); } - old_chain = make_cleanup ((make_cleanup_func) freeargv, (char *) argv); + old_chain = make_cleanup_freeargv (argv); /* Walk through the args, looking for signal oursigs, signal names, and actions. Signal numbers and signal names may be interspersed with @@ -3357,7 +3289,7 @@ xdb_handle_command (args, from_tty) { nomem (0); } - old_chain = make_cleanup ((make_cleanup_func) freeargv, (char *) argv); + old_chain = make_cleanup_freeargv (argv); if (argv[1] != (char *) NULL) { char *argBuf; @@ -3455,15 +3387,82 @@ signals_info (signum_exp, from_tty) printf_filtered ("\nUse the \"handle\" command to change these tables.\n"); } +struct inferior_status +{ + enum target_signal stop_signal; + CORE_ADDR stop_pc; + bpstat stop_bpstat; + int stop_step; + int stop_stack_dummy; + int stopped_by_random_signal; + int trap_expected; + CORE_ADDR step_range_start; + CORE_ADDR step_range_end; + CORE_ADDR step_frame_address; + int step_over_calls; + CORE_ADDR step_resume_break_address; + int stop_after_trap; + int stop_soon_quietly; + CORE_ADDR selected_frame_address; + char *stop_registers; + + /* These are here because if call_function_by_hand has written some + registers and then decides to call error(), we better not have changed + any registers. */ + char *registers; + + int selected_level; + int breakpoint_proceeded; + int restore_stack_info; + int proceed_to_finish; +}; + + +static struct inferior_status *xmalloc_inferior_status PARAMS ((void)); +static struct inferior_status * +xmalloc_inferior_status () +{ + struct inferior_status *inf_status; + inf_status = xmalloc (sizeof (struct inferior_status)); + inf_status->stop_registers = xmalloc (REGISTER_BYTES); + inf_status->registers = xmalloc (REGISTER_BYTES); + return inf_status; +} + +static void free_inferior_status PARAMS ((struct inferior_status *)); +static void +free_inferior_status (inf_status) + struct inferior_status *inf_status; +{ + free (inf_status->registers); + free (inf_status->stop_registers); + free (inf_status); +} + +void +write_inferior_status_register (inf_status, regno, val) + struct inferior_status *inf_status; + int regno; + LONGEST val; +{ + int size = REGISTER_RAW_SIZE(regno); + void *buf = alloca (size); + store_signed_integer (buf, size, val); + memcpy (&inf_status->registers[REGISTER_BYTE (regno)], buf, size); +} + + + /* Save all of the information associated with the inferior<==>gdb connection. INF_STATUS is a pointer to a "struct inferior_status" (defined in inferior.h). */ -void -save_inferior_status (inf_status, restore_stack_info) - struct inferior_status *inf_status; +struct inferior_status * +save_inferior_status (restore_stack_info) int restore_stack_info; { + struct inferior_status *inf_status = xmalloc_inferior_status (); + inf_status->stop_signal = stop_signal; inf_status->stop_pc = stop_pc; inf_status->stop_step = stop_step; @@ -3478,20 +3477,21 @@ save_inferior_status (inf_status, restore_stack_info) inf_status->stop_soon_quietly = stop_soon_quietly; /* Save original bpstat chain here; replace it with copy of chain. If caller's caller is walking the chain, they'll be happier if we - hand them back the original chain when restore_i_s is called. */ + hand them back the original chain when restore_inferior_status is + called. */ inf_status->stop_bpstat = stop_bpstat; stop_bpstat = bpstat_copy (stop_bpstat); inf_status->breakpoint_proceeded = breakpoint_proceeded; inf_status->restore_stack_info = restore_stack_info; inf_status->proceed_to_finish = proceed_to_finish; - + memcpy (inf_status->stop_registers, stop_registers, REGISTER_BYTES); read_register_bytes (0, inf_status->registers, REGISTER_BYTES); record_selected_frame (&(inf_status->selected_frame_address), &(inf_status->selected_level)); - return; + return inf_status; } struct restore_selected_frame_args @@ -3502,11 +3502,6 @@ struct restore_selected_frame_args static int restore_selected_frame PARAMS ((PTR)); -/* Restore the selected frame. args is really a struct - restore_selected_frame_args * (declared as char * for catch_errors) - telling us what frame to restore. Returns 1 for success, or 0 for - failure. An error message will have been printed on error. */ - static int restore_selected_frame (args) PTR args; @@ -3560,6 +3555,7 @@ restore_inferior_status (inf_status) breakpoint_proceeded = inf_status->breakpoint_proceeded; proceed_to_finish = inf_status->proceed_to_finish; + /* FIXME: Is the restore of stop_registers always needed */ memcpy (stop_registers, inf_status->stop_registers, REGISTER_BYTES); /* The inferior can be gone if the user types "print exit(0)" @@ -3567,9 +3563,6 @@ restore_inferior_status (inf_status) if (target_has_execution) write_register_bytes (0, inf_status->registers, REGISTER_BYTES); - /* The inferior can be gone if the user types "print exit(0)" - (and perhaps other times). */ - /* FIXME: If we are being called after stopping in a function which is called from gdb, we should not be trying to restore the selected frame; it just prints a spurious error message (The @@ -3595,11 +3588,20 @@ restore_inferior_status (inf_status) select_frame (get_current_frame (), 0); } -} - + free_inferior_status (inf_status); +} void +discard_inferior_status (inf_status) + struct inferior_status *inf_status; +{ + /* See save_inferior_status for info on stop_bpstat. */ + bpstat_clear (&inf_status->stop_bpstat); + free_inferior_status (inf_status); +} + +static void set_follow_fork_mode_command (arg, from_tty, c) char *arg; int from_tty; @@ -3615,7 +3617,15 @@ set_follow_fork_mode_command (arg, from_tty, c) free (follow_fork_mode_string); follow_fork_mode_string = savestring (arg, strlen (arg)); } + + +static void build_infrun PARAMS ((void)); +static void +build_infrun () +{ + stop_registers = xmalloc (REGISTER_BYTES); +} void @@ -3625,6 +3635,8 @@ _initialize_infrun () register int numsigs; struct cmd_list_element *c; + build_infrun (); + add_info ("signals", signals_info, "What debugger does when program gets various signals.\n\ Specify a signal as argument to print info on that signal only."); diff --git a/gdb/inftarg.c b/gdb/inftarg.c index af5cd3d..43c2248 100644 --- a/gdb/inftarg.c +++ b/gdb/inftarg.c @@ -147,7 +147,7 @@ child_wait (pid, ourstatus) { int save_errno; int status; - char * execd_pathname; + char *execd_pathname = NULL; int exit_status; int related_pid; int syscall_id; diff --git a/gdb/jv-typeprint.c b/gdb/jv-typeprint.c index 59539a0..cddf758 100644 --- a/gdb/jv-typeprint.c +++ b/gdb/jv-typeprint.c @@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "jv-lang.h" #include "gdb_string.h" #include "typeprint.h" +#include "c-lang.h" static void java_type_print_derivation_info (stream, type) @@ -147,10 +148,12 @@ java_type_print_base (type, stream, show, level) fprintf_filtered (stream, "{\n"); if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0)) - if (TYPE_FLAGS (type) & TYPE_FLAG_STUB) - fprintfi_filtered (level + 4, stream, "<incomplete type>\n"); - else - fprintfi_filtered (level + 4, stream, "<no data fields>\n"); + { + if (TYPE_FLAGS (type) & TYPE_FLAG_STUB) + fprintfi_filtered (level + 4, stream, "<incomplete type>\n"); + else + fprintfi_filtered (level + 4, stream, "<no data fields>\n"); + } /* If there is a base class for this type, do not print the field that it occupies. */ @@ -171,12 +174,14 @@ java_type_print_base (type, stream, show, level) print_spaces_filtered (level + 4, stream); if (HAVE_CPLUS_STRUCT (type)) - if (TYPE_FIELD_PROTECTED (type, i)) - fprintf_filtered (stream, "protected "); - else if (TYPE_FIELD_PRIVATE (type, i)) - fprintf_filtered (stream, "private "); - else - fprintf_filtered (stream, "public "); + { + if (TYPE_FIELD_PROTECTED (type, i)) + fprintf_filtered (stream, "protected "); + else if (TYPE_FIELD_PRIVATE (type, i)) + fprintf_filtered (stream, "private "); + else + fprintf_filtered (stream, "public "); + } if (TYPE_FIELD_STATIC (type, i)) fprintf_filtered (stream, "static "); @@ -313,6 +318,9 @@ java_type_print_base (type, stream, show, level) /* LEVEL is the depth to indent lines by. */ +extern void +c_type_print_varspec_suffix PARAMS ((struct type *, GDB_FILE *, int, int, int)); + void java_print_type (type, varstring, stream, show, level) struct type *type; diff --git a/gdb/jv-valprint.c b/gdb/jv-valprint.c index 6bfae7e..797c16a 100644 --- a/gdb/jv-valprint.c +++ b/gdb/jv-valprint.c @@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" #include "symtab.h" #include "gdbtypes.h" +#include "gdbcore.h" #include "expression.h" #include "value.h" #include "demangle.h" @@ -27,6 +28,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "language.h" #include "jv-lang.h" #include "c-lang.h" +#include "annotate.h" int java_value_print (val, stream, format, pretty) @@ -402,6 +404,8 @@ java_print_value_fields (type, valaddr, address, stream, stream, format, 0, recurse+1, pretty); } } + else if (TYPE_FIELD_TYPE (type, i) == NULL) + fputs_filtered ("<unknown type>", stream); else { val_print (TYPE_FIELD_TYPE (type, i), diff --git a/gdb/language.h b/gdb/language.h index e336869..6b489a0 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -422,11 +422,11 @@ extern struct type * lang_bool_type PARAMS ((void)); /* Misc: The string representing a particular enum language. */ -extern const struct language_defn * -language_def PARAMS ((enum language)); +extern enum language language_enum PARAMS ((char *str)); -extern char * -language_str PARAMS ((enum language)); +extern const struct language_defn *language_def PARAMS ((enum language)); + +extern char *language_str PARAMS ((enum language)); /* Add a language to the set known by GDB (at initialization time). */ diff --git a/gdb/m32r-rom.c b/gdb/m32r-rom.c index 2be833e..ac18e1c 100644 --- a/gdb/m32r-rom.c +++ b/gdb/m32r-rom.c @@ -221,7 +221,8 @@ m32r_supply_register (regname, regnamelen, val, vallen) if (regno == ACCL_REGNUM) { /* special handling for 64-bit acc reg */ monitor_supply_register (ACCH_REGNUM, val); - if (val = (char *) strchr(val, ':')) /* skip past ':' to get 2nd word */ + val = strchr (val, ':'); /* skip past ':' to get 2nd word */ + if (val != NULL) monitor_supply_register (ACCL_REGNUM, val + 1); } else @@ -525,10 +526,12 @@ m32r_upload_command (args, from_tty) args = get_exec_file (1); if (args[0] != '/' && download_path == 0) - if (current_directory) - download_path = strsave (current_directory); - else - error ("Need to know default download path (use 'set download-path')"); + { + if (current_directory) + download_path = strsave (current_directory); + else + error ("Need to know default download path (use 'set download-path')"); + } start_time = time (NULL); monitor_printf ("uhip %s\r", server_addr); @@ -553,7 +556,8 @@ m32r_upload_command (args, from_tty) printf_filtered (" -- Ethernet load complete.\n"); end_time = time (NULL); - if (abfd = bfd_openr (args, 0)) + abfd = bfd_openr (args, 0); + if (abfd != NULL) { /* Download is done -- print section statistics */ if (bfd_check_format (abfd, bfd_object) == 0) { diff --git a/gdb/m32r-stub.c b/gdb/m32r-stub.c index 60c828f..7055fe0 100644 --- a/gdb/m32r-stub.c +++ b/gdb/m32r-stub.c @@ -189,6 +189,7 @@ static void stash_registers(void); static void restore_registers(void); static int prepare_to_step(int); static int finish_from_step(void); +static unsigned long crc32 (unsigned char *, int, unsigned long); static void gdb_error(char *, char *); static int gdb_putchar(int), gdb_puts(char *), gdb_write(char *, int); @@ -486,9 +487,11 @@ handle_exception(int exceptionVector) if ((registers[PC] & 2) != 0) prepare_to_step(1); } + return; case 'D': /* Detach */ +#if 0 /* I am interpreting this to mean, release the board from control by the remote stub. To do this, I am restoring the original (or at least previous) exception vectors. @@ -497,6 +500,32 @@ handle_exception(int exceptionVector) exceptionHandler (i, save_vectors[i]); putpacket ("OK"); return; /* continue the inferior */ +#else + strcpy(remcomOutBuffer,"OK"); + break; +#endif + case 'q': + ptr = &remcomInBuffer[1]; + if (*ptr++ == 'C' && + *ptr++ == 'R' && + *ptr++ == 'C' && + *ptr++ == ':') + { + unsigned long start, len, our_crc; + + if (hexToInt (&ptr, (int *) &start) && + *ptr++ == ',' && + hexToInt (&ptr, (int *) &len)) + { + remcomOutBuffer[0] = 'C'; + our_crc = crc32 ((unsigned char *) start, len, 0xffffffff); + mem2hex ((char *) &our_crc, + &remcomOutBuffer[1], + sizeof (long), + 0); + } /* else do nothing */ + } /* else do nothing */ + break; case 'k': /* kill the program */ continue; @@ -507,6 +536,39 @@ handle_exception(int exceptionVector) } } +/* qCRC support */ + +/* Table used by the crc32 function to calcuate the checksum. */ +static unsigned long crc32_table[256] = {0, 0}; + +static unsigned long +crc32 (buf, len, crc) + unsigned char *buf; + int len; + unsigned long crc; +{ + if (! crc32_table[1]) + { + /* Initialize the CRC table and the decoding table. */ + int i, j; + unsigned long c; + + for (i = 0; i < 256; i++) + { + for (c = i << 24, j = 8; j > 0; --j) + c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1); + crc32_table[i] = c; + } + } + + while (len--) + { + crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255]; + buf++; + } + return crc; +} + static int hex(ch) unsigned char ch; @@ -756,7 +818,7 @@ bin2mem (buf, mem, count, may_fault) case 0x4: /* $ */ case 0x5d: /* escape char */ buf++; - *buf += 0x20; + *buf |= 0x20; break; default: /* nothing */ @@ -985,13 +1047,13 @@ branchDestination(instr, branchCode) case 2: /* JL or JMP */ return registers[instr[1] & 0x0F] & ~3; /* jump thru a register */ case 3: /* BC, BNC, BL, BRA (short, 8-bit relative offset) */ - return (((int) instr) & ~3) + ((unsigned char) instr[1] << 2); + return (((int) instr) & ~3) + ((char) instr[1] << 2); case 4: /* BC, BNC, BL, BRA (long, 24-bit relative offset) */ return ((int) instr + - ((((unsigned char) instr[1] << 16) | (instr[2] << 8) | (instr[3])) << 2)); + ((((char) instr[1] << 16) | (instr[2] << 8) | (instr[3])) << 2)); case 5: /* BNE, BEQ (16-bit relative offset) */ case 6: /* BNEZ, BLTZ, BLEZ, BGTZ, BGEZ ,BEQZ (ditto) */ - return ((int) instr + ((((unsigned char) instr[2] << 8) | (instr[3])) << 2)); + return ((int) instr + ((((char) instr[2] << 8) | (instr[3])) << 2)); } /* An explanatory note: in the last three return expressions, I have diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c index acd34fa..b0195e8 100644 --- a/gdb/m32r-tdep.c +++ b/gdb/m32r-tdep.c @@ -265,25 +265,25 @@ static void decode_prologue (start_pc, scan_limit, if (current_pc >= scan_limit) { if (pl_endptr) + { #if 1 - if (after_stack_adjust != 0) - /* We did not find a "mv fp,sp", but we DID find - a stack_adjust. Is it safe to use that as the - end of the prologue? I just don't know. */ - { - *pl_endptr = after_stack_adjust; - if (framelength) - *framelength = framesize; - } - else + if (after_stack_adjust != 0) + /* We did not find a "mv fp,sp", but we DID find + a stack_adjust. Is it safe to use that as the + end of the prologue? I just don't know. */ + { + *pl_endptr = after_stack_adjust; + if (framelength) + *framelength = framesize; + } + else #endif - /* We reached the end of the loop without finding the end - of the prologue. No way to win -- we should report failure. - The way we do that is to return the original start_pc. - GDB will set a breakpoint at the start of the function (etc.) */ - - *pl_endptr = start_pc; - + /* We reached the end of the loop without finding the end + of the prologue. No way to win -- we should report failure. + The way we do that is to return the original start_pc. + GDB will set a breakpoint at the start of the function (etc.) */ + *pl_endptr = start_pc; + } return; } if (after_prologue == 0) @@ -703,22 +703,6 @@ m32r_fix_call_dummy (dummy, pc, fun, nargs, args, type, gcc_p) *(unsigned long *) (dummy) = (fun & 0x00ffffff) | 0xe8000000; } -/* Function: get_saved_register - Just call the generic_get_saved_register function. */ - -void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) - char *raw_buffer; - int *optimized; - CORE_ADDR *addrp; - struct frame_info *frame; - int regnum; - enum lval_type *lval; -{ - generic_get_saved_register (raw_buffer, optimized, addrp, - frame, regnum, lval); -} - /* Function: m32r_write_sp Because SP is really a read-only register that mirrors either SPU or SPI, diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c index d597efa..c751604 100644 --- a/gdb/m68k-tdep.c +++ b/gdb/m68k-tdep.c @@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gdbcore.h" #include "value.h" #include "gdb_string.h" +#include "inferior.h" /* Push an empty stack frame, to record the current PC, etc. */ @@ -372,7 +373,6 @@ int regno; { register int regi; register greg_t *regp = (greg_t *) gregsetp; - extern char registers[]; for (regi = 0 ; regi < R_PC ; regi++) { @@ -427,7 +427,6 @@ int regno; int regi; char *to; char *from; - extern char registers[]; for (regi = FP0_REGNUM ; regi < FPC_REGNUM ; regi++) { diff --git a/gdb/m88k-nat.c b/gdb/m88k-nat.c index 19e9392..27d7254 100644 --- a/gdb/m88k-nat.c +++ b/gdb/m88k-nat.c @@ -59,7 +59,6 @@ extern int have_symbol_file_p(); extern jmp_buf stack_jmp; extern int errno; -extern char registers[REGISTER_BYTES]; void fetch_inferior_registers (regno) @@ -262,7 +261,6 @@ fill_gregset (gregsetp, regno) { int regi; register greg_t *regp = (greg_t *) gregsetp; - extern char registers[]; for (regi = 0 ; regi <= R_R31 ; regi++) if ((regno == -1) || (regno == regi)) @@ -19,11 +19,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" -#include <setjmp.h> #include "top.h" #include "target.h" #include "inferior.h" #include "call-cmds.h" +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif #include "getopt.h" diff --git a/gdb/maint.c b/gdb/maint.c index cf4ceb7..f32b159 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -20,9 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" - -#if MAINTENANCE_CMDS /* Entire rest of file goes away if not including maint cmds */ - #include <ctype.h> #include <signal.h> #include "command.h" @@ -342,12 +339,9 @@ maintenance_translate_address (arg, from_tty) return; } -#endif /* MAINTENANCE_CMDS */ - void _initialize_maint_cmds () { -#if MAINTENANCE_CMDS /* Entire file goes away if not including maint cmds */ add_prefix_cmd ("maintenance", class_maintenance, maintenance_command, "Commands for use by GDB maintainers.\n\ Includes commands to dump specific internal GDB structures in\n\ @@ -445,5 +439,4 @@ When non-zero, this timeout is used instead of waiting forever for a target to\n finish a low-level step or continue operation. If the specified amount of time\n\ passes without a response from the target, an error occurs.", &setlist), &showlist); -#endif /* MAINTENANCE_CMDS */ } diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 1064490..6b6c86e 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -988,26 +988,28 @@ parse_symbol (sh, ax, ext_sh, bigend, section_offsets) case stMember: if (nfields == 0 && type_code == TYPE_CODE_UNDEF) - /* If the type of the member is Nil (or Void), - without qualifiers, assume the tag is an - enumeration. - Alpha cc -migrate enums are recognized by a zero - index and a zero symbol value. - DU 4.0 cc enums are recognized by a member type of - btEnum without qualifiers and a zero symbol value. */ - if (tsym.index == indexNil - || (tsym.index == 0 && sh->value == 0)) - type_code = TYPE_CODE_ENUM; - else - { - (*debug_swap->swap_tir_in) (bigend, - &ax[tsym.index].a_ti, - &tir); - if ((tir.bt == btNil || tir.bt == btVoid - || (tir.bt == btEnum && sh->value == 0)) - && tir.tq0 == tqNil) - type_code = TYPE_CODE_ENUM; - } + { + /* If the type of the member is Nil (or Void), + without qualifiers, assume the tag is an + enumeration. + Alpha cc -migrate enums are recognized by a zero + index and a zero symbol value. + DU 4.0 cc enums are recognized by a member type of + btEnum without qualifiers and a zero symbol value. */ + if (tsym.index == indexNil + || (tsym.index == 0 && sh->value == 0)) + type_code = TYPE_CODE_ENUM; + else + { + (*debug_swap->swap_tir_in) (bigend, + &ax[tsym.index].a_ti, + &tir); + if ((tir.bt == btNil || tir.bt == btVoid + || (tir.bt == btEnum && sh->value == 0)) + && tir.tq0 == tqNil) + type_code = TYPE_CODE_ENUM; + } + } nfields++; if (tsym.value > max_value) max_value = tsym.value; @@ -1090,10 +1092,12 @@ parse_symbol (sh, ax, ext_sh, bigend, section_offsets) here.) */ if (type_code == TYPE_CODE_UNDEF) - if (nfields > 1 && max_value == 0) - type_code = TYPE_CODE_UNION; - else - type_code = TYPE_CODE_STRUCT; + { + if (nfields > 1 && max_value == 0) + type_code = TYPE_CODE_UNION; + else + type_code = TYPE_CODE_STRUCT; + } /* Create a new type or use the pending type. */ pend = is_pending_symbol (cur_fdr, ext_sh); diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index e4aa2bb..80bf1c4 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -36,8 +36,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "opcode/mips.h" -/* Some MIPS boards don't support floating point, so we permit the - user to turn it off. */ +/* Some MIPS boards don't support floating point while others only + support single-precision floating-point operations. See also + FP_REGISTER_DOUBLE. */ enum mips_fpu_type { @@ -53,11 +54,17 @@ static int mips_fpu_type_auto = 1; static enum mips_fpu_type mips_fpu_type = MIPS_DEFAULT_FPU_TYPE; #define MIPS_FPU_TYPE mips_fpu_type - -#define VM_MIN_ADDRESS (CORE_ADDR)0x400000 +#ifndef MIPS_SAVED_REGSIZE +#define MIPS_SAVED_REGSIZE MIPS_REGSIZE +#endif /* Do not use "TARGET_IS_MIPS64" to test the size of floating point registers */ +#ifndef FP_REGISTER_DOUBLE #define FP_REGISTER_DOUBLE (REGISTER_VIRTUAL_SIZE(FP0_REGNUM) == 8) +#endif + + +#define VM_MIN_ADDRESS (CORE_ADDR)0x400000 #if 0 static int mips_in_lenient_prologue PARAMS ((CORE_ADDR, CORE_ADDR)); @@ -223,7 +230,7 @@ mips_use_struct_convention (gcc_p, type) struct type *type; { if (MIPS_EABI) - return (TYPE_LENGTH (type) > 2 * MIPS_REGSIZE); + return (TYPE_LENGTH (type) > 2 * MIPS_SAVED_REGSIZE); else return 1; /* Structures are returned by ref in extra arg0 */ } @@ -933,7 +940,7 @@ mips_find_saved_regs (fci) if (gen_mask & 0x80000000) { fci->saved_regs[ireg] = reg_position; - reg_position -= MIPS_REGSIZE; + reg_position -= MIPS_SAVED_REGSIZE; } /* The MIPS16 entry instruction saves $s0 and $s1 in the reverse order @@ -951,13 +958,13 @@ mips_find_saved_regs (fci) /* Check if the ra register was pushed on the stack. */ reg_position = fci->frame + PROC_REG_OFFSET (proc_desc); if (inst & 0x20) - reg_position -= MIPS_REGSIZE; + reg_position -= MIPS_SAVED_REGSIZE; /* Check if the s0 and s1 registers were pushed on the stack. */ for (reg = 16; reg < sreg_count+16; reg++) { fci->saved_regs[reg] = reg_position; - reg_position -= MIPS_REGSIZE; + reg_position -= MIPS_SAVED_REGSIZE; } } } @@ -969,7 +976,7 @@ mips_find_saved_regs (fci) /* The freg_offset points to where the first *double* register is saved. So skip to the high-order word. */ if (! GDB_TARGET_IS_MIPS64) - reg_position += MIPS_REGSIZE; + reg_position += MIPS_SAVED_REGSIZE; /* Fill in the offsets for the float registers which float_mask says were saved. */ @@ -977,7 +984,7 @@ mips_find_saved_regs (fci) if (float_mask & 0x80000000) { fci->saved_regs[FP0_REGNUM+ireg] = reg_position; - reg_position -= MIPS_REGSIZE; + reg_position -= MIPS_SAVED_REGSIZE; } fci->saved_regs[PC_REGNUM] = fci->saved_regs[RA_REGNUM]; @@ -999,7 +1006,7 @@ read_next_frame_reg(fi, regno) if (fi->saved_regs == NULL) mips_find_saved_regs (fi); if (fi->saved_regs[regno]) - return read_memory_integer(fi->saved_regs[regno], MIPS_REGSIZE); + return read_memory_integer(fi->saved_regs[regno], MIPS_SAVED_REGSIZE); } } return read_register (regno); @@ -1065,9 +1072,9 @@ mips_frame_saved_pc(frame) : (proc_desc ? PROC_PC_REG(proc_desc) : RA_REGNUM); if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc)) - saved_pc = read_memory_integer(frame->frame - MIPS_REGSIZE, MIPS_REGSIZE); + saved_pc = read_memory_integer (frame->frame - MIPS_SAVED_REGSIZE, MIPS_SAVED_REGSIZE); else - saved_pc = read_next_frame_reg(frame, pcreg); + saved_pc = read_next_frame_reg (frame, pcreg); return ADDR_BITS_REMOVE (saved_pc); } @@ -1359,7 +1366,7 @@ mips16_heuristic_proc_desc(start_pc, limit_pc, next_frame, sp) { PROC_REG_MASK(&temp_proc_desc) |= 1 << reg; set_reg_offset (reg, sp + offset); - offset += MIPS_REGSIZE; + offset += MIPS_SAVED_REGSIZE; } /* Check if the ra register was pushed on the stack. */ @@ -1368,7 +1375,7 @@ mips16_heuristic_proc_desc(start_pc, limit_pc, next_frame, sp) { PROC_REG_MASK(&temp_proc_desc) |= 1 << RA_REGNUM; set_reg_offset (RA_REGNUM, sp + offset); - offset -= MIPS_REGSIZE; + offset -= MIPS_SAVED_REGSIZE; } /* Check if the s0 and s1 registers were pushed on the stack. */ @@ -1376,7 +1383,7 @@ mips16_heuristic_proc_desc(start_pc, limit_pc, next_frame, sp) { PROC_REG_MASK(&temp_proc_desc) |= 1 << reg; set_reg_offset (reg, sp + offset); - offset -= MIPS_REGSIZE; + offset -= MIPS_SAVED_REGSIZE; } } } @@ -1754,7 +1761,7 @@ setup_arbitrary_frame (argc, argv) #define STACK_ARGSIZE 8 #else #define MIPS_NABI32 0 -#define STACK_ARGSIZE MIPS_REGSIZE +#define STACK_ARGSIZE MIPS_SAVED_REGSIZE #endif CORE_ADDR @@ -1782,13 +1789,13 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr) On at least one MIPS variant, stack frames need to be 128-bit aligned, so we round to this widest known alignment. */ sp = ROUND_DOWN (sp, 16); - struct_addr = ROUND_DOWN (struct_addr, MIPS_REGSIZE); + struct_addr = ROUND_DOWN (struct_addr, MIPS_SAVED_REGSIZE); /* Now make space on the stack for the args. We allocate more than necessary for EABI, because the first few arguments are passed in registers, but that's OK. */ for (argnum = 0; argnum < nargs; argnum++) - len += ROUND_UP (TYPE_LENGTH(VALUE_TYPE(args[argnum])), MIPS_REGSIZE); + len += ROUND_UP (TYPE_LENGTH(VALUE_TYPE(args[argnum])), MIPS_SAVED_REGSIZE); sp -= ROUND_UP (len, 16); /* Initialize the integer and float register pointers. */ @@ -1813,12 +1820,12 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr) /* The EABI passes structures that do not fit in a register by reference. In all other cases, pass the structure by value. */ - if (MIPS_EABI && len > MIPS_REGSIZE && + if (MIPS_EABI && len > MIPS_SAVED_REGSIZE && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)) { - store_address (valbuf, MIPS_REGSIZE, VALUE_ADDRESS (arg)); + store_address (valbuf, MIPS_SAVED_REGSIZE, VALUE_ADDRESS (arg)); typecode = TYPE_CODE_PTR; - len = MIPS_REGSIZE; + len = MIPS_SAVED_REGSIZE; val = valbuf; } else @@ -1887,11 +1894,11 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr) where gcc sometimes puts them on the stack. For maximum compatibility, we will put them in both places. */ - int odd_sized_struct = ((len > MIPS_REGSIZE) && - (len % MIPS_REGSIZE != 0)); + int odd_sized_struct = ((len > MIPS_SAVED_REGSIZE) && + (len % MIPS_SAVED_REGSIZE != 0)); while (len > 0) { - int partial_len = len < MIPS_REGSIZE ? len : MIPS_REGSIZE; + int partial_len = len < MIPS_SAVED_REGSIZE ? len : MIPS_SAVED_REGSIZE; if (argreg > MIPS_LAST_ARG_REGNUM || odd_sized_struct) { @@ -1901,16 +1908,18 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr) int longword_offset = 0; if (TARGET_BYTE_ORDER == BIG_ENDIAN) - if (STACK_ARGSIZE == 8 && - (typecode == TYPE_CODE_INT || - typecode == TYPE_CODE_PTR || - typecode == TYPE_CODE_FLT) && len <= 4) - longword_offset = STACK_ARGSIZE - len; - else if ((typecode == TYPE_CODE_STRUCT || - typecode == TYPE_CODE_UNION) && - TYPE_LENGTH (arg_type) < STACK_ARGSIZE) - longword_offset = STACK_ARGSIZE - len; - + { + if (STACK_ARGSIZE == 8 && + (typecode == TYPE_CODE_INT || + typecode == TYPE_CODE_PTR || + typecode == TYPE_CODE_FLT) && len <= 4) + longword_offset = STACK_ARGSIZE - len; + else if ((typecode == TYPE_CODE_STRUCT || + typecode == TYPE_CODE_UNION) && + TYPE_LENGTH (arg_type) < STACK_ARGSIZE) + longword_offset = STACK_ARGSIZE - len; + } + write_memory (sp + stack_offset + longword_offset, val, partial_len); } @@ -1934,12 +1943,12 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr) binaries. */ if (!MIPS_EABI - && (MIPS_REGSIZE < 8) + && MIPS_SAVED_REGSIZE < 8 && TARGET_BYTE_ORDER == BIG_ENDIAN - && (partial_len < MIPS_REGSIZE) + && partial_len < MIPS_SAVED_REGSIZE && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)) - regval <<= ((MIPS_REGSIZE - partial_len) * + regval <<= ((MIPS_SAVED_REGSIZE - partial_len) * TARGET_CHAR_BIT); write_register (argreg, regval); @@ -1981,21 +1990,33 @@ mips_push_arguments(nargs, args, sp, struct_return, struct_addr) } static void -mips_push_register(CORE_ADDR *sp, int regno) +mips_push_register (CORE_ADDR *sp, int regno) { char buffer[MAX_REGISTER_RAW_SIZE]; - int regsize = REGISTER_RAW_SIZE (regno); - + int regsize; + int offset; + if (MIPS_SAVED_REGSIZE < REGISTER_RAW_SIZE (regno)) + { + regsize = MIPS_SAVED_REGSIZE; + offset = (TARGET_BYTE_ORDER == BIG_ENDIAN + ? REGISTER_RAW_SIZE (regno) - MIPS_SAVED_REGSIZE + : 0); + } + else + { + regsize = REGISTER_RAW_SIZE (regno); + offset = 0; + } *sp -= regsize; read_register_gen (regno, buffer); - write_memory (*sp, buffer, regsize); + write_memory (*sp, buffer + offset, regsize); } /* MASK(i,j) == (1<<i) + (1<<(i+1)) + ... + (1<<j)). Assume i<=j<(MIPS_NUMREGS-1). */ #define MASK(i,j) (((1 << ((j)+1))-1) ^ ((1 << (i))-1)) void -mips_push_dummy_frame() +mips_push_dummy_frame () { int ireg; struct linked_proc_info *link = (struct linked_proc_info*) @@ -2046,7 +2067,7 @@ mips_push_dummy_frame() /* Save general CPU registers */ PROC_REG_MASK(proc_desc) = GEN_REG_SAVE_MASK; /* PROC_REG_OFFSET is the offset of the first saved register from FP. */ - PROC_REG_OFFSET(proc_desc) = sp - old_sp - MIPS_REGSIZE; + PROC_REG_OFFSET(proc_desc) = sp - old_sp - MIPS_SAVED_REGSIZE; for (ireg = 32; --ireg >= 0; ) if (PROC_REG_MASK(proc_desc) & (1 << ireg)) mips_push_register (&sp, ireg); @@ -2091,7 +2112,7 @@ mips_pop_frame() && frame->saved_regs[regnum]) write_register (regnum, read_memory_integer (frame->saved_regs[regnum], - MIPS_REGSIZE)); + MIPS_SAVED_REGSIZE)); } write_register (SP_REGNUM, new_sp); flush_cached_frames (); @@ -2119,12 +2140,15 @@ mips_pop_frame() free (pi_ptr); write_register (HI_REGNUM, - read_memory_integer (new_sp - 2*MIPS_REGSIZE, MIPS_REGSIZE)); + read_memory_integer (new_sp - 2*MIPS_SAVED_REGSIZE, + MIPS_SAVED_REGSIZE)); write_register (LO_REGNUM, - read_memory_integer (new_sp - 3*MIPS_REGSIZE, MIPS_REGSIZE)); + read_memory_integer (new_sp - 3*MIPS_SAVED_REGSIZE, + MIPS_SAVED_REGSIZE)); if (MIPS_FPU_TYPE != MIPS_FPU_NONE) write_register (FCRCS_REGNUM, - read_memory_integer (new_sp - 4*MIPS_REGSIZE, MIPS_REGSIZE)); + read_memory_integer (new_sp - 4*MIPS_SAVED_REGSIZE, + MIPS_SAVED_REGSIZE)); } } @@ -2614,14 +2638,143 @@ mips_in_lenient_prologue (startaddr, pc) } #endif -/* Given a return value in `regbuf' with a type `valtype', - extract and copy its value into `valbuf'. */ +/* Determine how a return value is stored within the MIPS register + file, given the return type `valtype'. */ + +struct return_value_word +{ + int len; + int reg; + int reg_offset; + int buf_offset; +}; + +static void return_value_location PARAMS ((struct type *, struct return_value_word *, struct return_value_word *)); + +static void +return_value_location (valtype, hi, lo) + struct type *valtype; + struct return_value_word *hi; + struct return_value_word *lo; +{ + int len = TYPE_LENGTH (valtype); + + if (TYPE_CODE (valtype) == TYPE_CODE_FLT + && ((MIPS_FPU_TYPE == MIPS_FPU_DOUBLE && (len == 4 || len == 8)) + || (MIPS_FPU_TYPE == MIPS_FPU_SINGLE && len == 4))) + { + if (!FP_REGISTER_DOUBLE && len == 8) + { + /* We need to break a 64bit float in two 32 bit halves and + spread them across a floating-point register pair. */ + lo->buf_offset = TARGET_BYTE_ORDER == BIG_ENDIAN ? 4 : 0; + hi->buf_offset = TARGET_BYTE_ORDER == BIG_ENDIAN ? 0 : 4; + lo->reg_offset = ((TARGET_BYTE_ORDER == BIG_ENDIAN + && REGISTER_RAW_SIZE (FP0_REGNUM) == 8) + ? 4 : 0); + hi->reg_offset = lo->reg_offset; + lo->reg = FP0_REGNUM + 0; + hi->reg = FP0_REGNUM + 1; + lo->len = 4; + hi->len = 4; + } + else + { + /* The floating point value fits in a single floating-point + register. */ + lo->reg_offset = ((TARGET_BYTE_ORDER == BIG_ENDIAN + && REGISTER_RAW_SIZE (FP0_REGNUM) == 8 + && len == 4) + ? 4 : 0); + lo->reg = FP0_REGNUM; + lo->len = len; + lo->buf_offset = 0; + hi->len = 0; + hi->reg_offset = 0; + hi->buf_offset = 0; + hi->reg = 0; + } + } + else + { + /* Locate a result possibly spread across two registers. */ + int regnum = 2; + lo->reg = regnum + 0; + hi->reg = regnum + 1; + if (TARGET_BYTE_ORDER == BIG_ENDIAN + && len < MIPS_SAVED_REGSIZE) + { + /* "un-left-justify" the value in the low register */ + lo->reg_offset = MIPS_SAVED_REGSIZE - len; + lo->len = len; + hi->reg_offset = 0; + hi->len = 0; + } + else if (TARGET_BYTE_ORDER == BIG_ENDIAN + && len > MIPS_SAVED_REGSIZE /* odd-size structs */ + && len < MIPS_SAVED_REGSIZE * 2 + && (TYPE_CODE (valtype) == TYPE_CODE_STRUCT || + TYPE_CODE (valtype) == TYPE_CODE_UNION)) + { + /* "un-left-justify" the value spread across two registers. */ + lo->reg_offset = 2 * MIPS_SAVED_REGSIZE - len; + lo->len = MIPS_SAVED_REGSIZE - lo->reg_offset; + hi->reg_offset = 0; + hi->len = len - lo->len; + } + else + { + /* Only perform a partial copy of the second register. */ + lo->reg_offset = 0; + hi->reg_offset = 0; + if (len > MIPS_SAVED_REGSIZE) + { + lo->len = MIPS_SAVED_REGSIZE; + hi->len = len - MIPS_SAVED_REGSIZE; + } + else + { + lo->len = len; + hi->len = 0; + } + } + if (TARGET_BYTE_ORDER == BIG_ENDIAN + && REGISTER_RAW_SIZE (regnum) == 8 + && MIPS_SAVED_REGSIZE == 4) + { + /* Account for the fact that only the least-signficant part + of the register is being used */ + lo->reg_offset += 4; + hi->reg_offset += 4; + } + lo->buf_offset = 0; + hi->buf_offset = lo->len; + } +} + +/* Given a return value in `regbuf' with a type `valtype', extract and + copy its value into `valbuf'. */ + void mips_extract_return_value (valtype, regbuf, valbuf) struct type *valtype; char regbuf[REGISTER_BYTES]; char *valbuf; { + struct return_value_word lo; + struct return_value_word hi; + return_value_location (valtype, &lo, &hi); + + memcpy (valbuf + lo.buf_offset, + regbuf + REGISTER_BYTE (lo.reg) + lo.reg_offset, + lo.len); + + if (hi.len > 0) + memcpy (valbuf + hi.buf_offset, + regbuf + REGISTER_BYTE (hi.reg) + hi.reg_offset, + hi.len); + +#if 0 int regnum; int offset = 0; int len = TYPE_LENGTH (valtype); @@ -2645,15 +2798,38 @@ mips_extract_return_value (valtype, regbuf, valbuf) } memcpy (valbuf, regbuf + REGISTER_BYTE (regnum) + offset, len); REGISTER_CONVERT_TO_TYPE (regnum, valtype, valbuf); +#endif } -/* Given a return value in `regbuf' with a type `valtype', - write it's value into the appropriate register. */ +/* Given a return value in `valbuf' with a type `valtype', write it's + value into the appropriate register. */ + void mips_store_return_value (valtype, valbuf) struct type *valtype; char *valbuf; { + char raw_buffer[MAX_REGISTER_RAW_SIZE]; + struct return_value_word lo; + struct return_value_word hi; + return_value_location (valtype, &lo, &hi); + + memset (raw_buffer, 0, sizeof (raw_buffer)); + memcpy (raw_buffer + lo.reg_offset, valbuf + lo.buf_offset, lo.len); + write_register_bytes (REGISTER_BYTE (lo.reg), + raw_buffer, + REGISTER_RAW_SIZE (lo.reg)); + + if (hi.len > 0) + { + memset (raw_buffer, 0, sizeof (raw_buffer)); + memcpy (raw_buffer + hi.reg_offset, valbuf + hi.buf_offset, hi.len); + write_register_bytes (REGISTER_BYTE (hi.reg), + raw_buffer, + REGISTER_RAW_SIZE (hi.reg)); + } + +#if 0 int regnum; int offset = 0; int len = TYPE_LENGTH (valtype); @@ -2681,6 +2857,7 @@ mips_store_return_value (valtype, valbuf) write_register_bytes(REGISTER_BYTE (regnum), raw_buffer, len > REGISTER_RAW_SIZE (regnum) ? len : REGISTER_RAW_SIZE (regnum)); +#endif } /* Exported procedure: Is PC in the signal trampoline code */ diff --git a/gdb/mn10200-tdep.c b/gdb/mn10200-tdep.c index cb7ead0..bdc3e94 100644 --- a/gdb/mn10200-tdep.c +++ b/gdb/mn10200-tdep.c @@ -870,19 +870,6 @@ mn10200_frame_saved_pc (fi) return (read_memory_integer (fi->frame, REGISTER_SIZE) & 0xffffff); } -void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) - char *raw_buffer; - int *optimized; - CORE_ADDR *addrp; - struct frame_info *frame; - int regnum; - enum lval_type *lval; -{ - generic_get_saved_register (raw_buffer, optimized, addrp, - frame, regnum, lval); -} - /* Function: init_extra_frame_info Setup the frame's frame pointer, pc, and frame addresses for saved registers. Most of the work is done in mn10200_analyze_prologue(). diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c index 6c43176..795e685 100644 --- a/gdb/mn10300-tdep.c +++ b/gdb/mn10300-tdep.c @@ -693,19 +693,6 @@ mn10300_frame_saved_pc (fi) return (read_memory_integer (fi->frame + adjust, REGISTER_SIZE)); } -void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) - char *raw_buffer; - int *optimized; - CORE_ADDR *addrp; - struct frame_info *frame; - int regnum; - enum lval_type *lval; -{ - generic_get_saved_register (raw_buffer, optimized, addrp, - frame, regnum, lval); -} - /* Function: mn10300_init_extra_frame_info Setup the frame's frame pointer, pc, and frame addresses for saved registers. Most of the work is done in mn10300_analyze_prologue(). diff --git a/gdb/monitor.c b/gdb/monitor.c index dc47d8c..44dc825 100644 --- a/gdb/monitor.c +++ b/gdb/monitor.c @@ -492,7 +492,7 @@ readchar (timeout) return c; if (c == SERIAL_TIMEOUT) -#if 0 /* MAINTENANCE_CMDS */ +#if 0 /* I fail to see how detaching here can be useful */ if (in_monitor_wait) /* Watchdog went off */ { @@ -1055,7 +1055,7 @@ monitor_wait (pid, status) old_chain = make_cleanup (monitor_wait_cleanup, &old_timeout); RDEBUG(("MON wait\n")) -#if 0 /* MAINTENANCE_CMDS */ +#if 0 /* This is somthing other than a maintenance command */ in_monitor_wait = 1; timeout = watchdog > 0 ? watchdog : -1; @@ -1133,10 +1133,11 @@ monitor_fetch_register (regno) int i; name = current_monitor->regnames[regno]; - RDEBUG(("MON fetchreg %d '%s'\n",regno,name)) + RDEBUG(("MON fetchreg %d '%s'\n", regno, name ? name : "(null name)")) if (!name || (*name == '\0')) - { RDEBUG(("No register known for %d\n",regno)) + { + RDEBUG (("No register known for %d\n", regno)) supply_register (regno, zerobuf); return; } @@ -1155,8 +1156,8 @@ monitor_fetch_register (regno) monitor_expect (current_monitor->getreg.resp_delim, NULL, 0); /* Handle case of first 32 registers listed in pairs. */ if (current_monitor->flags & MO_32_REGS_PAIRED - && regno & 1 == 1 && regno < 32) - { RDEBUG(("EXP getreg.resp_delim\n")) ; + && (regno & 1) != 0 && regno < 32) + { RDEBUG(("EXP getreg.resp_delim\n")) ; monitor_expect (current_monitor->getreg.resp_delim, NULL, 0); } } @@ -1538,14 +1539,19 @@ static char * longlong_hexchars(unsigned long long value, } longlongendswap(disbuf) ; /* FIXME: ONly on big endian hosts */ while (scan < limit) - { c = *scan++ ; /* a byte of our long long value */ + { + c = *scan++; /* a byte of our long long value */ if (leadzero) - if (c == 0) continue ; - else leadzero = 0 ; /* henceforth we print even zeroes */ - nib = c >> 4 ; /* high nibble bits */ - *outbuff++ = hexlate[nib] ; - nib = c & 0x0f ; /* low nibble bits */ - *outbuff++ = hexlate[nib] ; + { + if (c == 0) + continue; + else + leadzero = 0; /* henceforth we print even zeroes */ + } + nib = c >> 4; /* high nibble bits */ + *outbuff++ = hexlate[nib]; + nib = c & 0x0f; /* low nibble bits */ + *outbuff++ = hexlate[nib]; } return outbuff ; } @@ -1808,7 +1814,7 @@ monitor_read_memory (memaddr, myaddr, len) /* send the memory examine command */ if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE) - monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len - 1); + monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len); else if (current_monitor->flags & MO_GETMEM_16_BOUNDARY) monitor_printf (current_monitor->getmem.cmdb, dumpaddr); else diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 971a7d4..91f4aa4 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -35,6 +35,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "obstack.h" #include "gdb_string.h" +#include "breakpoint.h" + /* Prototypes for local functions */ #if defined(USE_MMALLOC) && defined(HAVE_MMAP) diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 2a5df06..31bd124 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -176,14 +176,11 @@ typedef struct { } ExportEntry; - /* The "objstats" structure provides a place for gdb to record some interesting information about its internal state at runtime, on a per objfile basis, such as information about the number of symbols read, size of string table (if any), etc. */ -#if MAINTENANCE_CMDS - struct objstats { int n_minsyms; /* Number of minimal symbols read */ int n_psyms; /* Number of partial symbols read */ @@ -198,13 +195,6 @@ struct objstats { extern void print_objfile_statistics PARAMS ((void)); extern void print_symbol_bcache_statistics PARAMS ((void)); -#else - -#define OBJSTAT(objfile, expr) /* Nothing */ -#define OBJSTATS /* Nothing */ - -#endif /* MAINTENANCE_CMDS */ - /* Master structure for keeping track of each file from which gdb reads symbols. There are several ways these get allocated: 1. The main symbol file, symfile_objfile, set by the symbol-file command, diff --git a/gdb/parse.c b/gdb/parse.c index af68fbf..76ed1b6 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -41,6 +41,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser-defs.h" #include "gdbcmd.h" #include "symfile.h" /* for overlay functions */ +#include <ctype.h> /* Global variables declared in parser-defs.h (and commented there). */ struct expression *expout; @@ -56,9 +57,7 @@ char *namecopy; int paren_depth; int comma_terminates; -#ifdef MAINTENANCE_CMDS static int expressiondebug = 0; -#endif extern int hp_som_som_object_present; @@ -1196,19 +1195,15 @@ parse_exp_1 (stringptr, block, comma) /* Convert expression from postfix form as generated by yacc parser, to a prefix form. */ -#ifdef MAINTENANCE_CMDS if (expressiondebug) dump_prefix_expression (expout, gdb_stdout, "before conversion to prefix form"); -#endif /* MAINTENANCE_CMDS */ prefixify_expression (expout); -#ifdef MAINTENANCE_CMDS if (expressiondebug) dump_postfix_expression (expout, gdb_stdout, "after conversion to prefix form"); -#endif /* MAINTENANCE_CMDS */ *stringptr = lexptr; return expout; @@ -1339,7 +1334,6 @@ _initialize_parse () "<variable (not text or data), no debug info>", NULL); -#ifdef MAINTENANCE_CMDS add_show_from_set ( add_set_cmd ("expressiondebug", class_maintenance, var_zinteger, (char *)&expressiondebug, @@ -1347,5 +1341,4 @@ _initialize_parse () When non-zero, the internal representation of expressions will be printed.", &setlist), &showlist); -#endif } diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 0f0b8ab..306fa74 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -860,7 +860,6 @@ print_command_1 (exp, inspect, voidprint) if (exp && *exp) { - extern int objectprint; struct type *type; expr = parse_expression (exp); old_chain = make_cleanup ((make_cleanup_func) free_current_contents, @@ -1897,10 +1896,9 @@ print_frame_args (func, fi, num, stream) if (val) { -#ifdef GDB_TARGET_IS_D10V - if (SYMBOL_CLASS(sym) == LOC_REGPARM && TYPE_CODE(VALUE_TYPE(val)) == TYPE_CODE_PTR) + if (GDB_TARGET_IS_D10V + && SYMBOL_CLASS(sym) == LOC_REGPARM && TYPE_CODE(VALUE_TYPE(val)) == TYPE_CODE_PTR) TYPE_LENGTH(VALUE_TYPE(val)) = 2; -#endif val_print (VALUE_TYPE (val), VALUE_CONTENTS (val), 0, VALUE_ADDRESS (val), stream, 0, 0, 2, Val_no_prettyprint); diff --git a/gdb/procfs.c b/gdb/procfs.c index ff20240..6822f42 100644 --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -582,6 +582,10 @@ static int open_proc_file PARAMS ((int, struct procinfo *, int, int)); static void close_proc_file PARAMS ((struct procinfo *)); +static void close_proc_file_cleanup PARAMS ((void*)); + +static struct cleanup *make_cleanup_close_proc_file PARAMS ((struct procinfo *)); + static void unconditionally_kill_inferior PARAMS ((struct procinfo *)); static NORETURN void proc_init_failed PARAMS ((struct procinfo *, char *, int)) ATTR_NORETURN; @@ -4024,6 +4028,20 @@ close_proc_file (pip) } } +static void +close_proc_file_cleanup (pip) + void *pip; +{ + close_proc_file ((struct procinfo *) pip); +} + +static struct cleanup * +make_cleanup_close_proc_file (pip) + struct procinfo *pip; +{ + return make_cleanup (close_proc_file_cleanup, pip); +} + /* LOCAL FUNCTION @@ -4760,7 +4778,7 @@ info_proc (args, from_tty) { nomem (0); } - make_cleanup (freeargv, (char *) argv); + make_cleanup_freeargv (argv); while (*argv != NULL) { @@ -4822,7 +4840,7 @@ info_proc (args, from_tty) /* NOTREACHED */ } pid = pip->pid; - make_cleanup (close_proc_file, pip); + make_cleanup_close_proc_file (pip); } else if (**argv != '\000') { @@ -4874,7 +4892,7 @@ No process. Start debugging a program or specify an explicit process ID."); if (!open_proc_file ((*lwps << 16) | pid, pip, O_RDONLY, 0)) continue; - make_cleanup (close_proc_file, pip); + make_cleanup_close_proc_file (pip); if (!procfs_read_status (pip)) { diff --git a/gdb/ptx4-nat.c b/gdb/ptx4-nat.c index 564b799..ef83ccc 100644 --- a/gdb/ptx4-nat.c +++ b/gdb/ptx4-nat.c @@ -51,7 +51,6 @@ fill_gregset (gregsetp, regno) int regno; { int regi; - extern char registers[]; for (regi = 0 ; regi < NUM_REGS ; regi++) { @@ -89,7 +88,6 @@ fill_fpregset (fpregsetp, regno) int regi; char *to; char *from; - extern char registers[]; /* FIXME: see m68k-tdep.c for an example, for the m68k. */ } diff --git a/gdb/pyr-xdep.c b/gdb/pyr-xdep.c index dd6d9a9..5c95bd6 100644 --- a/gdb/pyr-xdep.c +++ b/gdb/pyr-xdep.c @@ -200,7 +200,6 @@ core_file_command (filename, from_tty) int from_tty; { int val; - extern char registers[]; /* Discard all vestiges of any previous core file and mark data and stack spaces as empty. */ diff --git a/gdb/remote-e7000.c b/gdb/remote-e7000.c index 92e69b3..9343d53 100644 --- a/gdb/remote-e7000.c +++ b/gdb/remote-e7000.c @@ -927,6 +927,7 @@ e7000_fetch_registers () { case bfd_mach_sh3: case bfd_mach_sh3e: + case bfd_mach_sh4: wanted = want_sh3; } #else @@ -2079,6 +2080,7 @@ e7000_wait (pid, status) { case bfd_mach_sh3: case bfd_mach_sh3e: + case bfd_mach_sh4: wanted_nopc = want_sh3_nopc; } #else diff --git a/gdb/remote-mips.c b/gdb/remote-mips.c index c92f8b7..5e5a1c5 100644 --- a/gdb/remote-mips.c +++ b/gdb/remote-mips.c @@ -672,7 +672,6 @@ mips_readchar (timeout) static int state = 0; int mips_monitor_prompt_len = strlen (mips_monitor_prompt); -#ifdef MAINTENANCE_CMDS { int i; @@ -680,18 +679,17 @@ mips_readchar (timeout) if (i == -1 && watchdog > 0) i = watchdog; } -#endif if (state == mips_monitor_prompt_len) timeout = 1; ch = SERIAL_READCHAR (mips_desc, timeout); -#ifdef MAINTENANCE_CMDS + if (ch == SERIAL_TIMEOUT && timeout == -1) /* Watchdog went off */ { target_mourn_inferior (); error ("Watchdog has expired. Target detached.\n"); } -#endif + if (ch == SERIAL_EOF) mips_error ("End of file from remote"); if (ch == SERIAL_ERROR) @@ -1561,7 +1559,7 @@ device is attached to the target board (e.g., /dev/ttya).\n" optional local TFTP name. */ if ((argv = buildargv (name)) == NULL) nomem(0); - make_cleanup ((make_cleanup_func) freeargv, argv); + make_cleanup_freeargv (argv); serial_port_name = strsave (argv[0]); if (argv[1]) /* remote TFTP name specified? */ diff --git a/gdb/remote-sds.c b/gdb/remote-sds.c index 3ab5f44..74a8680 100644 --- a/gdb/remote-sds.c +++ b/gdb/remote-sds.c @@ -471,8 +471,8 @@ sds_wait (pid, status) retlen = sds_send (buf, 1); if (remote_debug) { - fprintf_unfiltered (gdb_stderr, "Signals: %04x %02x %02x\n", - ((int) buf[0]) << 8 + buf[1], + fprintf_unfiltered (gdb_stderr, "Signals: %02x%02x %02x %02x\n", + buf[0], buf[1], buf[2], buf[3]); } message_pending = 0; @@ -925,11 +925,7 @@ getmessage (buf, forever) if (forever) { -#ifdef MAINTENANCE_CMDS timeout = watchdog > 0 ? watchdog : -1; -#else - timeout = -1; -#endif } else @@ -953,13 +949,11 @@ getmessage (buf, forever) if (c == SERIAL_TIMEOUT) { -#ifdef MAINTENANCE_CMDS if (forever) /* Watchdog went off. Kill the target. */ { target_mourn_inferior (); error ("Watchdog has expired. Target detached.\n"); } -#endif if (remote_debug) puts_filtered ("Timed out.\n"); goto retry; diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c index e10fced..cf41b40 100644 --- a/gdb/remote-sim.c +++ b/gdb/remote-sim.c @@ -39,6 +39,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Prototypes */ +extern int (*ui_loop_hook) PARAMS ((int signo)); + static void dump_mem PARAMS ((char *buf, int len)); static void init_callbacks PARAMS ((void)); @@ -478,7 +480,7 @@ gdbsim_create_inferior (exec_file, args, env) strcat (arg_buf, " "); strcat (arg_buf, args); argv = buildargv (arg_buf); - make_cleanup ((make_cleanup_func) freeargv, argv); + make_cleanup_freeargv (argv); } else argv = NULL; @@ -559,7 +561,7 @@ gdbsim_open (args, from_tty) argv = buildargv (arg_buf); if (argv == NULL) error ("Insufficient memory available to allocate simulator arg list."); - make_cleanup ((make_cleanup_func) freeargv, argv); + make_cleanup_freeargv (argv); init_callbacks (); gdbsim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, argv); @@ -668,6 +670,9 @@ static int gdb_os_poll_quit (p) host_callback *p; { + if (ui_loop_hook != NULL) + ui_loop_hook (0); + notice_quit (); if (quit_flag) /* gdb's idea of quit */ { diff --git a/gdb/remote.c b/gdb/remote.c index f5b6f7c..9f84f5d 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -203,6 +203,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "dcache.h" +#include <ctype.h> #ifdef USG #include <sys/types.h> #endif @@ -268,6 +269,8 @@ static void remote_detach PARAMS ((char *args, int from_tty)); static void remote_interrupt PARAMS ((int signo)); +static void remote_interrupt_twice PARAMS ((int signo)); + static void interrupt_query PARAMS ((void)); static void set_thread PARAMS ((int, int)); @@ -430,11 +433,6 @@ extern int remote_timeout; static int remote_break; -/* Has the user attempted to interrupt the target? If so, then offer - the user the opportunity to bail out completely if he interrupts - again. */ -static int interrupted_already = 0; - /* Descriptor for I/O to remote machine. Initialize it to NULL so that remote_open knows that we don't have a file open when the program starts. */ @@ -1613,37 +1611,49 @@ remote_resume (pid, step, siggnal) static void (*ofunc) PARAMS ((int)); +/* The command line interface's stop routine. This function is installed + as a signal handler for SIGINT. The first time a user requests a + stop, we call remote_stop to send a break or ^C. If there is no + response from the target (it didn't stop when the user requested it), + we ask the user if he'd like to detach from the target. */ static void remote_interrupt (signo) int signo; { - remote_stop (); + /* If this doesn't work, try more severe steps. */ + signal (signo, remote_interrupt_twice); + + if (remote_debug) + printf_unfiltered ("remote_interrupt called\n"); + + target_stop (); +} + +/* The user typed ^C twice. */ + +static void +remote_interrupt_twice (signo) + int signo; +{ + signal (signo, ofunc); + interrupt_query (); signal (signo, remote_interrupt); } - + +/* This is the generic stop called via the target vector. When a target + interrupt is requested, either by the command line or the GUI, we + will eventually end up here. */ static void remote_stop () { - if (!interrupted_already) - { - /* Send a break or a ^C, depending on user preference. */ - interrupted_already = 1; - - if (remote_debug) - printf_unfiltered ("remote_stop called\n"); + /* Send a break or a ^C, depending on user preference. */ + if (remote_debug) + printf_unfiltered ("remote_stop called\n"); - if (remote_break) - SERIAL_SEND_BREAK (remote_desc); - else - SERIAL_WRITE (remote_desc, "\003", 1); - } + if (remote_break) + SERIAL_SEND_BREAK (remote_desc); else - { - signal (SIGINT, ofunc); - interrupt_query (); - signal (SIGINT, remote_interrupt); - interrupted_already = 0; - } + SERIAL_WRITE (remote_desc, "\003", 1); } /* Ask the user what to do when an interrupt is received. */ @@ -1705,7 +1715,6 @@ remote_wait (pid, status) { unsigned char *p; - interrupted_already = 0; ofunc = signal (SIGINT, remote_interrupt); getpkt ((char *) buf, 1); signal (SIGINT, ofunc); @@ -2093,7 +2102,10 @@ remote_address_masked (addr) This is accomplished by sending a no-op memory write of zero length to the target at the specified address. It does not suffice to send the whole packet, since many stubs strip the eighth bit and subsequently - compute a wrong checksum, which causes real havoc with remote_write_bytes. */ + compute a wrong checksum, which causes real havoc with remote_write_bytes. + + NOTE: This can still lose if the serial line is not eight-bit clean. In + cases like this, the user should clear "remotebinarydownload". */ static void check_binary_download (addr) CORE_ADDR addr; @@ -2153,7 +2165,7 @@ remote_write_bytes (memaddr, myaddr, len) if (remote_register_buf_size != 0) max_buf_size = min (max_buf_size, remote_register_buf_size); - /* Subtract header overhead from max payload size - $M<memaddr>,<len>:#nn */ + /* Subtract header overhead from max payload size - $M<memaddr>,<len>:#nn */ max_buf_size -= 2 + hexnumlen (memaddr + len - 1) + 1 + hexnumlen (len) + 4; origlen = len; @@ -2182,7 +2194,7 @@ remote_write_bytes (memaddr, myaddr, len) p += hexnumstr (p, (ULONGEST) memaddr); *p++ = ','; - plen = p; /* remember where len field goes */ + plen = p; /* remember where len field goes */ p += hexnumstr (p, (ULONGEST) todo); *p++ = ':'; *p = '\0'; @@ -2192,10 +2204,10 @@ remote_write_bytes (memaddr, myaddr, len) binary character). */ if (remote_binary_download) { - int escaped = 0; - for (i = 0; + int escaped = 0; + for (i = 0; (i < todo) && (i + escaped) < (max_buf_size - 2); - i++) + i++) { switch (myaddr[i] & 0xff) { @@ -2213,18 +2225,18 @@ remote_write_bytes (memaddr, myaddr, len) } } - if (i < todo) - { - /* Escape chars have filled up the buffer prematurely, - and we have actually sent fewer bytes than planned. - Fix-up the length field of the packet. */ + if (i < todo) + { + /* Escape chars have filled up the buffer prematurely, + and we have actually sent fewer bytes than planned. + Fix-up the length field of the packet. */ /* FIXME: will fail if new len is a shorter string than old len. */ - plen += hexnumstr (plen, (ULONGEST) i); - *plen++ = ':'; - } + plen += hexnumstr (plen, (ULONGEST) i); + *plen++ = ':'; + } } else { @@ -2731,11 +2743,7 @@ getpkt (buf, forever) if (forever) { -#ifdef MAINTENANCE_CMDS timeout = watchdog > 0 ? watchdog : -1; -#else - timeout = -1; -#endif } else @@ -2759,13 +2767,11 @@ getpkt (buf, forever) if (c == SERIAL_TIMEOUT) { -#ifdef MAINTENANCE_CMDS if (forever) /* Watchdog went off. Kill the target. */ { target_mourn_inferior (); error ("Watchdog has expired. Target detached.\n"); } -#endif if (remote_debug) puts_filtered ("Timed out.\n"); goto retry; @@ -2810,7 +2816,7 @@ remote_kill () /* Use catch_errors so the user can quit from gdb even when we aren't on speaking terms with the remote system. */ - catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR); + catch_errors ((catch_errors_ftype*) putpkt, "k", "", RETURN_MASK_ERROR); /* Don't wait for it to die. I'm not really sure it matters whether we do or not. For the existing stubs, kill is a noop. */ diff --git a/gdb/reply_mig_hack.awk b/gdb/reply_mig_hack.awk index 310a40c..b41f508 100644 --- a/gdb/reply_mig_hack.awk +++ b/gdb/reply_mig_hack.awk @@ -16,7 +16,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # This awk script hacks the output of mig-generated reply server code # so that it allows replies with just the error-code in them (as this is diff --git a/gdb/rom68k-rom.c b/gdb/rom68k-rom.c index 831d299..4fe6bad 100644 --- a/gdb/rom68k-rom.c +++ b/gdb/rom68k-rom.c @@ -96,7 +96,7 @@ static char *rom68k_inits[] = {".\r\r", NULL}; /* Exits pm/pr & download cmds */ static struct monitor_ops rom68k_cmds ; static void -init_rom68k_cmds(void) +init_rom68k_cmds (void) { rom68k_cmds.flags = 0; rom68k_cmds.init = rom68k_inits; /* monitor init string */ @@ -108,41 +108,41 @@ init_rom68k_cmds(void) rom68k_cmds.clr_all_break = "cb *\r"; rom68k_cmds.fill = "fm %x %x %x\r"; rom68k_cmds.setmem.cmdb = "pm %x %x\r"; - rom68k_cmds.setmem.cmdw = "pm;w %x %x\r"; - rom68k_cmds.setmem.cmdl = "pm;l %x %x\r"; + rom68k_cmds.setmem.cmdw = "pm.w %x %x\r"; + rom68k_cmds.setmem.cmdl = "pm.l %x %x\r"; rom68k_cmds.setmem.cmdll = NULL; rom68k_cmds.setmem.resp_delim = NULL; rom68k_cmds.setmem.term = NULL; rom68k_cmds.setmem.term_cmd = NULL; rom68k_cmds.getmem.cmdb = "dm %x %x\r"; - rom68k_cmds.getmem.cmdw = "dm;w %x %x\r"; - rom68k_cmds.getmem.cmdl = "dm;l %x %x\r"; + rom68k_cmds.getmem.cmdw = "dm.w %x %x\r"; + rom68k_cmds.getmem.cmdl = "dm.l %x %x\r"; rom68k_cmds.getmem.cmdll = NULL; rom68k_cmds.getmem.resp_delim = " "; rom68k_cmds.getmem.term = NULL; - rom68k_cmds.getmem.term_cmd = NULL; + rom68k_cmds.getmem.term_cmd = NULL; rom68k_cmds.setreg.cmd = "pr %s %x\r"; rom68k_cmds.setreg.resp_delim = NULL; rom68k_cmds.setreg.term = NULL; - rom68k_cmds.setreg.term_cmd = NULL ; - rom68k_cmds.getreg.cmd = "pr %s\r" ; - rom68k_cmds.getreg.resp_delim = ": " ; - rom68k_cmds.getreg.term = "= " ; - rom68k_cmds.getreg.term_cmd = ";\r" ; - rom68k_cmds.dump_registers = "dr\r" ; + rom68k_cmds.setreg.term_cmd = NULL; + rom68k_cmds.getreg.cmd = "pr %s\r"; + rom68k_cmds.getreg.resp_delim = ": "; + rom68k_cmds.getreg.term = "= "; + rom68k_cmds.getreg.term_cmd = ".\r"; + rom68k_cmds.dump_registers = "dr\r"; rom68k_cmds.register_pattern = - "\\(\\w+\\)=\\([0-9a-fA-F]+\\( +[0-9a-fA-F]+\\b\\)*\\)" ; + "\\(\\w+\\)=\\([0-9a-fA-F]+\\( +[0-9a-fA-F]+\\b\\)*\\)"; rom68k_cmds.supply_register = rom68k_supply_register; rom68k_cmds.load_routine = NULL; rom68k_cmds.load = "dc\r"; - rom68k_cmds.loadresp = "Waiting for S-records from host;.. "; + rom68k_cmds.loadresp = "Waiting for S-records from host... "; rom68k_cmds.prompt = "ROM68K :-> "; rom68k_cmds.line_term = "\r"; - rom68k_cmds.cmd_end = ";\r"; + rom68k_cmds.cmd_end = ".\r"; rom68k_cmds.target = &rom68k_ops; rom68k_cmds.stopbits = SERIAL_1_STOPBITS; rom68k_cmds.regnames = rom68k_regnames; - rom68k_cmds.magic = MONITOR_OPS_MAGIC ; + rom68k_cmds.magic = MONITOR_OPS_MAGIC; } /* init_rom68k_cmds */ static void diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c index c74a36f..78f5a6b 100644 --- a/gdb/rs6000-nat.c +++ b/gdb/rs6000-nat.c @@ -92,7 +92,6 @@ fetch_inferior_registers (regno) int regno; { int ii; - extern char registers[]; if (regno < 0) { /* for all registers */ @@ -152,7 +151,6 @@ void store_inferior_registers (regno) int regno; { - extern char registers[]; errno = 0; diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 57f1df1..b45f62ee 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -80,7 +80,7 @@ rs6000_init_extra_frame_info (fromleaf, fi) fi->extra_info->initial_sp = 0; if (fi->next != (CORE_ADDR) 0 && fi->pc < TEXT_SEGMENT_BASE) - /* We're in get_prev_frame_info */ + /* We're in get_prev_frame */ /* and this is a special signal frame. */ /* (fi->pc will be some low address in the kernel, */ /* to which the signal handler returns). */ @@ -684,15 +684,18 @@ pop_frame () if (stop_stack_dummy) { -#ifdef USE_GENERIC_DUMMY_FRAMES - generic_pop_dummy_frame (); - flush_cached_frames (); - return; -#else - if (dummy_frame_count) - pop_dummy_frame (); - return; -#endif + if (USE_GENERIC_DUMMY_FRAMES) + { + generic_pop_dummy_frame (); + flush_cached_frames (); + return; + } + else + { + if (dummy_frame_count) + pop_dummy_frame (); + return; + } } /* Make sure that all registers are valid. */ @@ -818,10 +821,11 @@ push_arguments (nargs, args, sp, struct_return, struct_addr) CORE_ADDR saved_sp; -#ifndef USE_GENERIC_DUMMY_FRAMES - if ( dummy_frame_count <= 0) - printf_unfiltered ("FATAL ERROR -push_arguments()! frame not found!!\n"); -#endif /* GENERIC_DUMMY_FRAMES */ + if (!USE_GENERIC_DUMMY_FRAMES) + { + if (dummy_frame_count <= 0) + printf_unfiltered ("FATAL ERROR -push_arguments()! frame not found!!\n"); + } /* The first eight words of ther arguments are passed in registers. Copy them appropriately. @@ -899,15 +903,19 @@ both: ran_out_of_registers_for_arguments: -#ifdef USE_GENERIC_DUMMY_FRAMES - saved_sp = read_sp (); -#else - /* location for 8 parameters are always reserved. */ - sp -= 4 * 8; + if (USE_GENERIC_DUMMY_FRAMES) + { + saved_sp = read_sp (); + } + else + { + /* location for 8 parameters are always reserved. */ + sp -= 4 * 8; + + /* another six words for back chain, TOC register, link register, etc. */ + sp -= 24; + } - /* another six words for back chain, TOC register, link register, etc. */ - sp -= 24; -#endif /* GENERIC_DUMMY_FRAMES */ /* if there are more arguments, allocate space for them in the stack, then push them starting from the ninth one. */ @@ -977,14 +985,15 @@ ran_out_of_registers_for_arguments: /* Secure stack areas first, before doing anything else. */ write_register (SP_REGNUM, sp); -#ifndef USE_GENERIC_DUMMY_FRAMES -/* we want to copy 24 bytes of target's frame to dummy's frame, - then set back chain to point to new frame. */ - - saved_sp = dummy_frame_addr [dummy_frame_count - 1]; - read_memory (saved_sp, tmp_buffer, 24); - write_memory (sp, tmp_buffer, 24); -#endif /* GENERIC_DUMMY_FRAMES */ + if (!USE_GENERIC_DUMMY_FRAMES) + { + /* we want to copy 24 bytes of target's frame to dummy's frame, + then set back chain to point to new frame. */ + + saved_sp = dummy_frame_addr [dummy_frame_count - 1]; + read_memory (saved_sp, tmp_buffer, 24); + write_memory (sp, tmp_buffer, 24); + } /* set back chain properly */ store_address (tmp_buffer, 4, saved_sp); @@ -1146,10 +1155,11 @@ frame_saved_pc (fi) if (fi->signal_handler_caller) return read_memory_integer (fi->frame + SIG_FRAME_PC_OFFSET, 4); -#ifdef USE_GENERIC_DUMMY_FRAMES - if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame)) - return generic_read_register_dummy(fi->pc, fi->frame, PC_REGNUM); -#endif /* GENERIC_DUMMY_FRAMES */ + if (USE_GENERIC_DUMMY_FRAMES) + { + if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame)) + return generic_read_register_dummy(fi->pc, fi->frame, PC_REGNUM); + } func_start = get_pc_function_start (fi->pc); @@ -1328,10 +1338,11 @@ rs6000_frame_chain (thisframe) { CORE_ADDR fp; -#ifdef USE_GENERIC_DUMMY_FRAMES - if (PC_IN_CALL_DUMMY (thisframe->pc, thisframe->frame, thisframe->frame)) - return thisframe->frame; /* dummy frame same as caller's frame */ -#endif /* GENERIC_DUMMY_FRAMES */ + if (USE_GENERIC_DUMMY_FRAMES) + { + if (PC_IN_CALL_DUMMY (thisframe->pc, thisframe->frame, thisframe->frame)) + return thisframe->frame; /* dummy frame same as caller's frame */ + } if (inside_entry_file (thisframe->pc) || thisframe->pc == entry_point_address ()) @@ -1348,17 +1359,17 @@ rs6000_frame_chain (thisframe) else fp = read_memory_integer ((thisframe)->frame, 4); -#ifdef USE_GENERIC_DUMMY_FRAMES - { - CORE_ADDR fpp, lr; + if (USE_GENERIC_DUMMY_FRAMES) + { + CORE_ADDR fpp, lr; + + lr = read_register (LR_REGNUM); + if (lr == entry_point_address ()) + if (fp != 0 && (fpp = read_memory_integer (fp, 4)) != 0) + if (PC_IN_CALL_DUMMY (lr, fpp, fpp)) + return fpp; + } - lr = read_register (LR_REGNUM); - if (lr == entry_point_address ()) - if (fp != 0 && (fpp = read_memory_integer (fp, 4)) != 0) - if (PC_IN_CALL_DUMMY (lr, fpp, fpp)) - return fpp; - } -#endif /* GENERIC_DUMMY_FRAMES */ return fp; } @@ -1391,25 +1402,6 @@ gdb_print_insn_powerpc (memaddr, info) } #endif -/* Function: get_saved_register - Just call the generic_get_saved_register function. */ - -#ifdef USE_GENERIC_DUMMY_FRAMES -void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) - char *raw_buffer; - int *optimized; - CORE_ADDR *addrp; - struct frame_info *frame; - int regnum; - enum lval_type *lval; -{ - generic_get_saved_register (raw_buffer, optimized, addrp, - frame, regnum, lval); -} -#endif - - /* Handling the various PowerPC/RS6000 variants. */ diff --git a/gdb/ser-e7kpc.c b/gdb/ser-e7kpc.c index 8be5db9..fae0859 100644 --- a/gdb/ser-e7kpc.c +++ b/gdb/ser-e7kpc.c @@ -300,7 +300,7 @@ dosasync_write (fd, buf, len) ((short *)dummy)[3] = 0; for (i = 0; i < len ; i++) { - dummy[8 + i ^ 1] = buf[i]; + dummy[(8 + i) ^ 1] = buf[i]; } /* Wait for the card to get ready */ diff --git a/gdb/ser-tcp.c b/gdb/ser-tcp.c index c551337..e6443a0 100644 --- a/gdb/ser-tcp.c +++ b/gdb/ser-tcp.c @@ -25,6 +25,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <arpa/inet.h> #include <netdb.h> #include <sys/socket.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif #ifndef __CYGWIN32__ #include <netinet/tcp.h> @@ -33,6 +36,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "signals.h" #include "gdb_string.h" +extern int (*ui_loop_hook) PARAMS ((int)); + struct tcp_ttystate { int bogus; @@ -234,11 +239,54 @@ tcp_readchar (scb, timeout) int timeout; { int status; + int delta; if (scb->bufcnt-- > 0) return *scb->bufp++; - status = wait_for(scb, timeout); + /* We have to be able to keep the GUI alive here, so we break the original + timeout into steps of 1 second, running the "keep the GUI alive" hook + each time through the loop. + + Also, timeout = 0 means to poll, so we just set the delta to 0, so we + will only go through the loop once. */ + + delta = (timeout == 0 ? 0 : 1); + while (1) + { + + /* N.B. The UI may destroy our world (for instance by calling + remote_stop,) in which case we want to get out of here as + quickly as possible. It is not safe to touch scb, since + someone else might have freed it. The ui_loop_hook signals that + we should exit by returning 1. */ + + if (ui_loop_hook) + { + if (ui_loop_hook (0)) + return SERIAL_TIMEOUT; + } + + status = wait_for (scb, delta); + timeout -= delta; + + /* If we got a character or an error back from wait_for, then we can + break from the loop before the timeout is completed. */ + + if (status != SERIAL_TIMEOUT) + { + break; + } + + /* If we have exhausted the original timeout, then generate + a SERIAL_TIMEOUT, and pass it out of the loop. */ + + else if (timeout == 0) + { + status == SERIAL_TIMEOUT; + break; + } + } if (status < 0) return status; diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c index f279c94..dc5236f 100644 --- a/gdb/ser-unix.c +++ b/gdb/ser-unix.c @@ -85,9 +85,7 @@ static int hardwire_setstopbits PARAMS ((serial_t, int)); void _initialize_ser_hardwire PARAMS ((void)); -#ifdef __CYGWIN32__ -extern void (*ui_loop_hook) PARAMS ((int)); -#endif +extern int (*ui_loop_hook) PARAMS ((int)); /* Open up a real live device for serial I/O */ @@ -434,10 +432,6 @@ wait_for(scb, timeout) serial_t scb; int timeout; { -#ifndef __CYGWIN32__ - scb->timeout_remaining = 0; -#endif - #ifdef HAVE_SGTTY { struct timeval tv; @@ -550,32 +544,40 @@ hardwire_readchar (scb, timeout) serial_t scb; int timeout; { - int status; -#ifdef __CYGWIN32__ - int t; -#endif + int status, delta; + int detach = 0; if (scb->bufcnt-- > 0) return *scb->bufp++; -#ifdef __CYGWIN32__ if (timeout > 0) timeout++; -#endif + /* We have to be able to keep the GUI alive here, so we break the original + timeout into steps of 1 second, running the "keep the GUI alive" hook + each time through the loop. + Also, timeout = 0 means to poll, so we just set the delta to 0, so we + will only go through the loop once. */ + + delta = (timeout == 0 ? 0 : 1); while (1) { -#ifdef __CYGWIN32__ - t = timeout == 0 ? 0 : 1; - scb->timeout_remaining = timeout < 0 ? timeout : timeout - t; - status = wait_for (scb, t); - /* -2 means disable timer */ + /* N.B. The UI may destroy our world (for instance by calling + remote_stop,) in which case we want to get out of here as + quickly as possible. It is not safe to touch scb, since + someone else might have freed it. The ui_loop_hook signals that + we should exit by returning 1. */ + if (ui_loop_hook) - ui_loop_hook (-2); -#else - status = wait_for (scb, timeout); -#endif + detach = ui_loop_hook (0); + + if (detach) + return SERIAL_TIMEOUT; + + scb->timeout_remaining = (timeout < 0 ? timeout : timeout - delta); + status = wait_for (scb, delta); + if (status < 0) return status; @@ -592,10 +594,8 @@ hardwire_readchar (scb, timeout) timeout = scb->timeout_remaining; continue; } -#ifdef __CYGWIN32__ else if (scb->timeout_remaining < 0) continue; -#endif else return SERIAL_TIMEOUT; } diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c index dd94506..2b25f0d 100644 --- a/gdb/sh-tdep.c +++ b/gdb/sh-tdep.c @@ -96,6 +96,7 @@ struct { { sh_reg_names, bfd_mach_sh }, { sh3_reg_names, bfd_mach_sh3 }, { sh3e_reg_names, bfd_mach_sh3e }, + { sh3e_reg_names, bfd_mach_sh4 }, { NULL, 0 } }; @@ -578,22 +579,6 @@ sh_fix_call_dummy (dummy, pc, fun, nargs, args, type, gcc_p) } #endif -/* Function: get_saved_register - Just call the generic_get_saved_register function. */ - -void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) - char *raw_buffer; - int *optimized; - CORE_ADDR *addrp; - struct frame_info *frame; - int regnum; - enum lval_type *lval; -{ - generic_get_saved_register (raw_buffer, optimized, addrp, - frame, regnum, lval); -} - /* Modify the actual processor type. */ @@ -631,6 +616,10 @@ sh_show_regs (args, from_tty) else cpu = 0; + /* FIXME: sh4 has more registers */ + if (cpu == bfd_mach_sh4) + cpu = bfd_mach_sh3; + printf_filtered ("PC=%08x SR=%08x PR=%08x MACH=%08x MACHL=%08x\n", read_register (PC_REGNUM), read_register (SR_REGNUM), diff --git a/gdb/sh3-rom.c b/gdb/sh3-rom.c index ab4aa69..a4675a6 100644 --- a/gdb/sh3-rom.c +++ b/gdb/sh3-rom.c @@ -65,10 +65,12 @@ sh3_supply_register (regname, regnamelen, val, vallen) case 'G': case 'V': if (regname[1] == 'B' && regname[2] == 'R') - if (regname[0] == 'G') - regno = VBR_REGNUM; - else - regno = GBR_REGNUM; + { + if (regname[0] == 'G') + regno = VBR_REGNUM; + else + regno = GBR_REGNUM; + } break; case 'S': if (regname[1] == 'S' && regname[2] == 'R') @@ -84,10 +86,12 @@ sh3_supply_register (regname, regnamelen, val, vallen) { case 'M': if (regname[1] == 'A' && regname[2] == 'C') - if (regname[3] == 'H') - regno = MACH_REGNUM; - else if (regname[3] == 'L') - regno = MACL_REGNUM; + { + if (regname[3] == 'H') + regno = MACH_REGNUM; + else if (regname[3] == 'L') + regno = MACL_REGNUM; + } break; case 'R': if (regname[1] == '0' && regname[2] == '-' && regname[3] == '7') diff --git a/gdb/sol-thread.c b/gdb/sol-thread.c index 3fe6268..e76f831 100644 --- a/gdb/sol-thread.c +++ b/gdb/sol-thread.c @@ -106,7 +106,7 @@ static td_thragent_t *main_ta; static int sol_thread_active = 0; static struct cleanup * save_inferior_pid PARAMS ((void)); -static void restore_inferior_pid PARAMS ((int pid)); +static void restore_inferior_pid PARAMS ((void *pid)); static char *td_err_string PARAMS ((td_err_e errcode)); static char *td_state_string PARAMS ((td_thr_state_e statecode)); static int thread_to_lwp PARAMS ((int thread_id, int default_lwp)); @@ -428,14 +428,14 @@ NOTES static struct cleanup * save_inferior_pid () { - return make_cleanup (restore_inferior_pid, inferior_pid); + return make_cleanup (restore_inferior_pid, (void*) inferior_pid); } static void restore_inferior_pid (pid) - int pid; + void *pid; { - inferior_pid = pid; + inferior_pid = (int) pid; } @@ -1436,7 +1436,6 @@ sol_core_files_info (t) orig_core_ops.to_files_info (t); } -#ifdef MAINTENANCE_CMDS /* Worker bee for info sol-thread command. This is a callback function that gets called once for each Solaris thread (ie. not kernel thread) in the inferior. Print anything interesting that we can think of. */ @@ -1501,7 +1500,6 @@ info_solthreads (args, from_tty) TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY, TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS); } -#endif /* MAINTENANCE_CMDS */ static int ignore (addr, contents) @@ -1648,10 +1646,8 @@ _initialize_sol_thread () procfs_suppress_run = 1; -#ifdef MAINTENANCE_CMDS add_cmd ("sol-threads", class_maintenance, info_solthreads, "Show info on Solaris user threads.\n", &maintenanceinfolist); -#endif /* MAINTENANCE_CMDS */ memcpy(&orig_core_ops, &core_ops, sizeof (struct target_ops)); memcpy(&core_ops, &sol_core_ops, sizeof (struct target_ops)); diff --git a/gdb/solib.c b/gdb/solib.c index 6d6fd4a..aa2dd46 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -1310,7 +1310,7 @@ clear_solib() { struct so_list *next; char *bfd_filename; - + while (so_list_head) { if (so_list_head -> sections) diff --git a/gdb/source.c b/gdb/source.c index 9fe9742..8b330de 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -976,10 +976,12 @@ identify_source_line (s, line, mid_statement, pc) /* Print source lines from the file of symtab S, starting with line number LINE and stopping before line number STOPLINE. */ +static void print_source_lines_base PARAMS ((struct symtab *s, int line, int stopline, int noerror)); static void print_source_lines_base (s, line, stopline, noerror) struct symtab *s; - int line, stopline; + int line; + int stopline; int noerror; { register int c; @@ -1284,19 +1286,21 @@ list_command (arg, from_tty) else if (sal.symtab == 0) error ("No default source file yet. Do \"help list\"."); else if (no_end) - if (lines_to_list % 2 == 0) - print_source_lines (sal.symtab, - max (sal.line - (lines_to_list / 2), 1), - sal.line + (lines_to_list / 2), 0); - else - /* If lines_to_list is odd, then we round down in - * one of the lines_to_list/2 computations, round up in - * the other, so the total window size around the specified - * line comes out right. - */ - print_source_lines (sal.symtab, - max (sal.line - (lines_to_list / 2), 1), - sal.line + ((1+lines_to_list) / 2), 0); + { + if (lines_to_list % 2 == 0) + print_source_lines (sal.symtab, + max (sal.line - (lines_to_list / 2), 1), + sal.line + (lines_to_list / 2), 0); + else + /* If lines_to_list is odd, then we round down in + * one of the lines_to_list/2 computations, round up in + * the other, so the total window size around the specified + * line comes out right. + */ + print_source_lines (sal.symtab, + max (sal.line - (lines_to_list / 2), 1), + sal.line + ((1+lines_to_list) / 2), 0); + } else print_source_lines (sal.symtab, sal.line, (dummy_end diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c index 113b32c..f5b948e 100644 --- a/gdb/sparc-tdep.c +++ b/gdb/sparc-tdep.c @@ -673,7 +673,7 @@ isbranch (instruction, addr, target) The argument RAW_BUFFER must point to aligned memory. */ void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) +sparc_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) char *raw_buffer; int *optimized; CORE_ADDR *addrp; diff --git a/gdb/stabsread.c b/gdb/stabsread.c index c5d31e1..a143dba 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -196,9 +196,12 @@ static const char vb_name[] = { '_','v','b',CPLUS_MARKER,'\0' }; address of the corresponding int, which is not the same on a big-endian machine. */ -#ifndef BELIEVE_PCC_PROMOTION +#if !defined (BELIEVE_PCC_PROMOTION) #define BELIEVE_PCC_PROMOTION 0 #endif +#if !defined (BELIEVE_PCC_PROMOTION_TYPE) +#define BELIEVE_PCC_PROMOTION_TYPE 0 +#endif static struct complaint invalid_cpp_abbrev_complaint = {"invalid C++ abbreviation `%s'", 0, 0}; @@ -1732,80 +1735,80 @@ define_symbol (valu, string, desc, type, objfile) if (processing_gcc_compilation || BELIEVE_PCC_PROMOTION) break; -#if !BELIEVE_PCC_PROMOTION - { - /* This is the signed type which arguments get promoted to. */ - static struct type *pcc_promotion_type; - /* This is the unsigned type which arguments get promoted to. */ - static struct type *pcc_unsigned_promotion_type; - - /* Call it "int" because this is mainly C lossage. */ - if (pcc_promotion_type == NULL) - pcc_promotion_type = - init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT, - 0, "int", NULL); - - if (pcc_unsigned_promotion_type == NULL) - pcc_unsigned_promotion_type = - init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT, - TYPE_FLAG_UNSIGNED, "unsigned int", NULL); - -#if defined(BELIEVE_PCC_PROMOTION_TYPE) - /* This macro is defined on machines (e.g. sparc) where - we should believe the type of a PCC 'short' argument, - but shouldn't believe the address (the address is - the address of the corresponding int). - - My guess is that this correction, as opposed to changing - the parameter to an 'int' (as done below, for PCC - on most machines), is the right thing to do - on all machines, but I don't want to risk breaking - something that already works. On most PCC machines, - the sparc problem doesn't come up because the calling - function has to zero the top bytes (not knowing whether - the called function wants an int or a short), so there - is little practical difference between an int and a short - (except perhaps what happens when the GDB user types - "print short_arg = 0x10000;"). - - Hacked for SunOS 4.1 by gnu@cygnus.com. In 4.1, the compiler - actually produces the correct address (we don't need to fix it - up). I made this code adapt so that it will offset the symbol - if it was pointing at an int-aligned location and not - otherwise. This way you can use the same gdb for 4.0.x and - 4.1 systems. - - If the parameter is shorter than an int, and is integral - (e.g. char, short, or unsigned equivalent), and is claimed to - be passed on an integer boundary, don't believe it! Offset the - parameter's address to the tail-end of that integer. */ - - if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (pcc_promotion_type) - && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT - && 0 == SYMBOL_VALUE (sym) % TYPE_LENGTH (pcc_promotion_type)) - { - SYMBOL_VALUE (sym) += TYPE_LENGTH (pcc_promotion_type) - - TYPE_LENGTH (SYMBOL_TYPE (sym)); - } - break; - -#else /* no BELIEVE_PCC_PROMOTION_TYPE. */ - - /* If PCC says a parameter is a short or a char, - it is really an int. */ - if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (pcc_promotion_type) - && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT) - { - SYMBOL_TYPE (sym) = - TYPE_UNSIGNED (SYMBOL_TYPE (sym)) - ? pcc_unsigned_promotion_type - : pcc_promotion_type; - } - break; - -#endif /* no BELIEVE_PCC_PROMOTION_TYPE. */ - } -#endif /* !BELIEVE_PCC_PROMOTION. */ + if (!BELIEVE_PCC_PROMOTION) + { + /* This is the signed type which arguments get promoted to. */ + static struct type *pcc_promotion_type; + /* This is the unsigned type which arguments get promoted to. */ + static struct type *pcc_unsigned_promotion_type; + + /* Call it "int" because this is mainly C lossage. */ + if (pcc_promotion_type == NULL) + pcc_promotion_type = + init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT, + 0, "int", NULL); + + if (pcc_unsigned_promotion_type == NULL) + pcc_unsigned_promotion_type = + init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT, + TYPE_FLAG_UNSIGNED, "unsigned int", NULL); + + if (BELIEVE_PCC_PROMOTION_TYPE) + { + /* This is defined on machines (e.g. sparc) where we + should believe the type of a PCC 'short' argument, + but shouldn't believe the address (the address is the + address of the corresponding int). + + My guess is that this correction, as opposed to + changing the parameter to an 'int' (as done below, + for PCC on most machines), is the right thing to do + on all machines, but I don't want to risk breaking + something that already works. On most PCC machines, + the sparc problem doesn't come up because the calling + function has to zero the top bytes (not knowing + whether the called function wants an int or a short), + so there is little practical difference between an + int and a short (except perhaps what happens when the + GDB user types "print short_arg = 0x10000;"). + + Hacked for SunOS 4.1 by gnu@cygnus.com. In 4.1, the + compiler actually produces the correct address (we + don't need to fix it up). I made this code adapt so + that it will offset the symbol if it was pointing at + an int-aligned location and not otherwise. This way + you can use the same gdb for 4.0.x and 4.1 systems. + + If the parameter is shorter than an int, and is + integral (e.g. char, short, or unsigned equivalent), + and is claimed to be passed on an integer boundary, + don't believe it! Offset the parameter's address to + the tail-end of that integer. */ + + if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (pcc_promotion_type) + && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT + && 0 == SYMBOL_VALUE (sym) % TYPE_LENGTH (pcc_promotion_type)) + { + SYMBOL_VALUE (sym) += TYPE_LENGTH (pcc_promotion_type) + - TYPE_LENGTH (SYMBOL_TYPE (sym)); + } + break; + } + else + { + /* If PCC says a parameter is a short or a char, + it is really an int. */ + if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (pcc_promotion_type) + && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT) + { + SYMBOL_TYPE (sym) = + TYPE_UNSIGNED (SYMBOL_TYPE (sym)) + ? pcc_unsigned_promotion_type + : pcc_promotion_type; + } + break; + } + } case 'P': /* acc seems to use P to declare the prototypes of functions that @@ -2147,7 +2150,7 @@ define_symbol (valu, string, desc, type, objfile) while (*p && *p == ';') { p++; - if (*p && *p == 'l') + if (*p && p[0] == 'l' && p[1] == '(') { /* GNU extensions for live range splitting may be appended to the end of the stab string. eg. "l(#1,#2);l(#3,#5)" */ diff --git a/gdb/stack.c b/gdb/stack.c index e36316e..20a6124 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -65,6 +65,8 @@ static void up_silently_command PARAMS ((char *, int)); void frame_command PARAMS ((char *, int)); +static void current_frame_command PARAMS ((char *, int)); + static void select_frame_command PARAMS ((char *, int)); static void print_frame_arg_vars PARAMS ((struct frame_info *, GDB_FILE *)); @@ -134,9 +136,10 @@ static int print_stack_frame_base_stub PARAMS ((char *)); /* Show and print the frame arguments. Pass the args the way catch_errors wants them. */ +static int show_and_print_stack_frame_stub PARAMS ((void *args)); static int show_and_print_stack_frame_stub (args) - char *args; + void *args; { struct print_stack_frame_args *p = (struct print_stack_frame_args *)args; @@ -152,9 +155,10 @@ show_and_print_stack_frame_stub (args) /* Show or print the frame arguments. Pass the args the way catch_errors wants them. */ +static int print_stack_frame_stub PARAMS ((void *args)); static int print_stack_frame_stub (args) - char *args; + void *args; { struct print_stack_frame_args *p = (struct print_stack_frame_args *)args; @@ -182,9 +186,10 @@ print_stack_frame_base_stub (args) /* print the frame arguments to the terminal. Pass the args the way catch_errors wants them. */ +static int print_only_stack_frame_stub PARAMS ((void *)); static int print_only_stack_frame_stub (args) - char *args; + void *args; { struct print_stack_frame_args *p = (struct print_stack_frame_args *)args; @@ -215,7 +220,7 @@ print_stack_frame_base (fi, level, source) args.source = source; args.args = 1; - catch_errors (print_stack_frame_stub, (char *)&args, "", RETURN_MASK_ALL); + catch_errors (print_stack_frame_stub, &args, "", RETURN_MASK_ALL); } /* Show and print a stack frame briefly. FRAME_INFI should be the frame info @@ -241,7 +246,7 @@ show_and_print_stack_frame (fi, level, source) args.source = source; args.args = 1; - catch_errors (show_and_print_stack_frame_stub, (char *)&args, "", RETURN_MASK_ALL); + catch_errors (show_and_print_stack_frame_stub, &args, "", RETURN_MASK_ALL); } @@ -294,8 +299,7 @@ print_only_stack_frame (fi, level, source) args.source = source; args.args = 1; - catch_errors (print_only_stack_frame_stub, - (char *)&args, "", RETURN_MASK_ALL); + catch_errors (print_only_stack_frame_stub, &args, "", RETURN_MASK_ALL); } struct print_args_args { @@ -574,6 +578,7 @@ print_frame_info_base (fi, level, source, args) } +#if 0 void stack_publish_stopped_with_no_frame() { @@ -581,6 +586,7 @@ stack_publish_stopped_with_no_frame() return; } +#endif /* Show or print the frame info. If this is the tui, it will be shown in the source display */ @@ -971,6 +977,7 @@ backtrace_limit_info (arg, from_tty) /* Print briefly all stack frames or just the innermost COUNT frames. */ +static void backtrace_command_1 PARAMS ((char *count_exp, int show_locals, int from_tty)); static void backtrace_command_1 (count_exp, show_locals, from_tty) char *count_exp; @@ -1080,7 +1087,7 @@ backtrace_command (arg, from_tty) int i; argv = buildargv(arg); - old_chain = make_cleanup ((make_cleanup_func) freeargv, (char *)argv); + old_chain = make_cleanup_freeargv (argv); argc = 0; for (i = 0; (argv[i] != (char *)NULL); i++) { @@ -1089,7 +1096,7 @@ backtrace_command (arg, from_tty) for (j = 0; (j < strlen(argv[i])); j++) argv[i][j] = tolower(argv[i][j]); - if (argIndicatingFullTrace < 0 && subsetCompare(argv[i], "full")) + if (argIndicatingFullTrace < 0 && subset_compare (argv[i], "full")) argIndicatingFullTrace = argc; else { @@ -1132,6 +1139,7 @@ backtrace_command (arg, from_tty) do_cleanups(old_chain); } +static void backtrace_full_command PARAMS ((char *arg, int from_tty)); static void backtrace_full_command (arg, from_tty) char *arg; @@ -1522,6 +1530,7 @@ select_and_print_frame(fi, level) /* Select frame FI, noting that its stack level is LEVEL. Be silent if not the TUI */ +#if 0 void select_and_maybe_print_frame (fi, level) struct frame_info *fi; @@ -1532,6 +1541,7 @@ select_and_maybe_print_frame (fi, level) else select_and_print_frame(fi, level); } +#endif /* Store the selected frame and its level into *FRAMEP and *LEVELP. @@ -1652,15 +1662,15 @@ frame_command (level_exp, from_tty) /* The XDB Compatibility command to print the current frame. */ -void +static void current_frame_command (level_exp, from_tty) char *level_exp; int from_tty; { if (target_has_stack == 0 || selected_frame == 0) error ("No stack."); - print_only_stack_frame (selected_frame, selected_frame_level, 1); - } + print_only_stack_frame (selected_frame, selected_frame_level, 1); +} /* Select the frame up one or COUNT stack levels from the previously selected frame, and print it briefly. */ @@ -1846,6 +1856,7 @@ struct function_bounds CORE_ADDR low, high; }; +static void func_command PARAMS ((char *arg, int from_tty)); static void func_command (arg, from_tty) char *arg; diff --git a/gdb/sun3-nat.c b/gdb/sun3-nat.c index 30f4a44..032b9ef 100644 --- a/gdb/sun3-nat.c +++ b/gdb/sun3-nat.c @@ -35,7 +35,6 @@ fetch_inferior_registers (regno) #ifdef FP0_REGNUM struct fp_status inferior_fp_registers; #endif - extern char registers[]; registers_fetched (); @@ -72,7 +71,6 @@ store_inferior_registers (regno) #ifdef FP0_REGNUM struct fp_status inferior_fp_registers; #endif - extern char registers[]; memcpy (&inferior_registers, registers, 16 * 4); #ifdef FP0_REGNUM @@ -107,7 +105,6 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) int which; CORE_ADDR reg_addr; /* Unused in this version */ { - extern char registers[]; struct regs *regs = (struct regs *) core_reg_sect; if (which == 0) { diff --git a/gdb/sun386-nat.c b/gdb/sun386-nat.c index 1abb4bb..b62b6fd 100644 --- a/gdb/sun386-nat.c +++ b/gdb/sun386-nat.c @@ -49,7 +49,6 @@ core_file_command (filename, from_tty) int from_tty; { int val; - extern char registers[]; /* Discard all vestiges of any previous core file and mark data and stack spaces as empty. */ @@ -189,7 +188,6 @@ fetch_inferior_registers (regno) { struct regs inferior_registers; struct fp_state inferior_fp_registers; - extern char registers[]; registers_fetched (); @@ -217,7 +215,6 @@ store_inferior_registers (regno) { struct regs inferior_registers; struct fp_state inferior_fp_registers; - extern char registers[]; memcpy (&inferior_registers, registers, 20 * 4); diff --git a/gdb/symfile.c b/gdb/symfile.c index ee60c93..5082f39 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -839,7 +839,7 @@ symbol_file_command (args, from_tty) { nomem (0); } - cleanups = make_cleanup ((make_cleanup_func) freeargv, (char *) argv); + cleanups = make_cleanup_freeargv (argv); while (*argv != NULL) { if (STREQ (*argv, "-mapped")) diff --git a/gdb/symm-nat.c b/gdb/symm-nat.c index 0461066..56e1c67 100644 --- a/gdb/symm-nat.c +++ b/gdb/symm-nat.c @@ -57,7 +57,6 @@ int regno; { struct pt_regset regs; int i; - extern char registers[]; /* FIXME: Fetching the registers is a kludge to initialize all elements in the fpu and fpa status. This works for normal debugging, but @@ -98,7 +97,6 @@ fetch_inferior_registers (regno) { int i; struct pt_regset regs; - extern char registers[]; registers_fetched (); diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 97d2f6e..c615bfc 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -154,8 +154,6 @@ free_symtab (s) mfree (s -> objfile -> md, (PTR) s); } -#if MAINTENANCE_CMDS - void print_symbol_bcache_statistics () { @@ -525,7 +523,7 @@ Arguments missing: an output file name and an optional symbol file name"); { nomem (0); } - cleanups = make_cleanup ((make_cleanup_func) freeargv, (char *) argv); + cleanups = make_cleanup_freeargv (argv); if (argv[0] != NULL) { @@ -762,7 +760,7 @@ maintenance_print_psymbols (args, from_tty) { nomem (0); } - cleanups = make_cleanup ((make_cleanup_func) freeargv, (char *) argv); + cleanups = make_cleanup_freeargv (argv); if (argv[0] != NULL) { @@ -910,7 +908,7 @@ maintenance_print_msymbols (args, from_tty) { nomem (0); } - cleanups = make_cleanup ((make_cleanup_func) freeargv, argv); + cleanups = make_cleanup_freeargv (argv); if (argv[0] != NULL) { @@ -1055,8 +1053,6 @@ block_depth (block) return i; } -#endif /* MAINTENANCE_CMDS */ - /* Increase the space allocated for LISTP, which is probably global_psymbols or static_psymbols. This space will eventually diff --git a/gdb/symtab.c b/gdb/symtab.c index fb3c8f7..5c4af53 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2852,6 +2852,14 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical) while (*p == ' ' || *p == '\t') p++; *argptr = p; } +#if 0 + /* No one really seems to know why this was added. It certainly + breaks the command line, though, whenever the passed + name is of the form ClassName::Method. This bit of code + singles out the class name, and if funfirstline is set (for + example, you are setting a breakpoint at this function), + you get an error. This did not occur with earlier + verions, so I am ifdef'ing this out. 3/29/99 */ else { /* Check if what we have till now is a symbol name */ @@ -2880,6 +2888,7 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical) /* Otherwise fall out from here and go to file/line spec processing, etc. */ } +#endif /* S is specified file's symtab, or 0 if no file specified. arg no longer contains the file name. */ @@ -4374,6 +4383,16 @@ make_symbol_overload_list (fsym) sym_return_val = (struct symbol **) xmalloc ((sym_return_val_size + 1) * sizeof (struct symbol *)); sym_return_val[0] = NULL; + /* Comment and #if 0 from Rajiv Mirani <mirani@cup.hp.com>. + However, leaving #if 0's around is uncool. We need to figure out + what this is really trying to do, decide whether we want that, + and either fix it or delete it. --- Jim Blandy, Mar 1999 */ + + /* ??? RM: What in hell is this? overload_list_add_symbol expects a symbol, + * not a partial_symbol or a minimal_symbol. And it looks at the type field + * of the symbol, and we don't know the type of minimal and partial symbols + */ +#if 0 /* Look through the partial symtabs for all symbols which begin by matching OLOAD_NAME. Add each one that you find to the list. */ @@ -4413,6 +4432,7 @@ make_symbol_overload_list (fsym) QUIT; overload_list_add_symbol (msymbol, oload_name); } +#endif /* Search upwards from currently selected frame (so that we can complete on local vars. */ diff --git a/gdb/symtab.h b/gdb/symtab.h index 67e6bed..4c06d83 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -1357,8 +1357,6 @@ decode_line_spec_1 PARAMS ((char *, int)); extern struct symtabs_and_lines decode_line_1 PARAMS ((char **, int, struct symtab *, int, char ***)); -#if MAINTENANCE_CMDS - /* Symmisc.c */ void @@ -1381,8 +1379,6 @@ maintenance_check_symtabs PARAMS ((char *, int)); void maintenance_print_statistics PARAMS ((char *, int)); -#endif - extern void free_symtab PARAMS ((struct symtab *)); diff --git a/gdb/target.c b/gdb/target.c index 808eb8f..bf9dc3b 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -208,15 +208,12 @@ static struct cmd_list_element *targetlist = NULL; int attach_flag; -#ifdef MAINTENANCE_CMDS /* Non-zero if we want to see trace of target level stuff. */ static int targetdebug = 0; static void setup_target_debug PARAMS ((void)); -#endif - /* The user just typed 'target' without the name of a target. */ /* ARGSUSED */ @@ -608,10 +605,8 @@ push_target (t) cleanup_target (¤t_target); /* Fill in the gaps */ -#ifdef MAINTENANCE_CMDS if (targetdebug) setup_target_debug (); -#endif return prev != 0; } @@ -1105,6 +1100,30 @@ return_one () return 1; } +/* Find a single runnable target in the stack and return it. If for + some reason there is more than one, return NULL. */ + +struct target_ops * +find_run_target () +{ + struct target_ops **t; + struct target_ops *runable = NULL; + int count; + + count = 0; + + for (t = target_structs; t < target_structs + target_struct_size; ++t) + { + if ((*t)->to_can_run && target_can_run(*t)) + { + runable = *t; + ++count; + } + } + + return (count == 1 ? runable : NULL); +} + struct target_ops * find_core_target () { @@ -1248,6 +1267,8 @@ static struct { {"EXC_SOFTWARE", "Software generated exception"}, {"EXC_BREAKPOINT", "Breakpoint"}, #endif + {"SIGINFO", "Information request"}, + {NULL, "Unknown signal"}, {NULL, "Internal error: printing TARGET_SIGNAL_DEFAULT"}, @@ -1260,7 +1281,10 @@ char * target_signal_to_string (sig) enum target_signal sig; { - return signals[sig].string; + if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST)) + return signals[sig].string; + else + return signals[TARGET_SIGNAL_UNKNOWN].string; } /* Return the name for a signal. */ @@ -1466,6 +1490,10 @@ target_signal_from_host (hostsig) if (hostsig == _NSIG + EXC_BREAKPOINT) return TARGET_EXC_BREAKPOINT; #endif +#if defined (SIGINFO) + if (hostsig == SIGINFO) return TARGET_SIGNAL_INFO; +#endif + #if defined (REALTIME_LO) if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI) return (enum target_signal) @@ -1640,6 +1668,10 @@ target_signal_to_host (oursig) case TARGET_EXC_BREAKPOINT: return _NSIG + EXC_BREAKPOINT; #endif +#if defined (SIGINFO) + case TARGET_SIGNAL_INFO: return SIGINFO; +#endif + default: #if defined (REALTIME_LO) if (oursig >= TARGET_SIGNAL_REALTIME_33 @@ -1768,7 +1800,6 @@ init_dummy_target () } -#ifdef MAINTENANCE_CMDS static struct target_ops debug_target; static void @@ -2308,7 +2339,8 @@ debug_to_has_execd (pid, execd_pathname) has_execd = debug_target.to_has_execd (pid, execd_pathname); fprintf_unfiltered (gdb_stderr, "target_has_execd (%d, %s) = %d\n", - pid, *execd_pathname, has_execd); + pid, (*execd_pathname ? *execd_pathname : "<NULL>"), + has_execd); return has_execd; } @@ -2447,19 +2479,21 @@ debug_to_enable_exception_callback (kind, enable) enum exception_event_kind kind; int enable; { - debug_target.to_enable_exception_callback (kind, enable); - + struct symtab_and_line *result; + result = debug_target.to_enable_exception_callback (kind, enable); fprintf_unfiltered (gdb_stderr, "target get_exception_callback_sal (%d, %d)\n", kind, enable); + return result; } static struct exception_event_record * debug_to_get_current_exception_event () { - debug_target.to_get_current_exception_event(); - + struct exception_event_record *result; + result = debug_target.to_get_current_exception_event(); fprintf_unfiltered (gdb_stderr, "target get_current_exception_event ()\n"); + return result; } static char * @@ -2551,7 +2585,7 @@ setup_target_debug () current_target.to_core_file_to_sym_file = debug_to_core_file_to_sym_file; } -#endif /* MAINTENANCE_CMDS */ + static char targ_desc[] = "Names of targets and files being debugged.\n\ @@ -2567,14 +2601,12 @@ initialize_targets () add_info ("target", target_info, targ_desc); add_info ("files", target_info, targ_desc); -#ifdef MAINTENANCE_CMDS add_show_from_set ( add_set_cmd ("targetdebug", class_maintenance, var_zinteger, (char *)&targetdebug, "Set target debugging.\n\ When non-zero, target debugging is enabled.", &setlist), &showlist); -#endif if (!STREQ (signals[TARGET_SIGNAL_LAST].string, "TARGET_SIGNAL_MAGIC")) abort (); diff --git a/gdb/target.h b/gdb/target.h index 21c3bab..c8c9bb5 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -207,13 +207,15 @@ enum target_signal { TARGET_SIGNAL_REALTIME_63 = 75, #if defined(MACH) || defined(__MACH__) /* Mach exceptions */ - TARGET_EXC_BAD_ACCESS = 76, - TARGET_EXC_BAD_INSTRUCTION = 77, - TARGET_EXC_ARITHMETIC = 78, - TARGET_EXC_EMULATION = 79, - TARGET_EXC_SOFTWARE = 80, - TARGET_EXC_BREAKPOINT = 81, + TARGET_EXC_BAD_ACCESS, + TARGET_EXC_BAD_INSTRUCTION, + TARGET_EXC_ARITHMETIC, + TARGET_EXC_EMULATION, + TARGET_EXC_SOFTWARE, + TARGET_EXC_BREAKPOINT, #endif + TARGET_SIGNAL_INFO, + /* Some signal we don't know about. */ TARGET_SIGNAL_UNKNOWN, @@ -1212,6 +1214,8 @@ find_default_create_inferior PARAMS ((char *, char *, char **)); void find_default_clone_and_follow_inferior PARAMS ((int, int *)); +extern struct target_ops *find_run_target PARAMS ((void)); + extern struct target_ops * find_core_target PARAMS ((void)); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 77a96b0..331c2af 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,10 +1,143 @@ +1999-04-20 Jim Blandy <jimb@zwingli.cygnus.com> + + * gdb.c++/demangle.exp (test_gnu_style_demangling): Add tests for + Marcus Daniel's and Dale Hawkins's demangler crashes. + + * gdb.c++/demangle.exp (test_gnu_style_demangling, + test_lucid_style_demangling, test_arm_style_demangling, + test_hp_style_demangling): Try Tom Tromey's core-dumping + identifier under each demangling style. + +1999-04-07 Jim Blandy <jimb@zwingli.cygnus.com> + + * gdb.c++/demangle.exp: Include the current demangling style + in all test names. + (current_demangling_style): New global variable. + (set_demangling_style, test_demangling_core, test_demangling, + test_demangling_exact): New functions. + (test_gnu_style_demangling, test_lucid_style_demangling, + test_arm_style_demangling, test_hp_style_demangling): Use those, + instead of calling gdb_test and gdb_test_exact directly. + (catch_demangling_errors): New function, which reports errors + signalled by the demangling test functions in an orderly way. + (do_tests): Use catch_demangling_errors. + +1999-04-06 Jim Blandy <jimb@zwingli.cygnus.com> + + * gdb.base/signals.exp (test_handle_all_print): Use () for + grouping in expressions, not {}. + + * gdb.base/smoke.exp: Test value of x, not y. The latter isn't + initialized yet. + +1999-04-01 Stan Shebs <shebs@andros.cygnus.com> + + * gdb.c++/derivation.exp: Pass ptype tests if synthesized methods + are listed. + +1999-03-26 Stan Shebs <shebs@andros.cygnus.com> + + * gdb.stabs/weird.exp: Test for CC being defined before + looking at its value. + +1999-03-25 Stan Shebs <shebs@andros.cygnus.com> + + * gdb.base/call-ar-st.exp: Remove stray '#'. + * gdb.base/miscexprs.exp: Allow "short" and "long" as well as + "short int" and "long int". + * gdb.c++/overload.cc: Cast the string added in the previous + change, to mollify finicky HP compiler. + * gdb.hp/reg-test.exp (testfile): Fix file name. + * gdb.stabs/weird.exp: Don't try to run if HP compiler in use. + + * gdb.c++/misc.cc (main): Initialize obj_with_enum. + * gdb.c++/classes.exp: Fix test of obj_with_enum values, allow + alternate form of enum ptype. + 1999-03-23 Stan Shebs <shebs@andros.cygnus.com> + * lib/gdb.exp (skip_hp_tests): Remove gcc_used argument. + * gdb.hp/*.exp: Change all to run compiler probe only after + passing skip_hp_tests, so as not to waste time on guaranteed + failure. + * gdb.c++/overload.cc: Pass string instead of char addr, always init ccpfoo. * gdb.c++/templates.cc: Fix syntax error. -1999-03-09 Jim Blandy <jimb@zwingli.cygnus.com> +Tue Mar 23 14:56:36 1999 Elena Zannoni <ezannoni@kwikemart.cygnus.com> + + * gdb.base/commands.exp: Add test for correct position of '>' + when issuing the 'commands' command after a 'while' or 'if' + command. + +1999-03-18 James Ingham <jingham@cygnus.com> + + * gdb.c++/ovldbreak.exp: Use gdb_continue_to_end + + * gdb.c++/method.exp: It was testing an uninitialized int on the + stack and assuming it was positive. + + * gdb.base/watchpoint.exp: Use gdb_continue_to_end. + + * gdb.base/step-test.exp: Catch a case where finish is broken and + keep it from killing the rest of the tests. + Use gdb_continue_to_end. + + * gdb.base/sigall.exp: use gdb_continue_to_end. + + * gdb.base/ena-dis-br.exp: use gdb_continue_to_end. + + * gdb.base/display.exp: use runto_main, not run. + + * gdb.base/default.exp: Check for the current error message in the + r abbreviation test. + Add strongarm to the targets that know info float. + + * gdb.base/condbreak.exp: Use the gdb_run command rather than just + run which doesn't work with monitors. + + * gdb.base/call-ar-st.exp: fixed bogus regexp in continuing to 1034 test. + + * gdb.base/break.exp: use the gdb_continue_to_end proc. + + * lib/gdb.exp: I had added gdb_continue_to_end used to run to the end of a + program. Traps the case (in Cygmon) when the program never really + exits. Same as Mark's continue_to_exit, but I had put it in a lot + more places, so I used my name. Sorry Mark... + + * config/monitor.exp (gdb_target_monitor): added another + target_info parameter: remotebinarydownload. This will set the + remotebinarydownload flag if this is causing some boards trouble. + +1999-03-18 Mark Salter <msalter@cygnus.com> + + * lib/gdb.exp (continue_to_exit): New function. + + * gdb.base/ena-dis-br.exp: Clean up for remote targets. + * gdb.base/ending-run.exp: Ditto. + * gdb.base/step-test.exp: Ditto. + +1999-03-16 Stan Shebs <shebs@andros.cygnus.com> + + * gdb.base/miscexprs.c: Clean up file, clear cbig.c[0] explicitly + (suggested by Art Haas <ahaas@neosoft.com>). + +1999-03-16 Jim Blandy <jimb@zwingli.cygnus.com> + + * gdb.base/signals.exp: Filter out *-*-linux* before matching *-*-gnu*. + +Fri Mar 12 18:06:21 1999 Stan Shebs <shebs@andros.cygnus.com> + + * gdb.c++/ref-types.exp, ref-types2.exp: Allow alternate + descriptions of types (short unsigned int vs unsigned short, etc). + +1999-03-12 Jim Blandy <jimb@zwingli.cygnus.com> + + * gdb.base/call-strs.exp: Don't assume that `step' will step over + a call to strlen; sometimes we do have sources. + +1999-03-08 Jim Blandy <jimb@zwingli.cygnus.com> * gdb.base/call-ar-st.c (main): Terminate char_array with a null character, so GDB won't print garbage after its end. @@ -26,22 +159,29 @@ * gdb.base/step-test.exp: Rewrite `stepi' and `nexti' tests to be more portable. +1999-03-08 Jim Blandy <jimb@zwingli.cygnus.com> + * lib/gdb.exp: Doc fixes. +1999-03-05 Nick Clifton <nickc@cygnus.com> + + * gdb.base/a2-run.exp: Add expected fails for strongarm-coff. + +1999-03-04 Jim Blandy <jimb@zwingli.cygnus.com> + * gdb.base/display.exp: Don't exercise the "detach" and "kill" commands. They're not germane to this test, and they don't work that way on remote targets. +1999-02-25 Felix Lee <flee@cygnus.com> + + * lib/gdb.exp (debug_format): initialize + 1999-02-25 Jason Molenda (jsm@bugshack.cygnus.com) * gdb.base/call-ar-st.c: Include string.h, not strings.h. * gdb.base/call-rt-st.c: Ditto. -1999-02-23 Jim Blandy <jimb@zwingli.cygnus.com> - - * configure.in: Formatting fix. - * configure: Regenerated. - 1999-02-13 Jim Blandy <jimb@zwingli.cygnus.com> * gdb.threads/pthreads.exp (horiz): New variable. @@ -263,6 +403,7 @@ Wed Jan 6 18:41:15 1999 David Taylor <taylor@texas.cygnus.com> * gdb.base/varargs.exp: new file. * gdb.base/volatile.exp: new file. * gdb.base/whatis-exp.exp: new file. + * gdb.base/display.exp: new file. * gdb.c++/derivation.exp: new file. * gdb.c++/local.exp: new file. * gdb.c++/member-ptr.exp: new file. @@ -549,6 +690,7 @@ Thurs Jul 9 11:08:31 1998 Dawn Perchik <dawn@cygnus.com> * gdb.base/commands.exp: Break up infrun_breakpoint_command_test into two parts to get around a synchronization problem in expect. + Fri Jun 26 14:52:47 1998 Peter Schauer <pes@regent.e-technik.tu-muenchen.de> * gdb.fortran/types.exp: Escape brackets in expect patterns diff --git a/gdb/testsuite/config/monitor.exp b/gdb/testsuite/config/monitor.exp index 0d381a2..727ef53 100644 --- a/gdb/testsuite/config/monitor.exp +++ b/gdb/testsuite/config/monitor.exp @@ -16,7 +16,7 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. load_lib gdb.exp - +puts "***** DID USE MONITOR ******" # # gdb_target_monitor # Set gdb to target the monitor @@ -35,6 +35,9 @@ proc gdb_target_monitor { exec_file } { if [target_info exists baud] { gdb_test "set remotebaud [target_info baud]" "" "" } + if [target_info exists binarydownload] { + gdb_test "set remotebinarydownload [target_info binarydownload]" "" "" + } if [target_info exists gdb_serial] { set serialport "[target_info gdb_serial]"; } elseif [target_info exists netport] { diff --git a/gdb/testsuite/configure b/gdb/testsuite/configure index bf663a2..2796fe7 100755 --- a/gdb/testsuite/configure +++ b/gdb/testsuite/configure @@ -13,6 +13,8 @@ ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help --enable-shared use shared libraries" +ac_help="$ac_help + --enable-gdbtk " # Initialize some variables set by options. # The variables have the same names as the options, with @@ -573,7 +575,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:577: checking host system type" >&5 +echo "configure:579: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -594,7 +596,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:598: checking target system type" >&5 +echo "configure:600: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -612,7 +614,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:616: checking build system type" >&5 +echo "configure:618: checking build system type" >&5 build_alias=$build case "$build_alias" in diff --git a/gdb/testsuite/gdb.base/a2-run.exp b/gdb/testsuite/gdb.base/a2-run.exp index 87a0edf..4341d27 100644 --- a/gdb/testsuite/gdb.base/a2-run.exp +++ b/gdb/testsuite/gdb.base/a2-run.exp @@ -109,7 +109,7 @@ if [istarget "*-*-vxworks*"] then { verbose "Timeout is now $timeout seconds" 2 gdb_expect -re "$gdb_prompt $" {} } else { - setup_xfail "mips-idt-*" "arm-*-coff" + setup_xfail "mips-idt-*" "arm-*-coff strongarm-*-coff" gdb_run_cmd 5 gdb_expect { -re ".*120.*$gdb_prompt $"\ @@ -137,7 +137,7 @@ if [istarget "*-*-vxworks*"] then { verbose "Timeout is now $timeout seconds" 2 gdb_expect -re "$gdb_prompt $" {} } else { - setup_xfail "arm-*-coff" + setup_xfail "arm-*-coff strongarm-*-coff" gdb_expect { -re ".*120.*$gdb_prompt $"\ { pass "run \"$testfile\" again with same args" } @@ -215,7 +215,7 @@ if [istarget "*-*-vxworks*"] then { verbose "Timeout is now $timeout seconds" 2 gdb_expect -re "$gdb_prompt $" {} } else { - setup_xfail "arm-*-coff" + setup_xfail "arm-*-coff strongarm-*-coff" gdb_expect { -re ".*720.*$gdb_prompt $" { pass "run \"$testfile\" again after setting args" diff --git a/gdb/testsuite/gdb.base/break.exp b/gdb/testsuite/gdb.base/break.exp index b8f1d7f..300a4e6 100644 --- a/gdb/testsuite/gdb.base/break.exp +++ b/gdb/testsuite/gdb.base/break.exp @@ -574,12 +574,18 @@ gdb_expect { } # Verify that GDB responds gracefully to a request to "finish" from -# the outermost frame. +# the outermost frame. On a stub that never exits, this will just +# run to the stubs routine, so we don't get this error... Thus the +# second condition. # + send_gdb "finish\n" gdb_expect { -re "\"finish\" not meaningful in the outermost frame.\r\n$gdb_prompt $"\ {pass "finish from outermost frame disallowed"} + -re "Run till exit from.*" { + pass "finish from outermost frame disallowed" + } -re "$gdb_prompt $"\ {fail "finish from outermost frame disallowed"} timeout {fail "(timeout) finish from outermost frame disallowed"} @@ -743,18 +749,8 @@ proc test_next_with_recursion {} { if { $result != 0 } { gdb_suppress_tests } if [target_info exists gdb,noresults] { gdb_suppress_tests } - if [target_info exists use_gdb_stub] { - gdb_breakpoint "exit" - gdb_test "continue" "Continuing..*Breakpoint .*exit \[(\].*=0\[)\].*" "continue until exit in recursive next test" - } else { - # Continue until we exit. Should not stop again. - # Don't bother to check the output of the program, that may be - # extremely tough for some remote systems. - gdb_test "continue"\ - "Continuing.\[\r\n0-9\]+Program exited normally\\..*"\ - "continue until exit in recursive next test" - } - gdb_stop_suppressing_tests; + gdb_continue_to_end "recursive next test" + gdb_stop_suppressing_tests; } test_clear_command diff --git a/gdb/testsuite/gdb.base/call-ar-st.c b/gdb/testsuite/gdb.base/call-ar-st.c index c61977a..bb30e50 100644 --- a/gdb/testsuite/gdb.base/call-ar-st.c +++ b/gdb/testsuite/gdb.base/call-ar-st.c @@ -994,7 +994,7 @@ int main () { for (index = 0; index < 120; index++) { if ((index%2) == 0) char_array[index] = 'Z'; else char_array[index] = 'a'; - } /* call-ar-st.exp uses line numbers everywhere */ char_array[120] = '\0'; + } char_array[120] = '\0'; /* call-ar-st.exp uses line numbers everywhere */ for (index = 0; index < 100; index++) { double_array[index] = index*23.4567; diff --git a/gdb/testsuite/gdb.base/call-ar-st.exp b/gdb/testsuite/gdb.base/call-ar-st.exp index d8ed4fe..d408cf1 100644 --- a/gdb/testsuite/gdb.base/call-ar-st.exp +++ b/gdb/testsuite/gdb.base/call-ar-st.exp @@ -123,6 +123,7 @@ gdb_expect { #call print_char_array(char_array) + send_gdb "print print_char_array(char_array)\n" gdb_expect { -re "array_c :\[ \t\r\n\]+=========\[ \t\r\n\]+\[ \t\r\n\]+Z\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZa\[ \t\r\n\]+\[ \t\r\n\]+.*\[ \t\r\n\]+.*$gdb_prompt $" { @@ -222,7 +223,7 @@ gdb_expect { #step -over send_gdb "next\n" gdb_expect { - -re "BYE BYE FOR NOW\[ \t\r\n\]+1035\[ \t\r\n\]+printf\\(.VERY GREEN GRASS.n.\\);\[ \t\r\n\]+.*$gdb_prompt $" { pass "next to 1035"} + -re "BYE BYE FOR NOW\[ \t\r\n\]main.*+1035\[ \t\r\n\]+printf\\(.VERY GREEN GRASS.n.\\);\[ \t\r\n\]+.*$gdb_prompt $" { pass "next to 1035"} -re ".*$gdb_prompt $" { fail "next to 1035" } timeout { fail "next to 1035(timeout)" } } @@ -235,7 +236,7 @@ gdb_expect { pass "print print_array_rep(*list1, *list2, *list3)" } -re ".*$gdb_prompt $" { fail "print print_array_rep(*list1, *list2, *list3)" } - timeout { fail "(timeout) print print_array_rep(*list1, *list2, *list3)"# } + timeout { fail "(timeout) print print_array_rep(*list1, *list2, *list3)" } } diff --git a/gdb/testsuite/gdb.base/call-strs.exp b/gdb/testsuite/gdb.base/call-strs.exp index 20f358a..1d4cc4a 100644 --- a/gdb/testsuite/gdb.base/call-strs.exp +++ b/gdb/testsuite/gdb.base/call-strs.exp @@ -107,11 +107,11 @@ gdb_expect { #step -send_gdb "step\n" +send_gdb "next\n" gdb_expect { - -re ".*str_func\\(\"abcd\", \"efgh\", \"ijkl\", \"mnop\", \"qrst\", \"uvwx\", \"yz12\"\\);.*$gdb_prompt $" {pass "step after strcpy"} - -re ".*$gdb_prompt $" { fail "step after strcpy" } - timeout { fail "step after strcpy (timeout)" } + -re ".*str_func\\(\"abcd\", \"efgh\", \"ijkl\", \"mnop\", \"qrst\", \"uvwx\", \"yz12\"\\);.*$gdb_prompt $" {pass "next over strcpy"} + -re ".*$gdb_prompt $" { fail "next over strcpy" } + timeout { fail "next over strcpy (timeout)" } } #print buf diff --git a/gdb/testsuite/gdb.base/commands.exp b/gdb/testsuite/gdb.base/commands.exp index f70ac6b..72356ec 100644 --- a/gdb/testsuite/gdb.base/commands.exp +++ b/gdb/testsuite/gdb.base/commands.exp @@ -236,6 +236,55 @@ proc user_defined_command_test {} { gdb_test "show user mycommand" "while.*set.*if.*p/x.*else.*p/x.*end.*" "display user command in user_defined_command_test" } + + +proc test_command_prompt_position {} { + global gdb_prompt + + if [target_info exists noargs] { + verbose "Skipping test_command_prompt_position because of noargs." + return + } + + if { ![runto factorial] } then { gdb_suppress_tests; } + # Don't depend upon argument passing, since most simulators don't currently + # support it. Bash value variable to be what we want. + delete_breakpoints + gdb_test "break factorial" "Breakpoint.*at.*" "break factorial #2" + gdb_test "p value=5" "" "set value to 5 in test_command_prompt_position" + # All this test should do is print 0xdeadbeef once. + gdb_test "if value == 1\np/x 0xfeedface\nelse\np/x 0xdeadbeef\nend" "\\\$\[0-9\]* = 0xdeadbeef" "if test in test_command_prompt_position" + +# Now let's test for the correct position of the '>' in gdb's prompt for commands. +# It should be at the beginning of the line, and not after one space. + + send_gdb "commands\n" + gdb_expect { + -re "Type commands.*End with.*\[\r\n\]>$" \ + { send_gdb "printf \"Now the value is %d\\n\", value\n" + gdb_expect { + -re "^printf.*value\r\n>$" \ + { send_gdb "end\n" + gdb_expect { + -re "^end\r\n$gdb_prompt $" { pass "> OK in test_command_prompt_position" } + -re ".*$gdb_prompt $" { fail "some other message in test_command_prompt_position" } + timeout { fail "(timeout) 1 in test_command_prompt_position" } + } + } + -re "^ >$" { fail "> not OK in test_command_prompt_position" } + -re ".*$gdb_prompt $" { fail "wrong message in test_command_prompt_position" } + timeout { fail "(timeout) 2 in test_command_prompt_position " } + } + } + -re "Type commands.*End with.*\[\r\n\] >$" { fail "prompt not OK in test_command_prompt_position" } + -re ".*$gdb_prompt $" { fail "commands in test_command_prompt_position" } + timeout { fail "(timeout) 3 commands in test_command_prompt_position" } + } + + gdb_stop_suppressing_tests; +} + + gdbvar_simple_if_test gdbvar_simple_while_test gdbvar_complex_if_while_test @@ -246,3 +295,8 @@ if_while_breakpoint_command_test infrun_breakpoint_command_test breakpoint_command_test user_defined_command_test +test_command_prompt_position + + + + diff --git a/gdb/testsuite/gdb.base/condbreak.exp b/gdb/testsuite/gdb.base/condbreak.exp index 76f7521..cf9deba 100644 --- a/gdb/testsuite/gdb.base/condbreak.exp +++ b/gdb/testsuite/gdb.base/condbreak.exp @@ -118,11 +118,11 @@ gdb_test "info break" \ # -# run until the breakpoint at main is hit. For non-stubs-using targets. +# run until the breakpoint at main is hit. # -gdb_test "run" \ - "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:60.*60\[\t \]+if .argc.* \{.*" \ -"run until function breakpoint" + + +gdb_run_cmd # # run until the breakpoint at a line number diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp index 8e1506a..2a342aa 100644 --- a/gdb/testsuite/gdb.base/default.exp +++ b/gdb/testsuite/gdb.base/default.exp @@ -40,6 +40,8 @@ gdb_expect { { pass "attach" } -re "You can't do that when your target is `None'.*$gdb_prompt $"\ { pass "attach" } + -re "You can't do that without a process to debug.*$gdb_prompt $"\ + { pass "attach" } -re "Don't know how to attach. Try \"help target\"..*$gdb_prompt $"\ { pass "attach" } -re "Kill it. .y or n." { @@ -295,6 +297,8 @@ if [istarget "arm-*-*"] then { gdb_test "info float" "Software FPU type.*mask:.*flags:.*" "info float" } elseif [istarget "thumb-*-*"] then { gdb_test "info float" "Software FPU type.*mask:.*flags:.*" "info float" +} elseif [istarget "strongarm-*-*"] then { + gdb_test "info float" "Software FPU type.*mask:.*flags:.*" "info float" } else { gdb_test "info float" "No floating point info available for this processor." "info float" } diff --git a/gdb/testsuite/gdb.base/display.exp b/gdb/testsuite/gdb.base/display.exp index f5c2641..638072c 100644 --- a/gdb/testsuite/gdb.base/display.exp +++ b/gdb/testsuite/gdb.base/display.exp @@ -49,8 +49,10 @@ gdb_load ${binfile} # Ok, on to real life # -gdb_test "b main" ".*Breakpoint 1.*" "break main" -gdb_test "r" ".*Breakpoint 1, main.*" "get to main" + +if {![runto main]} { + fail "Could not run to main - other tests will fail." +} gdb_test "b 14" ".*Breakpoint 2.*" "break do_loops" gdb_test "c" ".*Breakpoint 2, do_loops.*" "get to do_loops" diff --git a/gdb/testsuite/gdb.base/ena-dis-br.exp b/gdb/testsuite/gdb.base/ena-dis-br.exp index 6593d82..f5656d8 100644 --- a/gdb/testsuite/gdb.base/ena-dis-br.exp +++ b/gdb/testsuite/gdb.base/ena-dis-br.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1997, 1998 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -38,6 +38,30 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." } +proc rerun_to_main {} { + global gdb_prompt + + if [target_info exists use_gdb_stub] { + gdb_run_cmd + gdb_expect { + -re ".*Breakpoint .*main .*$gdb_prompt $"\ + {pass "rerun to main" ; return 0} + -re "$gdb_prompt $"\ + {fail "rerun to main" ; return 0} + timeout {fail "(timeout) rerun to main" ; return 0} + } + } else { + send_gdb "run\n" + gdb_expect { + -re "Starting program.*$gdb_prompt $"\ + {pass "rerun to main" ; return 0} + -re "$gdb_prompt $"\ + {fail "rerun to main" ; return 0} + timeout {fail "(timeout) rerun to main" ; return 0} + } + } +} + gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir @@ -137,32 +161,9 @@ gdb_expect { # Verify that we don't stop at a disabled breakpoint. # -send_gdb "continue\n" -gdb_expect { - -re ".*Program exited normally.*$gdb_prompt $"\ - {pass "no stop"} - -re "$gdb_prompt $"\ - {fail "no stop"} - timeout {fail "(timeout) no stop"} -} - -send_gdb "run\n" -gdb_expect { - -re "Starting program.*$gdb_prompt $"\ - {pass "rerun to main"} - -re "$gdb_prompt $"\ - {fail "rerun to main"} - timeout {fail "(timeout) rerun to main"} -} - -send_gdb "continue\n" -gdb_expect { - -re ".*Program exited normally.*$gdb_prompt $"\ - {pass "no stop at auto-disabled break marker2"} - -re "$gdb_prompt $"\ - {fail "no stop at auto-disabled break marker2"} - timeout {fail "(timeout) no stop at auto-disabled break marker2"} -} +gdb_continue_to_end "no stop" +rerun_to_main +gdb_continue_to_end "no stop at auto-disabled break marker2" # Verify that we can set a breakpoint to be self-deleting after # the first time it triggers. @@ -321,23 +322,8 @@ gdb_expect { timeout {fail "(timeout) info ignored break marker1"} } -send_gdb "continue\n" -gdb_expect { - -re ".*Program exited normally.*$gdb_prompt $"\ - {pass "no stop at ignored break marker1"} - -re "$gdb_prompt $"\ - {fail "no stop at ignored break marker1"} - timeout {fail "(timeout) no stop at ignored break marker1"} -} - -send_gdb "run\n" -gdb_expect { - -re "Starting program.*$gdb_prompt $"\ - {pass "rerun to main"} - -re "$gdb_prompt $"\ - {fail "rerun to main"} - timeout {fail "(timeout) rerun to main"} -} +gdb_continue_to_end "no stop at ignored break marker1" +rerun_to_main send_gdb "continue\n" gdb_expect { @@ -386,23 +372,8 @@ gdb_expect { timeout {fail "(timeout) info break marker2"} } -send_gdb "continue\n" -gdb_expect { - -re ".*Program exited normally.*$gdb_prompt $"\ - {pass "no stop at ignored & auto-deleted break marker1"} - -re "$gdb_prompt $"\ - {fail "no stop at ignored & auto-deleted break marker1"} - timeout {fail "(timeout) no stop at ignored & auto-deleted break marker1"} -} - -send_gdb "run\n" -gdb_expect { - -re "Starting program.*$gdb_prompt $"\ - {pass "rerun to main"} - -re "$gdb_prompt $"\ - {fail "rerun to main"} - timeout {fail "(timeout) rerun to main"} -} +gdb_continue_to_end "no stop at ignored & auto-deleted break marker1" +rerun_to_main send_gdb "continue\n" gdb_expect { @@ -445,23 +416,8 @@ gdb_expect { timeout {fail "(timeout) disable break marker1"} } -send_gdb "continue\n" -gdb_expect { - -re ".*Program exited normally.*$gdb_prompt $"\ - {pass "no stop at ignored & disabled break marker1"} - -re "$gdb_prompt $"\ - {fail "no stop at ignored & disabled break marker1"} - timeout {fail "(timeout) no stop at ignored & disabled break marker1"} -} - -send_gdb "run\n" -gdb_expect { - -re "Starting program.*$gdb_prompt $"\ - {pass "rerun to main"} - -re "$gdb_prompt $"\ - {fail "rerun to main"} - timeout {fail "(timeout) rerun to main"} -} +gdb_continue_to_end "no stop at ignored & disabled break marker1" +rerun_to_main send_gdb "info break $expect_out(1,string)\n" gdb_expect { diff --git a/gdb/testsuite/gdb.base/ending-run.exp b/gdb/testsuite/gdb.base/ending-run.exp index 61b42c7..da78e3b 100644 --- a/gdb/testsuite/gdb.base/ending-run.exp +++ b/gdb/testsuite/gdb.base/ending-run.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1997, 1998 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -61,7 +61,11 @@ gdb_test "b 26" ".*Breakpoint.*3.*" "" # Expect to hit the bp at line "1", but symbolize this # as line "8". Then try to clear it--this should work. # -gdb_test "r" ".*Breakpoint.*1.*callee.*8.*" "" +if [target_info exists use_gdb_stub] { + gdb_test "continue" ".*Breakpoint.*1.*callee.*8.*" "" +} else { + gdb_test "r" ".*Breakpoint.*1.*callee.*8.*" "" +} gdb_test "cle" ".*Deleted breakpoints 2 1.*" "clear worked" send_gdb "i b\n" gdb_expect { @@ -147,24 +151,30 @@ gdb_expect { -re ".*in.*start.*$gdb_prompt $" { pass "step out of main" } + -re ".*Program received signal SIGTRAP.*$gdb_prompt $" { + pass "Cygmon stopped in ending trap." + } timeout { fail "hang or timeout on step at end 1" } } -gdb_test "n" ".*Single.*Program exited.*" "step to end of run" -set timeout $old_timeout - -gdb_test "n" ".*The program is not being run.*" "don't step after run" - -set exec_output [remote_exec host "ls core"] - -if [ regexp "core not found" $exec_output] { +if {![target_info exists use_cygmon] || ![target_info use_cygmon]} { + gdb_test "n" ".*Single.*Program exited.*" "step to end of run" + set timeout $old_timeout + + gdb_test "n" ".*The program is not being run.*" "don't step after run" + + set exec_output [remote_exec host "ls core"] + + + if [ regexp "core not found" $exec_output] { pass "No core dumped on quit" -} else { - if [ regexp "No such file or directory" $exec_output] { - pass "ls: core: No core dumped on quit" } else { + if [ regexp "No such file or directory" $exec_output] { + pass "ls: core: No core dumped on quit" + } else { remote_exec build "rm -f core" fail "Core dumped on quit" + } } } diff --git a/gdb/testsuite/gdb.base/miscexprs.c b/gdb/testsuite/gdb.base/miscexprs.c index cae23d8..41bd29f 100644 --- a/gdb/testsuite/gdb.base/miscexprs.c +++ b/gdb/testsuite/gdb.base/miscexprs.c @@ -1,165 +1,49 @@ -void marker1 () +void +marker1 () { - + } -/* -static struct { - char c[100]; -} cbig; - - -static struct { - int i[800]; -} ibig; - - -static struct { - long l[900]; -} lbig; - -static struct { - float f[200]; -} fbig; - -static struct { - double d[300]; -} dbig; - -static struct { - short s[400]; -} sbig;*/ -/*struct { - long l[900]; -} lbig;*/ - -int main() +int +main () { - -struct { + struct { char c[100]; -} cbig; - + } cbig; -struct { + struct { int i[800]; -} ibig; + } ibig; - -struct { + struct { long l[900]; -} lbig; + } lbig; -struct { + struct { float f[200]; -} fbig; + } fbig; -struct { + struct { double d[300]; -} dbig; + } dbig; -struct { + struct { short s[400]; -} sbig; - ibig.i[100] = 5; - cbig.c[100] = 'A'; - fbig.f[100] = 11.99999; - dbig.d[202] = 9.99999999; - sbig.s[90] = 255; - lbig.l[333] = 999999999; + } sbig; + + ibig.i[100] = 5; + cbig.c[0] = '\0'; + cbig.c[100] = 'A'; + fbig.f[100] = 11.99999; + dbig.d[202] = 9.99999999; + sbig.s[90] = 255; + lbig.l[333] = 999999999; - #ifdef usestubs - set_debug_traps(); - breakpoint(); - #endif - marker1(); - return 0; +#ifdef usestubs + set_debug_traps (); + breakpoint (); +#endif + marker1 (); + return 0; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gdb/testsuite/gdb.base/miscexprs.exp b/gdb/testsuite/gdb.base/miscexprs.exp index 9ea278a..d42e5ab 100644 --- a/gdb/testsuite/gdb.base/miscexprs.exp +++ b/gdb/testsuite/gdb.base/miscexprs.exp @@ -114,18 +114,24 @@ gdb_expect { send_gdb "print &sbig.s\[0\]\n" gdb_expect { + -re ".\[0-9\]* = \\(short \\*\\) $hex.*$gdb_prompt $" { + pass "print value of &sbig.s\[0\]" + } -re ".\[0-9\]* = \\(short int \\*\\) $hex.*$gdb_prompt $" { pass "print value of &sbig.s\[0\]" - } + } -re ".*$gdb_prompt $" { fail "print value of &sbig.s\[0\]" } timeout { fail "(timeout) print value of &sbig.s\[0\]" } } send_gdb "print &lbig.l\[0\]\n" gdb_expect { + -re ".\[0-9\]* = \\(long \\*\\) $hex.*$gdb_prompt $" { + pass "print value of &lbig.l\[0\]" + } -re ".\[0-9\]* = \\(long int \\*\\) $hex.*$gdb_prompt $" { pass "print value of &lbig.l\[0\]" - } + } -re ".*$gdb_prompt $" { fail "print value of &lbig.l\[0\]" } timeout { fail "(timeout) print value of &lbig.l\[0\]" } } diff --git a/gdb/testsuite/gdb.base/sigall.exp b/gdb/testsuite/gdb.base/sigall.exp index 765e0ee..7559978 100644 --- a/gdb/testsuite/gdb.base/sigall.exp +++ b/gdb/testsuite/gdb.base/sigall.exp @@ -205,6 +205,6 @@ gdb_test "continue" \ "Continuing.*Program received signal SIGTERM.*" \ "get signal TERM" gdb_test "continue" "Breakpoint.*handle_TERM.*" "send signal TERM" -gdb_test "continue" "Program exited normally\\." "continue to sigall exit" +gdb_continue_to_end "continue to sigall exit" return 0 diff --git a/gdb/testsuite/gdb.base/signals.exp b/gdb/testsuite/gdb.base/signals.exp index 49bf490..16528f7 100644 --- a/gdb/testsuite/gdb.base/signals.exp +++ b/gdb/testsuite/gdb.base/signals.exp @@ -336,7 +336,9 @@ proc test_handle_all_print {} { set oldtimeout $timeout set timeout [expr "$timeout + 360"] verbose "Timeout is now $timeout seconds" 2 - if { [istarget "*-*-gnu*"] || [istarget "*-*-mach*"] } { + if { ![istarget "*-*-linux*"] + && ( [istarget "*-*-gnu*"] + || [istarget "*-*-mach*"] ) } { gdb_test "handle all print" "Signal\[ \]+Stop\[ \]+Print\[ \]+Pass to program\[ \]+Description\r\nSIGHUP\[ \]+Yes\[ \]+Yes\[ \]+Yes\[ \]+Hangup.*SIG63\[ \]+Yes\[ \]+Yes\[ \]+Yes\[ \]+Real-time event 63.*EXC_BREAKPOINT\[ \]+Yes\[ \]+Yes\[ \]+Yes\[ \]+Breakpoint" } else { gdb_test "handle all print" "Signal\[ \]+Stop\[ \]+Print\[ \]+Pass to program\[ \]+Description\r\nSIGHUP\[ \]+Yes\[ \]+Yes\[ \]+Yes\[ \]+Hangup.*SIG63\[ \]+Yes\[ \]+Yes\[ \]+Yes\[ \]+Real-time event 63" diff --git a/gdb/testsuite/gdb.base/smoke.exp b/gdb/testsuite/gdb.base/smoke.exp index 42de7c8..af107e0 100644 --- a/gdb/testsuite/gdb.base/smoke.exp +++ b/gdb/testsuite/gdb.base/smoke.exp @@ -58,7 +58,7 @@ gdb_test "r" ".*Starting program.*main.*15.*" "hit bp" gdb_test "hel r" ".*Start debugged program.*without arguments.*" "help" gdb_test "n" ".*x = 1;.*" "next" gdb_test "s" ".*y = 2;.*" "step" -gdb_test "p/t y" ".* = 1.*" "print y in binary" +gdb_test "p/t x" ".* = 1.*" "print x in binary" gdb_test "p 1+2*3+4" ".* = 11.*" "calculate" gdb_test "p/t 1+2*3+4" ".* = 1011.*" "binary" diff --git a/gdb/testsuite/gdb.base/step-test.exp b/gdb/testsuite/gdb.base/step-test.exp index 415714d..85744d7 100644 --- a/gdb/testsuite/gdb.base/step-test.exp +++ b/gdb/testsuite/gdb.base/step-test.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1997, 1998 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -46,6 +46,9 @@ if ![runto_main] then { return 0 } +# Set a breakpoint at line 45, if stepi then finish fails, we would +# run to the end of the program, which would mess up the rest of the tests. + # Vanilla step/next # gdb_test "next" ".*${decimal}.*x = 1;.*" "next 1" @@ -127,8 +130,41 @@ test_i "stepi to next line" "stepi" \ ".*${decimal}.*callee.*STEPI" test_i "stepi into function" "stepi" \ ".*${decimal}.*callee.*STEPI" \ - ".*callee \\(\\) at .*step-test\\.c" -gdb_test "finish" ".*${decimal}.*callee.*NEXTI.*" "stepi: finish call" + ".*callee \\(\\) at .*step-test\\.c" +# Have to be careful here, if the finish does not work, +# then we may run to the end of the program, which +# will cause erroneous failures in the rest of the tests + +send_gdb "finish\n" +gdb_expect { + -re ".*(Program received|Program exited).*$gdb_prompt $" { + puts "*** Matched Program recieved" + # Oops... We ran to the end of the program... Better reset + if {![runto_main]} then { + fail "Can't run to main" + return 0 + } + if {![runto step-test.c:45]} { + fail "Can't run to line 45" + return 0 + } + fail "stepi: finish call" + } + -re ".*${decimal}.*callee.*NEXTI.*$gdb_prompt $" { + puts "*** Matched success..." + pass "stepi: finish call" + } + -re "$gdb_prompt $" { + # We got something else. Fail. + fail "stepi: finish call" + return + } + timeout { + fail "stepi: finish call" + return + } +} + test_i "nexti over function" "nexti" \ ".*${decimal}.*callee.*NEXTI" \ ".*${decimal}.*y = w \\+ z;" @@ -148,6 +184,6 @@ gdb_test "step" \ ".*step-test.exp: arrive here 1.*" \ "large struct by value" -gdb_test "continue" ".*Program exited normally.*" "run to finish" +gdb_continue_to_end "step-test.exp" return 0 diff --git a/gdb/testsuite/gdb.base/watchpoint.exp b/gdb/testsuite/gdb.base/watchpoint.exp index a295445..53f2e8b 100644 --- a/gdb/testsuite/gdb.base/watchpoint.exp +++ b/gdb/testsuite/gdb.base/watchpoint.exp @@ -209,8 +209,7 @@ Continuing.*\[Ww\]atchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count if [target_info exists gdb,noresults] { return } - gdb_test "cont" "Continuing.*Program exited normally.*" \ - "continue to exit in test_simple_watchpoint" + gdb_continue_to_end "continue to exit in test_simple_watchpoint" } # Test disabling watchpoints. @@ -280,8 +279,7 @@ proc test_disabling_watchpoints {} { if [target_info exists gdb,noresults] { return } - gdb_test "cont" "Continuing.*Program exited normally.*" \ - "continue to exit in test_disabling_watchpoints" + gdb_continue_to_end "continue to exit in test_disabling_watchpoints" } # Test stepping and other mundane operations with watchpoints enabled @@ -475,8 +473,7 @@ proc test_watchpoint_triggered_in_syscall {} { if [target_info exists gdb,noresults] { return } - gdb_test "cont" "Continuing.*Program exited normally.*" \ - "continue to exit in test_watchpoint_triggered_in_syscall" + gdb_continue_to_end "continue to exit in test_watchpoint_triggered_in_syscall" } } @@ -504,8 +501,7 @@ proc test_complex_watchpoint {} { if [target_info exists gdb,noresults] { return } - gdb_test "cont" "Continuing.*Program exited normally.*" \ - "continue to exit in test_complex_watchpoint" + gdb_continue_to_end "continue to exit in test_complex_watchpoint" } } diff --git a/gdb/testsuite/gdb.c++/classes.exp b/gdb/testsuite/gdb.c++/classes.exp index 5e97cb4..05a6cde 100644 --- a/gdb/testsuite/gdb.c++/classes.exp +++ b/gdb/testsuite/gdb.c++/classes.exp @@ -774,15 +774,15 @@ do_tests # set a breakpoint and go there -send_gdb "break 498\n" +send_gdb "break 503\n" gdb_expect { - -re "Breakpoint \[0-9\] at.*$gdb_prompt $" { pass "set break 498" } - -re "$gdb_prompt $" { fail "set break 498" } - timeout { fail "(timeout) set break 498" } + -re "Breakpoint \[0-9\] at.*$gdb_prompt $" { pass "set break 503" } + -re "$gdb_prompt $" { fail "set break 503" } + timeout { fail "(timeout) set break 503" } } send_gdb "continue\n" gdb_expect { - -re "Continuing\\.\r\n\r\nBreakpoint \[0-9\]*, main....at.*misc\\.cc:498\r\n498.*\r\n$gdb_prompt $" { pass "continue" } + -re "Continuing\\.\r\n\r\nBreakpoint \[0-9\]*, main....at.*misc\\.cc:503\r\n503.*\r\n$gdb_prompt $" { pass "continue" } -re "$gdb_prompt $" { fail "continue" } timeout { fail "(timeout) continue" } } @@ -818,9 +818,12 @@ gdb_expect { } # ptype on the enum member +# The second success case is a little dubious, but it's not clear what +# ought to be required of a ptype on a private enum... -sts 19990324 send_gdb "ptype obj_with_enum.priv_enum\n" gdb_expect { -re "type = enum ClassWithEnum::PrivEnum \\{red, green, blue, yellow = 42\\}.*$gdb_prompt $" { pass "ptype obj_with_enum.priv_enum" } + -re "type = enum \\{red, green, blue, yellow = 42\\}.*$gdb_prompt $" { pass "ptype obj_with_enum.priv_enum" } -re "$gdb_prompt $" { fail "ptype obj_with_enum.priv_enum" } timeout { fail "(timeout) ptype obj_with_enum.priv_enum" } } diff --git a/gdb/testsuite/gdb.c++/demangle.exp b/gdb/testsuite/gdb.c++/demangle.exp index fd1d344..7f9f174 100644 --- a/gdb/testsuite/gdb.c++/demangle.exp +++ b/gdb/testsuite/gdb.c++/demangle.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1992, 1997 Free Software Foundation, Inc. +# Copyright (C) 1992, 1997, 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,432 +20,516 @@ # This file was written by Fred Fish. (fnf@cygnus.com) if $tracelevel then { - strace $tracelevel + strace $tracelevel } -# -# Test gnu style name demangling -# +### The demangling style we last sent to GDB. +set current_demangling_style none -proc test_gnu_style_demangling {} { +### Set GDB's current demangling style to STYLE. Subsequent calls to +### test_demangle will include STYLE in the test name when reporting +### passes and failures. +proc set_demangling_style {style} { global gdb_prompt + global current_demangling_style - # Set the demangling style to "gnu" and then check to make sure - # it really got set. Return if the style failed to get set for - # some reason. - - send_gdb "set demangle-style gnu\n" + send_gdb "set demangle-style $style\n" gdb_expect { - -re "set demangle-style gnu\[\r\n\]+$gdb_prompt $" {} - -re ".*$gdb_prompt $" { fail "set demangle-style gnu failed" ; return } - timeout { fail "set demangle-style gnu failed (timeout)" ; return } + -re "set demangle-style $style\[\r\n\]+$gdb_prompt $" { + pass "$style: set demangle-style" + } + -re ".*$gdb_prompt $" { + fail "$style: set demangle-style" + error "set_demangling_style: set style" + } + timeout { + fail "$style: set demangle-style (timeout)" + error "set_demangling_style: set style" + } } send_gdb "show demangle-style\n" gdb_expect { - -re "The current C\[+\]+ demangling style is \"gnu\".\r\n$gdb_prompt $" {} - -re ".*$gdb_prompt $" { fail "demangling style not set to gnu" } - timeout { fail "show demangle-style timed out" } + -re "The current C\[+\]+ demangling style is \"$style\".\r\n$gdb_prompt $" { + pass "$style: check demangling style" + } + -re ".*$gdb_prompt $" { + fail "gnu: check demangling style" + error "set_demangling_style: check style" + } + timeout { + fail "gnu: check demangling style (timeout)" + error "set_demangling_style: check style" + } } - gdb_test "maint dem Abort__FP6EditoriPCc" \ + set current_demangling_style $style +} + + +### Utility function for test_demangling and test_demangling_exact. +proc test_demangling_core {tester test result} { + global current_demangling_style + + if {! [regexp {^([^ ]+): (.+)$} $test dummy style name]} { + error "bad test name passed to test_demangling" + } + + if {[string compare $style $current_demangling_style]} { + set_demangling_style $style + } + + $tester "maintenance demangle $name" $result $test +} + +### Demangle an identifier, and check that the result matches a pattern. +### +### TEST should be of the form "STYLE: NAME", where STYLE is the name +### of a demangling style (like "gnu" or "arm"), and NAME is a mangled +### identifier to demangle. Pass when the result matches the regular +### expression RESULT. Report passes and fails using TEST as the name +### of the test. +### +### Why don't we just pass the STYLE and NAME as two separate +### arguments, or let the style be a global variable? That would be +### cleaner. However, doing it this way means that: +### +### 1) the name of the test, as recorded in the summary and log, +### appears verbatim in the script, and +### +### 2) that test names are unique, even though we try to demangle the same +### identifiers using several different mangling styles. +### +### This makes it a lot easier for people tracking down failures to +### find the one they care about. + +proc test_demangling {test result} { + test_demangling_core gdb_test $test $result +} + +### Like test_demangling, above, except that RESULT is not a regexp, +### but a string that must match exactly. + +proc test_demangling_exact {test result} { + test_demangling_core gdb_test_exact $test $result +} + + + +# +# Test gnu style name demangling +# + +proc test_gnu_style_demangling {} { + test_demangling "gnu: Abort__FP6EditoriPCc" \ "Abort\[(\]+Editor \[*\]+, int, (const char|char const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue" "ivTSolver::AddAlignment(unsigned int, ivInteractor *, ivTGlue *)" - gdb_test "maint dem Append__15NameChooserViewPCc" \ + test_demangling_exact "gnu: AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue" "ivTSolver::AddAlignment(unsigned int, ivInteractor *, ivTGlue *)" + test_demangling "gnu: Append__15NameChooserViewPCc" \ "NameChooserView::Append\[(\]+(const char|char const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic" "ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &, Graphic *)" - gdb_test_exact "maint demangle AtEnd__13ivRubberGroup" "ivRubberGroup::AtEnd(void)" - gdb_test_exact "maint demangle BgFilter__9ivTSolverP12ivInteractor" "ivTSolver::BgFilter(ivInteractor *)" - gdb_test "maint dem BitPatterntoa__FRC10BitPatternccc" \ + test_demangling_exact "gnu: ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic" "ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &, Graphic *)" + test_demangling_exact "gnu: AtEnd__13ivRubberGroup" "ivRubberGroup::AtEnd(void)" + test_demangling_exact "gnu: BgFilter__9ivTSolverP12ivInteractor" "ivTSolver::BgFilter(ivInteractor *)" + test_demangling "gnu: BitPatterntoa__FRC10BitPatternccc" \ "BitPatterntoa\[(\]+(const BitPattern|BitPattern const) &, char, char, char\[)\]+" - gdb_test_exact "maint demangle Check__6UArrayi" "UArray::Check(int)" - gdb_test_exact "maint demangle CoreConstDecls__8TextCodeR7ostream" "TextCode::CoreConstDecls(ostream &)" - gdb_test_exact "maint demangle Detach__8StateVarP12StateVarView" "StateVar::Detach(StateVarView *)" - gdb_test_exact "maint demangle Done__9ComponentG8Iterator" "Component::Done(Iterator)" - gdb_test "maint dem DrawDestinationTransformedImage__FP7_XImageiiT0iiUlUiiiUiUlUlP4_XGCRC13ivTransformeriiii" \ + test_demangling_exact "gnu: Check__6UArrayi" "UArray::Check(int)" + test_demangling_exact "gnu: CoreConstDecls__8TextCodeR7ostream" "TextCode::CoreConstDecls(ostream &)" + test_demangling_exact "gnu: Detach__8StateVarP12StateVarView" "StateVar::Detach(StateVarView *)" + test_demangling_exact "gnu: Done__9ComponentG8Iterator" "Component::Done(Iterator)" + test_demangling "gnu: DrawDestinationTransformedImage__FP7_XImageiiT0iiUlUiiiUiUlUlP4_XGCRC13ivTransformeriiii" \ "DrawDestinationTransformedImage\[(\]+_XImage \[*\]+, int, int, _XImage \[*\]+, int, int, unsigned long, unsigned int, int, int, unsigned int, unsigned long, unsigned long, _XGC \[*\]+, (const ivTransformer|ivTransformer const) &, int, int, int, int\[)\]+" - gdb_test "maint dem Edit__12StringEditorPCcii" \ + test_demangling "gnu: Edit__12StringEditorPCcii" \ "StringEditor::Edit\[(\]+(const char|char const) \[*\]+, int, int\[)\]+" - gdb_test_exact "maint demangle Effect__11RelateManipR7ivEvent" "RelateManip::Effect(ivEvent &)" - gdb_test "maint dem FilterName__FPCc" \ + test_demangling_exact "gnu: Effect__11RelateManipR7ivEvent" "RelateManip::Effect(ivEvent &)" + test_demangling "gnu: FilterName__FPCc" \ "FilterName\[(\]+(const char|char const) \[*\]+\[)\]+" - gdb_test "maint dem Filter__6PSTextPCci" \ + test_demangling "gnu: Filter__6PSTextPCci" \ "PSText::Filter\[(\]+(const char|char const) \[*\]+, int\[)\]+" - gdb_test "maint dem FindColor__7CatalogPCciii" \ + test_demangling "gnu: FindColor__7CatalogPCciii" \ "Catalog::FindColor\[(\]+(const char|char const) \[*\]+, int, int, int\[)\]+" - gdb_test_exact "maint demangle FindFixed__FRP4CNetP4CNet" "FindFixed(CNet *&, CNet *)" - gdb_test "maint dem FindFont__7CatalogPCcN21" \ + test_demangling_exact "gnu: FindFixed__FRP4CNetP4CNet" "FindFixed(CNet *&, CNet *)" + test_demangling "gnu: FindFont__7CatalogPCcN21" \ "Catalog::FindFont\[(\]+(const char|char const) \[*\]+, (const char|char const) \[*\]+, (const char|char const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle Fix48_abort__FR8twolongs" "Fix48_abort(twolongs &)" - gdb_test_exact "maint demangle GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2" "iv2_6_VScroller::GetBarInfo(ivPerspective *, int &, int &)" - gdb_test_exact "maint demangle GetBgColor__C9ivPainter" "ivPainter::GetBgColor(void) const" + test_demangling_exact "gnu: Fix48_abort__FR8twolongs" "Fix48_abort(twolongs &)" + test_demangling_exact "gnu: GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2" "iv2_6_VScroller::GetBarInfo(ivPerspective *, int &, int &)" + test_demangling_exact "gnu: GetBgColor__C9ivPainter" "ivPainter::GetBgColor(void) const" - gdb_test "maint dem Iisdouble__FPC6IntRep" \ + test_demangling "gnu: Iisdouble__FPC6IntRep" \ "Iisdouble\[(\]+(const IntRep|IntRep const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle InsertBody__15H_PullrightMenuii" "H_PullrightMenu::InsertBody(int, int)" - gdb_test_exact "maint demangle InsertCharacter__9TextManipc" "TextManip::InsertCharacter(char)" + test_demangling_exact "gnu: InsertBody__15H_PullrightMenuii" "H_PullrightMenu::InsertBody(int, int)" + test_demangling_exact "gnu: InsertCharacter__9TextManipc" "TextManip::InsertCharacter(char)" - gdb_test_exact "maint demangle InsertToplevel__7ivWorldP12ivInteractorT1" "ivWorld::InsertToplevel(ivInteractor *, ivInteractor *)" - gdb_test_exact "maint demangle InsertToplevel__7ivWorldP12ivInteractorT1iiUi" "ivWorld::InsertToplevel(ivInteractor *, ivInteractor *, int, int, unsigned int)" - gdb_test "maint dem IsADirectory__FPCcR4stat" \ + test_demangling_exact "gnu: InsertToplevel__7ivWorldP12ivInteractorT1" "ivWorld::InsertToplevel(ivInteractor *, ivInteractor *)" + test_demangling_exact "gnu: InsertToplevel__7ivWorldP12ivInteractorT1iiUi" "ivWorld::InsertToplevel(ivInteractor *, ivInteractor *, int, int, unsigned int)" + test_demangling "gnu: IsADirectory__FPCcR4stat" \ "IsADirectory\[(\]+(const char|char const) \[*\]+, stat &\[)\]+" - gdb_test_exact "maint demangle IsAGroup__FP11GraphicViewP11GraphicComp" "IsAGroup(GraphicView *, GraphicComp *)" - gdb_test_exact "maint demangle IsA__10ButtonCodeUl" "ButtonCode::IsA(unsigned long)" - - gdb_test_exact "maint demangle ReadName__FR7istreamPc" "ReadName(istream &, char *)" - gdb_test_exact "maint demangle Redraw__13StringBrowseriiii" "StringBrowser::Redraw(int, int, int, int)" - gdb_test_exact "maint demangle Rotate__13ivTransformerf" "ivTransformer::Rotate(float)" - gdb_test_exact "maint demangle Rotated__C13ivTransformerf" "ivTransformer::Rotated(float) const" - gdb_test_exact "maint demangle Round__Ff" "Round(float)" - - gdb_test_exact "maint demangle SetExport__16MemberSharedNameUi" "MemberSharedName::SetExport(unsigned int)" - gdb_test_exact "maint demangle Set__14ivControlState13ControlStatusUi" "ivControlState::Set(ControlStatus, unsigned int)" - gdb_test_exact "maint demangle Set__5DFacePcii" "DFace::Set(char *, int, int)" - - gdb_test_exact "maint demangle VConvert__9ivTSolverP12ivInteractorRP8TElementT2" "ivTSolver::VConvert(ivInteractor *, TElement *&, TElement *&)" - gdb_test_exact "maint demangle VConvert__9ivTSolverP7ivTGlueRP8TElement" "ivTSolver::VConvert(ivTGlue *, TElement *&)" - gdb_test_exact "maint demangle VOrder__9ivTSolverUiRP12ivInteractorT2" "ivTSolver::VOrder(unsigned int, ivInteractor *&, ivInteractor *&)" - gdb_test "maint dem Valid__7CatalogPCcRP4Tool" \ + test_demangling_exact "gnu: IsAGroup__FP11GraphicViewP11GraphicComp" "IsAGroup(GraphicView *, GraphicComp *)" + test_demangling_exact "gnu: IsA__10ButtonCodeUl" "ButtonCode::IsA(unsigned long)" + + test_demangling_exact "gnu: ReadName__FR7istreamPc" "ReadName(istream &, char *)" + test_demangling_exact "gnu: Redraw__13StringBrowseriiii" "StringBrowser::Redraw(int, int, int, int)" + test_demangling_exact "gnu: Rotate__13ivTransformerf" "ivTransformer::Rotate(float)" + test_demangling_exact "gnu: Rotated__C13ivTransformerf" "ivTransformer::Rotated(float) const" + test_demangling_exact "gnu: Round__Ff" "Round(float)" + + test_demangling_exact "gnu: SetExport__16MemberSharedNameUi" "MemberSharedName::SetExport(unsigned int)" + test_demangling_exact "gnu: Set__14ivControlState13ControlStatusUi" "ivControlState::Set(ControlStatus, unsigned int)" + test_demangling_exact "gnu: Set__5DFacePcii" "DFace::Set(char *, int, int)" + + test_demangling_exact "gnu: VConvert__9ivTSolverP12ivInteractorRP8TElementT2" "ivTSolver::VConvert(ivInteractor *, TElement *&, TElement *&)" + test_demangling_exact "gnu: VConvert__9ivTSolverP7ivTGlueRP8TElement" "ivTSolver::VConvert(ivTGlue *, TElement *&)" + test_demangling_exact "gnu: VOrder__9ivTSolverUiRP12ivInteractorT2" "ivTSolver::VOrder(unsigned int, ivInteractor *&, ivInteractor *&)" + test_demangling "gnu: Valid__7CatalogPCcRP4Tool" \ "Catalog::Valid\[(\]+(const char|char const) \[*\]+, Tool \[*\]+&\[)\]+" - gdb_test_exact "maint demangle _10PageButton\$__both" "PageButton::__both" - gdb_test_exact "maint demangle _3RNG\$singleMantissa" "RNG::singleMantissa" - gdb_test_exact "maint demangle _5IComp\$_release" "IComp::_release" - gdb_test_exact "maint demangle _\$_10BitmapComp" "BitmapComp::~BitmapComp(void)" - - gdb_test_exact "maint demangle _\$_9__io_defs" "__io_defs::~__io_defs(void)" - gdb_test_exact "maint demangle _\$_Q23foo3bar" "foo::bar::~bar(void)" - gdb_test_exact "maint demangle _\$_Q33foo3bar4bell" "foo::bar::bell::~bell(void)" - gdb_test_exact "maint demangle __10ivTelltaleiP7ivGlyph" "ivTelltale::ivTelltale(int, ivGlyph *)" - gdb_test_exact "maint demangle __10ivViewportiP12ivInteractorUi" "ivViewport::ivViewport(int, ivInteractor *, unsigned int)" - gdb_test_exact "maint demangle __10ostrstream" "ostrstream::ostrstream(void)" - gdb_test_exact "maint demangle __10ostrstreamPcii" "ostrstream::ostrstream(char *, int, int)" - gdb_test "maint dem __11BasicDialogiPCcP13ivButtonStateN22Ui" \ + test_demangling_exact "gnu: _10PageButton\$__both" "PageButton::__both" + test_demangling_exact "gnu: _3RNG\$singleMantissa" "RNG::singleMantissa" + test_demangling_exact "gnu: _5IComp\$_release" "IComp::_release" + test_demangling_exact "gnu: _\$_10BitmapComp" "BitmapComp::~BitmapComp(void)" + + test_demangling_exact "gnu: _\$_9__io_defs" "__io_defs::~__io_defs(void)" + test_demangling_exact "gnu: _\$_Q23foo3bar" "foo::bar::~bar(void)" + test_demangling_exact "gnu: _\$_Q33foo3bar4bell" "foo::bar::bell::~bell(void)" + test_demangling_exact "gnu: __10ivTelltaleiP7ivGlyph" "ivTelltale::ivTelltale(int, ivGlyph *)" + test_demangling_exact "gnu: __10ivViewportiP12ivInteractorUi" "ivViewport::ivViewport(int, ivInteractor *, unsigned int)" + test_demangling_exact "gnu: __10ostrstream" "ostrstream::ostrstream(void)" + test_demangling_exact "gnu: __10ostrstreamPcii" "ostrstream::ostrstream(char *, int, int)" + test_demangling "gnu: __11BasicDialogiPCcP13ivButtonStateN22Ui" \ "BasicDialog::BasicDialog\[(\]+int, (const char|char const) \[*\]+, ivButtonState \[*\]+, (const char|char const) \[*\]+, (const char|char const) \[*\]+, unsigned int\[)\]+" - gdb_test_exact "maint demangle __11BitmapTablei" "BitmapTable::BitmapTable(int)" - gdb_test_exact "maint demangle __12ViewportCodeP12ViewportComp" "ViewportCode::ViewportCode(ViewportComp *)" - gdb_test "maint dem __12iv2_6_BorderiPCci" \ + test_demangling_exact "gnu: __11BitmapTablei" "BitmapTable::BitmapTable(int)" + test_demangling_exact "gnu: __12ViewportCodeP12ViewportComp" "ViewportCode::ViewportCode(ViewportComp *)" + test_demangling "gnu: __12iv2_6_BorderiPCci" \ "iv2_6_Border::iv2_6_Border\[(\]+int, (const char|char const) \[*\]+, int\[)\]+" - gdb_test_exact "maint demangle __12iv2_6_Borderii" "iv2_6_Border::iv2_6_Border(int, int)" - gdb_test "maint dem __12ivBackgroundiP7ivGlyphPC7ivColor" \ + test_demangling_exact "gnu: __12iv2_6_Borderii" "iv2_6_Border::iv2_6_Border(int, int)" + test_demangling "gnu: __12ivBackgroundiP7ivGlyphPC7ivColor" \ "ivBackground::ivBackground\[(\]+int, ivGlyph \[*\]+, (const ivColor|ivColor const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle __12ivBreak_Listl" "ivBreak_List::ivBreak_List(long)" - gdb_test "maint dem __14TextInteractoriPCcUi" \ + test_demangling_exact "gnu: __12ivBreak_Listl" "ivBreak_List::ivBreak_List(long)" + test_demangling "gnu: __14TextInteractoriPCcUi" \ "TextInteractor::TextInteractor\[(\]+int, (const char|char const) \[*\]+, unsigned int\[)\]+" - gdb_test_exact "maint demangle __14iv2_6_MenuItemiP12ivInteractor" "iv2_6_MenuItem::iv2_6_MenuItem(int, ivInteractor *)" - gdb_test "maint dem __14iv2_6_MenuItemiPCcP12ivInteractor" \ + test_demangling_exact "gnu: __14iv2_6_MenuItemiP12ivInteractor" "iv2_6_MenuItem::iv2_6_MenuItem(int, ivInteractor *)" + test_demangling "gnu: __14iv2_6_MenuItemiPCcP12ivInteractor" \ "iv2_6_MenuItem::iv2_6_MenuItem\[(\]+int, (const char|char const) \[*\]+, ivInteractor \[*\]+\[)\]+" - gdb_test_exact "maint demangle __20DisplayList_IteratorR11DisplayList" "DisplayList_Iterator::DisplayList_Iterator(DisplayList &)" - gdb_test_exact "maint demangle __3fooRT0" "foo::foo(foo &)" - gdb_test_exact "maint demangle __3fooiN31" "foo::foo(int, int, int, int)" - gdb_test "maint dem __3fooiPCc" \ + test_demangling_exact "gnu: __20DisplayList_IteratorR11DisplayList" "DisplayList_Iterator::DisplayList_Iterator(DisplayList &)" + test_demangling_exact "gnu: __3fooRT0" "foo::foo(foo &)" + test_demangling_exact "gnu: __3fooiN31" "foo::foo(int, int, int, int)" + test_demangling "gnu: __3fooiPCc" \ "foo::foo\[(\]+int, (const char|char const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle __3fooiRT0iT2iT2" "foo::foo(int, foo &, int, foo &, int, foo &)" - gdb_test "maint dem __6GetOptiPPcPCc" \ + test_demangling_exact "gnu: __3fooiRT0iT2iT2" "foo::foo(int, foo &, int, foo &, int, foo &)" + test_demangling "gnu: __6GetOptiPPcPCc" \ "GetOpt::GetOpt\[(\]+int, char \[*\]+\[*\]+, (const char|char const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle __6KeyMapPT0" "KeyMap::KeyMap(KeyMap *)" - gdb_test "maint dem __7ivWorldPCcRiPPcPC12ivOptionDescPC14ivPropertyData" \ + test_demangling_exact "gnu: __6KeyMapPT0" "KeyMap::KeyMap(KeyMap *)" + test_demangling "gnu: __7ivWorldPCcRiPPcPC12ivOptionDescPC14ivPropertyData" \ "ivWorld::ivWorld\[(\]+(const char|char const) \[*\]+, int &, char \[*\]+\[*\]+, (const ivOptionDesc|ivOptionDesc const) \[*\]+, (const ivPropertyData|ivPropertyData const) \[*\]+\[)\]+" - gdb_test "maint dem __7procbufPCci" \ + test_demangling "gnu: __7procbufPCci" \ "procbuf::procbuf\[(\]+(const char|char const) \[*\]+, int\[)\]+" - gdb_test_exact "maint demangle __8ArrowCmdP6EditorUiUi" "ArrowCmd::ArrowCmd(Editor *, unsigned int, unsigned int)" - - gdb_test_exact "maint demangle __9F_EllipseiiiiP7Graphic" "F_Ellipse::F_Ellipse(int, int, int, int, Graphic *)" - gdb_test_exact "maint demangle __9FrameDataP9FrameCompi" "FrameData::FrameData(FrameComp *, int)" - gdb_test_exact "maint demangle __9HVGraphicP9CanvasVarP7Graphic" "HVGraphic::HVGraphic(CanvasVar *, Graphic *)" - gdb_test_exact "maint demangle __Q23foo3bar" "foo::bar::bar(void)" - gdb_test_exact "maint demangle __Q33foo3bar4bell" "foo::bar::bell::bell(void)" - gdb_test_exact "maint demangle __aa__3fooRT0" "foo::operator&&(foo &)" - gdb_test_exact "maint demangle __aad__3fooRT0" "foo::operator&=(foo &)" - gdb_test_exact "maint demangle __ad__3fooRT0" "foo::operator&(foo &)" - gdb_test_exact "maint demangle __adv__3fooRT0" "foo::operator/=(foo &)" - gdb_test_exact "maint demangle __aer__3fooRT0" "foo::operator^=(foo &)" - gdb_test_exact "maint demangle __als__3fooRT0" "foo::operator<<=(foo &)" - gdb_test_exact "maint demangle __amd__3fooRT0" "foo::operator%=(foo &)" - gdb_test_exact "maint demangle __ami__3fooRT0" "foo::operator-=(foo &)" - gdb_test_exact "maint demangle __aml__3FixRT0" "Fix::operator*=(Fix &)" - gdb_test_exact "maint demangle __aml__5Fix16i" "Fix16::operator*=(int)" - gdb_test_exact "maint demangle __aml__5Fix32RT0" "Fix32::operator*=(Fix32 &)" - gdb_test_exact "maint demangle __aor__3fooRT0" "foo::operator|=(foo &)" - gdb_test_exact "maint demangle __apl__3fooRT0" "foo::operator+=(foo &)" - gdb_test_exact "maint demangle __ars__3fooRT0" "foo::operator>>=(foo &)" - - gdb_test_exact "maint demangle __as__3fooRT0" "foo::operator=(foo &)" - gdb_test_exact "maint demangle __cl__3fooRT0" "foo::operator()(foo &)" - gdb_test_exact "maint demangle __cl__6Normal" "Normal::operator()(void)" - gdb_test_exact "maint demangle __cl__6Stringii" "String::operator()(int, int)" - gdb_test_exact "maint demangle __cm__3fooRT0" "foo::operator, (foo &)" - gdb_test_exact "maint demangle __co__3foo" "foo::operator~(void)" - gdb_test_exact "maint demangle __dl__3fooPv" "foo::operator delete(void *)" - gdb_test_exact "maint demangle __dv__3fooRT0" "foo::operator/(foo &)" - gdb_test_exact "maint demangle __eq__3fooRT0" "foo::operator==(foo &)" - gdb_test_exact "maint demangle __er__3fooRT0" "foo::operator^(foo &)" - gdb_test_exact "maint demangle __ge__3fooRT0" "foo::operator>=(foo &)" - gdb_test_exact "maint demangle __gt__3fooRT0" "foo::operator>(foo &)" - gdb_test_exact "maint demangle __le__3fooRT0" "foo::operator<=(foo &)" - gdb_test_exact "maint demangle __ls__3fooRT0" "foo::operator<<(foo &)" - gdb_test_exact "maint demangle __ls__FR7ostreamPFR3ios_R3ios" "operator<<(ostream &, ios &(*)(ios &))" - gdb_test_exact "maint demangle __ls__FR7ostreamR3Fix" "operator<<(ostream &, Fix &)" - gdb_test_exact "maint demangle __lt__3fooRT0" "foo::operator<(foo &)" - gdb_test_exact "maint demangle __md__3fooRT0" "foo::operator%(foo &)" - gdb_test_exact "maint demangle __mi__3fooRT0" "foo::operator-(foo &)" - gdb_test_exact "maint demangle __ml__3fooRT0" "foo::operator*(foo &)" - gdb_test_exact "maint demangle __mm__3fooi" "foo::operator--(int)" - - gdb_test_exact "maint demangle __ne__3fooRT0" "foo::operator!=(foo &)" - gdb_test "maint dem __ne__FRC7ComplexT0" \ + test_demangling_exact "gnu: __8ArrowCmdP6EditorUiUi" "ArrowCmd::ArrowCmd(Editor *, unsigned int, unsigned int)" + + test_demangling_exact "gnu: __9F_EllipseiiiiP7Graphic" "F_Ellipse::F_Ellipse(int, int, int, int, Graphic *)" + test_demangling_exact "gnu: __9FrameDataP9FrameCompi" "FrameData::FrameData(FrameComp *, int)" + test_demangling_exact "gnu: __9HVGraphicP9CanvasVarP7Graphic" "HVGraphic::HVGraphic(CanvasVar *, Graphic *)" + test_demangling_exact "gnu: __Q23foo3bar" "foo::bar::bar(void)" + test_demangling_exact "gnu: __Q33foo3bar4bell" "foo::bar::bell::bell(void)" + test_demangling_exact "gnu: __aa__3fooRT0" "foo::operator&&(foo &)" + test_demangling_exact "gnu: __aad__3fooRT0" "foo::operator&=(foo &)" + test_demangling_exact "gnu: __ad__3fooRT0" "foo::operator&(foo &)" + test_demangling_exact "gnu: __adv__3fooRT0" "foo::operator/=(foo &)" + test_demangling_exact "gnu: __aer__3fooRT0" "foo::operator^=(foo &)" + test_demangling_exact "gnu: __als__3fooRT0" "foo::operator<<=(foo &)" + test_demangling_exact "gnu: __amd__3fooRT0" "foo::operator%=(foo &)" + test_demangling_exact "gnu: __ami__3fooRT0" "foo::operator-=(foo &)" + test_demangling_exact "gnu: __aml__3FixRT0" "Fix::operator*=(Fix &)" + test_demangling_exact "gnu: __aml__5Fix16i" "Fix16::operator*=(int)" + test_demangling_exact "gnu: __aml__5Fix32RT0" "Fix32::operator*=(Fix32 &)" + test_demangling_exact "gnu: __aor__3fooRT0" "foo::operator|=(foo &)" + test_demangling_exact "gnu: __apl__3fooRT0" "foo::operator+=(foo &)" + test_demangling_exact "gnu: __ars__3fooRT0" "foo::operator>>=(foo &)" + + test_demangling_exact "gnu: __as__3fooRT0" "foo::operator=(foo &)" + test_demangling_exact "gnu: __cl__3fooRT0" "foo::operator()(foo &)" + test_demangling_exact "gnu: __cl__6Normal" "Normal::operator()(void)" + test_demangling_exact "gnu: __cl__6Stringii" "String::operator()(int, int)" + test_demangling_exact "gnu: __cm__3fooRT0" "foo::operator, (foo &)" + test_demangling_exact "gnu: __co__3foo" "foo::operator~(void)" + test_demangling_exact "gnu: __dl__3fooPv" "foo::operator delete(void *)" + test_demangling_exact "gnu: __dv__3fooRT0" "foo::operator/(foo &)" + test_demangling_exact "gnu: __eq__3fooRT0" "foo::operator==(foo &)" + test_demangling_exact "gnu: __er__3fooRT0" "foo::operator^(foo &)" + test_demangling_exact "gnu: __ge__3fooRT0" "foo::operator>=(foo &)" + test_demangling_exact "gnu: __gt__3fooRT0" "foo::operator>(foo &)" + test_demangling_exact "gnu: __le__3fooRT0" "foo::operator<=(foo &)" + test_demangling_exact "gnu: __ls__3fooRT0" "foo::operator<<(foo &)" + test_demangling_exact "gnu: __ls__FR7ostreamPFR3ios_R3ios" "operator<<(ostream &, ios &(*)(ios &))" + test_demangling_exact "gnu: __ls__FR7ostreamR3Fix" "operator<<(ostream &, Fix &)" + test_demangling_exact "gnu: __lt__3fooRT0" "foo::operator<(foo &)" + test_demangling_exact "gnu: __md__3fooRT0" "foo::operator%(foo &)" + test_demangling_exact "gnu: __mi__3fooRT0" "foo::operator-(foo &)" + test_demangling_exact "gnu: __ml__3fooRT0" "foo::operator*(foo &)" + test_demangling_exact "gnu: __mm__3fooi" "foo::operator--(int)" + + test_demangling_exact "gnu: __ne__3fooRT0" "foo::operator!=(foo &)" + test_demangling "gnu: __ne__FRC7ComplexT0" \ "operator!=\[(\]+(const Complex|Complex const) &, (const Complex|Complex const) &\[)\]+" - gdb_test "maint dem __ne__FRC7Complexd" \ + test_demangling "gnu: __ne__FRC7Complexd" \ "operator!=\[(\]+(const Complex|Complex const) &, double\[)\]+" - gdb_test "maint dem __ne__FRC9SubStringRC6String" \ + test_demangling "gnu: __ne__FRC9SubStringRC6String" \ "operator!=\[(\]+(const SubString|SubString const) &, (const String|String const) &\[)\]+" - gdb_test_exact "maint demangle __nt__3foo" "foo::operator!(void)" - gdb_test_exact "maint demangle __nw__3fooi" "foo::operator new(int)" - gdb_test_exact "maint demangle __oo__3fooRT0" "foo::operator||(foo &)" - gdb_test_exact "maint demangle __opPc__3foo" "foo::operator char *(void)" - gdb_test_exact "maint demangle __opi__3foo" "foo::operator int(void)" - gdb_test_exact "maint demangle __or__3fooRT0" "foo::operator|(foo &)" - gdb_test_exact "maint demangle __pl__3fooRT0" "foo::operator+(foo &)" - gdb_test_exact "maint demangle __pp__3fooi" "foo::operator++(int)" - gdb_test_exact "maint demangle __rf__3foo" "foo::operator->(void)" - gdb_test_exact "maint demangle __rm__3fooRT0" "foo::operator->*(foo &)" - gdb_test_exact "maint demangle __rs__3fooRT0" "foo::operator>>(foo &)" - gdb_test "maint dem __vc__3fooRT0" "foo::operator\\\[\\\]\\(foo &\\)" - gdb_test "maint dem _gsub__6StringRC5RegexPCci" \ + test_demangling_exact "gnu: __nt__3foo" "foo::operator!(void)" + test_demangling_exact "gnu: __nw__3fooi" "foo::operator new(int)" + test_demangling_exact "gnu: __oo__3fooRT0" "foo::operator||(foo &)" + test_demangling_exact "gnu: __opPc__3foo" "foo::operator char *(void)" + test_demangling_exact "gnu: __opi__3foo" "foo::operator int(void)" + test_demangling_exact "gnu: __or__3fooRT0" "foo::operator|(foo &)" + test_demangling_exact "gnu: __pl__3fooRT0" "foo::operator+(foo &)" + test_demangling_exact "gnu: __pp__3fooi" "foo::operator++(int)" + test_demangling_exact "gnu: __rf__3foo" "foo::operator->(void)" + test_demangling_exact "gnu: __rm__3fooRT0" "foo::operator->*(foo &)" + test_demangling_exact "gnu: __rs__3fooRT0" "foo::operator>>(foo &)" + test_demangling "gnu: __vc__3fooRT0" "foo::operator\\\[\\\]\\(foo &\\)" + test_demangling "gnu: _gsub__6StringRC5RegexPCci" \ "String::_gsub\[(\]+(const Regex|Regex const) &, (const char|char const) \[*\]+, int\[)\]+" - gdb_test_exact "maint demangle _new_Fix__FUs" "_new_Fix(unsigned short)" + test_demangling_exact "gnu: _new_Fix__FUs" "_new_Fix(unsigned short)" # gcc 2.4.5 (and earlier) style virtual tables. We want to continue to # correctly demangle these even if newer compilers use a different form. - gdb_test_exact "maint demangle _vt.foo" "foo virtual table" - gdb_test_exact "maint demangle _vt.foo.bar" "foo::bar virtual table" - gdb_test_exact "maint demangle _vt\$foo" "foo virtual table" - gdb_test_exact "maint demangle _vt\$foo\$bar" "foo::bar virtual table" + test_demangling_exact "gnu: _vt.foo" "foo virtual table" + test_demangling_exact "gnu: _vt.foo.bar" "foo::bar virtual table" + test_demangling_exact "gnu: _vt\$foo" "foo virtual table" + test_demangling_exact "gnu: _vt\$foo\$bar" "foo::bar virtual table" - gdb_test_exact "maint demangle append__7ivGlyphPT0" "ivGlyph::append(ivGlyph *)" - gdb_test "maint dem arg__FRC7Complex" \ + test_demangling_exact "gnu: append__7ivGlyphPT0" "ivGlyph::append(ivGlyph *)" + test_demangling "gnu: arg__FRC7Complex" \ "arg\[(\]+(const Complex|Complex const) &\[)\]+" - gdb_test_exact "maint demangle clearok__FP7_win_sti" "clearok(_win_st *, int)" - - gdb_test_exact "maint demangle complexfunc2__FPFPc_i" "complexfunc2(int (*)(char *))" - gdb_test_exact "maint demangle complexfunc3__FPFPFPl_s_i" "complexfunc3(int (*)(short (*)(long *)))" - gdb_test_exact "maint demangle complexfunc4__FPFPFPc_s_i" "complexfunc4(int (*)(short (*)(char *)))" - gdb_test_exact "maint demangle complexfunc5__FPFPc_PFl_i" "complexfunc5(int (*(*)(char *))(long))" - gdb_test_exact "maint demangle complexfunc6__FPFPi_PFl_i" "complexfunc6(int (*(*)(int *))(long))" - gdb_test_exact "maint demangle complexfunc7__FPFPFPc_i_PFl_i" "complexfunc7(int (*(*)(int (*)(char *)))(long))" - gdb_test "maint dem contains__C9BitStringRC10BitPattern" \ + test_demangling_exact "gnu: clearok__FP7_win_sti" "clearok(_win_st *, int)" + + test_demangling_exact "gnu: complexfunc2__FPFPc_i" "complexfunc2(int (*)(char *))" + test_demangling_exact "gnu: complexfunc3__FPFPFPl_s_i" "complexfunc3(int (*)(short (*)(long *)))" + test_demangling_exact "gnu: complexfunc4__FPFPFPc_s_i" "complexfunc4(int (*)(short (*)(char *)))" + test_demangling_exact "gnu: complexfunc5__FPFPc_PFl_i" "complexfunc5(int (*(*)(char *))(long))" + test_demangling_exact "gnu: complexfunc6__FPFPi_PFl_i" "complexfunc6(int (*(*)(int *))(long))" + test_demangling_exact "gnu: complexfunc7__FPFPFPc_i_PFl_i" "complexfunc7(int (*(*)(int (*)(char *)))(long))" + test_demangling "gnu: contains__C9BitStringRC10BitPattern" \ "BitString::contains\[(\]+(const BitPattern|BitPattern const) &\[)\]+ const" - gdb_test "maint dem contains__C9BitStringRC12BitSubStringi" \ + test_demangling "gnu: contains__C9BitStringRC12BitSubStringi" \ "BitString::contains\[(\]+(const BitSubString|BitSubString const) &, int\[)\]+ const" - gdb_test "maint dem contains__C9BitStringRT0" \ + test_demangling "gnu: contains__C9BitStringRT0" \ "BitString::contains\[(\]+(const BitString|BitString const) &\[)\]+ const" - gdb_test "maint dem div__FPC6IntRepT0P6IntRep" \ + test_demangling "gnu: div__FPC6IntRepT0P6IntRep" \ "div\[(\]+(const IntRep|IntRep const) \[*\]+, (const IntRep|IntRep const) \[*\]+, IntRep \[*\]+\[)\]+" - gdb_test "maint dem div__FPC6IntReplP6IntRep" \ + test_demangling "gnu: div__FPC6IntReplP6IntRep" \ "div\[(\]+(const IntRep|IntRep const) \[*\]+, long, IntRep \[*\]+\[)\]+" - gdb_test "maint dem div__FRC8RationalT0R8Rational" \ + test_demangling "gnu: div__FRC8RationalT0R8Rational" \ "div\[(\]+(const Rational|Rational const) &, (const Rational|Rational const) &, Rational &\[)\]+" - gdb_test "maint dem divide__FRC7IntegerT0R7IntegerT2" \ + test_demangling "gnu: divide__FRC7IntegerT0R7IntegerT2" \ "divide\[(\]+(const Integer|Integer const) &, (const Integer|Integer const) &, Integer &, Integer &\[)\]+" - gdb_test "maint dem divide__FRC7IntegerlR7IntegerRl" \ + test_demangling "gnu: divide__FRC7IntegerlR7IntegerRl" \ "divide\[(\]+(const Integer|Integer const) &, long, Integer &, long &\[)\]+" - gdb_test "maint dem enable__14DocumentViewerPCcUi" \ + test_demangling "gnu: enable__14DocumentViewerPCcUi" \ "DocumentViewer::enable\[(\]+(const char|char const) \[*\]+, unsigned int\[)\]+" - gdb_test_exact "maint demangle foo__FiN30" "foo(int, int, int, int)" - gdb_test_exact "maint demangle foo__FiR3fooiT1iT1" "foo(int, foo &, int, foo &, int, foo &)" - gdb_test_exact "maint demangle foo___3barl" "bar::foo_(long)" - gdb_test_exact "maint demangle insert__15ivClippingStacklRP8_XRegion" "ivClippingStack::insert(long, _XRegion *&)" - gdb_test_exact "maint demangle insert__16ChooserInfo_ListlR11ChooserInfo" "ChooserInfo_List::insert(long, ChooserInfo &)" - gdb_test_exact "maint demangle insert__17FontFamilyRepListlRP15ivFontFamilyRep" "FontFamilyRepList::insert(long, ivFontFamilyRep *&)" - gdb_test_exact "maint demangle leaveok__FP7_win_stc" "leaveok(_win_st *, char)" - gdb_test_exact "maint demangle left_mover__C7ivMFKitP12ivAdjustableP7ivStyle" "ivMFKit::left_mover(ivAdjustable *, ivStyle *) const" - gdb_test "maint dem matches__C9BitStringRC10BitPatterni" \ + test_demangling_exact "gnu: foo__FiN30" "foo(int, int, int, int)" + test_demangling_exact "gnu: foo__FiR3fooiT1iT1" "foo(int, foo &, int, foo &, int, foo &)" + test_demangling_exact "gnu: foo___3barl" "bar::foo_(long)" + test_demangling_exact "gnu: insert__15ivClippingStacklRP8_XRegion" "ivClippingStack::insert(long, _XRegion *&)" + test_demangling_exact "gnu: insert__16ChooserInfo_ListlR11ChooserInfo" "ChooserInfo_List::insert(long, ChooserInfo &)" + test_demangling_exact "gnu: insert__17FontFamilyRepListlRP15ivFontFamilyRep" "FontFamilyRepList::insert(long, ivFontFamilyRep *&)" + test_demangling_exact "gnu: leaveok__FP7_win_stc" "leaveok(_win_st *, char)" + test_demangling_exact "gnu: left_mover__C7ivMFKitP12ivAdjustableP7ivStyle" "ivMFKit::left_mover(ivAdjustable *, ivStyle *) const" + test_demangling "gnu: matches__C9BitStringRC10BitPatterni" \ "BitString::matches\[(\]+(const BitPattern|BitPattern const) &, int\[)\]+ const" - gdb_test "maint dem matches__C9SubStringRC5Regex" \ + test_demangling "gnu: matches__C9SubStringRC5Regex" \ "SubString::matches\[(\]+(const Regex|Regex const) &\[)\]+ const" - gdb_test_exact "maint demangle overload1arg__FSc" "overload1arg(signed char)" - gdb_test_exact "maint demangle overload1arg__FUc" "overload1arg(unsigned char)" - gdb_test_exact "maint demangle overload1arg__FUi" "overload1arg(unsigned int)" - gdb_test_exact "maint demangle overload1arg__FUl" "overload1arg(unsigned long)" - gdb_test_exact "maint demangle overload1arg__FUs" "overload1arg(unsigned short)" - gdb_test_exact "maint demangle overload1arg__Fc" "overload1arg(char)" - gdb_test_exact "maint demangle overload1arg__Fd" "overload1arg(double)" - gdb_test_exact "maint demangle overload1arg__Ff" "overload1arg(float)" - gdb_test_exact "maint demangle overload1arg__Fi" "overload1arg(int)" - gdb_test_exact "maint demangle overload1arg__Fl" "overload1arg(long)" - gdb_test_exact "maint demangle overload1arg__Fs" "overload1arg(short)" - gdb_test_exact "maint demangle overload1arg__Fv" "overload1arg(void)" - gdb_test_exact "maint demangle overloadargs__Fi" "overloadargs(int)" - gdb_test_exact "maint demangle overloadargs__Fii" "overloadargs(int, int)" - gdb_test_exact "maint demangle overloadargs__Fiii" "overloadargs(int, int, int)" - gdb_test_exact "maint demangle overloadargs__Fiiii" "overloadargs(int, int, int, int)" - - gdb_test_exact "maint demangle overloadargs__Fiiiii" "overloadargs(int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__Fiiiiii" "overloadargs(int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__Fiiiiiii" "overloadargs(int, int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__Fiiiiiiii" "overloadargs(int, int, int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__Fiiiiiiiii" "overloadargs(int, int, int, int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__Fiiiiiiiiii" "overloadargs(int, int, int, int, int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__Fiiiiiiiiiii" "overloadargs(int, int, int, int, int, int, int, int, int, int, int)" - gdb_test "maint dem pick__13ivCompositionP8ivCanvasRC12ivAllocationiR5ivHit" \ + test_demangling_exact "gnu: overload1arg__FSc" "overload1arg(signed char)" + test_demangling_exact "gnu: overload1arg__FUc" "overload1arg(unsigned char)" + test_demangling_exact "gnu: overload1arg__FUi" "overload1arg(unsigned int)" + test_demangling_exact "gnu: overload1arg__FUl" "overload1arg(unsigned long)" + test_demangling_exact "gnu: overload1arg__FUs" "overload1arg(unsigned short)" + test_demangling_exact "gnu: overload1arg__Fc" "overload1arg(char)" + test_demangling_exact "gnu: overload1arg__Fd" "overload1arg(double)" + test_demangling_exact "gnu: overload1arg__Ff" "overload1arg(float)" + test_demangling_exact "gnu: overload1arg__Fi" "overload1arg(int)" + test_demangling_exact "gnu: overload1arg__Fl" "overload1arg(long)" + test_demangling_exact "gnu: overload1arg__Fs" "overload1arg(short)" + test_demangling_exact "gnu: overload1arg__Fv" "overload1arg(void)" + test_demangling_exact "gnu: overloadargs__Fi" "overloadargs(int)" + test_demangling_exact "gnu: overloadargs__Fii" "overloadargs(int, int)" + test_demangling_exact "gnu: overloadargs__Fiii" "overloadargs(int, int, int)" + test_demangling_exact "gnu: overloadargs__Fiiii" "overloadargs(int, int, int, int)" + + test_demangling_exact "gnu: overloadargs__Fiiiii" "overloadargs(int, int, int, int, int)" + test_demangling_exact "gnu: overloadargs__Fiiiiii" "overloadargs(int, int, int, int, int, int)" + test_demangling_exact "gnu: overloadargs__Fiiiiiii" "overloadargs(int, int, int, int, int, int, int)" + test_demangling_exact "gnu: overloadargs__Fiiiiiiii" "overloadargs(int, int, int, int, int, int, int, int)" + test_demangling_exact "gnu: overloadargs__Fiiiiiiiii" "overloadargs(int, int, int, int, int, int, int, int, int)" + test_demangling_exact "gnu: overloadargs__Fiiiiiiiiii" "overloadargs(int, int, int, int, int, int, int, int, int, int)" + test_demangling_exact "gnu: overloadargs__Fiiiiiiiiiii" "overloadargs(int, int, int, int, int, int, int, int, int, int, int)" + test_demangling "gnu: pick__13ivCompositionP8ivCanvasRC12ivAllocationiR5ivHit" \ "ivComposition::pick\[(\]+ivCanvas \[*\]+, (const ivAllocation|ivAllocation const) &, int, ivHit &\[)\]+" - gdb_test "maint dem pointer__C11ivHScrollerRC7ivEventRC12ivAllocation" \ + test_demangling "gnu: pointer__C11ivHScrollerRC7ivEventRC12ivAllocation" \ "ivHScroller::pointer\[(\]+(const ivEvent|ivEvent const) &, (const ivAllocation|ivAllocation const) &\[)\]+ const" - gdb_test_exact "maint demangle poke__8ivRasterUlUlffff" "ivRaster::poke(unsigned long, unsigned long, float, float, float, float)" - gdb_test_exact "maint demangle polar__Fdd" "polar(double, double)" - gdb_test "maint dem read__10osStdInputRPCc" \ + test_demangling_exact "gnu: poke__8ivRasterUlUlffff" "ivRaster::poke(unsigned long, unsigned long, float, float, float, float)" + test_demangling_exact "gnu: polar__Fdd" "polar(double, double)" + test_demangling "gnu: read__10osStdInputRPCc" \ "osStdInput::read\[(\]+(const char|char const) \[*\]+&\[)\]+" - gdb_test_exact "maint demangle scale__13ivTransformerff" "ivTransformer::scale(float, float)" - gdb_test "maint dem scanw__12CursesWindowPCce" \ + test_demangling_exact "gnu: scale__13ivTransformerff" "ivTransformer::scale(float, float)" + test_demangling "gnu: scanw__12CursesWindowPCce" \ "CursesWindow::scanw\[(\]+(const char|char const) \[*\]+,...\[)\]+" - gdb_test "maint dem scmp__FPCcT0" \ + test_demangling "gnu: scmp__FPCcT0" \ "scmp\[(\]+(const char|char const) \[*\]+, (const char|char const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle sgetn__7filebufPci" "filebuf::sgetn(char *, int)" - gdb_test_exact "maint demangle shift__FP5_FrepiT0" "shift(_Frep *, int, _Frep *)" - gdb_test_exact "maint demangle test__C6BitSeti" "BitSet::test(int) const" - gdb_test_exact "maint demangle test__C6BitSetii" "BitSet::test(int, int) const" - gdb_test "maint dem testbit__FRC7Integerl" \ + test_demangling_exact "gnu: sgetn__7filebufPci" "filebuf::sgetn(char *, int)" + test_demangling_exact "gnu: shift__FP5_FrepiT0" "shift(_Frep *, int, _Frep *)" + test_demangling_exact "gnu: test__C6BitSeti" "BitSet::test(int) const" + test_demangling_exact "gnu: test__C6BitSetii" "BitSet::test(int, int) const" + test_demangling "gnu: testbit__FRC7Integerl" \ "testbit\[(\]+(const Integer|Integer const) &, long\[)\]+" - gdb_test_exact "maint demangle text_source__8Documentl" "Document::text_source(long)" - gdb_test_exact "maint demangle variance__6Erlangd" "Erlang::variance(double)" - gdb_test "maint dem vform__8iostreamPCcPc" \ + test_demangling_exact "gnu: text_source__8Documentl" "Document::text_source(long)" + test_demangling_exact "gnu: variance__6Erlangd" "Erlang::variance(double)" + test_demangling "gnu: vform__8iostreamPCcPc" \ "iostream::vform\[(\]+(const char|char const) \[*\]+, char \[*\]+\[)\]+" - gdb_test_exact "maint demangle view__14DocumentViewerP8ItemViewP11TabularItem" "DocumentViewer::view(ItemView *, TabularItem *)" - gdb_test_exact "maint demangle xy_extents__11ivExtensionffff" "ivExtension::xy_extents(float, float, float, float)" - gdb_test_exact "maint demangle zero__8osMemoryPvUi" "osMemory::zero(void *, unsigned int)" - gdb_test_exact "maint demangle _2T4\$N" "T4::N" - gdb_test_exact "maint demangle _Q22T42t1\$N" "T4::t1::N" - gdb_test_exact "maint demangle get__2T1" "T1::get(void)" - gdb_test_exact "maint demangle get__Q22T11a" "T1::a::get(void)" - gdb_test_exact "maint demangle get__Q32T11a1b" "T1::a::b::get(void)" - gdb_test_exact "maint demangle get__Q42T11a1b1c" "T1::a::b::c::get(void)" - gdb_test_exact "maint demangle get__Q52T11a1b1c1d" "T1::a::b::c::d::get(void)" - gdb_test_exact "maint demangle put__2T1i" "T1::put(int)" - gdb_test_exact "maint demangle put__Q22T11ai" "T1::a::put(int)" - gdb_test_exact "maint demangle put__Q32T11a1bi" "T1::a::b::put(int)" - gdb_test_exact "maint demangle put__Q42T11a1b1ci" "T1::a::b::c::put(int)" - gdb_test_exact "maint demangle put__Q52T11a1b1c1di" "T1::a::b::c::d::put(int)" - - gdb_test_exact "maint demangle bar__3fooPv" "foo::bar(void *)" - gdb_test "maint dem bar__3fooPCv" \ + test_demangling_exact "gnu: view__14DocumentViewerP8ItemViewP11TabularItem" "DocumentViewer::view(ItemView *, TabularItem *)" + test_demangling_exact "gnu: xy_extents__11ivExtensionffff" "ivExtension::xy_extents(float, float, float, float)" + test_demangling_exact "gnu: zero__8osMemoryPvUi" "osMemory::zero(void *, unsigned int)" + test_demangling_exact "gnu: _2T4\$N" "T4::N" + test_demangling_exact "gnu: _Q22T42t1\$N" "T4::t1::N" + test_demangling_exact "gnu: get__2T1" "T1::get(void)" + test_demangling_exact "gnu: get__Q22T11a" "T1::a::get(void)" + test_demangling_exact "gnu: get__Q32T11a1b" "T1::a::b::get(void)" + test_demangling_exact "gnu: get__Q42T11a1b1c" "T1::a::b::c::get(void)" + test_demangling_exact "gnu: get__Q52T11a1b1c1d" "T1::a::b::c::d::get(void)" + test_demangling_exact "gnu: put__2T1i" "T1::put(int)" + test_demangling_exact "gnu: put__Q22T11ai" "T1::a::put(int)" + test_demangling_exact "gnu: put__Q32T11a1bi" "T1::a::b::put(int)" + test_demangling_exact "gnu: put__Q42T11a1b1ci" "T1::a::b::c::put(int)" + test_demangling_exact "gnu: put__Q52T11a1b1c1di" "T1::a::b::c::d::put(int)" + + test_demangling_exact "gnu: bar__3fooPv" "foo::bar(void *)" + test_demangling "gnu: bar__3fooPCv" \ "foo::bar\[(\]+(const void|void const) *\[*\]+\[)\]+" - gdb_test_exact "maint demangle bar__C3fooPv" "foo::bar(void *) const" - gdb_test "maint dem bar__C3fooPCv" \ + test_demangling_exact "gnu: bar__C3fooPv" "foo::bar(void *) const" + test_demangling "gnu: bar__C3fooPCv" \ "foo::bar\[(\]+(const void|void const) *\[*\]+\[)\]+ const" - gdb_test_exact "maint demangle __eq__3fooRT0" "foo::operator==(foo &)" - gdb_test "maint dem __eq__3fooRC3foo" \ + test_demangling_exact "gnu: __eq__3fooRT0" "foo::operator==(foo &)" + test_demangling "gnu: __eq__3fooRC3foo" \ "foo::operator==\[(\]+(const foo|foo const) &\[)\]+" - gdb_test_exact "maint demangle __eq__C3fooR3foo" "foo::operator==(foo &) const" - gdb_test "maint dem __eq__C3fooRT0" \ + test_demangling_exact "gnu: __eq__C3fooR3foo" "foo::operator==(foo &) const" + test_demangling "gnu: __eq__C3fooRT0" \ "foo::operator==\[(\]+(const foo|foo const) &\[)\]+ const" - gdb_test_exact "maint demangle elem__t6vector1Zdi" "vector<double>::elem(int)" - gdb_test_exact "maint demangle elem__t6vector1Zii" "vector<int>::elem(int)" - gdb_test_exact "maint demangle __t6vector1Zdi" "vector<double>::vector(int)" - gdb_test_exact "maint demangle __t6vector1Zii" "vector<int>::vector(int)" - gdb_test_exact "maint demangle _\$_t6vector1Zdi" "vector<double>::~vector(int)" - gdb_test_exact "maint demangle _\$_t6vector1Zii" "vector<int>::~vector(int)" - - gdb_test_exact "maint demangle __nw__t2T11ZcUi" "T1<char>::operator new(unsigned int)" - gdb_test_exact "maint demangle __nw__t2T11Z1tUi" "T1<t>::operator new(unsigned int)" - gdb_test_exact "maint demangle __dl__t2T11ZcPv" "T1<char>::operator delete(void *)" - gdb_test_exact "maint demangle __dl__t2T11Z1tPv" "T1<t>::operator delete(void *)" - gdb_test_exact "maint demangle __t2T11Zci" "T1<char>::T1(int)" - gdb_test_exact "maint demangle __t2T11Zc" "T1<char>::T1(void)" - gdb_test_exact "maint demangle __t2T11Z1ti" "T1<t>::T1(int)" - gdb_test_exact "maint demangle __t2T11Z1t" "T1<t>::T1(void)" - - gdb_test_exact "maint demangle __Q2t4List1Z10VHDLEntity3Pix" \ + test_demangling_exact "gnu: elem__t6vector1Zdi" "vector<double>::elem(int)" + test_demangling_exact "gnu: elem__t6vector1Zii" "vector<int>::elem(int)" + test_demangling_exact "gnu: __t6vector1Zdi" "vector<double>::vector(int)" + test_demangling_exact "gnu: __t6vector1Zii" "vector<int>::vector(int)" + test_demangling_exact "gnu: _\$_t6vector1Zdi" "vector<double>::~vector(int)" + test_demangling_exact "gnu: _\$_t6vector1Zii" "vector<int>::~vector(int)" + + test_demangling_exact "gnu: __nw__t2T11ZcUi" "T1<char>::operator new(unsigned int)" + test_demangling_exact "gnu: __nw__t2T11Z1tUi" "T1<t>::operator new(unsigned int)" + test_demangling_exact "gnu: __dl__t2T11ZcPv" "T1<char>::operator delete(void *)" + test_demangling_exact "gnu: __dl__t2T11Z1tPv" "T1<t>::operator delete(void *)" + test_demangling_exact "gnu: __t2T11Zci" "T1<char>::T1(int)" + test_demangling_exact "gnu: __t2T11Zc" "T1<char>::T1(void)" + test_demangling_exact "gnu: __t2T11Z1ti" "T1<t>::T1(int)" + test_demangling_exact "gnu: __t2T11Z1t" "T1<t>::T1(void)" + + test_demangling_exact "gnu: __Q2t4List1Z10VHDLEntity3Pix" \ "List<VHDLEntity>::Pix::Pix(void)" - gdb_test_exact "maint demangle __Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element" \ + test_demangling_exact "gnu: __Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element" \ "List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::element *)" - gdb_test_exact "maint demangle __Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix" \ + test_demangling_exact "gnu: __Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix" \ "List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::Pix const &)" - gdb_test_exact "maint demangle __Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0" \ + test_demangling_exact "gnu: __Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0" \ "List<VHDLEntity>::element::element(VHDLEntity const &, List<VHDLEntity>::element *)" - gdb_test_exact "maint demangle __Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element" \ + test_demangling_exact "gnu: __Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element" \ "List<VHDLEntity>::element::element(List<VHDLEntity>::element const &)" - gdb_test_exact "maint demangle __cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ + test_demangling_exact "gnu: __cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ "VHDLLibrary::operator()(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >) const" - gdb_test_exact "maint demangle __cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix" \ + test_demangling_exact "gnu: __cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix" \ "List<VHDLEntity>::operator()(List<VHDLEntity>::Pix const &) const" - gdb_test_exact "maint demangle __ne__FPvRCQ2t4List1Z10VHDLEntity3Pix" \ + test_demangling_exact "gnu: __ne__FPvRCQ2t4List1Z10VHDLEntity3Pix" \ "operator!=(void *, List<VHDLEntity>::Pix const &)" - gdb_test_exact "maint demangle __ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ + test_demangling_exact "gnu: __ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ "operator!=(void *, PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)" - gdb_test_exact "maint demangle __t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity" \ + test_demangling_exact "gnu: __t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity" \ "List<VHDLEntity>::List(List<VHDLEntity> const &)" - gdb_test_exact "maint demangle __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ + test_demangling_exact "gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ "PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(void)" - gdb_test_exact "maint demangle __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix" \ + test_demangling_exact "gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix" \ "PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(VHDLLibraryRep *, List<VHDLEntity>::Pix)" - gdb_test_exact "maint demangle __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ + test_demangling_exact "gnu: __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ "PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)" - gdb_test_exact "maint demangle nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ + test_demangling_exact "gnu: nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity" \ "VHDLLibrary::nextE(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > &) const" - gdb_test_exact "maint demangle next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix" \ + test_demangling_exact "gnu: next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix" \ "List<VHDLEntity>::next(List<VHDLEntity>::Pix &) const" - gdb_test_exact "maint demangle _GLOBAL_\$D\$set" "global destructors keyed to set" + test_demangling_exact "gnu: _GLOBAL_\$D\$set" "global destructors keyed to set" - gdb_test_exact "maint demangle _GLOBAL_\$I\$set" "global constructors keyed to set" + test_demangling_exact "gnu: _GLOBAL_\$I\$set" "global constructors keyed to set" - gdb_test_exact "maint demangle __as__t5ListS1ZUiRCt5ListS1ZUi" \ + test_demangling_exact "gnu: __as__t5ListS1ZUiRCt5ListS1ZUi" \ "ListS<unsigned int>::operator=(ListS<unsigned int> const &)" - gdb_test_exact "maint demangle __cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix" \ + test_demangling_exact "gnu: __cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix" \ "ListS<unsigned int>::operator()(ListS<unsigned int>::Vix const &) const" - gdb_test_exact "maint demangle __cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix" \ + test_demangling_exact "gnu: __cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix" \ "SetLS<unsigned int>::operator()(SetLS<unsigned int>::Vix const &) const" - gdb_test_exact "maint demangle __t10ListS_link1ZUiRCUiPT0" \ + test_demangling_exact "gnu: __t10ListS_link1ZUiRCUiPT0" \ "ListS_link<unsigned int>::ListS_link(unsigned int const &, ListS_link<unsigned int> *)" - gdb_test_exact "maint demangle __t10ListS_link1ZUiRCt10ListS_link1ZUi" \ + test_demangling_exact "gnu: __t10ListS_link1ZUiRCt10ListS_link1ZUi" \ "ListS_link<unsigned int>::ListS_link(ListS_link<unsigned int> const &)" - gdb_test_exact "maint demangle __t5ListS1ZUiRCt5ListS1ZUi" \ + test_demangling_exact "gnu: __t5ListS1ZUiRCt5ListS1ZUi" \ "ListS<unsigned int>::ListS(ListS<unsigned int> const &)" - gdb_test_exact "maint demangle next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix" \ + test_demangling_exact "gnu: next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix" \ "ListS<unsigned int>::next(ListS<unsigned int>::Vix &) const" - gdb_test_exact "maint demangle __ne__FPvRCQ2t5SetLS1ZUi3Vix" \ + test_demangling_exact "gnu: __ne__FPvRCQ2t5SetLS1ZUi3Vix" \ "operator!=(void *, SetLS<unsigned int>::Vix const &)" - gdb_test_exact "maint demangle __t8ListElem1Z5LabelRt4List1Z5Label" \ + test_demangling_exact "gnu: __t8ListElem1Z5LabelRt4List1Z5Label" \ "ListElem<Label>::ListElem(List<Label> &)" - gdb_test_exact "maint demangle __t8BDDHookV1ZPcRCPc" \ + test_demangling_exact "gnu: __t8BDDHookV1ZPcRCPc" \ "BDDHookV<char *>::BDDHookV(char *const &)" - gdb_test_exact "maint demangle _vt\$t8BDDHookV1ZPc" "BDDHookV<char *> virtual table" + test_demangling_exact "gnu: _vt\$t8BDDHookV1ZPc" "BDDHookV<char *> virtual table" - gdb_test_exact "maint demangle __ne__FPvRCQ211BDDFunction4VixB" \ + test_demangling_exact "gnu: __ne__FPvRCQ211BDDFunction4VixB" \ "operator!=(void *, BDDFunction::VixB const &)" - gdb_test_exact "maint demangle __eq__FPvRCQ211BDDFunction4VixB" \ + test_demangling_exact "gnu: __eq__FPvRCQ211BDDFunction4VixB" \ "operator==(void *, BDDFunction::VixB const &)" - gdb_test_exact "maint demangle relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters" \ + test_demangling_exact "gnu: relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters" \ "T_phi2::T_preserve::FPC_next::relativeId(T_phi2::T_preserve const &, Parameters const &) const" + test_demangling_exact "gnu: _Utf390_1__1_9223372036854775807__9223372036854775" \ + "Can't demangle \"_Utf390_1__1_9223372036854775807__9223372036854775\"" + test_demangling_exact "gnu: foo__I40" "foo(int64_t)" + test_demangling_exact "gnu: foo__I_200_" "foo(int512_t)" + test_demangling_exact "gnu: foo__I_200" "Can't demangle \"foo__I_200\"" + + ## Buffer overrun. Should make GDB crash. Woo hoo! + test_demangling_exact "gnu: foo__I_4000000000000000000000000000000000000000000000000000000000000000000000000" "Can't demangle \"foo__I_4000000000000000000000000000000000000000000000000000000000000000000000000\"" + + ## 1999-04-19: "Fix from Dale Hawkins". Shouldn't segfault. + test_demangling_exact "gnu: __thunk_64__0RL__list__Q29CosNaming20_proxy_NamingContextUlRPt25_CORBA_Unbounded_Sequence1ZQ29CosNaming7BindingRPQ29CosNaming15BindingIterator" "Can't demangle \"__thunk_64__0RL__list__Q29CosNaming20_proxy_NamingContextUlRPt25_CORBA_Unbounded_Sequence1ZQ29CosNaming7BindingRPQ29CosNaming15BindingIterator\"" } # @@ -453,277 +537,260 @@ proc test_gnu_style_demangling {} { # proc test_lucid_style_demangling {} { - global gdb_prompt - - # Set the demangling style to "lucid" and then check to make sure - # it really got set. Return if the style failed to get set for - # some reason. - - send_gdb "set demangle-style lucid\n" - gdb_expect { - -re "set demangle-style lucid\[\r\n\]+$gdb_prompt $" {} - -re ".*$gdb_prompt $" { fail "set demangle-style lucid failed" ; return } - timeout { fail "set demangle-style lucid failed (timeout)" ; return } - } - - send_gdb "show demangle-style\n" - gdb_expect { - -re "The current C\[+\]+ demangling style is \"lucid\".\r\n$gdb_prompt $" {} - -re ".*$gdb_prompt $" { fail "demangling style not set to lucid" } - timeout { fail "show demangle-style timed out" } - } - - gdb_test_exact "maint demangle WS__FR7istream" "WS(istream &)" - gdb_test_exact "maint demangle __aa__3fooFR3foo" "foo::operator&&(foo &)" - gdb_test_exact "maint demangle __aad__3fooFR3foo" "foo::operator&=(foo &)" - gdb_test_exact "maint demangle __ad__3fooFR3foo" "foo::operator&(foo &)" - gdb_test_exact "maint demangle __adv__3fooFR3foo" "foo::operator/=(foo &)" - gdb_test_exact "maint demangle __adv__7complexF7complex" "complex::operator/=(complex)" - gdb_test_exact "maint demangle __aer__3fooFR3foo" "foo::operator^=(foo &)" - gdb_test_exact "maint demangle __als__3fooFR3foo" "foo::operator<<=(foo &)" - gdb_test_exact "maint demangle __amd__3fooFR3foo" "foo::operator%=(foo &)" - gdb_test_exact "maint demangle __ami__3fooFR3foo" "foo::operator-=(foo &)" - gdb_test_exact "maint demangle __amu__3fooFR3foo" "foo::operator*=(foo &)" - gdb_test_exact "maint demangle __amu__7complexF7complex" "complex::operator*=(complex)" - gdb_test_exact "maint demangle __aor__3fooFR3foo" "foo::operator|=(foo &)" - gdb_test_exact "maint demangle __apl__3fooFR3foo" "foo::operator+=(foo &)" - gdb_test_exact "maint demangle __ars__3fooFR3foo" "foo::operator>>=(foo &)" - gdb_test_exact "maint demangle __as__18istream_withassignFP9streambuf" "istream_withassign::operator=(streambuf *)" - gdb_test_exact "maint demangle __as__18istream_withassignFR7istream" "istream_withassign::operator=(istream &)" - gdb_test_exact "maint demangle __as__3fooFR3foo" "foo::operator=(foo &)" - gdb_test_exact "maint demangle __as__3iosFR3ios" "ios::operator=(ios &)" - gdb_test_exact "maint demangle __cl__3fooFR3foo" "foo::operator()(foo &)" - gdb_test_exact "maint demangle __cm__3fooFR3foo" "foo::operator, (foo &)" - - gdb_test_exact "maint demangle __co__3fooFv" "foo::operator~(void)" - gdb_test_exact "maint demangle __ct__10istrstreamFPc" "istrstream::istrstream(char *)" - gdb_test_exact "maint demangle __ct__10istrstreamFPci" "istrstream::istrstream(char *, int)" - gdb_test_exact "maint demangle __ct__10ostrstreamFPciT2" "ostrstream::ostrstream(char *, int, int)" - gdb_test_exact "maint demangle __ct__10ostrstreamFv" "ostrstream::ostrstream(void)" - gdb_test_exact "maint demangle __ct__10smanip_intFPFR3iosi_R3iosi" "smanip_int::smanip_int(ios &(*)(ios &, int), int)" - gdb_test "maint dem __ct__11c_exceptionFPcRC7complexT2" "c_exception::c_exception\[(\]+char \[*\]+, (const complex|complex const) &, (const complex|complex const) &\[)\]+" - gdb_test "maint dem __ct__11fstreambaseFPCciT2" "fstreambase::fstreambase\[(\]+(const char|char const) \[*\]+, int, int\[)\]+" - gdb_test_exact "maint demangle __ct__11fstreambaseFi" "fstreambase::fstreambase(int)" - gdb_test_exact "maint demangle __ct__11fstreambaseFiPcT1" "fstreambase::fstreambase(int, char *, int)" - gdb_test_exact "maint demangle __ct__11fstreambaseFv" "fstreambase::fstreambase(void)" - gdb_test_exact "maint demangle __ct__11smanip_longFPFR3iosl_R3iosl" "smanip_long::smanip_long(ios &(*)(ios &, long), long)" - gdb_test_exact "maint demangle __ct__11stdiostreamFP4FILE" "stdiostream::stdiostream(FILE *)" - gdb_test_exact "maint demangle __ct__12strstreambufFPFl_PvPFPv_v" "strstreambuf::strstreambuf(void *(*)(long), void (*)(void *))" - gdb_test_exact "maint demangle __ct__12strstreambufFPUciT1" "strstreambuf::strstreambuf(unsigned char *, int, unsigned char *)" - gdb_test_exact "maint demangle __ct__12strstreambufFPciT1" "strstreambuf::strstreambuf(char *, int, char *)" - gdb_test_exact "maint demangle __ct__12strstreambufFi" "strstreambuf::strstreambuf(int)" - gdb_test_exact "maint demangle __ct__12strstreambufFv" "strstreambuf::strstreambuf(void)" - gdb_test_exact "maint demangle __ct__13strstreambaseFPciT1" "strstreambase::strstreambase(char *, int, char *)" - gdb_test_exact "maint demangle __ct__3fooFR3foo" "foo::foo(foo &)" - - gdb_test_exact "maint demangle __ct__3fooFi" "foo::foo(int)" - gdb_test_exact "maint demangle __ct__3fooFiN31" "foo::foo(int, int, int, int)" - gdb_test "maint dem __ct__3fooFiPCc" \ + test_demangling_exact "lucid: WS__FR7istream" "WS(istream &)" + test_demangling_exact "lucid: __aa__3fooFR3foo" "foo::operator&&(foo &)" + test_demangling_exact "lucid: __aad__3fooFR3foo" "foo::operator&=(foo &)" + test_demangling_exact "lucid: __ad__3fooFR3foo" "foo::operator&(foo &)" + test_demangling_exact "lucid: __adv__3fooFR3foo" "foo::operator/=(foo &)" + test_demangling_exact "lucid: __adv__7complexF7complex" "complex::operator/=(complex)" + test_demangling_exact "lucid: __aer__3fooFR3foo" "foo::operator^=(foo &)" + test_demangling_exact "lucid: __als__3fooFR3foo" "foo::operator<<=(foo &)" + test_demangling_exact "lucid: __amd__3fooFR3foo" "foo::operator%=(foo &)" + test_demangling_exact "lucid: __ami__3fooFR3foo" "foo::operator-=(foo &)" + test_demangling_exact "lucid: __amu__3fooFR3foo" "foo::operator*=(foo &)" + test_demangling_exact "lucid: __amu__7complexF7complex" "complex::operator*=(complex)" + test_demangling_exact "lucid: __aor__3fooFR3foo" "foo::operator|=(foo &)" + test_demangling_exact "lucid: __apl__3fooFR3foo" "foo::operator+=(foo &)" + test_demangling_exact "lucid: __ars__3fooFR3foo" "foo::operator>>=(foo &)" + test_demangling_exact "lucid: __as__18istream_withassignFP9streambuf" "istream_withassign::operator=(streambuf *)" + test_demangling_exact "lucid: __as__18istream_withassignFR7istream" "istream_withassign::operator=(istream &)" + test_demangling_exact "lucid: __as__3fooFR3foo" "foo::operator=(foo &)" + test_demangling_exact "lucid: __as__3iosFR3ios" "ios::operator=(ios &)" + test_demangling_exact "lucid: __cl__3fooFR3foo" "foo::operator()(foo &)" + test_demangling_exact "lucid: __cm__3fooFR3foo" "foo::operator, (foo &)" + + test_demangling_exact "lucid: __co__3fooFv" "foo::operator~(void)" + test_demangling_exact "lucid: __ct__10istrstreamFPc" "istrstream::istrstream(char *)" + test_demangling_exact "lucid: __ct__10istrstreamFPci" "istrstream::istrstream(char *, int)" + test_demangling_exact "lucid: __ct__10ostrstreamFPciT2" "ostrstream::ostrstream(char *, int, int)" + test_demangling_exact "lucid: __ct__10ostrstreamFv" "ostrstream::ostrstream(void)" + test_demangling_exact "lucid: __ct__10smanip_intFPFR3iosi_R3iosi" "smanip_int::smanip_int(ios &(*)(ios &, int), int)" + test_demangling "lucid: __ct__11c_exceptionFPcRC7complexT2" "c_exception::c_exception\[(\]+char \[*\]+, (const complex|complex const) &, (const complex|complex const) &\[)\]+" + test_demangling "lucid: __ct__11fstreambaseFPCciT2" "fstreambase::fstreambase\[(\]+(const char|char const) \[*\]+, int, int\[)\]+" + test_demangling_exact "lucid: __ct__11fstreambaseFi" "fstreambase::fstreambase(int)" + test_demangling_exact "lucid: __ct__11fstreambaseFiPcT1" "fstreambase::fstreambase(int, char *, int)" + test_demangling_exact "lucid: __ct__11fstreambaseFv" "fstreambase::fstreambase(void)" + test_demangling_exact "lucid: __ct__11smanip_longFPFR3iosl_R3iosl" "smanip_long::smanip_long(ios &(*)(ios &, long), long)" + test_demangling_exact "lucid: __ct__11stdiostreamFP4FILE" "stdiostream::stdiostream(FILE *)" + test_demangling_exact "lucid: __ct__12strstreambufFPFl_PvPFPv_v" "strstreambuf::strstreambuf(void *(*)(long), void (*)(void *))" + test_demangling_exact "lucid: __ct__12strstreambufFPUciT1" "strstreambuf::strstreambuf(unsigned char *, int, unsigned char *)" + test_demangling_exact "lucid: __ct__12strstreambufFPciT1" "strstreambuf::strstreambuf(char *, int, char *)" + test_demangling_exact "lucid: __ct__12strstreambufFi" "strstreambuf::strstreambuf(int)" + test_demangling_exact "lucid: __ct__12strstreambufFv" "strstreambuf::strstreambuf(void)" + test_demangling_exact "lucid: __ct__13strstreambaseFPciT1" "strstreambase::strstreambase(char *, int, char *)" + test_demangling_exact "lucid: __ct__3fooFR3foo" "foo::foo(foo &)" + + test_demangling_exact "lucid: __ct__3fooFi" "foo::foo(int)" + test_demangling_exact "lucid: __ct__3fooFiN31" "foo::foo(int, int, int, int)" + test_demangling "lucid: __ct__3fooFiPCc" \ "foo::foo\[(\]+int, (const char|char const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle __ct__3fooFiR3fooT1T2T1T2" "foo::foo(int, foo &, int, foo &, int, foo &)" - gdb_test_exact "maint demangle __ct__3iosFP9streambuf" "ios::ios(streambuf *)" - gdb_test_exact "maint demangle __ct__7filebufFiPcT1" "filebuf::filebuf(int, char *, int)" - gdb_test "maint dem __ct__7fstreamFPCciT2" \ + test_demangling_exact "lucid: __ct__3fooFiR3fooT1T2T1T2" "foo::foo(int, foo &, int, foo &, int, foo &)" + test_demangling_exact "lucid: __ct__3iosFP9streambuf" "ios::ios(streambuf *)" + test_demangling_exact "lucid: __ct__7filebufFiPcT1" "filebuf::filebuf(int, char *, int)" + test_demangling "lucid: __ct__7fstreamFPCciT2" \ "fstream::fstream\[(\]+(const char|char const) \[*\]+, int, int\[)\]+" - gdb_test_exact "maint demangle __ct__7fstreamFiPcT1" "fstream::fstream(int, char *, int)" - gdb_test_exact "maint demangle __ct__7istreamFP9streambuf" "istream::istream(streambuf *)" - gdb_test_exact "maint demangle __ct__7istreamFP9streambufiP7ostream" "istream::istream(streambuf *, int, ostream *)" - gdb_test_exact "maint demangle __ct__7istreamFiPcT1" "istream::istream(int, char *, int)" - gdb_test_exact "maint demangle __ct__7istreamFiT1P7ostream" "istream::istream(int, int, ostream *)" - gdb_test_exact "maint demangle __ct__7ostreamFP9streambuf" "ostream::ostream(streambuf *)" - gdb_test_exact "maint demangle __ct__7ostreamFiPc" "ostream::ostream(int, char *)" - gdb_test "maint dem __ct__8ifstreamFPCciT2" \ + test_demangling_exact "lucid: __ct__7fstreamFiPcT1" "fstream::fstream(int, char *, int)" + test_demangling_exact "lucid: __ct__7istreamFP9streambuf" "istream::istream(streambuf *)" + test_demangling_exact "lucid: __ct__7istreamFP9streambufiP7ostream" "istream::istream(streambuf *, int, ostream *)" + test_demangling_exact "lucid: __ct__7istreamFiPcT1" "istream::istream(int, char *, int)" + test_demangling_exact "lucid: __ct__7istreamFiT1P7ostream" "istream::istream(int, int, ostream *)" + test_demangling_exact "lucid: __ct__7ostreamFP9streambuf" "ostream::ostream(streambuf *)" + test_demangling_exact "lucid: __ct__7ostreamFiPc" "ostream::ostream(int, char *)" + test_demangling "lucid: __ct__8ifstreamFPCciT2" \ "ifstream::ifstream\[(\]+(const char|char const) \[*\]+, int, int\[)\]+" - gdb_test_exact "maint demangle __ct__8ifstreamFiPcT1" "ifstream::ifstream(int, char *, int)" - - gdb_test_exact "maint demangle __ct__Q23foo3barFv" "foo::bar::bar(void)" - gdb_test_exact "maint demangle __ct__Q33foo3bar4bellFv" "foo::bar::bell::bell(void)" - gdb_test_exact "maint demangle __dl__3fooSFPv" "foo::operator delete(void *) static" - gdb_test_exact "maint demangle __dl__FPv" "operator delete(void *)" - gdb_test_exact "maint demangle __dt__10istrstreamFv" "istrstream::~istrstream(void)" - - gdb_test_exact "maint demangle __dt__Q23foo3barFv" "foo::bar::~bar(void)" - gdb_test_exact "maint demangle __dt__Q33foo3bar4bellFv" "foo::bar::bell::~bell(void)" - gdb_test_exact "maint demangle __dv__3fooFR3foo" "foo::operator/(foo &)" - gdb_test_exact "maint demangle __dv__F7complexT1" "operator/(complex, complex)" - gdb_test_exact "maint demangle __eq__3fooFR3foo" "foo::operator==(foo &)" - gdb_test_exact "maint demangle __er__3fooFR3foo" "foo::operator^(foo &)" - gdb_test_exact "maint demangle __ge__3fooFR3foo" "foo::operator>=(foo &)" - gdb_test_exact "maint demangle __gt__3fooFR3foo" "foo::operator>(foo &)" - gdb_test_exact "maint demangle __le__3fooFR3foo" "foo::operator<=(foo &)" - gdb_test_exact "maint demangle __ls__3fooFR3foo" "foo::operator<<(foo &)" - gdb_test_exact "maint demangle __ls__7ostreamFP9streambuf" "ostream::operator<<(streambuf *)" - - gdb_test "maint dem __ls__7ostreamFPCc" \ + test_demangling_exact "lucid: __ct__8ifstreamFiPcT1" "ifstream::ifstream(int, char *, int)" + + test_demangling_exact "lucid: __ct__Q23foo3barFv" "foo::bar::bar(void)" + test_demangling_exact "lucid: __ct__Q33foo3bar4bellFv" "foo::bar::bell::bell(void)" + test_demangling_exact "lucid: __dl__3fooSFPv" "foo::operator delete(void *) static" + test_demangling_exact "lucid: __dl__FPv" "operator delete(void *)" + test_demangling_exact "lucid: __dt__10istrstreamFv" "istrstream::~istrstream(void)" + + test_demangling_exact "lucid: __dt__Q23foo3barFv" "foo::bar::~bar(void)" + test_demangling_exact "lucid: __dt__Q33foo3bar4bellFv" "foo::bar::bell::~bell(void)" + test_demangling_exact "lucid: __dv__3fooFR3foo" "foo::operator/(foo &)" + test_demangling_exact "lucid: __dv__F7complexT1" "operator/(complex, complex)" + test_demangling_exact "lucid: __eq__3fooFR3foo" "foo::operator==(foo &)" + test_demangling_exact "lucid: __er__3fooFR3foo" "foo::operator^(foo &)" + test_demangling_exact "lucid: __ge__3fooFR3foo" "foo::operator>=(foo &)" + test_demangling_exact "lucid: __gt__3fooFR3foo" "foo::operator>(foo &)" + test_demangling_exact "lucid: __le__3fooFR3foo" "foo::operator<=(foo &)" + test_demangling_exact "lucid: __ls__3fooFR3foo" "foo::operator<<(foo &)" + test_demangling_exact "lucid: __ls__7ostreamFP9streambuf" "ostream::operator<<(streambuf *)" + + test_demangling "lucid: __ls__7ostreamFPCc" \ "ostream::operator<<\[(\]+(const char|char const) \[*\]+\[)\]+" - gdb_test_exact "maint demangle __ls__7ostreamFPFR3ios_R3ios" "ostream::operator<<(ios &(*)(ios &))" - gdb_test_exact "maint demangle __ls__7ostreamFPv" "ostream::operator<<(void *)" - gdb_test_exact "maint demangle __ls__7ostreamFUi" "ostream::operator<<(unsigned int)" - gdb_test_exact "maint demangle __ls__7ostreamFUl" "ostream::operator<<(unsigned long)" - gdb_test_exact "maint demangle __ls__7ostreamFd" "ostream::operator<<(double)" - gdb_test_exact "maint demangle __ls__7ostreamFf" "ostream::operator<<(float)" - gdb_test_exact "maint demangle __ls__7ostreamFi" "ostream::operator<<(int)" - gdb_test_exact "maint demangle __ls__7ostreamFl" "ostream::operator<<(long)" - gdb_test_exact "maint demangle __ls__FR7ostream7complex" "operator<<(ostream &, complex)" - gdb_test_exact "maint demangle __lt__3fooFR3foo" "foo::operator<(foo &)" - gdb_test_exact "maint demangle __md__3fooFR3foo" "foo::operator%(foo &)" - gdb_test_exact "maint demangle __mi__3fooFR3foo" "foo::operator-(foo &)" - gdb_test_exact "maint demangle __ml__3fooFR3foo" "foo::operator*(foo &)" - gdb_test_exact "maint demangle __ml__F7complexT1" "operator*(complex, complex)" - gdb_test_exact "maint demangle __mm__3fooFi" "foo::operator--(int)" - gdb_test_exact "maint demangle __ne__3fooFR3foo" "foo::operator!=(foo &)" - gdb_test_exact "maint demangle __nt__3fooFv" "foo::operator!(void)" - gdb_test_exact "maint demangle __nw__3fooSFi" "foo::operator new(int) static" - gdb_test_exact "maint demangle __nw__FUi" "operator new(unsigned int)" - gdb_test_exact "maint demangle __nw__FUiPv" "operator new(unsigned int, void *)" - gdb_test_exact "maint demangle __oo__3fooFR3foo" "foo::operator||(foo &)" - gdb_test_exact "maint demangle __opPc__3fooFv" "foo::operator char *(void)" - gdb_test_exact "maint demangle __opi__3fooFv" "foo::operator int(void)" - gdb_test_exact "maint demangle __or__3fooFR3foo" "foo::operator|(foo &)" - - gdb_test_exact "maint demangle __pl__3fooFR3foo" "foo::operator+(foo &)" - gdb_test_exact "maint demangle __pp__3fooFi" "foo::operator++(int)" - gdb_test_exact "maint demangle __pt__3fooFv" "foo::operator->(void)" - gdb_test_exact "maint demangle __rm__3fooFR3foo" "foo::operator->*(foo &)" - gdb_test_exact "maint demangle __rs__3fooFR3foo" "foo::operator>>(foo &)" - gdb_test_exact "maint demangle __rs__7istreamFP9streambuf" "istream::operator>>(streambuf *)" - gdb_test_exact "maint demangle __rs__7istreamFPFR3ios_R3ios" "istream::operator>>(ios &(*)(ios &))" - gdb_test_exact "maint demangle __rs__7istreamFPFR7istream_R7istream" "istream::operator>>(istream &(*)(istream &))" - gdb_test_exact "maint demangle __rs__7istreamFPUc" "istream::operator>>(unsigned char *)" - gdb_test_exact "maint demangle __rs__7istreamFPc" "istream::operator>>(char *)" - gdb_test_exact "maint demangle __rs__7istreamFRUi" "istream::operator>>(unsigned int &)" - gdb_test_exact "maint demangle __rs__7istreamFRUl" "istream::operator>>(unsigned long &)" - gdb_test_exact "maint demangle __rs__7istreamFRUs" "istream::operator>>(unsigned short &)" - gdb_test_exact "maint demangle __rs__7istreamFRd" "istream::operator>>(double &)" - gdb_test_exact "maint demangle __rs__7istreamFRf" "istream::operator>>(float &)" - gdb_test_exact "maint demangle __rs__7istreamFRi" "istream::operator>>(int &)" - gdb_test_exact "maint demangle __rs__7istreamFRl" "istream::operator>>(long &)" - gdb_test_exact "maint demangle __rs__7istreamFRs" "istream::operator>>(short &)" - gdb_test_exact "maint demangle __rs__FR7istreamR7complex" "operator>>(istream &, complex &)" - gdb_test "maint dem __vc__3fooFR3foo" "foo::operator\\\[\\\]\\(foo &\\)" - gdb_test_exact "maint demangle __vtbl__10istrstream" "istrstream virtual table" - gdb_test_exact "maint demangle __vtbl__17ostream__iostream__19iostream_withassign" "iostream_withassign::ostream__iostream virtual table" - - gdb_test_exact "maint demangle __vtbl__3ios" "ios virtual table" - gdb_test_exact "maint demangle __vtbl__3ios__13strstreambase" "strstreambase::ios virtual table" + test_demangling_exact "lucid: __ls__7ostreamFPFR3ios_R3ios" "ostream::operator<<(ios &(*)(ios &))" + test_demangling_exact "lucid: __ls__7ostreamFPv" "ostream::operator<<(void *)" + test_demangling_exact "lucid: __ls__7ostreamFUi" "ostream::operator<<(unsigned int)" + test_demangling_exact "lucid: __ls__7ostreamFUl" "ostream::operator<<(unsigned long)" + test_demangling_exact "lucid: __ls__7ostreamFd" "ostream::operator<<(double)" + test_demangling_exact "lucid: __ls__7ostreamFf" "ostream::operator<<(float)" + test_demangling_exact "lucid: __ls__7ostreamFi" "ostream::operator<<(int)" + test_demangling_exact "lucid: __ls__7ostreamFl" "ostream::operator<<(long)" + test_demangling_exact "lucid: __ls__FR7ostream7complex" "operator<<(ostream &, complex)" + test_demangling_exact "lucid: __lt__3fooFR3foo" "foo::operator<(foo &)" + test_demangling_exact "lucid: __md__3fooFR3foo" "foo::operator%(foo &)" + test_demangling_exact "lucid: __mi__3fooFR3foo" "foo::operator-(foo &)" + test_demangling_exact "lucid: __ml__3fooFR3foo" "foo::operator*(foo &)" + test_demangling_exact "lucid: __ml__F7complexT1" "operator*(complex, complex)" + test_demangling_exact "lucid: __mm__3fooFi" "foo::operator--(int)" + test_demangling_exact "lucid: __ne__3fooFR3foo" "foo::operator!=(foo &)" + test_demangling_exact "lucid: __nt__3fooFv" "foo::operator!(void)" + test_demangling_exact "lucid: __nw__3fooSFi" "foo::operator new(int) static" + test_demangling_exact "lucid: __nw__FUi" "operator new(unsigned int)" + test_demangling_exact "lucid: __nw__FUiPv" "operator new(unsigned int, void *)" + test_demangling_exact "lucid: __oo__3fooFR3foo" "foo::operator||(foo &)" + test_demangling_exact "lucid: __opPc__3fooFv" "foo::operator char *(void)" + test_demangling_exact "lucid: __opi__3fooFv" "foo::operator int(void)" + test_demangling_exact "lucid: __or__3fooFR3foo" "foo::operator|(foo &)" + + test_demangling_exact "lucid: __pl__3fooFR3foo" "foo::operator+(foo &)" + test_demangling_exact "lucid: __pp__3fooFi" "foo::operator++(int)" + test_demangling_exact "lucid: __pt__3fooFv" "foo::operator->(void)" + test_demangling_exact "lucid: __rm__3fooFR3foo" "foo::operator->*(foo &)" + test_demangling_exact "lucid: __rs__3fooFR3foo" "foo::operator>>(foo &)" + test_demangling_exact "lucid: __rs__7istreamFP9streambuf" "istream::operator>>(streambuf *)" + test_demangling_exact "lucid: __rs__7istreamFPFR3ios_R3ios" "istream::operator>>(ios &(*)(ios &))" + test_demangling_exact "lucid: __rs__7istreamFPFR7istream_R7istream" "istream::operator>>(istream &(*)(istream &))" + test_demangling_exact "lucid: __rs__7istreamFPUc" "istream::operator>>(unsigned char *)" + test_demangling_exact "lucid: __rs__7istreamFPc" "istream::operator>>(char *)" + test_demangling_exact "lucid: __rs__7istreamFRUi" "istream::operator>>(unsigned int &)" + test_demangling_exact "lucid: __rs__7istreamFRUl" "istream::operator>>(unsigned long &)" + test_demangling_exact "lucid: __rs__7istreamFRUs" "istream::operator>>(unsigned short &)" + test_demangling_exact "lucid: __rs__7istreamFRd" "istream::operator>>(double &)" + test_demangling_exact "lucid: __rs__7istreamFRf" "istream::operator>>(float &)" + test_demangling_exact "lucid: __rs__7istreamFRi" "istream::operator>>(int &)" + test_demangling_exact "lucid: __rs__7istreamFRl" "istream::operator>>(long &)" + test_demangling_exact "lucid: __rs__7istreamFRs" "istream::operator>>(short &)" + test_demangling_exact "lucid: __rs__FR7istreamR7complex" "operator>>(istream &, complex &)" + test_demangling "lucid: __vc__3fooFR3foo" "foo::operator\\\[\\\]\\(foo &\\)" + test_demangling_exact "lucid: __vtbl__10istrstream" "istrstream virtual table" + test_demangling_exact "lucid: __vtbl__17ostream__iostream__19iostream_withassign" "iostream_withassign::ostream__iostream virtual table" + + test_demangling_exact "lucid: __vtbl__3ios" "ios virtual table" + test_demangling_exact "lucid: __vtbl__3ios__13strstreambase" "strstreambase::ios virtual table" # GDB 930414 demangles this as t_cc_main_ (obviously wrong). # GDB 930701 gets into an infinite loop. # GDB 930727 says "Can't demangle". # What is the correct demangling? FIXME. setup_xfail "*-*-*" - gdb_test_exact "maint demangle __vtbl__3foo__vt_cc_main_" "" - - gdb_test_exact "maint demangle abs__F7complex" "abs(complex)" - gdb_test_exact "maint demangle allocate__9streambufFv" "streambuf::allocate(void)" - gdb_test_exact "maint demangle attach__11fstreambaseFi" "fstreambase::attach(int)" - gdb_test_exact "maint demangle bitalloc__3iosSFv" "ios::bitalloc(void) static" - gdb_test_exact "maint demangle chr__FiT1" "chr(int, int)" - gdb_test_exact "maint demangle complex_error__FR11c_exception" "complex_error(c_exception &)" - gdb_test_exact "maint demangle complexfunc2__FPFPc_i" "complexfunc2(int (*)(char *))" - gdb_test_exact "maint demangle complexfunc3__FPFPFPl_s_i" "complexfunc3(int (*)(short (*)(long *)))" - - gdb_test_exact "maint demangle complexfunc4__FPFPFPc_s_i" "complexfunc4(int (*)(short (*)(char *)))" - gdb_test_exact "maint demangle complexfunc5__FPFPc_PFl_i" "complexfunc5(int (*(*)(char *))(long))" - gdb_test_exact "maint demangle complexfunc6__FPFPi_PFl_i" "complexfunc6(int (*(*)(int *))(long))" - gdb_test_exact "maint demangle complexfunc7__FPFPFPc_i_PFl_i" "complexfunc7(int (*(*)(int (*)(char *)))(long))" - gdb_test_exact "maint demangle complicated_put__7ostreamFc" "ostream::complicated_put(char)" - gdb_test_exact "maint demangle conv10__FlPc" "conv10(long, char *)" - gdb_test_exact "maint demangle conv16__FUlPc" "conv16(unsigned long, char *)" - gdb_test_exact "maint demangle dec__FR3ios" "dec(ios &)" - gdb_test_exact "maint demangle dec__Fli" "dec(long, int)" - gdb_test_exact "maint demangle dofield__FP7ostreamPciT2T3" "dofield(ostream *, char *, int, char *, int)" - - gdb_test_exact "maint demangle flags__3iosFl" "ios::flags(long)" - gdb_test_exact "maint demangle flags__3iosFv" "ios::flags(void)" - gdb_test_exact "maint demangle foo__FiN31" "foo(int, int, int, int)" - gdb_test_exact "maint demangle foo__FiR3fooT1T2T1T2" "foo(int, foo &, int, foo &, int, foo &)" - gdb_test_exact "maint demangle foo___3barFl" "bar::foo_(long)" - gdb_test "maint dem form__FPCce" "form\[(\]+(const char|char const) \[*\]+,...\[)\]+" - gdb_test_exact "maint demangle get__7istreamFPcic" "istream::get(char *, int, char)" - gdb_test_exact "maint demangle get__7istreamFR9streambufc" "istream::get(streambuf &, char)" - gdb_test_exact "maint demangle get_complicated__7istreamFRUc" "istream::get_complicated(unsigned char &)" - gdb_test_exact "maint demangle get_complicated__7istreamFRc" "istream::get_complicated(char &)" - gdb_test_exact "maint demangle getline__7istreamFPUcic" "istream::getline(unsigned char *, int, char)" - gdb_test_exact "maint demangle getline__7istreamFPcic" "istream::getline(char *, int, char)" - - gdb_test_exact "maint demangle ignore__7istreamFiT1" "istream::ignore(int, int)" - gdb_test_exact "maint demangle init__12strstreambufFPciT1" "strstreambuf::init(char *, int, char *)" - gdb_test_exact "maint demangle init__3iosFP9streambuf" "ios::init(streambuf *)" - gdb_test_exact "maint demangle initcount__13Iostream_init" "Iostream_init::initcount" - gdb_test_exact "maint demangle ipfx__7istreamFi" "istream::ipfx(int)" - gdb_test_exact "maint demangle ls_complicated__7ostreamFUc" "ostream::ls_complicated(unsigned char)" - gdb_test_exact "maint demangle ls_complicated__7ostreamFc" "ostream::ls_complicated(char)" - gdb_test "maint dem open__11fstreambaseFPCciT2" \ + test_demangling_exact "lucid: __vtbl__3foo__vt_cc_main_" "" + + test_demangling_exact "lucid: abs__F7complex" "abs(complex)" + test_demangling_exact "lucid: allocate__9streambufFv" "streambuf::allocate(void)" + test_demangling_exact "lucid: attach__11fstreambaseFi" "fstreambase::attach(int)" + test_demangling_exact "lucid: bitalloc__3iosSFv" "ios::bitalloc(void) static" + test_demangling_exact "lucid: chr__FiT1" "chr(int, int)" + test_demangling_exact "lucid: complex_error__FR11c_exception" "complex_error(c_exception &)" + test_demangling_exact "lucid: complexfunc2__FPFPc_i" "complexfunc2(int (*)(char *))" + test_demangling_exact "lucid: complexfunc3__FPFPFPl_s_i" "complexfunc3(int (*)(short (*)(long *)))" + + test_demangling_exact "lucid: complexfunc4__FPFPFPc_s_i" "complexfunc4(int (*)(short (*)(char *)))" + test_demangling_exact "lucid: complexfunc5__FPFPc_PFl_i" "complexfunc5(int (*(*)(char *))(long))" + test_demangling_exact "lucid: complexfunc6__FPFPi_PFl_i" "complexfunc6(int (*(*)(int *))(long))" + test_demangling_exact "lucid: complexfunc7__FPFPFPc_i_PFl_i" "complexfunc7(int (*(*)(int (*)(char *)))(long))" + test_demangling_exact "lucid: complicated_put__7ostreamFc" "ostream::complicated_put(char)" + test_demangling_exact "lucid: conv10__FlPc" "conv10(long, char *)" + test_demangling_exact "lucid: conv16__FUlPc" "conv16(unsigned long, char *)" + test_demangling_exact "lucid: dec__FR3ios" "dec(ios &)" + test_demangling_exact "lucid: dec__Fli" "dec(long, int)" + test_demangling_exact "lucid: dofield__FP7ostreamPciT2T3" "dofield(ostream *, char *, int, char *, int)" + + test_demangling_exact "lucid: flags__3iosFl" "ios::flags(long)" + test_demangling_exact "lucid: flags__3iosFv" "ios::flags(void)" + test_demangling_exact "lucid: foo__FiN31" "foo(int, int, int, int)" + test_demangling_exact "lucid: foo__FiR3fooT1T2T1T2" "foo(int, foo &, int, foo &, int, foo &)" + test_demangling_exact "lucid: foo___3barFl" "bar::foo_(long)" + test_demangling "lucid: form__FPCce" "form\[(\]+(const char|char const) \[*\]+,...\[)\]+" + test_demangling_exact "lucid: get__7istreamFPcic" "istream::get(char *, int, char)" + test_demangling_exact "lucid: get__7istreamFR9streambufc" "istream::get(streambuf &, char)" + test_demangling_exact "lucid: get_complicated__7istreamFRUc" "istream::get_complicated(unsigned char &)" + test_demangling_exact "lucid: get_complicated__7istreamFRc" "istream::get_complicated(char &)" + test_demangling_exact "lucid: getline__7istreamFPUcic" "istream::getline(unsigned char *, int, char)" + test_demangling_exact "lucid: getline__7istreamFPcic" "istream::getline(char *, int, char)" + + test_demangling_exact "lucid: ignore__7istreamFiT1" "istream::ignore(int, int)" + test_demangling_exact "lucid: init__12strstreambufFPciT1" "strstreambuf::init(char *, int, char *)" + test_demangling_exact "lucid: init__3iosFP9streambuf" "ios::init(streambuf *)" + test_demangling_exact "lucid: initcount__13Iostream_init" "Iostream_init::initcount" + test_demangling_exact "lucid: ipfx__7istreamFi" "istream::ipfx(int)" + test_demangling_exact "lucid: ls_complicated__7ostreamFUc" "ostream::ls_complicated(unsigned char)" + test_demangling_exact "lucid: ls_complicated__7ostreamFc" "ostream::ls_complicated(char)" + test_demangling "lucid: open__11fstreambaseFPCciT2" \ "fstreambase::open\[(\]+(const char|char const) \[*\]+, int, int\[)\]+" - gdb_test "maint dem open__7filebufFPCciT2" \ + test_demangling "lucid: open__7filebufFPCciT2" \ "filebuf::open\[(\]+(const char|char const) \[*\]+, int, int\[)\]+" - gdb_test_exact "maint demangle overload1arg__FSc" "overload1arg(signed char)" - gdb_test_exact "maint demangle overload1arg__FUc" "overload1arg(unsigned char)" - gdb_test_exact "maint demangle overload1arg__FUi" "overload1arg(unsigned int)" - gdb_test_exact "maint demangle overload1arg__FUl" "overload1arg(unsigned long)" - gdb_test_exact "maint demangle overload1arg__FUs" "overload1arg(unsigned short)" - gdb_test_exact "maint demangle overload1arg__Fc" "overload1arg(char)" - gdb_test_exact "maint demangle overload1arg__Fd" "overload1arg(double)" - gdb_test_exact "maint demangle overload1arg__Ff" "overload1arg(float)" - gdb_test_exact "maint demangle overload1arg__Fi" "overload1arg(int)" - gdb_test_exact "maint demangle overload1arg__Fl" "overload1arg(long)" - gdb_test_exact "maint demangle overload1arg__Fs" "overload1arg(short)" - gdb_test_exact "maint demangle overload1arg__Fv" "overload1arg(void)" - gdb_test_exact "maint demangle overloadargs__FiN21" "overloadargs(int, int, int)" - gdb_test_exact "maint demangle overloadargs__FiN31" "overloadargs(int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__FiN41" "overloadargs(int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__FiN51" "overloadargs(int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__FiN61" "overloadargs(int, int, int, int, int, int, int)" - - gdb_test_exact "maint demangle overloadargs__FiN71" "overloadargs(int, int, int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__FiN81" "overloadargs(int, int, int, int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__FiN91" "overloadargs(int, int, int, int, int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__FiN91N11" "overloadargs(int, int, int, int, int, int, int, int, int, int, int)" - gdb_test_exact "maint demangle overloadargs__FiT1" "overloadargs(int, int)" - gdb_test_exact "maint demangle polar__FdT1" "polar(double, double)" - gdb_test_exact "maint demangle pow__F7complexT1" "pow(complex, complex)" - gdb_test_exact "maint demangle pow__F7complexd" "pow(complex, double)" - gdb_test_exact "maint demangle pow__F7complexi" "pow(complex, int)" - gdb_test_exact "maint demangle pow__Fd7complex" "pow(double, complex)" - gdb_test_exact "maint demangle pstart__FPciT2" "pstart(char *, int, int)" - gdb_test_exact "maint demangle put__7ostreamFc" "ostream::put(char)" - - gdb_test_exact "maint demangle read__7istreamFPci" "istream::read(char *, int)" - gdb_test_exact "maint demangle resetiosflags__FR3iosl" "resetiosflags(ios &, long)" - gdb_test_exact "maint demangle restore_errno__FRi" "restore_errno(int &)" - gdb_test_exact "maint demangle rs_complicated__7istreamFRUc" "istream::rs_complicated(unsigned char &)" - gdb_test_exact "maint demangle rs_complicated__7istreamFRc" "istream::rs_complicated(char &)" - gdb_test_exact "maint demangle seekg__7istreamFl8seek_dir" "istream::seekg(long, seek_dir)" - gdb_test_exact "maint demangle seekoff__12strstreambufFl8seek_diri" "strstreambuf::seekoff(long, seek_dir, int)" - gdb_test_exact "maint demangle seekoff__9streambufFlQ2_3ios12ios_seek_diri" "streambuf::seekoff(long, ios::ios_seek_dir, int)" - gdb_test_exact "maint demangle seekpos__9streambufFli" "streambuf::seekpos(long, int)" - gdb_test_exact "maint demangle set_new_handler__FPFv_v" "set_new_handler(void (*)(void))" - gdb_test_exact "maint demangle setb__9streambufFPcT1i" "streambuf::setb(char *, char *, int)" - - gdb_test_exact "maint demangle setb__FR3iosi" "setb(ios &, int)" - gdb_test_exact "maint demangle setbuf__11fstreambaseFPci" "fstreambase::setbuf(char *, int)" - gdb_test_exact "maint demangle setbuf__9streambufFPUci" "streambuf::setbuf(unsigned char *, int)" - gdb_test_exact "maint demangle setbuf__9streambufFPciT2" "streambuf::setbuf(char *, int, int)" - gdb_test_exact "maint demangle setf__3iosFlT1" "ios::setf(long, long)" - gdb_test_exact "maint demangle setfill__FR3iosi" "setfill(ios &, int)" - gdb_test_exact "maint demangle setg__9streambufFPcN21" "streambuf::setg(char *, char *, char *)" - gdb_test_exact "maint demangle setp__9streambufFPcT1" "streambuf::setp(char *, char *)" - - gdb_test "maint dem sputn__9streambufFPCci" \ + test_demangling_exact "lucid: overload1arg__FSc" "overload1arg(signed char)" + test_demangling_exact "lucid: overload1arg__FUc" "overload1arg(unsigned char)" + test_demangling_exact "lucid: overload1arg__FUi" "overload1arg(unsigned int)" + test_demangling_exact "lucid: overload1arg__FUl" "overload1arg(unsigned long)" + test_demangling_exact "lucid: overload1arg__FUs" "overload1arg(unsigned short)" + test_demangling_exact "lucid: overload1arg__Fc" "overload1arg(char)" + test_demangling_exact "lucid: overload1arg__Fd" "overload1arg(double)" + test_demangling_exact "lucid: overload1arg__Ff" "overload1arg(float)" + test_demangling_exact "lucid: overload1arg__Fi" "overload1arg(int)" + test_demangling_exact "lucid: overload1arg__Fl" "overload1arg(long)" + test_demangling_exact "lucid: overload1arg__Fs" "overload1arg(short)" + test_demangling_exact "lucid: overload1arg__Fv" "overload1arg(void)" + test_demangling_exact "lucid: overloadargs__FiN21" "overloadargs(int, int, int)" + test_demangling_exact "lucid: overloadargs__FiN31" "overloadargs(int, int, int, int)" + test_demangling_exact "lucid: overloadargs__FiN41" "overloadargs(int, int, int, int, int)" + test_demangling_exact "lucid: overloadargs__FiN51" "overloadargs(int, int, int, int, int, int)" + test_demangling_exact "lucid: overloadargs__FiN61" "overloadargs(int, int, int, int, int, int, int)" + + test_demangling_exact "lucid: overloadargs__FiN71" "overloadargs(int, int, int, int, int, int, int, int)" + test_demangling_exact "lucid: overloadargs__FiN81" "overloadargs(int, int, int, int, int, int, int, int, int)" + test_demangling_exact "lucid: overloadargs__FiN91" "overloadargs(int, int, int, int, int, int, int, int, int, int)" + test_demangling_exact "lucid: overloadargs__FiN91N11" "overloadargs(int, int, int, int, int, int, int, int, int, int, int)" + test_demangling_exact "lucid: overloadargs__FiT1" "overloadargs(int, int)" + test_demangling_exact "lucid: polar__FdT1" "polar(double, double)" + test_demangling_exact "lucid: pow__F7complexT1" "pow(complex, complex)" + test_demangling_exact "lucid: pow__F7complexd" "pow(complex, double)" + test_demangling_exact "lucid: pow__F7complexi" "pow(complex, int)" + test_demangling_exact "lucid: pow__Fd7complex" "pow(double, complex)" + test_demangling_exact "lucid: pstart__FPciT2" "pstart(char *, int, int)" + test_demangling_exact "lucid: put__7ostreamFc" "ostream::put(char)" + + test_demangling_exact "lucid: read__7istreamFPci" "istream::read(char *, int)" + test_demangling_exact "lucid: resetiosflags__FR3iosl" "resetiosflags(ios &, long)" + test_demangling_exact "lucid: restore_errno__FRi" "restore_errno(int &)" + test_demangling_exact "lucid: rs_complicated__7istreamFRUc" "istream::rs_complicated(unsigned char &)" + test_demangling_exact "lucid: rs_complicated__7istreamFRc" "istream::rs_complicated(char &)" + test_demangling_exact "lucid: seekg__7istreamFl8seek_dir" "istream::seekg(long, seek_dir)" + test_demangling_exact "lucid: seekoff__12strstreambufFl8seek_diri" "strstreambuf::seekoff(long, seek_dir, int)" + test_demangling_exact "lucid: seekoff__9streambufFlQ2_3ios12ios_seek_diri" "streambuf::seekoff(long, ios::ios_seek_dir, int)" + test_demangling_exact "lucid: seekpos__9streambufFli" "streambuf::seekpos(long, int)" + test_demangling_exact "lucid: set_new_handler__FPFv_v" "set_new_handler(void (*)(void))" + test_demangling_exact "lucid: setb__9streambufFPcT1i" "streambuf::setb(char *, char *, int)" + + test_demangling_exact "lucid: setb__FR3iosi" "setb(ios &, int)" + test_demangling_exact "lucid: setbuf__11fstreambaseFPci" "fstreambase::setbuf(char *, int)" + test_demangling_exact "lucid: setbuf__9streambufFPUci" "streambuf::setbuf(unsigned char *, int)" + test_demangling_exact "lucid: setbuf__9streambufFPciT2" "streambuf::setbuf(char *, int, int)" + test_demangling_exact "lucid: setf__3iosFlT1" "ios::setf(long, long)" + test_demangling_exact "lucid: setfill__FR3iosi" "setfill(ios &, int)" + test_demangling_exact "lucid: setg__9streambufFPcN21" "streambuf::setg(char *, char *, char *)" + test_demangling_exact "lucid: setp__9streambufFPcT1" "streambuf::setp(char *, char *)" + + test_demangling "lucid: sputn__9streambufFPCci" \ "streambuf::sputn\[(\]+(const char|char const) \[*\]+, int\[)\]+" - gdb_test "maint dem str__FPCci" \ + test_demangling "lucid: str__FPCci" \ "str\[(\]+(const char|char const) \[*\]+, int\[)\]+" - gdb_test_exact "maint demangle tie__3iosFP7ostream" "ios::tie(ostream *)" - gdb_test_exact "maint demangle uconv10__FUlPc" "uconv10(unsigned long, char *)" + test_demangling_exact "lucid: tie__3iosFP7ostream" "ios::tie(ostream *)" + test_demangling_exact "lucid: uconv10__FUlPc" "uconv10(unsigned long, char *)" - gdb_test "maint dem write__7ostreamFPCci" \ + test_demangling "lucid: write__7ostreamFPCci" \ "ostream::write\[(\]+(const char|char const) \[*\]+, int\[)\]+" - gdb_test_exact "maint demangle xget__7istreamFPc" "istream::xget(char *)" - gdb_test_exact "maint demangle xsgetn__9streambufFPci" "streambuf::xsgetn(char *, int)" - gdb_test "maint dem xsputn__9streambufFPCci" \ + test_demangling_exact "lucid: xget__7istreamFPc" "istream::xget(char *)" + test_demangling_exact "lucid: xsgetn__9streambufFPci" "streambuf::xsgetn(char *, int)" + test_demangling "lucid: xsputn__9streambufFPCci" \ "streambuf::xsputn\[(\]+(const char|char const) \[*\]+, int\[)\]+" + + test_demangling_exact "lucid: _Utf390_1__1_9223372036854775807__9223372036854775" \ + "Can't demangle \"_Utf390_1__1_9223372036854775807__9223372036854775\"" } # @@ -731,759 +798,732 @@ proc test_lucid_style_demangling {} { # proc test_arm_style_demangling {} { - global gdb_prompt - - # Set the demangling style to "arm" and then check to make sure - # it really got set. Return if the style failed to get set for - # some reason. - - send_gdb "set demangle-style arm\n" - gdb_expect { - -re "set demangle-style arm\[\r\n\]+$gdb_prompt $" {} - -re ".*$gdb_prompt $" { fail "set demangle-style arm failed" ; return } - timeout { fail "set demangle-style arm failed (timeout)" ; return } - } - - send_gdb "show demangle-style\n" - gdb_expect { - -re "The current C\[+\]+ demangling style is \"arm\".\r\n$gdb_prompt $" {} - -re ".*$gdb_prompt $" { fail "demangling style not set to arm" } - timeout { fail "show demangle-style timed out" } - } - - gdb_test_exact "maint demangle __dt__21T5__pt__11_PFiPPdPv_iFv" "T5<int (*)(int, double **, void *)>::~T5(void)" + test_demangling_exact "arm: __dt__21T5__pt__11_PFiPPdPv_iFv" "T5<int (*)(int, double **, void *)>::~T5(void)" - gdb_test_exact "maint demangle __ct__1cFi" "c::c(int)" + test_demangling_exact "arm: __ct__1cFi" "c::c(int)" - gdb_test_exact "maint demangle __dt__11T5__pt__2_iFv" "T5<int>::~T5(void)" + test_demangling_exact "arm: __dt__11T5__pt__2_iFv" "T5<int>::~T5(void)" - gdb_test_exact "maint demangle __dt__11T5__pt__2_cFv" "T5<char>::~T5(void)" + test_demangling_exact "arm: __dt__11T5__pt__2_cFv" "T5<char>::~T5(void)" - gdb_test_exact "maint demangle __ct__2T2Fi" "T2::T2(int)" - gdb_test_exact "maint demangle __dt__2T1Fv" "T1::~T1(void)" + test_demangling_exact "arm: __ct__2T2Fi" "T2::T2(int)" + test_demangling_exact "arm: __dt__2T1Fv" "T1::~T1(void)" - gdb_test_exact "maint demangle __dt__12T5__pt__3_1xFv" "T5<x>::~T5(void)" + test_demangling_exact "arm: __dt__12T5__pt__3_1xFv" "T5<x>::~T5(void)" - gdb_test_exact "maint demangle __dt__17T5__pt__8_PFcPv_iFv" "T5<int (*)(char, void *)>::~T5(void)" + test_demangling_exact "arm: __dt__17T5__pt__8_PFcPv_iFv" "T5<int (*)(char, void *)>::~T5(void)" - gdb_test "maint dem g__FP1cPC1cT1" \ + test_demangling "arm: g__FP1cPC1cT1" \ "g\[(\]+c *\[*\]+, (const c|c const) *\[*\]+, c *\[*\]+\[)\]+" - gdb_test "maint dem g__FPUlPCUlT1" \ + test_demangling "arm: g__FPUlPCUlT1" \ "g\[(\]+unsigned long \[*\]+, (const unsigned long|unsigned long const) \[*\]+, unsigned long \[*\]+\[)\]+" - gdb_test "maint dem g__FPUiPCUiT1" \ + test_demangling "arm: g__FPUiPCUiT1" \ "g\[(\]+unsigned int \[*\]+, (const unsigned int|unsigned int const) \[*\]+, unsigned int \[*\]+\[)\]+" - gdb_test "maint dem g__FPUsPCUsT1" \ + test_demangling "arm: g__FPUsPCUsT1" \ "g\[(\]+unsigned short \[*\]+, (const unsigned short|unsigned short const) \[*\]+, unsigned short \[*\]+\[)\]+" - gdb_test "maint dem g__FPUcPCUcT1" \ + test_demangling "arm: g__FPUcPCUcT1" \ "g\[(\]+unsigned char \[*\]+, (const unsigned char|unsigned char const) \[*\]+, unsigned char \[*\]+\[)\]+" - gdb_test "maint dem g__F1TPlPClT2" \ + test_demangling "arm: g__F1TPlPClT2" \ "g\[(\]+T, long \[*\]+, (const long|long const) \[*\]+, long \[*\]+\[)\]+" - gdb_test "maint dem g__F1RRlRClT2" \ + test_demangling "arm: g__F1RRlRClT2" \ "g\[(\]+R, long &, (const long|long const) &, long &\[)\]+" - gdb_test "maint dem g__F1TPiPCiT2" \ + test_demangling "arm: g__F1TPiPCiT2" \ "g\[(\]+T, int \[*\]+, (const int|int const) \[*\]+, int \[*\]+\[)\]+" - gdb_test "maint dem g__F1RRiRCiT2" \ + test_demangling "arm: g__F1RRiRCiT2" \ "g\[(\]+R, int &, (const int|int const) &, int &\[)\]+" - gdb_test "maint dem g__F1TPsPCsT2" \ + test_demangling "arm: g__F1TPsPCsT2" \ "g\[(\]+T, short \[*\]+, (const short|short const) \[*\]+, short \[*\]+\[)\]+" - gdb_test "maint dem g__F1RRsRCsT2" \ + test_demangling "arm: g__F1RRsRCsT2" \ "g\[(\]+R, short &, (const short|short const) &, short &\[)\]+" - gdb_test "maint dem g__F1TPcPCcT2" \ + test_demangling "arm: g__F1TPcPCcT2" \ "g\[(\]+T, char \[*\]+, (const char|char const) \[*\]+, char \[*\]+\[)\]+" - gdb_test "maint dem g__F1RRcRCcT2" \ + test_demangling "arm: g__F1RRcRCcT2" \ "g\[(\]+R, char &, (const char|char const) &, char &\[)\]+" - gdb_test_exact "maint demangle __ct__21T5__pt__11_PFiPPdPv_iFi" "T5<int (*)(int, double **, void *)>::T5(int)" + test_demangling_exact "arm: __ct__21T5__pt__11_PFiPPdPv_iFi" "T5<int (*)(int, double **, void *)>::T5(int)" - gdb_test "maint dem __gt__FRC2T2c" \ + test_demangling "arm: __gt__FRC2T2c" \ "operator>\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __ge__FRC2T2c" \ + test_demangling "arm: __ge__FRC2T2c" \ "operator>=\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __lt__FRC2T2c" \ + test_demangling "arm: __lt__FRC2T2c" \ "operator<\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __le__FRC2T2c" \ + test_demangling "arm: __le__FRC2T2c" \ "operator<=\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __ne__FRC2T2c" \ + test_demangling "arm: __ne__FRC2T2c" \ "operator!=\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __eq__FRC2T2c" \ + test_demangling "arm: __eq__FRC2T2c" \ "operator==\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test_exact "maint demangle __amd__FR2T2i" "operator%=(T2 &, int)" - gdb_test_exact "maint demangle __adv__FR2T2i" "operator/=(T2 &, int)" - gdb_test_exact "maint demangle __amu__FR2T2i" "operator*=(T2 &, int)" - gdb_test_exact "maint demangle __ami__FR2T2i" "operator-=(T2 &, int)" - gdb_test_exact "maint demangle __apl__FR2T2i" "operator+=(T2 &, int)" - gdb_test_exact "maint demangle __nw__2T1SFUi" "T1::operator new(unsigned int) static" - gdb_test_exact "maint demangle __dl__2T1SFPv" "T1::operator delete(void *) static" - gdb_test_exact "maint demangle put__2T7SFi" "T7::put(int) static" - - gdb_test_exact "maint demangle __dl__12T5__pt__3_1xSFPv" "T5<x>::operator delete(void *) static" - - gdb_test_exact "maint demangle h__FUc" "h(unsigned char)" - gdb_test_exact "maint demangle f__Fic" "f(int, char)" - gdb_test_exact "maint demangle h__FUi" "h(unsigned int)" - gdb_test_exact "maint demangle h__Fci" "h(char, int)" - gdb_test_exact "maint demangle h__FUl" "h(unsigned long)" - gdb_test_exact "maint demangle h__Fcl" "h(char, long)" - gdb_test_exact "maint demangle h__FUs" "h(unsigned short)" - gdb_test_exact "maint demangle h__Fcs" "h(char, short)" - gdb_test "maint dem __amd__FR2T2RC2T2" \ + test_demangling_exact "arm: __amd__FR2T2i" "operator%=(T2 &, int)" + test_demangling_exact "arm: __adv__FR2T2i" "operator/=(T2 &, int)" + test_demangling_exact "arm: __amu__FR2T2i" "operator*=(T2 &, int)" + test_demangling_exact "arm: __ami__FR2T2i" "operator-=(T2 &, int)" + test_demangling_exact "arm: __apl__FR2T2i" "operator+=(T2 &, int)" + test_demangling_exact "arm: __nw__2T1SFUi" "T1::operator new(unsigned int) static" + test_demangling_exact "arm: __dl__2T1SFPv" "T1::operator delete(void *) static" + test_demangling_exact "arm: put__2T7SFi" "T7::put(int) static" + + test_demangling_exact "arm: __dl__12T5__pt__3_1xSFPv" "T5<x>::operator delete(void *) static" + + test_demangling_exact "arm: h__FUc" "h(unsigned char)" + test_demangling_exact "arm: f__Fic" "f(int, char)" + test_demangling_exact "arm: h__FUi" "h(unsigned int)" + test_demangling_exact "arm: h__Fci" "h(char, int)" + test_demangling_exact "arm: h__FUl" "h(unsigned long)" + test_demangling_exact "arm: h__Fcl" "h(char, long)" + test_demangling_exact "arm: h__FUs" "h(unsigned short)" + test_demangling_exact "arm: h__Fcs" "h(char, short)" + test_demangling "arm: __amd__FR2T2RC2T2" \ "operator%=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __adv__FR2T2RC2T2" \ + test_demangling "arm: __adv__FR2T2RC2T2" \ "operator/=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __amu__FR2T2RC2T2" \ + test_demangling "arm: __amu__FR2T2RC2T2" \ "operator\[*\]+=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __ami__FR2T2RC2T2" \ + test_demangling "arm: __ami__FR2T2RC2T2" \ "operator-=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __apl__FR2T2RC2T2" \ + test_demangling "arm: __apl__FR2T2RC2T2" \ "operator\[+\]+=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem g__F1SRPUlRPCUlT2" \ + test_demangling "arm: g__F1SRPUlRPCUlT2" \ "g\[(\]+S, unsigned long \[*\]+&, (const unsigned long|unsigned long const) \[*\]+&, unsigned long \[*\]+&\[)\]+" - gdb_test "maint dem g__F1SRPUiRPCUiT2" \ + test_demangling "arm: g__F1SRPUiRPCUiT2" \ "g\[(\]+S, unsigned int \[*\]+&, (const unsigned int|unsigned int const) \[*\]+&, unsigned int \[*\]+&\[)\]+" - gdb_test "maint dem g__F1SRPUsRPCUsT2" \ + test_demangling "arm: g__F1SRPUsRPCUsT2" \ "g\[(\]+S, unsigned short \[*\]+&, (const unsigned short|unsigned short const) \[*\]+&, unsigned short \[*\]+&\[)\]+" - gdb_test "maint dem g__F1SRPUcRPCUcT2" \ + test_demangling "arm: g__F1SRPUcRPCUcT2" \ "g\[(\]+S, unsigned char \[*\]+&, (const unsigned char|unsigned char const) \[*\]+&, unsigned char \[*\]+&\[)\]+" - gdb_test "maint dem g__F1T1SRPlRPClT3" \ + test_demangling "arm: g__F1T1SRPlRPClT3" \ "g\[(\]+T, S, long \[*\]+&, (const long|long const) \[*\]+&, long \[*\]+&\[)\]+" - gdb_test "maint dem g__F1T1SRPiRPCiT3" \ + test_demangling "arm: g__F1T1SRPiRPCiT3" \ "g\[(\]+T, S, int \[*\]+&, (const int|int const) \[*\]+&, int \[*\]+&\[)\]+" - gdb_test "maint dem g__F1T1SRPcRPCcT3" \ + test_demangling "arm: g__F1T1SRPcRPCcT3" \ "g\[(\]+T, S, char \[*\]+&, (const char|char const) \[*\]+&, char \[*\]+&\[)\]+" - gdb_test_exact "maint demangle X__12T5__pt__3_1x" "T5<x>::X" + test_demangling_exact "arm: X__12T5__pt__3_1x" "T5<x>::X" - gdb_test_exact "maint demangle __ct__11T5__pt__2_iFi" "T5<int>::T5(int)" + test_demangling_exact "arm: __ct__11T5__pt__2_iFi" "T5<int>::T5(int)" - gdb_test_exact "maint demangle __ct__11T5__pt__2_cFi" "T5<char>::T5(int)" + test_demangling_exact "arm: __ct__11T5__pt__2_cFi" "T5<char>::T5(int)" - gdb_test "maint dem __gt__FRC2T2T1" \ + test_demangling "arm: __gt__FRC2T2T1" \ "operator>\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __ge__FRC2T2T1" \ + test_demangling "arm: __ge__FRC2T2T1" \ "operator>=\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __lt__FRC2T2T1" \ + test_demangling "arm: __lt__FRC2T2T1" \ "operator<\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __le__FRC2T2T1" \ + test_demangling "arm: __le__FRC2T2T1" \ "operator<=\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __ne__FRC2T2T1" \ + test_demangling "arm: __ne__FRC2T2T1" \ "operator!=\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __eq__FRC2T2T1" \ + test_demangling "arm: __eq__FRC2T2T1" \ "operator==\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem g__FcR1cRC1cT2" \ + test_demangling "arm: g__FcR1cRC1cT2" \ "g\[(\]+char, c &, (const c|c const) &, c &\[)\]+" - gdb_test "maint dem g__FcRPdRPCdT2" \ + test_demangling "arm: g__FcRPdRPCdT2" \ "g\[(\]+char, double *\[*\]+&, (const double|double const) *\[*\]+&, double *\[*\]+&\[)\]+" - gdb_test "maint dem g__FcRPfRPCfT2" \ + test_demangling "arm: g__FcRPfRPCfT2" \ "g\[(\]+char, float *\[*\]+&, (const float|float const) *\[*\]+&, float *\[*\]+&\[)\]+" - gdb_test_exact "maint demangle h__FcT1" "h(char, char)" - gdb_test_exact "maint demangle f__Ficd" "f(int, char, double)" - gdb_test "maint dem g__F1T1SdRPsRPCsT4" \ + test_demangling_exact "arm: h__FcT1" "h(char, char)" + test_demangling_exact "arm: f__Ficd" "f(int, char, double)" + test_demangling "arm: g__F1T1SdRPsRPCsT4" \ "g\[(\]+T, S, double, short \[*\]+&, (const short|short const) \[*\]+&, short \[*\]+&\[)\]+" - gdb_test "maint dem g__F1cC1cT1" \ + test_demangling "arm: g__F1cC1cT1" \ "g\[(\]+c, (const c|c const), c\[)\]+" - gdb_test "maint dem g__FPdPCdT1" \ + test_demangling "arm: g__FPdPCdT1" \ "g\[(\]+double *\[*\]+, (const double|double const) *\[*\]+, double *\[*\]+\[)\]+" - gdb_test "maint dem g__FPfPCfT1" \ + test_demangling "arm: g__FPfPCfT1" \ "g\[(\]+float *\[*\]+, (const float|float const) *\[*\]+, float *\[*\]+\[)\]+" - gdb_test "maint dem g__FUlCUlT1" \ + test_demangling "arm: g__FUlCUlT1" \ "g\[(\]+unsigned long, (const unsigned long|unsigned long const), unsigned long\[)\]+" - gdb_test "maint dem g__FPlPClT1" \ + test_demangling "arm: g__FPlPClT1" \ "g\[(\]+long \[*\]+, (const long|long const) \[*\]+, long \[*\]+\[)\]+" - gdb_test "maint dem g__FUiCUiT1" \ + test_demangling "arm: g__FUiCUiT1" \ "g\[(\]+unsigned int, (const unsigned int|unsigned int const), unsigned int\[)\]+" - gdb_test "maint dem g__FPiPCiT1" \ + test_demangling "arm: g__FPiPCiT1" \ "g\[(\]+int \[*\]+, (const int|int const) \[*\]+, int \[*\]+\[)\]+" - gdb_test "maint dem g__FUsCUsT1" \ + test_demangling "arm: g__FUsCUsT1" \ "g\[(\]+unsigned short, (const unsigned short|unsigned short const), unsigned short\[)\]+" - gdb_test "maint dem g__FPsPCsT1" \ + test_demangling "arm: g__FPsPCsT1" \ "g\[(\]+short \[*\]+, (const short|short const) \[*\]+, short \[*\]+\[)\]+" - gdb_test "maint dem g__FUcCUcT1" \ + test_demangling "arm: g__FUcCUcT1" \ "g\[(\]+unsigned char, (const unsigned char|unsigned char const), unsigned char\[)\]+" - gdb_test "maint dem g__FPcPCcT1" \ + test_demangling "arm: g__FPcPCcT1" \ "g\[(\]+char \[*\]+, (const char|char const) \[*\]+, char \[*\]+\[)\]+" - gdb_test "maint dem g__F1TlClT2" \ + test_demangling "arm: g__F1TlClT2" \ "g\[(\]+T, long, (const long|long const), long\[)\]+" - gdb_test "maint dem g__F1TiCiT2" \ + test_demangling "arm: g__F1TiCiT2" \ "g\[(\]+T, int, (const int|int const), int\[)\]+" - gdb_test "maint dem g__F1TsCsT2" \ + test_demangling "arm: g__F1TsCsT2" \ "g\[(\]+T, short, (const short|short const), short\[)\]+" - gdb_test "maint dem g__F1TcCcT2" \ + test_demangling "arm: g__F1TcCcT2" \ "g\[(\]+T, char, (const char|char const), char\[)\]+" - gdb_test_exact "maint demangle __dl__17T5__pt__8_PFcPv_iSFPv" "T5<int (*)(char, void *)>::operator delete(void *) static" + test_demangling_exact "arm: __dl__17T5__pt__8_PFcPv_iSFPv" "T5<int (*)(char, void *)>::operator delete(void *) static" - gdb_test "maint dem printf__FPCce" \ + test_demangling "arm: printf__FPCce" \ "printf\[(\]+(const char|char const) \[*\]+,...\[)\]+" - gdb_test_exact "maint demangle X__17T5__pt__8_PFcPv_i" "T5<int (*)(char, void *)>::X" + test_demangling_exact "arm: X__17T5__pt__8_PFcPv_i" "T5<int (*)(char, void *)>::X" - gdb_test_exact "maint demangle __ct__12T5__pt__3_1xFi" "T5<x>::T5(int)" + test_demangling_exact "arm: __ct__12T5__pt__3_1xFi" "T5<x>::T5(int)" - gdb_test "maint dem g__F1SRUlRCUlT2" \ + test_demangling "arm: g__F1SRUlRCUlT2" \ "g\[(\]+S, unsigned long &, (const unsigned long|unsigned long const) &, unsigned long &\[)\]+" - gdb_test "maint dem g__F1SRPlRPClT2" \ + test_demangling "arm: g__F1SRPlRPClT2" \ "g\[(\]+S, long \[*\]+&, (const long|long const) \[*\]+&, long \[*\]+&\[)\]+" - gdb_test "maint dem g__F1RRUiRCUiT2" \ + test_demangling "arm: g__F1RRUiRCUiT2" \ "g\[(\]+R, unsigned int &, (const unsigned int|unsigned int const) &, unsigned int &\[)\]+" - gdb_test "maint dem g__F1SRPiRPCiT2" \ + test_demangling "arm: g__F1SRPiRPCiT2" \ "g\[(\]+S, int \[*\]+&, (const int|int const) \[*\]+&, int \[*\]+&\[)\]+" - gdb_test "maint dem g__F1RRUsRCUsT2" \ + test_demangling "arm: g__F1RRUsRCUsT2" \ "g\[(\]+R, unsigned short &, (const unsigned short|unsigned short const) &, unsigned short &\[)\]+" - gdb_test "maint dem g__F1SRPsRPCsT2" \ + test_demangling "arm: g__F1SRPsRPCsT2" \ "g\[(\]+S, short \[*\]+&, (const short|short const) \[*\]+&, short \[*\]+&\[)\]+" - gdb_test "maint dem g__F1RRUcRCUcT2" \ + test_demangling "arm: g__F1RRUcRCUcT2" \ "g\[(\]+R, unsigned char &, (const unsigned char|unsigned char const) &, unsigned char &\[)\]+" - gdb_test "maint dem g__F1SRPcRPCcT2" \ + test_demangling "arm: g__F1SRPcRPCcT2" \ "g\[(\]+S, char \[*\]+&, (const char|char const) \[*\]+&, char \[*\]+&\[)\]+" - gdb_test "maint dem g__F1T1RRlRClT3" \ + test_demangling "arm: g__F1T1RRlRClT3" \ "g\[(\]+T, R, long &, (const long|long const) &, long &\[)\]+" - gdb_test "maint dem g__F1T1RRiRCiT3" \ + test_demangling "arm: g__F1T1RRiRCiT3" \ "g\[(\]+T, R, int &, (const int|int const) &, int &\[)\]+" - gdb_test "maint dem g__F1T1RRsRCsT3" \ + test_demangling "arm: g__F1T1RRsRCsT3" \ "g\[(\]+T, R, short &, (const short|short const) &, short &\[)\]+" - gdb_test "maint dem g__F1T1RRcRCcT3" \ + test_demangling "arm: g__F1T1RRcRCcT3" \ "g\[(\]+T, R, char &, (const char|char const) &, char &\[)\]+" - gdb_test_exact "maint demangle __dl__21T5__pt__11_PFiPPdPv_iSFPv" "T5<int (*)(int, double **, void *)>::operator delete(void *) static" + test_demangling_exact "arm: __dl__21T5__pt__11_PFiPPdPv_iSFPv" "T5<int (*)(int, double **, void *)>::operator delete(void *) static" - gdb_test_exact "maint demangle __std__foo" "global destructors keyed to foo" + test_demangling_exact "arm: __std__foo" "global destructors keyed to foo" - gdb_test_exact "maint demangle __sti__bar" "global constructors keyed to bar" + test_demangling_exact "arm: __sti__bar" "global constructors keyed to bar" - gdb_test_exact "maint demangle f__FicdPcPFci_v" "f(int, char, double, char *, void (*)(char, int))" - gdb_test_exact "maint demangle f__FicdPcPFic_v" "f(int, char, double, char *, void (*)(int, char))" - gdb_test_exact "maint demangle get__2T7SFv" "T7::get(void) static" + test_demangling_exact "arm: f__FicdPcPFci_v" "f(int, char, double, char *, void (*)(char, int))" + test_demangling_exact "arm: f__FicdPcPFic_v" "f(int, char, double, char *, void (*)(int, char))" + test_demangling_exact "arm: get__2T7SFv" "T7::get(void) static" - gdb_test_exact "maint demangle X__21T5__pt__11_PFiPPdPv_i" "T5<int (*)(int, double **, void *)>::X" + test_demangling_exact "arm: X__21T5__pt__11_PFiPPdPv_i" "T5<int (*)(int, double **, void *)>::X" - gdb_test "maint dem g__FcRdRCdT2" \ + test_demangling "arm: g__FcRdRCdT2" \ "g\[(\]+char, double &, (const double|double const) &, double &\[)\]+" - gdb_test "maint dem g__FcRfRCfT2" \ + test_demangling "arm: g__FcRfRCfT2" \ "g\[(\]+char, float &, (const float|float const) &, float &\[)\]+" - gdb_test "maint dem __md__FC2T2i" \ + test_demangling "arm: __md__FC2T2i" \ "operator%\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test "maint dem __dv__FC2T2i" \ + test_demangling "arm: __dv__FC2T2i" \ "operator/\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test "maint dem __ml__FC2T2i" \ + test_demangling "arm: __ml__FC2T2i" \ "operator\[*\]+\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test "maint dem __mi__FC2T2i" \ + test_demangling "arm: __mi__FC2T2i" \ "operator-\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test "maint dem __pl__FC2T2i" \ + test_demangling "arm: __pl__FC2T2i" \ "operator\[+\]+\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test_exact "maint demangle __dl__11T5__pt__2_iSFPv" "T5<int>::operator delete(void *) static" + test_demangling_exact "arm: __dl__11T5__pt__2_iSFPv" "T5<int>::operator delete(void *) static" - gdb_test_exact "maint demangle __dl__11T5__pt__2_cSFPv" "T5<char>::operator delete(void *) static" + test_demangling_exact "arm: __dl__11T5__pt__2_cSFPv" "T5<char>::operator delete(void *) static" - gdb_test_exact "maint demangle h__Fc" "h(char)" - gdb_test_exact "maint demangle h__Fd" "h(double)" - gdb_test_exact "maint demangle h__Ff" "h(float)" - gdb_test_exact "maint demangle h__Fi" "h(int)" - gdb_test_exact "maint demangle f__Fi" "f(int)" - gdb_test_exact "maint demangle h__Fl" "h(long)" + test_demangling_exact "arm: h__Fc" "h(char)" + test_demangling_exact "arm: h__Fd" "h(double)" + test_demangling_exact "arm: h__Ff" "h(float)" + test_demangling_exact "arm: h__Fi" "h(int)" + test_demangling_exact "arm: f__Fi" "f(int)" + test_demangling_exact "arm: h__Fl" "h(long)" - gdb_test_exact "maint demangle h__Fs" "h(short)" - gdb_test "maint dem __md__FC2T2RC2T2" \ + test_demangling_exact "arm: h__Fs" "h(short)" + test_demangling "arm: __md__FC2T2RC2T2" \ "operator%\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __dv__FC2T2RC2T2" \ + test_demangling "arm: __dv__FC2T2RC2T2" \ "operator/\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __ml__FC2T2RC2T2" \ + test_demangling "arm: __ml__FC2T2RC2T2" \ "operator\[*\]+\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __mi__FC2T2RC2T2" \ + test_demangling "arm: __mi__FC2T2RC2T2" \ "operator-\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __pl__FC2T2RC2T2" \ + test_demangling "arm: __pl__FC2T2RC2T2" \ "operator\[+\]+\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem g__FcRP1cRPC1cT2" \ + test_demangling "arm: g__FcRP1cRPC1cT2" \ "g\[(\]+char, c *\[*\]+&, (const c|c const) *\[*\]+&, c *\[*\]+&\[)\]+" - gdb_test_exact "maint demangle X__11T5__pt__2_c" "T5<char>::X" + test_demangling_exact "arm: X__11T5__pt__2_c" "T5<char>::X" - gdb_test_exact "maint demangle X__11T5__pt__2_i" "T5<int>::X" + test_demangling_exact "arm: X__11T5__pt__2_i" "T5<int>::X" - gdb_test "maint dem g__FdCdT1" \ + test_demangling "arm: g__FdCdT1" \ "g\[(\]+double, (const double|double const), double\[)\]+" - gdb_test "maint dem g__FfCfT1" \ + test_demangling "arm: g__FfCfT1" \ "g\[(\]+float, (const float|float const), float\[)\]+" - gdb_test "maint dem g__FlClT1" \ + test_demangling "arm: g__FlClT1" \ "g\[(\]+long, (const long|long const), long\[)\]+" - gdb_test "maint dem g__FiCiT1" \ + test_demangling "arm: g__FiCiT1" \ "g\[(\]+int, (const int|int const), int\[)\]+" - gdb_test "maint dem g__FsCsT1" \ + test_demangling "arm: g__FsCsT1" \ "g\[(\]+short, (const short|short const), short\[)\]+" - gdb_test "maint dem g__FcCcT1" \ + test_demangling "arm: g__FcCcT1" \ "g\[(\]+char, (const char|char const), char\[)\]+" - gdb_test_exact "maint demangle __ct__17T5__pt__8_PFcPv_iFi" "T5<int (*)(char, void *)>::T5(int)" + test_demangling_exact "arm: __ct__17T5__pt__8_PFcPv_iFi" "T5<int (*)(char, void *)>::T5(int)" - gdb_test_exact "maint demangle f__FicdPc" "f(int, char, double, char *)" - gdb_test_exact "maint demangle __nw__FUi" "operator new(unsigned int)" - gdb_test_exact "maint demangle __ct__Q3_2T11a1bSFi" "T1::a::b::b(int) static" - gdb_test_exact "maint demangle __dt__Q3_2T11a1bSFi" "T1::a::b::~b(int) static" - gdb_test_exact "maint demangle put__Q3_2T11a1bSFi" "T1::a::b::put(int) static" - gdb_test_exact "maint demangle get__Q2_2T11aSFv" "T1::a::get(void) static" - gdb_test_exact "maint demangle put__2T1SFi" "T1::put(int) static" - gdb_test_exact "maint demangle put__Q5_2T11a1b1c1dSFi" "T1::a::b::c::d::put(int) static" - gdb_test_exact "maint demangle get__Q4_2T11a1b1cSFv" "T1::a::b::c::get(void) static" - gdb_test_exact "maint demangle put__Q2_2T11aSFi" "T1::a::put(int) static" - gdb_test_exact "maint demangle put__Q4_2T11a1b1cSFi" "T1::a::b::c::put(int) static" - gdb_test_exact "maint demangle get__Q3_2T11a1bSFv" "T1::a::b::get(void) static" - gdb_test_exact "maint demangle get__2T1SFv" "T1::get(void) static" - gdb_test_exact "maint demangle get__Q5_2T11a1b1c1dSFv" "T1::a::b::c::d::get(void) static" + test_demangling_exact "arm: f__FicdPc" "f(int, char, double, char *)" + test_demangling_exact "arm: __nw__FUi" "operator new(unsigned int)" + test_demangling_exact "arm: __ct__Q3_2T11a1bSFi" "T1::a::b::b(int) static" + test_demangling_exact "arm: __dt__Q3_2T11a1bSFi" "T1::a::b::~b(int) static" + test_demangling_exact "arm: put__Q3_2T11a1bSFi" "T1::a::b::put(int) static" + test_demangling_exact "arm: get__Q2_2T11aSFv" "T1::a::get(void) static" + test_demangling_exact "arm: put__2T1SFi" "T1::put(int) static" + test_demangling_exact "arm: put__Q5_2T11a1b1c1dSFi" "T1::a::b::c::d::put(int) static" + test_demangling_exact "arm: get__Q4_2T11a1b1cSFv" "T1::a::b::c::get(void) static" + test_demangling_exact "arm: put__Q2_2T11aSFi" "T1::a::put(int) static" + test_demangling_exact "arm: put__Q4_2T11a1b1cSFi" "T1::a::b::c::put(int) static" + test_demangling_exact "arm: get__Q3_2T11a1bSFv" "T1::a::b::get(void) static" + test_demangling_exact "arm: get__2T1SFv" "T1::get(void) static" + test_demangling_exact "arm: get__Q5_2T11a1b1c1dSFv" "T1::a::b::c::d::get(void) static" - gdb_test_exact "maint demangle __dt__11T1__pt__2_cFv" "T1<char>::~T1(void)" + test_demangling_exact "arm: __dt__11T1__pt__2_cFv" "T1<char>::~T1(void)" - gdb_test_exact "maint demangle __dt__12T1__pt__3_1tFv" "T1<t>::~T1(void)" + test_demangling_exact "arm: __dt__12T1__pt__3_1tFv" "T1<t>::~T1(void)" - gdb_test_exact "maint demangle __dl__12T1__pt__3_1tSFPv" "T1<t>::operator delete(void *) static" + test_demangling_exact "arm: __dl__12T1__pt__3_1tSFPv" "T1<t>::operator delete(void *) static" - gdb_test_exact "maint demangle __ct__11T1__pt__2_cFi" "T1<char>::T1(int)" + test_demangling_exact "arm: __ct__11T1__pt__2_cFi" "T1<char>::T1(int)" - gdb_test_exact "maint demangle __ct__11T1__pt__2_cFv" "T1<char>::T1(void)" + test_demangling_exact "arm: __ct__11T1__pt__2_cFv" "T1<char>::T1(void)" - gdb_test_exact "maint demangle __ct__12T1__pt__3_1tFi" "T1<t>::T1(int)" + test_demangling_exact "arm: __ct__12T1__pt__3_1tFi" "T1<t>::T1(int)" - gdb_test_exact "maint demangle __ct__12T1__pt__3_1tFv" "T1<t>::T1(void)" + test_demangling_exact "arm: __ct__12T1__pt__3_1tFv" "T1<t>::T1(void)" - gdb_test_exact "maint demangle __dl__11T1__pt__2_cSFPv" "T1<char>::operator delete(void *) static" + test_demangling_exact "arm: __dl__11T1__pt__2_cSFPv" "T1<char>::operator delete(void *) static" - gdb_test_exact "maint demangle bar__3fooFPv" "foo::bar(void *)" - gdb_test "maint dem bar__3fooFPCv" \ + test_demangling_exact "arm: bar__3fooFPv" "foo::bar(void *)" + test_demangling "arm: bar__3fooFPCv" \ "foo::bar\[(\]+(const void|void const) *\[*\]+\[)\]+" - gdb_test_exact "maint demangle bar__3fooCFPv" "foo::bar(void *) const" - gdb_test "maint dem bar__3fooCFPCv" \ + test_demangling_exact "arm: bar__3fooCFPv" "foo::bar(void *) const" + test_demangling "arm: bar__3fooCFPCv" \ "foo::bar\[(\]+(const void|void const) *\[*\]+\[)\]+ const" - gdb_test_exact "maint demangle __eq__3fooFR3foo" "foo::operator==(foo &)" - gdb_test "maint dem __eq__3fooFRC3foo" \ + test_demangling_exact "arm: __eq__3fooFR3foo" "foo::operator==(foo &)" + test_demangling "arm: __eq__3fooFRC3foo" \ "foo::operator==\[(\]+(const foo|foo const) &\[)\]+" - gdb_test_exact "maint demangle __eq__3fooCFR3foo" "foo::operator==(foo &) const" - gdb_test "maint dem __eq__3fooCFRC3foo" \ + test_demangling_exact "arm: __eq__3fooCFR3foo" "foo::operator==(foo &) const" + test_demangling "arm: __eq__3fooCFRC3foo" \ "foo::operator==\[(\]+(const foo|foo const) &\[)\]+ const" - gdb_test_exact "maint demangle elem__15vector__pt__2_dFi" "vector<double>::elem(int)" + test_demangling_exact "arm: elem__15vector__pt__2_dFi" "vector<double>::elem(int)" - gdb_test_exact "maint demangle elem__15vector__pt__2_iFi" "vector<int>::elem(int)" + test_demangling_exact "arm: elem__15vector__pt__2_iFi" "vector<int>::elem(int)" - gdb_test_exact "maint demangle __ct__15vector__pt__2_dFi" "vector<double>::vector(int)" + test_demangling_exact "arm: __ct__15vector__pt__2_dFi" "vector<double>::vector(int)" - gdb_test_exact "maint demangle __ct__15vector__pt__2_iFi" "vector<int>::vector(int)" + test_demangling_exact "arm: __ct__15vector__pt__2_iFi" "vector<int>::vector(int)" - gdb_test_exact "maint demangle __ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2" \ + test_demangling_exact "arm: __ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2" \ "DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)" - gdb_test_exact "maint demangle bar__3fooFiT16FooBar" "foo::bar(int, int, FooBar)" + test_demangling_exact "arm: bar__3fooFiT16FooBar" "foo::bar(int, int, FooBar)" - gdb_test_exact "maint demangle bar__3fooFPiN51PdN37PcN211T1iN215" \ + test_demangling_exact "arm: bar__3fooFPiN51PdN37PcN211T1iN215" \ "foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)" + test_demangling_exact "arm: _Utf390_1__1_9223372036854775807__9223372036854775" \ + "Can't demangle \"_Utf390_1__1_9223372036854775807__9223372036854775\"" } proc test_hp_style_demangling {} { - global gdb_prompt - - # Set the demangling style to "hp" and then check to make sure - # it really got set. Return if the style failed to get set for - # some reason. - - send_gdb "set demangle-style hp\n" - gdb_expect { - -re "set demangle-style hp\[\r\n\]+$gdb_prompt $" {} - -re ".*$gdb_prompt $" { fail "set demangle-style hp failed" ; return } - timeout { fail "set demangle-style hp failed (timeout)" ; return } - } - - send_gdb "show demangle-style\n" - gdb_expect { - -re "The current C\[+\]+ demangling style is \"hp\".\r\n$gdb_prompt $" {} - -re ".*$gdb_prompt $" { fail "demangling style not set to hp" } - timeout { fail "show demangle-style timed out (HP)" } - } # HP aCC mangling style is based on ARM for all the basic stuff, # so first we use some of the ARM tests here. Later we have HP-specific # tests. - gdb_test "maint dem g__FP1cPC1cT1" \ + test_demangling "hp: g__FP1cPC1cT1" \ "g\[(\]+c *\[*\]+, (const c|c const) *\[*\]+, c *\[*\]+\[)\]+" - gdb_test "maint dem g__FPUlPCUlT1" \ + test_demangling "hp: g__FPUlPCUlT1" \ "g\[(\]+unsigned long \[*\]+, (const unsigned long|unsigned long const) \[*\]+, unsigned long \[*\]+\[)\]+" - gdb_test "maint dem g__FPUiPCUiT1" \ + test_demangling "hp: g__FPUiPCUiT1" \ "g\[(\]+unsigned int \[*\]+, (const unsigned int|unsigned int const) \[*\]+, unsigned int \[*\]+\[)\]+" - gdb_test "maint dem g__FPUsPCUsT1" \ + test_demangling "hp: g__FPUsPCUsT1" \ "g\[(\]+unsigned short \[*\]+, (const unsigned short|unsigned short const) \[*\]+, unsigned short \[*\]+\[)\]+" - gdb_test "maint dem g__FPUcPCUcT1" \ + test_demangling "hp: g__FPUcPCUcT1" \ "g\[(\]+unsigned char \[*\]+, (const unsigned char|unsigned char const) \[*\]+, unsigned char \[*\]+\[)\]+" - gdb_test "maint dem g__F1TPlPClT2" \ + test_demangling "hp: g__F1TPlPClT2" \ "g\[(\]+T, long \[*\]+, (const long|long const) \[*\]+, long \[*\]+\[)\]+" - gdb_test "maint dem g__F1RRlRClT2" \ + test_demangling "hp: g__F1RRlRClT2" \ "g\[(\]+R, long &, (const long|long const) &, long &\[)\]+" - gdb_test "maint dem g__F1TPiPCiT2" \ + test_demangling "hp: g__F1TPiPCiT2" \ "g\[(\]+T, int \[*\]+, (const int|int const) \[*\]+, int \[*\]+\[)\]+" - gdb_test "maint dem g__F1RRiRCiT2" \ + test_demangling "hp: g__F1RRiRCiT2" \ "g\[(\]+R, int &, (const int|int const) &, int &\[)\]+" - gdb_test "maint dem g__F1TPsPCsT2" \ + test_demangling "hp: g__F1TPsPCsT2" \ "g\[(\]+T, short \[*\]+, (const short|short const) \[*\]+, short \[*\]+\[)\]+" - gdb_test "maint dem g__F1RRsRCsT2" \ + test_demangling "hp: g__F1RRsRCsT2" \ "g\[(\]+R, short &, (const short|short const) &, short &\[)\]+" - gdb_test "maint dem g__F1TPcPCcT2" \ + test_demangling "hp: g__F1TPcPCcT2" \ "g\[(\]+T, char \[*\]+, (const char|char const) \[*\]+, char \[*\]+\[)\]+" - gdb_test "maint dem g__F1RRcRCcT2" \ + test_demangling "hp: g__F1RRcRCcT2" \ "g\[(\]+R, char &, (const char|char const) &, char &\[)\]+" - gdb_test "maint dem __gt__FRC2T2c" \ + test_demangling "hp: __gt__FRC2T2c" \ "operator>\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __ge__FRC2T2c" \ + test_demangling "hp: __ge__FRC2T2c" \ "operator>=\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __lt__FRC2T2c" \ + test_demangling "hp: __lt__FRC2T2c" \ "operator<\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __le__FRC2T2c" \ + test_demangling "hp: __le__FRC2T2c" \ "operator<=\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __ne__FRC2T2c" \ + test_demangling "hp: __ne__FRC2T2c" \ "operator!=\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test "maint dem __eq__FRC2T2c" \ + test_demangling "hp: __eq__FRC2T2c" \ "operator==\[(\]+(const T2|T2 const) &, char\[)\]+" - gdb_test_exact "maint demangle __amd__FR2T2i" "operator%=(T2 &, int)" - gdb_test_exact "maint demangle __adv__FR2T2i" "operator/=(T2 &, int)" - gdb_test_exact "maint demangle __amu__FR2T2i" "operator*=(T2 &, int)" - gdb_test_exact "maint demangle __ami__FR2T2i" "operator-=(T2 &, int)" - gdb_test_exact "maint demangle __apl__FR2T2i" "operator+=(T2 &, int)" - gdb_test_exact "maint demangle __nw__2T1SFUi" "T1::operator new(unsigned int) static" - gdb_test_exact "maint demangle __dl__2T1SFPv" "T1::operator delete(void *) static" - gdb_test_exact "maint demangle put__2T7SFi" "T7::put(int) static" - - gdb_test_exact "maint demangle h__FUc" "h(unsigned char)" - gdb_test_exact "maint demangle f__Fic" "f(int, char)" - gdb_test_exact "maint demangle h__FUi" "h(unsigned int)" - gdb_test_exact "maint demangle h__Fci" "h(char, int)" - gdb_test_exact "maint demangle h__FUl" "h(unsigned long)" - gdb_test_exact "maint demangle h__Fcl" "h(char, long)" - gdb_test_exact "maint demangle h__FUs" "h(unsigned short)" - gdb_test_exact "maint demangle h__Fcs" "h(char, short)" - gdb_test "maint dem __amd__FR2T2RC2T2" \ + test_demangling_exact "hp: __amd__FR2T2i" "operator%=(T2 &, int)" + test_demangling_exact "hp: __adv__FR2T2i" "operator/=(T2 &, int)" + test_demangling_exact "hp: __amu__FR2T2i" "operator*=(T2 &, int)" + test_demangling_exact "hp: __ami__FR2T2i" "operator-=(T2 &, int)" + test_demangling_exact "hp: __apl__FR2T2i" "operator+=(T2 &, int)" + test_demangling_exact "hp: __nw__2T1SFUi" "T1::operator new(unsigned int) static" + test_demangling_exact "hp: __dl__2T1SFPv" "T1::operator delete(void *) static" + test_demangling_exact "hp: put__2T7SFi" "T7::put(int) static" + + test_demangling_exact "hp: h__FUc" "h(unsigned char)" + test_demangling_exact "hp: f__Fic" "f(int, char)" + test_demangling_exact "hp: h__FUi" "h(unsigned int)" + test_demangling_exact "hp: h__Fci" "h(char, int)" + test_demangling_exact "hp: h__FUl" "h(unsigned long)" + test_demangling_exact "hp: h__Fcl" "h(char, long)" + test_demangling_exact "hp: h__FUs" "h(unsigned short)" + test_demangling_exact "hp: h__Fcs" "h(char, short)" + test_demangling "hp: __amd__FR2T2RC2T2" \ "operator%=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __adv__FR2T2RC2T2" \ + test_demangling "hp: __adv__FR2T2RC2T2" \ "operator/=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __amu__FR2T2RC2T2" \ + test_demangling "hp: __amu__FR2T2RC2T2" \ "operator\[*\]+=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __ami__FR2T2RC2T2" \ + test_demangling "hp: __ami__FR2T2RC2T2" \ "operator-=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __apl__FR2T2RC2T2" \ + test_demangling "hp: __apl__FR2T2RC2T2" \ "operator\[+\]+=\[(\]+T2 &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem g__F1SRPUlRPCUlT2" \ + test_demangling "hp: g__F1SRPUlRPCUlT2" \ "g\[(\]+S, unsigned long \[*\]+&, (const unsigned long|unsigned long const) \[*\]+&, unsigned long \[*\]+&\[)\]+" - gdb_test "maint dem g__F1SRPUiRPCUiT2" \ + test_demangling "hp: g__F1SRPUiRPCUiT2" \ "g\[(\]+S, unsigned int \[*\]+&, (const unsigned int|unsigned int const) \[*\]+&, unsigned int \[*\]+&\[)\]+" - gdb_test "maint dem g__F1SRPUsRPCUsT2" \ + test_demangling "hp: g__F1SRPUsRPCUsT2" \ "g\[(\]+S, unsigned short \[*\]+&, (const unsigned short|unsigned short const) \[*\]+&, unsigned short \[*\]+&\[)\]+" - gdb_test "maint dem g__F1SRPUcRPCUcT2" \ + test_demangling "hp: g__F1SRPUcRPCUcT2" \ "g\[(\]+S, unsigned char \[*\]+&, (const unsigned char|unsigned char const) \[*\]+&, unsigned char \[*\]+&\[)\]+" - gdb_test "maint dem g__F1T1SRPlRPClT3" \ + test_demangling "hp: g__F1T1SRPlRPClT3" \ "g\[(\]+T, S, long \[*\]+&, (const long|long const) \[*\]+&, long \[*\]+&\[)\]+" - gdb_test "maint dem g__F1T1SRPiRPCiT3" \ + test_demangling "hp: g__F1T1SRPiRPCiT3" \ "g\[(\]+T, S, int \[*\]+&, (const int|int const) \[*\]+&, int \[*\]+&\[)\]+" - gdb_test "maint dem g__F1T1SRPcRPCcT3" \ + test_demangling "hp: g__F1T1SRPcRPCcT3" \ "g\[(\]+T, S, char \[*\]+&, (const char|char const) \[*\]+&, char \[*\]+&\[)\]+" - gdb_test "maint dem __gt__FRC2T2T1" \ + test_demangling "hp: __gt__FRC2T2T1" \ "operator>\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __ge__FRC2T2T1" \ + test_demangling "hp: __ge__FRC2T2T1" \ "operator>=\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __lt__FRC2T2T1" \ + test_demangling "hp: __lt__FRC2T2T1" \ "operator<\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __le__FRC2T2T1" \ + test_demangling "hp: __le__FRC2T2T1" \ "operator<=\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __ne__FRC2T2T1" \ + test_demangling "hp: __ne__FRC2T2T1" \ "operator!=\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __eq__FRC2T2T1" \ + test_demangling "hp: __eq__FRC2T2T1" \ "operator==\[(\]+(const T2|T2 const) &, (const T2|T2 const) &\[)\]+" - gdb_test "maint dem g__FcR1cRC1cT2" \ + test_demangling "hp: g__FcR1cRC1cT2" \ "g\[(\]+char, c &, (const c|c const) &, c &\[)\]+" - gdb_test "maint dem g__FcRPdRPCdT2" \ + test_demangling "hp: g__FcRPdRPCdT2" \ "g\[(\]+char, double *\[*\]+&, (const double|double const) *\[*\]+&, double *\[*\]+&\[)\]+" - gdb_test "maint dem g__FcRPfRPCfT2" \ + test_demangling "hp: g__FcRPfRPCfT2" \ "g\[(\]+char, float *\[*\]+&, (const float|float const) *\[*\]+&, float *\[*\]+&\[)\]+" - gdb_test_exact "maint demangle h__FcT1" "h(char, char)" - gdb_test_exact "maint demangle f__Ficd" "f(int, char, double)" - gdb_test "maint dem g__F1T1SdRPsRPCsT4" \ + test_demangling_exact "hp: h__FcT1" "h(char, char)" + test_demangling_exact "hp: f__Ficd" "f(int, char, double)" + test_demangling "hp: g__F1T1SdRPsRPCsT4" \ "g\[(\]+T, S, double, short \[*\]+&, (const short|short const) \[*\]+&, short \[*\]+&\[)\]+" - gdb_test "maint dem g__F1cC1cT1" \ + test_demangling "hp: g__F1cC1cT1" \ "g\[(\]+c, (const c|c const), c\[)\]+" - gdb_test "maint dem g__FPdPCdT1" \ + test_demangling "hp: g__FPdPCdT1" \ "g\[(\]+double *\[*\]+, (const double|double const) *\[*\]+, double *\[*\]+\[)\]+" - gdb_test "maint dem g__FPfPCfT1" \ + test_demangling "hp: g__FPfPCfT1" \ "g\[(\]+float *\[*\]+, (const float|float const) *\[*\]+, float *\[*\]+\[)\]+" - gdb_test "maint dem g__FUlCUlT1" \ + test_demangling "hp: g__FUlCUlT1" \ "g\[(\]+unsigned long, (const unsigned long|unsigned long const), unsigned long\[)\]+" - gdb_test "maint dem g__FPlPClT1" \ + test_demangling "hp: g__FPlPClT1" \ "g\[(\]+long \[*\]+, (const long|long const) \[*\]+, long \[*\]+\[)\]+" - gdb_test "maint dem g__FUiCUiT1" \ + test_demangling "hp: g__FUiCUiT1" \ "g\[(\]+unsigned int, (const unsigned int|unsigned int const), unsigned int\[)\]+" - gdb_test "maint dem g__FPiPCiT1" \ + test_demangling "hp: g__FPiPCiT1" \ "g\[(\]+int \[*\]+, (const int|int const) \[*\]+, int \[*\]+\[)\]+" - gdb_test "maint dem g__FUsCUsT1" \ + test_demangling "hp: g__FUsCUsT1" \ "g\[(\]+unsigned short, (const unsigned short|unsigned short const), unsigned short\[)\]+" - gdb_test "maint dem g__FPsPCsT1" \ + test_demangling "hp: g__FPsPCsT1" \ "g\[(\]+short \[*\]+, (const short|short const) \[*\]+, short \[*\]+\[)\]+" - gdb_test "maint dem g__FUcCUcT1" \ + test_demangling "hp: g__FUcCUcT1" \ "g\[(\]+unsigned char, (const unsigned char|unsigned char const), unsigned char\[)\]+" - gdb_test "maint dem g__FPcPCcT1" \ + test_demangling "hp: g__FPcPCcT1" \ "g\[(\]+char \[*\]+, (const char|char const) \[*\]+, char \[*\]+\[)\]+" - gdb_test "maint dem g__F1TlClT2" \ + test_demangling "hp: g__F1TlClT2" \ "g\[(\]+T, long, (const long|long const), long\[)\]+" - gdb_test "maint dem g__F1TiCiT2" \ + test_demangling "hp: g__F1TiCiT2" \ "g\[(\]+T, int, (const int|int const), int\[)\]+" - gdb_test "maint dem g__F1TsCsT2" \ + test_demangling "hp: g__F1TsCsT2" \ "g\[(\]+T, short, (const short|short const), short\[)\]+" - gdb_test "maint dem g__F1TcCcT2" \ + test_demangling "hp: g__F1TcCcT2" \ "g\[(\]+T, char, (const char|char const), char\[)\]+" - gdb_test "maint dem printf__FPCce" \ + test_demangling "hp: printf__FPCce" \ "printf\[(\]+(const char|char const) \[*\]+,...\[)\]+" - gdb_test "maint dem g__F1SRUlRCUlT2" \ + test_demangling "hp: g__F1SRUlRCUlT2" \ "g\[(\]+S, unsigned long &, (const unsigned long|unsigned long const) &, unsigned long &\[)\]+" - gdb_test "maint dem g__F1SRPlRPClT2" \ + test_demangling "hp: g__F1SRPlRPClT2" \ "g\[(\]+S, long \[*\]+&, (const long|long const) \[*\]+&, long \[*\]+&\[)\]+" - gdb_test "maint dem g__F1RRUiRCUiT2" \ + test_demangling "hp: g__F1RRUiRCUiT2" \ "g\[(\]+R, unsigned int &, (const unsigned int|unsigned int const) &, unsigned int &\[)\]+" - gdb_test "maint dem g__F1SRPiRPCiT2" \ + test_demangling "hp: g__F1SRPiRPCiT2" \ "g\[(\]+S, int \[*\]+&, (const int|int const) \[*\]+&, int \[*\]+&\[)\]+" - gdb_test "maint dem g__F1RRUsRCUsT2" \ + test_demangling "hp: g__F1RRUsRCUsT2" \ "g\[(\]+R, unsigned short &, (const unsigned short|unsigned short const) &, unsigned short &\[)\]+" - gdb_test "maint dem g__F1SRPsRPCsT2" \ + test_demangling "hp: g__F1SRPsRPCsT2" \ "g\[(\]+S, short \[*\]+&, (const short|short const) \[*\]+&, short \[*\]+&\[)\]+" - gdb_test "maint dem g__F1RRUcRCUcT2" \ + test_demangling "hp: g__F1RRUcRCUcT2" \ "g\[(\]+R, unsigned char &, (const unsigned char|unsigned char const) &, unsigned char &\[)\]+" - gdb_test "maint dem g__F1SRPcRPCcT2" \ + test_demangling "hp: g__F1SRPcRPCcT2" \ "g\[(\]+S, char \[*\]+&, (const char|char const) \[*\]+&, char \[*\]+&\[)\]+" - gdb_test "maint dem g__F1T1RRlRClT3" \ + test_demangling "hp: g__F1T1RRlRClT3" \ "g\[(\]+T, R, long &, (const long|long const) &, long &\[)\]+" - gdb_test "maint dem g__F1T1RRiRCiT3" \ + test_demangling "hp: g__F1T1RRiRCiT3" \ "g\[(\]+T, R, int &, (const int|int const) &, int &\[)\]+" - gdb_test "maint dem g__F1T1RRsRCsT3" \ + test_demangling "hp: g__F1T1RRsRCsT3" \ "g\[(\]+T, R, short &, (const short|short const) &, short &\[)\]+" - gdb_test "maint dem g__F1T1RRcRCcT3" \ + test_demangling "hp: g__F1T1RRcRCcT3" \ "g\[(\]+T, R, char &, (const char|char const) &, char &\[)\]+" - gdb_test_exact "maint demangle f__FicdPcPFci_v" "f(int, char, double, char *, void (*)(char, int))" - gdb_test_exact "maint demangle f__FicdPcPFic_v" "f(int, char, double, char *, void (*)(int, char))" - gdb_test_exact "maint demangle get__2T7SFv" "T7::get(void) static" + test_demangling_exact "hp: f__FicdPcPFci_v" "f(int, char, double, char *, void (*)(char, int))" + test_demangling_exact "hp: f__FicdPcPFic_v" "f(int, char, double, char *, void (*)(int, char))" + test_demangling_exact "hp: get__2T7SFv" "T7::get(void) static" - gdb_test "maint dem g__FcRdRCdT2" \ + test_demangling "hp: g__FcRdRCdT2" \ "g\[(\]+char, double &, (const double|double const) &, double &\[)\]+" - gdb_test "maint dem g__FcRfRCfT2" \ + test_demangling "hp: g__FcRfRCfT2" \ "g\[(\]+char, float &, (const float|float const) &, float &\[)\]+" - gdb_test "maint dem __md__FC2T2i" \ + test_demangling "hp: __md__FC2T2i" \ "operator%\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test "maint dem __dv__FC2T2i" \ + test_demangling "hp: __dv__FC2T2i" \ "operator/\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test "maint dem __ml__FC2T2i" \ + test_demangling "hp: __ml__FC2T2i" \ "operator\[*\]+\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test "maint dem __mi__FC2T2i" \ + test_demangling "hp: __mi__FC2T2i" \ "operator-\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test "maint dem __pl__FC2T2i" \ + test_demangling "hp: __pl__FC2T2i" \ "operator\[+\]+\[(\]+(const T2|T2 const), int\[)\]+" - gdb_test_exact "maint demangle h__Fc" "h(char)" - gdb_test_exact "maint demangle h__Fd" "h(double)" - gdb_test_exact "maint demangle h__Ff" "h(float)" - gdb_test_exact "maint demangle h__Fi" "h(int)" - gdb_test_exact "maint demangle f__Fi" "f(int)" - gdb_test_exact "maint demangle h__Fl" "h(long)" + test_demangling_exact "hp: h__Fc" "h(char)" + test_demangling_exact "hp: h__Fd" "h(double)" + test_demangling_exact "hp: h__Ff" "h(float)" + test_demangling_exact "hp: h__Fi" "h(int)" + test_demangling_exact "hp: f__Fi" "f(int)" + test_demangling_exact "hp: h__Fl" "h(long)" - gdb_test_exact "maint demangle h__Fs" "h(short)" - gdb_test "maint dem __md__FC2T2RC2T2" \ + test_demangling_exact "hp: h__Fs" "h(short)" + test_demangling "hp: __md__FC2T2RC2T2" \ "operator%\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __dv__FC2T2RC2T2" \ + test_demangling "hp: __dv__FC2T2RC2T2" \ "operator/\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __ml__FC2T2RC2T2" \ + test_demangling "hp: __ml__FC2T2RC2T2" \ "operator\[*\]+\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __mi__FC2T2RC2T2" \ + test_demangling "hp: __mi__FC2T2RC2T2" \ "operator-\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem __pl__FC2T2RC2T2" \ + test_demangling "hp: __pl__FC2T2RC2T2" \ "operator\[+\]+\[(\]+(const T2|T2 const), (const T2|T2 const) &\[)\]+" - gdb_test "maint dem g__FcRP1cRPC1cT2" \ + test_demangling "hp: g__FcRP1cRPC1cT2" \ "g\[(\]+char, c *\[*\]+&, (const c|c const) *\[*\]+&, c *\[*\]+&\[)\]+" - gdb_test "maint dem g__FdCdT1" \ + test_demangling "hp: g__FdCdT1" \ "g\[(\]+double, (const double|double const), double\[)\]+" - gdb_test "maint dem g__FfCfT1" \ + test_demangling "hp: g__FfCfT1" \ "g\[(\]+float, (const float|float const), float\[)\]+" - gdb_test "maint dem g__FlClT1" \ + test_demangling "hp: g__FlClT1" \ "g\[(\]+long, (const long|long const), long\[)\]+" - gdb_test "maint dem g__FiCiT1" \ + test_demangling "hp: g__FiCiT1" \ "g\[(\]+int, (const int|int const), int\[)\]+" - gdb_test "maint dem g__FsCsT1" \ + test_demangling "hp: g__FsCsT1" \ "g\[(\]+short, (const short|short const), short\[)\]+" - gdb_test "maint dem g__FcCcT1" \ + test_demangling "hp: g__FcCcT1" \ "g\[(\]+char, (const char|char const), char\[)\]+" - gdb_test_exact "maint demangle f__FicdPc" "f(int, char, double, char *)" - gdb_test_exact "maint demangle __nw__FUi" "operator new(unsigned int)" - gdb_test_exact "maint demangle __ct__Q3_2T11a1bSFi" "T1::a::b::b(int) static" - gdb_test_exact "maint demangle __dt__Q3_2T11a1bSFi" "T1::a::b::~b(int) static" - gdb_test_exact "maint demangle put__Q3_2T11a1bSFi" "T1::a::b::put(int) static" - gdb_test_exact "maint demangle get__Q2_2T11aSFv" "T1::a::get(void) static" - gdb_test_exact "maint demangle put__2T1SFi" "T1::put(int) static" - gdb_test_exact "maint demangle put__Q5_2T11a1b1c1dSFi" "T1::a::b::c::d::put(int) static" - gdb_test_exact "maint demangle get__Q4_2T11a1b1cSFv" "T1::a::b::c::get(void) static" - gdb_test_exact "maint demangle put__Q2_2T11aSFi" "T1::a::put(int) static" - gdb_test_exact "maint demangle put__Q4_2T11a1b1cSFi" "T1::a::b::c::put(int) static" - gdb_test_exact "maint demangle get__Q3_2T11a1bSFv" "T1::a::b::get(void) static" - gdb_test_exact "maint demangle get__2T1SFv" "T1::get(void) static" - gdb_test_exact "maint demangle get__Q5_2T11a1b1c1dSFv" "T1::a::b::c::d::get(void) static" - - - gdb_test_exact "maint demangle bar__3fooFPv" "foo::bar(void *)" - gdb_test "maint dem bar__3fooFPCv" \ + test_demangling_exact "hp: f__FicdPc" "f(int, char, double, char *)" + test_demangling_exact "hp: __nw__FUi" "operator new(unsigned int)" + test_demangling_exact "hp: __ct__Q3_2T11a1bSFi" "T1::a::b::b(int) static" + test_demangling_exact "hp: __dt__Q3_2T11a1bSFi" "T1::a::b::~b(int) static" + test_demangling_exact "hp: put__Q3_2T11a1bSFi" "T1::a::b::put(int) static" + test_demangling_exact "hp: get__Q2_2T11aSFv" "T1::a::get(void) static" + test_demangling_exact "hp: put__2T1SFi" "T1::put(int) static" + test_demangling_exact "hp: put__Q5_2T11a1b1c1dSFi" "T1::a::b::c::d::put(int) static" + test_demangling_exact "hp: get__Q4_2T11a1b1cSFv" "T1::a::b::c::get(void) static" + test_demangling_exact "hp: put__Q2_2T11aSFi" "T1::a::put(int) static" + test_demangling_exact "hp: put__Q4_2T11a1b1cSFi" "T1::a::b::c::put(int) static" + test_demangling_exact "hp: get__Q3_2T11a1bSFv" "T1::a::b::get(void) static" + test_demangling_exact "hp: get__2T1SFv" "T1::get(void) static" + test_demangling_exact "hp: get__Q5_2T11a1b1c1dSFv" "T1::a::b::c::d::get(void) static" + + + test_demangling_exact "hp: bar__3fooFPv" "foo::bar(void *)" + test_demangling "hp: bar__3fooFPCv" \ "foo::bar\[(\]+(const void|void const) *\[*\]+\[)\]+" - gdb_test_exact "maint demangle bar__3fooCFPv" "foo::bar(void *) const" - gdb_test "maint dem bar__3fooCFPCv" \ + test_demangling_exact "hp: bar__3fooCFPv" "foo::bar(void *) const" + test_demangling "hp: bar__3fooCFPCv" \ "foo::bar\[(\]+(const void|void const) *\[*\]+\[)\]+ const" - gdb_test_exact "maint demangle __eq__3fooFR3foo" "foo::operator==(foo &)" - gdb_test "maint dem __eq__3fooFRC3foo" \ + test_demangling_exact "hp: __eq__3fooFR3foo" "foo::operator==(foo &)" + test_demangling "hp: __eq__3fooFRC3foo" \ "foo::operator==\[(\]+(const foo|foo const) &\[)\]+" - gdb_test_exact "maint demangle __eq__3fooCFR3foo" "foo::operator==(foo &) const" - gdb_test "maint dem __eq__3fooCFRC3foo" \ + test_demangling_exact "hp: __eq__3fooCFR3foo" "foo::operator==(foo &) const" + test_demangling "hp: __eq__3fooCFRC3foo" \ "foo::operator==\[(\]+(const foo|foo const) &\[)\]+ const" - gdb_test_exact "maint demangle bar__3fooFiT16FooBar" "foo::bar(int, int, FooBar)" + test_demangling_exact "hp: bar__3fooFiT16FooBar" "foo::bar(int, int, FooBar)" - gdb_test_exact "maint demangle bar__3fooFPiN51PdN37PcN211T1iN215" \ + test_demangling_exact "hp: bar__3fooFPiN51PdN37PcN211T1iN215" \ "foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)" # HP aCC specific tests. HP aCC demangling does not use __pt__ for # template specifications. There are other differences as well. - gdb_test_exact "maint demangle __dt__2T5XTPFiPPdPv_i__Fv" "T5<int (*)(int, double **, void *)>::~T5(void)" + test_demangling_exact "hp: __dt__2T5XTPFiPPdPv_i__Fv" "T5<int (*)(int, double **, void *)>::~T5(void)" - gdb_test_exact "maint demangle __ct__1cFi" "c::c(int)" + test_demangling_exact "hp: __ct__1cFi" "c::c(int)" - gdb_test_exact "maint demangle __dt__2T5XTi__Fv" "T5<int>::~T5(void)" + test_demangling_exact "hp: __dt__2T5XTi__Fv" "T5<int>::~T5(void)" - gdb_test_exact "maint demangle __dt__2T5XTc__Fv" "T5<char>::~T5(void)" + test_demangling_exact "hp: __dt__2T5XTc__Fv" "T5<char>::~T5(void)" - gdb_test_exact "maint demangle __ct__2T2Fi" "T2::T2(int)" - gdb_test_exact "maint demangle __dt__2T1Fv" "T1::~T1(void)" + test_demangling_exact "hp: __ct__2T2Fi" "T2::T2(int)" + test_demangling_exact "hp: __dt__2T1Fv" "T1::~T1(void)" - gdb_test_exact "maint demangle __dt__2T5XT1x__Fv" "T5<x>::~T5(void)" + test_demangling_exact "hp: __dt__2T5XT1x__Fv" "T5<x>::~T5(void)" - gdb_test_exact "maint demangle __dt__2T5XTPFcPv_i__Fv" "T5<int (*)(char, void *)>::~T5(void)" + test_demangling_exact "hp: __dt__2T5XTPFcPv_i__Fv" "T5<int (*)(char, void *)>::~T5(void)" - gdb_test_exact "maint demangle __ct__2T5XTPFiPPdPv_i__Fi" "T5<int (*)(int, double **, void *)>::T5(int)" + test_demangling_exact "hp: __ct__2T5XTPFiPPdPv_i__Fi" "T5<int (*)(int, double **, void *)>::T5(int)" - gdb_test_exact "maint demangle __dl__2T5XT1x__SFPv" "T5<x>::operator delete(void *) static" + test_demangling_exact "hp: __dl__2T5XT1x__SFPv" "T5<x>::operator delete(void *) static" - gdb_test_exact "maint demangle X__2T5XT1x" "T5<x>::X" + test_demangling_exact "hp: X__2T5XT1x" "T5<x>::X" - gdb_test_exact "maint demangle __ct__2T5XTi__Fi" "T5<int>::T5(int)" + test_demangling_exact "hp: __ct__2T5XTi__Fi" "T5<int>::T5(int)" - gdb_test_exact "maint demangle __ct__2T5XTc__Fi" "T5<char>::T5(int)" + test_demangling_exact "hp: __ct__2T5XTc__Fi" "T5<char>::T5(int)" - gdb_test_exact "maint demangle __dl__2T5XTPFcPv_i__SFPv" "T5<int (*)(char, void *)>::operator delete(void *) static" + test_demangling_exact "hp: __dl__2T5XTPFcPv_i__SFPv" "T5<int (*)(char, void *)>::operator delete(void *) static" - gdb_test_exact "maint demangle X__2T5XTPFcPv_i" "T5<int (*)(char, void *)>::X" + test_demangling_exact "hp: X__2T5XTPFcPv_i" "T5<int (*)(char, void *)>::X" - gdb_test_exact "maint demangle __ct__2T5XT1x__Fi" "T5<x>::T5(int)" + test_demangling_exact "hp: __ct__2T5XT1x__Fi" "T5<x>::T5(int)" - gdb_test_exact "maint demangle __dl__2T5XTPFiPPdPv_i__SFPv" "T5<int (*)(int, double **, void *)>::operator delete(void *) static" - gdb_test_exact "maint demangle X__2T5XTPFiPPdPv_i" "T5<int (*)(int, double **, void *)>::X" + test_demangling_exact "hp: __dl__2T5XTPFiPPdPv_i__SFPv" "T5<int (*)(int, double **, void *)>::operator delete(void *) static" + test_demangling_exact "hp: X__2T5XTPFiPPdPv_i" "T5<int (*)(int, double **, void *)>::X" - gdb_test_exact "maint demangle __dl__2T5XTi__SFPv" "T5<int>::operator delete(void *) static" + test_demangling_exact "hp: __dl__2T5XTi__SFPv" "T5<int>::operator delete(void *) static" - gdb_test_exact "maint demangle __dl__2T5XTc__SFPv" "T5<char>::operator delete(void *) static" + test_demangling_exact "hp: __dl__2T5XTc__SFPv" "T5<char>::operator delete(void *) static" - gdb_test_exact "maint demangle X__2T5XTc" "T5<char>::X" + test_demangling_exact "hp: X__2T5XTc" "T5<char>::X" - gdb_test_exact "maint demangle X__2T5XTi" "T5<int>::X" + test_demangling_exact "hp: X__2T5XTi" "T5<int>::X" - gdb_test_exact "maint demangle __ct__2T5XTPFcPv_i__Fi" "T5<int (*)(char, void *)>::T5(int)" + test_demangling_exact "hp: __ct__2T5XTPFcPv_i__Fi" "T5<int (*)(char, void *)>::T5(int)" - gdb_test_exact "maint demangle __dt__2T1XTc__Fv" "T1<char>::~T1(void)" + test_demangling_exact "hp: __dt__2T1XTc__Fv" "T1<char>::~T1(void)" - gdb_test_exact "maint demangle __dt__2T1XT1t__Fv" "T1<t>::~T1(void)" + test_demangling_exact "hp: __dt__2T1XT1t__Fv" "T1<t>::~T1(void)" - gdb_test_exact "maint demangle __dl__2T1XT1t__SFPv" "T1<t>::operator delete(void *) static" + test_demangling_exact "hp: __dl__2T1XT1t__SFPv" "T1<t>::operator delete(void *) static" - gdb_test_exact "maint demangle __ct__2T1XTc__Fi" "T1<char>::T1(int)" + test_demangling_exact "hp: __ct__2T1XTc__Fi" "T1<char>::T1(int)" - gdb_test_exact "maint demangle __ct__2T1XTc__Fv" "T1<char>::T1(void)" + test_demangling_exact "hp: __ct__2T1XTc__Fv" "T1<char>::T1(void)" - gdb_test_exact "maint demangle __ct__2T1XT1t__Fi" "T1<t>::T1(int)" + test_demangling_exact "hp: __ct__2T1XT1t__Fi" "T1<t>::T1(int)" - gdb_test_exact "maint demangle __ct__2T1XT1t__Fv" "T1<t>::T1(void)" + test_demangling_exact "hp: __ct__2T1XT1t__Fv" "T1<t>::T1(void)" - gdb_test_exact "maint demangle __dl__2T1XTc__SFPv" "T1<char>::operator delete(void *) static" + test_demangling_exact "hp: __dl__2T1XTc__SFPv" "T1<char>::operator delete(void *) static" - gdb_test_exact "maint demangle elem__6vectorXTd__Fi" "vector<double>::elem(int)" + test_demangling_exact "hp: elem__6vectorXTd__Fi" "vector<double>::elem(int)" - gdb_test_exact "maint demangle elem__6vectorXTi__Fi" "vector<int>::elem(int)" + test_demangling_exact "hp: elem__6vectorXTi__Fi" "vector<int>::elem(int)" - gdb_test_exact "maint demangle __ct__6vectorXTd__Fi" "vector<double>::vector(int)" + test_demangling_exact "hp: __ct__6vectorXTd__Fi" "vector<double>::vector(int)" - gdb_test_exact "maint demangle __ct__6vectorXTi__Fi" "vector<int>::vector(int)" + test_demangling_exact "hp: __ct__6vectorXTi__Fi" "vector<int>::vector(int)" - gdb_test_exact "maint demangle __ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2" \ + test_demangling_exact "hp: __ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2" \ "DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)" # Absolute integer constants in template args - gdb_test_exact "maint demangle elem__6vectorXTiUP34__Fi" "vector<int,34U>::elem(int)" - gdb_test_exact "maint demangle elem__6vectorXUP2701Td__Fi" "vector<2701U,double>::elem(int)" - gdb_test_exact "maint demangle elem__6vectorXTiSP334__Fi" "vector<int,334>::elem(int)" - gdb_test_exact "maint demangle elem__6vectorXTiSN67__Fi" "vector<int,-67>::elem(int)" - gdb_test_exact "maint demangle elem__6vectorXTiSM__SCFPPd" "vector<int,-2147483648>::elem(double **) static const" - gdb_test_exact "maint demangle elem__6vectorXTiSN67UP4000TRs__Fi" "vector<int,-67,4000U,short &>::elem(int)" - gdb_test_exact "maint demangle elem__6vectorXTiSN67TRdTFPv_i__Fi" "vector<int,-67,double &,int (void *)>::elem(int)" - gdb_test_exact "maint demangle X__6vectorXTiSN67TdTPvUP5TRs" "vector<int,-67,double,void *,5U,short &>::X" + test_demangling_exact "hp: elem__6vectorXTiUP34__Fi" "vector<int,34U>::elem(int)" + test_demangling_exact "hp: elem__6vectorXUP2701Td__Fi" "vector<2701U,double>::elem(int)" + test_demangling_exact "hp: elem__6vectorXTiSP334__Fi" "vector<int,334>::elem(int)" + test_demangling_exact "hp: elem__6vectorXTiSN67__Fi" "vector<int,-67>::elem(int)" + test_demangling_exact "hp: elem__6vectorXTiSM__SCFPPd" "vector<int,-2147483648>::elem(double **) static const" + test_demangling_exact "hp: elem__6vectorXTiSN67UP4000TRs__Fi" "vector<int,-67,4000U,short &>::elem(int)" + test_demangling_exact "hp: elem__6vectorXTiSN67TRdTFPv_i__Fi" "vector<int,-67,double &,int (void *)>::elem(int)" + test_demangling_exact "hp: X__6vectorXTiSN67TdTPvUP5TRs" "vector<int,-67,double,void *,5U,short &>::X" # Named constants in template args - gdb_test_exact "maint demangle elem__6vectorXTiA3foo__Fi" "vector<int,&foo>::elem(int)" - gdb_test_exact "maint demangle elem__6vectorXTiA3fooTPvA5Label__FiPPvT2" "vector<int,&foo,void *,&Label>::elem(int, void **, void **)" - gdb_test_exact "maint demangle elem__6vectorXTiSN42A3foo__Fi" "vector<int,-42,&foo>::elem(int)" + test_demangling_exact "hp: elem__6vectorXTiA3foo__Fi" "vector<int,&foo>::elem(int)" + test_demangling_exact "hp: elem__6vectorXTiA3fooTPvA5Label__FiPPvT2" "vector<int,&foo,void *,&Label>::elem(int, void **, void **)" + test_demangling_exact "hp: elem__6vectorXTiSN42A3foo__Fi" "vector<int,-42,&foo>::elem(int)" # Alternate entry points for functions - gdb_test_exact "maint demangle __ct__2T5XTPFcPv_i__Fi_2" "T5<int (*)(char, void *)>::T5(int)" - gdb_test_exact "maint demangle __ct__2T5XTPFcPv_i__Fi_19" "T5<int (*)(char, void *)>::T5(int)" - gdb_test_exact "maint demangle f__FicdPcPFci_v_34" "f(int, char, double, char *, void (*)(char, int))" + test_demangling_exact "hp: __ct__2T5XTPFcPv_i__Fi_2" "T5<int (*)(char, void *)>::T5(int)" + test_demangling_exact "hp: __ct__2T5XTPFcPv_i__Fi_19" "T5<int (*)(char, void *)>::T5(int)" + test_demangling_exact "hp: f__FicdPcPFci_v_34" "f(int, char, double, char *, void (*)(char, int))" # Template partial specializations # FIXME! The # characters don't go through expect, and backslashes don't seem to work. -# gdb_test_exact "maint demangle spec__13Spec<#1,#1.*>XTiTPi_FPi" "Spec<int,int *>::spec(int *)" -# gdb_test_exact "maint demangle spec__16Spec<#1,#1.&,#1>XTiTRiTi_FPi" "Spec<int,int &, int>::spec(int *)" +# test_demangling_exact "hp: spec__13Spec<#1,#1.*>XTiTPi_FPi" "Spec<int,int *>::spec(int *)" +# test_demangling_exact "hp: spec__16Spec<#1,#1.&,#1>XTiTRiTi_FPi" "Spec<int,int &, int>::spec(int *)" # Fake test -- replace # with % - gdb_test_exact "maint demangle spec__13Spec<%1,%1.*>XTiTPi_FPi" "Spec<int,int *>::spec(int *)" - gdb_test_exact "maint demangle spec__16Spec<%1,%1.&,%1>XTiTRiTi_FPi" "Spec<int,int &,int>::spec(int *)" + test_demangling_exact "hp: spec__13Spec<%1,%1.*>XTiTPi_FPi" "Spec<int,int *>::spec(int *)" + test_demangling_exact "hp: spec__16Spec<%1,%1.&,%1>XTiTRiTi_FPi" "Spec<int,int &,int>::spec(int *)" # Global template functions - gdb_test_exact "maint demangle add__XTc_FcT1" "add<char>(char, char)" - gdb_test_exact "maint demangle add__XTcSP9A5label_FcPPlT1" "add<char,9,&label>(char, long **, char)" - gdb_test_exact "maint demangle add__XTPfTFPd_f_FcT1" "add<float *,float (double *)>(char, char)" + test_demangling_exact "hp: add__XTc_FcT1" "add<char>(char, char)" + test_demangling_exact "hp: add__XTcSP9A5label_FcPPlT1" "add<char,9,&label>(char, long **, char)" + test_demangling_exact "hp: add__XTPfTFPd_f_FcT1" "add<float *,float (double *)>(char, char)" # Template for template arg - gdb_test_exact "maint demangle unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv" "basic_string<char,string_char_traits<char>,allocator>::unLink(void)" + test_demangling_exact "hp: unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv" "basic_string<char,string_char_traits<char>,allocator>::unLink(void)" + + test_demangling_exact "hp: _Utf390_1__1_9223372036854775807__9223372036854775" \ + "Can't demangle \"_Utf390_1__1_9223372036854775807__9223372036854775\"" +} + +proc catch_demangling_errors {command} { + if {[catch $command result]} { + puts "ERROR: demangle.exp: while running $command: $result" + } } + # Test support for different demangling styles. Note that this does # not depend upon running the test program and does not depend upon # gdb being able to lookup any C++ symbols. It simply calls the @@ -1507,11 +1547,14 @@ proc do_tests {} { gdb_expect -re "$gdb_prompt $" send_gdb "set width 0\n" gdb_expect -re "$gdb_prompt $" - - test_lucid_style_demangling - test_gnu_style_demangling - test_arm_style_demangling - test_hp_style_demangling + + # Using catch_demangling_errors this way ensures that, if one of + # the functions raises a Tcl error, then it'll get reported, and + # the rest of the functions will still run. + catch_demangling_errors test_lucid_style_demangling + catch_demangling_errors test_gnu_style_demangling + catch_demangling_errors test_arm_style_demangling + catch_demangling_errors test_hp_style_demangling } do_tests diff --git a/gdb/testsuite/gdb.c++/derivation.exp b/gdb/testsuite/gdb.c++/derivation.exp index ed3cc2c..80baf75 100644 --- a/gdb/testsuite/gdb.c++/derivation.exp +++ b/gdb/testsuite/gdb.c++/derivation.exp @@ -104,7 +104,8 @@ gdb_expect { send_gdb "ptype a_instance\n" gdb_expect { - -re "type = class A \{\r\n\[\t \]*public:\r\n\[\t \]*int a;\r\n\[\t \]*int aa;\[\r\n\t \]+A\\(void\\);\r\n\[\t \]*int afoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $" { pass "ptype a_instance" } + -re "type = class A \{\r\n\[\t \]*public:\r\n\[\t \]*int a;\r\n\[\t \]*int aa;\[\r\n\t ]+A & operator=\\(A const &\\);\[\r\n\t ]+A\\(A const &\\);\[\r\n\t ]+A\\(void\\);\r\n\[\t \]*int afoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $" { pass "ptype a_instance (with synth ops)" } + -re "type = class A \{\r\n\[\t \]*public:\r\n\[\t \]*int a;\r\n\[\t \]*int aa;\[\r\n\t \]+A\\(void\\);\r\n\[\t \]*int afoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $" { pass "ptype a_instance (no synth ops)" } -re ".*$gdb_prompt $" { fail "ptype a_instance" } timeout { fail "(timeout) ptype a_instance" } } @@ -125,7 +126,7 @@ gdb_expect { if {$gcc_compiled} then { send_gdb "ptype d_instance\n" gdb_expect { - -re "type = class D : private A, public B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int d;\r\n\[\t \]*int dd;\[\r\n\t \]+D\\(void\\);\r\n\[\t \]*int dfoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $" { pass "ptype d_instance" } + -re "type = class D : private A, public B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int d;\r\n\[\t \]*int dd;\[\r\n\t ]+D & operator=\\(D const &\\);\[\r\n\t ]+D\\(D const &\\);\[\r\n\t \]+D\\(void\\);\r\n\[\t \]*int dfoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $" { pass "ptype d_instance" } -re ".*$gdb_prompt $" { fail "ptype d_instance" } timeout { fail "(timeout) ptype d_instance" } } @@ -154,7 +155,7 @@ gdb_expect { if {$gcc_compiled} { send_gdb "ptype e_instance\n" gdb_expect { - -re "type = class E : public A, private B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int e;\r\n\[\t \]*int ee;\[\r\n\t \]+E\\(void\\);\r\n\[\t \]*int efoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $" { pass "ptype e_instance" } + -re "type = class E : public A, private B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int e;\r\n\[\t \]*int ee;\[\r\n\t ]+E & operator=\\(E const &\\);\[\r\n\t ]+E\\(E const &\\);\[\r\n\t \]+E\\(void\\);\r\n\[\t \]*int efoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $" { pass "ptype e_instance" } -re ".*$gdb_prompt $" { fail "ptype e_instance" } timeout { fail "(timeout) ptype e_instance" } } @@ -182,6 +183,7 @@ gdb_expect { send_gdb "ptype f_instance\n" gdb_expect { + -re "type = class F : private A, public B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int f;\r\n\[\t \]*int ff;\[\r\n\t ]+F & operator=\\(F const &\\);\[\r\n\t ]+F\\(F const &\\);\[\r\n\t \]+F\\(void\\);\r\n\[\t \]*int ffoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $" { pass "ptype f_instance" } -re "type = class F : private A, public B, private C \{\r\n\[\t \]*public:\r\n\[\t \]*int f;\r\n\[\t \]*int ff;\[\r\n\t \]+F\\(void\\);\r\n\[\t \]*int ffoo\\(void\\);\r\n\[\t \]*int foo\\(void\\);\r\n\}.*$gdb_prompt $" { pass "ptype f_instance" } -re ".*$gdb_prompt $" { fail "ptype f_instance" } timeout { fail "(timeout) ptype f_instance" } diff --git a/gdb/testsuite/gdb.c++/method.exp b/gdb/testsuite/gdb.c++/method.exp index a3939dc..edfa689 100644 --- a/gdb/testsuite/gdb.c++/method.exp +++ b/gdb/testsuite/gdb.c++/method.exp @@ -197,7 +197,7 @@ gdb_expect { send_gdb "print res\n" gdb_expect { - -re "\\$\[0-9\]* = \[0-9\]*\r\n$gdb_prompt $" { + -re "\\$\[0-9\]* = .\[0-9\]*\r\n$gdb_prompt $" { pass "print res in getFunky" } -re ".*$gdb_prompt $" { fail "print res in getfunky" } diff --git a/gdb/testsuite/gdb.c++/misc.cc b/gdb/testsuite/gdb.c++/misc.cc index ffeb739..4cf9318 100644 --- a/gdb/testsuite/gdb.c++/misc.cc +++ b/gdb/testsuite/gdb.c++/misc.cc @@ -498,6 +498,8 @@ main() /* Class with enumeration inside it */ ClassWithEnum obj_with_enum; + obj_with_enum.priv_enum = ClassWithEnum::red; + obj_with_enum.x = 0; obj_with_enum.priv_enum = ClassWithEnum::green; return foo.*pmi; diff --git a/gdb/testsuite/gdb.c++/overload.cc b/gdb/testsuite/gdb.c++/overload.cc index 40feb3b..58d07de 100644 --- a/gdb/testsuite/gdb.c++/overload.cc +++ b/gdb/testsuite/gdb.c++/overload.cc @@ -58,7 +58,7 @@ int main () float arg11 =100.0; double arg12 = 200.0; - char *str = "A"; + char *str = (char *) "A"; foo foo_instance1(111); foo foo_instance2(222, str); foo foo_instance3(foo_instance2); diff --git a/gdb/testsuite/gdb.c++/ovldbreak.exp b/gdb/testsuite/gdb.c++/ovldbreak.exp index c90b51d..219182b 100644 --- a/gdb/testsuite/gdb.c++/ovldbreak.exp +++ b/gdb/testsuite/gdb.c++/ovldbreak.exp @@ -670,11 +670,4 @@ gdb_test "info break" \ timeout { fail "(timeout) continue to bp overloaded : double" } } - send_gdb "cont\n" - gdb_expect { - -re "Continuing.\r\n\r\nProgram exited normally.\r\n$gdb_prompt $" { - pass "finish program" - } - -re "$gdb_prompt $" { fail "finish program" } - timeout { fail "(timeout) finish program" } - } + gdb_continue_to_end "finish program" diff --git a/gdb/testsuite/gdb.c++/ref-types.exp b/gdb/testsuite/gdb.c++/ref-types.exp index 7f25590..2a9d337 100644 --- a/gdb/testsuite/gdb.c++/ref-types.exp +++ b/gdb/testsuite/gdb.c++/ref-types.exp @@ -1,4 +1,5 @@ -# Copyright (C) 1998 Free Software Foundation, Inc. +# Tests for reference types with short type variables in GDB. +# Copyright (C) 1998, 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,12 +20,6 @@ # written by Elena Zannoni (ezannoni@cygnus.com) -# This file is part of the gdb testsuite -# -# tests for reference types -# with short type variables. -# - if $tracelevel then { strace $tracelevel } @@ -162,6 +157,7 @@ gdb_expect { send_gdb "ptype as\n" gdb_expect { -re "type = short \\\[4\\\].*$gdb_prompt $" { pass "ptype as" } + -re "type = short int \\\[4\\\].*$gdb_prompt $" { pass "ptype as" } -re ".*$gdb_prompt $" { fail "ptype as" } timeout { fail "(timeout) ptype as" } } @@ -197,7 +193,10 @@ send_gdb "print rs\n" gdb_expect { -re ".\[0-9\]* = \\(short &\\) @$hex: -1.*$gdb_prompt $" { pass "print value of rs" - } + } + -re ".\[0-9\]* = \\(short int &\\) @$hex: -1.*$gdb_prompt $" { + pass "print value of rs" + } -re ".*$gdb_prompt $" { fail "print value of rs" } timeout { fail "(timeout) print value of rs" } eof { fail "print rs ($GDB dumped core) (FIXME)" ; gdb_start_again ; } @@ -207,6 +206,7 @@ gdb_expect { send_gdb "ptype rs\n" gdb_expect { -re "type = short &.*$gdb_prompt $" { pass "ptype rs" } + -re "type = short int &.*$gdb_prompt $" { pass "ptype rs" } -re ".*$gdb_prompt $" { fail "ptype rs" } timeout { fail "(timeout) ptype rs" } } @@ -225,6 +225,7 @@ gdb_expect { send_gdb "ptype rps\n" gdb_expect { -re "type = short \\*&.*$gdb_prompt $" { pass "ptype rps" } + -re "type = short int \\*&.*$gdb_prompt $" { pass "ptype rps" } -re ".*$gdb_prompt $" { fail "ptype rps" } timeout { fail "(timeout) ptype rps" } } @@ -244,6 +245,7 @@ gdb_expect { send_gdb "ptype ras\n" gdb_expect { -re "type = short \\\(&\\\)\\\[4\\\].*$gdb_prompt $" { pass "ptype ras" } + -re "type = short int \\\(&\\\)\\\[4\\\].*$gdb_prompt $" { pass "ptype ras" } -re ".*$gdb_prompt $" { fail "ptype ras" } timeout { fail "(timeout) ptype ras" } } diff --git a/gdb/testsuite/gdb.c++/ref-types2.exp b/gdb/testsuite/gdb.c++/ref-types2.exp index 6754147..5557721 100644 --- a/gdb/testsuite/gdb.c++/ref-types2.exp +++ b/gdb/testsuite/gdb.c++/ref-types2.exp @@ -1,4 +1,5 @@ -# Copyright (C) 1998 Free Software Foundation, Inc. +# Tests for reference types with elementary type variables in GDB. +# Copyright (C) 1998, 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,12 +20,6 @@ # written by Elena Zannoni (ezannoni@cygnus.com) -# This file is part of the gdb testsuite -# -# tests for reference types -# with elementary type variables. -# - if $tracelevel then { strace $tracelevel } @@ -140,6 +135,7 @@ gdb_expect { send_gdb "ptype US\n" gdb_expect { -re "type = unsigned short.*$gdb_prompt $" { pass "ptype US" } + -re "type = short unsigned.*$gdb_prompt $" { pass "ptype US" } -re ".*$gdb_prompt $" { fail "ptype US" } timeout { fail "(timeout) ptype US" } } @@ -212,6 +208,7 @@ gdb_expect { send_gdb "ptype UL\n" gdb_expect { -re "type = unsigned long.*$gdb_prompt $" { pass "ptype UL" } + -re "type = long unsigned.*$gdb_prompt $" { pass "ptype UL" } -re ".*$gdb_prompt $" { fail "ptype UL" } timeout { fail "(timeout) ptype UL" } } @@ -284,6 +281,7 @@ gdb_expect { send_gdb "ptype rS\n" gdb_expect { -re "type = short &.*$gdb_prompt $" { pass "ptype rS" } + -re "type = short int &.*$gdb_prompt $" { pass "ptype rS" } -re ".*$gdb_prompt $" { fail "ptype rS" } timeout { fail "(timeout) ptype rS" } } @@ -293,6 +291,7 @@ gdb_expect { send_gdb "ptype rUS\n" gdb_expect { -re "type = unsigned short &.*$gdb_prompt $" { pass "ptype rUS" } + -re "type = short unsigned int &.*$gdb_prompt $" { pass "ptype rUS" } -re ".*$gdb_prompt $" { fail "ptype rUS" } timeout { fail "(timeout) ptype rUS" } } @@ -319,6 +318,7 @@ gdb_expect { send_gdb "ptype rL\n" gdb_expect { -re "type = long &.*$gdb_prompt $" { pass "ptype rL" } + -re "type = long int &.*$gdb_prompt $" { pass "ptype rL" } -re ".*$gdb_prompt $" { fail "ptype rL" } timeout { fail "(timeout) ptype rL" } } @@ -327,6 +327,7 @@ gdb_expect { send_gdb "ptype rUL\n" gdb_expect { -re "type = unsigned long &.*$gdb_prompt $" { pass "ptype rUL" } + -re "type = long unsigned int &.*$gdb_prompt $" { pass "ptype rUL" } -re ".*$gdb_prompt $" { fail "ptype rUL" } timeout { fail "(timeout) ptype rUL" } } @@ -372,7 +373,10 @@ send_gdb "print rS\n" gdb_expect { -re ".\[0-9\]* = \\(short &\\) @$hex: -14.*$gdb_prompt $" { pass "print value of rS" - } + } + -re ".\[0-9\]* = \\(short int &\\) @$hex: -14.*$gdb_prompt $" { + pass "print value of rS" + } -re ".*$gdb_prompt $" { fail "print value of rS" } timeout { fail "(timeout) print value of rS" } } @@ -382,7 +386,10 @@ send_gdb "print rUS\n" gdb_expect { -re ".\[0-9\]* = \\(unsigned short &\\) @$hex: 7.*$gdb_prompt $" { pass "print value of rUS" - } + } + -re ".\[0-9\]* = \\(short unsigned int &\\) @$hex: 7.*$gdb_prompt $" { + pass "print value of rUS" + } -re ".*$gdb_prompt $" { fail "print value of rUS" } timeout { fail "(timeout) print value of rUS" } } @@ -412,7 +419,10 @@ send_gdb "print rL\n" gdb_expect { -re ".\[0-9\]* = \\(long &\\) @$hex: -234.*$gdb_prompt $" { pass "print value of rL" - } + } + -re ".\[0-9\]* = \\(long int &\\) @$hex: -234.*$gdb_prompt $" { + pass "print value of rL" + } -re ".*$gdb_prompt $" { fail "print value of rL" } timeout { fail "(timeout) print value of rL" } } @@ -423,7 +433,10 @@ send_gdb "print rUL\n" gdb_expect { -re ".\[0-9\]* = \\(unsigned long &\\) @$hex: 234.*$gdb_prompt $" { pass "print value of rUL" - } + } + -re ".\[0-9\]* = \\(long unsigned int &\\) @$hex: 234.*$gdb_prompt $" { + pass "print value of rUL" + } -re ".*$gdb_prompt $" { fail "print value of rUL" } timeout { fail "(timeout) print value of rUL" } } diff --git a/gdb/testsuite/gdb.chill/tests1.ch b/gdb/testsuite/gdb.chill/tests1.ch index b545d07..b6e660f 100644 --- a/gdb/testsuite/gdb.chill/tests1.ch +++ b/gdb/testsuite/gdb.chill/tests1.ch @@ -12,7 +12,7 @@ -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software --- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -- Please email any bugs, comments, and/or additions to this file to: -- bug-gdb@prep.ai.mit.edu diff --git a/gdb/testsuite/gdb.chill/tests2.ch b/gdb/testsuite/gdb.chill/tests2.ch index 1596f3b..6d45799 100644 --- a/gdb/testsuite/gdb.chill/tests2.ch +++ b/gdb/testsuite/gdb.chill/tests2.ch @@ -12,7 +12,7 @@ -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software --- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -- Please email any bugs, comments, and/or additions to this file to: -- bug-gdb@prep.ai.mit.edu diff --git a/gdb/testsuite/gdb.chill/tests2.exp b/gdb/testsuite/gdb.chill/tests2.exp index 46c4821..315d767 100644 --- a/gdb/testsuite/gdb.chill/tests2.exp +++ b/gdb/testsuite/gdb.chill/tests2.exp @@ -12,7 +12,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Please email any bugs, comments, and/or additions to this file to: # bug-gdb@prep.ai.mit.edu diff --git a/gdb/testsuite/gdb.hp/ambiguous.exp b/gdb/testsuite/gdb.hp/ambiguous.exp index 5b87af3..0ee3ecb 100644 --- a/gdb/testsuite/gdb.hp/ambiguous.exp +++ b/gdb/testsuite/gdb.hp/ambiguous.exp @@ -35,6 +35,8 @@ if $tracelevel then { set prms_id 0 set bug_id 0 +if { [skip_hp_tests] } then { continue } + set testfile "ambiguous" set srcfile ${testfile}.cc set binfile ${objdir}/${subdir}/${testfile} @@ -42,9 +44,8 @@ set binfile ${objdir}/${subdir}/${testfile} if [get_compiler_info ${binfile} "c++"] { return -1; } - - -if {[skip_hp_tests $gcc_compiled]} then { continue } + +if { $gcc_compiled } then { continue } if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } { gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." diff --git a/gdb/testsuite/gdb.hp/attach.exp b/gdb/testsuite/gdb.hp/attach.exp index 372acd0..b76f04c 100644 --- a/gdb/testsuite/gdb.hp/attach.exp +++ b/gdb/testsuite/gdb.hp/attach.exp @@ -34,11 +34,7 @@ if $tracelevel then { set prms_id 0 set bug_id 0 - -# are we on a target board -if ![isnative] then { - return -} +if { [skip_hp_tests] } then { continue } if { ![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"] } { #setup_xfail "*-*-*" diff --git a/gdb/testsuite/gdb.hp/attach2.exp b/gdb/testsuite/gdb.hp/attach2.exp index e298ee9..84b0e4a 100644 --- a/gdb/testsuite/gdb.hp/attach2.exp +++ b/gdb/testsuite/gdb.hp/attach2.exp @@ -29,6 +29,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + # Thread stuff is _slow_; prepare for long waits. # # Further, this test has some "null" lines designed diff --git a/gdb/testsuite/gdb.hp/classes-hp.exp b/gdb/testsuite/gdb.hp/classes-hp.exp index cb22c96..f67a2af 100644 --- a/gdb/testsuite/gdb.hp/classes-hp.exp +++ b/gdb/testsuite/gdb.hp/classes-hp.exp @@ -25,6 +25,7 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } # Check to see if we have an executable to test. If not, then either we # haven't tried to compile one, or the compilation failed for some reason. @@ -37,9 +38,8 @@ set binfile ${objdir}/${subdir}/${testfile} if [get_compiler_info ${binfile} "c++"] { return -1; } - - -if {[skip_hp_tests $gcc_compiled]} then { continue } + +if { $gcc_compiled } then { continue } if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } { gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." diff --git a/gdb/testsuite/gdb.hp/ctti.exp b/gdb/testsuite/gdb.hp/ctti.exp index e53210d..7f1fac9 100644 --- a/gdb/testsuite/gdb.hp/ctti.exp +++ b/gdb/testsuite/gdb.hp/ctti.exp @@ -29,6 +29,7 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } # Check to see if we have an executable to test. If not, then either we # haven't tried to compile one, or the compilation failed for some reason. @@ -44,9 +45,8 @@ set binfile ${objdir}/${subdir}/${testfile} if [get_compiler_info ${binfile} "c++"] { return -1; } - - -if {[skip_hp_tests $gcc_compiled]} then { continue } + +if { $gcc_compiled } then { continue } #if { [gdb_compile "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile1} ${srcdir}/${subdir}/${srcfile2} ${srcdir}/${subdir}/${srcfile3}" "${binfile}" executable {debug c++}] != "" } { # gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." diff --git a/gdb/testsuite/gdb.hp/dbx.exp b/gdb/testsuite/gdb.hp/dbx.exp index 66f24e9..340c609 100644 --- a/gdb/testsuite/gdb.hp/dbx.exp +++ b/gdb/testsuite/gdb.hp/dbx.exp @@ -22,6 +22,7 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } set testfile1 "average" set testfile2 "sum" @@ -47,7 +48,7 @@ if { [gdb_compile "${binfile1}.o ${binfile2}.o" ${binfile} executable {debug}] if [get_compiler_info ${binfile}] { return -1; } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } proc dbx_reinitialize_dir { subdir } { global gdb_prompt diff --git a/gdb/testsuite/gdb.hp/exception.exp b/gdb/testsuite/gdb.hp/exception.exp index 4cafbdc..64ff488 100644 --- a/gdb/testsuite/gdb.hp/exception.exp +++ b/gdb/testsuite/gdb.hp/exception.exp @@ -50,6 +50,7 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } # # test running programs @@ -67,7 +68,7 @@ if [get_compiler_info ${binfile} "c++"] { } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } set cmdline "$CXX ${srcdir}/${subdir}/${srcfile} +A -Wl,-a,archive -g -o ${binfile}" diff --git a/gdb/testsuite/gdb.hp/foll-exec.exp b/gdb/testsuite/gdb.hp/foll-exec.exp index f7d6089..59a4ffc 100644 --- a/gdb/testsuite/gdb.hp/foll-exec.exp +++ b/gdb/testsuite/gdb.hp/foll-exec.exp @@ -24,10 +24,7 @@ if $tracelevel then { set prms_id 0 set bug_id 0 -# are we on a target board -if ![isnative] then { - return -} +if { [skip_hp_tests] } then { continue } if {![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"]} { #setup_xfail "*-*.*" diff --git a/gdb/testsuite/gdb.hp/foll-fork.exp b/gdb/testsuite/gdb.hp/foll-fork.exp index 7231764..fdfc6ed 100644 --- a/gdb/testsuite/gdb.hp/foll-fork.exp +++ b/gdb/testsuite/gdb.hp/foll-fork.exp @@ -24,10 +24,7 @@ if $tracelevel then { set prms_id 0 set bug_id 0 -# are we on a target board -if ![isnative] then { - return -} +if { [skip_hp_tests] } then { continue } if {![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"]} { #setup_xfail "*-*.*" diff --git a/gdb/testsuite/gdb.hp/foll-vfork.exp b/gdb/testsuite/gdb.hp/foll-vfork.exp index 26c6981..fc5ee4c 100644 --- a/gdb/testsuite/gdb.hp/foll-vfork.exp +++ b/gdb/testsuite/gdb.hp/foll-vfork.exp @@ -24,10 +24,7 @@ if $tracelevel then { set prms_id 0 set bug_id 0 -# are we on a target board -if ![isnative] then { - return -} +if { [skip_hp_tests] } then { continue } if {![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"]} { #setup_xfail "*-*.*" diff --git a/gdb/testsuite/gdb.hp/hwwatchbus.exp b/gdb/testsuite/gdb.hp/hwwatchbus.exp index d4899a9..f648e36 100644 --- a/gdb/testsuite/gdb.hp/hwwatchbus.exp +++ b/gdb/testsuite/gdb.hp/hwwatchbus.exp @@ -24,10 +24,7 @@ if $tracelevel then { set prms_id 0 set bug_id 0 -# are we on a target board -if ![isnative] then { - return -} +if { [skip_hp_tests] } then { continue } if { ![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"] } { verbose "HPUX h/w watch test ignored for non-hppa or pre-HP/UX-10.30 targets." diff --git a/gdb/testsuite/gdb.hp/inherit-hp.exp b/gdb/testsuite/gdb.hp/inherit-hp.exp index 645358e..efa4d70 100644 --- a/gdb/testsuite/gdb.hp/inherit-hp.exp +++ b/gdb/testsuite/gdb.hp/inherit-hp.exp @@ -25,6 +25,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + # Check to see if we have an executable to test. If not, then either we # haven't tried to compile one, or the compilation failed for some reason. # In either case, just notify the user and skip the tests in this file. @@ -39,7 +41,7 @@ if [get_compiler_info ${binfile} "c++"] { } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } { diff --git a/gdb/testsuite/gdb.hp/more-steps.exp b/gdb/testsuite/gdb.hp/more-steps.exp index 320a0d6..9972e2d 100644 --- a/gdb/testsuite/gdb.hp/more-steps.exp +++ b/gdb/testsuite/gdb.hp/more-steps.exp @@ -26,6 +26,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + #if { ![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"] } { # verbose "HPUX thread test ignored for non-hppa or pre-HP/UX-10.30 targets." # return 0 diff --git a/gdb/testsuite/gdb.hp/namespace.exp b/gdb/testsuite/gdb.hp/namespace.exp index 1708db8..1e52237 100644 --- a/gdb/testsuite/gdb.hp/namespace.exp +++ b/gdb/testsuite/gdb.hp/namespace.exp @@ -31,14 +31,11 @@ if $tracelevel then { strace $tracelevel } - -# -# test running programs -# - set prms_id 0 set bug_id 0 +if { [skip_hp_tests] } then { continue } + set testfile "namespace" set srcfile ${testfile}.cc set binfile ${objdir}/${subdir}/${testfile} @@ -46,9 +43,8 @@ set binfile ${objdir}/${subdir}/${testfile} if [get_compiler_info ${binfile}] { return -1; } - - -if {[skip_hp_tests $gcc_compiled]} then { continue } + +if { $gcc_compiled } then { continue } if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } { diff --git a/gdb/testsuite/gdb.hp/optimize.exp b/gdb/testsuite/gdb.hp/optimize.exp index 34606eb..62fe373 100644 --- a/gdb/testsuite/gdb.hp/optimize.exp +++ b/gdb/testsuite/gdb.hp/optimize.exp @@ -29,6 +29,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + set testfile optimize set srcfile ${testfile}.c set binfile ${objdir}/${subdir}/${testfile} @@ -38,7 +40,7 @@ if [get_compiler_info ${binfile}] { } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } # Vanilla -O, which is the same as +O2 diff --git a/gdb/testsuite/gdb.hp/pxdb.exp b/gdb/testsuite/gdb.hp/pxdb.exp index c8b3ace..ef34557 100644 --- a/gdb/testsuite/gdb.hp/pxdb.exp +++ b/gdb/testsuite/gdb.hp/pxdb.exp @@ -31,6 +31,8 @@ if $tracelevel then { set prms_id 0 set bug_id 0 +if { [skip_hp_tests] } then { continue } + set testfile pxdb set srcfile ${testfile}.c set objfile ${objdir}/${subdir}/${testfile}.o @@ -39,9 +41,8 @@ set binfile ${objdir}/${subdir}/${testfile} if [get_compiler_info ${binfile} "c++"] { return -1; } - - -if {[skip_hp_tests $gcc_compiled]} then { continue } + +if { $gcc_compiled } then { continue } # To build a non-pxdb-ed file, use # diff --git a/gdb/testsuite/gdb.hp/reg-test.exp b/gdb/testsuite/gdb.hp/reg-test.exp index 4bdc306..d8b0f16 100644 --- a/gdb/testsuite/gdb.hp/reg-test.exp +++ b/gdb/testsuite/gdb.hp/reg-test.exp @@ -26,12 +26,9 @@ if $tracelevel then { strace $tracelevel } -if ![istarget "hppa*-*-*"] { - verbose "Wide register test ignored for non-hppa targets." - return -} +if { [skip_hp_tests] } then { continue } -set testfile "reg_test" +set testfile "reg-test" set srcfile ${testfile}.s set binfile ${objdir}/${subdir}/${testfile} diff --git a/gdb/testsuite/gdb.hp/sized-enum.exp b/gdb/testsuite/gdb.hp/sized-enum.exp index 191050a..5588559 100644 --- a/gdb/testsuite/gdb.hp/sized-enum.exp +++ b/gdb/testsuite/gdb.hp/sized-enum.exp @@ -36,6 +36,8 @@ if $tracelevel then { set prms_id 0 set bug_id 0 +if { [skip_hp_tests] } then { continue } + set testfile "sized-enum" set srcfile ${testfile}.c set binfile ${objdir}/${subdir}/${testfile} @@ -44,7 +46,7 @@ if [get_compiler_info ${binfile}] { return -1 } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." diff --git a/gdb/testsuite/gdb.hp/so-thresh.exp b/gdb/testsuite/gdb.hp/so-thresh.exp index 1977e92..1780416 100644 --- a/gdb/testsuite/gdb.hp/so-thresh.exp +++ b/gdb/testsuite/gdb.hp/so-thresh.exp @@ -24,10 +24,7 @@ if $tracelevel then { set prms_id 0 set bug_id 0 -# are we on a target board -if ![isnative] then { - return -} +if { [skip_hp_tests] } then { continue } set testfile "so-thresh" set srcfile ${testfile}.c diff --git a/gdb/testsuite/gdb.hp/start-stop.exp b/gdb/testsuite/gdb.hp/start-stop.exp index 4f70f51..cb64aa6 100644 --- a/gdb/testsuite/gdb.hp/start-stop.exp +++ b/gdb/testsuite/gdb.hp/start-stop.exp @@ -54,6 +54,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + if { ![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"] } { verbose "HPUX thread test ignored for non-hppa or pre-HP/UX-10.30 targets." return 0 diff --git a/gdb/testsuite/gdb.hp/templ-hp.exp b/gdb/testsuite/gdb.hp/templ-hp.exp index 64ca53d..5cdf0a1 100644 --- a/gdb/testsuite/gdb.hp/templ-hp.exp +++ b/gdb/testsuite/gdb.hp/templ-hp.exp @@ -33,6 +33,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + set testfile "templ-hp" set srcfile ${testfile}.cc set binfile ${objdir}/${subdir}/${testfile} @@ -46,7 +48,7 @@ if [get_compiler_info ${binfile} "c++"] { return -1; } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } { diff --git a/gdb/testsuite/gdb.hp/thr-lib.exp b/gdb/testsuite/gdb.hp/thr-lib.exp index 53bf466..e40b469 100644 --- a/gdb/testsuite/gdb.hp/thr-lib.exp +++ b/gdb/testsuite/gdb.hp/thr-lib.exp @@ -50,6 +50,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + if { ![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"] } { verbose "HPUX thread test ignored for non-hppa or pre-HP/UX-10.30 targets." return 0 diff --git a/gdb/testsuite/gdb.hp/thr-stg.exp b/gdb/testsuite/gdb.hp/thr-stg.exp index 19d69ee..7fc7a93 100644 --- a/gdb/testsuite/gdb.hp/thr-stg.exp +++ b/gdb/testsuite/gdb.hp/thr-stg.exp @@ -50,6 +50,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + if { ![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"] } { verbose "HPUX thread test ignored for non-hppa or pre-HP/UX-10.30 targets." return 0 diff --git a/gdb/testsuite/gdb.hp/virtfun-hp.exp b/gdb/testsuite/gdb.hp/virtfun-hp.exp index f5b3637..2b3ee59 100644 --- a/gdb/testsuite/gdb.hp/virtfun-hp.exp +++ b/gdb/testsuite/gdb.hp/virtfun-hp.exp @@ -25,6 +25,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + set testfile "virtfun-hp" set srcfile ${testfile}.cc set binfile ${objdir}/${subdir}/${testfile} @@ -32,9 +34,8 @@ set binfile ${objdir}/${subdir}/${testfile} if [get_compiler_info ${binfile} "c++"] { return -1; } - - -if {[skip_hp_tests $gcc_compiled]} then { continue } + +if { $gcc_compiled } then { continue } if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } { gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." diff --git a/gdb/testsuite/gdb.hp/watch-cmd.exp b/gdb/testsuite/gdb.hp/watch-cmd.exp index a7e3b5c..236af71 100644 --- a/gdb/testsuite/gdb.hp/watch-cmd.exp +++ b/gdb/testsuite/gdb.hp/watch-cmd.exp @@ -27,6 +27,8 @@ if $tracelevel then { set prms_id 0 set bug_id 0 +if { [skip_hp_tests] } then { continue } + set testfile "run-hp" set srcfile ${testfile}.c set binfile ${objdir}/${subdir}/${testfile} @@ -35,11 +37,6 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb } -# are we on a target board -if ![isnative] then { - return -} - if {![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"]} { #setup_xfail "*-*.*" return 0 @@ -48,7 +45,7 @@ if {![istarget "hppa*-*-hpux10.30"] && ![istarget "hppa*-*-hpux11.*"]} { if [get_compiler_info ${binfile}] { return -1; } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } gdb_exit diff --git a/gdb/testsuite/gdb.hp/watch-hp.exp b/gdb/testsuite/gdb.hp/watch-hp.exp index a1c3fc8..068c1b7 100644 --- a/gdb/testsuite/gdb.hp/watch-hp.exp +++ b/gdb/testsuite/gdb.hp/watch-hp.exp @@ -23,6 +23,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + set prms_id 0 set bug_id 0 @@ -36,7 +38,7 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb if [get_compiler_info ${binfile}] { return -1; } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } # Prepare for watchpoint tests by setting up two breakpoints and one # watchpoint. diff --git a/gdb/testsuite/gdb.hp/xdb1.exp b/gdb/testsuite/gdb.hp/xdb1.exp index 88ab2fc..f371852 100644 --- a/gdb/testsuite/gdb.hp/xdb1.exp +++ b/gdb/testsuite/gdb.hp/xdb1.exp @@ -23,6 +23,7 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } global usestubs @@ -42,7 +43,7 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb if [get_compiler_info ${binfile}] { return -1; } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } global GDBFLAGS set saved_gdbflags $GDBFLAGS diff --git a/gdb/testsuite/gdb.hp/xdb2.exp b/gdb/testsuite/gdb.hp/xdb2.exp index 4cc7b34..9bcdf58 100644 --- a/gdb/testsuite/gdb.hp/xdb2.exp +++ b/gdb/testsuite/gdb.hp/xdb2.exp @@ -23,6 +23,8 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } + global message # @@ -49,12 +51,11 @@ if { [gdb_compile "${binfile}0.o ${binfile}1.o" ${binfile} executable {debug}] return -1 } - if [get_compiler_info ${binfile}] { return -1; } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } global GDBFLAGS set saved_gdbflags $GDBFLAGS diff --git a/gdb/testsuite/gdb.hp/xdb3.exp b/gdb/testsuite/gdb.hp/xdb3.exp index cf569e9..36c3ec9 100644 --- a/gdb/testsuite/gdb.hp/xdb3.exp +++ b/gdb/testsuite/gdb.hp/xdb3.exp @@ -22,6 +22,7 @@ if $tracelevel then { strace $tracelevel } +if { [skip_hp_tests] } then { continue } set testfile1 "average" set testfile2 "sum" @@ -45,7 +46,7 @@ if { [gdb_compile "${binfile1}.o ${binfile2}.o" ${binfile} executable {debug}] if [get_compiler_info ${binfile}] { return -1; } -if {[skip_hp_tests $gcc_compiled]} then { continue } +if { $gcc_compiled } then { continue } proc xdb_reinitialize_dir { subdir } { diff --git a/gdb/testsuite/gdb.stabs/weird.exp b/gdb/testsuite/gdb.stabs/weird.exp index 86ac7a6..51573cc 100644 --- a/gdb/testsuite/gdb.stabs/weird.exp +++ b/gdb/testsuite/gdb.stabs/weird.exp @@ -277,6 +277,12 @@ if { [lindex $exec_output 0] != 0 } { return -1 } +# HP's assembler has no idea of what to do with .stab directives; detect the +# use of HP compilers and escape from here. (No doubt a better heuristic +# could be devised.) + +if { [ info exists CC ] && [ string first "/opt/ansic/bin/cc" "$CC" ] >= 0 } then { continue } + if { [gdb_compile "${srcfile}" "${binfile}" object ""] != "" } { gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." } diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index c61abb6..0e9bd29 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1992, 1994, 1995, 1997 Free Software Foundation, Inc. +# Copyright (C) 1992, 1994, 1995, 1997, 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -313,6 +313,7 @@ proc runto_main { } { return 1 } + # gdb_test COMMAND PATTERN MESSAGE -- send a command to gdb; test the result. # # COMMAND is the command to execute, send to GDB with send_gdb. If @@ -834,13 +835,11 @@ proc skip_chill_tests {} { return $skip_chill } -# skip all the tests in the file if you are not on an hppa running hpux target. -# and you compiled with gcc -proc skip_hp_tests {gcc_used} { - # if ![info exists do_hp_tests] { - # return 1; - # } - eval set skip_hp [expr ![isnative] || ![istarget "hppa*-*-hpux*"] || $gcc_used!=0 ] +# Skip all the tests in the file if you are not on an hppa running +# hpux target. + +proc skip_hp_tests {} { + eval set skip_hp [ expr ![isnative] || ![istarget "hppa*-*-hpux*"] ] verbose "Skip hp tests is $skip_hp" return $skip_hp } @@ -1160,6 +1159,7 @@ proc gdb_finish { } { } global debug_format +set debug_format "unknown" # Run the gdb command "info source" and extract the debugging format # information from the output and save it in debug_format. @@ -1331,4 +1331,51 @@ proc gdb_get_line_number {text {file /omitted/}} { return $result; } +# gdb_continue_to_end: +# The case where the target uses stubs has to be handled specially. If a +# stub is used, we set a breakpoint at exit because we cannot rely on +# exit() behavior of a remote target. +# +# mssg is the error message that gets printed. + +proc gdb_continue_to_end {mssg} { + if [target_info exists use_gdb_stub] { + if {![gdb_breakpoint "exit"]} { + return 0 + } + gdb_test "continue" "Continuing..*Breakpoint .*exit.*" \ + "continue until exit at $mssg" + } else { + # Continue until we exit. Should not stop again. + # Don't bother to check the output of the program, that may be + # extremely tough for some remote systems. + gdb_test "continue"\ + "Continuing.\[\r\n0-9\]+Program exited normally\\..*"\ + "continue until exit at $mssg" + } +} + +proc rerun_to_main {} { + global gdb_prompt + + if [target_info exists use_gdb_stub] { + gdb_run_cmd + gdb_expect { + -re ".*Breakpoint .*main .*$gdb_prompt $"\ + {pass "rerun to main" ; return 0} + -re "$gdb_prompt $"\ + {fail "rerun to main" ; return 0} + timeout {fail "(timeout) rerun to main" ; return 0} + } + } else { + send_gdb "run\n" + gdb_expect { + -re "Starting program.*$gdb_prompt $"\ + {pass "rerun to main" ; return 0} + -re "$gdb_prompt $"\ + {fail "rerun to main" ; return 0} + timeout {fail "(timeout) rerun to main" ; return 0} + } + } +} diff --git a/gdb/thread.c b/gdb/thread.c index 6a7ab09..d11a2e9 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -104,7 +104,9 @@ static void prune_threads PARAMS ((void)); static struct target_thread_vector *target_thread_functions; -int +static int target_find_new_threads PARAMS ((void)); + +static int target_find_new_threads () { int retval = 0; @@ -698,7 +700,6 @@ void _initialize_thread () { static struct cmd_list_element *thread_apply_list = NULL; - extern struct cmd_list_element *cmdlist; add_info ("threads", info_threads_command, "IDs of currently known threads."); @@ -32,7 +32,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "language.h" #include "terminal.h" /* For job_control. */ #include "annotate.h" -#include <setjmp.h> #include "top.h" /* readline include files */ @@ -245,21 +244,15 @@ struct cmd_list_element *unsethistlist; /* Chain containing all defined maintenance subcommands. */ -#if MAINTENANCE_CMDS struct cmd_list_element *maintenancelist; -#endif /* Chain containing all defined "maintenance info" subcommands. */ -#if MAINTENANCE_CMDS struct cmd_list_element *maintenanceinfolist; -#endif /* Chain containing all defined "maintenance print" subcommands. */ -#if MAINTENANCE_CMDS struct cmd_list_element *maintenanceprintlist; -#endif struct cmd_list_element *setprintlist; @@ -367,9 +360,12 @@ static void stop_sig PARAMS ((int)); command file. */ void (*init_ui_hook) PARAMS ((char *argv0)); -#ifdef __CYGWIN32__ -void (*ui_loop_hook) PARAMS ((int)); -#endif + +/* This hook is called from within gdb's many mini-event loops which could + steal control from a real user interface's event loop. It returns + non-zero if the user is requesting a detach, zero otherwise. */ + +int (*ui_loop_hook) PARAMS ((int)); /* Called instead of command_loop at top level. Can be invoked via return_to_top_level. */ @@ -2471,6 +2467,7 @@ int from_tty; enum command_control_type ret; enum misc_command_type val; + control_level = 0; if (readline_begin_hook) { /* Note - intentional to merge messages with no newline */ @@ -2769,7 +2766,6 @@ define_command (comname, from_tty) for (tem = comname; *tem; tem++) if (isupper(*tem)) *tem = tolower(*tem); - control_level = 0; sprintf (tmpbuf, "Type commands for definition of \"%s\".", comname); cmds = read_command_lines (tmpbuf, from_tty); @@ -3151,10 +3147,12 @@ source_command (args, from_tty) stream = fopen (file, FOPEN_RT); if (!stream) - if (from_tty) - perror_with_name (file); - else - return; + { + if (from_tty) + perror_with_name (file); + else + return; + } make_cleanup ((make_cleanup_func) fclose, stream); @@ -3405,11 +3403,9 @@ init_cmd_lists () sethistlist = NULL; showhistlist = NULL; unsethistlist = NULL; -#if MAINTENANCE_CMDS maintenancelist = NULL; maintenanceinfolist = NULL; maintenanceprintlist = NULL; -#endif setprintlist = NULL; showprintlist = NULL; setchecklist = NULL; @@ -18,6 +18,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <setjmp.h> + /* From top.c. */ extern char *line; extern int linesize; diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 9f03617..65ce851 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -641,7 +641,8 @@ map_args_over_tracepoints (args, from_tty, opcode) while (*args) { QUIT; /* give user option to bail out with ^C */ - if (t = get_tracepoint_by_number (&args)) + t = get_tracepoint_by_number (&args); + if (t) tracepoint_operation (t, from_tty, opcode); while (*args == ' ' || *args == '\t') args++; @@ -783,7 +784,8 @@ trace_actions_command (args, from_tty) char tmpbuf[128]; char *end_msg = "End with a line saying just \"end\"."; - if (t = get_tracepoint_by_number (&args)) + t = get_tracepoint_by_number (&args); + if (t) { sprintf (tmpbuf, "Enter actions for tracepoint %d, one per line.", t->number); @@ -865,28 +867,32 @@ read_actions (t) } if (linetype == STEPPING) /* begin "while-stepping" */ - if (prompt == prompt2) - { - warning ("Already processing 'while-stepping'"); - continue; - } - else - prompt = prompt2; /* change prompt for stepping actions */ + { + if (prompt == prompt2) + { + warning ("Already processing 'while-stepping'"); + continue; + } + else + prompt = prompt2; /* change prompt for stepping actions */ + } else if (linetype == END) - if (prompt == prompt2) - { - prompt = prompt1; /* end of single-stepping actions */ - } - else - { /* end of actions */ - if (t->actions->next == NULL) - { - /* an "end" all by itself with no other actions means - this tracepoint has no actions. Discard empty list. */ - free_actions (t); - } - break; - } + { + if (prompt == prompt2) + { + prompt = prompt1; /* end of single-stepping actions */ + } + else + { /* end of actions */ + if (t->actions->next == NULL) + { + /* an "end" all by itself with no other actions means + this tracepoint has no actions. Discard empty list. */ + free_actions (t); + } + break; + } + } } #ifdef STOP_SIGNAL if (job_control) @@ -954,19 +960,21 @@ validate_actionline (line, t) &exp); if (exp->elts[0].opcode == OP_VAR_VALUE) - if (SYMBOL_CLASS (exp->elts[2].symbol) == LOC_CONST) - { - warning ("%s is constant (value %d): will not be collected.", - SYMBOL_NAME (exp->elts[2].symbol), - SYMBOL_VALUE (exp->elts[2].symbol)); - return BADLINE; - } - else if (SYMBOL_CLASS (exp->elts[2].symbol) == LOC_OPTIMIZED_OUT) - { - warning ("%s is optimized away and cannot be collected.", - SYMBOL_NAME (exp->elts[2].symbol)); - return BADLINE; - } + { + if (SYMBOL_CLASS (exp->elts[2].symbol) == LOC_CONST) + { + warning ("%s is constant (value %d): will not be collected.", + SYMBOL_NAME (exp->elts[2].symbol), + SYMBOL_VALUE (exp->elts[2].symbol)); + return BADLINE; + } + else if (SYMBOL_CLASS (exp->elts[2].symbol) == LOC_OPTIMIZED_OUT) + { + warning ("%s is optimized away and cannot be collected.", + SYMBOL_NAME (exp->elts[2].symbol)); + return BADLINE; + } + } /* we have something to collect, make sure that the expr to bytecode translator can handle it and that it's not too long */ diff --git a/gdb/typeprint.c b/gdb/typeprint.c index 1a4877b..3ace7be 100644 --- a/gdb/typeprint.c +++ b/gdb/typeprint.c @@ -262,8 +262,6 @@ print_type_scalar (type, val, stream) gdb_flush (stream); } -#if MAINTENANCE_CMDS - /* Dump details of a type specified either directly or indirectly. Uses the same sort of type lookup mechanism as ptype_command() and whatis_command(). */ @@ -302,8 +300,6 @@ maintenance_print_type (typename, from_tty) } } -#endif /* MAINTENANCE_CMDS */ - void _initialize_typeprint () diff --git a/gdb/umax-xdep.c b/gdb/umax-xdep.c index d54519e..ad2d3e4 100644 --- a/gdb/umax-xdep.c +++ b/gdb/umax-xdep.c @@ -44,7 +44,6 @@ core_file_command (filename, from_tty) int from_tty; { int val; - extern char registers[]; /* Discard all vestiges of any previous core file and mark data and stack spaces as empty. */ diff --git a/gdb/utils.c b/gdb/utils.c index 08b801b..400210b 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -166,6 +166,7 @@ make_final_cleanup (function, arg) { return make_my_cleanup (&final_cleanup_chain, function, arg); } + struct cleanup * make_run_cleanup (function, arg) void (*function) PARAMS ((PTR)); @@ -173,6 +174,21 @@ make_run_cleanup (function, arg) { return make_my_cleanup (&run_cleanup_chain, function, arg); } + +static void +do_freeargv (arg) + void *arg; +{ + freeargv ((char**) arg); +} + +struct cleanup * +make_cleanup_freeargv (arg) + char **arg; +{ + return make_my_cleanup (&cleanup_chain, do_freeargv, arg); +} + struct cleanup * make_my_cleanup (pmy_chain, function, arg) struct cleanup **pmy_chain; @@ -1714,7 +1730,7 @@ fputs_maybe_filtered (linebuffer, stream, filter) return; /* Don't do any filtering if it is disabled. */ - if (stream != gdb_stdout + if ((stream != gdb_stdout) || !pagination_enabled || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX)) { fputs_unfiltered (linebuffer, stream); @@ -2300,42 +2316,40 @@ strcmp_iw (string1, string2) /* -** subsetCompare() -** Answer whether stringToCompare is a full or partial match to -** templateString. The partial match must be in sequence starting +** subset_compare() +** Answer whether string_to_compare is a full or partial match to +** template_string. The partial match must be in sequence starting ** at index 0. */ int -#ifdef _STDC__ -subsetCompare( - char *stringToCompare, - char *templateString) -#else -subsetCompare(stringToCompare, templateString) - char *stringToCompare; - char *templateString; -#endif -{ - int match = 0; - - if (templateString != (char *)NULL && stringToCompare != (char *)NULL && - strlen(stringToCompare) <= strlen(templateString)) - match = (strncmp(templateString, - stringToCompare, - strlen(stringToCompare)) == 0); - - return match; -} /* subsetCompare */ +subset_compare (string_to_compare, template_string) + char *string_to_compare; + char *template_string; +{ + int match; + if (template_string != (char *)NULL && string_to_compare != (char *)NULL && + strlen(string_to_compare) <= strlen(template_string)) + match = (strncmp(template_string, + string_to_compare, + strlen(string_to_compare)) == 0); + else + match = 0; + return match; +} -void pagination_on_command(arg, from_tty) +static void pagination_on_command PARAMS ((char *arg, int from_tty)); +static void +pagination_on_command (arg, from_tty) char *arg; int from_tty; { pagination_enabled = 1; } -void pagination_off_command(arg, from_tty) +static void pagination_on_command PARAMS ((char *arg, int from_tty)); +static void +pagination_off_command (arg, from_tty) char *arg; int from_tty; { @@ -2560,10 +2574,12 @@ floatformat_to_doublest (fmt, from, to) increment the exponent by one to account for the integer bit. */ if (!special_exponent) - if (fmt->intbit == floatformat_intbit_no) - dto = ldexp (1.0, exponent); - else - exponent++; + { + if (fmt->intbit == floatformat_intbit_no) + dto = ldexp (1.0, exponent); + else + exponent++; + } while (mant_bits_left > 0) { diff --git a/gdb/v850-tdep.c b/gdb/v850-tdep.c index b98a4bd..6bb8a70 100644 --- a/gdb/v850-tdep.c +++ b/gdb/v850-tdep.c @@ -811,19 +811,6 @@ v850_frame_saved_pc (fi) return v850_find_callers_reg (fi, RP_REGNUM); } -void -get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval) - char *raw_buffer; - int *optimized; - CORE_ADDR *addrp; - struct frame_info *frame; - int regnum; - enum lval_type *lval; -{ - generic_get_saved_register (raw_buffer, optimized, addrp, - frame, regnum, lval); -} - /* Function: fix_call_dummy Pokes the callee function's address into the CALL_DUMMY assembly stub. diff --git a/gdb/valops.c b/gdb/valops.c index 77d2396..643db86 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -51,10 +51,8 @@ extern int hp_som_som_object_present; static int typecmp PARAMS ((int staticp, struct type *t1[], value_ptr t2[])); -#ifdef CALL_DUMMY static CORE_ADDR find_function_addr PARAMS ((value_ptr, struct type **)); static value_ptr value_arg_coerce PARAMS ((value_ptr, struct type *, int)); -#endif #ifndef PUSH_ARGUMENTS @@ -78,6 +76,8 @@ static CORE_ADDR allocate_space_in_inferior PARAMS ((int)); static value_ptr cast_into_complex PARAMS ((struct type *, value_ptr)); +static struct fn_field *find_method_list PARAMS ((value_ptr *argp, char * method, int offset, int * static_memfuncp, struct type * type, int * num_fns, struct type ** basetype, int * boffset)); + void _initialize_valops PARAMS ((void)); #define VALUE_SUBSTRING_START(VAL) VALUE_FRAME(VAL) @@ -443,8 +443,8 @@ value_at (type, addr, sect) val = allocate_value (type); -#ifdef GDB_TARGET_IS_D10V - if (TYPE_CODE (type) == TYPE_CODE_PTR + if (GDB_TARGET_IS_D10V + && TYPE_CODE (type) == TYPE_CODE_PTR && TYPE_TARGET_TYPE (type) && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)) { @@ -452,20 +452,20 @@ value_at (type, addr, sect) unsigned long num; unsigned short snum; snum = read_memory_unsigned_integer (addr, 2); - num = D10V_MAKE_IADDR(snum); - store_address ( VALUE_CONTENTS_RAW (val), 4, num); + num = D10V_MAKE_IADDR (snum); + store_address (VALUE_CONTENTS_RAW (val), 4, num); } - else if (TYPE_CODE(type) == TYPE_CODE_PTR) + else if (GDB_TARGET_IS_D10V + && TYPE_CODE(type) == TYPE_CODE_PTR) { /* pointer to data */ unsigned long num; unsigned short snum; snum = read_memory_unsigned_integer (addr, 2); - num = D10V_MAKE_DADDR(snum); - store_address ( VALUE_CONTENTS_RAW (val), 4, num); + num = D10V_MAKE_DADDR (snum); + store_address (VALUE_CONTENTS_RAW (val), 4, num); } else -#endif read_memory_section (addr, VALUE_CONTENTS_ALL_RAW (val), TYPE_LENGTH (type), sect); VALUE_LVAL (val) = lval_memory; @@ -517,9 +517,9 @@ value_fetch_lazy (val) CORE_ADDR addr = VALUE_ADDRESS (val) + VALUE_OFFSET (val); int length = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (val)); -#ifdef GDB_TARGET_IS_D10V struct type *type = VALUE_TYPE(val); - if (TYPE_CODE (type) == TYPE_CODE_PTR + if (GDB_TARGET_IS_D10V + && TYPE_CODE (type) == TYPE_CODE_PTR && TYPE_TARGET_TYPE (type) && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)) { @@ -530,7 +530,8 @@ value_fetch_lazy (val) num = D10V_MAKE_IADDR(snum); store_address ( VALUE_CONTENTS_RAW (val), 4, num); } - else if (TYPE_CODE(type) == TYPE_CODE_PTR) + else if (GDB_TARGET_IS_D10V + && TYPE_CODE(type) == TYPE_CODE_PTR) { /* pointer to data */ unsigned long num; @@ -539,10 +540,7 @@ value_fetch_lazy (val) num = D10V_MAKE_DADDR(snum); store_address ( VALUE_CONTENTS_RAW (val), 4, num); } - else -#endif - - if (length) + else if (length) read_memory_section (addr, VALUE_CONTENTS_ALL_RAW (val), length, VALUE_BFD_SECTION (val)); VALUE_LAZY (val) = 0; @@ -1101,7 +1099,6 @@ value_push (sp, arg) #endif /* !PUSH_ARGUMENTS */ -#ifdef CALL_DUMMY /* Perform the standard coercions that are specified for arguments to be passed to C functions. @@ -1261,8 +1258,9 @@ find_function_addr (function, retval_type) ARGS is modified to contain coerced values. */ -value_ptr -call_function_by_hand (function, nargs, args) +static value_ptr hand_function_call PARAMS ((value_ptr function, int nargs, value_ptr *args)); +static value_ptr +hand_function_call (function, nargs, args) value_ptr function; int nargs; value_ptr *args; @@ -1279,15 +1277,19 @@ call_function_by_hand (function, nargs, args) sequence of instructions. But CISC machines will have to pack the instructions into REGISTER_SIZE units (and so will RISC machines for which INSTRUCTION_SIZE is not - REGISTER_SIZE). */ + REGISTER_SIZE). + + NOTE: This is pretty stupid. CALL_DUMMY should be in strict + target byte order. */ - static ULONGEST dummy[] = CALL_DUMMY; - char dummy1[REGISTER_SIZE * sizeof dummy / sizeof (ULONGEST)]; + static ULONGEST *dummy; + int sizeof_dummy1; + char *dummy1; CORE_ADDR old_sp; struct type *value_type; unsigned char struct_return; CORE_ADDR struct_addr = 0; - struct inferior_status inf_status; + struct inferior_status *inf_status; struct cleanup *old_chain; CORE_ADDR funaddr; int using_gcc; /* Set to version of gcc in use, or zero if not gcc */ @@ -1295,12 +1297,17 @@ call_function_by_hand (function, nargs, args) struct type *param_type = NULL; struct type *ftype = check_typedef (SYMBOL_TYPE (function)); + dummy = alloca (SIZEOF_CALL_DUMMY_WORDS); + sizeof_dummy1 = REGISTER_SIZE * SIZEOF_CALL_DUMMY_WORDS / sizeof (ULONGEST); + dummy1 = alloca (sizeof_dummy1); + memcpy (dummy, CALL_DUMMY_WORDS, SIZEOF_CALL_DUMMY_WORDS); + if (!target_has_execution) noprocess(); - save_inferior_status (&inf_status, 1); + inf_status = save_inferior_status (1); old_chain = make_cleanup ((make_cleanup_func) restore_inferior_status, - &inf_status); + inf_status); /* PUSH_DUMMY_FRAME is responsible for saving the inferior registers (and POP_FRAME for restoring them). (At least on most machines) @@ -1312,14 +1319,14 @@ call_function_by_hand (function, nargs, args) if (INNER_THAN (1, 2)) { /* Stack grows down */ - sp -= sizeof dummy1; + sp -= sizeof_dummy1; start_sp = sp; } else { /* Stack grows up */ start_sp = sp; - sp += sizeof dummy1; + sp += sizeof_dummy1; } funaddr = find_function_addr (function, &value_type); @@ -1339,7 +1346,7 @@ call_function_by_hand (function, nargs, args) /* Create a call sequence customized for this function and the number of arguments for it. */ - for (i = 0; i < (int) (sizeof (dummy) / sizeof (dummy[0])); i++) + for (i = 0; i < (int) (SIZEOF_CALL_DUMMY_WORDS / sizeof (dummy[0])); i++) store_unsigned_integer (&dummy1[i * REGISTER_SIZE], REGISTER_SIZE, (ULONGEST)dummy[i]); @@ -1353,42 +1360,42 @@ call_function_by_hand (function, nargs, args) real_pc = start_sp; #endif -#if CALL_DUMMY_LOCATION == ON_STACK - write_memory (start_sp, (char *)dummy1, sizeof dummy1); -#endif /* On stack. */ - -#if CALL_DUMMY_LOCATION == BEFORE_TEXT_END - /* Convex Unix prohibits executing in the stack segment. */ - /* Hope there is empty room at the top of the text segment. */ - { - extern CORE_ADDR text_end; - static checked = 0; - if (!checked) - for (start_sp = text_end - sizeof dummy1; start_sp < text_end; ++start_sp) - if (read_memory_integer (start_sp, 1) != 0) - error ("text segment full -- no place to put call"); - checked = 1; - sp = old_sp; - real_pc = text_end - sizeof dummy1; - write_memory (real_pc, (char *)dummy1, sizeof dummy1); - } -#endif /* Before text_end. */ + if (CALL_DUMMY_LOCATION == ON_STACK) + { + write_memory (start_sp, (char *)dummy1, sizeof_dummy1); + } -#if CALL_DUMMY_LOCATION == AFTER_TEXT_END - { - extern CORE_ADDR text_end; - int errcode; - sp = old_sp; - real_pc = text_end; - errcode = target_write_memory (real_pc, (char *)dummy1, sizeof dummy1); - if (errcode != 0) - error ("Cannot write text segment -- call_function failed"); - } -#endif /* After text_end. */ + if (CALL_DUMMY_LOCATION == BEFORE_TEXT_END) + { + /* Convex Unix prohibits executing in the stack segment. */ + /* Hope there is empty room at the top of the text segment. */ + extern CORE_ADDR text_end; + static checked = 0; + if (!checked) + for (start_sp = text_end - sizeof_dummy1; start_sp < text_end; ++start_sp) + if (read_memory_integer (start_sp, 1) != 0) + error ("text segment full -- no place to put call"); + checked = 1; + sp = old_sp; + real_pc = text_end - sizeof_dummy1; + write_memory (real_pc, (char *)dummy1, sizeof_dummy1); + } + + if (CALL_DUMMY_LOCATION == AFTER_TEXT_END) + { + extern CORE_ADDR text_end; + int errcode; + sp = old_sp; + real_pc = text_end; + errcode = target_write_memory (real_pc, (char *)dummy1, sizeof_dummy1); + if (errcode != 0) + error ("Cannot write text segment -- call_function failed"); + } -#if CALL_DUMMY_LOCATION == AT_ENTRY_POINT - real_pc = funaddr; -#endif /* At entry point. */ + if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT) + { + real_pc = funaddr; + } #ifdef lint sp = old_sp; /* It really is used, for some ifdef's... */ @@ -1555,9 +1562,8 @@ You must use a pointer to function type variable. Command ignored.", arg_name); for (i = nargs - 1; i >= 0; i--) len += TYPE_LENGTH (VALUE_ENCLOSING_TYPE (args[i])); -#ifdef CALL_DUMMY_STACK_ADJUST - len += CALL_DUMMY_STACK_ADJUST; -#endif + if (CALL_DUMMY_STACK_ADJUST_P) + len += CALL_DUMMY_STACK_ADJUST; sp -= STACK_ALIGN (len) - len; } #endif /* STACK_ALIGN */ @@ -1588,9 +1594,8 @@ You must use a pointer to function type variable. Command ignored.", arg_name); { /* If stack grows up, we must leave a hole at the bottom, note that sp already has been advanced for the arguments! */ -#ifdef CALL_DUMMY_STACK_ADJUST - sp += CALL_DUMMY_STACK_ADJUST; -#endif + if (CALL_DUMMY_STACK_ADJUST_P) + sp += CALL_DUMMY_STACK_ADJUST; sp = STACK_ALIGN (sp); } #endif /* STACK_ALIGN */ @@ -1600,13 +1605,12 @@ You must use a pointer to function type variable. Command ignored.", arg_name); /* MVS 11/22/96: I think at least some of this stack_align code is really broken. Better to let PUSH_ARGUMENTS adjust the stack in a target-defined manner. */ -#ifdef CALL_DUMMY_STACK_ADJUST - if (INNER_THAN (1, 2)) - { - /* stack grows downward */ - sp -= CALL_DUMMY_STACK_ADJUST; - } -#endif /* CALL_DUMMY_STACK_ADJUST */ + if (CALL_DUMMY_STACK_ADJUST_P) + if (INNER_THAN (1, 2)) + { + /* stack grows downward */ + sp -= CALL_DUMMY_STACK_ADJUST; + } /* Store the address at which the structure is supposed to be written. Note that this (and the code which reserved the space @@ -1663,13 +1667,12 @@ You must use a pointer to function type variable. Command ignored.", arg_name); { /* We stopped somewhere besides the call dummy. */ - /* If we did the cleanups, we would print a spurious error message - (Unable to restore previously selected frame), would write the - registers from the inf_status (which is wrong), and would do other - wrong things (like set stop_bpstat to the wrong thing). */ + /* If we did the cleanups, we would print a spurious error + message (Unable to restore previously selected frame), + would write the registers from the inf_status (which is + wrong), and would do other wrong things. */ discard_cleanups (old_chain); - /* Prevent memory leak. */ - bpstat_clear (&inf_status.stop_bpstat); + discard_inferior_status (inf_status); /* The following error message used to say "The expression which contained the function call has been discarded." It @@ -1706,16 +1709,23 @@ the function call).", name); return value_being_returned (value_type, retbuf, struct_return); } } -#else /* no CALL_DUMMY. */ + value_ptr call_function_by_hand (function, nargs, args) value_ptr function; int nargs; value_ptr *args; { - error ("Cannot invoke functions on this machine."); + if (CALL_DUMMY_P) + { + return hand_function_call (function, nargs, args); + } + else + { + error ("Cannot invoke functions on this machine."); + } } -#endif /* no CALL_DUMMY. */ + /* Create a value for an array by allocating space in the inferior, copying @@ -2420,16 +2430,16 @@ value_struct_elt (argp, args, name, static_memfuncp, err) * BASETYPE is set to the actual type of the subobject where the method is found * BOFFSET is the offset of the base subobject where the method is found */ -struct fn_field * +static struct fn_field * find_method_list (argp, method, offset, static_memfuncp, type, num_fns, basetype, boffset) - value_ptr *argp; - char * method; - int offset; - int * static_memfuncp; - struct type * type; - int * num_fns; - struct type ** basetype; - int * boffset; + value_ptr *argp; + char * method; + int offset; + int * static_memfuncp; + struct type * type; + int * num_fns; + struct type ** basetype; + int * boffset; { int i; struct fn_field * f; diff --git a/gdb/valprint.c b/gdb/valprint.c index b09da9b..ddbbebb 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -236,6 +236,7 @@ val_print_type_code_int (type, valaddr, stream) */ #if defined (CC_HAS_LONG_LONG) && !defined (PRINTF_HAS_LONG_LONG) +static void print_decimal PARAMS ((GDB_FILE *stream, char *sign, int use_local, ULONGEST val_ulong)); static void print_decimal (stream, sign, use_local, val_ulong) GDB_FILE *stream; @@ -425,6 +426,7 @@ print_longest (stream, format, use_local, val_long) #endif /* CC_HAS_LONG_LONG || PRINTF_HAS_LONG_LONG */ } +#if 0 void strcat_longest (format, use_local, val_long, buf, buflen) int format; @@ -528,6 +530,7 @@ strcat_longest (format, use_local, val_long, buf, buflen) #endif /* !PRINTF_HAS_LONG_LONG */ } +#endif /* This used to be a macro, but I don't think it is called often enough to merit such treatment. */ diff --git a/gdb/value.h b/gdb/value.h index 44c70de..d3d262a 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -345,8 +345,9 @@ extern value_ptr value_struct_elt_for_reference PARAMS ((struct type *domain, extern value_ptr value_static_field PARAMS ((struct type *type, int fieldno)); -extern struct fn_field * -value_find_oload_method_list PARAMS ((value_ptr *, char *, int, int *, int *, struct type **, int *)); +extern struct fn_field *value_find_oload_method_list PARAMS ((value_ptr *, char *, int, int *, int *, struct type **, int *)); + +extern int find_overload_match PARAMS ((struct type ** arg_types, int nargs, char * name, int method, int lax, value_ptr obj, struct symbol *fsym, value_ptr *valp, struct symbol **symp, int *staticp)); extern value_ptr value_field PARAMS ((value_ptr arg1, int fieldno)); @@ -375,7 +376,7 @@ extern value_ptr value_from_vtable_info PARAMS ((value_ptr arg, struct type *type)); extern value_ptr value_being_returned PARAMS ((struct type *valtype, - char retbuf[REGISTER_BYTES], + char *retbuf, int struct_return)); extern value_ptr value_in PARAMS ((value_ptr element, value_ptr set)); @@ -484,10 +485,10 @@ write_register_pid PARAMS ((int regno, CORE_ADDR val, int pid)); extern void supply_register PARAMS ((int regno, char *val)); -extern void -get_saved_register PARAMS ((char *raw_buffer, int *optimized, - CORE_ADDR *addrp, struct frame_info *frame, - int regnum, enum lval_type *lval)); +extern void get_saved_register PARAMS ((char *raw_buffer, int *optimized, + CORE_ADDR *addrp, + struct frame_info *frame, + int regnum, enum lval_type *lval)); extern void modify_field PARAMS ((char *addr, LONGEST fieldval, int bitpos, int bitsize)); diff --git a/gdb/values.c b/gdb/values.c index c7053b8..c7c4d80 100644 --- a/gdb/values.c +++ b/gdb/values.c @@ -645,10 +645,9 @@ unpack_long (type, valaddr) case TYPE_CODE_REF: /* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure whether we want this to be true eventually. */ -#ifdef GDB_TARGET_IS_D10V - if (len == 2) - return D10V_MAKE_DADDR(extract_address (valaddr, len)); -#endif + if (GDB_TARGET_IS_D10V + && len == 2) + return D10V_MAKE_DADDR (extract_address (valaddr, len)); return extract_address (valaddr, len); case TYPE_CODE_MEMBER: @@ -1492,7 +1491,7 @@ value_from_double (type, num) value_ptr value_being_returned (valtype, retbuf, struct_return) register struct type *valtype; - char retbuf[REGISTER_BYTES]; + char *retbuf; int struct_return; /*ARGSUSED*/ { diff --git a/gdb/win32-nat.c b/gdb/win32-nat.c index 87e96bd..fa19797 100644 --- a/gdb/win32-nat.c +++ b/gdb/win32-nat.c @@ -50,6 +50,17 @@ #include <sys/param.h> #include <unistd.h> +/* The ui's event loop. */ +extern int (*ui_loop_hook) PARAMS ((int signo)); + +/* If we're not using the old Cygwin header file set, define the + following which never should have been in the generic Win32 API + headers in the first place since they were our own invention... */ +#ifndef _GNU_H_WINDOWS_H +#define FLAG_TRACE_BIT 0x100 +#define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT) +#endif + /* The string sent by cygwin when it processes a signal. FIXME: This should be in a cygwin include file. */ #define CYGWIN_SIGNAL_STRING "cygwin: signal" @@ -65,6 +76,7 @@ extern struct target_ops child_ops; static void child_stop PARAMS ((void)); static int win32_child_thread_alive PARAMS ((int)); +void child_kill_inferior PARAMS ((void)); static int last_sig = 0; /* Set if a signal was received from the debugged process */ @@ -453,7 +465,9 @@ handle_output_debug_string (struct target_waitstatus *ourstatus) { char *p; /*last_sig = */strtol(s + sizeof(CYGWIN_SIGNAL_STRING) - 1, &p, 0); - if (gotasig = (ourstatus->value.sig = target_signal_from_host (last_sig))) + gotasig = target_signal_from_host (last_sig); + ourstatus->value.sig = gotasig; + if (gotasig) ourstatus->kind = TARGET_WAITKIND_STOPPED; } @@ -530,9 +544,10 @@ child_continue (DWORD continue_status, int id) DEBUG_EVENTS (("ContinueDebugEvent (cpid=%d, ctid=%d, DBG_CONTINUE);\n", current_event.dwProcessId, current_event.dwThreadId)); - if (res = ContinueDebugEvent (current_event.dwProcessId, - current_event.dwThreadId, - continue_status)) + res = ContinueDebugEvent (current_event.dwProcessId, + current_event.dwThreadId, + continue_status); + if (res) for (th = &thread_head; (th = th->next) != NULL; ) if (((id == -1) || (id == th->id)) && th->suspend_count) { @@ -556,98 +571,111 @@ child_wait (int pid, struct target_waitstatus *ourstatus) while (1) { DWORD continue_status; - BOOL t = WaitForDebugEvent (¤t_event, INFINITE); + BOOL debug_event = WaitForDebugEvent (¤t_event, 20); char *p; thread_info *th; int sig; - event_count++; - - continue_status = DBG_CONTINUE; - - switch (current_event.dwDebugEventCode) + if (debug_event) { - case CREATE_THREAD_DEBUG_EVENT: - DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%x code=%s)\n", - current_event.dwProcessId, current_event.dwThreadId, - "CREATE_THREAD_DEBUG_EVENT")); - /* Record the existence of this thread */ - child_add_thread (current_event.dwThreadId, - current_event.u.CreateThread.hThread); - if (info_verbose) - printf_unfiltered ("[New %s]\n", - target_pid_to_str (current_event.dwThreadId)); - break; - - case EXIT_THREAD_DEBUG_EVENT: - DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", - current_event.dwProcessId, current_event.dwThreadId, - "EXIT_THREAD_DEBUG_EVENT")); - child_delete_thread (current_event.dwThreadId); - break; - - case CREATE_PROCESS_DEBUG_EVENT: - DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", - current_event.dwProcessId, current_event.dwThreadId, - "CREATE_PROCESS_DEBUG_EVENT")); - current_process_handle = current_event.u.CreateProcessInfo.hProcess; - - main_thread_id = inferior_pid = current_event.dwThreadId; - /* Add the main thread */ - current_thread = child_add_thread (inferior_pid, - current_event.u.CreateProcessInfo.hThread); - break; - - case EXIT_PROCESS_DEBUG_EVENT: - DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", - current_event.dwProcessId, current_event.dwThreadId, - "EXIT_PROCESS_DEBUG_EVENT")); - ourstatus->kind = TARGET_WAITKIND_EXITED; - ourstatus->value.integer = current_event.u.ExitProcess.dwExitCode; - CloseHandle (current_process_handle); - return current_event.dwProcessId; - break; - - case LOAD_DLL_DEBUG_EVENT: - DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", - current_event.dwProcessId, current_event.dwThreadId, - "LOAD_DLL_DEBUG_EVENT")); - catch_errors (handle_load_dll, NULL, "", RETURN_MASK_ALL); - registers_changed(); /* mark all regs invalid */ - break; - - case UNLOAD_DLL_DEBUG_EVENT: - DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", - current_event.dwProcessId, current_event.dwThreadId, - "UNLOAD_DLL_DEBUG_EVENT")); - break; /* FIXME: don't know what to do here */ - - case EXCEPTION_DEBUG_EVENT: - DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", - current_event.dwProcessId, current_event.dwThreadId, - "EXCEPTION_DEBUG_EVENT")); - if (handle_exception (ourstatus)) - return current_event.dwThreadId; - continue_status = DBG_EXCEPTION_NOT_HANDLED; - break; - - case OUTPUT_DEBUG_STRING_EVENT: /* message from the kernel */ - DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", - current_event.dwProcessId, current_event.dwThreadId, - "OUTPUT_DEBUG_STRING_EVENT")); - if (handle_output_debug_string (ourstatus)) - return main_thread_id; - break; - default: - printf_unfiltered ("gdb: kernel event for pid=%d tid=%d\n", - current_event.dwProcessId, - current_event.dwThreadId); - printf_unfiltered (" unknown event code %d\n", - current_event.dwDebugEventCode); - break; + event_count++; + + continue_status = DBG_CONTINUE; + + switch (current_event.dwDebugEventCode) + { + case CREATE_THREAD_DEBUG_EVENT: + DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%x code=%s)\n", + current_event.dwProcessId, current_event.dwThreadId, + "CREATE_THREAD_DEBUG_EVENT")); + /* Record the existence of this thread */ + child_add_thread (current_event.dwThreadId, + current_event.u.CreateThread.hThread); + if (info_verbose) + printf_unfiltered ("[New %s]\n", + target_pid_to_str (current_event.dwThreadId)); + break; + + case EXIT_THREAD_DEBUG_EVENT: + DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", + current_event.dwProcessId, current_event.dwThreadId, + "EXIT_THREAD_DEBUG_EVENT")); + child_delete_thread (current_event.dwThreadId); + break; + + case CREATE_PROCESS_DEBUG_EVENT: + DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", + current_event.dwProcessId, current_event.dwThreadId, + "CREATE_PROCESS_DEBUG_EVENT")); + current_process_handle = current_event.u.CreateProcessInfo.hProcess; + + main_thread_id = inferior_pid = current_event.dwThreadId; + /* Add the main thread */ + current_thread = child_add_thread (inferior_pid, + current_event.u.CreateProcessInfo.hThread); + break; + + case EXIT_PROCESS_DEBUG_EVENT: + DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", + current_event.dwProcessId, current_event.dwThreadId, + "EXIT_PROCESS_DEBUG_EVENT")); + ourstatus->kind = TARGET_WAITKIND_EXITED; + ourstatus->value.integer = current_event.u.ExitProcess.dwExitCode; + CloseHandle (current_process_handle); + return current_event.dwProcessId; + break; + + case LOAD_DLL_DEBUG_EVENT: + DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", + current_event.dwProcessId, current_event.dwThreadId, + "LOAD_DLL_DEBUG_EVENT")); + catch_errors (handle_load_dll, NULL, "", RETURN_MASK_ALL); + registers_changed(); /* mark all regs invalid */ + break; + + case UNLOAD_DLL_DEBUG_EVENT: + DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", + current_event.dwProcessId, current_event.dwThreadId, + "UNLOAD_DLL_DEBUG_EVENT")); + break; /* FIXME: don't know what to do here */ + + case EXCEPTION_DEBUG_EVENT: + DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", + current_event.dwProcessId, current_event.dwThreadId, + "EXCEPTION_DEBUG_EVENT")); + if (handle_exception (ourstatus)) + return current_event.dwThreadId; + continue_status = DBG_EXCEPTION_NOT_HANDLED; + break; + + case OUTPUT_DEBUG_STRING_EVENT: /* message from the kernel */ + DEBUG_EVENTS (("gdb: kernel event for pid=%d tid=%d code=%s)\n", + current_event.dwProcessId, current_event.dwThreadId, + "OUTPUT_DEBUG_STRING_EVENT")); + if (handle_output_debug_string (ourstatus)) + return main_thread_id; + break; + default: + printf_unfiltered ("gdb: kernel event for pid=%d tid=%d\n", + current_event.dwProcessId, + current_event.dwThreadId); + printf_unfiltered (" unknown event code %d\n", + current_event.dwDebugEventCode); + break; + } + + CHECK (child_continue (continue_status, -1)); } + else + { + int detach = 0; - CHECK (child_continue (continue_status, -1)); + if (ui_loop_hook != NULL) + detach = ui_loop_hook (0); + + if (detach) + child_kill_inferior (); + } } } |