Thu Dec 31 15:26:13 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* corelow.c (core_ops): Don't initialize statically.
	(init_core_ops): New function, fills in core_ops.
	(_initialize_corelow): Use it.

Thu Dec 31 16:54:30 1998  David Taylor  <taylor@texas.cygnus.com>

	The following changes were made by
	Elena Zannoni <ezannoni@kwikemart.cygnus.com>
	Edith Epstein  <eepstein@sophia.cygnus.com>
	David Taylor  <taylor@texas.cygnus.com>

	* config/pa/tm-hppa.h (INSTRUCTION_NULLIFIED): Change to read
 	nullify instruction bit from IPSW only when we are not in a system
 	call.
	(STRCAT_REGISTER, pa_do_strcat_registers_info): Additional
 	parameter -- precision.

	* Makefile.in (BUILD_TUI): To build the tui, only when configured
	with --enable-tui.
	(YLWRAP): Use ylwrap to avoid problems on systems w/o bison.
	(gdb$(EXEEXT)): Make it dependent on BUILD_TUI.
	(all-tui): Remove dependency from phony target.
	(c-exp.tab.c): Use ylwrap instead of bison.
	(jv-exp.tab.c): Ditto.
	(f-exp.tab.c): Ditto.
	(m2-exp.tab.c): Ditto.

	* configure.in (ENABLE_CFLAGS): Define and export BUILD_TUI.
	
	* configure: Regenerated.

	* c-typeprint.c (c_type_print_base): Get to the method name by
	skipping over all the namespaces,  classes and '::'.

	* infcmd.c (run_command): Only call SOLIB_RESTART if it's
	defined.
	(detach_command): Ditto.

	* infptrace.c (call_ptrace): Add some debugging code.

	* infrun.c (follow_inferior_fork): Only define on HP.
	(wait_for_inferior): Only call SOLIB_IN_DYNAMIC_LINKER if we have
	shared libraries; restore test of IN_SOLIB_DYNSYM_RESOLVE_CODE
	removed by HP.
	
	* Makefile.in (ALLDEPFILES): Add somread.c, hp-psymtab-read.c,
	hp-symtab-read.c.
	(SFILES): Remove the above files
	(COMMON_OBS): Remove somread.o
	(SFILES): Add the tui files to this, so they get
	included in etags tables.
	(all-tui): New rule, which does a recursive make in the tui
 	subdir.
	(gdb$(EXEEXT)): Add tui-all to the list of
 	dependencies, and add tui/libtui.a to the link list.
	(tui/libtui.a): When recursing, pass down
	${FLAGS_TO_PASS}.  And don't echo the make command.  This is
	closer to what the other recursions do.
	(HFILES_NO_SRCDIR) add hpread.h.
	(COMMON_OBS): Add hp-psymtab-read.o, hp-symtab-read.o
	Allow the TUI code to be conditionally enabled.
	(TUI_TARGET, TUI_LIBRARY): New variables, whose values are set by
	the configuration script.  They're set to the empty string when
	the TUI isn't enabled.
	(gdb$(GDBEXT)): Use those, instead of referring to tui-all and
	tui/libtui.a directly.

	* Makefile.in: Avoid spurious relinking.
	(gdb$(EXEEXT)): Depend on the actual tui library, not on a
	fictitious target.  Since the fictitious target never existed, make
	would always relink.
	(tui/libtui.a): Renamed from all-tui.  Always recurse to make sure
	the library is up to date.
	(TUI_TARGET): Variable removed; there's no need for it any more.

	* Makefile.in: Look for tui include files in the tui source dir.

	* Use automake's `aclocal' program to generate aclocal.m4, to allow
	us to use automake macros in configure.in with impunity.

	* acconfig.h: Add an entry for the `TUI' symbol.

	* acinclude.m4: New file, containing the code from the old
	aclocal.m4.  Incorporate (by reference) ../bfd/acinclude.m4, not
	../bfd/aclocal.m4, since we only want bfd's local macros.

	* aclocal.m4: Now automagically generated.  Just run aclocal!
	
	* annotate.c (annotate_catchpoint): New function.

	* annotate.h: Taking the new includes (symtab.h and gdbtypes.h).
	not taking the ansic C build fix.
	(annotate_catchpoint): Declare.

	* blockframe.c (blockvector_for_pc_sect): Check that the end of
 	the block is >= to the pc, not just >.

	* breakpoint.c (create_temp_exception_breakpoint): #If it out --
 	nothing calls it.
	(bpstat_stop_status): Don't call SOLIB_HAVE_LOAD_EVENT if it's not
 	defined; don't call SOLIB_HAVE_UNLOAD_EVENT if it's not defined.
	(bpstat_get_triggered_catchpoints): If we don't have shared
 	library support, then don't call SOLIB_LOADED_LIBRARY_PATHNAME nor
 	SOLIB_UNLOADED_LIBRARY_PATHNAME.
	(watch_command_1): Don't require a run before a watch command
 	unless we're on HP [it's an HP OS bug, not a generic limitation]
	(catch_load_command_1): Don't define if no shared libraries.
	(catch_command_1): Don't claim to support fork catchpoints unless
 	CHILD_INSERT_FORK_CATCHPOINT is defined, don't claim to support
 	vfork catchpoints unless CHILD_INSERT_VFORK_CATCHPOINT is defined,
 	don't clain to support shared library load catchpoints if shared
 	libraries aren't supported, and don't claim to support exec
 	catchpoints unless CHILD_INSERT_EXEC_CATCHPOINT is defined

	(bpstat_do_actions): If we just set cmd to NULL, don't then try to
 	set it to cmd->next as we'll SEGV.
	(bpstat_do_actions): Simplify significantly.  It's
	now almost as simple as before the merge and it no longer has the
	HP bug that breakpoint commands are executed repeatedly.

	(break_at_finish_command_1): Rewrite and make sure
 	selected_frame points to a frame before using it. Fix string
 	termination error.
	(break_at_finish_at_depth_command_1): Ditto.
	
	(can_use_hw_watchpoints): New static variable.
	(read_memory_nobpt): Test for breakpoint type bp_none.
	(insert_breakpoints): Test for breakpoint type bp_catch_exec;
	insure have a current frame before getting the frame address.
	(remove_breakpoints): Check for breakpoints of types bp_none,
	bp_catch_fork, bp_catch_vfork, and bp_catch_exec.
	(bpstat_stop_status): Fix updates of b->hit_count.
	(bpstat_have_active_hw_watchpoints): New function.
	(create_exec_event_watchpoint): New function.
	(watch_command_1): Use can_use_hw_watchpoints.
	(catch_fork_command_1): Change name of function to call from
	target_create_catch_(v)fork_hook to create_(v)fork_even_catchpoint.
	(delete_breakpoint): Test for already deleted breakpoints; add
	support for bp_catch_fork, bp_catch_vfork, and bp_catch_exec
	breakpoints.
	(_initialize_breakpoint): Add can-use-hw-watchpoints to list of
	user settable debugger variables.

	(clear_command): When there is no argument
	to the clear command, delete all breakpoints that are hit at 
	default line. This will include a breakpoint whose line number
	does not correspond to the default line, but has been set at 
	the default address.

	(delete_breakpoint): Don't call bpstat_clear_actions, instead
 	clear things explicitly; if clearing breakpoint_at, then also
 	clear any associated actions so that bpstat_do_actions won't try
 	to execute them.
	(_initialize_breakpoint): Fix function name for bx command.

	(tbreak_command): Remove static from declaration.
	(maintenance_info_breakpoints): Ditto.

	(reattach_breakpoints): New funct definition, used with with
 	hardware watchpoints
	(breakpoint_1): Change format and add entries to bptypes[]
	(maintenance_info_breakpoints): Function is no longer static

	(_initialize_breakpoint): Removed a comment.
	(exception_catchpoints_are_fragile,
 	exception_support_initialized): Define.
	(breakpoint_here_p): Fixed syntax error in conditional
	(disable_watchpoints_before_interactive_call_start): Fixed call to
 	check_duplicates. Need a section parameter.
	(enable_watchpoints_after_interactive_call_stop): Fixed call to
 	check_duplicates. Need a section parameter.
	(breakpoint_re_set_one): Fixed call to check_duplicates. Need a
 	section parameter.
	(delete_command): Fixed syntax error in conditional
	(breakpoint_re_set): Fixed some typos.
	
	(args_for_catchpoint_enable): New type for handling exceptions.
	(current_exception_event): New variable for handling exceptions.
	(insert_breakpoints): Check for additional breakpoint types --
	bp_catch_throw, bp_catch_catch, call_disabled.  Also, do some
	additional work to handle an exception catchpoint.
	(remove_breakpoint): There are additional breakpoint types to
 	check for: Bp_catch_throw, bp_catch_catch, call_disabled. Also do
 	some additional work to remove the exception catchpoints
	(breakpoint_init_inferior): New input parameter. If there are
 	exception catchpoints delete them.
	(breakpoint_here_p): There are additional breakpoint enable
 	settings to check for: Shlib_disabled, call_disabled
	(breakpoint_thread_match): There are additional breakpoint enable
 	settings to check for: Call_disabled
	(ep_is_catchpoint): There are additional breakpoint types to check
 	for: Bp_catch_throw, bp_catch_catch
	(ep_is_exception_catchpoint): New function
	(bpstat_find_step_resume_breakpoint): New function
	(bpstat_do_actions): Introduce a local copy of the bpstat
 	structure.
	(print_it_normal): There are additional breakpoint types to check
 	for: Bp_catch_throw, bp_catch_catch Changeing the control
 	structure a bit (adding else ifs) Add code to print out info about
 	exceptions.
	(bpstat_stop_status): There are additional breakpoint enable
 	settings to check for: Call_disabled. there are additional
 	breakpoint types to chack for: Bp_catch_catch and bp_catch_throw.
  	Check to see if stopped due to an exception. Minor fixes to the
 	catch_errors calls. Make sure to count all encountered
 	breakpoints. There was something funky going on previously with
 	the counting.
	(bpstat_what): Add cases for new breakpoint types:
 	bp_catch_catch, bp_catch_throw.
	(bpstat_get_triggered_catchpoints): Check for new breakpoint types
 	: Bp_catch_catch, bp _catch_throw.
	(breakpoint_1): Account for new breakpoint types.
	(describe_other_breakpoints): Account for new breakpoint enable
 	setting (call_disabled)
	(check_duplicates): Account for new breakpoint enable setting
 	(call_disabled)
	(disable_breakpoints_in_shlibs): New function
	(disable_watchpoints_before_interactive_call_start): New function
	(mention): Account for new breakpoint types.
	(break_command_1): Some additional checking for a valid PC.
	(watch_command_1): Some dditional checking to prevent a watch
 	before a run command.
	(ep_parse_optional_filename): Simplified for loop.
	(create_exception_catchpoint): New function
	(cover_target_enable_exception_callback): New function
	(handle_gnu_4_16_catch_command): This used to be thcatch_command_1
 	function.e
	(create_temp_exception_breakpoint): New function
	(catch_command_1): Differs from gdb 4.16 and gdb 4.17. Is now
 	calling catch_exception_command_1 using the EX_EVENT_CATCH and
 	EX_EVENT_THROW values as parameters.
	(clear_command): Additional comments
	(delete_breakpoint): Handle exceptions. Check for additional
 	breakpoint enable settings: Shlib_disabled, call_disabled.
	(delete_command): Hp folks are claiming that we should not delete
 	shlib_event breakpoints
	(breakpoint_re_set_one): Moved call to check_duplicates.  Add new
 	breakpoint types to switch statement.
	(breakpoint_re_set_thread): New function
	(enable_command): Account for new breakpoint types.

	(insertion_state_t): New enumerated type.
	(remove_breakpoint): New param in funct prototype.
	(insert_breakpoints): Check for bp_catch_fork and bp_catch_vfork.
	(remove_breakpoints): Changed call to remove_breakpoint.
	(detach_breakpoints): New function.
	(remove_breakpoint): New parameter, is. Also changed the
	way b->inserted is set.
	(ep_is_catchpoint): New function.
	(ep_is_shlib_catchpoint): New function.
	(print_it_normal): Check for bp_catch_load, bp_catch_unload, 
	bp_catch_fork, bp_catch_vfork, bp_catch_exec. Also new code 
	to print out catchpoints properly.
	(bpstat_stop_status): Check for bp_catch_fork, bp_catch_vfork,
	and bp_catch_exec. Also, some code to check for catching a 
	shared library load/unload.
	(bpstat_what): Added catch_shlib_event to class enumeration.
	Defined new macro, shlr. Expanded the bpstat_what_main_action
	table. Add cases for bp_catch_load, bp_catch_unload, 
	bp_catch_fork, bp_catch_vfork, and bp_catch_exec.
	(bpstat_get_triggered_catchpoints): New function.
	(breakpoint_1): Changes to bptypes definition. Also check for
	bp_catch_load, bp_catch_unload, bp_catch_fork, bp_catch_vfork,
	bp_catch_exec. Similar changes to the switch statement.
	(set_raw_breakpoint): Initialize new breakpoint structure fields.
	dll_pathname, triggered_dll_pathname, forked_inferior_pid,
	exec_pathname.
	(create_solib_load_unload_event_breakpoint): New function.
	(create_solib_load_event_breakpoint): New function.
	(create_solib_unload_event_breakpoint): New function.
	(create_fork_vfork_event_catchpoint): New function.
	(create_fork_event_catchpoint): New function.
	(create_vfork_event_catchpoint): New function.
	(mention): New cases for bp_catch_load, bp_catch_unload, 
	bp_catch_fork, bp_catch_vfork, bp_catch_exec.
	(ep_skip_leading_whitespace): New function.
	(ep_find_event_name_end): New function.
	(ep_parse_optional_if_clause): New function.
	(ep_parse_optional_filename): New function.
	(catch_fork_kind): New enumerated type.
	(catch_fork_command_1): New function.
	(catch_exec_command_1): New function.
	(catch_load_command_1): New function.
	(catch_unload_command_1): New function.
	(catch_throw_command_1): New function.
	(catch_command_1): Now calls catch_throw_command_1.
	(tcatch_command): New function.
	(delete_breakpoint): Changed call to remove_breakpoint.
	Also free the new fields in the breakpoint structure.
	(breakpoint_re_set_one): Handle bp_catch_load, bp_catch_unload,
	bp_catch_fork, bp_catch_vfork, bp_catch_exec.
	(disable_command): Handle bp_catch_load, bp_catch_unload,
	bp_catch_fork, bp_catch_vfork, bp_catch_exec.
	(enable_command): Handle bp_catch_load, bp_catch_unload,
	bp_catch_fork, bp_catch_vfork, bp_catch_exec.
	(_initialize_breakpoint): Alter add_com call for catchpoints,
	add add_com call for watchpoints.

	* breakpoint.h (enum bptype): New entries bp_catch_catch,
 	bp_catch_throw, and bp_none, bp_catch_load, bp_catch_unload,
 	bp_catch_fork, bp_catch_vfork,bp_catch_exec.  Add declarations for
 	new functions bpstat_have_active_hw_watchpoints and
 	create_exec_event_catchpoint.
	(tbreak_command): Add prototype.
	(update_breakpoints_after_exec): Add prototype; update comments.
	(reattach_breakpoints): New funct prototype declaration.
	(enable): New enumerated value call_disabled.
	(bpstat_find_step_resume_breakpoint): New funct decl.
	(inf_context): New enumerated type.
	(breakpoint_re_set_thread): New funct decl.
	(breakpoint_init_inferior): New parameter.
	(disable_watchpoints_before_interactive_call_start): New funct decl.
	(enable_watchpoints_after_interactive_call_stop): New funct decl.
	(disable_breakpoints_in_shlibs): New funct decl.
  	(struct breakpoint): New fields, dll_pathname,triggered_dll_pathname,
 	forked_inferior_pid,exec_pathname BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK.
	(bpstat_get_triggered_catchpoints): New function.
	(detach_breakpoints): New function.
	(create_solib_load_event_breakpoint): New function.
	(create_solib_unload_event_breakpoint) New function.
	(create_fork_event_catchpoint): New function.
	(create_vfork_event_catchpoint): New function.
	(ep_is_catchpoint): New function.
	(ep_is_shlib_catchpoint) New function.
 	(enum bpstat_what_main_action): New entry.

	* buildsym.c (finish_block): Get rid of processing_hp_compilation;
 	handle LOC_INDIRECT case.  Set the BLOCK_GCC_COMPILED to the right
 	compiler.
	(push_context): Add symbols for parameters to the context_stack.
	(merge_symbol_lists): New function. Merges two symbol lists.
	(struct context_stack): Add new field param.

	(processing_hp_compilation): New external var.

	* c-exp.y: Use external flag hp_som_som_object_present to decide
 	whether code was compiled by HP's compilers.  Add two new C++
 	tokens for true and false.
	(yylex): Check for template name is done differently for the
 	HP/aCC compiler case; change some of the template processing code
 	for handling HP aCC templates.

	* c-lang.c (c_create_fundamental_type): Added case to handle
 	template args.  Handle FT_BOOLEAN type.  Set no sign flag for
 	FT_CHAR.
	(cplus_builtin_types): New structure for c++ builtin types.
	(cplus_language_defn): Use cplus_builtin_types instead of
 	c_builtin_types.

	* c-typeprint.c (c_type_print_base): Don't print 'privete' label
 	for a class if all members are private, similarly don't print
 	'public' for a struct.  Add support for sized enums (HP/aCC).  get
 	rid of the 'static' keyword printed by the demangler for member
 	function, when printing the type of a class. 'static' will be
 	added by this function.  If the demangled name is null, and the
 	method is not stubbed, get the signature by looking at the
 	information stored in the symbol structure.  Remove printing of
 	'const' and 'volatile' keywords for methods. This is now taken
 	care as part of the demangled member names.
	(cp_type_print_method_args): New function. To print a C++ method
 	arguments and name to the output stream.

	(c_type_print_cv_qualifier): New function. Print out "const" and
 	"volatile" attributes.
	(c_type_print_varspec_prefix): Print const or volatile qualifiers.
	(c_type_print_args): Print 'void' for c++.
	(c_type_print_varspec_suffix): Print 'void' for a no argument
 	function.
	(c_type_print_base): Print const or volatile qualifiers.  Do not
 	print 'unnamed union' if HP aCC compiler used.  Distinguish
 	between struct and class based on the DECLARED_TYPE.  Handle
 	HP/aCC compiler case for not printing vtable.  Add Template
 	support.

	(cp_type_print_derivation_info): Print out 'protected' when
 	appropriate. This applies only to HP's compilers, not gcc.

	(c_val_print): Added parameter embedded_offset.  Add
 	embedded_offset to valaddr in function calls; fix calls to
 	val_print and cp_print_value_fields.  process TYPE_CODE_METHOD as
 	well.  moved call to check_typedef out of conditional.  added
 	embedded offset param to val_print call.

	(c_value_print): Add new parameter to call to val_print.
	handle pointer to class case.  Attempt to
 	determine the real type of the object to be printed.
	ensure that const char *, const unsigned char *
	come out without the type but the volatile variants
	and the signed variants don't.

	* coff-solib.c (coff_solib_add): Add parameters to call
	to symbol_file_add.

	* coff-solib.h: (Solib_REMOVE_INFERIOR_HOOK): New macro. defined
 	to 0.  functionality not implemented for coff.
	(SOLIB_CREATE_CATCH_LOAD_HOOK): New macro, generate error message
 	for coff.
	(SOLIB_CREATE_CATCH_UNLOAD_HOOK): Ditto.
	(SOLIB_HAVE_LOAD_EVENT): Ditto.
	(SOLIB_LOADED_LIBRARY_PATHNAME): Ditto.
	(SOLIB_HAVE_UNLOAD_EVENT): Ditto.
	(SOLIB_UNLOADED_LIBRARY_PATHNAME): Ditto.
	(SOLIB_IN_DYNAMIC_LINKER): Ditto.
	(SOLIB_RESTART): Ditto.

	* command.c (find_cmd): New function.  (lookup_cmd_1): Call it,
 	change parsing if tui_version or xdb_commands is set.
  	(_initialize_command): Install new alias if xdb_commands is set.

	* complaints.h: Add ifdef...endif pair at beginning and end of file.
	
	* config.in, configure: Regenerated.

	* config/pa/hppabsd.mh (NATDEPFILES): Added new files 
	hp-psymtab-read.o and hp-symtab-read.o.
	* config/pa/hppahpux.mh (NATDEPFILES): Ditto.

	* config/pa/hppahpux.mh (TERMCAP): Use -lHcurses.
	* config/pa/hppaosf.mh (NATDEPFILES): Ditto.

	* config/pa/hpux1020.mh (TERMCAP): Use -lHcurses.
	(MH_CFLAGS): New flag, -D__HP_CURSES, this define
	is used by HP's linker to find the correct curses library.

	* config/pa/hpux1020.mh: New file.

	* config/pa/hpux1020.mt: New file.

	* config/pa/hpux1100.mh (TERMCAP): Link against -lcurses, not
	-lHcurses.  The latter does not contain mvwaddstr, wscrl, or
	wstbwlmkfzz.

	* config/pa/hpux1100.mh (TERMCAP): Use -lHcurses.
	(MH_CFLAGS): New flag, -D__HP_CURSES, this define
	is used by HP's linker to find the correct curses library.

	* config/pa/hpux1100.mh (TERMCAP): When hosting on hpux 11.00, use
	-lHcurses rather than -lcurses.

	* config/pa/hpux1100.mh: New file.

	* config/pa/hpux1100.mt: New file.

	* config/pa/nm-hppah.h (CHILD_HAS_SYSCALL_EVENT): New macro
	(CHILD_THREAD_ALIVE): New macro
	(STOPPED_BY_WATCHPOINT): Add a condition to the macro, 
	! stepped_after_stopped_by_watchpoint
	(TARGET_ENABLE_HW_WATCHPOINTS): New macro
	(hppa_enable_hw_watchpoints): New funct decl
	(TARGET_DISABLE_HW_WATCHPOINTS): New macro
	( hppa_disable_hw_watchpoints): New funct decl
	     these are for HP's implementation of fast 
	watchpoints (via page protection).
	(target_pid_to_str): New macro, calls hppa_pid_to_str
	(target_tid_to_str): New macro, calls hppa_tid_to_str

	* config/pa/nm-hppah.h (CHILD_POST_WAIT): Delete;
	(CHILD_CREATE_CATCH_FORK_HOOK): Replace with
 	CHILD_INSERT_FORK_CATCHPOINT and CHILD_REMOVE_FORK_CATCHPOINT.
	(CHILD_CREATE_CATCH_VFORK_HOOK): Replace with
 	CHILD_INSERT_VFORK_CATCHPOINT and CHILD_REMOVE_VFORK_CATCHPOINT.
	(CHILD_CAN_FOLLOW_VFORK_PRIOR_TO_EXEC,
 	CHILD_INSERT_EXEC_CATCHPOINT, CHILD_REMOVE_EXEC_CATCHPOINT,
 	CHILD_HAS_EXECD, CHILD_REPORTED_EXEC_EVENTS_PER_EXEC_CALL,
 	CHILD_POST_ATTACH, TARGET_HAS_HARDWARE_WATCHPOINTS,
	TARGET_CAN_USE_HARDWARE_WATCHPOINT,
	TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT,
	TARGET_RANGE_PROFITABLE_FOR_HW_WATCHPOINT, STOPPED_BY_WATCHPOINT,
	HAVE_NONSTEPPABLE_WATCHPOINT, target_insert_watchpoint,
	target_remote_watchpoint): New macros.

	* config/pa/nm-hppah.h (CHILD_XFER_MEMORY): Reinsert accidentally
	deleted define.

	* config/pa/nm-hppah.h:
	(PREPARE_TO_PROCEED): Defined macro to use 
	hppa_prepare_to_proceed.
	(hppa_pid_to_str): Extern decl.
	(hppa_tid_to_str): Extern decl.
	(target_pid_or_tid_to_str): New macro definition.
	(hppa_pid_or_tid_to_str): Extern decl.
	(ENSURE_VFORKING_PARENT_REMAINS_STOPPED): New macro - for
	handling events caused by a call to vfork.
	(hppa_ensure_vforking_parent_remains_stopped): Extern decl.
	(RESUME_EXECD_VFORKING_CHILD_TO_GET_PARENT_VFORK): New macro -
	for handling events caused by a call to vfork.
	(hppa_resume_execd_vforking_child_to_get_parent_vfork): Extern decl.

	* config/pa/nm-hppah.h: Fix PREPARE_TO_PROCEED macro.

	* config/pa/nm-hppah.h: Fix for gcc compile on HPUX, change
 	PT_RDUAREA to PT_RUAREA.

	* config/pa/nm-hppah.h: Introduced an HPUXHPPA define.
	A bit of a hack so that I can ifdef some code that 
	only works for the HP wildebeest debugger.

	* config/pa/nm-hppah.h: Lots of new CHILD_ defines;
	process_event_kind enum.

	* config/pa/tm-hppa.h (BREAKPOINT32): New define.
	(CALL_DUMMY_HAS_COMPLETED): New define.

	* config/pa/tm-hppa.h (STACK_ALIGN): New macro.
	(NO_EXTRA_ALIGNMENT_NEEDED): New macro.
	(PC_REQUIRES_RUN_BEFORE_USE): New macro. 
	(REGISTER_NAMES): Formatting in file changed.
	(CR27_REGNUM): Base register for thread local storage. 
	(USE_STRUCT_CONVENTION): New macro used to decide whether
	a function returning a value of type type will
	put it on the stack or into registers (based on the 
	PA risc calling conventions).
	(EXTRACT_RETURN_VALUE): Fixed calculation for extracting return value.
	(VALUE_RETURNED_FROM_STACK): New macro.
	(TARGET_READ_PC): Declared the function used in the definition.
	(SKIP_TRAMPOLINE_CODE): Declared the function used in the definition.
	(TARGET_WRITE_PC): Declared the function used in the definition.
	(TARGET_READ_FP): Declared the function used in the definition.

	* config/pa/tm-hppa.h (STRCAT_REGISTER): Define macro for 
	future use.
	(pa_do_strcat_registers_info): Moved function decl from
	defs.h to this HPUX specific .h file.

	* config/pa/tm-hppa.h (USE_STRUCT_CONVENTION): Type_LENGTH returns
	bytes, not bits; fix off by 8 error.

	* config/pa/tm-hppa.h: 
	New comment for obj_unwind_info definition
	New typedef, obj_private_struct

	* config/pa/tm-hppa.h: Delete most target_ macros -- use default
	versions instead; remove extraneous comma from proc_wait macro.

	* config/pa/tm-hppa.h: Get rid of macro HP_COMPILED_TARGET.

	* config/pa/tm-hppa.h: Removed redefinitions of 
	USE_STRUCT_CONVENTION and STACK_ALIGN macros.
	
	* config/pa/tm-hppa.h: Some new definitions
	  New macros: Arg0_REGNUM, ARG1_REGNUM, ARG2_REGNUM, ARG3_REGNUM.
	    target_pid_to_exec_file, target_acknowledge_forked_child,
	    target_create_catch_fork_hook, target_create_catch_vfork_hook,
	    target_has_forked, target_has_vforked, require_attach, 
	    require_detach, proc_wait
	  New funct decls: Hppa_pid_to_exec_file,
	    hppa_acknowledge_forked_child, hppa_create_catch_fork_hook,
	    hppa_create_catch_vfork_hook, hppa_target_has_forked, 
	    hppa_target_has_vforked, hppa_require_attach, 
	    hppa_require_detach, process_wait
	  (unwind_table_entry): Added comments to describe struct fields.

	* config/pa/tm-hppah.h (somsolib.h): Include it.

	* config/pa/tm-hppah.h: 
	(CHILD_ENABLE_EXCEPTION_CALLBACK): New define
	(CHILD_GET_CURRENT_EXCEPTION_EVENT): New define

	* configure.host (hppa-*-hpux10.20, hppa-*-hpux11.0*): New configs.

	* configure.in (AC_CHECK_HEADERS): Add check for term.h.
	
	* configure.in: Add an --enable-tui argument.

	* configure.in: Construct tui/Makefile from tui/Makefile.in.

	* configure.in: Use AM_PROG_CC_STDC.  If we have the GUI, then we
	need this to process libgui.h.

	* convex-tdep.c (decout): Change FILE to GDB_FILE.

	* corefile.c: Include objfiles.h, symfile.h.
	(core_file_command): Attempt to determine the name of the symbol
	file from the core file.
	(read_memory_string): New function.
	
	* corefile.c (core_file_command): Temporary hack to make non-hpux
 	work. For, non-hpux, t->to_core_file_to_sym_file does not have a
 	reasonable value. No target_ops vector on the stack gives it a
 	non-zero value. fix later.

	* corelow.c (core_file_to_sym_file): Added new local variable,
 	failing command, and do some explicit type castings.
	(core_ops): Add three new fields: to_has_syscall_event,
	to_enable_exception_callback, to_get_current_exception_event.
 	Necessary since we still have oldstyle initialization in
	this file

	* corelow.c: Include unistd.h
	(core_file_to_sym_file): New function 
	(core_file_thread_alive): New function
	(core_ops): Added new target ops vector fields. see below. And
	  yes we definitiely need to initialize them here, as long as
	  we're using static initialization.

	* cxux-nat.c (add_shared_symbol_files): Additonal params for calls
 	to symbol_file_add.

	* defs.h (gdb_file_isatty): New function decl.

	* defs.h (GDB_FILE): If TUI is defined, define a structure rather
 	than making this an alias for FILE.
	(gdb_stdout, gdb_stderr): If TUI is defined, then define these
	as pointers to variables of type GDB_FILE rather than making them
	be aliases for stdout and stderr.

	* defs.h (TUIDO): Add definition conditionalized on definition
	(or lack thereof) of TUI.

	* defs.h (command_class): Add two additional values.
	(precision_type): New enum.

	* defs.h (gdb_fclose): Add declaration.

	* defs.h (store_address): Change prototype to match function.

	* defs.h (tui_version, xdb_commands, dbx_commands): Add decl's.

	* defs.h (gdb_file_deallocate): New function declaration

	* defs.h: 
	(streamtype): New enumerated type to distinguish between
	output to a FILE and output to a buffer.
	(tui_stream): New struct type, named GDB_FILE. Contains,
	 streamtype, FILE, buffer, and bufferlength fields.
	(gdb_stdout): Of type GDB_FILE, will pass this around gdb
	rather than stdout.
	(gdb_stderr): Of type GDB_FILE, will pass this around gdb
	rather than stderr.
	(fputs_unfiltered_hook): Change stream parameter from FILE to
	GDB_FILE
	(flush_hook): Change stream parameter from FILE to GDB_FILE
	(gdb_fclose): Fix declaration for gdb_fclose; parameter is now of 
	type GDB_FILE **
	(gdb_file_adjust_strbuf): New function declaration. function lives in
	utils.c.
	(gdb_file_init_astring): New function declaration. function lives
	in utils.c
	(gdb_file_get_strbuf): New function declaration. function lives
	in utils.c
	
	* defs.h: Additional include files included when TUI is defined.

	* defs.h: Funct decl source_full_path_of.

	* demangle.c: Add HP_DEMANGLING_STYLE_STRING.

	* demangle.c: Added new demangling style, EDG_DEMANGLING_STYLE_STRING,
	  to the demanglers structure. This is for support of 
	  Kuck & Assoc.'s changes for demangling.

	* eval.c (evaluate_subexp_standard): C++ member function changes.

	* eval.c (evaluate_subexp_standard): Verify TYPE_TARGET_TYPE is
	non NULL before dereferencing it.

	* eval.c (evaluate_subexp_standard): With HP/aCC compiler it is not possible
	to perform inferior calls via function pointers.
	Resolve calls to overloaded functions using find_overload_match.
	We cannot handle HP/aCC pointers to member functions.
	Deal with HP/aCC pointers to members in various kind of expressions.

	* f-lang.c (f_printchar): Change FILE to GDB_FILE.
	(f_printstr): Ditto.
	(emit_char): Ditto.

	* f-lang.c (f_printstr): Change stdout to gdb_stdout.
	
	* f-typeprint.c (f_print_type): Change FILE to GDB_FILE.
	(f_type_print_varspec_prefix): Ditto.
	(f_type_print_args): Ditto.
	(f_type_print_varspec_suffix): Ditto.
	(print_equivalent_f77_float_type): Ditto.
	(f_type_print_base): Ditto.

	* findvar.c (): Hp snapshot 3 changes.  (extract_address): Coerce
	return value from extract_unsigned_integer to CORE_ADDR.
	(store_address): Change val from CORE_ADDR to LONGEST; changes to
	support machines where CORE_ADDR and LONGEST are different sizes.
	(get_saved_register): Coerce arg to store_address to LONGEST.
	(read_relative_register_raw_bytes): Cast last arg to
	store_address to LONGEST.  (read_register): Cast return from
	extract_address to a CORE_ADDR.  (write_register_pid): Change val
	from LONGEST to CORE_ADDR.  (read_pc_pid): Save and restore
	inferior_pid if necessary.  (write_pc_pid): Ditto.
	(read_var_value): Cast arg to store_address.

	* findvar.c (read_relative_register_raw_bytes_for_frame): New
	function.
	(read_relative_register_raw_bytes): Call it.

	* findvar.c (symbol_read_needs_frame): Handle LOC_THREAD_LOCAL_STATIC and
	LOC_INDIRECT.

	* fork-child.c (fork_inferior): Chenge fifth parameter to be a
	function returning void.

	* fork-child.c (fork_inferior): Delete unused variable f.
	
	* fork-child.c: 
	(Startup_WITH_SHELL): New macro -- interim fix for a bug
	(breakup_args): New function -- breaks up an argument string into
	  an argument suitable for passing into execvp().
	(fork_inferior): Handling problems with starting up gdb with a shell.
	  -- again, this appears to be an interim fix.

	* fork-child.c: 
	(fork_inferior): Added a comment
	(clone_and_follow_inferior): New function. 
	(startup_inferior): Minor formatting changes.
	
	* fork-child.c: 
	(fork_inferior): Hp change is problematic. The -f option has 
	different meanings for different shells. It is particularly 
	inappropriate for bourne shells.

	* fork-child.c: 
	(fork_inferior): Added new parameter, pre_trace_fun.
	pre_trace_fun is a function pointer. For some targets,
	like HPUX, this function gets called to prepare for forking
	a child.

	* fork-child.c: 
	(fork_inferior): Fixed call to init_trace_fun

	* fork-child.c: 
	Moved definition of STARTUP_WITH_SHELL to inferior.h
	Added a DEBUGGING macro. Currently set to 0. May remove
	later.
	breakup_args: Add DEBUGGING ifdefs. more sophisticated 
	parsing to break up args.
	(fork_inferior): Rename kshell variable to shell. new local
	variable, tryname. Make use of STARTUP_WITH_SHELL macro. 
	More error processing if starting up with a shell.
	(startup_inferior): Distinguish between starting up with a shell 
	and not doing so. 

	* gdbthread.h: 
	Declarations for load_infrun_state and save_infrun_state take
	an additional parameter.

	* gdbthread.h: Note that sometime between gdb 4.16 and 4.17,
	    thread.h was renamed gdbthread.h
	  (load_infrun_state): Additional parameters
	  (store_infrun_state): Additional parameters
	
	* gdbthread.h: Include breakpoint.h
	
	* hp-psymtab-read.c (QUICK_LOOK_UP): Redefine to be 0.
	(hpread_build_psymtabs): Deal with enums.
	(hpread_start_psymtab): Include section offset.
	(hpread_end_psymtab): Take care of offset.
	
	* hp-psymtab-read.c (TRUE): Define.
	(FALSE): Define.
	(file_exists): New function. Checks for existance of file.
	(hpread_pxdb_needed): Rewrite.
	(hpread_quick_traverse): Use correct demangling style.
	Handle F77 case.
	(hpread_get_header): Rewrite.
	(hpread_get_textlow): Add support for DOC_FUNCTION.
	(hpread_build_psymtabs): Make sure we do the right thing
	for pxdb and F77.

	* hp-psymtab-read.c (hpread_pxdb_check): Change parenthesis positions.

	* hp-psymtab-read.c (hpread_quick_traverse): Compare CORE_ADDR
	variable end_addr to 0 instaed of NULL to get rif of gcc warning.

	* hp-psymtab-read.c: 
	(Hpread_get_textlow): Added param to function 
	Defined convennience macros and some datatypes and variables for 
	processing the quick lookup-tables. Looks like the code existed
	before, but has been munged.
	(hpread_pxdb_needed): Major rearrangements of code. Additional local
	variables. Also, more extensive checking for various scenarios:
	debug info for optimized code vs. unoptimized code, pxdb has been
 	run vs. pxdb has not been run.
	(VALID_FILE): New macro
	(VALID_MODULE): New macro
	(VALID_PROC): New macro
	(VALID_CLASS): New macro
	(FILE_START): New macro
	(MODULE_START): New macro
	(PROC_START): New macro
	(FILE_END): New macro
	(MODULE_END): New macro
	(PROC_END): New macro
	(FILE_ISYM): New macro
	(MODULE_ISYM): New macro
	(PROC_ISYM): New macro
	(VALID_CURR_FILE): New macro
	(VALID_CURR_MODULE): New macro
	(VALID_CURR_PROC): New macro
	(VALID_CURR_CLASS): New macro
	(CURR_FILE_START): New macro
	(CURR_MODULE_START): New macro
	(CURR_PROC_END): New macro
	(CURR_FILE_ISYM): New macro
	(CURR_MODULE_ISYM): New macro
	(CURR_PROC_ISYM): New macro
	(TELL_OBJFILE): New macro
	(pst_syms_struct): New typedef to keep track of the start/end symbol
	table (LNTT) indices of psymtabs created so far.
	(pst_syms_count): New variable
	(pst_syms_size): New variable
	(told_objfile): New variable 
	(init_pst_syms): New function. sets up psymtab symbol index stuff.
	(clear_pst_syms): New function. clean up psymtab symbol index stuff.
	(record_pst_syms): New function. add info about newest psymtab to symbol 
	index table.
	(find_next_pst_start): New function. Find a suitable symbol table index.
	(find_next_file_isym): New function
	(find_next_proc_isym): New function
	(find_next_module_isym): New function
	(scan_procs): New function. Scan and record partial symbols for all 
	functions starting from specified index and in a specified code range.
	(hpread_quick_traverse: Major rearrangement of code. The function
	now uses all the nifty macros. There are some new local variables.
	Check for EDG_DEMANGLING style. ifdef out some code for handling F77.
	Previously, the function looped over all the modules in the table.
	Now, the function loops over all the files, modules, and procedures.
	With HP aCC and CTTI, it is possible for a compiled object to have a 
	file and no module.
	(hpread_build_psymtabs): Added a section of code ifdefed by 
	QUICK_LOOK_UP. It check to see whether or not there are any globals 
	in the executable. Fix number of params to hpread_start_psymtab call.
	Some changes to the way DNTT_TYPE_MODULE is handled.
	(hpread_get_textlow): Change in signature, minor code changes. The 
	function finds the low address associated with a specified symbol.
	In looking for the address for the symbol avoid going of the end of
	the LNTT file.

	* hp-psymtab-read.c: Change TRUE to 1 and FALSE to 0. Do some
 	reformatting.

	* hp-psymtab-read.c: Include demangle.h
	(trans_lang): New function to let gdb know the correct language.
	(hpread_quick_traverse): Use ARM style demangling.
	Demangle procedures names. 
	Use gdb language names instead of hp language names.
	Add symbol to list using its demangled name.

	* hp-psymtab-read.c: New file.
	(hpread_call_pxdb): New function. Call PXDB to process our file.
	(hpread_pxdb_check): New function. Return TRUE if the file needs 
	pre-processing by PXDB and we have thus called PXDB to do this 
	processing and the file needs to be re-loaded.
	(hpread_quick_traverse): New function. Traverse the quick look-up 
	tables, building a set of psymtabs.
	(hpread_get_header): New function. Get appropriate header from obj
	file, based on pxdb type
	(hpread_symfile_init): No change from hpread.c
	(hpread_build_psymtabs): If there are quick lookup tables, read those,
 	then scan the global section LNTT. Otherwise, just scan the whole LNTT.
	Changed: Add a global function entry to the global partial symbol list.
	Handle end of symbols, for QLT case.
	In case of TAGDEF, if it is a class or a template, add the name to the
	var_namespace, so that it is known as a type by gdb.
	In case of CONSTANT, and it is global, add it to the globals.
	(hpread_symfile_finish): No change from hpread.c
	(hpread_get_lntt): Make it not static
	(hpread_get_gntt): No change from hpread.c
	(hpread_get_slt): Make it not static
	(hpread_get_textlow): No change from hpread.c
	(hpread_start_psymtab): No change from hpread.c
	(hpread_end_psymtab): No change from hpread.c

	* hp-symtab-read.c (hpread_get_scope_start): Renamed. It was
	hpread_get_depth.
	(hpread_type_translate): Distinguish between signed and unsigned char
	types.
	(hpread_psymtab_to_symtab): Set flag for hp compilation.
	(hpread_read_function_type): Append symbols for parameters to local 
	list as well as	to the global list. Get the parameters types from the
	local list instead of the global list.
	(hpread_read_struct_type): Add new field num_fn_fields to next_fn_field
	structure. Rewrite handling of templates
	(hpread_type_lookup): Change handling of dntt_type_modifier.
	(hpread_process_one_debug_symbol): Call hpread_get_scope_start instea
	of hpread_get_depth. Handle enum as well.
	(hpread_get_scope_depth): New function. Get nesting depth for a 
	DNTT entry.

	* hp-symtab-read.c (hpread_psymtab_to_symtab): Set 
	processing_gcc_compilation to 0.
	
	* hp-symtab-read.c (hpread_psymtab_to_symtab_1): Change stdout to
 	gdb_stdout; change fflush to gdb_flush.
	(hpread_psymtab_to_symtab): Change fflush to gdb_flush.

	* hp-symtab-read.c (hpread_read_enum_type): Declare variable.
	(hpread_read_struct_type): Eliminate references 
	to 'args' member of fn_field.

	* hp-symtab-read.c (hpread_read_struct_type): A static member
	is now indicated by the bitsize field, not the bitpos.
	Initialize physname to empty.
	(fix_static_member_physnames): Use new macros to deal with
	physnames.

	* hp-symtab-read.c (hpread_read_struct_type): Change references
	to bitpos member of struct field to use the FIELD_BITPOS macro.

	* hp-symtab-read.c (hpread_read_struct_type): Comment out reference to
	obsolete field fn_field.args.
	Add struct complaint definitions for complaints.
	(hpread_read_struct_type): Change call to complain.
	(hpread_read_array_type): Change call to complain. 
	(hpread_type_lookup): Change call to complain.
	(hpread_process_one_debug_symbol): Change calls to complain.
	(hpread_type_translate): Change calls to complain.
	
	* hp-symtab-read.c (hpread_read_struct_type): Make sure bitvector
	has been allocated before calling has_vtable.

	* hp-symtab-read.c (hpread_read_struct_type): Revert change, 
	just check for vtable without checking for bitvectors too.

	* hp-symtab-read.c: 
	(Hpread_expand_symtab): Change name of local variable from
	at_end_of_module to at_module_boundary. 
	Also, if demangling style is already EDG, do not reset it 
	to the HP demangling style.
	Change at_end_of_module param to hpread_process_one_debug_symbol
	call to at_module_boundary.
	No longer break out of loop when reach end of module. With CTTI,
	the compiler can generate function symbols which are not in 
	any module. Typically they show up after the end of one
	module and before the start of the next module.
	(hpread_read_struct_type): Check that the debug info for 
	a TEMPLATE_ARG is correct.
	(hpread_process_one_debug_symbol): Change name of at_end_of_module_p
	param to at_module_boundary_p. 
	Also set *at_module_boundary_p = -1 if missing a module end and set 
	it to 1 when finished expanding the debug info.
	Handle TLS variable.

	* hp-symtab-read.c: Include defs.h, symtab.h, gdbtypes.h, complaints.h.
	(fixup_class): New static variable.
	(fixup_method): New static variable.
	(hpread_get_location): Rewrite.
	(hpread_has_name): Add cases for DNTT_TYPE_DOC_FUNCTION and 
	DNTT_TYPE_DOC_MEMFUNC
	(hpread_expand_symtab): Use HP demangling style. 
	Set hp_som_som_object_present to 1.
	(hpread_type_translate): Error out if not immediate. Issue warning
	if there is an unhandled type code.
	(error_in_hpread_type_translate_complaint): Remove this structure.
	(hpread_read_enum_type): Don't assume size of enum is always 4 bytes.
	(hpread_read_function_type): Add new parameter to indicate a new block.
	Do not add the parameters to the symbol list.
	If the type was read in earlier, do not modify the type structure.
	If we are creating a new block, set the local symbol list to be the
	param list.
	Need to mark this type as preprocessed.
	(hpread_read_doc_function_type): New function. Read and internalize 
	a native DOC function debug symbol.
	(hpread_read_struct_type): A method can be of type doc_function and
	doc_memfunc too.
	Handle case in which a method is read before its class. Deal with 
	incomplete method types.
	Handle cases in which HP/aCC compiler creates operator names w/o
	the 'operator' keyword. Rewrite the loop over the fileds.
	(fix_static_member_physnames): New function. Adjust the physnames for 
	each static member.
	(fixup_class_method_type): New function. Fix-up the type structure for a 
	class.
	(hpread_read_array_type): Change complaint to warning.
	(hpread_type_lookup): Add case for DNTT_TYPE_DOC_FUNCTION.
	For structures/classes set static member to point to strings with full
	names.
	Change calls to hpread_read_function_type to pass extra parameter.
	(hpread_record_lines): Handle case for SLT_NORMAL_OFFSET.
	(class_of): New function. Given a function "f" which is a member of a class,
 	find the classname that it is a member of.
	(hpread_process_one_debug_symbol): Deal with possible alias field from the
	som record for the Function or Entry type.
	Do the demangling ourselves if the gdb demangler failed.
	Add support for DOC functions.
	For function types, add parameters to local list.
	(hpread_get_scope_depth): Make this function a no-op.
	(hpread_adjust_bitoffsets): New function. Adjust the bitoffsets for all 
	fields of an anonymous union.
	(hpread_get_next_skip_over_anon_unions): New function. Skip over anonymous 
	unions.

	* hp-symtab-read.c: Include demangle.h
	(hpread_expand_symtab): Ensure we are using ARM-style demangling.
	(hpread_process_one_debug_symbol): Set the mangled and demangled 
	names for functions.
	Record the class name to generate the demangled names of member 
	functions.

	* hp-symtab-read.c: New file.
	(hpread_get_depth): No change from hpread.c
	(hpread_get_line): No change from hpread.c
	(hpread_get_location): No change from hpread.c
	(hpread_has_name): Make it not static. Return 1 for DNTT_TYPE_BLOCKDATA
	and DNTT_TYPE_MEMFUNC. Return 0 for CLASS_SCOPE, REFERENCE,PTRMEM,
 	PTRMEMFUNC, CLASS, GENFIELD, VFUNC, MEMACCESS, INHERITANCE, 
	FRIEND_CLASS, FRIEND_FUNC, MODIFIER, OBJECT_ID, TEMPLATE, TEMPLATE_ARG,
 	FUNC_TEMPLATE, LINK.
	(hpread_psymtab_to_symtab_1): No changes from hpread.c
	(hpread_psymtab_to_symtab): Make it a static function
	(hpread_expand_symtab): Modified
	(hpread_type_translate): If not typep.dntti.immediate do not abort, 
	but complain and return. Same for default action. Handle more HP_TYPEs.
	(hpread_lookup_type): Initially allocate a correct-size type-vector.
	(hpread_alloc_type): Reset type_addr only if a type was allocated.
	(hpread_read_enum_type): If this has already a type associated, return.
	(hpread_read_function_type): Do different things depending on whether 
	function is a MEMFUNC, a TEMPLATE, a FUNCTION som record.
	Do not use the LOC_REGPARM_ADDR symbol class.
	(hpread_read_struct_type): Handle classes and templates too. Major 
	rewrite.
	(hpread_get_nth_template_arg): New function. 
	(hpread_read_templ_arg_type): New function.
	(hpread_read_set_type): No change from hpread.c
	(hpread_read_array_type): Modified
	(hpread_read_subrange_type): Add handling of more DNTT entries.
	added support for templates, classes, references, virtual functions.
	(hpread_type_lookup): Handle DNNT_TYPE_MODULE.
	(hpread_record_lines): No changes from hpread.c
	(hpread_process_one_debug_symbol): Handle WITH, COMMON, 
	CLASS_SCOPE. Expand TAGDEF case to handle classes and templates.

	* hppa-tdep.c (pa_do_strcat_registers_info): Has a new parameter,
 	precision, which is passed into the call to pa_strcat_fp_reg to
 	indicate whether to display the floating point registers using
 	single or double preceision.
	(pa_strcat_registers): Introduce local variable, precision, and 
	pass it into call to pa_strcat_fp_reg.
	(pa_strcat_fp_reg): Modified function. New parameter, precision,
	used by function to decide whether to use single or double
	precision. Also added the code to put a double precision value
	into a buffer.

	* hppa-tdep.c: Add'l includes <machine/save_state.h>,
 	<unistd.h>, declare pa_register_look_aside, define is_pa_2.
	(rp_saved): Check for where to read the return pointer from.
	(pa_do_registers_info): Handle is_pa_2. (pa_register_look_aside):
 	new function. (pa_print_registers): Handle is_pa_2.
  	(in_solib_call_trampoline): Handle a compiler/linker error.
	(skip_trampoline_code): Changes to some masks used in examining
	instructions.  (inst_saves_fr): Test for FSTWS instruction.
	(skip_prologue): Renamed to skip_prologue_hard_way.
	(after_prologue): New function.  (skip_prologue): New function.

	* hppa-tdep.c (after_prologue): If f is NULL, don't dereference
	it.

	* hppa-tdep.c (after_prologue): If no debug info, return zero
	telling caller that we need to find the end of the prologue via
	the hard way (instruction examination).

	* hppa-tdep.c (find_unwind_entry): Avoid dereferencing a null
	pointer.

	* hppa-tdep.c (hppa_pid_to_exec_file): Deleted -- no longer used.

	* hppa-tdep.c (hppa_prepare_to_proceeed): Add prototype.
	(read_unwind_info): Purecov comments, bug fixes.
	(find_unwind_entry): Purecov comments, bug fixes.
	(find_stub_with_shl_get): Purecov comments.
	(frame_chain): Additional parens.
	(hppa_push_arguments): Changes to commented out version of routine.
	(hppa_fix_call_dummy): Purecov comments, fix location of end.o.
	(in_solib_call_trampoline): Purecov comments.
	(in_solib_return_trampoline): Purecov comments.
	(setup_d_pid_in_inferior): Fix location of end.o.
	(initialize_hp_cxx_exception_support): Fix location of end.o.
	(child_enable_exception_callback): Purecov comments.

	* hppa-tdep.c: 
	(Pa_do_strcat_registers_info): New routine. called by 
	tui/tuiRegs.c:_tuiRegisterFormat to place a register name 
	and value into a string buffer. Interface may change in
	future. Checking this in so that we have something 
	functional for HP.
	(pa_strcat_registers): New routine, called by 
	pa_do_strcat_registers_info. Does same thing as 
	pa_print_registers except it takes a stream parameter. 
	This routine should disappear in future. Checking in
	so that we have something functional to give HP
	(pa_strcat_fp_reg): New routine, called by 
	pa_do_strcat_registers_info and pa_strvat_registers
	to place a floating point register name and value into
	a buffer. This interface may change in future. 
	Checking in so that we have something functional to give HP.

	* hppa-tdep.c: (Pa_print_fp_reg): Change prototype to match def'n.
	(pa_register_look_aside): Fix comment immediately before function.

	* hppa-tdep.c: Changes to better support stack unwinding, 
	    reading and writing registers for HPUX. The HP folks had
	    an advantage ... access to a runtime architecture spec ;-}.
	  New includes: Ptrace.h
	  (internalize_unwinds): Initialize new fields in table.
	  (read_unwind_info): Entries in the table are now more complex
	    structures. References of the form ...->table[index].stub_type
	    are now ...->table[index].stub_unwind.stub_type.
	  (find_proc_framesize): Added a check for pc == 0.
	  (rp_saved): Entries in the table are now more complex
	    structures. References of the form ...->table[index].stub_type
	    are now ...->table[index].stub_unwind.stub_type.
	  (frameless_function_invocation): Stub_type becomes
 	    stub_unwind.stub_type
	  (saved_pc_after_call): Stub_type becomes stub_unwind.stub_type
	  (hppa_frame_saved_pc): Stub_type becomes stub_unwind.stub_type
	  (frame_chain_valid): Stub_type becomes stub_unwind.stub_type
	  (hppa_call_dummy): Stub_type becomes stub_unwind.stub_type
	  (pa_print_fp_reg): Additional params to call val_print
	  (in_solib_call_trampoline): Stub_type becomes stub_unwind.stub_type
	  (in_solib_return_trampoline): Stub_type becomes stub_unwind.stub_typ
	  (skip_trampoline_code): Additional code to handle external
	     dyncalls. Also stub_type becomes stub_unwind.stub_type
	  (hppa_pid_to_exec_file): New funct. FOr HPUX 10.0 and beyond there
	     is an explicit ptrace request for getting the pathname associated
	     with a process id (pid).
	
	* hppa-tdep.c: Fix for gcc compile on HPUX
	  (hppa_pid_to_exec_file): Remove unwanted param from 
	     call to call_ptrace. Note, hppa_pid_to_exec_file goes
	     away in subsequent hp snapshots.

	* hppa-tdep.c: Include bfd.h.
	include dl.h
	(args_for_find_stub): New structure.
	(find_unwind_entry): Deal with null input pc value.
	(rp_saved): Ditto.
	For the import stub, return -24 always.
	(hppa_frame_saved_pc): Save old pc value, to detect we are in a loop.
	(init_extra_frame_info): Use TARGET_READ_FP.
	(frame_chain): Include thread support.
	If the caller's pc is zero, we loose and return, just like stack bottom.
	Disable warning about being unable to find unwind info.
	(hppa_push_arguments): Rewrite.
	(hppa_value_returned_from_stack): New function. Handles returning a value
	larger that 64 bits, stored on the stack.
	(find_stub_with_shl_get): New function. To look up symbols in shlibs.
	(cover_find_stub_with_shl_get): New function. Cover routine for 
	find_stub_with_shl_get to pass to catch_errors.
	(hppa_fix_call_dummy): Comment out old stub mechanism. Rewrite using dyncall.
	(target_read_fp): New function.
	(pa_do_registers_info): Floating point registers start at FP4.
	(pa_print_registers): Use FP4_REGNUM instead of 72.
	(skip_trampoline_code): Do machine instruction matching for PA2.0.
	(setup_d_pid_in_inferior): New function. Exception handling support.
	(initialize_hp_cxx_exception_support): Ditto.
	(child_enable_exception_callback): Ditto.
	(child_get_current_exception_event): Ditto.

	* hppah-nat.c (child_post_wait, child_post_follow_vfork,
 	child_post_follow_inferior_by_clone): New functions.

	* hppah-nat.c (child_xfer_memory): Make sure the call to ptrace really
	fails before we give up.
	(hppa_pid_to_str): New function. Format a process id.
	(hppa_tid_to_str): New function. Format a thread id. 

	* hppah-nat.c (child_xfer_memory): Use xmalloc, not alloca.
	(child_post_wait): Delete.
	(child_post_follow_vfork): Delete decl of child_ops; delete
	large chunks of function -- let it be handled by the normal
	mechanism that notices and handles exec events, in resume().

	* hppah-nat.c (require_notification_of_exec_events): New function;
	just notify of exec events, not all events, and just the specified
	pid, don't include it's children (10.20 version).
	(child_acknowledge_created_inferior): Call new function
	require_notification_of_exec_events instead of
	require_notification_of_events.
	
	* hppah-nat.c [!GDB_NATIVE_HPUX_11]: Move HPUX 10.x-specific
 	support code here from infptrace.c.

	* hppah-nat.c: Removed #define ptrace call_ptrace
	replaced all calls to ptrace with calls to call_ptrace
	(parent_attach_all): Removed call to ptrace

	* hpread.c (hpread_psymtab_to_symtab_1): Change fflush to
	gdb_flush; change stdout to gdb_stdout.
	(hpread_psymtab_to_symtab): Change fflush to gdb_flush.
	
	* hpread.h: New file. Includes all includes, struct defs, defines
 	from hpread.c. 

	* infcmd.c 
	(attach_command): New local variable, exec_file, added code to
 	  determine exec_file from pid if exec_file is not already known,
	  call new target operation, target_post_attach -- a no-op unless
	  on HPUXHPPA
	(detach_command): After detaching, do a SOLIB_RESTART

	* infcmd.c (objfiles.h): Fix typo on include line.

	* infcmd.c (run_command): Only call SOLIB_RESTART if it's
	defined.
	(detach_command): Ditto.

	* infcmd.c: 
	(run_stack_dummy): Add calls to 
	disable_watchpoints_before_interactive_call_start and
	enable_watchpoints_after_interactive_call_stops
	(finish_command): Alter code handling the evaluation and printing
	of the target function's return value.
	(attach_command): When given a pid, but no exec file, try to determine
	the exec file from the process. If the process does not record a 
	full path name, try to qualify the filename against the source path.
	(_initialize_infcmd): Add some verbiage about how to use the attach command

	* infcmd.c: 
	Include objfiles.h
	(run_command): If program has already been started, and decide
	to restart it, then kill the target, flush the caches, 
	call init_wait_for_inferior. Also purge old solib objfiles.

	* infcmd.c: Changed calls to val_print, using a new macro,
	  SOLIB_RESTART
	  (run_command): Calls SOLIB_RESTART
	  (do_registers_info): Changed calls to val_print

	* infcmd.c: Made the symfile.h include preceed the 
	objfiles.h include. The other ordering caused a 
	compile problem (incompletely defined types).

	* inferior.h (REQUIRE_DETACH): Fix default definition.
	* inftarg.c (child_post_attach): Fix declaration, make static.
	(proc_wait): Make globally visible.
	(child_insert_fork_catchpoint, etc): Fix return type.

	* inferior.h (STARTUP_WITH_SHELL): New define.
	(START_INFERIOR_TRAPS_EXPECTED): New define

	* inferior.h (fork_inferior): Change fifth parameter to be a function 
	returning void. 

	* inferior.h (proc_wait): Declare.

	* inferior.h: 
	  (Require_ATTACH): New macro
	  (REQUIRE_DETACH): New macro
	  (detach): Definition is now an extern
	  (clone_and_follow_inferior): New definition, it's also an extern

	* inferior.h: 
	  (Require_attach): Default definition for require_attach funct
	  (require_detach): Default definition for require_detach funct
	  (pre_fork_inferior): New funct decl for function defined in
	   infptrace.c
	  (fork_inferior): New parameter in funct decl.

	* inferior.h: 
	  New variable decls: Inferior_ignoring_startup_exec_events,
	    inferior_ignoring_leading_exec_events -- these variables 
	    are used when processing an exec call.
	  (CALL_DUMMY_HAS_COMPLETED): New default macro -- for targets
	    where PC in call dummy implies that call dummy has 
	    completed. Note, that on HPUX this inference does not hold.

	* infptrace.c
	  (require_notification_of_events): New function
	  (child_acknowledge_created_inferior): Previously named
	     hppa_acknowledge_forked_child. Also calling 
 	     require_notification_of_events and clearing some semaphore 
	     variables
	  (child_post_startup_inferior): New function
	  (child_create_catch_fork_hook): Previously named
	     hppa_create_catch_fork_hook
	  (child_create_catch_vfork_hook): Previously named
	     hppa_create_catch_vfork_hook 
	  (child_has_forked): Previously named hppa_target_has_forked
	  (child_has_vforked): Previously named hppa_target_has_vforked
	  (process_wait): Changed to call target_post_wait
	  (attach): Add call to require_notification_of_events
	  (child_pid_to_exec_file): New function
	  (hppa_require_attach): New local variable, pt_status
	  (hppa_get_process_events): New function

	* infptrace.c (call_ptrace): Simplify control flow.
	(proc_wait): Move here from inftarg.c, add target_post_wait call.

	* infptrace.c (call_ptrace): Add some debugging code.

	* infptrace.c (child_pid_to_exec_file): Declare variable.

	* infptrace.c (kill_inferior): Clean up call to proc_wait.

	* infptrace.c: 
	(Call_ptrace): When the ptrace request is PT_SETTRC,
	call ptrace and then call parent_attach_all.

	* infptrace.c: 
	(Child_has_syscall_event): New function. only applicable
	(for now) on HPUX 10.30 and beyond via the ttrace call.
	In infptrace.c there is a default operation.
 	With ttrace, it is possible to tell the kernel to
	notify the debugger that the target program is about to make
	or return from a syscall.
	(child_thread_alive): New function. a default function.
	ptrace doesn't support kernel threads.
	(hppa_enable_page_protection_events): Defualt function
	(hppa_disable_page_protection_events): Default function

	* infptrace.c (child_pid_to_exec_file): Fix number of params to
 	cal_ptrace call.

	* infptrace.c (hppa_pid_or_tid_to_str): New function.
	(hppa_switched_threads): New function.
	(hppa_ensure_vforking_parent_remains_stopped): New function.
	(hppa_resume_execd_vforking_child_to_get_parent_vfork): New function.

	* infptrace.c: Most of the changes found in infptrace.c should
	    be moved to hppah-nat.c
	  (PT_VERSION): A new define
	  (startup_semaphore_t): A new struct type. it is used to 
	    coordinate the parent and child processes after a fork and 
	    before an exec on HPUX.
	  (call_ptrace): Changes to determine whether the ptrace
	    request is for starting the tracing of the target process.
	  (parent_attach_all): New funct. used on HPUX for coordinating
	    the parent and child processes after a fork and before and exec.
	  (hppa_acknowledge_forked_child): New funct. prabably belongs 
	    in hppah-nat.c
	  (hppa_enable_catch_fork): New funct. probably belongs in 
	    hppah-nat.c
	  (hppa_disable_catch_fork): New funct. probably belongs in
	    hppah-nat.c
	  (hppa_create_catch_fork_hook): New funct. probably belongs in 
	    hppah-nat.c
	  (hppa_enable_catch_vfork): New funct. probably belongs in 
	    hppah-nat.c
	  (hppa_disable_catch_vfork): New funct. probably belongs in
	    hppah-nat.c
	  (hppa_create_catch_vfork_hook): New funct. probably belongs to
	    hppah-nat.c
	  (hppa_target_has_forked): New funct. probably belongs in 
	    hppah-nat.c
	  (hppa_target_has_vforked): New funct. probably belongs in
	    hppah-nat.c
	  (process_wait): New funct. also ifdefed for proc_wait.
	  (kill_inferior):  Call proc_wait rather than wait. this is 
	    pretty hacky. 
	  (pre_fork_inferior): New function. used only by HPUX.
	    probably should be defined elsewhere.

	* infrun.c (follow_inferior_fork): Only define on HP.
	(wait_for_inferior): Only call SOLIB_IN_DYNAMIC_LINKER if we have
	shared libraries; restore test of IN_SOLIB_DYNSYM_RESOLVE_CODE
	removed by HP.

	* infrun.c (normal_stop): Add a call to the TUIDO 
	macro just before the annotate_stopped label. This
	updates the windows after each program stop.

	* infrun.c (normal_stop): Verify stop_command is non-zero before
	dereferencing it (it won't be set if dbx_commands is set).

	* infrun.c (resume): Add #ifdef HPPAHPUX around HPUX-specific
	code.

	* infrun.c (resume): Add missing semicolon.

	* infrun.c (wait_for_inferior): Fix syntax error.

	* infrun.c (follow_fork_mode_kind_names): Removed "both" option.
	(follow_fork): Added parameters. additional code for handling
	following of parent, following of child
	(resume): Added code for deciding how to resume in presence of
	fork. Additional params to follow_fork call.

	* infrun.c (follow_exec): Ifdef for HPUXHPPA for the moment, the
 	code in here assumes the existance of the child_ops target
 	vector. This is incorrect for Solaris.

	* infrun.c (resume): Fixed ifdefs, HPPAHPUX -> HPUXHPPA.

	* infrun.c (wait_for_inferior): Fixed a matching parens problem --
 	matching curly brace inside ifdefed code which is not being
 	compiled. Change local validFlag to be an 'int' rather than a
 	'bool' and fixed the corresponding assignment statements.

	* infrun.c: 
	Two new global variables: Inferior_ignoring_startup_exec_events and
	inferior_ignoring_leading_exec_events.
	New static variables: Parent_of_vfork_trap_expected_and_ignorable,
	step_resume_breakpoint, through_sigtramp_breakpoint, pending_follow,
	follow_vfork_when_exec
	(follow_inferior_fork): Does what follow_fork did! 
	(follow_fork): Is now a wrapper function for follow_inferior_fork
	(follow_vfork): Is now a wrapper function for follow_inferior_fork
	(follow_exec): New function, handles an exec event.
	(resume): Remove 3 local variables: Child_pid, has_forked, has_vforked.
	move and expand code that tries to follow a fork (i.e. also check
 	for vfork and exec
	(init_wait_for_inferior): Initialize the new structure, pending_follow
	(delete_breakpoint_current_contents): When deleting all the breakpoints also 
	set the breakpoint struct pointer to NULL.
	(wait_for_inferior): A number of changes.
 	The step_resume_breakpoint and through_sigtramp_breakpoint local 
	variables are now visible in entire module. 
	Changed name of variable from child_inferior_pid to saved_inferior_pid.
	Added several cases to the event processing switch statement: 
	Target_WAITKIND_FORKED, TARGET_WAITKIND_VFORKED, TARGET_WAITKIND_EXECD.
	Also, for TARGET_WAITKIND_STOPPED, check to see if expecting a trap
	from the parent of a vfork (ignorable) otherwise break as usual.
	When determining the value of 'random_signal' (0 or 1), no longer check for 
	catchpoints. 
	When determining how to handle unexpected signals, must now take into
	account fork, vfork, and exec.
	Change call to PC_IN_CALL_DUMMY to a call to CALL_DUMMY_HAS_COMPLETED
	At stop_stepping label, check to see if stopped for fork or
	vfork event.

	* infrun.c: New code is related to threads and fork/vfork/exec.
 	New static variable: Thread_step_needed
	Deleted static variable: Parent_of_vfork_trap_expected_and_ignorable
	Altered the pending_follow and fork_event structs
	(follow_inferior_fork): Before detaching from child and removing
	all breakpoints form it -- but only if forking or following 
 	vforks as soon as they happen. Also reset the solib inferior hook.
	The same kind of logic applies to hitting step_resume_breakpoints
	(calling breakpoint_re_set_thread) and to resetting and inserting 
	breakpoints. 
	(follow_exec): Forward decl
	(follow_vfork): Check to see if gdb followed the child. If
	the child exec'd before gdb saw the parent's vfork event
	then call follow_exec.
	(follow_exec): If the exec occured after a vfork, then follow
	the vfork as well. Do it before following the exec.
	Make sure to update breakpoints after and exec
	(resume): New local variable, should_resume. 
	Change parameters in calls to follow_fork, follow_vfork, and 
	follow_exec. Some changes to the way various pending_follow.kind
	situations are handled (there's TARGET_WAITKIND_FORKED, 
	TARGET_WAITKIND_VFORKED, ARGET_WAITKIND_EXECD. Some additional
	conditions to check before deciding to resume the target (i.e.
	should_resume=1, stepping?, thread_step_needed?i, regular 
	resume?)
	(proceed): When proceeded at location that does not have a breakpoint
	set thread_step_needed=0 to indicate that it is not necessary to
	single step thread over breakpoint. SOme additional checks to see
	if it is necessary to step thread over breakpoint.
	(start_remote): Remove call to clear_proceed_status.
	(init_wait_for_inferior): Initialize new fields in fork_event
	structure and add a call to clear_proceed_status.
	(wait_for_inferior): New local variable: New_thread_event.
	Initialize thread_step_needed = 0. 
	Minor massaging of conditions for adding a new thread to the thread list. 
	No longer resuming execution after adding a new thread. Let user play with thread first.
	Some changes in the way TARGET_WAITKIND_FORKED, ARGET_WAITKIND_VFORKED,
	TARGET_WAITKIND_EXECD are handled -- this is all HPUX related. 
	Simplified TARGET_WAITKIND_STOPPED -- HP previously had some
	more complicated code in here. 
	Moved the code to resume threads to after the large case statement that processes the events.
	Additional processing for stop_signal=TARGET_SIGNAL_TRAP. 
	Cleanup code at process_event_stop_test label. 
	Set thread_step_needed when processing a BPSTAT_WHAT_SINGLE.
	Minor massaging of fork/vfork/exec part of stop_stepping code.
	(normal_stop): Minor changes. calling show_and_print_stack_frame.
	(xdb_handle_command): New function
	(_initialize_infrun): Handle xdb_commands. also handle dbx commands

	* infrun.c: Changes to support following forks, and handling
	    catchpoints.
	  (follow_fork_mode_kind_names): New array
	  (follow_fork): New function. implements the follow parent,
	    or child functionality.
 	  (resume): Additions to check whether the target process 
	    just forked and decide which process to follow.
	  (wait_for_inferior): Additional variables (child_inferior_pid,
	      stepping_through_solib_after_catch, 
	    -  stepping_through_solib_catchpoints.
	    -  Altered CURRENTLY_STEPPING macro to check for stepping through
	       a shared library after hitting a catchpoint.
	    - Add parameters to save_infrun_state call
	    - Check for fork and vfork when deciding if event is a random
	       signal
	    - When considering stops due to breakpoints, check for 
	      BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK
	    - Check for stop due to an explicit catchpoint
	    - When checking for single stepping event, also check for
	      stepping to get out of dynamic linker's hook after catching
	      a shlib event
	  (is_internal_shlib_eventpoint): New funct. check to see if 
	      event type is bp_shlib_event.
	  (stopped_for_internal_shlib_event): New funct. check for shlib
	      events
	  (stopped_for_shlib_catchpoint): New funct. check for catchpoints.
	  (normal_stop): Additions to check for shlib event
	  (set_follow_fork_mode_command): New funct. handles the new follow
	      fork command.
	  (_initialize_infrun): Additions for follow-fork-mode command.

	* infrun.c: Ifdefing references to 
	switched_from_inferior_pid for HPUXHPPA. They don't seem 
	useful for Solaris (i.e. non-HPUX)

	* infrun.c: Included tuiData.h and tuiDataWin.h, ifdefed for TUI.
	Included top.h. New static variables: Switched_from_inferior_pid, 
	number_of_threads_in_syscalls. 
	(follow_inferior_fork): If there is a step_resume breakpoint
	explicitly reset the thread number. 
	(resume): For TARGET_WAITKIND_VFORKED, removed a check for getting 
	the vfork event to soon.
	(init_wait_for_inferior): Added parameter to call to 
	breakpoint_init_inferior. Initialize number_of_threads_in_syscalls.
	(wait_for_inferior): New local variables: Prev_sal,
	enable_hw_watchpoints_after_wait, stepping_through_sigtramp,
	stepped_after_stopped_by_watchpoint. Enable watchpoints after a wait.
	Added cases for TARGET_WAITKIND_SYSCALL_ENTRY and 
	TARGET_WAITKIND_SYSCALL_RETURN.
	Do additional processing if stop due to breakpoint, but breakpoint is
	only valid for a thread other than the one currently running. Additional
	parameters to save_infrun_state and load_infrun_state. Some additional
	processing for BPSTAT_WHAT_STEP_RESUME. Some additional processing to 
	handle stepping over a function.
	(normal_stop): Added notification of switching threads. ifdefing some
	TUI changes and leaving out non-essential TUI changes.
	(restore_selected_frame): Ifdefing some TUI changes
	(restore_inferior_status): Ifdefing some TUI changes

	* infrun.c: Removed the TUI ifdefs and TUI code. Also removed
	include for top.h. HP introduced this. I'm taking it out.

	* inftarg.c (child_detach_from_process): Declare.
	(child_attach_to_process): Declare.
	(child_stop): Make static to match declaration.

	* inftarg.c (ptrace_him): Change prototype back to return int. 

	* inftarg.c (ptrace_me): Remove debug output, pass NULL to
	fork_inferior if not HPUX.

	* inftarg.c: 
	  (child_require_attach): New funct prototype and definition
	  (child_require_detach): New funct prototype and definition
	  (proc_wait): Funct prototype and definition are enclosed by
	    proc_wait ifndef
	  (child_attach_to_process): New function, does most of the 
	    work that child_attach used to do and some additional 
	    work to determine whether gdb is already attached to the
	    target how to react.
	  (child_attach): Altered. It's now a wrapper for
	    child_attach_to_process.
	  (child_require_attach): New function, called if should attach
	    even when gdb is already attached to target.
	  (child_detach_from_process): New function, does most of the 
	    work that child_detach used to do and some additional work
	    to determine whether gdb is currently attached to the target.
	  (child_detach): Altered. It's now a wrapper for 
	    child_detach_from_process.
	  (child_require_detach): New function, called if should try to 
	    detach even when gdb is not attached to target.
	  (ptrace_him): Calls a new function, target_acknowledge_forked_child.
 	    Currently, target_acknowledge_forked_child, is only defined to
	    do something for HPUX.
	  (child_create_inferior): Changed call to fork_inferior.
	  (child_ops): Added to_require_attach and to_require_detach fields
	    to the child_ops target ops vector.

	* inftarg.c: 
	  Some hacks for ttrace work 
	  (child_wait): Additional local variables, additional code in
	    while loop to check for: Process exited, process forked, 
	    process vforked, process execd
	  (child_thread_alive): John B. seems to think that the kill 
	    call is inapproapriate for HPUX.
	  (child_attach_to_process): Using strtol rather than atoi.
	    no longer check for case where there is no known exec file.
	  (child_post_attach): New function, a default, a no-op
 	  (child_insert_fork_catchpoint): New function, a default, a no-op
	  (child_remove_fork_catchpoint): New function, a default, a no-op
	  (child_create_catch_fork_hook): Deleted
	  (child_create_catch_vfork_hook): Deleted
	  (child_insert_vfork_catchpoint): New function, a default, a no-op
	  (child_remove_vfork_catchpoint): New function, a default, a no-op
	  (child_can_follow_vfork_prior_to_exec ):new function, a default, 
 	     a no-op
	  (child_insert_exec_catchpoint): New function, a default, a no-op
	  (child_remove_exec_catchpoint): New function, a default, a no-op
	  (child_has_execd): New function, a default, returns 0
	  (child_reported_exec_events_per_exec_call): New function, a 
 	     default, returns 1
	  (child_has_exited): New function, a default.
	  (child_core_file_to_sym_file): New function, a default, returns NULL.
	  (child_ops): Initialize new target_ops vector fields to the 
	     child* functions.
	* infptrace.c: 
	(Call_ptrace): For HPUX, handle additional requests: Pt_CONTIN1,
	  PT_STEP1.
	(require_notification_of_events): Add several signals to the
	  set of events requiring notification: Ptrace_SIGNAL, 
	  PTRACE_EXEC, PTRACE_FORK, PTRACE_VFORK
	(child_acknowledge_created_inferior): This function is only
	  defined if CHILD_ACKNOWLEDGE_CREATED_INFERIOR is defined.
	(child_post_startup_inferior): Function is only defined if
	  CHILD_POST_STARTUP_INFERIOR is defiend. Also, now call
  	  require_notification_of_events.
	(child_create_catch_fork_hook): Deleted
	(child_create_catch_vfork_hook): Deleted
	(child_insert_fork_catchpoint): New function
	(child_remove_fork_catchpoint): New function
	(child_insert_vfork_catchpoint): New function
	(child_remove_vfork_catchpoint): New function
	(child_has_forked): Now enclosed by a CHILD_HAS_FORKED ifdef
	(child_has_vforked): Now enclosed by CHILD_HAS_VFORKED ifdef
	(child_can_follow_vfork_prior_to_exec): New function
	(child_insert_exec_catchpoint): New function
	(attach): Removed call to require_notification_of_events 
	(child_post_attach): New function, call to 
	  require_notification_of_events moved here.
	(child_pid_to_exec_file): New enclosed by CHILD_PID_TO_EXEC_FILE ifdef 
	  introduced the concept of a saved_inferior_pid
	(hppa_require_attach): Add some code to decide if gdb is already 
	  attached to process. Can not figure this out via a ptrace call.
	(hppa_insert_hw_watchpoint): New function
	(hppa_remove_hw_watchpoint): New function

	* inftarg.c: 
	(child_attach_to_process): Change position in file
	(child_detach_from_process): Change position in file

	* inftarg.c: 
	(child_attach_to_process): Changed parameter to child_wait call

	* inftarg.c: 
	(child_post_wait): New function declaration and definition
	(ptrace_him):
 	   - change return value to a void.
	   - change target_acknowledge_forked_child call to 
	     target_acknowledge_created_inferior
	   - call target_post_startup_inferior rather than returning pid.
	(child_attach_to_process): Change param name, fail_if_already_attached
	  -> after_fork.
	  Invert a couple of if-then-else statments.
	  Use REQUIRE_ATTACH macro
	  (child_attach): Change params in child_attach_to_process call
	  (child_require_attach): Change params in child_attach_to_process call
	  (child_detach_to_process): Change param name, 
	    fail_if_already_attached -> after_fork.
	  Invert a couple of if-then-else statments.
	  Use REQUIRE_DETACH macro
	  (child_detach): Change params in child_detach_from_process call
	  (child_require_detach): Change params in child_detach_from_process
	     call
	  (child_post_startup_inferior): New function
	  (child_acknowledge_created_inferior): New function
	  (child_clone_and_follow_inferior): New function
	  (child_post_follow_inferior_by_clone): New function
	  (child_create_catch_fork_hook): New function
	  (child_create_catch_vfork_hook): New function
	  (child_has_forked): New function
	  (child_has_vforked): New function
	  (child_post_follow_vfork): New function
	  (child_stop): No longer a static function
	  (child_pid_to_exec_file): New function

	* inftarg.c: 
	(child_wait): Child_pid becomes related pid. return pid
	rather than inferior_pid. Changes are in code handling fork
	and vfork

	* inftarg.c: 
	Include gdb_stat.h and sys/unistd.h
	(child_wait): New local variables. Check for live threads.
	Check for syscall events
	(child_thread_alive): No longer a static funct. 
	(ptrace_him): Remove some code inserted in snap3
	(child_create_inferior): Added a bunch of code to handle a 
	bad interaction between start-up-with-shell and the HP
	catch-fork/catch-exec logic. I am ifdefing this for 
	HPUXHPPA for now.
	(child_has_syscall_event): New default target_ops function
	(child_enable_exception_callback): New default target_ops function
	(child_get_current_exception_event): New default target_ops function
	(child_ops): 3 new fields

	* inftarg.c: Remove HPUX_SNAP1 and HPUX_SNAP2 ifdefs

	* inftarg.c: Reverted previous change.
	
	* infttrace.c (hppa_remove_hw_watchpoint): Fix check for write
	access hardware watchpoint.

	* infttrace.c (proc_wait): Rename from proc_wait.

	* infttrace.c (require_notification_of_exec_events): New function;
	just notify of exec events, not all events, and just the specified
	pid, don't include it's children.
	(child_acknowledge_created_inferior): Call new function
	require_notification_of_exec_events instead of
	require_notification_of_events.
	(child_post_startup_inferior): Call require_notification_of_events

	* infttrace.c: Changed all references to boolean to int.
	Changed all references to TRUE and FALSE to 1 and 0.

	* irix5-nat.c (symbol_add_stub): Add params to call to
 	symbol_file_add.

	* jv-lang.c (get_dynamics_objfile): Add 2 more parameters to call
 	to allocate_objfile.

	* main.c (fputs_unfiltered): Changes to prevent cursor form
 	jumping around in the TUI. Altered where tuiTermUnsetup and
 	tuiTermSetup are called

	* main.c (fputs_unfiltered): Changed function so that it
	checks to see if output is to a string buffer or to a 
	FILE stream and does the correct action (i.e. strcat or
	fputs). Fixed params for fputs call.

	* main.c (fputs_unfiltered): Don't try to call the TUI's
	CommandCharCount functions when the TUI isn't enabled.

	* main.c (fputs_unfiltered): Change FILE to GDB_FILE.

	* main.c (main): If the user gives the --version or --help flags,
 	disable the TUI.

	* main.c (tui_version, xdb_commands, dbx_commands): New variables.
  	(main): New command line arguments --tui, --xdb, --dbx; add call
 	to tyiCleanUp via tuiDo to main loop.
	(fputs_unfiltered): Tui related changes.

	* main.c: Define 2 new global variables, gdb_stdout and gdb_stderr
 	of type GDB_FILE.
 	(main): Allocate space for and initialize gdb_stdout and gdb_stdin.

	* objfiles.c (find_pc_sect_section): Make end condition be less
	than s->endaddr, not less than or equal to s->endaddr.

	* objfiles.c: 
	(allocate_objfile): 2 new parameters: User_loaded and is_solib.
	When appropriate, record in the object file that it is user loaded.
 	The run command can use this information to purge object file
	entries associated with the old inferior and keep user loaded 
	object files loaded via the add-symbol-file command.
	(objfile_purge_solibs): New function. deletes all objectfile entries
	that are not explicitly loaded by the user.
	
	* objfiles.c: 
	(objfile_relocate): Check for LOC_INDIRECT
	(find_pc_sect_section): Change condition from 
	pc < s->endaddr to pc <= s->endaddr

	* objfiles.h: 
	New variables: User_loaded and is_solib
	(OBJF_SHARED): New macro. used to distinguish objfile for
	shared library from "vanilla" objfile.
	(allocate_objfile): Add new parameters to function decl.
	(objfile_purge_solibs): New function decl.
	
	* objfiles.h: Add some typedefs: Importentry, ExportEntry.
	Add some new variables: Import_list, import_list_size,
	export_list, export_list_size
	
	* osfsolib.c: 
	(symbol_add_stub): Added params to call to symbol_file_add

	* pa/hpux1020.mh (NATDEPFILES): Add corelow.o, symbol table and
	solib files.
	
	* pa/hpux1100.mh (NAT_FILE): Use nm-hppah11.h.
	(NATDEPFILES): Add symbol table and solib files.

	* pa/nm-hppah11.h: New file, HPUX11-only definitions.

	* pa/tm-hppa.h (proc_wait): Remove decl and macro.

	* parse.c (write_dollar_variable): Handle cases in which variables
	besides the debugger ones start with $ and $$.
	(parse_nested_classes_for_hpacc): New function.  Parse a string that 
	is possibly a namespace / nested class specification.
	(find_template_name_end): New function. 

	* procfs.c: 
	(procfs_init_inferior): Return value is now a void.

	* procfs.c (procfs_ops): Initializing new target ops vector fields. see list below.
	
	* procfs.c: 
	(procfs_ops): Adding new target_ops vector fields and
	  removing a few. see list below

	* procfs.c: Added new fields to procfs_ops. 
	Necessary since we still have oldstyle initialization in
	this file

	* pyr-tdep.c (pyr_do_registers_info): Change stdout to gdb_stdout.
	(frame_locals_address): Change stderr to gdb_stderr.
	(frame_args_addr): Ditto.

	* pyr-xdep.c (fetch_inferior_registers): Change stderr to
	gdb_stderr.

	* serial.c (serial_close): Call gdb_fclose, not fclose on a
	GDB_FILE.

	* serial.c (serial_logchar): Change chtype to ch_type.  sigh.

	* solib.c (look_for_base): The parameter to file must be 
	of type FILE *. So cast exec_bfd -> iostream in the call
	to fileno as a FILE *, not a GDB_FILE *. This will work because
	exec_bfd -> iostream is declared and given a value in bdf and 
	bfd will continue to use FILE rather than GDB_FILE.

	* solib.c: 
	(solib_add): Remove references to exec_ops.

	* solib.c: 
	(solib_add): Update exec_ops.to_sections

	* solib.c: 
	(symbol_add_stub): Added params to call to symbol_file_add

	* solib.h: 
	(SOLIB_REMOVE_INFERIOR_HOOK): New macro. defined to 0.
	functionality not implemented for this target.

	* solib.h: Added macro definitions. These macros generate
	  error messages for solaris??
	  (SOLIB_CREATE_CATCH_LOAD_HOOK)
	  (SOLIB_CREATE_CATCH_UNLOAD_HOOK)
	  (SOLIB_HAVE_LOAD_EVENT)
	  (SOLIB_LOADED_LIBRARY_PATHNAME)
	  (SOLIB_HAVE_UNLOAD_EVENT)
	  (SOLIB_UNLOADED_LIBRARY_PATHNAME)
	  (SOLIB_IN_DYNAMIC_LINKER)
	  (SOLIB_RESTART)

	* somread.c (is_in_import_list): Ditto.

	* somread.c (som_symfile_read): Added some comments

	* somread.c (som_symfile_read): Read in import and export lists.
	(som_symtab_read): Change test for dynamic executable.
	(is_in_import_list): New function. Check if a given symbol name
 	is in the import list.
	(init_import_symbols): New function. Read in and initialize the 
	som import list.
	(init_export_symbols): New function. Read in and initialize the 
	som export list.

	* somread.c: 
	(som_symfile_read): Fix missing comment delimiters

	* somsolib.c (DLD_FLAGS_MAPPRIVATE): New macro. 
	Define bit of __dld_flags in HP-UX a.out files.
	(DLD_FLAGS_HOOKVALID): Ditto.
	(DLD_FLAGS_LISTVALID): Ditto.
	(DLD_FLAGS_BOR_ENABLE): Ditto.
	(som_solib_total_st_size): Cumulative size in bytes of the 
	symbol tables of all shared objects on the so_list_head list.
	(som_solib_st_size_threshhold_exceeded): Threshold for adding symbols
	for shlibs.
	(som_solib_sizeof_symbol_table): New function. Computes size of 
	symbol table for a shlib.
	(som_solib_load_symbols): New function. Load symbols from shlib.
	(som_solib_add): Detect if __dld_list is not valid. 
	Record main program's symbol table size.
	Load symbols if called from command line.
	Keep threshold into account when loading shlib symbols.
	(som_solib_create_inferior_hook): Use dld_flags macros.
	(som_sharedlibrary_info_command): Let user know if symbols were 
	not loaded.
	(som_solib_restart): Discard all the shlibs descriptors.
	(_initialize_som_solib): Chenge help message for auto-solib-add
	command.
	Set threshold for symbol table to 50 megabytes.

	* somsolib.c (_initialize_som_solib): Added call to som_solib_restart.
	(som_solib_restart): New function
	(som_solib_in_dynamic_linker): New function
	(som_solib_desire_dynamic_linker_symbols): New function
	(som_solib_unloaded_library_pathname): New function
	(som_solib_loaded_library_pathname): New function
	(som_solib_library_pathname): New function
	(som_solib_have_unload_event): New function
	(som_solib_have_load_event): New function
	(som_solib_create_catch_unload_hook): New function
	(som_solib_create_catch_load_hook): New function
	(som_solib_create_inferior_hook): Rewritten
	dld_cache: New struct
	addr_and_unwind_t: New struct
	(find_unwind_entry) added prototype

	* somsolib.c (som_solib_create_inferior_hook): Introduce new local
 	msymbol2 and change some msymbol's to msymbol2's -- was clobbering
 	msymbol, passing a NULL to lookup_minimal_symbol_solib_trampoline,
	and ultimately core dumping with a SEGV.

	* somsolib.c: 
	Include assert.h
	(som_solib_mapped_entry): Additional comments for text_addr, 
	text_link_addr, text_end, and tsd_start_addr fields. Commenting
	out 2 tsd fields, __data_start and __data_end. 
	(som_solib_add_solib_objfile): Add params to calls to symbol_file_add.
	Add some code for distinguishing between a shared library and other 
	objfiles. This appears to be a prelude to thread local storage.	
	(som_solib_load_symbols): Changes to printf statement 
	enclosed by SOLIB_DEBUG ifdef.
	(som_solib_add): Change comment to correctly specify path
	to end.o -- /opt/langtools/lib/end.o. changes to printf statement
 	enclosed by SOLIB_DEBUG ifdef.
	Removed several SOLIB_DEBUG ifdefs and the associated printfs.
	Add code to find the start address for the object file's thread 
	local storage
	(som_solib_create_inferior_hook): Fix warning messages use correct
	path to end.o -- /opt/langtools/lib/end.o. Change control flow. 
	No longer user early returns from function is cases of error.
	(reset_inferior_pid): New function
	(som_solib_remove_inferior_hook): New function
	(so_lib_thread_start_addr): New function. used for tsd.

	* somsolib.c: Removed references to ASSERT macro.

	* somsolib.c: Add debugging macro.
	(struct som_solib_mapped_entry): Add new field tsd_start_addr.
	(struct so_list): Added new field solib_addr.
	(som_solib_add_solib_objfile): New function. 
	(som_solib_load_symbols): Rewritten.
	(som_solib_add): Make sure we don't load the symbols in if the 
	threshold was exceeded.
	(som_solib_get_solib_by_pc): New function. Return the address of
 	handle of the shared library.
	(som_solib_restart): Disable breakpoints at restart.
	(_initialize_som_solib): Set threshold to 100 megabytes.

	* somsolib.c: Add include of fcntl.h so that O_RDONLY is defined.

	* somsolib.h (DISABLE_UNSETTABLE_BREAK): New macro.
	(PC_SOLIB): New macro.

	* somsolib.h: 
	(SOLIB_CREATE_CATCH_LOAD_HOOK): Define
	(SOLIB_CREATE_CATCH_UNLOAD_HOOK): Define
	(SOLIB_HAVE_LOAD_EVENT): Define
	(SOLIB_LOADED_LIBRARY_PATHNAME): Define
	(SOLIB_HAVE_UNLOAD_EVENT): Define
	(SOLIB_UNLOADED_LIBRARY_PATHNAME): Define
	(SOLIB_IN_DYNAMIC_LINKER): Define
	(SOLIB_RESTART): Define

	* somsolib.h: 
	(SOLIB_REMOVE_INFERIOR_HOOK): New macro. defined to use 
	som_solib_remove_inferior_hook.

	* somsolib.h: 
	(som_solib_create_catch_load_hook) 
	(som_solib_create_catch_unload_hook)
	(som_solib_have_load_event)
	(som_solib_loaded_library_pathname)
	(som_solib_have_unload_event)
	(som_solib_unloaded_library_pathname)
	(som_solib_in_dynamic_linker)
	Fix prototypes to use type names, not parameter names.

	* source.c (find_source_lines): Make non static.
	(open_source_file): Ditto.
	(source_full_path_of): New function.
	(print_source_lines): Rename to print_source_lines_base and make
	static; formatting.
	(print_source_lines): New function.
	(forward_search_command): Tui changes.
	(reverse_search_command): Tui changes.
	(_initialize_source): Add xdb and dbx compatibility commands.

	* source.c (list_command): Handle case of odd number of source 
	lines to display.

	* source.c: 
	(source_full_path_of): New function. file was overlooked
	in merge ;-/.
	
	* stack.c (func_command): Make high bound be <, not <=.

	* stack.c (_initialize_stack): For the backtrace command, delete
	the help line about usage, since this has to be a valid help
	message for the 'where' command too.
	
	* stack.c (current_frame_command): Add a check for the 
	existance of a stack. If there is no stack produce an
	error message and exit.
	
	* stack.c (down_silently_base, up_silently_base,
 	args_plus_locals_info, print_frame_info_base,
 	print_stack_frame_base, print_stack_frame_base_stub): Declare.
	(print_frame_local_vars): Add'l parameter.
	(print_stack_frame_stub): New version created, old version renamed
 	to show_and_print_stack_frame_base_stub.
	(print_stack_frame_base_stub, print_only_stack_frame_stub,
 	show_and_print_stack_frame, print_only_stack_frame,
 	stack_publish_stopped_with_no_frame, print_frame_info,
 	show_stack_frame, backtrace_full_command, args_plus_locals_info,
	select_and_print_frame, select_and_maybe_print_frame,
	current_frame_command, func_command): New functions.
	(backtrace_command): New function, old renamed to
	backtrace_command_1.
	(print_block_frame_locals, print_frame_local_vars): Additional
	parameter, number of tabs.
	(up_silently_command): New function, old renamed to
	up_silently_command_base.
	(down_silently_command): New function, old renamed to
	down_silently_base.
	(_initialize_stack): Register new commands based on values of
	xdb_commands and dbx_commands variables.
	
	* stack.c (func_command): Make high bound be <, not <=.
	
	* stack.c (parse_frame_specification): Fix prototype to match
	function definition.
	(show_and_print_stack_frame_stub): Fix name.
	(select_and_print_frame): Change uncaught tuiDO call.
	
	* stack.c (up_silent_base): Rename from up_silently_command_base.
	
	* symfile.c (symbol_file_command): Only call SOLIB_RESTART if it's
	defined.

	* symfile.c (add_psymbol_with_dem_name_to_list): New function.
	Adds a symbol with a long value to a psymtab. Differs from 
	add_psymbol_to_list in taking both a mangled and a demangled name.
	
	* symfile.c (compare_psymbols): Call strcmp directly, instead of
	using macro.
	
	* symfile.c (symbol_file_add): Reindent portions.
	(symbol_file_command): Add call to tuiDo.
	
	* symfile.c (symbol_file_command): Only call SOLIB_RESTART if it's
	defined.

	* symfile.c (symfile_bfd_open): Add code to call PXDB on hpux, if
	the file has not already been processed by pxdb.
	Added define USE_PXDB.
	
	* symfile.c (symfile_bfd_open): Change parenthesis positioning
	around call to hpread_pxdb_check.
	
	* symfile.c (symfile_bfd_open): Make not static. 
	(RESET_HP_UX_GLOBALS): New macro. Resets globals when new symbol
	file loaded.
	(USE_PXDB): Not needed. Removed.
	(symbol_file_add): Add HP specific code to deal with pxdb.
	(symbol_file_command): Reset HP specific globals if new symbol file
	loaded.
	(symfile_bfd_open): Comment out checking for pxdb.
	(reread_symbols): Reset HP specific globals.
	
	* symfile.c (symfile_bfd_open): Uncomment hpus specific code.
	
	* symfile.c: 
	(symbol_file_add): Add user_loaded and is_solib parameters.
	fixed number of parameters in call to allocate_objfile
	(symbol_file_command): Added call to SOLIB_RESTART macro.
	fixed number of parameters in calls to symbol_file_add.
	(add_symbol_file_command): Fixed number of parameters in calls to 
	symbol_file_add.
	
	* symfile.c: Added prototype for hpread_pxdb_check.
	
	* symfile.c: Changed HPUX_SNAP1 ifdef to HPUXHPPA. enclosed calls to 
	  RESET_HP_UX_GLOBALS with an HPUXHPPA ifdef
	
	* symfile.h (symfile_bfd_open): Add protptype.
	
	* symfile.h: Add prototype for add_psymbol_with_dem_name_to_list.
	
	* symfile.h: Clarify purpose of auto_solib_add.
	
	* symmisc.c (maintenance_print_symbols): Call gdb_fclose, not
	fclose on a GDB_FILE* during cleanup.
	(maintenance_print_psymbols): Call gdb_fclose, not fclose on a
	GDB_FILE* during cleanup.
	(maintenance_print_msymbols): Call gdb_fclose, not fclose on a
	GDB_FILE* during cleanup.
	
	* symmisc.c (maintenance_print_symbols): Gdb_fclose now takes a
	GDB_FILE ** parameter. Fix the local GDB_FILE variables and the 
	call to make_cleanup.
	(maintenance_print_psymbols): Ditto
	(maintenance_print_msymbols): Ditto
	
	* symmisc.c (print_objfile_statistics): Close quotes in 
	output strings.

	* symmisc.c: 
	(Print_symbol): Add LOC_INDIRECT to switch statement
	(print_partial_symbols): Add LOC_INDIRECT to switch statement

	* symtab.c (find_pc_sect_psymtab): High bounds should be <, not <=.
	(find_pc_sect_symtab): Ditto.

	* symtab.c (hp_som_som_object_present): New flag to indicate HP 
	compiled code.
	(find_pc_sect_psymtab): Change tests to make sure we are checking
	the texthigh adress as well.
	(lookup_transparent_type): New function.  Look up a type name
	in the struct_namespace.  The type returned must not be opaque.
	(find_pc_sect_symtab): Make sure we check the address 'pc' itself,
	too.
	(find_addr_symbol): Prepare to handle LOC_INDIRECT address class, but
 	leave it commented out.
	(find_pc_sect_line): Return correct information if pc is in import
	or export stub (trampoline).
	(decode_line_1): Skip two chars, if they are '$$'. Like for HP's
	$$dyncall. Handle cases in which varaible and function names can start 
	with $.
	(overload_list_add_symbol): If cannot demangle name, use it as is.
	Free string after use.
	(make_symbol_overload_list): Initialize oload_name to NULL and 
	oload_name_len to 0. If demangle not successful, use name as it is.
	Free string after use.

	* symtab.c (lookup_symbol): Changed call to find_pc_sect_symtab,
 	to the original find_pc_symtab, in HP added fragment.

	* symtab.c (lookup_symbol): Change HPUX_SNAP1 ifdef to a HPUXHPPA ifdef

	* symtab.c (lookup_symbol): Ifdef the searching of symbol in the 
	minimal symbol tables, for hpux we move this check at the end 
	of the function.
	Before we error out if symbol is not found in the symtab, look 
	in the statics. 
	Before erroring out if static symbol not found look in the globals.

	* symtab.c (lookup_symbol): Return symbol as soon as found.
	(decode_line_1): Check whether we have a conditional break. Temporarily
	remove it from the line, to not confure perenthesis checking.
	Handle namespaces.
	(overload_list_add_symbol): New function. Overload
	resolution support.
	(make_symbol_overload_list): Ditto.
	
	* symtab.c: 
	(find_template_name_end): New prototype decl.
	(lookup_symbol):  When a global or static symbol shows up in the 
	psymtab table, but not the symtab table, tell the user that
	the symbol may be an inlined function or a template function and
	provide some guidance to the user about how to more fully 
	specify the symbol.
	(lookup_transparent_type):  When a global or static symbol shows up 
	in the psymtab table, but not the symtab table, tell the user that
	the symbol may be an inlined function or a template function and
	provide some guidance to the user about how to more fully 
	specify the symbol. 
	(decode_line_1): Handle template function specification when decoding a
	line. May need to be ifdefed for HP's aCC?
	(_initialize_symtab): Handle dbx commands.

	* symtab.h (address_class): Add new address calss for 
	LOC_THREAD_LOCAL_STATIC and LOC_INDIRECT.
	(lookup_transparent_type): Add prototype.
	(exception_event_kind): New enum for exception catchpoints.
	(exception_event_record): New structure for exception catchpoints.
	(CURRENT_EXCEPTION_KIND): New macro.
	(CURRENT_EXCEPTION_CATCH_SAL): New macro. 
	(CURRENT_EXCEPTION_CATCH_LINE): New macro. 
	(CURRENT_EXCEPTION_CATCH_FILE): New macro. 
	(CURRENT_EXCEPTION_CATCH_PC): New macro. 
	(CURRENT_EXCEPTION_THROW_SAL): New macro. 
	(CURRENT_EXCEPTION_THROW_LINE): New macro. 
	(CURRENT_EXCEPTION_THROW_FILE) new macro.: 
	(Current_EXCEPTION_THROW_PC): New macro. 

	* symtab.h(make_symbol_overload_list): Add prototype.

	* symtab.h: 
	(symbol_file_add): Add new params to function decl.

	* target.c (cleanup_target): Changed casting of default functions for
	to_has_forked, to_has_vforked, to_pid_to_exec_file to get rid of
	warnings.

	* target.c (cleanup_target): Changed the default functions for
	  to_pid_to_exec_file and to_core_file_to_sym_file

	* target.c (cleanup_target): Fixed PARAMS for to_has_syscall_event

	* target.c (cleanup_target): Syntax error, mismatched paranthesis.

	* target.c: 
	  (Default_clone_and_follow_inferior): New funct prototype declaration
	    and function definition
	  (dummy_target): More target_ops vector changes for HPUX
	     new fields. ifdefed for HPUX_SNAP2. New fields are
	     to_post_wait, to_post_startup_inferior
	     to_acknowledge_created_inferior, to_clone_and_follow_inferior,
	     to_post_follow_inferior_by_clone,  to_create_catch_fork_hook,
	     to_create_catch_vfork_hook, to_has_forked, to_has_vforked,
	     to_post_follow_vfork, to_pid_to_exec_file
	  (de_fault): Add new HPUX specific target_ops operations to
  	     the de_fault macro
	  (INHERIT): Add new HPUX specific target_ops operations to the
	     INHERIT macro
	  (find_default_clone_and_follow_inferior): New funct definition
	  (debug_to_post_wait): New funct
	  (debug_to_post_startup_inferior): New funct
	  (debug_to_acknowledge_created_inferior): New funct
	  (debug_to_clone_and_follow_inferior): New funct
	  (debug_to_post_follow_inferior_by_clone): New funct
	  (debug_to_create_catch_fork_hook): New funct
	  (debug_to_create_catch_vfork_hook): New funct
	  (debug_to_has_forked): New funct
	  (debug_to_has_vforked): New funct
	  (debug_to_post_follow_vfork): New funct
	  (setup_target_debug): Initialize new target_ops vector fields.

	* target.c: 
	(Cleanup_target): Fixed the return type on a few of the 
	  default function values.

	* target.c: 
	(Dummy_target): Add 3 new fields
	(nosupport_runtime): New function, used in cleanup_target
	(cleanup_target): Changes in the de_fault macro, both to
	accomodate the new target_ops vector fields and to use
	more accurate default functions.
	(update_current_target): Add new target_ops vector fields to the 
	INHERIT macro
	(generic_mourn_inferior): The call to breakpoint_init_inferior now takes a 
	parameter
	(normal_pid_to_str): Adding a \0 to the end of buf.
	(debug_to_has_syscall_event): New func
	(debug_to_enable_exception_callback): New func
	(debug_to_get_current_exception_event): New func
	(setup_target_debug): Initialize the 3 new target_ops vector fields

	* target.c: 
	(Struct signals): Fix message associated with SIGRETRACT.

	* target.c: 
	  (Dummy_target): Fix syntax error
	  (cleanup_target): Changed the default values for the new 
	     target_ops vector fields. HP folks inappropriately set
	     most of them to noprocess(). They should be a mixture
	     of ignore() and return_zero().

	* target.c: 
	(Dummy_target): Add new target_ops vector fields and their initializations
	(cleanup_target): Added new new target_ops vector fields to the de_fault 
	  macro definition.
	(update_current_target): Added new new target_ops vector fields to the INHERIT 
	  macro definition
	(return_one): New function, used by the de_fault macro
	(debug_to_post_attach): New function
	(debug_to_wait): Added new cases: Target_WAITKIND_FORKED, TARGET_WAITKIND_VFORKED,
	  TARGET_WAITKIND_EXECD
	(debug_to_insert_fork_catchpoint): New function
	(debug_to_remove_fork_catchpoint): New function
	(debug_to_insert_vfork_catchpoint): New function 
	(debug_to_remove_vfork_catchpoint): New function
	(debug_to_can_follow_vfork_prior_to_exec): New function
	(debug_to_insert_exec_catchpoint): New function 
	(debug_to_remove_exec_catchpoint): New function
	(debug_to_core_file_to_sym_file): New function
	(setup_target_debug): Give new fields in current_target target_ops vector values.

	* target.c: Hp merge, 4/15/98 snapshot
	  There are new target_ops fields that pertain only
	  to HPUX. All the changes relate to this. First,
	  new fields are added to the dummy_target target_ops
 	  vector: To_require_attach, to_require_detach.

	* target.c: Remove HPUX_SNAP1 and HPUX_SNAP2 ifdefs

	* thread.c (info_threads_command): Call print_only_stack_frame
	instead of print_stack_frame.
	(_initialize_thread): Make t an alias for thread only if
	xdb_commands is not set.

	* thread.c (thread_command): If no arguments, don't generate an
	error, instead tell the user which thread is current.
	(info_threads_commands): Don't lose the users position within the
	current thread -- remember it and then restore it.

	* thread.c: 
	(struct thread_info): Add stepping_through_sigtramp field
	(add_thread): Initialize stepping_through_sigtramp field
	(load_infrun_state): Add stepping_through_sigtramp param and
	make sure it gets assigned a value.
	(save_infrun_state): Add stepping_through_sigtramp param and
	make sure that the value gets saved.
	(info_threads_command): Ifdefing some local variables and 
	code for HPUXHPPA. HP folks want print the tid rather than pid?
	Also, looks like the HP folks solved the same thread switching
	problem that 4.17 solves. Taking 4.17.
	(restore_current_thread): Print out the current frame after 
	switching threads.
	(thread_apply_all_command): Ifdefing a print statement for
	HPUXHPPA. The HP folks want to print out a tid rather than pid?
	(thread_apply_command): Ifdefing a print statement for
	HPUXHPPA. The HP folks want to print out a tid rather than pid?
	(thread_command): Decided not to take HP change.

	* thread.c: Fixing gdb core dump problem causing many testsuite
	    failures.
	    (add_thread): Remove call to bpstat_clear, initialize
	      tp->stepping_through_solib_catchpoints = NULL;

	* thread.c: Changes for catchpoints, shared libaries, 
	  (thread_info): Additional fields in the thread_info struct
	     for stepping_through_solib_after_catch and 
	     stepping_through_solib_catchpoints.
	  (add_thread): Initialize the new thread_info fields.
	  (load_infrun_state): Additional parameters for handling
	     catchpoints and shared libraries.
	  (save_infrun_state): Additional parameters for handling
	     catchpoints and shared libraries.

	* top.c (command_loop): Initialize space_at_cmd_start to 0.
	(set_prompt): New function.
	(togglelist, stoplist): New command lists.
	(command_loop): Tui changes -- paranoia to make sure
	insert mode is off when not editing.
	(quit_force): Clean up tui on exit.
	(init_main): Make definition of info status command dependent upon
	dbx mode not being set.
	(fputs_unfiltered_hook): Changed stream parameter from FILE 
	to GDB_FILE
	(flush_hook): Changed stream parameter from FILE to GDB_FILE

	* top.h (set_prompt): Declare.
	
	* typeprint.c (whatis_exp): Decide real runtime type. For the vtable
	case.

	* utils.c (query): Changes to prevent cursor from jumping around in the
	TUI. Call tuiBufferGetc explicitly, rather than passing it 
	into tuiDo. The tuiDo function does some additional work
	that is inappropriate when handling queries. 
	(GDB_FILE_ISATTY): New macro that takes a GDB_FILE param and 
	determines whether or not it's using a tty.
	(gdb_file_isatty); called by the GDB_FILE_ISATTY macro. Does
	the actual work
	(init_page_info): Call GDB_FILE_ISATTY rather than ISATTY
	(print_spaces): Fix parameter to fputc. fix call to 
	gdb_file_adjust_strbuf.
	(gdb_file_init_astring): Fix parameter to xmalloc
	(gdb_file_deallocate): New function to deallocate
	a GDB_FILE object and possibly a string buffer
	(gdb_file_init_astring): Initialize buffer as the empty
	string.  Indent GNU style.
	(gdb_fopen): Gdb_fopen is called if the GDB_FILE object is
	actually afile rather than astring. The routine now allocates space
	for a GDB_FILE object and initializes its fields in addition to 
	performing an fopen.
	(gdb_flush): Fix the parameter passed into fflush. It's now
 	stream->ts_filestream.
	(gdb_fclose): Pass in an object of type GDB_FILE **. Fix parameter
 	to fclose. It's now tmpstream->ts_filestream. Make sure to free
 	the GDB_FILE object and set the GDB_FILE * object to NULL.
	(gdb_adjust_strbuf): New function. Determine if the current
 	ts_strbuf field contains sufficient space to concatenate a string
 	of length n on the end.  If not, then reallocate the ts_strbuf.
	(print_spaces): Check to see if the GDB_FILE is afile or
 	astring. If it is astring, then adjust the size of the ts_strbuf
 	field and concatenate the correct number of spaces onto the end of
 	the buffer. Otherwise continue to use fputc.
	(gdb_file_get_strbuf): New function. return a ptr to the ts_strbuf
 	field in a GDB_FILE object.
	(gdb_file_init_astring): New function to allocate space for and
 	initialize a GDB_FILE object when it is an astring.
	(set_width): Declare it.
	(pagination_enabled): Define it.
	(query): Tui changes.
	(init_page_info, set_width): New functions.
	(set_width_command): Call set_width.
	(_initialize_utils): Replace termcap stuff with call to
	init_page_info; if xdb_commands set, define am and sm commands;
	define pagination as a set/show command.
	(vfprintf_maybe_filtered): Change FILE to GDB_FILE.
	(fputs_maybe_filtered): Ditto.
	(print_spaces): Ditto.
	(gdb_printchar): Ditto.
	(gdb_flush): Ditto.
	(fputs_filtered): Ditto.
	(vfprintf_filtered): Ditto.
	(vfprintf_unfiltered): Ditto.
	(fprintf_filtered): Ditto.
	(fprintf_unfiltered): Ditto.
	(fprintfi_filtered): Ditto.
	(print_spaces_filtered): Ditto.
	(fprintf_symbol_filtered): Ditto.
	(gdb_fclose): New function.

	* valops.c (call_function_by_hand): Assign to param_type only
	if function has parameters.

	* valops.c (call_function_by_hand): Ifdef the
	HP_COMPILED_TARGET stuff.
	(value_arg_coerce): Ditto.

	* valops.c (call_function_by_hand): Make sure param_type is 
	initialized to NULL.

	* valops.c (find_rt_vbase_offset): Add parameter to value_at.
	(value_rtti_type): Ditto.
	(value_full_object): Ditto.

	* valops.c (search_struct_field_aux): Fixed mismatching parenths

	* valops.c (search_struct_field_aux): Make sure TYPE_TAG_NAME
	is not null before copying it. 
	

	* valops.c (search_struct_field_aux): Set found_class_name to null
	if class has no name (anon unions case). Adjust base_addr 
	computation.

	* valops.c (value_arg_coerce): Change final arg to int.

	* valops.c (value_arg_coerce): Remove the conditional on HP
	compiled target, for doing coercion of float to double. Removed
	third parameter, using_gcc.
	(call_function_by_hand): Do not use HP_COMPILED_TARGET, just
	use the gcc_compiled variable.

	* valops.c (value_cast): Take case of the enclosing_type and 
	pointer_to_offset fields.
	(value_at): Use VALUE_CONTENTS_ALL_RAW
	(value_fetch_lazy): Ditto
	(value_assign): Handle enclosing_type, embedded_offset and 
	pointed_to_offset fields.
	(value_repeat): Use VALUE_CONTENTS_ALL_RAW and VALUE_ENCLOSING_TYPE.
	(value_ind): Set enclosing_type and embedded_offset correctly,
	for a pointer value being dereferenced. Target memory bytes 
	corresponding to the size of the enclosing type are retreived.
	(value_addr): Handle enclosing_type and pointed_to_offset.
	(value_push): Use VALUE_CONTENTS_ALL and VALUE_ENCLOSING_TYPE.
	(value_arg_coerce): Coerce floats to doubles only if gcc was not
	used to compile the target.
	(call_function_by_hand): Handle pointers to functions as paramters.
	(value_array): Use VALUE_CONTENTS_ALL and VALUE_ENCLOSING_TYPE.
	(search_struct_method): Produce more informative error message.
	(find_rt_vbase_offset): Deal with negative offsets.
	(value_find_oload_method_list): New function. Return the list of 
	overloaded methods of a specified name.
	(find_method_list): New function. Search through the methods of an 
	object (and its bases) to find a specified method.
	(value_full_object): New function. Given a value, check its real 
	run-time type.
	(value_rtti_target_type): New function. Given a pointer value V, find 
	the real (RTTI) type of the object it points to.
	(value_rtti_type): New function. Find the real run-time type of a 
	value using RTTI.

	* valops.c: Include gdbcmd.h
	Set global overload_resolution to 0.
	(find_function_in_inferior): Modify error message.
	(value_allocate_space_in_inferior): Modify error message.
	(value_cast): Deal with HP/aCC peculiarities.
	(value_of_variable): Use SYMBOL_SOURCE_NAME instead of SYMBOL_NAME.
	(value_addr): Modify address value by adding the embedded offset.
	(value_ind): Modify the address of the object by the pointed_to_offset.
	(call_function_by_hand): Do not do any extra alignment if not needed.
	Fetch the return value from the stack rather then from the register, 
	for the hppa architecture.
	(search_struct_field): Rewritten. Now this function uses 
	search_struct_field_aux to do all the work.
	(search_struct_field_aux): New function. This is the old 
	search_struct_field rewritten.
	(find_rt_vbase_offset): Give error if virtual table pointer is not good.
	(find_overload_match): New function. Find the best function that
	matches on the argument types according to the overload resolution
	rules.
	(_initialize_valops): Add new set/show command for overload-resolution.
	
	* value.h (VALUE_POINTED_TO_OFFSET): New macro.
	Add field pointed_to_offset to value structure.
	Add prototypes for new functions in valops.c.

	* value.h (write_register_pid): Change prototype to match
	function.

	* value.h: Hp merge, 4/15/98 snapshot
	  Added parameter to val_print func decl.
	  Added new macro, VALUE_EMBEDDED_OFFSET, and
	  new func decl, find_rt_vbase_offset, for C++
	  support.
	
	* values.c (allocate_value): Allocate also for value_embedded_offset 
	and value_enclosing_type.
	(value_copy): Copy value_embedded_offset and value_enclosing_type too.
	Use all_raw in copying the value itself.
	(value_primitive_field): Add handling of base subobjects.

	* values.c (value_copy): Copy the pointed_to_offset as well.
	(allocate_value): Allocate the pointed_to_offset as well.
	(value_virtual_fn_field): Rewrite.

	* values.c (value_primitive_field): Adjust embedded offset and
	offset calculation.

	* values.c (value_static_field): Take into consideration that static 
	data members can be minimal symbols too.

	* values.c (value_virtual_fn_field): Fix call to value_at.

	* win32-nat.c (handle_load_dll): Added params to call to symbol_file_add.

	Other changes have to do with XDB compatability. Leave oout
	for now.

	defs.h (vfprintf_filtered): Change FILE to GDB_FILE in decl.
	(fprintf_filtered): Ditto.
	(fprintfi_filtered): Ditto.
	(vfprintf_unfiltered): Ditto.
	(fprintf_unfiltered): Ditto.

	infcmd.c (_initialize_infcmd): If xdb_commands is set, make S an
	alias for next and define R, lr, g.  Define go.
	 
	pyr-tdep.c (pyr_print_insn): Change FILE to GDB_FILE.


	* breakpoint.c (create_temp_exception_breakpoint): #If it out --
 	nothing calls it.
	(bpstat_stop_status): Don't call SOLIB_HAVE_LOAD_EVENT if it's not
 	defined; don't call SOLIB_HAVE_UNLOAD_EVENT if it's not defined.
	(bpstat_get_triggered_catchpoints): If we don't have shared
 	library support, then don't call SOLIB_LOADED_LIBRARY_PATHNAME nor
 	SOLIB_UNLOADED_LIBRARY_PATHNAME.
	(watch_command_1): Don't require a run before a watch command
 	unless we're on HP [it's an HP OS bug, not a generic limitation]
	(catch_load_command_1): Don't define if no shared libraries.
	(catch_command_1): Don't claim to support fork catchpoints unless
 	CHILD_INSERT_FORK_CATCHPOINT is defined, don't claim to support
 	vfork catchpoints unless CHILD_INSERT_VFORK_CATCHPOINT is defined,
 	don't clain to support shared library load catchpoints if shared
 	libraries aren't supported, and don't claim to support exec
 	catchpoints unless CHILD_INSERT_EXEC_CATCHPOINT is defined

	  There are new target_ops vector fields that pertain
	  only to HPUX. Added the to_require_attach and 
	  to_require_detach fields to exec_ops. These new
 	  fields are ifdef'ed for HPUX_SNAP1.

	* breakpoint.h:
	    Fix compile error in enum bptype.

	* coff-solib.h:
	    Fixed a number of macro definitions. SOLIB_LOADED_LIBRARY_PATHNAME,
	    SOLIB_HAVE_LOAD_EVENT, SOLIB_HAVE_UNLOAD_EVENT, 
	    SOLIB_UNLOADED_LIBRARY_PATHNAME, SOLIB_IN_DYNAMIC_LINKER. These
	    macros are only meaningful (for now) for SOM. So, all 
	    the macros were defined as error(...), but were used in
	    conditions. This caused the compile to crap out. I redefined 
	    these (for now) to be 0. 

	* procfs.c:
	    (procfs_create_inferior): Fix call to fork_inferior -- need another
	       parameter. 
	
	* solib.h:
	    Fixed a number of macro definitions. SOLIB_LOADED_LIBRARY_PATHNAME,
	    SOLIB_HAVE_LOAD_EVENT, SOLIB_HAVE_UNLOAD_EVENT, 
	    SOLIB_UNLOADED_LIBRARY_PATHNAME, SOLIB_IN_DYNAMIC_LINKER. These
	    macros are only meaningful (for now) for SOM. So, all 
	    the macros were defined as error(...), but were used in
	    conditions. This caused the compile to crap out. I redefined 
	    these (for now) to be 0. 

	* valops.c:
	    (search_struct_field): Undeclared local variable, "assigned".
	    (find_rt_vbase_offset): Fixed call to value_at

	* value.h: Fix signature for find_rt_vbase_offset funct decl
 	(missing a param)

Wed Dec 30 17:48:12 1998  Stan Shebs  <shebs@andros.cygnus.com>

	From J.T. Conklin  <jtc@redbacknetworks.com>:
	* i386-stub.c: Fix error string in last change.

1998-12-30  Jason Molenda  (jsm@bugshack.cygnus.com)

	* utils.c: <Readline/readline.h> instead of "readline/readline.h".

	* configure.in (TERM_LIB): Search for the appropriate term library
	on the host system.
	* configure: Regenerated.
	* Makefile.in (TERMCAP): Set based on autoconf check.
	* config/*/*.mh: Don't override TERMCAP setting.

Wed Dec 30 17:23:14 1998  Mark Alexander  <marka@cygnus.com>

	* value.c (value_virtual_fn_field): Handle the situation where
	vtbl is a pointer to a structure instead of a pointer to an array.

Mon Dec 28 17:43:36 1998  David Taylor  <taylor@texas.cygnus.com>

	The following changes were made by Jim Blandy <jimb@cygnus.com>,
 	Edith Epstein <eepstein@cygnus.com>, Elena Zannoni
 	<ezannoni@cygnus.com> Stan Shebs <shebs@cygnus.com>, and David
 	Taylor <taylor@cygnus.com>, as part of the project to merge in
 	changes originally made by HP; HP did not create ChangeLog
 	entries.

	* c-lang.h (cp_print_value_fields): Update prototype; fixed
 	prototype decl for c_val_print function -- it needed an
 	embedded_offset param; fixed prototype of cp_print_value_fields.
	Include value.h.
	(C_LANG_H): Define.

	* c-valprint.c (c_val_print): Add new parameter embedded_offset.
  	Add embedded_offset to valaddr in function calls.  fix calls to
 	val_print, and cp_print_value_fields.  Attempt to determine the
 	real type of the object to be printed.  fixed call to
 	cp_print_value_fields.  process TYPE_CODE_METHOD as well.  moved
 	call to check_typedef out of conditional.  add embedded offset
 	param to val_print call.

	(c_value_print): Add new parameter to call to val_print.  Handle
 	pointer to class case.  Ensure that const char *, const unsigned
 	char * come out without the type but the volatile variants and the
 	signed variants don't.
	
	* ch-lang.h (chill_val_print): Add parameter to decl.

	* ch-valprint.c: The various print routines have an additional
 	parameter. Currently, the new parameter is only used when printing
 	C++ expressions. So, in ch-valprint.c, the new parameter is always
 	0.  Changes in calls to val_print, chill_val_print, c_val_print
 	Affected functions are chill_val_print_array_elements,
 	chill_val_print, chill_print_value_fields, chill_value_print.

	* cp-valprint.c add vtable pointers names for aCC (HP) compiler.
 	(cp_print_class_method): Print message for HP/aCC case.
	(cp_print_class_member): Add comments.
	(cp_print_value): Adjust address computations for virtual base
 	classes.  add new parameter 'offset'.  Find correct offset for
 	base class in HP/aCC case.  Change call to cp_print_value_fields
 	to have extra par.
	(cp_print_value_fields): Do not print also if the only field is
 	the vtable pointer.  Print out vtable ptr, for HP/aCC compiled
 	case.  do not print leading '=' in case of anonymous union, or
 	struct.  add new parameter 'offset'.  Do not print the vtable
 	pointer as a member, in the HP aCC case.  Changed calls to
 	val_print to have extra parameter.
	(cp_print_hpacc_virtual_table_entries): New function. Print vtable
 	entries, in HP/aCC compiled case.
	(cp_print_static_field): Change call to cp_print_value_fields, and
 	val_print.

	* d30v-tdep.c (d30v_print_register): Add embedded_offset param
	to val_print call.

	* defs.h: Additional include files included when TUI is defined.
	(gdb_file_isatty): New function decl.
	(GDB_FILE): If TUI is defined, define a structure rather
 	than making this an alias for FILE.
	(gdb_stdout, gdb_stderr): If TUI is defined, then define these
	as pointers to variables of type GDB_FILE rather than making them
	be aliases for stdout and stderr.
	(TUIDO): Add definition conditionalized on definition
	(or lack thereof) of TUI.
	(command_class): Add two additional values.
	(precision_type): New enum.
	(gdb_fclose): Add decl.
	(store_address): Change prototype to match function.
	(tui_version, xdb_commands, dbx_commands): Add decls.
	(gdb_file_deallocate): New function decl
	(pa_do_strcat_registers_info): New function decl.
	(streamtype): New enumerated type to distinguish between output to
 	a FILE and output to a buffer.
	(tui_stream): New struct type, named GDB_FILE.
	(gdb_stdout): Of type GDB_FILE, will pass this around gdb rather
 	than stdout.
	(gdb_stderr): Of type GDB_FILE, will pass this around gdb rather
 	than stderr.
	(fputs_unfiltered_hook): Change stream parameter from FILE to
 	GDB_FILE.
	(flush_hook): Change stream parameter from FILE to GDB_FILE.
	(gdb_fclose): Fix decl for gdb_fclose; parameter is now of
 	type GDB_FILE **.
	(gdb_file_adjust_strbuf): New function decl. function lives
 	in utils.c.
	(gdb_file_init_astring): New function decl. function lives
 	in utils.c.
	(gdb_file_get_strbuf): New function decl. function lives in
 	utils.c.
	(source_full_path_of): Declare.

	* exec.c (_initialize_exec): Make definition of file command be
	dependent upon dbx_commands not being set.
	(exec_file_attach): New function.
	(exec_file_command): Call it.
	(exec_ops): Add new target vector fields.

	* f-lang.h (f_print_type): Change FILE to GDB_FILE in decl.
	(f_val_print): Ditto.
	(f_val_print): Add parameter to the function decl.

	* f-valprint.c (_initialize_f_valprint): If xdb_commands is set,
	define lc command.
	(f77_create_arrayprint_offset_tbl): Change FILE to GDB_FILE.
	(f77_print_array): Ditto.
	(f77_print_array_1): Ditto.
	(f_val_print): Ditto.
	(f_val_print): Add a parameter; this new parameter is currently
 	only non-zero when handling C++ expressions.  In this file its
 	value is always 0.  changed fflush to gdb_flush.

	* gnu-nat.c: (init_gnu_ops): Add new target vector fields.
	(gnu_create_inferior): Add param to fork_inferior call.

	* hppa-tdep.c (after_prologue): If f is NULL, don't dereference
 	it.  if no debug info, return zero telling caller that we need to
 	find the end of the prologue via the hard way (instruction
 	examination).
	(find_unwind_entry): Avoid dereferencing a null
	pointer.
	(hppa_pid_to_exec_file): Deleted -- no longer used.
	(hppa_prepare_to_proceeed): Add prototype.
	(read_unwind_info): Purecov comments, bug fixes.
	(find_unwind_entry): Purecov comments, bug fixes.
	(find_stub_with_shl_get): Purecov comments.
	(frame_chain): Additional parens.
	(hppa_push_arguments): Changes to commented out version of routine.
	(hppa_fix_call_dummy): Purecov comments, fix location of end.o.
	(in_solib_call_trampoline): Purecov comments.
	(in_solib_return_trampoline): Purecov comments.
	(setup_d_pid_in_inferior): Fix location of end.o.
	(initialize_hp_cxx_exception_support): Fix location of end.o.
	(child_enable_exception_callback): Purecov comments.
	(pa_do_strcat_registers_info): Has a new parameter, precision, 
	which is passed into the call to pa_strcat_fp_reg to indicate
	whether to display the floating point registers using 
	single or double preceision.
	(pa_strcat_registers): Introduce local variable, precision, and 
	pass it into call to pa_strcat_fp_reg.
	(pa_strcat_fp_reg): Modified function. New parameter, precision,
	used by function to decide whether to use single or double
	precision. Also add the code to put a double precision value
	into a buffer.
	(pa_do_strcat_registers_info): New routine. called by 
	tui/tuiRegs.c:_tuiRegisterFormat to place a register name 
	and value into a string buffer. Interface may change in
	future. Checking this in so that we have something 
	functional for HP.
	(pa_strcat_registers): New routine, called by 
	pa_do_strcat_registers_info. Does same thing as 
	pa_print_registers except it takes a stream parameter. 
	This routine should disappear in future. Checking in
	so that we have something functional to give HP
	(pa_strcat_fp_reg): New routine, called by 
	pa_do_strcat_registers_info and pa_strvat_registers
	to place a floating point register name and value into
	a buffer. This interface may change in future. 
	Checking in so that we have something functional to give HP.
	(pa_print_fp_reg): Change prototype to match def'n.
	(pa_register_look_aside): Fix comment immediately before function.
	Changes to better support stack unwinding, reading and writing
 	registers for HPUX.  New includes ptrace.h, bfd.h, dl.h.
	(internalize_unwinds): Initialize new fields in table.
	(read_unwind_info): Entries in the table are now more complex
 	structures. References of the form ...->table[index].stub_type are
 	now ...->table[index].stub_unwind.stub_type.
	(find_proc_framesize): Add a check for pc == 0.
	(rp_saved): Entries in the table are now more complex
 	structures. References of the form ...->table[index].stub_type are
 	now ...->table[index].stub_unwind.stub_type.
	(frameless_function_invocation): Stub_type becomes
 	stub_unwind.stub_type
	(saved_pc_after_call): Stub_type becomes stub_unwind.stub_type
	(hppa_frame_saved_pc): Stub_type becomes stub_unwind.stub_type
	(frame_chain_valid): Stub_type becomes stub_unwind.stub_type
	(hppa_call_dummy): Stub_type becomes stub_unwind.stub_type
	(pa_print_fp_reg): Additional params to call val_print
	(in_solib_call_trampoline): Stub_type becomes
 	stub_unwind.stub_type
	(in_solib_return_trampoline): Stub_type becomes
 	stub_unwind.stub_typ
	(skip_trampoline_code): Additional code to handle external
 	dyncalls. Also stub_type becomes stub_unwind.stub_type
	(hppa_pid_to_exec_file): New funct. FOr HPUX 10.0 and beyond there
 	is an explicit ptrace request for getting the pathname associated
 	with a process id (pid).
	(hppa_pid_to_exec_file): Remove unwanted param from call to
 	call_ptrace.
	(args_for_find_stub): New structure.
	(find_unwind_entry): Deal with null input pc value.
	(rp_saved): Ditto.
	For the import stub, return -24 always.
	(hppa_frame_saved_pc): Save old pc value, to detect we are in a loop.
	(init_extra_frame_info): Use TARGET_READ_FP.
	(frame_chain): Include thread support.
	If the caller's pc is zero, we lose and return, just like stack
	bottom.
	Disable warning about being unable to find unwind info.
	(hppa_push_arguments): Rewrite.
	(hppa_value_returned_from_stack): New function. Handles returning
 	a value larger than 64 bits, stored on the stack.
	(find_stub_with_shl_get): New function. To look up symbols in shlibs.
	(cover_find_stub_with_shl_get): New function. Cover routine for 
	find_stub_with_shl_get to pass to catch_errors.
	(hppa_fix_call_dummy): Comment out old stub mechanism.
	Rewrite using dyncall.
	(target_read_fp): New function.
	(pa_do_registers_info): Floating point registers start at FP4.
	(pa_print_registers): Use FP4_REGNUM instead of 72.
	(skip_trampoline_code): Do machine instruction matching for PA2.0.
	(setup_d_pid_in_inferior): New function. Exception handling support.
	(initialize_hp_cxx_exception_support): Ditto.
	(child_enable_exception_callback): Ditto.
	(child_get_current_exception_event): Ditto.

	* hpux-thread.c (hpux_thread_ops): Add new target vector fields.

	* infcmd.c: Include objfiles.h.
	(attach_command): New local variable, exec_file, add code to
 	determine exec_file from pid if exec_file is not already known,
	call new target operation, target_post_attach -- a no-op unless
	on HPUXHPPA.
	(detach_command): After detaching, do a SOLIB_RESTART.
	(objfiles.h): Fix typo on include line.
	(run_command): Only call SOLIB_RESTART if it's defined.
	(detach_command): Ditto.
	(run_command): If program has already been started, and decide
	to restart it, the kill the target, flush the caches, 
	call init_wait_for_inferior. Also purge old solib objfiles.
	(run_stack_dummy): Add calls to
 	disable_watchpoints_before_interactive_call_start and
 	enable_watchpoints_after_interactive_call_stops.
	(finish_command): Alter code handling the evaluation and printing
 	of the target function's return value.
	(attach_command): When given a pid, but no exec file, try to
 	determine the exec file from the process. If the process does not
 	record a full path name, try to qualify the filename against the
 	source path.
	(_initialize_infcmd): Add some verbiage about how to use the
 	attach command.
	(do_registers_info): Changed calls to val_print
	made the symfile.h include preceed the 
	objfiles.h include. The other ordering caused a 
	compile problem (incompletely defined types).

	* inftarg.c (child_post_attach): Fix decl, make static.
	(proc_wait): Make globally visible.
	(child_insert_fork_catchpoint, etc): Fix return type.
	(child_detach_from_process): Declare.
	(child_attach_to_process): Declare.
	(child_stop): Make static to match decl.
	(ptrace_him): Change prototype back to return int. 
	(ptrace_me): Remove debug output, pass NULL to fork_inferior if
 	not HPUX.
	(proc_wait): function prototype and definition are enclosed by
 	proc_wait ifndef
	(child_attach_to_process): New function, does most of the work
 	that child_attach used to do and some additional work to determine
 	whether gdb is already attached to the target how to react.
	(child_attach): Altered. It's now a wrapper for
 	child_attach_to_process.
	(child_require_attach): New function, called if should attach even
 	when gdb is already attached to target.
	(child_detach_from_process): New function, does most of the work
 	that child_detach used to do and some additional work to determine
 	whether gdb is currently attached to the target.
	(child_detach): Altered. It's now a wrapper for
 	child_detach_from_process.
	(child_require_detach): New function, called if should try to
 	detach even when gdb is not attached to target.
	(ptrace_him): Calls a new function,
 	target_acknowledge_forked_child.  Currently,
 	target_acknowledge_forked_child, is only defined to do something
 	for HPUX.
	(child_create_inferior): Changed call to fork_inferior.
	(child_ops): Add to_require_attach and to_require_detach fields
 	to the child_ops target ops vector.
	Some hacks for ttrace work:
	(child_wait): Additional local variables, additional code in
	while loop to check for process exited, process forked, 
	process vforked, process execd.
	(child_thread_alive): John B. seems to think that the kill 
	call is inapproapriate for HPUX.
	(child_attach_to_process): Using strtol rather than atoi.
	no longer check for case where there is no known exec file.
	(child_post_attach): New function, a default, a no-op.
 	(child_insert_fork_catchpoint): New function, a default, a no-op.
	(child_remove_fork_catchpoint): New function, a default, a no-op.
	(child_insert_vfork_catchpoint): New function, a default, a no-op.
	(child_remove_vfork_catchpoint): New function, a default, a no-op.
	(child_can_follow_vfork_prior_to_exec ):new function, a default, 
 	a no-op.
	(child_insert_exec_catchpoint): New function, a default, a no-op.
	(child_remove_exec_catchpoint): New function, a default, a no-op.
	(child_has_execd): New function, a default, returns 0.
	(child_reported_exec_events_per_exec_call): New function, a 
 	default, returns 1.
	(child_has_exited): New function, a default.
	(child_core_file_to_sym_file): New function, a default, returns NULL.
	(child_ops): Initialize new target vector fields.

	* jv-lang.h: (Java_val_print): Add embedded_offset param to func
 	decl.

	* jv-valprint.c: Changing calls to val_print to accomodate new param.
	(java_value_print): Add embedded_offset param to val_print call
	(java_print_value_fields): Add embedded_offset param to val_print
	call.
	(java_val_print): Add embedded_offset param. alter call to 
	c_val_print to accomodate embedded_offset param.

	* language.c (lang_bool_type): Return builtin_type_bool in c++
	case.
	(unk_lang_val_print): Add embedded_offset param to 
	prototype decl and definition.

	* language.h (LA_VAL_PRINT macro, la_val_print function decl):
 	altered to accomodate the new parameter to the various print
 	functions.
	
	* m2-lang.h (m2_val_print): Add a parameter to the function decl.

	* m2-valprint.c (m2_val_print): Add a parameter.
	This parameter is currently only used when evaluating C++
 	expressions. So, it is always 0 in this file.

	* m3-nat.c (m3_create_inferior): Add param to fork_inferior call
	(m3_pid_to_exec_file): New function
	(m3_ops): Add new target vector fields.

	* mac-nat.c (init_child_ops): Add new target vector fields.

	* mips-tdep.c: Chnages to accomodate additional parameter
	to val_print.
	(mips_print_register): Alter calls to val_print

	* monitor.c (monitor_write): Change stderr to gdb_stderr.
	(monitor_remove_breakpoint): Ditto.
	(init_base_monitor_ops): Add new target vector fields.

	* ppc-bdm.c (init_bdm_ppc_ops): Add new target vector fields.
	
	* printcmd.c (do_examine): When saving a value_ptr, remove it from
 	the list of value_ptr's to be freed automatically; when discarding
 	a previously saved value_ptr, free it.
	(print_formatted): Update comments; add new comments.
	(printf_command, print_insn): Purecov comments.
	(_initialize_printcmd): Add assign as a command if dbx_commands is
 	set; create va as an alias for disassemble if xdb_commands is set.
	(address_info): New cases LOC_INDIRECT and
 	LOC_THREAD_LOCAL_STATIC.
	(display_command): If tui_version and exp starts with a '$', then
 	don't display it unless tui_vSetLayoutTo fails.
	(disassemble_command): Add tuiDo calls.
	(print_scalar_formatted): For integers that are long long, check
 	the print format and print out in binary octal, decimal, or
 	hex. Call the new print_*_chars functions in valprint.c
	(print_frame_args): Altered calls to val_print, to reflect
 	additional parameter to val_print (case LOC_BASEREG_ARG).

	* procfs.c: (Procfs_init_inferior): Return value is now a void.
	(procfs_ops): Add new target vector fields.
	(procfs_create_inferior): Fix call to fork_inferior -- need another
	parameter. 

	* remote-adapt.c (adapt_open): Change stderr to gdb_stderr.
	(adpat_insert_breakpoint): Ditto.
	(init_adapt_ops): Add new target vector fields.

	* remote-array.c (array_wait): Change fflush to gdb_flush and
 	stdout to gdb_stdout.
	(init_array_ops): Add new target vector fields.

	* remote-bug.c (bug_load): Change fflush to gdb_flush; stdout to
 	gdb_stdout.
	(bug_wait): Change stderr to gdb_stderr.
	(bug_insert_breakpoint): Ditto.
	(init_bug_ops): Add new target vector fields.

	* remote-e7000.c
	(init_e7000_ops): Add new target vector fields.
	* remote-eb.c (init_eb_ops): Ditto.
	* remote-es.c (init_es1800_ops): Ditto.
	(init_es1800_child_ops): Ditto.
	* remote-es.c (init_es1800_ops): Ditto.
	(init_es1800_child_ops): Ditto.
	* remote-hms.c (init_hms_ops):  Ditto.
	* remote-hms.c (init_hms_ops): Ditto.
	* remote-nindy.c (init_nindy_ops): Ditto.
	* remote-nrom.c	(init_nrom_ops): Ditto.
	* remote-os9k.c (init_rombug_ops): Ditto.
	* remote-rdp.c (init_remote_rdp_ops): Ditto.
	* remote-sds.c (init_sds_ops): Ditto.
	* remote-sim.c (init_gdbsim_ops): Ditto.
	* remote-st.c (init_st2000_ops): Ditto.
	* remote-udi.c (init_udi_ops): Ditto.
	* remote-vx.c (init_vx_ops): Ditto.
	(init_vx_run_ops): Ditto.
	* remote-vx.c: (Init_vx_ops): Ditto.
	(init_vx_run_ops): Ditto.

	* remote-mips.c (mips_getstring): Change stderr to gdb_stderr.
	(pmon_insert_breakpoint): Ditto.
	(pmon_remove_breakpoint): Ditto.
	(check_lsi_error): Ditto.
	(common_breakpoint): Ditto.
	(pmon_makeb64): Ditto.

	* remote-mips.c (mips_xfer_memory): Change fflush to gdb_flush;
	change stdout to gdb_stdout.

	* remote-mm.c (mm_open): Change stderr to gdb_stderr.
	(init_mm_ops): Add new target vector fields.
	(mm_load): Fixed params in commented out call to symbol_file_add.

	* remote-nindy.c (instream): Change decl to FILE.

	* remote-udi.c (udi_load): Fixed params in call to symbol_file_add.

	* remote-vx.c (vx_add_symbols): Fixed params in call to
 	symbol_file_add.

	* remote.c (init_remote_ops): Cosmetic change to match expected
	test output.

	* rs6000-nat.c (add_vmap): Add params to call to allocate_objfile.

	* scm-lang.h:  Add parameter to scm_val_print function decl.

	* scm-valprint.c (scm_scmval_print): Cast svalue to (int); new
 	parameter.  This parameter is currently only used when evaluating
 	C++ expressions. So, it is always 0 in this file.
	(c_val_print): Fixed prototype decl; it needed an embedded_offset
 	param.

	* sol-thread.c (sol_core_ops): Add new target vector fields.
	(sol_thread_ops): Ditto.
	
	* somsolib.c (DLD_FLAGS_MAPPRIVATE): New macro. 
	Define bit of __dld_flags in HP-UX a.out files.
	(DLD_FLAGS_HOOKVALID): Ditto.
	(DLD_FLAGS_LISTVALID): Ditto.
	(DLD_FLAGS_BOR_ENABLE): Ditto.
	(som_solib_total_st_size): Cumulative size in bytes of the 
	symbol tables of all shared objects on the so_list_head list.
	(som_solib_st_size_threshhold_exceeded): Threshold for adding symbols
	for shlibs.
	(som_solib_sizeof_symbol_table): New function. Computes size of 
	symbol table for a shlib.
	(som_solib_load_symbols): New function. Load symbols from shlib.
	(som_solib_add): Detect if __dld_list is not valid. 
	Record main program's symbol table size.
	Load symbols if called from command line.
	Keep threshold into account when loading shlib symbols.
	(som_solib_create_inferior_hook): Use dld_flags macros.
	(som_sharedlibrary_info_command): Let user know if symbols were 
	not loaded.
	(som_solib_restart): Discard all the shlibs descriptors.
	(_initialize_som_solib): Chenge help message for auto-solib-add
	command.
	Set threshold for symbol table to 50 megabytes.
	(_initialize_som_solib): Add call to som_solib_restart.
	(som_solib_restart): New function
	(som_solib_in_dynamic_linker): New function
	(som_solib_desire_dynamic_linker_symbols): New function
	(som_solib_unloaded_library_pathname): New function
	(som_solib_loaded_library_pathname): New function
	(som_solib_library_pathname): New function
	(som_solib_have_unload_event): New function
	(som_solib_have_load_event): New function
	(som_solib_create_catch_unload_hook): New function
	(som_solib_create_catch_load_hook): New function
	(som_solib_create_inferior_hook): Rewritten
	dld_cache: New struct
	addr_and_unwind_t: New struct
	(find_unwind_entry) add prototype
	Include assert.h, remove references to ASSERT macro,
	add include of fcntl.h so that O_RDONLY is defined.
	(som_solib_create_inferior_hook): Introduce new local
 	msymbol2 and change some msymbol's to msymbol2's -- was clobbering
 	msymbol, passing a NULL to lookup_minimal_symbol_solib_trampoline,
	and ultimately core dumping with a SEGV.
	(som_solib_mapped_entry): Additional comments for text_addr, 
	text_link_addr, text_end, and tsd_start_addr fields. Commenting
	out 2 tsd fields, __data_start and __data_end. 
	(som_solib_add_solib_objfile): Add params to calls to symbol_file_add.
	Add some code for distinguishing between a shared library and other 
	objfiles. This appears to be a prelude to thread local storage.	
	(som_solib_load_symbols): Changes to printf statement 
	enclosed by SOLIB_DEBUG ifdef.
	(som_solib_add): Change comment to correctly specify path
	to end.o -- /opt/langtools/lib/end.o. changes to printf statement
 	enclosed by SOLIB_DEBUG ifdef.
	Removed several SOLIB_DEBUG ifdefs and the associated printfs.
	Add code to find the start address for the object file's thread 
	local storage
	(som_solib_create_inferior_hook): Fix warning messages use correct
	path to end.o -- /opt/langtools/lib/end.o. Change control flow. 
	No longer user early returns from function is cases of error.
	(reset_inferior_pid): New function
	(som_solib_remove_inferior_hook): New function
	(so_lib_thread_start_addr): New function. used for tsd.
	(struct som_solib_mapped_entry): Add new field tsd_start_addr.
	(struct so_list): Add new field solib_addr.
	(som_solib_add_solib_objfile): New function. 
	(som_solib_load_symbols): Rewritten.
	(som_solib_add): Make sure we don't load the symbols in if the 
	threshold was exceeded.
	(som_solib_get_solib_by_pc): New function. Return the address of
 	handle of the shared library.
	(som_solib_restart): Disable breakpoints at restart.

	* sparcl-tdep.c (init_sparclite_ops): Add new target vector fields.

	* target.c (cleanup_target): Changed casting of default functions
 	for to_has_forked, to_has_vforked, to_pid_to_exec_file to get rid
 	of warnings.  Fixed PARAMS for to_has_syscall_event.  Fixed the
 	return type on a few of the default function values.
	(cleanup_target): Changes in the de_fault macro, both to
	accomodate the new target_ops vector fields and to use
	more accurate default functions.
	(debug_to_open): Change stderr to gdb_stderr.
	(debug_to_close): Ditto.
	(debug_to_attach): Ditto.
	(debug_to_post_attach): Ditto.
	(debug_to_require_attach): Ditto.
	(debug_to_detach): Ditto.
	(debug_to_require_detach): Ditto.
	(debug_to_resume): Ditto.
	(debug_to_wait): Ditto.
	(debug_to_post_wait): Ditto.
	(debug_to_fetch_registers): Ditto.
	(debug_to_store_registers): Ditto.
	(debug_to_prepare_to_store): Ditto.
	(debug_to_xfer_memory): Ditto.
	(debug_to_files_info): Ditto.
	(debug_to_insert_breakpoint): Ditto.
	(debug_to_remove_breakpoint): Ditto.
	(debug_to_terminal_init): Ditto.
	(debug_to_terminal_inferior): Ditto.
	(debug_to_terminal_ours_for_output): Ditto.
	(debug_to_terminal_ours): Ditto.
	(debug_to_terminal_info): Ditto.
	(debug_to_kill): Ditto.
	(debug_to_load): Ditto.
	(debug_to_lookup_symbol): Ditto.
	(debug_to_create_inferior): Ditto.
	(debug_to_post_startup_inferior): Ditto.
	(debug_to_acknowledge_created_inferior): Ditto.
	(debug_to_clone_and_follow_inferior): Ditto.
	(debug_to_post_follow_inferior_by_clone): Ditto.
	(debug_to_insert_fork_catchpoint): Ditto.
	(debug_to_remove_fork_catchpoint): Ditto.
	(debug_to_insert_vfork_catchpoint): Ditto.
	(debug_to_remove_vfork_catchpoint): Ditto.
	(debug_to_has_forked): Ditto.
	(debug_to_has_vforked): Ditto.
	(debug_to_can_follow_vfork_prior_to_exec): Ditto.
	(debug_to_post_follow_vfork): Ditto.
	(debug_to_insert_exec_catchpoint): Ditto.
	(debug_to_remove_exec_catchpoint): Ditto.
	(debug_to_has_execd): Ditto.
	(debug_to_reported_exec_events_per_exec_call): Ditto.
	(debug_to_has_syscall_event): Ditto.
	(debug_to_has_exited): Ditto.
	(debug_to_mourn_inferior): Ditto.
	(debug_to_can_run): Ditto.
	(debug_to_notice_signals): Ditto.
	(debug_to_thread_alive): Ditto.
	(debug_to_stop): Ditto.
	(debug_to_enable_exception_callback): Ditto.
	(debug_to_get_current_exception_event): Ditto.
	(debug_to_pid_to_exec_file): Ditto.
	(debug_to_core_file_to_sym_file): Ditto.
	(default_clone_and_follow_inferior): New function prototype
 	decl and function definition.
	(dummy_target): Add new target_ops vector fields and their
 	initializations.  More target_ops vector changes for HPUX new
 	fields.
	(de_fault): Add new HPUX specific target_ops operations to the
	de_fault macro
	(INHERIT): Add new HPUX specific target_ops operations.
	(debug_to_post_wait): New function.
	(debug_to_post_startup_inferior): Ditto.
	(debug_to_acknowledge_created_inferior): Ditto.
	(debug_to_clone_and_follow_inferior): Ditto.
	(debug_to_post_follow_inferior_by_clone): Ditto.
	(debug_to_create_catch_fork_hook): Ditto.
	(debug_to_create_catch_vfork_hook): Ditto.
	(debug_to_has_forked): Ditto.
	(debug_to_has_vforked): Ditto.
	(debug_to_post_follow_vfork): Ditto.
	(setup_target_debug): Initialize new target_ops vector fields.
	(nosupport_runtime): New function, used in cleanup_target
	(update_current_target): Add new new target_ops vector fields to
	the INHERIT macro definition.
	(generic_mourn_inferior): The call to breakpoint_init_inferior now
 	takes a parameter.
	(normal_pid_to_str): Add a \0 to the end of buf.
	(debug_to_has_syscall_event): New function.
	(debug_to_enable_exception_callback): New function.
	(debug_to_get_current_exception_event): New function.
	(setup_target_debug): Initialize the 3 new target_ops vector fields
	(struct signals): Fix message associated with SIGRETRACT.
	(return_one): New function, used by the de_fault macro
	(debug_to_post_attach): New function.
	(debug_to_wait): Add new cases TARGET_WAITKIND_FORKED,
	TARGET_WAITKIND_VFORKED, TARGET_WAITKIND_EXECD.
	(debug_to_insert_fork_catchpoint): New function.
	(debug_to_remove_fork_catchpoint): Ditto.
	(debug_to_insert_vfork_catchpoint): Ditto.
	(debug_to_remove_vfork_catchpoint): Ditto.
	(debug_to_can_follow_vfork_prior_to_exec): Ditto.
	(debug_to_insert_exec_catchpoint): Ditto.
	(debug_to_remove_exec_catchpoint): Ditto.
	(debug_to_core_file_to_sym_file): Ditto.
	(setup_target_debug): Give new fields in current_target target_ops
 	vector values.

	* target.h: Include symtab.h.
	(target_waitkind): New enumerated values
	TARGET_WAITKIND_SYSCALL_ENTRY, TARGET_WAITKIND_SYSCALL_RETURN,
	TARGET_WAITKIND_FORKED, TARGET_WAITKIND_VFORKED, 
	TARGET_WAITKIND_EXECD.
	(target_waitstatus): Add a syscall_id field to structure.
	(child_has_syscall_event): New decl.
	(child_thread_alive): New decl.
	(target_ops): Add 3 new fields: To_has_syscall_event,
	to_enable_exception_callback, to_get_current_exception_event 
	(target_enable_exception_callback): New macro.
	(target_has_syscall_event): New macro. 
	(target_get_current_exception_event): New macro.
	(TARGET_DISABLE_HW_WATCHPOINTS): New macro.
	(TARGET_ENABLE_HW_WATCHPOINTS): New macro.
	(PC_REQUIRES_RUN_BEFORE_USE): New macro.
	(target_tid_to_str): New macro.
	(target_waitstatus): Additional fields in struct to keep track
	of child pid and pathname to execd file.
	(target_ops): Add in the new target_ops function pointer fields.
	New macros to go along with new target_ops fields.
	In target_waitstatus.value, change name of child_pid field to
	related_pid.
	(target_pid_or_tid_to_str): Define default macro.
	Add missing #endif after PC_REQUIRES_RUN_BEFORE_USE definition
	(ENSURE_VFORKING_PARENT_REMAINS_STOPPED): Define default macro.
	(RESUME_EXECD_VFORKING_CHILD_TO_GET_PARENT_VFORK): Define default
	macro.
	There are new function decls for to_require_attach
	and to_require_detach. There are also new macros, 
	target_require_attach and target_require_detach. There are
	also new function decls for find_default_require_detach
	and find_default_require_attach.
	(target_ops): New fields to_post_wait, to_post_startup_inferior
 	to_acknowledge_created_inferior, to_clone_and_follow_inferior,
 	to_post_follow_inferior_by_clone, to_create_catch_fork_hook,
 	to_create_catch_vfork_hook, to_has_forked, to_has_vforked,
 	to_post_follow_vfork, to_pid_to_exec_file.
	New function definitions child_pid_to_exec_file, child_post_wait,
 	child_post_startup_inferior, child_acknowledge_created_inferior,
 	child_clone_and_follow_inferior,
 	child_post_follow_inferior_by_clone, child_create_catch_fork_hook,
 	child_create_catch_vfork_hook, child_has_forked,
 	child_has_vforked, child_acknowledge_created_inferior,
 	child_post_follow_vfork.
	New macros target_post_startup_inferior,
 	target_acknowledge_created_inferior,
 	target_clone_and_follow_inferior,
 	target_post_follow_inferior_by_clone,
 	target_create_catch_fork_hook, target_create_catch_vfork_hook,
 	target_pid_to_exec_file.
	(find_default_clone_and_follow_inferior): New function prototype.


	* v850ice.c (init_850ice_ops): Init new target vector fields.

	* valprint.c (print_binary_chars): Print out long long as
	a binary number.
	(print_octal_chars): Print out long long as an octal number
	(print_decimal_chars): Print out long long as a decimal number
	(strcat_longest): Define it.
	* valprint.c: Hp merge, 4/15/98 snapshot
	Add parameter to val_print. This is used for
	evaluating C++ expressions. 
	
	* value.h (VALUE_POINTED_TO_OFFSET): New macro.
	Add field pointed_to_offset to value structure.
	Add prototypes for new functions in valops.c.
	(write_register_pid): Change prototype to match
 	function.
	(val_print function decl): Additional parameter.
  	(VALUE_EMBEDDED_OFFSET): New macro.
 	(find_rt_vbase_offset): New function decl -- for C++ support.

Wed Dec 23 15:03:42 1998  Per Bothner  <bothner@cygnus.com>

	* Makefile.in (READLINE_CFLAGS):  Search $(READLINE_SRC)/.. rather
	than $(READLINE_SRC) so #include <readline/readline.h> will work.
	* top.c:  #include <readline/history.h> instead of "history.h".
	* tracepoint.c:  Likewise.
	* mac-xdep.c:  Likewise.

Wed Dec 23 12:32:00 1998  Andrew Cagney  <cagney@chook.cygnus.com>

	* defs.h (TARGET_FLOAT_FORMAT, TARGET_DOUBLE_FORMAT): Define using
 	TARGET_BYTE_ORDER and not target_byte_order.

Tue Dec 22 10:51:33 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* config/i386/cygwin.mh (TERMCAP): define.
 	(from Chris Faylor, cgf@cygnus.com)

	* top.c: specify directory name for including readline.h

	* tracepoint.c: ditto.

	* utils.c: ditto.

Mon Dec 21 13:30:34 1998  Mark Alexander  <marka@cygnus.com>

	* value.c (value_virtual_fn_field): Handle the situation where
	vtbl is a pointer to a structure instead of a pointer to an array.

Mon Dec 21 10:38:11 1998  Andrew Cagney  <cagney@chook>

	* mips-tdep.c: (MIPS_DEFAULT_FPU_TYPE): Default to
 	MIPS_FPU_DOUBLE.

1998-12-17  J.T. Conklin  <jtc@redbacknetworks.com>

	* blockframe.c (get_frame_saved_regs): If the saved_regs_addr ptr
	is null, ensure that saved registers are copied from the local
	variable that was used to obtain them.

Sat Dec 19 09:55:09 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* mips-tdep.c (mips32_heuristic_proc_desc):  Clear temp_saved_regs
	on restart.  Fixes problem with backtracing through functions that
	use virtual frame pointers.

Fri Dec 18 14:23:34 1998  Andrew Cagney  <cagney@chook>

	* mips-tdep.c (mips_push_arguments): Don't left-shift small
 	structs being passed in a register when an O64 target.

	* config/mips/tm-mips.h (enum mips_fpu_type, mips_fpu): Move to
 	mips-tdep.c.

	* mips-tdep.c (mips_fpu_string): Delete variable.
	(mips_fpu_type_auto): New variable.
	(mips_fpu_type): Rename mips_fpu.
	(_initialize_mips_tdep): Delete initialization of mips_fpu et.al.
  	Rewrite ``set mipsfpu'' command set.
	(set_mipsfpu_command, show_mipsfpu_command,
 	set_mipsfpu_single_command, set_mipsfpu_double_command,
 	set_mipsfpu_none_command, set_mipsfpu_auto_command): New
 	functions, handle commands.
	(mips_push_arguments, mips_push_dummy_frame, mips_pop_frame,
 	mips_extract_return_value): Update.
	(_initialize_mips_tdep): Set mips_fpu_type according to current
 	processor.
	(_initialize_mips_tdep): Only define ``set processor'' command
 	when not multi-sim.
	
Fri Dec 18 12:56:56 1998  Andrew Cagney  <cagney@chook>

	* gdbarch.h (gdbarch_init_ftype): Pass struct gdbarch_info
 	by-value.
	(struct gdbarch_info): Add struct gdbarch_tdep_info *tdep_info.
	* gdbarch.c (gdbarch_update): Update.
	* mips-tdep.c: (mips_gdbarch_init): Update

	* gdbarch.c (gdbarch_update): Add more tracing.
	
Thu Dec 17 02:15:40 1998  Andrew Cagney  <cagney@chook.cygnus.com>

	* configure.tgt (gdb_target): Identify mips64*vr4100*-*-elf* as
 	vr4100.
	* config/mips/vr4100.mt, config/mips/tm-vr4100.h: Replace
 	vr4xxx.mt and tm-vr4xxx.h.
	
Thu Dec 17 02:06:17 1998  Andrew Cagney  <cagney@chook.cygnus.com>

	* mips-tdep.c (mips_gdbarch_init): New function. Initialize a MIPS
 	architecture vector.
	(_initialize_mips_tdep): Register MIPS with GDBARCH.
	(struct gdbarch_tdep): Define.
	(MIPS_EABI, MIPS_LAST_FP_ARG_REGNUM, MIPS_LAST_ARG_REGNUM): When
 	multi-arch, get value from gdbarch->tdep.

Thu Dec 17 02:01:58 1998  Andrew Cagney  <cagney@chook>

	* gdbtypes.c (_initialize_gdbtypes): Register all builtin types
 	with gdbarch so that they are updated whenever the architecture is
 	changed.

Thu Dec 17 01:58:16 1998  Andrew Cagney  <cagney@chook>

	* gdbarch.h (GDB_MULTI_ARCH): New macro, default to zero.
	(current_gdbarch): Current architecture pointer.
	* gdbarch.c (struct gdbarch): Define.

	* gdbarch.h (TARGET_ARCHITECTURE, TARGET_BYTE_ORDER,
 	TARGET_LONG_BIT, TARGET_LONG_LONG_BIT, TARGET_PTR_BIT): When
 	multi-arch force definition.
	* gdbarch.h, gdbarch.c (gdbarch_tdep, gdbarch_bfd_arch_info,
 	gdbarch_byte_order, {set,}gdbarch_long_bit,
 	{set,}gdbarch_long_long_bit, {set,}gdbarch_ptr_bit): Corresponding
 	functions.

	* gdbarch.h (struct gdbarch_list, struct gdbarch_info,
 	gdbarch_init_ftype), gdbarch.c (register_gdbarch_init): Mechanism
 	for registering an architecture with GDB.
	(gdbarch_list_lookup_by_info, gdbarch_alloc, gdbarch_update,
 	verify_gdbarch): Support functions.

	* gdbarch.h (gdbarch_data_ftype), gdbarch.c
 	(register_gdbarch_data, gdbarch_data): Mechanism for maintaining
 	per-architecture pointers.
	(init_gdbarch_data): Support functions.
	
	* gdbarch.h (gdbarch_swap_ftype), gdbarch.c
 	(register_gdbarch_swap): Ditto for swapped memory regions.
	(init_gdbarch_swap, swapout_gdbarch_swap, swapin_gdbarch_swap):
 	Support functions.
	
	* gdbarch.c (set_endian_big, set_endian_little, set_architecture,
 	info_architecture, set_gdbarch_from_file): Hook in multi-arch
 	code by calling gdbarch_update.
	(default_gdbarch): Default multi-arch vector.  Use host's type
 	system for values.
	
Thu Dec 17 01:34:36 1998  Andrew Cagney  <cagney@chook>

	* gdbtypes.c (build_gdbtypes): New function.
	(_initialize_gdbtypes): Call.

Wed Dec 16 11:47:00 1998  Andrew Cagney  <cagney@chook>

	* gdbarch.c (show_architecture): Use TARGET_ARCHITECTURE.
	* gdbarch.h, gdbarch.c: Fix typo's. Use struct's in preference to
 	types.
	* gdbarch.h, gdbarch.c (gdbarch_debug): Add ``set archdebug'' to
 	command set.

Tue Dec 15 23:46:40 1998  Andrew Cagney  <cagney@chook>

	* config/mips/tm-*.h: (TARGET_BYTE_ORDER_DEFAULT,
 	TARGET_BYTE_ORDER_SELECTABLE_P): Replace TARGET_BYTE_ORDER and
 	TARGET_BYTE_ORDER_SELECTABLE.
	
1998-12-14  Anthony Thompson   (athompso@cambridge.arm.com)

	* remote-rdp.c (rdp_init): Don't discard first character on reset.
	(translate_open_mode): Define table.
	(exec_swi): Handle SWI_Clock.  SWI_Open now handles stdin/stdout.
	SWI_Write returns number of bytes not written.  SWI_Read does the
	same.  SWI_Seek should return success/failure flag.  Fix SWI_Flen.

1998-12-14  J.T. Conklin  <jtc@redbacknetworks.com>

	* config/i386/nbsd.mh, config/m68k/nbsd.mh, config/ns32k/nbsd.mh
	(XDEPFILES): Add ser-tcp.o.

Mon Dec 14 14:46:13 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* monitor.c (monitor_expect, monitor_printf_noecho,
 	monitor_printf): Always compile EXTRA_RDEBUG code.
	(RDEBUG): Ditto.

	From Michael Meissner <meissner@cygnus.com>:
	* ppcbug-rom.c (init_ppc_cmds): Cleanup formatting.

1998-12-08  Michael Meissner  <meissner@cygnus.com>

	* monitor.c (monitor_printable_string): New function to convert a
	string into a printable representation.
	(monitor_error): Call error after converting string into printable
	format.
	(monitor_printf{,_noecho}): If EXTRA_RDEBUG is defined, convert
	string into printable form before printing.
	(monitor_expect): Ditto.
	(monitor_read_memory{,_single}): Call monitor_error, not error.
	(monitor_read_memory): Return immediately if length is 0.

	* ppcbug-rom.c (init_ppc_cmds): Fill in dump_registers field,
 	which is now required.

Mon Dec 14 11:01:39 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Consolidate the semi-dynamic target system
 	dependant GDB parameters.
	(set_gdbarch_from_file): Combine set_architecture_from_file and
 	set_byte_order_from_file.
	* top.c, defs.h, printcmd.c: Delete them from here.
	* Makefile.in: Add gdbarch.[ch].
	* exec.c (exec_file_command): Call set_gdbarch_from_file.

Sun Dec 13 09:52:51 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (TARGET_PRINT_INSN_INFO, TARGET_PRINT_INSN): Define.
	(TARGET_ARCHITECTURE, TARGET_ARCHITECTURE_AUTO): Define.
	(TARGET_BYTE_ORDER_AUTO): Define.
	(TARGET_BYTE_ORDER_SELECTABLE_P): Provide default. Replaces
 	TARGET_BYTE_ORDER_SELECTABLE. Handle compat issues.
	(BITS_BIG_ENDIAN): Simplify.
	(TARGET_FLOAT_FORMAT): Ditto.
	(TARGET_DOUBLE_FORMAT): 

	* remote-e7000.c, sh-tdep.c, printcmd.c, remote-sim.c,
 	remote-rdi.c, sparc-tdep.c: Update.
	
	* config/powerpc/tm-ppcle-eabi.h, config/rs6000/tm-rs6000.h,
 	config/powerpc/tm-ppc-eabi.h, config/mn10300/tm-mn10300.h:
 	Convert.

Sat Dec 12 09:28:13 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* frame.h (struct frame_info): Add CORE_ADDR *saved_regs and
 	struct frame_extra_info *extra_info.
	(frame_obstack_alloc, frame_saved_regs_zalloc): Prototype.
	(SIZEOF_FRAME_SAVED_REGS): Provide default.
	(FRAME_INIT_SAVED_REGS): Provide default.
	(struct frame_saved_regs): Deprecate.
	(EXTRA_FRAME_INFO): Deprecate.
	
	* blockframe.c (frame_obstack_alloc, frame_saved_regs_zalloc): New
 	function.
	(generic_get_saved_register): Use FRAME_INIT_SAVED_REGS and
 	frame->saved_regs.
	(frame_cache_obstack): Make static.
	(get_frame_saved_regs): Deprecate. Copy the saved regs into the
 	frame buffer.

	* stack.c (frame_info): Rewrite using frame->saved_regs and
 	FRAME_INIT_SAVED_REGS.
	* findvar.c (find_saved_register): Ditto.

	* config/mn10300/tm-mn10300.h (EXTRA_FRAME_INFO): Delete.
	(FRAME_FIND_SAVED_REGS): Replace with FRAME_INIT_SAVED_REGS. No-op.
	* mn10300-tdep.c: Update.
 	(analyze_dummy_frame): New function.
	(struct frame_extra_info): Define.
	(mn10300_init_extra_frame_info): Update.
	
	* config/rs6000/tm-rs6000.h: (EXTRA_FRAME_INFO): Delete.
 	(FRAME_FIND_SAVED_REGS): Replace with FRAME_INIT_SAVED_REGS.
	(FRAME_ARGS_ADDRESS): Replace with function.

	* rs6000-tdep.c (frame_get_saved_regs): Rename from
 	frame_get_cache_fsr.
	(rs6000_init_extra_frame_info): New function.
	(rs6000_frame_init_saved_regs): Call frame_get_saved_regs.
	(FUNCTION_START_OFFSET): Delete references, was ZERO.
	(rs6000_frame_args_address): New function.
	(frame_initial_stack_address): Update
	
	* config/mips/tm-mips.h (EXTRA_FRAME_INFO): Remove saved_regs.
	(FRAME_INIT_SAVED_REGS): Rename FRAME_FIND_SAVED_REGS, update.
	* mips-tdep.c (mips_find_saved_regs, read_next_frame_reg,
 	init_extra_frame_info, mips_pop_frame): Update.
	* config/alpha/tm-alpha.h (FRAME_INIT_SAVED_REGS,
 	EXTRA_FRAME_INFO), alpha-tdep.c (alpha_find_saved_regs,
 	alpha_pop_frame, init_extra_frame_info): Ditto.
	
	* i960-tdep.c, m88k-tdep.c, h8300-tdep.c: Update.
	* config/sparc/tm-sparc.h, config/a29k/tm-a29k.h: Define
 	FRAME_INIT_SAVED_REGS as no-op.

	* z8k-tdep.c (z8k_init_frame_saved_regs): Rename
 	get_frame_saved_regs.
	(examine_frame, z8k_skip_prologue): Update.
	* config/z8k/tm-z8k.h (FRAME_INIT_SAVED_REGS): Define.

1998-12-11  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	From J.T. Conklin  <jtc@redbacknetworks.com>:
	* i386-stub.c (handle_exception): Add support for 'P' command.
	(NUMREGS): New macro.

Fri Dec 11 09:07:05 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* i386b-nat.c: Include "expression.h".

	* symtab.h: Don't include "gnu-regex.h".
	
	* solib.c (solib_add_common_symbols): Cast parameters passed to
 	make_cleanup to use the new make_cleanup_func typedef.

	* inftarg.c: Include "wait.h" after, rather than before, <wait.h>.
  	"wait.h" was defining all WIF* macro's instead of filling in those
 	that <wait.h> missed.

Fri Dec 11 09:52:04 1998  Andrew Cagney  <cagney@chook>

	* mipsm3-nat.c, hppah-nat.c, infptrace.c, i386gnu-nat.c,
 	hppab-nat.c, core-aout.c, arm-xdep.c, alpha-nat.c, altos-xdep.c,
 	pyr-xdep.c, remote-st.c, remote-os9k.c, tahoe-tdep.c, pyr-tdep.c,
 	vax-tdep.c: Replace reg_name with REGISTER_NAME.

Thu Dec 10 15:19:40 1998  David Taylor  <taylor@texas.cygnus.com>

	The following changes were made by Jim Blandy <jimb@cygnus.com>,
 	Edith Epstein <eepstein@cygnus.com>, Elena Zannoni
 	<ezannoni@cygnus.com> Stan Shebs <shebs@cygnus.com>, and David
 	Taylor <taylor@cygnus.com>, as part of the project to merge in
 	changes originally made by HP; HP did not create ChangeLog
 	entries.
	
	* annotate.c (annotate_catchpoint): New function.

	* annotate.h (annotate_catchpoint): declare it; add new includes
 	(symtab.h and gdbtypes.h).

	* buildsym.h: add external var processing_hp_compilation.

	* coff-solib.h: 
	(SOLIB_REMOVE_INFERIOR_HOOK): new macro. defined to 0.
	functionality not implemented for coff.
	(SOLIB_CREATE_CATCH_LOAD_HOOK): New macro; generate error msg for coff.
	(SOLIB_CREATE_CATCH_UNLOAD_HOOK): ditto.
	(SOLIB_HAVE_LOAD_EVENT): ditto.
	(SOLIB_LOADED_LIBRARY_PATHNAME): ditto.
	(SOLIB_HAVE_UNLOAD_EVENT): ditto.
	(SOLIB_UNLOADED_LIBRARY_PATHNAME): ditto.
	(SOLIB_IN_DYNAMIC_LINKER): ditto.
	(SOLIB_RESTART): ditto.

	* complaints.h: add ifdef...endif pair at beginning and end of file.

	* dstread.c (dst_symfile_read): the parameter to fileno
	must be of type FILE *. So cast abfd->iostream in the 
	call to fileno must be cast as a FILE *, not a GDB_FILE *.
	This will work because abfd->iostream is declared and 
	given a value in bdf and bfd will continue to use FILE 
	rather than GDB_FILE.

	* dwarf2read.c (dwarf_bool_name): change parameter from bool
	to mybool.  sigh.

	* expression.h: include symtab.h
	
	* frame.h (print_only_stack_frame, show_stack_frame,
	show_frame_info): add prototypes.

	* gdbcmd.h (togglelist, stoplist): declare.

	* gdbcore.h (read_memory_string): declare it.
	(exec_file_attach): add prototype.

	* inflow.c (terminal_is_ours): make non static.

	* minsyms.c: minor spacing change.

	* parser-defs.h (parse_nested_classes_for_hpacc): add prototype.
	(find_template_name_end): add prototype.

	* scm-lang.c (scm_unpack): cast svalue to (int).

	* top.h: declare it.
	
	* valprint.h (print_binary_chars): new prototype definition.
	(print_octal_chars): new prototype definition.
	(print_decimal_chars): new prototype definition.

Thu Dec 10 07:14:56 1998  Andrew Cagney  <cagney@chook>

	* config/arm/tm-arm.h, arm-tdep.c: Replace REGISTER_NAMES with
 	REGISTER_NAME.
	* mn10300-tdep.c, config/mn10300/tm-mn10300.h: Ditto.
	* sh-tdep.c, config/sh/tm-sh.h: Ditto.

	* defs.h (REGISTER_NAME): Provide default for old targets.
	* defs.h, infcmd.c: Rename reg_names to gdb_register_names.
	
	* tracepoint.c, target.c, parse.c, infcmd.c, remote-udi.c,
 	expprint.c, infcmd.c, printcmd.c, eval.c, stack.c, findvar.c,
 	remote-udi.c, config/alpha/tm-alpha.h, remote-sim.c, d30v-tdep.c,
 	config/mips/tm-mips.h, hppa-tdep.c: Use REGISTER_NAME.

1998-12-08  James E Wilson  <wilson@wilson-pc.cygnus.com>

	* config/i960/mon960.mt (SIM_OBJS, SIM): Define.

Tue Dec  8 16:49:24 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Add mentions of newly-added configurations.

1998-12-08  Philippe De Muyter  <phdm@macqel.be>

        * config/xm-aix4.h (SIGWINCH_HANDLER): Function `aix_resize_window'
        must accept a signal number as parameter.
        * config/rs6000/xm-rs6000.h (SIGWINCH_HANDLER): Ditto.
        * utils.c (initialize_utils): Give a parameter to `SIGWINCH_HANDLER'.

        * inferior.h (register_valid): Variable's type is `SIGNED char', not
        `char'.
        * findvar.c (register_valid): Ditto.

        * defs.h (make_cleanup_func): Protect parameter list by `PARAMS'.
        * gdbthread.h (unbind_target_thread_vector): Likewise. 

Tue Dec  8 15:09:44 1998  Edith Epstein  <eepstein@sophia.cygnus.com>

        Merged in m68k-linux patch from Andreas Schwab
 
        1998-12-01  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>
 
        * Makefile.in, configure.host, configure.tgt: Add support for
        m68k-linux.
        * config/m68k/linux.mh: New file.
        * config/m68k/linux.mt: New file.
        * config/m68k/nm-linux.h: New file.
        * config/m68k/tm-linux.h: New file.
        * config/m68k/xm-linux.h: New file.
        * m68klinux-nat.c: New file.
        * gdbserver/low-linux.c: Add support for m68k-linux.
        * config/m68k/tm-m68k.h (NUM_FREGS): New macro.

1998-12-07  Jason Molenda  (jsm@bugshack.cygnus.com)

	* config/i386/xm-cygwin.h: Remove REQUEST_QUIT definition.
	* config/powerpc/xm-cygwin.h: Ditto.

1998-12-07  Jim Blandy  <jimb@zwingli.cygnus.com>

	* rs6000-tdep.c (pop_frame): Correctly find the registers saved in
	the stack frame.  Their offset from the previous stack frame is in
	fdata.gpr_offset and fdata.fpr_offset, not fdata.offset.
	(gdb.base/return.exp)
	* config/rs6000/tm-rs6000.h: Doc fixes.

1998-12-03  Jason Molenda  (jsm@bugshack.cygnus.com)

        * monitor.c (monitor_read_memory): Zero out pattern buffers
        before calling re_search.
        (parse_register_dump): Ditto.

Thu Dec  3 10:37:22 EST 1998  Zdenek Radouch   (radouch@cygnus.com)

	FR30 updates - still very preliminary.
	* configure.tgt
	* fr30-tdep.c
	* config/fr30/tm-fr30.h
	
Thu Dec  3 16:30:35 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* ax-gdb.c: Include target.h.

Tue Dec  3 10:59:00 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* ax-gdb.c (_initialize_ax_gdb), i960-tdep.c (pop_frame),
 	monitor.c (flush_monitor_dcache, longlongendswap), remote-array.c
 	(hexword2ascii), w89k-rom.c (init_w89k_cmds), z8k-tdep.c
 	(init_frame_pc, extract_return_value): Make return type void.
	* monitor.c (monitor_write_even_block): Make return type explicit.
	(monotor_read_memory_block): Delete function.
	* monitor.h: Update.
	* remote.c (remote_get_threadlist, remote_update_threads),
 	remote-array.c (array_get_packet), remote-rdi.c (Fail): Always
 	return a value.
	* m32r-tdep.c (m32r_fix_call_dummy): From Michael Snyder, void
 	function.
	* jv-valprint.c (java_val_print): From Stu Grossman. Return 0 by
 	default.
	
Wed Dec  2 15:11:38 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c: Move default definition of 
	TARGET_VIRTUAL_FRAME_POINTER from here to target.h.
	* target.h: Add default definition of TARGET_VIRTUAL_FRAME_POINTER.
	* ax-gdb.c (gen_frame_args_address, gen_frame_locals_address):
	use TARGET_VIRTUAL_FRAME_POINTER to determine frame pointer.
	(gen_trace_for_expr): new argument, address of tracepoint, 
	gets passed to new_agent_expr and added to struct agent_expr.
	(is_nontrivial_conversion): call to new_agent_expr now requires
	a dummy argument.  (agent_command): use get_current_frame() to
	get current PC scope; pass it to gen_trace_for_expr.
	* ax-general.c (new_agent_expr): new argument, address of 
	tracepoint; store it in new field of struct agent_expr.
	* ax.h (struct agent_expr): add new field for tracepoint address.
	* ax-gdb.h: change prototypes to match above changes.

	* m32r-tdep.c (decode_prologue): If no branch or push fp is found,
	but there's a stack adjust, then use that as the end of prologue.
	(m32r_skip_prologue): don't skip past the first line if there is 
	line info.  (m32r_virtual_frame_pointer): new function.
	(m32r_fix_call_dummy): no return value needed.
	
Tue Dec  1 10:59:00 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* ocd.c (remote_timeout), (BDM_BREAKPOINT), monitor.c (readchar),
 	remote.c: Cleanup closing of open comments.

Mon Nov 30 16:04:03 1998  Doug Evans  <devans@canuck.cygnus.com>

	* config/fr30/tm-fr30.h (INNER_THAN): Add parameters.

Mon Nov 30 11:18:48 1998  Andrew Cagney  <cagney@chook>

	* frame.h (FRAME_CHAIN_VALID): Default to
 	default_frame_chain_valid.
	* blockframe.c (default_frame_chain_valid): New function.
	
	* frame.h (FRAME_CHAIN_VALID_ALTERNATIVE): Delete references
	* blockframe.c (alternate_frame_chain_valid): New function.
	* config/mips/tm-mipsv4.h, config/m88k/tm-delta88v4.h,
 	config/m68k/tm-monitor.h, config/m68k/tm-m68kv4.h,
 	config/i386/tm-i386v4.h, config/i386/tm-i386nw.h,
 	config/h8300/tm-h8300.h: Update.

	* blockframe.c (nonnull_frame_chain_valid): New function.
	* config/m68k/tm-os68k.h, config/m68k/tm-vx68.h,
 	config/m68k/tm-apollo68b.h, config/i960/tm-vx960.h,
 	config/arc/tm-arc.h: Update FRAME_CHAIN_VALID.

	* hppa-tdep.c (frame_chain_valid, hppa_frame_chain_valid),
 	remote-vx29k.c (get_fp_contents, vx29k_frame_chain_valid),
 	arm-tdep.c (frame_chain_valid, arm_frame_chain_valid): Rename
 	functions so that they are name space clean.
	* config/pa/tm-hppa.h, config/a29k/tm-vx29k.h,
 	config/arm/tm-arm.h: Update FRAME_CHAIN_VALID.
	
	* gould-tdep.c (gould_frame_chain_valid), d30v-tdep.c
 	(d30v_frame_chain_valid), d10v-tdep.c (d10v_frame_chain_valid):
 	New functions.
	* config/gould/tm-np1.h, config/gould/tm-pn.h,
 	config/d30v/tm-d30v.h, config/d10v/tm-d10v.h: Update
 	FRAME_CHAIN_VALID.

Sun Nov 29 11:18:37 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* z8k-tdep.c (z8k_addr_bits_remove), w65-tdep.c
 	(w65_addr_bits_remove), h8500-tdep.c (h8500_addr_bits_remove),
 	m88k-tdep.c (m88k_addr_bits_remove): Function to clean up an
 	address.
	* config/z8k/tm-z8k.h, config/w65/tm-w65.h, config/m88k/tm-m88k.h,
 	config/h8500/tm-h8500.h: Define ADDR_BITS_REMOVE to call targets
 	corresponding function.
	* z8k-tdep.c (saved_pc_after_call): Update.

Sat Nov 28 12:24:31 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/z8k/tm-z8k.h, config/w65/tm-w65.h, config/vax/tm-vax.h,
 	config/v850/tm-v850.h, config/tahoe/tm-tahoe.h,
 	config/sparc/tm-sparc.h, config/sh/tm-sh.h,
 	config/rs6000/tm-rs6000.h, config/pyr/tm-pyr.h,
 	config/pa/tm-hppa.h, config/ns32k/tm-umax.h,
 	config/ns32k/tm-merlin.h, config/none/tm-none.h,
 	config/mn10300/tm-mn10300.h, config/mn10200/tm-mn10200.h,
 	config/mips/tm-mips.h, config/m88k/tm-m88k.h,
 	config/m68k/tm-m68k.h, config/m32r/tm-m32r.h,
 	config/i960/tm-i960.h, config/i386/tm-i386.h,
 	config/h8500/tm-h8500.h, config/h8300/tm-h8300.h,
 	config/gould/tm-pn.h, config/gould/tm-np1.h, config/arm/tm-arm.h,
 	config/convex/tm-convex.h, config/d10v/tm-d10v.h,
 	config/alpha/tm-alpha.h, config/a29k/tm-a29k.h: Add parameters to
 	macro INNER_THAN.

	* valops.c (push_word, value_push, call_function_by_hand),
 	breakpoint.c (bpstat_stop_status), blockframe.c
 	(generic_push_dummy_frame, generic_frame_chain_valid), inferior.h
 	(PC_IN_CALL_DUMMY), infrun.c (wait_for_inferior): Update use of
 	INNER_THAN.

Fri Nov 27 11:00:25 1998  Andrew Cagney  <cagney@chook>

	* target.h (one_stepped): Move global from here.
	* infrun.c (singlestep_breakpoints_inserted_p): To here. Rename.
  	Make static.
	(wait_for_inferior): Update.
	(resume): Update. Set variable after call to SOFTWARE_SINGLE_STEP.
	
	* target.h (NO_SINGLE_STEP): Replace with SOFTWARE_SINGLE_STEP_P
 	and SOFTWARE_SINGLE_STEP.
	* config/sparc/tm-sparc.h, config/rs6000/tm-rs6000.h,
 	config/arc/tm-arc.h: Update.
	* rs6000-tdep.c (rs6000_software_single_step), sparc-tdep.c
 	(sparc_software_single_step), arc-tdep.c (arc_single_step): New
 	functions. Replace function single_step.
	
	* config/mips/tm-mips.h (STEP_SKIPS_DELAY_P): Define.
	* infrun.c (proceed): Cleanup.

Thu Nov 26 11:19:15 1998  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/alpha/tm-alpha.h (ABOUT_TO_RETURN): Replace macro.
	* alpha-tdep.c (alpha_about_to_return): With new function.
	(heuristic_proc_start): Update.
	* config/mips/tm-mips.h (ABOUT_TO_RETURN), mips-tdep.c
 	(heuristic_proc_start, mips_about_to_return): Ditto.
	* config/ns32k/tm-merlin.h (ABOUT_TO_RETURN),
 	config/ns32k/tm-umax.h (ABOUT_TO_RETURN), ns32k-tdep.c
 	(ns32k_about_to_return, ns32k_get_enter_addr): Ditto.

	* config/z8k/tm-z8k.h, config/w65/tm-w65.h, config/vax/tm-vax.h,
 	config/tahoe/tm-tahoe.h, config/sparc/tm-sparc.h,
 	config/sh/tm-sh.h, config/rs6000/tm-rs6000.h, config/pyr/tm-pyr.h,
 	config/pa/tm-hppa.h, config/m88k/tm-m88k.h, config/m68k/tm-m68k.h,
 	config/i960/tm-i960.h, config/i386/tm-i386.h,
 	config/h8500/tm-h8500.h, config/h8300/tm-h8300.h,
 	config/gould/tm-pn.h, config/gould/tm-np1.h,
 	config/convex/tm-convex.h, config/arm/tm-arm.h,
 	config/arc/tm-arc.h, config/a29k/tm-a29k.h: Delete macro
 	ABOUT_TO_RETURN.
	* config/w65/tm-w65.h (RTL, RTS): Delete macros.
	* h8500-tdep.c (about_to_return): Delete function.

Thu Nov 26 11:19:15 1998  Andrew Cagney  <cagney@chook.cygnus.com>

	* rs6000-tdep.c (rs6000_breakpoint_from_pc): Change big_breakpoint
 	and little_breakpoint to char[] from char*.
	* remote-array.c (array_insert_breakpoint): Change bp_addr to
 	CORE_ADDR type.

Wed Nov 25 00:13:06 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* vx-share/xdr_ld.c (xdr_ldtabl): Cast second arg to char**
 	instead of char*.

	* configure.tgt (v850): Only build v850ice when cygwin and gui.
	* configure.in: Add parameter to --enable-build-warnings.
	* configure: Re-build.

	* c-exp.y (parse_number): Rewrite shift to pacify GCC.

	* config/i960/tm-i960.h (BREAKPOINT): Delete definition - simply
 	wrong.

	* monitor.c (compile_pattern): Make val const char*.
	(monitor_wait_cleanup): Make old_timeout void*, pointing at
 	old_timeout.
	(monitor_wait): Update.

	* remote-udi.c, remote-sim.c, remote-e7000.c, hppa-tdep.c,
 	remote-mips.c, sparcl-tdep.c, xcoffread.c: Cast parameters passed
 	to make_cleanup to use the new make_cleanup_func typedef.

	* alpha-tdep.c (MASK): Use LONGEST to avoid arithmetic overflow.

	* config/a29k/tm-a29k.h (TRANSPARENT): Rename macro to
 	TRANSPARENT_FRAME. Avoid name-space clash.
	* a29k-tdep.c (init_frame_info): Update.

Wed Nov 25 20:37:00 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* rs6000-tdep.c (rs6000_breakpoint_from_pc): Change big_breakpoint
 	and little_breakpoint to char[] from char*.
	* mem-break.c (memory_insert_breakpoint,
 	memory_remove_breakpoint): Pass address of bplen.
	* remote-array.c (array_insert_breakpoint): Change bp_addr to
 	CORE_ADDR type.

Tue Nov 24 15:46:33 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* config/mn10300/tm-mn10300.h (TARGET_VIRTUAL_FRAME_POINTER):
	new target macro.
	* mn10300-tdep.c (mn10300_virtual_frame_pointer): new function.
	* tracepoint.c (encode_actions): Use the new target macro to
	determine the virtual frame pointer, for collecting locals/args.
	(add_local_symbols, collect_symbol): add a register/offset pair of
	arguments so that the virtual frame pointer can be passed in.

1998-11-24  Felix Lee  <flee@cygnus.com>

	* procfs.c (procfs_wait): handle syscall events first.
	
	* procfs.c (GDB_GREGSET_TYPE, GDB_FPREGSET_TYPE): new macros.
	* config/sparc/xm-sun4sol2.h: use them.
	* core-sol2.c: don't #undef gregset_t and fpregset_t.
	* sol-thread.c: ditto.
	* sparc-tdep.c: ditto.
	
Tue Nov 24 14:13:10 1998  Andrew Cagney  <cagney@chook>

	* breakpoint.c (memory_breakpoint_size): Delete global.
	(read_memory_nobpt): Determine real breakpoint address and size
 	using BREAKPOINT_FROM_PC.

	* defs.h (breakpoint_from_pc_fn): BREAKPOINT_FROM_PC function
 	template.
	* target.h, mem-break.c (memory_breakpoint_from_pc):
 	Rewrite. Always define.  Return NULL when memory breakpoints are
 	not supported.
	(memory_insert_breakpoint, memory_remove_breakpoint): Call
 	BREAKPOINT_FROM_PC.
	* target.h (BREAKPOINT_FROM_PC): Provide default.
	* gdbint.texinfo (BREAKPOINT_FROM_PC): Document.

	* config/rs6000/tm-rs6000.h (BREAKPOINT): Delete macro.
 	(BREAKPOINT_FROM_PC): Define.
 	({BIG,LITTLE}_BREAKPOINT): Move macros from here.
	* rs6000-tdep.c: To here.
 	(rs6000_breakpoint_from_pc): New function.

	* config/mn10300/tm-mn10300.h (BREAKPOINT): Delete macro.
 	(BREAKPOINT_FROM_PC): Define, call.
	* mn10300-tdep.c (mn10300_breakpoint_from_pc): New function.

	* config/mips/tm-mips.h ({BIG,LITTLE}_BREAKPOINT,
 	IDT_{BIG,LITTLE}_BREAKPOINT, PMON_{BIG,LITTLE}_BREAKPOINT,
 	MIPS16_{BIG,LITTLE}_BREAKPOINT): Move macros from here.
	* mips-tdep.c: To here.

	* config/arm/tm-arm.h ({BIG,LITTLE}_BREAKPOINT): Delete macros.
 	({ARM,THUMB}_{BE,LE}_BREAKPOINT): Move macros from here.
	* arm-tdep.c: To here.
	
	* remote-array.c (memory_breakpoint_size): Delete variable.
	(array_insert_breakpoint): Obtain breakpoint size using
 	BREAKPOINT_FROM_PC.
	* remote-st.c (memory_breakpoint_size, st2000_insert_breakpoint):
 	Ditto.
	* remote-os9k.c (memory_breakpoint_size,
 	rombug_insert_breakpoint): Ditto.
	* remote-e7000.c (memory_breakpoint_size): Ditto.

Mon Nov 23 11:38:40 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* symfile.c (deduce_language_from_filename): rewrite so as to 
	work from a table of filename extensions, modifiable by the user.
	(filename_language_table): new data structure.
	(set_ext_lang_command): new function for new command, "set
	extension-language".  (info_extension_language_command): new
	function for new command "info extension-languages".
	(add_filename_language, init_filename_language_table): new
	support functions for the above.
	* language.c (language_enum): new function.  Support for above.

Mon Nov 23 10:47:54 1998  Andrew Cagney  <cagney@chook.cygnus.com>

	* config/sh/tm-sh.h, config/mn10200/tm-mn10200.h,
 	config/m32r/tm-m32r.h, config/arm/tm-arm.h, config/i960/tm-i960.h,
 	config/gould/tm-np1.h, config/d10v/tm-d10v.h,
 	config/v850/tm-v850.h, config/pa/tm-hppa.h, config/a29k/tm-a29k.h,
 	config/mn10300/tm-mn10300.h, config/mips/tm-mips.h
 	(USE_STRUCT_CONVENTION): Cleanup, define macro as function.
	
	* sh-tdep.c (sh_use_struct_convention), mn10200-tdep.c
 	(mn10200_use_struct_convention), i960-tdep.c
 	(i960_use_struct_convention), gould-tdep.c
 	(gould_use_struct_convention), d10v-tdep.c
 	(d10v_use_struct_convention), v850-tdep.c
 	(v850_use_struct_convention), hppa-tdep.c
 	(hpha_use_struct_convention), m32r-tdep.c
 	(m32r_use_struct_convention), arm-tdep.c
 	(arm_use_struct_convention), mn10300-tdep.c
 	(mn10300_use_struct_convention), a29k-tdep.c
 	(a29k_use_struct_convention), mips-tdep.c
 	(mips_use_struct_convention): New functions

	* value.h, values.c (generic_use_struct_convention): New function,
 	replace macro.
	* values.c (USE_STRUCT_CONVENTION): Macro defaults to function
 	generic_use_struct_convention.

Sat Nov 21 17:15:40 1998  Philippe De Muyter  <phdm@macqel.be>

	* breakpoint.c (bpstat_stop_status): Do not increment hit_count
	of breakpoint if condition is not true. 

	* coffread.c (coff_symtab_read): Discard C_LABEL's that are not
	function entry points, to avoid getting them in the stack dump
	instead of the actual function.

	* config/m68k/delta68.mh (NAT_FILE): Undo 1998-08-18 change;
 	without NAT_FILE definition, configure will assume that GDB cannot
 	run native.
	* config/m68k/nm-delta68.h (KERNEL_U_SIZE): New macro.
	* delta68-nat.c (kernel_u_size): New function.

Fri Nov 20 10:13:03 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* buildsym.c (end_symtab): Cleanup PROCESS_LINENUMBER_HOOK.

Thu Nov 19 15:21:04 1998  Geoffrey Noer  <noer@cygnus.com>

	* rdi-share/host.h: if compiling under Cygwin, make sure new
	preprocessor define is defined.  Define it if not.
	* rdi-share/hostchan.h: ditto
	* rdi-share/aclocal.m4: regenerate
	* rdi-share/configure: regenerate

Thu Nov 19 14:43:44 1998  Geoffrey Noer  <noer@cygnus.com>

	* configure.in: switch back to checking __CYGWIN32__
	* configure: regenerate

Thu Nov 19 09:53:00 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* exec.c (exec_file_command): Cleanup. Replace #if
 	NEED_TEXT_START_END with if().
	* config/pa/nm-hppah.h (NEED_TEXT_START_END): Redefine to be 1.
	* config/convex/tm-convex.h (NEED_TEXT_START_END): Ditto.
	* config/gould/tm-np1.h (NEED_TEXT_START_END): Ditto.
	* config/a29k/tm-a29k.h (NEED_TEXT_START_END): Ditto.

Thu Nov 19 13:06:22 1998  Geoffrey Noer  <noer@cygnus.com>

	* main.c: Wait until more time has passed before calling
	new cygwin_ funcs, revert back to the cygwin32_ ones for now.
	* win32-nat.c: Ditto.

Wed Nov 18 15:03:17 1998  Andrew Cagney  <cagney@chook.cygnus.com>

	* 29k-share/udi/udip2soc.c (UDIConnect): Replace sys_errlist with
 	strerror.

Mon Nov 16 14:17:05 1998  Geoffrey Noer  <noer@cygnus.com>

	* defs.h: if compiling under Cygwin, define __CYGWIN__ if
	__CYGWIN32__ is defined and __CYGWIN__ isn't for backwards
	compatibility.

Fri Nov 13 00:15:08 1998  Geoffrey Noer  <noer@cygnus.com>

	Changes to account for name change from cygwin32 to cygwin and
	clean up Win32-related ifdefs.
	
	* configure.tgt: check for cygwin* instead of cygwin32.
	New cygwin gdb_target variable loses the "32".
	* configure.host: check for cygwin* instead of cygwin32.
	New cygwin gdb_host variable loses the "32".
	* configure.in: test __CYGWIN__ instead of __CYGWIN32__,
	rename gdb_cv_os_cygwin32 variable to drop the "32".  Call
	AM_EXEEXT instead of AC_EXEEXT since that isn't in a released
	autoconf yet.
	* configure: regenerate.

	* main.c: drop "32" from cygwin_ funcs, include sys/cygwin.h where
	cygwin path conv protos live, instead of adding a proto here for
	them here.
        * {main.c, ser-tcp.c, ser-unix.c, top.c}: check __CYGWIN__
	instead of __CYGWIN32__.
	* source.c: thoughout, check _WIN32 instead of WIN32.
	
	* config/i386/cygwin32.mh: delete.
	* config/i386/cygwin.mh: new file, was cygwin32.mh.
	* config/i386/cygwin32.mt: delete.
	* config/i386/cygwin.mt: new file, was cygwin32.mt.
	* config/i386/tm-cygwin32.h: delete.
	* config/i386/tm-cygwin.h: new file, was tm-cygwin32.h.
	* config/i386/xm-cygwin32.h: delete.
	* config/i386/xm-cygwin.h: new file, was xm-cygwin32.h.
	* config/i386/xm-windows.h: #include xm-cygwin.h now.
	* config/powerpc/cygwin32.mh: delete.
	* config/powerpc/cygwin.mh: new file, was cygwin32.mh.
	* config/powerpc/cygwin32.mt: delete.
	* config/powerpc/cygwin.mt: new file, was cygwin32.mt.
	* config/powerpc/tm-cygwin32.h: delete.
	* config/powerpc/tm-cygwin.h: new file, was tm-cygwin32.h.
	* config/powerpc/xm-cygwin32.h: delete.
	* config/powerpc/xm-cygwin.h: new file, was xm-cygwin32.h.

	* rdi-share/aclocal.m4: regenerate with aclocal.
	* rdi-share/configure: regenerate with autoconf.
	* rdi-share/{host.h, hostchan.c, hostchan.h, serdrv.c, serpardr.c,
	unixcomm.c}: check __CYGWIN__ instead of __CYGWIN32__.

Thu Nov 12 17:19:43 1998  John Metzler  <jmetzler@cygnus.com>

        * remote.c (remote_get_threadinfo): Support for remote
        multithread debugging.
        (remote_get_threadlist): get a partial list of threads
        (remote_threadlist_iterator): Step through all the threads
        (init_remote_threadtests): Optional builtin unit test commands.

        * thread.c (bind_target_thread_vector): Implementa a more dynamic
        way of accessing target specific thread info functions than 
        FIND_NEW_THREADS.
        (target_thread_info): Function to get extended thread information.

        * gdbthread.h: Export internal data structures corresponding to
        external detailed thread info response. This is more like a 'ps'
        command than what might be expected of host based threads. This
        is for embedded systems.

Wed Nov 11 15:47:00 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* procfs.c (proc_set_exec_trap): don't set PR_ASYNC or PR_FORK
        in the child process for UnixWare (causes processes forked by 
        the debuggee to hang).

Mon Nov  9 12:00:36 1998  Dave Brolley  <brolley@cygnus.com>

	* config/fr30/fr30.mt: New file.
	* config/fr30/tm-fr30.h: New file.

1998-11-05  Jim Wilson  <wilson@cygnus.com>

	* remote-vx.c (net_read_registers, net_write_registers, 
	vx_xver_memory, vx_resume, vx_attach, vx_detach, vx_kill): 
	Change errno to errno_num.
	* vx-share/xdr_ptrace.c (xdr_ptrace_return): Likewise.
	* vx-share/xdr_ptrace.h (struct ptrace_return): Likewise.

Thu Nov  5 08:41:33 1998  Christopher Faylor <cgf@cygnus.com>

	* top.c (gdb_readline): Allow CRLF line termination on systems
	which define CRLF_SOURCE_FILES.
	* win32-nat.c: 1) Add thread support, 2) fix ability to attach to
	a running process, and 3) implement limited support for cygwin
	signals.
	(thread_rec): New function.
	(child_add_thread): Ditto.
	(child_init_thread_list): Ditto.
	(child_delete_thread): Ditto.
	(do_child_fetch_inferior_registers): Ditto.
	(do_child_store_inferior_registers): Ditto.
	(handle_output_debug_string): Ditto.
	(child_fetch_inferior_registers): Use do_* function to perform
	operation.
	(child_store_inferior_registers): Ditto.
	(child_continue): Ditto.
	(child_thread_alive): Ditto.
	(cygwin_pid_to_str): Ditto.
	(handle_load_dll): Reorganize, add first attempt at reading
	dll names from attached processes.  Change info messages to provide
	more information when dll is already loaded.
	(handle_exception): Changes mandated by new thread-aware structures.
	(child_wait): Track thread creation/destruction.  Handle cygwin
	signals.
	(child_create_inferior): Ditto.
	(child_resume): Ditto.
	(child_kill_inferior): Ditto.  Close child process handle to avoid a
	handle leak.
	(child_ops): Fill out child_ops fields that deal with threads.
	* config/i386/tm-cygwin32.h: Declare function and macro needed
	for converting a cygwin "pid" to a string.
	* config/i386/xm-cygwin32.h: define HAVE_SIGSETMASK as 0 since
	sigsetmask is not defined in cygwin.

Thu Nov  5 08:38:18 1998  Christopher Faylor <cgf@cygnus.com>

	* win32-nat.c: Remove obsolete PPC conditionals.

Wed Nov  4 18:44:31 1998  Dave Brolley  <brolley@cygnus.com>

	* configure.tgt: Add fr30-*-elf*.

1998-11-03  Jim Wilson  <wilson@cygnus.com>

	* c-exp.y (parse_number): Check TARGET_LONG_LONG_BIT when setting
	high_bit to avoid undefined negative shift.

Mon Nov  2 15:26:33 1998  Geoffrey Noer  <noer@cygnus.com>

        * configure.in: Check cygwin* instead of cygwin32*.
	* configure: regenerate

Thu Oct 29 10:04:20 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	[Support for trace debugging: registers that were not collected.]
	* remote.c (remote_fetch_registers): accept 'xxxx' in the register
	packet, with the meaning "register value is not available".
	Set register_valid to -1, which will connote "no value available".
	* findvar.c (read_relative_register_raw_bytes): return failure if
	register_valid == -1.  (value_of_register): return failure if 
	register_valid == -1.  (read_var_value): return error if 
	value_of_register fails for a register variable.
	(value_from_register): return failure if register_valid == -1.
	* eval.c (evaluate_subexp_standard): return error if 
	value_of_register fails for a register used in an expression.
	* infcmd.c (do_registers_info): display "value not available"
	for registers for which register_valid == -1.

	* tracepoint.c (set_raw_tracepoint): just save the filename as is
	from the symbol table, rather than trying to prepend the dir name.
	Also save the bfd section.  (tracepoints_info): use the section
	when looking up the function name.
	* tracepoint.h: add section field to tracepoint struct.

Wed Oct 28 08:01:38 1998  Mark Alexander  <marka@cygnus.com>

	* sparcl-tdep.c (send_resp, sparclite_serial_start,
	sparclite_serial_write): Use remote_timeout instead of hardcoded
	two second timeout.
	(download): Fix adjustment of a.out load addresses.

Wed Oct 28 12:32:58 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (--enable-build-warnings): Finish rename from
 	--enable-warnings.
	(enable-build-warnings): Add -Wpointer-arth, allow =* for
 	sim/common compatibility.
	* configure: Re-generate.

Wed Oct 21 08:44:30 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* 29k-share/udi/udip2soc.c: Replace sys_errlist with strerror().

Thu Oct 22 09:56:55 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/rs6000/aix4.mh (NATDEPFILES): Move xcoffread.o from here.
	* config/rs6000/aix4.mt (TDEPFILES): To here.

Wed Oct 21 10:02:31 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* rdi-share/unixcomm.c: Provide definitions of SERPORT and PARPORT
 	on BSD hosts.

1998-10-19  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in (AM_EXEEXT): Use AC_EXEEXT instead.
	* configure: Regenerated.

Sat Oct 17 17:39:23 1998  Felix Lee  <flee@cygnus.com>

	* core-sol2.c: #include <sys/types.h>, for sol2.7 weirdness.

Fri Oct 16 15:31:38 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* m32r-tdep.c (decode_prologue): Return failure if we reach 
	the end of the function without finding the end of the prologue.

1998-10-16  Jason Molenda  (jsm@bugshack.cygnus.com)

	* command.c copying.c copying.awk core-aout.c core-regset.c
	  corelow.c dcache.c i386-tdep.c i386v4-nat.c i387-tdep.c
	  infcmd.c infptrace.c infrun.c remote.c solib.c symfile.c
	  symmisc.c valarith.c: Add prototypes.

	* defs.h: Add prototype for utils.c::do_run_cleanups.

	* gdbtypes.c: Add prototypes.
	(make_pointer_type): Add braces to remove nested if-else ambiguity.
	(make_reference_type): Ditto.

	* printcmd.c (printf_command): Initialize 'f' and 'string' at 
	function startup to suppress possibly-used-before-initialized warning.

	* remote-utils.c: Add prototypes.
	(sr_pollchar): Add braces to remove nested if-else ambiguity.

	* ser-tcp.c: Add prototypes.
	(wait_for): Add braces to remove nested if-else ambiguity.
	(tcp_readchar): Ditto.

	* ser-unix.c: Add prototypes.
	(get_tty_state): Don't define errno here.
	(hardwire_readchar): Only define 't' if we are compiling in a Cygwin
	environment.

	* symtab.c: Add prototypes.
	(find_methods): Add braces to remove nested if-else ambiguity.
	(search_symbols): Set 'i' to an initial value to suppress a
	possibly-used-before-initialized warning.

	* valops.c: Add prototypes.
	(value_cast): Set 'eltype2' to an initial value to suppress a
	possibly-used-before-initialized warning.
	(value_of_variable): Add braces to remove nested if-else ambiguity.
	(value_of_this): Ditto.

	* valprint.c: Add prototypes.
	(print_floating): Add braces to remove nested if-else ambiguity.

Thu Oct 15 19:50:48 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* tm-sp64.h (SETUP_ARBITRARY_FRAME, FRAME_SPECIFICATION_DYADIC):
	Remove, nevermore used.

Thu Oct 15 16:55:00 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* command.c: Include "wait.h" after, rather than before, <wait.h>.
  	"wait.h" was defining all WIF* macro's instead of filling in those
 	that <wait.h> missed.

1998-10-14  Jason Molenda  (jsm@bugshack.cygnus.com)

	* defs.h: Move _initialize_printcmd, _initialize_stack,
 	_initialize_blockframe out of here and in to their respective .c
 	files.
	* blockframe.c: Move _initialize_blockframe prototype to here.
	* printcmd.c: Move _initialize_printcmd prototype to here.
	* stack.c: Move _initialize_stack prototype to here.

	* source.c, symtab.h: Move _initialize_source prototype to the .c
	file.
	* values.c, value.h: Move _initialize_values prototype to the .c file.
	* gdbthread.h, thread.c: Move _initialize_thread prototype to the .c 
	file.
	* breakpoint.c, breakpoint.h: Move _initialize_breakpoint prototype 
        to the .c file.

	* abug-rom.c alpha-nat.c alpha-tdep.c annotate.c ax-gdb.c bcache.c:
	Standardize comments for the prototype section of these files.

	* configure.in: Look in libc for wctype before looking for it in libc.

Tue Oct 13 18:56:51 1998  Felix Lee  <flee@cygnus.com>

	* sol-thread.c (ps_pstop, etc): simple test for proc_service.h
 	version didn't work for sol2.6; pushed it to autoconf.
	* configure.in (gdb_cv_proc_service_is_old): new test.
	* acconfig.h (PROC_SERVICE_IS_OLD): new define.
	* configure, config.in: regenerate.

1998-10-13  Jason Molenda  (jsm@bugshack.cygnus.com)

	* blockframe.c (find_pc_sect_partial_function): Add braces to avoid
	possible nested-if confusion.
	* breakpoint.c (breakpoint_here_p): Ditto.
	(breakpoint_inserted_here_p): Ditto.
	(breakpoint_thread_match): Ditto.

	* gnu-regex.c: Define _REGEX_RE_COMP only if it isn't already defined.
	* gnu-regex.h: Define _REGEX_RE_COMP to pick up old compatability 
	prototypes.

	* symtab.h: Add prototype for _initialize_source.
	* value.h: Add prototype for _initialize_value.

	* defs.h: Include sys/types.h or stddef.h to get size_t.
	(make_cleanup): Add make_cleanup_func typedef and switch to using 
        a prototype for this function.
	(mfree): Add prototypes for mmalloc, mrealloc, mfree if we aren't
	using mmalloc.

	* ax-gdb.c breakpoint.c coffread.c corelow.c dbxread.c
 	dwarf2read.c dwarfread.c elfread.c eval.c exec.c infcmd.c infrun.c
 	mipsread.c nlmread.c os9kread.c parse.c printcmd.c symfile.c
 	symmisc.c symtab.c thread.c top.c tracepoint.c typeprint.c
 	valops.c: Cast parameters passed to make_cleanup to use the new
 	make_cleanup_func typedef.

Tue Oct 13 00:51:48 1998  Felix Lee  <flee@cygnus.com>

	* sol-thread.c (ps_pstop, etc): different solaris versions have
 	slightly different prototypes in proc_service.h; compensate.

1998-10-12  Jason Molenda  (jsm@bugshack.cygnus.com)

        * Makefile.in (AWK): Unused; remove.
        * configure.in: Remove unused autoconf checks for MINIX, memcpy,
        poll, select, strings.h.
        * config.in: Regenerated.
        * configure: Regenerated.

1998-10-12  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Check for sys/debugreg.h, asm/debugreg.h.
	* i386v-nat.c: Include asm/debugreg.h, sys/debugreg.h if it is not
	present.

Sun Oct 11 12:08:07 1998  Peter Schauer  <pes@regent.e-technik.tu-muenchen.de>

	* dwarf2read.c (dwarf2_build_psymtabs_hard):  Do not adjust the
	address range of a compilation unit without children.

	* mdebugread.c (parse_partial_symbols):  Fix handling of stabs
	continuations, use xmalloc and xrealloc.

Fri Oct  9 18:14:43 1998  Mark Alexander  <marka@cygnus.com>

	* rs6000-tdep.c: Don't include tm.h twice.

1998-10-08  Keith Seitz  <keiths@cygnus.com>

	* main.c (main): Remove calls to {pre,post}_add_symbol_hooks.
	There should be sufficient information/hooks now to eliminate
	this hack.

	* exec.c (file_command): Add a new hook here to inform ui's
	when the exec file has changed. Adding it here allows the
	ui to be informed after symbol reading.

	* gdbcore.h: Add declaration of file_changed_hook.

Thu Oct  8 08:40:42 1998  Mark Alexander  <marka@cygnus.com>

	* rs6000-tdep.c (get_saved_register): Define only if
	USE_GENERIC_DUMMY_FRAMES is defined.

Tue Oct  6 21:35:10 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (DEPFILES): Add TARGET_OBS.
	(TARGET_OBS): Defined by configure.

1998-10-06  Jason Molenda  (jsm@bugshack.cygnus.com)

 	Eliminate a few warnings from the compiler.
	* breakpoint.h: Add prototype.
	* breakpoint.c (do_enable_breakpoint): cast mem_cnt, i to (void).
	* configure.in: Check if strdup declaration is necessary.
	* configure: Regenerated.
	* defs.h: Add prototypes.
	* gdb_string.h: Only define strdup if necessary.
	* gdbthread.h: Add prototypes.
	* printcmd.c: Add prototyptes.
	(disassemble_command): Remove unused variable 'section'.
	* symtab.c: Add prototypes.
	* symtab.h: Include gnu-regex.h, add prototype.
	* thread.c: Add prototype.

Mon Oct  5 19:44:39 1998  Stan Shebs  <shebs@andros.cygnus.com>

	From David Purves  <purves@apogee.com>:
	* stabsread.c (rs6000_builtin_type): Create a complex float instead
	of an error.
	(read_sun_floating_type): Similarly.
	(read_range_type): Create a complex float if self_subrange is
 	true.

Fri Oct  2 19:42:31 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* c-lang.c (emit_char c_printchar c_printstr), c-lang.h (c_printstr)
	ch-lang.c (chill_printstr chill_printchar) c-valprint.c (c_val_print)
	ch-valprint.c (chill_val_print) expprint.c (print_subexp) f-lang.c
	(f_printstr f_printchar emit_char) f-valprint.c (f_val_print) 
	jv-lang.c (java_printchar java_emit_char) jv-valprint.c 
	(java_value_print java_val_print) language.c (unk_lang_printchar 
	unk_lang_printstr unk_lang_emit_char) language.h (struct 
	language_defn LA_PRINT_STRING LA_EMIT_CHAR) m2-lang.c (m2_printstr 
	m2_printchar emit_char) printcmd.c (print_formatted) scm-lang.c 
	(scm_printstr) valprint.c (val_print_string) value.h 
	(val_print_string):  Add emit_char routines to language_desc struct 
	to allow finer control over language specific character output issues.
  	Add character width arg to printstr routines to allow handling of 
	wchar_t/Unicode strings.  Fix c_printstr to handle wide characters.
  	Supply width argument to LA_PRINT_STRING and val_print_string.

	* jv-lang.c (java_object_type dynamics_objfile java_link_class_type
	get_dynamics_objfile get_java_object_type) jv-lang.h
	(get_java_object_type):  Make lots of things static.

	* expprint.c (dump_prefix_expression dump_subexp):  Move opcode name
	printing to common routine (op_name).
	* (dump_subexp):  Add support for OP_SCOPE.

Fri Oct  2 16:25:54 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.host (i[3456]86-*-windows): Remove, no longer used.
	* mswin: Remove directory, no longer used.

Fri Oct  2 18:52:20 1998  Fernando Nasser  <fnasser@cygnus.com>

	* sol-thread.c: Fixed prototypes and calls to supply_fpregset and
 	fill_fpregset

1998-10-02  Keith Seitz  <keiths@cygnus.com>

	* remote.c (remote_interrupt): Rewrite to use remote_stop.
	(remote_interrupt_twice): Remove. remote_stop now handles it.
	(remote_stop): New function which handles interrupting the
	remote target so that CLUI and GUI use the same core functions
	to achieve the same goal.
	(remote_wait): Change to handle remote_stop properly.
	[interrupted_already]: New static global to help remote_stop.
	[remote_ops, extended_remote_ops]: Add remote_stop for to_stop member.

	* target.c: Rename static function "ignore" to "target_ignore" and
	export it so that gdb can determin if some target vector member is
	actually not defined. Replace all occurances of ignore.

	* target.h: Export target_ignore.

Fri Oct  2 03:51:48 1998  Peter Schauer  <pes@regent.e-technik.tu-muenchen.de>

	* target.c (target_xfer_memory):  Handle requests with zero
	transfer length right away.

	* values.c (unpack_double):  Set up code, length and signedness of
	type _after_ checking for typedef.

Thu Oct  1 15:39:27 EDT 1998 Frank Ch. Eigler <fche@cygnus.com>

	* breakpoint.c (bpstat_stop_status): Do not consider an
	untripped watchpoint as a "hit".

Thu Oct  1 20:52:39 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* exec.c (exec_file_command), convex-tdep.c (exec_file_command),
 	arm-xdep.c (exec_file_command), remote-rdp.c
 	(remote_rdp_create_inferior), remote-os9k.c
 	(rombug_create_inferior), remote-mm.c (mm_create_inferior),
 	remote-eb.c (eb_create_inferior), remote-es.c
 	(es1800_create_inferior), remote-rdi.c (arm_rdi_create_inferior),
 	remote-sim.c (gdbsim_create_inferior), remote-utils.c
 	(gr_create_inferior), remote-st.c (st2000_create_inferior),
 	remote-nindy.c (nindy_create_inferior), remote-hms.c
 	(hms_create_inferior), remote-e7000.c (e7000_create_inferior),
 	remote-array.c (array_create_inferior), remote-adapt.c
 	(adapt_create_inferior): Replace "exec" with "executable" in
 	messages.

1998-09-25  Keith Seitz  <keiths@cygnus.com>

        * rdi-share/unixcomm.c: If using cygwin32, also use the SERPORT and
        PARPORT defines for win32.
        (Unix_MatchValidSerialDevice): For cygwin32, valid serial port names
        start with "com", not "/dev/tty".
        (Unix_OpenSerial): Do not use O_NONBLOCK on cygwin32.

        * rdi-share/devsw.c (DevSW_Close): Free the device's state 
        (SwitcherState) so that the device may be reopened.

        * remote-rdi.c (mywritec): Send all output through gdb's *_unfiltered
        functions, ignoring non-ASCII chars, so that non-tty UI's can snarf
        the output from fputs_hook.
        (mywrite): Ditto.
        (arm_rdi_open): Set inferior_pid.
        (arm_rdi_detach): Pop the target off the target stack so that
        users can attach and detach multiple times.
        (arm_rdi_close): Close the opened device and reset inferior_pid, too.

1998-09-24  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Change --enable-warnings to --enable-build-warnings.
	* configure: Updated.

1998-09-24  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in (WARN_CFLAGS): Add -Wmissing-prototypes.
	* configure: Regenerated.

1998-09-24  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Add --enable-warnings.
	Adjust whitespace of other --with and --enable options so that
	configure --help lines up correctly.
	* aclocal.m4: Ditto.
	* Makefile.in (WARN_CFLAGS): Add.  Set by configure.
	* configure: Regenerated.

Thu Sep 24 15:44:34 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-rdi.c: Fix formatting, remove some commented-out code.
	(init_rdi_ops): Omit needless initializations.

Wed Sep 23 18:21:03 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_address_masked): New function - mask address
 	according to REMOTE_ADDRESS_SIZE.
	(remote_address_size): New global.
	(hexnumstr): New function - convert arbitrary unsigned to hex.
	(remote_write_bytes, remote_read_bytes): Use hexnumstr to
 	construct packet address.  Mask address when necessary.
	(_initialize_remote): Add "set remoteaddresssize" command, set
 	REMOTE_ADDRESS_SIZE variable.

	* NEWS: Update.

Wed Sep 23 18:08:52 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (_initialize_remote, packet_command, print_packet):
	Pretty print code.

Wed Sep 23 12:32:54 1998    <cagney@amy.cygnus.com>

	* remote.c (packet_command): Test REMOTE_DESC to determine if
 	remote connection is open.

Tue Sep 22 22:27:24 1998  Mark Alexander  <marka@cygnus.com>

	Patch from Dawn Perchik <dawn@cygnus.com>:
	* rs6000-tdep.c (pop_frame): Handle generic dummy frames.
	(push_arguments): Likewise.
	(frame_saved_pc): Likewise.
	(rs6000_frame_chain): Likewise.
	(ppc_push_return_address): New function.
	(get_saved_register): New function.
	* config/powerpc/tm-ppc-eabi.h: Add generic dummy frame macros.

Mon Sep 21 19:29:32 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* defs.h utils.c (fputc_filtered):  New function.  Does the obvious...
	* jv-lang.c (java_printchar):  Fix output of chars > 0xff.  Fold
	java_emit_char into java_printchar.
	* language.h (PRINT_LITERAL_FORM):  Reformat for readability.

Mon Sep 21 14:38:03 1998  Catherine Moore <clm@cygnus.com>

	* config/arm/tm-arm.h (*_BREAKPOINT): Define both little endian
	and big endian breakpoint patterns.

	* arm-tdep.c (arm_break_point_from_pc):  Insert either big endian
	or little endian breakpoints depending upon target byte order.

Fri Sep 18 07:53:08 1998  Peter Schauer  <pes@regent.e-technik.tu-muenchen.de>

	* sol-thread.c (sol_thread_notice_signals):  Use PIDGET when
	passing pid down to procfs_notice_signals.

Wed Sep 16 14:57:14 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* stabsread.c (resolve_symbol_reference):  Return 1 on success, 0 on
	failure.
	* (define_symbol):  Check return value from resolve_symbol_reference,
	and drop symbol if it fails.

Tue Sep 15 15:24:16 1998  Stu Grossman  <grossman@fencer.cygnus.com>

	* stabsread.c:  Make all complaints static.
	* Fix formatting of live range splitting code.
	* (resolve_symbol_reference define_symbol resolve_live_range):  Change
	errors to complaints so that bad live range symbols won't abort the
	entire symbol table.  Handle errors by aborting just the current
	symbol.
	* (ref_init):  Goes away.  Folded into ref_add().
	* (REF_MAP_SIZE):  Put parens around parameter so that args like
	`1 + 2' get handled correctly (yes, this was a real bug).
	* (ref_add):  Remove check for allocation failures.  Not necessary
	when using xrealloc().  Fix pointer arithmetic problem when clearing
	memory.  This and the previous patch prevent random SEGV's when there
	are lots of live range symbols.

Tue Sep 15 14:02:01 1998  Nick Clifton  <nickc@cygnus.com>

	* remote-rdi.c: Prevent multiple attempts to close the remote
	connection. 

Tue Sep 15 10:24:17 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* printcmd.c (examine_i_type): New static - type for instructions.
	(do_examine): For "i" format, specify examine_i_type.
	(do_examine): Call value_at_lazy instead of value_at so that
 	examine data is only fetched if it is used.
	(x_command): If examine data was not fetched, set convenience
 	variable "__" to void.
	(_initialize_printcmd): Initialize examine_i_type.

Sun Sep 13 01:34:59 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

 	* blockframe.c (find_pc_sect_partial_function): use bfd section 
	  of msymbol for end of section comparison.

Fri Sep 11 14:02:49 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c: clean up several unused variables and such.

Fri Sep 11 12:38:34 EDT 1998  Zdenek Radouch   (radouch@cygnus.com)

	* arm-tdep.c (arm_push_arguments): fixed frame construction

Thu Sep 10 20:51:23 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* mn10300-tdep.c (mn10300_analyze_prologue): guard against NULL.

Wed Sep  9 19:37:36 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* dbxread.c (IGNORE_SYMBOL): Remove definition, is never used.
	* os9kread.c: Remove comment mentioning IGNORE_SYMBOL.

Wed Sep  9 11:39:05 1998  Ron Unrau  <runrau@cygnus.com>

	* blockframe.c(find_pc_sect_partial_function): look for min syms in
	  the same section when trying to guess the end of a function.
	* symfile.c(list_overlays_command): use print_address_numeric
	* remote-sim.c: export simulator_command

1998-09-08  Jason Molenda  (jsm@bugshack.cygnus.com)

	* breakpoint.c (bpstat_stop_status):  Declare a bp match if the
	current fp matches the bp->fp OR if the current fp is less than
	the bp->fp if we're looking at a bp_step_resume breakpoint.

Tue Sep  8 19:42:58 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* symtab.h (struct symtab): Remove EXTRA_SYMTAB_INFO hook,
	not currently used.
	* symfile.c (allocate_symtab): Deprecate use of
	INIT_EXTRA_SYMTAB_INFO here.

Fri Sep  4 15:33:25 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* README: Update remote debugging and testsuite info.

Thu Sep  3 13:50:20 1998  Mark Alexander  <marka@cygnus.com>

	* config/mn10300/tm-mn10300.h (FP_REGNUM): Redefine to be a
	pseudo-register, not the same as a3.
	(D2_REGNUM, D3_REGNUM, A2_REGNUM, A3_REGNUM): Define.
	* mn10300-tdep.c (fix_frame_pointer): New function.
	(set_movm_offsets): Use register number macros instead of
	hard-coded constants.
	(mn10300_analyze_prologue): Fix to handle redefinition of FP_REGNUM.
	(mn10300_frame_chain):  Fix to handle redefinition of FP_REGNUM;
	use register number macros instead of hard-coded constants;
	add missing parameter to call of mn10300_analyze_prologue.
	(mn10300_frame_saved_pc): Use register number macros instead of
	hard-coded constants.

Tue Sep  1 12:04:57 EDT 1998  Zdenek Radouch   (radouch@cygnus.com)

	Changes to support/fix ARM/ELF port.  Use MAKE_MSYMBOL_SPECIAL for
	both ELF and COFF;
	* elfread.c (elf_symtab_read): use ELF specific macro
	* coffread.c (coff_symtab_read): use COFF_MAKE_MSYMBOL_SPECIAL()
	* arm-tdep.c: separate COFF and ELF thumb processing
			disable --mapcs-float processing
	* dwarf2read.c: Disabled building of minimal symbols
	* config/arm/tm-arm.h: new macros for distinguishing arm/thumb
	* config/mips/tm-mips.h: use ELF specific macro

Mon Aug 31 15:42:10 1998  Tom Tromey  <tromey@cygnus.com>

	* top.c (context_hook): Define.

Tue Aug 25 13:21:58 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* ax-gdb.c (gen_var_ref): Allow for typedef types.
	(gen_cast, gen_bitfield_ref, gen_expr, gen_deref): ditto.

Mon Aug 24 18:29:03 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (collect_symbol): Handle register doubles that
	are stored in two registers.

Mon Aug 24 14:39:08 1998  Mark Alexander  <marka@cygnus.com>

	* sh-stub.c (undoSStep): Improve comment.
	* sparc-tdep.c (sparc_extract_struct_value_address): Simplify to use
	same method on both 32-bit and 64-bit machines.
	* sparcl-tdep.c (sparclite_check_watch_resources): Simulator doesn't
	support hardware breakpoints.
	* config/sparc/tm-sparc.h (CALL_DUMMY): Improve comments.

1998-08-20  Jason Molenda  (jsm@bugshack.cygnus.com)

        * rdi-share/Makefile.am (INCLUDES): Fix typeo.
        * rdi-share/Makefile.in: Regenerated.

1998-08-19  Jason Molenda  (jsm@bugshack.cygnus.com)

        * rdi-share/Makefile.am: Use just `INCLUDES' not `libname_INCLUDES'.
        * rdi-share/Makefile.in: Regenerated.

1998-08-19  Keith Seitz  <keiths@cygnus.com>

	* v850ice.c (v850ice_stop): New function to stop the ICE.
	(v850ice_load) Pass filename to ICE DLL.
	(ice_stepi, ice_nexti, ice_cont): Do not directly call the gdb
	commands -- let the GUI do it so that it can retain control
	of the display.

Wed Aug 19 15:53:52 1998  Anthony Green  <green@hoser.cygnus.com>

	* i386v4-nat.c: Include sys/reg.h if present.

Wed Aug 19 03:07:53 1998  Richard Henderson  <rth@cygnus.com>

	* config/alpha/alpha-linux (XDEPFILES): Build ser-tcp.

1998-08-18  Fernando Nasser  <fnasser@totem.to.cygnus.com>

        * symtab.c (decode_line_1): For minimal symbol, SKIP_PROLOG to
        make sure we stop after the frame pointer is locaded and backtrace
        prints an accurate stack.  Complements changes made on Mon Jul 27
        10:45:56 1998
        (decode_line_2): Replaced the whitespace after ">" in a prompt
        which has been taken away by changes made on Sun Jul 19 02:11:45
        1998

1998-08-18  Keith Seitz  <keiths@cygnus.com>

	* stack.c: Define new hook, selected_frame_level_changed_hook, which
	will be called whenever the selected stack level changes.
	(select_frame): Call the selected_frame_level_changed_hook.

Tue Aug 18 18:03:42 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-rdi.c (arm_rdi_open): Pass serial device name to
 	Adp_OpenDevice, and include it in error reports.

1998-08-18  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Add more header files to AC_CHECK_HEADERS.
	* configure: Regenerated.

	* command.c: Include wait.h or sys/wait.h if present.
	* inftarg.c: Ditto.
	* core-aout.c: Include ptrace.h or sys/ptrace.h if present, based
	on autoconf test.
	* infptrace.c: Ditto.

	* expprint.c: Include ctype.h for isprint prototype.
	* i386aix-nat.c: Include sys/reg.h if autoconf says it is present.
	* i386v-nat.c: Include ptrace.h, sys/ptrace.h, and sys/reg.h if 
	present, based on autoconf test.  

	* utils.c: Include curses.h and term.h if present.
	(puts_debug): Change 'carriage_return' local variable to return_p
	to avoid name clash.

	* config/m68k/nm-apollo68b.h: Don't define PTRACE_IN_WRONG_PLACE,
	determine it with autoconf.
        * config/i386/nm-linux.h: Don't define NO_SYS_REG_H, determine it
        with autoconf.
	* config/i386/nm-i386sco.h: Don't define NO_PTRACE_H, determine it 
	with autoconf.
	* config/i386/nm-i386v.h: Ditto.
	* config/i386/nm-symmetry.h: Ditto.
	* config/m88k/xm-cxux.h: Ditto.
	* config/m88k/xm-dgux.h: Ditto.

	* config/m68k/delta68.mh (NAT_FILE): nm-delta68.h no longer necessary.
	* config/m68k/nm-delta68.h: Removed.

Fri Aug 14 11:14:03 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300-tdep.c (set_movm_offsets): Change second argument to
	be the actual args to movm itself.  All callers changed.  Only set
	fi->fsr.regs[x] if reg X is saved by the movm instruction.

Fri Aug 14 04:18:23 1998  Peter Schauer  <pes@regent.e-technik.tu-muenchen.de>

	* sol-thread.c (lwp_to_thread):  Fix error message for failing
	td_ta_map_lwp2thr call.
	(ps_lgetLDT):  Mask off upper bits in GS register when comparing
	with selector.

Wed Aug 12 16:30:01 1998  Frank Ch. Eigler  <fche@cygnus.com>
 
	* remote-sim.c (simulator_command): Reset register cache after
	simulator command.

Wed Aug 12 09:00:26 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* expprint.c (dump_prefix/postfix_expression):  Don't try to print
	type expressions.

Tue Aug 11 11:33:25 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* c-typeprint.c (c_print_type):  Don't crash if varstring is null.
	* expprint.c expression.h (dump_expression):  Rename to
	dump_prefix_expression. 
	* Print out the expression in normal form.  Call print_longest
	instead of trying to do it ourselves.
	* (dump_postfix_expression):  New function, prints out the expression
	with indentation and better formatting and interpretation.
	* parse.c (parse_exp_1):  Put calls to dump expressions under ifdef
	MAINTENANCE_CMDS and expressiondebug variable.

Thu Aug 6 13:20:02 1998  Ron Unrau  <runrau@cygnus.com>

	* infrun.c (wait_for_inferior): use stop_func_name instead of 
	  stop_func_start to decide that no debug info exists.

Thu Jul 30 13:53:50 1998  Mark Alexander  <marka@cygnus.com>

	* mips-tdep.c (mask_address_p): New variable.
	(mips_addr_bits_remove): Test mask_address_p to decide whether
	to mask off the upper 32 bits of addresses.
	(_initialize_mips_tdep): Add command to set mask_address_p.
	(mips_call_dummy_address): New function.
	* config/mips/tm-mips.h (CALL_DUMMY_ADDRESS): Redefine to
	call mips_call_dummy_address.

1998-07-29  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* symfile.c (add_symbol_file_command): Test for the from_tty
	parameter and avoid query when not interactive.

Wed Jul 29 10:39:29 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300-tdep.c (set_movm_offsets): Do nothing for the am33
	registers if we are not in am33 mode.
	(mn10300_frame_chain, mn10300_frame_saved_pc): Similarly.
	(set_machine_hook): Keep track of whether or not we're in am33 mode.

Mon Jul 27 16:11:42 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (remote_set_transparent_ranges): new function.
	Send the start and end addresses of all loadable read-only
	sections down to the trace target, so that it can treat them
	as "transparent" (ie. don't care if they were collected or not).

Mon Jul 27 15:38:07 1998  Mark Alexander  <marka@cygnus.com>

	* mn10300-tdep.c (mn10300_analyze_prologue): Undo previous fix
	for setting frame address in optimized code; made unnecessary
	by compiler fixes.

Mon Jul 27 10:45:56 1998  Martin M. Hunt  <hunt@cygnus.com>

	* symtab.c (decode_line_1): For minimal symbol, call 
	find_pc_sect_line() to make sure the line number gets set 
	properly.
	(print_symbol_info): Redeclare function void.

1998-07-27  Jason Molenda  (jsm@bugshack.cygnus.com)

	* config/d10v/tm-d10v.h (REGISTER_NAMES): sp -> r15.  The
	stack pointer et al are synthesized from the SP_REGNUM (etc)
	defines and should not be mentioned in REGISTER_NAMES.

Mon Jul 27 08:54:41 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300-tdep.c (mn10300_frame_chain): Account for space saved
	by am33 register saves.
	(mn10300_frame_saved_pc): Similarly.

Fri Jul 24 14:41:19 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (encode_actions): Treat register names and simple
	variable names as special cases and don't convert them to byte-
	codes: these things can be collected far more efficiently 
	without invoking the bytecode interpreter.

Fri Jul 24 13:32:46 1998  Mark Alexander  <marka@cygnus.com>

	* config/i386/tm-i386.h (STORE_STRUCT_RETURN): Make it
	work on hosts of any endianness.
	* config/i386/tm-i386v.h: Ditto.

Fri Jul 24 07:41:12 1998  Mark Alexander  <marka@cygnus.com>

	* mn10300-tdep.c (set_movm_offsets): New helper function
	for mn10300_analyze_prologue.
	(mn10300_analyze_prologue): Simplify by factoring out common code.
	Fix bugs in setting frame address for optimized code.
	Use read_memory_nobpt instead of target_read_memory.

Thu Jul 23 17:01:17 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (collect_symbol): handle LOC_ARG case.

Thu Jul 23 15:07:40 1998  Dawn Perchik  <dawn@cygnus.com>

	* sparc-tdep.c (sparc_init_extra_frame_info): Recognize when we're
	in a function prologue before the SAVE instruction.
	(sparc_frame_saved_pc): Ditto.
	* config/sparc/tm-sparc.h (EXTRA_FRAME_INFO): Add in_prologue flag.

Thu Jul 23 14:58:09 1998  Dawn Perchik  <dawn@cygnus.com>

	* i386-tdep.c (i386_get_frame_setup): Recognize function
	prologues in code compiled with -fcheck-stack.

Thu Jul 23 14:49:27 1998  Dawn Perchik  <dawn@cygnus.com>

	* remote-mips.c (remote_mips_insert_hw_breakpoint,
	remote_mips_remove_hw_breakpoint): New functions for hardware
	breakpoints on LSI targets.
	* config/mips/tm-embed.h (target_remove_hw_breakpoint,
	target_insert_hw_breakpoint): Define to call
	remote_mips_insert_hw_breakpoint and remote_mips_remove_hw_breakpoint,
	respectively.

1998-07-21  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* source.c (print_source_lines): Print "No such file or directory"
	just once.
	(directory_command): same as above; resets if user issues dir.

Sun Jul 19 02:11:45 1998  Martin M. Hunt  <hunt@cygnus.com>

	* symtab.c (decode_line_2): Instead of printing a prompt
	and calling command_line_input() without a prompt, just
	call it with the proper args.  This makes the GUI work too.

Fri Jul 17 9:26:50 1998  Ron Unrau  <runrau@cygnus.com>

	* blockframe.c (find_pc_sect_partial_function): allow for the possi-
	  bility of multiple symbols at the same address when finding high.
	* breakpoint.c (resolve_sal_pc): if the function based section lookup
	  fails, try getting the section from the minimal symbol table.
	* parse.c (write_exp_msymbol): use symbol_overlayed_address to get
	  the LMA of a minimal symbol if unmapped.
	* symtab.c (find_line_symtab): change interface to return symtab 
	  containing the best linetable found.
	  (decode_line_1): use find_line_symtab to set val.symtab. This should
	  improve support for source files with multiple symtabs.

Wed Jul 15 11:51:33 1998  Keith Seitz  <keiths@cygnus.com>

	* main.c (main): Fix violations of GNU coding standard.

	* breakpoint.c: Export delete_command.

	* infcmd.c: Export continue_command, stepi_command, and nexti_command.

	* Makefile.in: Add target for v850ice.o.

	* configure.tgt: Add cygwin32 dependencies for v850 ice.

Wed Jul 15 10:58:29 1998  Nick Clifton  <nickc@cygnus.com>

	* tracepoint.c (set_raw_tracepoint): Cope with symbols that do not
	have an associated directory.

Mon Jul 13 15:21:04 1998  Mark Alexander  <marka@cygnus.com>

	* utils.c (puts_debug): Display non-printable characters in hex
	instead of octal.

Thu Jul  9 16:16:47 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300-tdep.c (mn10300_generic_register_names): New variable.
	(set_machine_hook): New function.  Copy the appropriate register
	names into reg_names.
	(_initialize_mn10300_tdep): Set up to call set_machine_hook.
	* tm-mn10300 (NUM_REGS): Bump to 32.
	(REGISTER_NAMES): Updated accordingly.

	* mn10300-tdep.c (am33_register_names): New variable.
	(mn10300_analyze_prologue): Handle regs saved by am33 prologues.
	* tm-mn10300.h (E0_REGNUM): Define.

Tue Jul 7 7:40:13 1998  Ron Unrau  <runrau@cygnus.com>

	* symtab.c (find_pc_sect_psymbol): allow case where textlow is 0

Thu Jul  2 15:57:58 1998  Frank Ch. Eigler  <fche@cygnus.com>

	* breakpoint.c (resolve_sal_pc): Accept absence of innermost
	Lexical block for breakpoint resolution.

Thu Jul 2 10:22:00 1998  Dawn Perchik  <dawn@cygnus.com>

	* mdebugread.c (parse_partial_symbols): Go ahead and read the .mdebug
	section, but just don't add a 2nd minimal symbol if this is an .mdebug 
	section in an ELF file.

1998-07-01  Jim Blandy  <jimb@zwingli.cygnus.com>

	* Makefile.in (ax-general.o): Depend on $(defs_h) too.
	(ax_h): Bother to define this.

Mon Jun 29 19:01:18 1998  Jim Wilson  <wilson@cygnus.com>

        * gnu-regex.c (re_comp): Add cast to char * before gettext calls.

Sun Jun 28 11:35:48 1998  Peter Schauer  <pes@regent.e-technik.tu-muenchen.de>

	Improve support for SunPro F77.
	* dbxread.c (end_psymtab, process_one_symbol):  Handle minimal
	symbols with trailing underscore names.
	* minsyms.c (find_stab_function_addr):  Ditto.
	* dbxread.c (process_one_symbol):  Ignore N_ALIAS for now.
	* partial-stab.h (case N_ALIAS):  Ditto.
	* stabsread.c (read_sun_builtin_type):  Handle boolean types.

Fri Jun 26 14:03:01 1998  Keith Seitz  <keiths@cygnus.com>

	* symtab.h (enum namespace): Add new namespaces FUNCTIONS_NAMESPACE,
	TYPES_NAMESPACE, METHODS_NAMESPACE, and VARIABLES_NAMESPACE used by
	new search_symbols.
	Add prototype for search_symbols and free_search_symbols.

	* symtab.c (list_symbols): Rewrite to use new search_symbols.
	(file_matches): New helper function for search_symbols.
	(free_search_symbols): New function which frees data returned from
	search_symbols.
	(print_symbol_info): New helper function which prints info about a
	matched symbol to stdout. Extracted from old list_symbols.
	(print_msymbol_info): New helper function which prints info about
	a matched msymbol to stdout. Extracted from old list_symbols.
	(symtab_symbol_info): Extracted from old list_symbols.
	(variables_info): Use symtab_symbol_info.
	(functions_info): Use symtab_symbol_info.
	(types_info): Use symtab_symbol_info.
	(rbreak_command): Rewrite to use new search_symbols.

Thu Jun 25 22:38:32 1998  Frank Ch. Eigler  <fche@cygnus.com>

	* mips-tdep.c (mips_push_arguments): Use 128-bit stack frame
	alignment for inferior calls.

Wed Jun 24 23:17:12 1998  Mark Alexander  <marka@cygnus.com>

	* mn10200-tdep.c (mn10200_analyze_prologue): Fix calculation
	of jsr target address.

Tue Jun 23 19:37:46 1998  Mark Alexander  <marka@cygnus.com>

	* config/mn10200/tm-mn10200.h (SAVED_PC_AFTER_CALL):  Don't
	zero upper byte of address.

Tue Jun 23 17:32:26 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* rs6000-tdep.c (pop_dummy_frame): use memcpy. 
	(push_arguments): use memset.
	(various other places): fix up indentation and long lines.

Tue Jun 23 11:58:35 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* configure.in: s/lXext/-lXext/ for Jillian's change.

Tue Jun 23 11:14:04 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* source.c (find_source_lines): fix indentation.

	* config/mips/tm-irix5.h: Modify to work better on irix 6, by
	making FP registers 8 bytes instead of 4.
	REGISTER_BYTES: redefine.  REGISTER_BYTE(): redefine.
	REGISTER_VIRTUAL_TYPE: redefine.  MIPS_LAST_ARG_REGNUM: redefine.
	* irix5-nat.c (fetch_core_registers): read 8 bytes per FP register.
	* mips-tdep.c (FP_REGISTER_DOUBLE): new macro to distinguish 
	targets with 8-byte FP registers (don't use TARGET_MIPS64).
	(STACK_ARGSIZE): new macro, how much space is taken up on the
	stack for each function argument (don't use TARGET_MIPS64).
	(mips_push_arguments): modify logic to work better on Irix 6
	(n32 ABI).

Tue Jun 23 12:29:53 1998  Jillian Ye  <jillian@cygnus.com>

        * configure.in: Add -lXext to mips_extra_libs
	* configure: Regenerated.
   
Sun Jun 21 09:31:12 1998  Ron Unrau  (runrau@cygnus.com)

	* symtab.c (find_line_pc): assumed that a PC of 0 is illegal.
  	Changed to pass PC as arg and return 1 if valid (0 otherwise).
	* symtab.h: Change prototype to match.
	* symtab.c (find_line_pc_range): Use new interface.
	* breakpoint.c (resolve_sal_pc): Ditto.

Wed Jun 17 15:50:00 1998  Ron Unrau  (runrau@cygnus.com)

	* parse.c (target_map_name_to_register): Check target specific 
	  aliases *first* so that it can over-ride architectural names

Wed Jun 17 17:13:38 1998  Said Ziouani  (saidz@park-street.cygnus.com)

	* remote-sds.c (sds_start_remote): Fix printf call.

Tue Jun 16 16:32:08 1998  Mark Alexander  <marka@cygnus.com>

	* mn10200-tdep.c (mn10200_analyze_prologue): Fix null pointer
	crash when in "start".

Tue Jun 16 14:38:40 1998  Ron Unrau  (runrau@cygnus.com)

	* dbxread.c: reset function_start_offset after a finishing N_FUN 
	  is seen.
	* remote-sim.c: allow TARGET_REDEFINE_DEFAULT_OPS to override
	  target vectors as needed.

Sun Jun 14 08:46:25 1998  Ron Unrau  (runrau@cygnus.com)

	* partial-stab.h: 'F' and 'f' type N_FUN psymbols should pass
	  CUR_SYMBOL_VALUE as CORE_ADDR instead of long
	* buildsym.[ch]: export pending_blocks list

Sat Jun 13 13:02:32 1998  Dawn Perchik (dawn@cygnus.com)

	* remote.c: Fix remote help string to match that of help.exp.

Fri Jun 12 14:22:55 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* configure.in (LIBS): Add -lw to the list of libraries if needed.

Thu Jun 11 15:05:10 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* btowc.c: Removed.
	* configure.in: Don't see if we need to replace btowc().
	* Makefile.in: Don't include LIBOBJS.
	* configure: Regenerated.
	* gnu-regex.c (regex_compile): Only support i18n [:foo:] if
	we have btowc().

Wed Jun 10 15:39:14 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* c-exp.y:  Fix problems with parsing "'foo.bar'::func".  
	Some languages allow symbols with dots.

	* gdbtypes.c (check_stub_method):  Cosmetic.  Use more descriptive
	names for parameters.

	* jv-exp.y:  Parser now accepts primitive types.
	* (parse_number):  Use correct ifdef for scanf long double support.
	* jv-lang.c (java_array_type):  Initial cut at array support.

	* language.c language.h (set_language):  Now returns previous language.

	* symtab.c (find_methods):  Make static.  Cosmetic changes, including
	indentation, and adding descriptive comments.  Move local variable 
	defs into the block they are used in.
	* Don't call check_stub_method any more.  Use gdb_mangle_name to
	generate the full method name.  find_method doesn't need all the other
	goobldegook that check_stub_method does.
	* (gdb_mangle_name):  Use more descriptive names for parameters.  Fix
	comment.
	* (lookup_partial_symbol lookup_block_symbol):  Check for java to
	ensure we can find mangled names.
	* (decode_line_1):  Move local variable defs into the block they are
	used in.  (Improves code readability.)

Wed Jun 10 18:04:35 1998  Frank Ch. Eigler  <fche@cygnus.com>
 
	* gdbtypes.c (get_discrete_bounds): Assign unsigned type flag for
	all-positive enum.
	(create_set_type): Ditto for all-positive set values.
	* values.c (unpack_field_as_long): Check for typedef in struct
	field unpacking.

Wed Jun 10 14:06:05 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* configure.in: Add some tests for gnu-regex.c's benefit.
	See if btowc() function is provided in C library.
	* configure, config.in: Regenerated.
	* Makefile.in (CLIBS, CDEPS): Add @LIBOBJS@ to build btowc.c
	if necessary.
	* btowc.c: New file.

	* gnu-regex.c: Reorder wchar.h and wctype.h includes for Solaris'
	benefit.
	Drop namespace preserving defines for now.

Wed Jun 10 11:53:42 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* gnu-regex.c: Include "gnu-regex.h", not "regex.h".

Wed Jun 10 11:34:07 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* gnu-regex.c, gnu-regex.h: Change LGPL license to GPL license
	to stay consistent with the rest of GDB.

Wed Jun 10 11:27:39 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* gnu-regex.c, gnu-regex.h: Update to current FSF (glibc) versions.

Wed Jun 10 10:58:18 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* printcmd.c (disassemble_command): move overlay mapping code
	"up" into find_pc_partial_function.
	* blockframe.c (find_pc_partial_function): adjust start address
	and end address for overlays (mapped vs. unmapped addresses),
	so that all callers of this function may benefit.
	* m32r-tdep.c (m32r_skip_prologue): adjust indentation.

Mon Jun  8 16:08:10 1998  Ron Unrau  <runrau@cygnus.com>

	* objfiles.c (add_to_objfile_sections): All targets to define
	  TARGET_KEEP_SECTION to permit them to retain bfd sections that
	  GDB would otherwise have discarded.

Fri Jun  5 13:56:19 1998  Doug Evans  <devans@canuck.cygnus.com>

	* dbxread.c (read_dbx_symtab): Don't lower texthigh for last psymtab.

Thu Jun  4 18:35:04 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* remote.c (init_extended_remote_ops): Make extended_remote_ops
	by copying from remote_ops, move it and init_remote_ops to
	usual place at end of file, remove "void" from arg lists.

Thu Jun  4 17:51:06 1998  Mark Alexander  <marka@cygnus.com>

	* sparc-tdep.c (sparc_fix_call_dummy): Byte-swap the call dummy
	on bi-endian machines.
	(sparc_extract_return_value): Handle values smaller than int on
	machines with little-endian data.
	(sparc_target_architecture_hook): Set bi_endian flag.

Thu Jun  4 12:14:48 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* printcmd.c (disassemble_command): Fix off-by-one error for
	disassembling functions in unmapped overlay sections.

Thu Jun  4 10:15:03 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* remote.c: merged.

        - Jim Blandy  <jimb@zwingli.cygnus.com>
	(print_packet, remote_packet_command): New functions.
        (_initialize_remote): Register the remote-packet command.
        - David Taylor  <taylor@texas.cygnus.com> 
        (_initialize_remote): remote-compare is now
        compare-sections.
        - Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
         (remote_compare_command): added warning, issued in case
        of mismatch only.

Thu Jun  4 08:25:38 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (remote_compare_command): New function, new command.
	Compare object file binary image with corresponding memory on
	remote target.  Report differences.

Tue Jun  2 19:05:04 1998  Mark Alexander  <marka@cygnus.com>

	* sparc-tdep.c (sparc_target_architecture_hook): Set target
	byte order only when it's selectable.

Tue Jun  2 02:01:56 1998  Mark Alexander  <marka@cygnus.com>

	* sparc-tdep.c (sparc_target_architecture_hook): New function to
	set endianness based on machine type.
	(_initialize_sparc_tdep): Initialize target_architecture_hook.
	(sparc_print_register_hook): Print PSR and FPSR in fancy format
	on 32-bit machines.
	* config/sparc/tm-sparc.h (PRINT_REGISTER_HOOK): Redefine to
	call sparc_print_register_hook instead of using inline code.
	* config/sparc/tm-sp64.h (PRINT_REGISTER_HOOK): Remove.

Thu May 28 17:19:14 1998  Keith Seitz  <keiths@cygnus.com>

	* main.c (main): Check for NULL from getenv on CYGWIN32.

Thu May 28 09:41:44 1998  Nick Clifton  <nickc@cygnus.com>

	* monitor.c (monitor_vsprintf): Handle %%.  Patch courtesy of
	Felix Lee (flee@cygnus.com)

Thu May 28 00:27:35 1998  Peter Schauer  <pes@regent.e-technik.tu-muenchen.de>

	* mips-tdep.c (mips_push_dummy_frame):  Fix calculation of
	PROC_REG_OFFSET and PROC_FREG_OFFSET.

Mon Apr 27 14:37:49 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/v850/tm-v850.h (REGISTER_BYTE): FP_REGNUM and
 	FP_RAW_REGNUM use the same register location.

	* v850-tdep.c (v850_scan_prologue): Use FP_RAW_REGNUM instead of
 	FP_REGNUM.
	(v850_frame_chain): Ditto.

	* config/v850/tm-v850.h (REGISTER_NAMES): Add "fp".
	(NUM_REGS): Update.
	(FP_REGNUM): Update.
	(FP_RAW_REGNUM): Define.

Wed May 27 14:22:31 1998  Keith Seitz  <keiths@cygnus.com>

	* main.c (main): Convert the path returned from getenv to a posix
	path on cygwin32 hosts.

Mon May 25 13:31:27 1998  Keith Seitz  <keiths@cygnus.com>

	* remote.c (remote_open_1): If an error occurs starting the remote, 
	pop the target AND return.

Sat May 23 02:23:09 1998  Peter Schauer  <pes@regent.e-technik.tu-muenchen.de>

	* dwarf2read.c (read_subroutine_type):  Set TYPE_FLAG_PROTOTYPED
	on C++ functions.
	* valops.c (value_arg_coerce):  Add new argument to indicate whether
	the function has a prototype, handle integer and float promotions
	accordingly.
        (call_function_by_hand):  Always call value_arg_coerce, pass down
	prototype information.

Fri May 22 10:56:36 1998  John Metzler  <jmetzler@cygnus.com>

	* remote.c (_initialize_remote): Typo extended__remote

Thu May 21 13:14:25 1998  John Metzler  <jmetzler@cygnus.com>

	* gnu-nat.c (init_gnu_ops): Initialization of target ops by assignment.
	(_initialize_gnu_nat): Call new init
	* mac-nat.c (init_child_ops): Ditto.
	(_initialize_mac_nat): Ditto.
	* monitor.c (init_base_monitor_ops): Ditto.
	(_initialize_remote_monitors): Ditto.
	* ppc-bdm.c (init_bdm_ppc_ops): Ditto.
	(_initialize_bdm_ppc): Ditto.
	* remote-adapt.c (init_adapt_ops): Ditto.
	(_initialize_remote_adapt): Ditto.
	* remote-array.c (init_array_ops): Ditto.
	(_initialize_array): Ditto.
	* remote-bug (init_bug_ops): Ditto.
	(_initialize_remote_bug): Ditto.
	* remote-e7000.c (init_e7000_ops): Ditto.
	(_initialize_remote_e7000): Ditto.
	* remote-eb.c (init_eb_ops): Ditto.
	(_initialize_remote_eb): Ditto.
	* remote-es.c (init_es1800_ops): Ditto.
	(init_es1800_child_ops): Ditto.
	(_initialize_es1800): Ditto.
	* remote-hms.c (init_hms_ops): Ditto.
	(_initialize_remote_hms): Ditto.
	* remote-mm.c (init_mm_ops): Ditto.
	(_initialize_remote_mm): Ditto.
	* remote-nindy.c (init_nindy_ops): Ditto.
	(_initialize_nindy): Ditto.
	* remote_nrom.c (init_nrom_ops): Ditto.
	(_initialize_remote_nrom): Ditto.
	* remote-os9k (init_rombug_ops): Ditto.
	(_initialize_remote_os9k): Ditto.
	* remote-rdi.c (init_rdi_ops): Ditto.
	(_initialize_remote_rdi): Ditto.
	* remote-rdp.c (init_remote_rdp_ops): Ditto.
	(_initialize_remote_rdp): Ditto.
	* remote-sds.c (init_sds_ops): Ditto.
	(_initialize_remote_sds): Ditto.
	* remote-sim.c (init_gdbsim_ops): Ditto.
	(_initialize_remote_sim): Ditto.
	* remote-st.c (init_st2000_ops): Ditto.
	(_initialize_remote_st2000): Ditto.
	* remote-udi.c (init_udi_ops): Ditto.
	(_initialize_remote_udi): Ditto.
	* remote-vx.c (init_vx_ops): Ditto.
	(init_vx_run_ops): Ditto.
	(_initialize_vx): Ditto.
	* remote.c (init_remote_ops): Ditto.
	(init_extended_remote_ops): Ditto.
	(_initialize_remote): Ditto.
	* sparcl-tdep.c (init_sparclite_ops): Ditto.
	(_initialize_sparcl_tdep): Ditto.
	* v850ice.c (init_850ice_ops): Ditto.
	(_initialize_v850ice): Ditto.
	* win32-nat.c (init_child_ops): Ditto.
	(_initialize_inftarg): Ditto.

1998-05-21  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c (const_var_ref): Don't handle function names.  I don't
	want to implement all the "usual unary conversion" rules for
	constants.
	(gen_usual_unary): Turn "function" values into "pointer to
	function" values, in accordance with ANSI.
	(gen_deref): Don't do the usual unary conversions here.  Let the
	caller do it.  Note that dereferencing a function pointer yields
	a function designator, which we call an rvalue, not an lvalue.
	(gen_address_of): Handle functions specially.
	(gen_struct_ref): Perform the usual unary conversions before
	calling gen_deref.
	(gen_expr): In case for the prefix '*' operator, call
	gen_usual_unary manually.

Wed May 20 15:29:41 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/tm-tx39.h (MIPS_DEFAULT_FPU_TYPE): Defined as MIPS_FPU_NONE.
	* mips/tm-tx39l.h: Same.

Wed May 20 10:12:11 1998  John Metzler  <jmetzler@cygnus.com>

	* m32r-tdep.c (decode_prologue): Handle frames compiled with -Os.
        Split out as separate function called by skip prologue and scan
        prologue. new formula handles optimization in which the prologue
        is interleaved with the body of the function. Also recognizes new
        variations of prologue encoding.  Use of frame pointer is
        essential to debugging, -fno-omit-frame-pointer
        (m32r_skip_prologue): Call decode prologue, ignore line info
        (m32r_scan_prologue): Call decode prologue, ignore line info.

Tue May 19 17:23:54 1998  John Metzler  <jmetzler@cygnus.com>

	* w89k-rom.c (_initialize_w89k): Call new init function
	(init_w89k_cmds): Convert to dynamic initialization of monitor_ops 
        data structure for forward compatability with additions to the
        data structure.
	* dbug-rom.c (_initialize_dbug_rom): ditto
        (init_dbug_cmds): ditto
	* m32r-rom.c (_initialize_m32r_rom): ditto
	(init_m32r_cmds): ditto

Tue May 19 14:54:11 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (memrange_cmp): use const void * args to avoid
	ANSI compiler warnings.

1998-05-19  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c (gen_fetch, gen_var_ref, gen_deref, find_field,
	gen_bitfield_ref, gen_expr): Call error, not abort.
	* ax-general.c (read_const, generic_ext, ax_trace_quick,
 	ax_label, ax_const_d, ax_reg, ax_print): Same.

	* tracepoint.c: Remove the $(...) syntax for memranges.
	(validate_actionline, encode_actions, trace_dump_command): Remove
	clauses for the $(...) syntax.
	(parse_and_eval_memrange): Function deleted.
	(_initialize_tracepoint): Update function description. 

	* ax-gdb.c (_initialize_ax_gdb): Make the "agent" command a
 	subcommand of "maintenance", as it should have been from the
	beginning.  #include "gdbcmd.h", to get the declaration for
	maintenancelist.
	* Makefile.in: Document that dependency.

Tue May 19 12:00:58 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* tracepoint.c (get_tracepoint_by_number): new function, to access
	traceframe_number for use of the GUI.

	* tracepoint.h: added prototype for get_traceframe_number.

Mon May 18 13:34:27 1998  Keith Seitz  <keiths@cygnus.com>

        * dbxread.c (process_one_symbol): If block addresses are relative to
        function start addresses, reset function_start_address whenever a new
        source file is seen.

Mon May 18 13:04:27 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (get_tracepoint_by_number): make sure to advance
	arg pointer even if we fail to parse a useful number.  Otherwise,
	since this function is called in a loop, it may loop forever!
	Also change strtol call to allow arbitrary radix.
	(map_args_over_tracepoints (and other places)): add QUIT; call
	to loop, to allow breakout using control-C.  Not all loops were
	analyzed to make sure they could terminate cleanly, but even
	terminating with a messed-up tracepoint list would be better 
	than not terminating at all!
	(tdump_command): check to see if we're connected to a trace-
	capable target (currently only "remote") before doing anything 
	else.

Sat May 16 22:21:48 1998  Frank Ch. Eigler  <fche@cygnus.com>

	* config/d30v/tm-d30v.h (INIT_FRAME_PC_FIRST): Fill in PC into
 	frame struct before extracting saved register offsets.

Fri May 15 22:47:45 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (encode_actions): fix typo in printf format string.

1998-05-15  Jim Blandy  <jimb@zwingli.cygnus.com>

	Implement a few more tracing operators: ^ | & ~ !
	* ax-gdb.c (gen_integral_promotions, gen_logical_not,
	gen_complement): New functions.
	(gen_binop): New argument MAY_CARRY, indicating whether we need to
	correct the upper bits of the value after performing the
	operation.  Callers changed.
	(gen_expr): Handle BINOP_BITWISE_AND, BINOP_BITWISE_IOR, and
	BINOP_BITWISE_XOR here as well, by calling gen_binop.  Handle
	UNOP_LOGICAL_NOT, UNOP_COMPLEMENT.

	* ax-gdb.c (gen_conversion): Reworked to avoid some unnecessary
	sign extension.

	* ax-gdb.c (gen_usual_arithmetic): Renamed from gen_usual_binary,
	to match the ANSI C standard better.  Callers changed.

	* ax-gdb.c (gen_traced_pop): Add prototyped declaration.

Fri May 15 18:18:38 1998  David Taylor  <taylor@texas.cygnus.com>

	* tracepoint.c (stringify_collections_list): return a collection
	of strings rather than a single string.
	(free_actions_list): new function.
	(encode_actions): process collection of strings returned by
	stringify_collections_list.

1998-05-15  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c (gen_traced_pop): New function.
	(gen_expr): Call it for comma operator.
	(gen_trace_for_expr): Call it, instead of writing it out.

	Add facilities for sending arbitrary packets to the remote agent.
	There are a bunch of improvements to make (make it generic; handle
	'O' replies properly), but I just want to get this onto the branch.
	* remote.c (print_packet, remote_packet_command): New functions.
	(_initialize_remote): Register the remote-packet command.

Thu May 14 17:52:31 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* tracepoint.c: move actionline_type definition to tracepoint.h.
	(validate_actionline): make non static.

	* tracepoint.h: move actioline_type definition  from tracepoint.c.
        (validate_actionline) moved prototype from tracepoint.c.

Thu May 14 11:49:18 1998  David Taylor  <taylor@texas.cygnus.com>

	* tracepoint.c (validate_actionline): add additional error
	checking, remove some dead code.
	(encode_actions): additional cleanups.
	(trace_find_command): remove some dead code.
	(trace_find_pc_command): ditto.
	(trace_find_tracepoint_command): ditto.
	(trace_find_line_command): ditto.
	(trace_find_range_command): ditto.
	(trace_find_outside_command): ditto.

Thu May 14 5:51:00 1998  Ron Unrau  <runrau@cygnus.com>

	* symtab.c (decode_line_1): set section for "break *<addr>"

Wed May 13 20:58:02 1998  Mark Alexander  <marka@cygnus.com>

	* corefile.c (reopen_exec_file): Reopen the exec file if
	it has changed.

Wed May 13 15:22:02 1998  Mark Alexander  <marka@cygnus.com>

	* sparc-tdep.c (fetch_instruction): New function.
	(single_step, sparc_init_extra_frame_info, examine_prologue):
	Use fetch_instruction instead of read_memory_integer
	to ensure that instructions are always read as big-endian.

Wed May 13 14:42:21 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add AC_FUNC_ALLOCA.
	* defs.h: Check HAVE_ALLOCA_H rather than sparc.  Add _AIX pragma
	alloca.
	* configure: Rebuild.
	* Makefile.in (jv-lang.o, jv-typeprint.o, jv-valprint.o): New
	targets.

Wed May 13 11:19:08 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (trace_command): Remove old diagnostic code that was
	preventing tracepoints from being defined with a full-path filename.

Tue May 12 13:17:35 1998  Frank Ch. Eigler  <fche@cygnus.com>

	* stabsread.c (read_one_struct_field): Check for typedef in type
 	tree before clearing bitfield information.

1998-05-11  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c (gen_binop): New function, based on gen_mul, to replace
	gen_mul and gen_div, and handle `%' op as well.  Correctly tests
	type of arguments.
	(gen_expr): Factor out common code in binary arithmetic operators.
	Add support for `%'.
	(gen_mul, gen_div): Removed.

Thu May  7 14:49:38 1998  Bob Manson  <manson@charmed.cygnus.com>

	* config/sparc/tm-sp64.h (CALL_DUMMY): Store and retrieve
	%o0-%o5 as 64-bit values; compensate for stack bias.
	(USE_STRUCT_CONVENTION): We only pass pointers to structs
	if they're larger than 32 bytes.
	(REG_STRUCT_HAS_ADDR): Ditto.

	* sparc-tdep.c (sparc_init_extra_frame_info): Use read_sp()
 	instead of read_register. If the target is a sparc64 and the frame
 	pointer is odd, compensate for the stack bias.
	(get_saved_register): Use read_sp().
	(DUMMY_STACK_REG_BUF_SIZE): Use FP_REGISTER_BYTES.
	(sparc_push_dummy_frame): Use read_sp()/write_sp(). On sparc64,
 	save the PC, NPC, CCR, FSR, FPRS, Y and ASI registers.
	(sparc_frame_find_saved_regs): Use read_sp(). Read the PC, NPC,
 	CCR, FSR, FPRS, Y and ASI registers from the frame, if it's a
 	dummy frame.
	(sparc_pop_frame): Use write_sp(). If the target is a sparc64 and
 	the FP is odd, compensate for stack bias.
	(sparc_store_return_value): Right-justify the return value before
 	writing it to %o0.
	(sparc_fix_call_dummy): Don't NOP out part of the call dummy on
 	sparc64.
	(sparc64_read_sp, sparc64_read_fp, sparc64_write_sp,
 	sparc64_write_fp, sp64_push_arguments,
 	sparc64_extract_return_value): New functions to support the
 	sparc64 ABI.

	* dwarfread.c (handle_producer): Set processing_gcc_compilation to
 	the right version number.

	* dwarf2read.c (read_file_scope): Assume we're processing
	GCC2 output.

Wed May  6 16:34:03 1998  Jeffrey A Law  (law@cygnus.com)

	* somsolib.c: Include gdb_stat.h.

Mon May  4 18:34:01 1998  David Taylor  <taylor@texas.cygnus.com>

	* ax-gdb.c (gen_mul): new function; (gen_div): new function;
	(gen_expr): add support for * and / operators, call gen_mul and
	gen_div as appropriate.

Mon May  4 16:24:22 1998  Mark Alexander  <marka@cygnus.com>

	* defs.h (make_run_cleanup): Declare.
	* solib.c (find_solib): Pass correct number of arguments to
	make_run_cleanup.

Mon May  4 07:08:25 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (trace_actions_command): actions command must set
	step_count to zero (in case previous actions have set it but the
	new set does not).

Sat May  2 09:35:07 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* ocd.h:  Add new flags, function codes, and processor types to 
	support new Wiggler capabilities.
	* (ocd_write_bytes_size):  New function to allow atomic writes of
 	memory in sizes larger than a byte.

	* ser-unix.c (baudtab):  Add 57600, 115200, 230400, and 460800 baud.

Fri May  1 19:51:32 1998  Frank Ch. Eigler  <fche@cygnus.com>

	* stabsread.c (read_one_struct_field): Do not override supplied
 	bitfield size for a range type value.

	* gdbtypes.c (create_range_type): For a range with positive 
	lower limit, declare range type as unsigned.

Fri May  1 10:58:34 1998  John Metzler  <jmetzler@cygnus.com>

	* monitor.c: Turn off debug

Fri May  1 09:29:56 1998  Peter Schauer  <pes@regent.e-technik.tu-muenchen.de>

	* breakpoint.c (delete_command):  Skip internal breakpoints when
	all breakpoints are requested.

	* stabsread.c (define_symbol):  Record parameter types from Sunpro
	function stabs in the TYPE_FIELDS of the function type.

Thu Apr 30 15:59:54 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* Makefile.in (config-check-targets, config-check-hosts): Removed.

1998-04-30  Paul Eggert  <eggert@twinsun.com>

        * Makefile.in (maintainer-clean):
        Don't get ahead of yourself and delete Makefile
        before running `make'.
        (local-maintainer-clean, do-maintainer-clean): New rules.

Wed Apr 29 14:02:59 1998  David Taylor  <taylor@texas.cygnus.com>

	* ax-gdb.c (gen_add): when adding a pointer and an int, use
	the size of the pointer, not the int (typo) to decide how
	to extend the result.

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
	rather than static structure initialization.  Added new bits to
	flags MO_EXACT_DUMPADDR, MO_HAS_BLOCKWRITES.

        * monitor.c (RDEBUG): Conditional tracing throughout the file.
        (fromhex): Now recognized upper cse hex digits
        (monitor_printf_noecho):
        (monitor_readchar): Tracing interferes with input timing.
        (monitor_open): Register different memory write functions with
        dcache_init if MO_HAS_BLOCKWRITES.
        (flush_monior_dcache): Added as an additional utilty.
        (monitor-resume): Call continue hook if one has been supplied.
        (monitor_wait_filter): New function Factored out of monitor wait
        and used if alternate wait-filter has not been provided.
        (monitor_wait): call alternate wait filter if provided.  Call
        monitor_dump_regs, a new function factored out from inline code.
        (monitor_dump_block): A new function used as a utility when
        monitors must dump several blocks of registers using different
        commands.
        (monitor_dump_regs): Call alternate function if provided. Uses new
        hook in monitor.h.
        (monitor_write_memory): Engage previouly added hook
        MO_FILL_USES_ADDR.
        (monitor_write_even_block): new function supports writing long
        blocks of 4byte words.
        (longlongendswap): new internal function
        (monitor_write_memory_longlongs): new function writes large blocks
        using command to enter a long long.
        (monitor_write-memory_block): new Function figures out which block
        mod to use.
        (monitor_read_memory): Can now handle dump formats in which the bytes 
        preceeding the requested data is not printed.

Tue Apr 28 19:41:33 1998  Tom Tromey  <tromey@cygnus.com>

	* tracepoint.c (memrange_cmp): Another typo fix; `memrbnge' ->
	`memrange'.

	* tracepoint.c (memrange_cmp): Fixed typo in function intro.

Tue Apr 28 17:41:20 1998  Philippe De Muyter  <phdm@macqel.be>

        * symfile.c (overlay_auto_command): Add forgotten parameter
 	definitions.
        (overlay_manual_command, overlay_off_command): Likewise.
        (overlay_load_command): Likewise.
        * tracepoint.c (memrange_cmp): Parameters have type void *, not
        struct memrange *.

Tue Apr 28 11:08:25 1998  John Metzler  <jmetzler@cygnus.com>

	* rom68k-rom.c (_initialize_rom68k): Fix unresolved init_rom_68kcmds.

Mon Apr 27 14:32:21 1998  Mark Alexander  <marka@cygnus.com>

	* config/sparc/tm-sparc.h (CALL_DUMMY): Shorten it drastically,
	make it work on the simulator.
	(FIX_CALL_DUMMY): Convert to function call instead of inline code.
	(sparc_fix_call_dummy): Declare.
	* sparc-tdep.c (sparc_fix_call_dummy): New function, taken from
	old FIX_CALL_DUMMY macro, with additional fixes for simulator.
	(sparc_push_dummy_frame): Set registers differently on simulator
	to prevent corrupted register window save areas.

Mon Apr 27 13:46:40 1998  John Metzler  <jmetzler@cygnus.com>

        * rom68k-rom.c (_initialize_rom68k, init_rom68k_cmds):
        Convert all static initializations of monitor ops structures to
        executable initializations in order that additions to the data
        structure definition can me made without repeating this editing
        exercise.                                            
        * abug-rom.c (_initialize_abug_rom, init_abug-cmds): Ditto.
        * cpu32bug-rom.c (_initialize_cpu32bug_rom, init_cpu32bug_cmds): Ditto.
        * mon960-rom.c (initialize_mon960, init_mon960_cmds): Ditto.
        * op50-rom.c (initialize_op50n, init_op50n_cmds): Ditto.       
        * ppcbug-rom.c (_initialize_ppcbug_rom, init_ppc_cmds): Ditto.
        * sh3-rom.c (_initialize_sh3_rom, init_sh3_cmds): Ditto.
        * sparclet-rom.c (_initialize_sparclet, init_sparclet_cmds): Ditto.
        * remote-est.c (_initialize_est, init_est_cmds): Ditto.
        * remote-hms.c ( _initialize_remote_hms, init_hms_cmds): Ditto.

Mon Apr 27 10:43:04 1998  Jason Molenda  (crash@bugshack.cygnus.com)

        * gdb_string.h (strdup): Don't specify arguments in prototype.

Sun Apr 26 07:57:21 1998  Peter Schauer <pes@regent.e-technik.tu-muenchen.de>

	* rs6000-nat.c (vmap_ldinfo):  Issue warning instead of error if
	fstat on ldinfo_fd fails.  Use objfile->obfd instead of vp->bfd
	to check for reference to the same file.

	* target.c (target_read_string):  Handle string transfers at the
	end of a memory section gracefully.

Fri Apr 24 17:18:56 1998  Geoffrey Noer  <noer@cygnus.com>

	* Makefile.in: enable EXEEXT setting

Fri Apr 24 11:53:49 1998  David Taylor  <taylor@texas.cygnus.com>

	* tracepoint.c (add_local_symbols): change type of type from
	char to int so that type shows up as 'A' or 'L' not 0.

Thu Apr 23 16:37:20 1998  Jason Molenda  (crash@bugshack.cygnus.com)

        * README:  Minor changes for 4.17 release.

Thu Apr 23 15:44:39 1998  Per Bothner  <bothner@cygnus.com>

	* symfile.c (deduce_language_from_filename):  .class implies java.

Thu Apr 23 12:52:21 1998  Philippe De Muyter  <phdm@macqel.be>

        * configure.in (strerror): Check if function must be declared.
        * acconfig.h (NEED_DECLARATION_STRERROR): New define slot.
        * gdb_string.h (strerror): Function declaration issued if
        NEED_DECLARATION_STRERROR.
        * configure, config.in: Files regenerated.

Thu Apr 23 12:27:43 1998  Philippe De Muyter  <phdm@macqel.be>

        * symfile.c (simple_overlay_update_1): Do not prefix array address
        by `&'.
        * bcache.h (BCACHE_DATA_ALIGNMENT): Ditto.
        * tracepoint.c (encode_actions): Ditto.
        * language.c, complaints.c, utils.c (varargs.h): Do not include that
        file here, it is already included indirectly by defs.h.
        * dbxread.c (dbx_symfile_init, process_one_symbol): Cast xmalloc return
        value to the appropriate pointer type.
        * utils.c (floatformat_from_doublest): Ditto.
        * tracepoint.c (read_actions, _initialize_tracepoint): Ditto.
        (add_memrange): Likewise with xrealloc return value.
        * stabsread.c (ref_add): Ditto.
        * coffread.c (coff_symfile_init): Likewise for xmmalloc return value.
        * elfread.c (elf_symfile_read): Ditto.
        * os9kread.c (os9k_symfile_init): Ditto.

Thu Apr 23 00:32:08 1998  Tom Tromey  <tromey@cygnus.com>

	* config.in: Rebuilt.
	* acconfig.h (ENABLE_NLS, HAVE_CATGETS, HAVE_STPCPY, HAVE_GETTEXT,
	HAVE_LC_MESSAGES): Define.

Wed Apr 22 15:38:56 1998  Tom Tromey  <tromey@cygnus.com>

	* configure: Rebuilt.
	* configure.in: Call CY_GNU_GETTEXT.
	* Makefile.in (top_builddir): New macro.
	(INTL): Define to @INTLLIBS@.
	(INTL_DEPS): New macro.
	(CDEPS): Reference INTL_DEPS, not INTL.

Wed Apr 22 12:58:23 1998 Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	Handle missing shared libraries during the examination of a core
	dump gracefully.
	* solib.c (find_solib):  Use catch_errors around call to
	solib_map_sections. Use warning instead of error if reading of
	the shared library name fails.
	(solib_map_sections):  Change return and argument types to make
	it callable from catch_errors.
	(symbol_add_stub):  Avoid GDB core dump if solib->abfd is NULL.
	* irix5-nat.c, osfsolib.c (xfer_link_map_member, solib_map_sections,
	symbol_add_stub):  Ditto.

Wed Apr 22 14:34:49 1998  Michael Meissner  <meissner@cygnus.com>

	* Makefile.in (INTL*): Add support to link in the intl library,
	and to add -I options to its source and object directories.
	(INTERNAL_CFLAGS): Ditto.
	(C{LIBS,DEPS}): Ditto.

Tue Apr 21 11:20:54 1998  Frank Ch. Eigler  <fche@cygnus.com>

	* mips-tdep.c (gdb_print_insn_mips): Disassemble MIPS instructions
 	with subtarget-specific `mach', rather than fixed default.
	* config/mips/tm-mips.h (TM_PRINT_INSN_MACH): New macro, default
	disassembly `mach'.

Mon Apr 20 15:35:03 1998  Philippe De Muyter  <phdm@macqel.be>

        * coffread.c (decode_base_type): Treat a long field with size greater
        than TARGET_LONG_BIT as long long.
        * values.c (value_from_longest): Print code value in error message.

Mon Apr 20 15:32:21 1998   Mark Kettenis  <kettenis@phys.uva.nl>

        * gdb_string.h (strdup): Declare only if not defined as a
        macro.

Mon Apr 20 14:18:45 1998  J. Kean Johnston  <jkj@sco.com>

        * procfs.c: Added replacement macros for LWP stuff.  Fixed support 
        for UnixWare / SVR4.2MP targets and any targets which use
        multi-file /proc entries.  Fixed support for hardware watchpoints.
        * solib.c: SCO needs some of the same code as SunOS. Change
        preprocessor conditionals.

        * config/i386/i386sco5.mt: New file.
        * config/i386/tm-i386sco5.h: New file.
        * config/i386/i386sco5.mh (NATDEPFILES): add i386v-nat.o.
        * config/i386/nm-i386v42mp.h 
        (TARGET_HAS_HARDWARE_WATCHPOINTS): define.  
        Add other macros for hardware assisted watchpoints.
        * config/i386/nm-i386sco5.h: Correct attributions.
        (TARGET_HAS_HARDWARE_WATCHPOINTS): define.
        * config/i386/nm-linux.h (target_remote_watchpoint): Pass
        'type' through to i386_insert_watchpoint.

Mon Apr 20 14:12:30 1998 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)

	* infrun.c (wait_for_inferior): Don't add signalled processes
	as new threads.
	* procfs.c (wait_fd): Note if LWP has exited.
	(procfs_wait): use GETPID to get process ID.

Sat Apr 18 15:21:04 1998  Stan Cox  <scox@cygnus.com>

	* configure.tgt: Added sparc86x support.

Thu Apr 16 13:13:24 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* rdi-share/etherdrv.c (EthernetWrite): Use strerror to get
	error string if in an ANSI C-ish environment.

Wed Apr 15 18:59:48 1998  Mark Alexander  <marka@cygnus.com>

	* sparc-tdep.c (SPARC_HAS_FPU): Define.
	(sparc_extract_return_value): New function, required to handle
	machines without floating point.
	(sparc_store_return_value): Ditto.
	* config/sparc/tm-sparc.h (EXTRACT_RETURN_VALUE): Call
	sparc_extract_return_value instead of using inline code.
	(sparc_extract_return_value): Declare.
	(STORE_RETURN_VALUE): Call sparc_store_return_value instead
	of using inline code.
	(sparc_store_return_value): Declare.

Wed Apr 15 12:19:42 1998  Martin M. Hunt  <hunt@cygnus.com>

	* solib.c (enable_break): Only call warning once
	instead of three times.

Tue Apr 14 16:52:59 1998  Mark Alexander  <marka@cygnus.com>

	* sparc-tdep.c (sparc_extract_struct_value_address): Make it
	work correctly on little-endian hosts.
	(sparc_push_arguments): New function.
	(gdb_print_insn_sparc): New function.
	(_initialize_sparc_tdep): Make gdb_print_insn_sparc the default
	disassembler, so that SPARClite-specific instructions will
	be recognized.
	* sparcl-tdep.c (readchar): Print debugging information.
	(debug_serial_write): New function, a replacement for SERIAL_WRITE
	that prints debugging information.
	* config/sparc/tm-sparc.h (PUSH_ARGUMENTS): Define.
	(sparc_push_arguments): Declare.

Tue Apr 14 15:43:49 1998  John Metzler  <jmetzler@cygnus.com>

	* gdbcfgxref (xref_menu): Call new regex and wild card searches
	Now you can type in a specific triple like mips64-vr4300-elf or
	somthing like mips*.h
	(triple_search, wildcardsearch): The new functions

Mon Apr 13 16:28:07 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* utils.c (warning): added call to warning_hook

	* source.c (find_source_lines): modified to call warning in case
	of source vs. executable time stamp mismatch. Simplified object
	file check. Initialized mtime to 0.

	* defs.h: added warning_hook prototype

	* top.c: added warning_hook prototype.

Mon Apr 13 09:54:08 1998  Keith Seitz  <keiths@andros.cygnus.com>

	* config/sparc/tm-sun4os4.h (IS_STATIC_TRANSFORM_NAME): Add missing
	definition.

Fri Apr 10 22:36:28 1998  Peter Schauer (pes@regent.e-technik.tu-muenchen.de)

        Update support for x86 Solaris 2.
        * config/i386/tm-i386sol2.h, nm-i386sol2.h:  New configuration
        files for x86 Solaris 2.                                              
        * config/i386/i386sol2.mt, i386sol2.mh:  Use them.                    
        * config/sparc/tm-sun4sol2.h (PROCFS_GET_CARRY):  New macro, extract  
        carry flag from a given regset.                                     
        (IS_STATIC_TRANSFORM_NAME):  New macro, check if a symbol name      
        is a SunPro transformed name.                                 
        * i386-tdep.c (sunpro_static_transform_name):  New function to
        extract the source name from a SunPro transformed name.           
        * inferior.h (procfs_first_available, procfs_get_pid_fd):        
        Add prototypes.                                          
        * infrun.c (wait_for_inferior):  Handle breakpoint hit in
        signal handler without intervening stop in sigtramp.     
        * procfs.c (procfs_lwp_creation_handler):  Use PROCFS_GET_CARRY
        instead of direct access to the status register.               
        (procfs_get_pid_fd):  New function, returns procfs fd for a given pid.
        * sol-thread.c (ps_lgetLDT):  New function, returns LDT for a given   
        lwpid.                                                                
        (sol_find_new_threads):  Handle failed libthread_db initialization 
        gracefully.                                                       
        * stabsread.c (define_symbol):  Use IS_STATIC_TRANSFORM_NAME      
        to check for a SunPro transformed symbol name.              

Fri Apr 10 10:35:35 1998  John Metzler  <jmetzler@cygnus.com>

	* utils.c (fmthex): A formatting function for hexdumps

	* mips-tdep.c (unpack_mips16): Fixed instruction decoding, lots of
 	bit pattern interpretations. mips_fetch_instruction does not work
 	for 16 bit instructions. Some confusion remains about sign
 	extension in backward branches.
	(mips32_relative_offset): Sign extension
	(mips32_next_pc): Major debugging, bit pattern interpretation
	(print_unpack): debugging printf
	(fetch_mips_16): new funtion, key on PC low bit, not symbol table
	(mips16_next_16): Initial major debugging of this function. Lots
 	of bit pattern mistakes.
	(mips_next_pc): key on low bit of PC, not symbol table.
	* symfile.c (generic_load): Added a download verification which
 	reads back the loaded code. Download chunk size is now a defined
 	macro. Fixed a bug in which downloading slips into loading one
 	byte at a time. Lower level functions in monitor.c can load long
 	sequences of bytes and make use of these fixups.  Referencing
 	bfd-start_address directly was incorrectly getting zero for start.

Thu Apr  9 19:20:32 1998  Ian Lance Taylor  <ian@cygnus.com>

	* mips-tdep.c (do_fp_register_row): Use alloca rather than arrays
	with dynamic size.

Wed Apr  8 19:21:42 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* top.c (print_gdb_version): Print 1998 now.

Wed Apr  8 16:57:22 1998  Philippe De Muyter  <phdm@macqel.be>

	* source.c: Remove obsolete decl of strstr().

Wed Apr  8 16:47:33 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* solib.c (solib_create_inferior_hook): Remove Ulrich Drepper's
	patch of March 23 1998.
	* breakpoint.c (breakpoint_re_set_one): Remove Ulrich Drepper's
	patch of March 23 1998.

Sat Apr  4 10:05:00 1998  Dawn Perchik  <dawn@cygnus.com>

	* mdebugread.c (parse_partial_symbols): If this is an .mdebug 
	section in an ELF file, override a symbol's ECOFF section with its 
	ELF section.  Also, fix stabs continuation where a stabs string 
	continues for more than one continuation.

Mon Apr  6 09:17:48 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* mips-tdep.c (mips_push_arguments): Specify dimention of valbuf
 	using MAX_REGISTER_RAW_SIZE.

Sat Apr  4 10:05:00 1998  Dawn Perchik  <dawn@cygnus.com>

	* infrun.c: Fix prototype of signals_info to match static funtion.

Thu Apr  2 12:47:41 1998  Frank Ch. Eigler  <fche@cygnus.com>

	* sol-thread.c (sol_thread_store_registers): Save & restore new
 	value of single updated register to prevent accidental clobbering.

Wed Apr  1 22:01:09 1998  Mark Alexander  <marka@cygnus.com>

	* config/sparc/tm-sparclite.h (TARGET_BYTE_ORDER_SELECTABLE): Define.
	* config/sparc/sparclite.mt: Link in the erc32 simulator.

Wed Apr  1 16:30:49 1998  Ian Dall  <Ian.Dall@dsto.defence.gov.au>

        * ns32k-tdep.c (flip_bytes, ns32k_localcount,
        ns32k_get_enter_addr, sign_extend): Restore functions mysteriously
        deleted.

        * ns32knbsd-nat.c: New (?) file to support fetching and storing
        registers on NetBSD hosts.

        * nbsd.mh (NATDEPFILES): put ns32knbsd-nat.o instead of
        ns32k-nat.o

        * ns32km3-nat.c (reg_offset): Get order of floating point
        registers correct. Add extra 32382 register offsets.
        (REG_ADDRESS): define to point at correct part of thread
        state. Use calls to "warning" instead of "message".

        * tm-nbsd.h, tm-ns32km3.h (REGISTER_NAMES, NUM_REGS,
        REGISTER_BYTES, REGISTER_BYTE): redefine allowing for 32382
        fpu registers.

Wed Apr  1 13:43:07 1998  Philippe De Muyter  <phdm@macqel.be>

        * NEWS: m68k-motorola-sysv host support added.
        * coffread.c (coff_start_symtab): Accept the filename as an argument,
        set it here.  Callers updated.

Wed Apr  1 23:13:23 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/mips/tm-mips.h (REGISTER_VIRTUAL_TYPE): Handle 32 bit SR,
 	FSR and FIR registers.
	(REGISTER_VIRTUAL_SIZE): Compute using REGISTER_VIRTUAL_TYPE.
	(REGISTER_RAW_SIZE): Define using REGISTER_VIRTUAL_SIZE.

	* config/mips/tm-mips64.h: Ditto.

Tue Mar 31 21:30:39 1998  Nick Clifton  <nickc@cygnus.com>

	* arm-tdep.c (gdb_print_insn_arm): Attach a fake Thumb symbol
	vector to the info structure when disassembling thumb
	instructions. 

	* coffread.c (coff_symtab_read, read_one_sym,
	process_coff_symbol):  Support Thumb symbol types. 

	* dbxread.c (process_one_symbol): Call SMASH_TEXT_ADDRESS (if it
	is defined) for function symbols.  

Tue Mar 31 16:39:28 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c (get_tracepoint_by_number): change warning to note.
	(delete_trace_command): suppress y/n query if no tracepoints, or
	if not from_tty.  (trace_pass_command): reject junk at end of args.
	(read_actions): an action list consisting only of "end" is discarded.
	(validate_actionline (for collect command)): an argument beginning
	with a dollar_sign but not recognized as a special argument is
	parsed like any other expression -- if it isn't a register name,
	it's rejected.  Also reject an empty argument to while-stepping.
	(trace_find_command): reject a negative frame number argument.
	(_initialize_tracepoint): set $traceframe initially to -1.

Mon Mar 30 16:42:12 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* rdi-share/Makefile.am, rdi-share/aclocal.m4,
	rdi-share/configure: New files.
	* rdi-share/configure.in:  Rewritten to be an autoconf input file.
	* rdi-share/Makefile.in, rdi-share/configure: Generated by 
	automake/autoconf.
	* rdi-share/dbg_hif.h, etherdrv.c, hostchan.c: Use autoconf tests
	to check environment.

Sun Mar 29 15:17:16 1998  Keith Seitz  <keiths@onions.cygnus.com>

	* tracepoint.c (trace_start_command): Set trace_running_p.
	(trace_stop_command): Clear trace_running_p.

Sat Mar 28 15:19:48 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Update for 4.17 release.

Fri Mar 27 10:15:50 1998  David Taylor  <taylor@tito.cygnus.com>

	* tracepoint.c (parse_and_eval_memrange): Fix memory leaks.
	(encode_actions): Use the new gen_trace_for_expr function
	instead of expr_to_address_and_size; collect registers when
	using expressions.  (clear_collection_list): Fix memory leak.

1998-03-26  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.h (gen_trace_for_expr): Add prototype.

Thu Mar 26 17:24:23 1998  David Taylor  <taylor@texas.cygnus.com>

	* tracepoint.c (validate_actionline): Fix memory leak.
	(encode_actions): Fix memory leak.

Thu Mar 26 16:16:55 1998  David Taylor  <taylor@tito.cygnus.com>

	* tracepoint.c (trace_mention): New function.
	(trace_command): Call it.

1998-03-26  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-general.c (ax_reqs): New function.
	* ax.h (enum agent_flaws, struct agent_reqs): New types.
	(agent_reqs): New extern prototype.  Well, actually, this was
	there before, due to a premature checkin.
 	(struct aop_map): Add new `data_size' member.
	* ax-general.c (aop_map): Supply its value.
	* ax-gdb.c (agent_command): Call ax_reqs, for testing.

	* ax-general.c (ax_print): If we encounter an invalid or
	incomplete opcode, don't abort; just print an error message.

	* ax-gdb.c: Generate trace bytecodes, as appropriate.
	(trace_kludge): New variable.
	(gen_fetch, gen_bitfield_ref): Emit trace bytecodes, if asked
 	nicely.
	(expr_to_agent): Ask for no trace bytecodes.
	(gen_trace_for_expr): New function.
	(agent_command): Call it, and display the result appropriately ---
	no struct axs_value, so no type or kind information.

	* ax-gdb.c: Use TARGET_CHAR_BIT throughout, not HOST_CHAR_BIT.

Thu Mar 26 22:29:28 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

        * tracepoint.c (trace_status_command): Recognize a boolean return
        value from the stub to indicate whether trace experiment is
        running.  Export this value as a global state variable.
        (trace_running_p) for use by the GUI. (from Michael Snyder)
        (trace_pass_command) added call to modify_tracepoint_hook.

        * tracepoint.h export trace_running_p.

Thu Mar 26 13:08:01 1998  David Taylor  <taylor@texas.cygnus.com>

	* tracepoint.c (validate_actionline): do not error out if
	exp->elts[0].opcode is not on short line -- let
	expr_to_address_and_size handle it.

1998-03-26  Jim Blandy  <jimb@zwingli.cygnus.com>

	* tracepoint.c: Include "ax.h", not "agentexpr.h".

	* tracepoint.c (encode_actions): Call expr_to_address_and_size,
	not simply expr_to_agent.

	* ax-general.c: Comment out code in progress, so everyone else can
	at least compile.

	* gdbtypes.c: Doc fix.

	* ax.h, ax-gdb.h, ax-general.c, ax-gdb.c: New files.
	* Makefile.in (REMOTE_OBJS): Add ax-general.o and ax-gdb.o.
	(SFILES): Add ax-general.c, ax-gdb.c.
	(ax_h): New variable.
	(ax-general.o, ax-gdb.o): New rules.


Tue Mar 24 16:22:40 1998  Stu Grossman  <grossman@bhuna.cygnus.co.uk>

	* Makefile.in:  Derive SHELL from configure.
	* config/d10v/d10v.mt config/m32r/m32r.mt
	config/mn10200/mn10200.mt config/mn10300/mn10300.mt
	config/d30v/d30v.mt:  Remove -lm from SIM.  This prevents
	dependency checking of -lm (under NT native builds).  (It is
	automatically added by configure if it exists.)
	* doc/configure mswin/configure nlm/configure
	testsuite/gdb.base/configure testsuite/gdb.c++/configure
	testsuite/gdb.chill/configure testsuite/gdb.disasm/configure
	testsuite/gdb.stabs/configure testsuite/gdb.threads/configure:
	Regenerate with autoconf 2.12.1 to fix shell issues for NT native
	builds.

Mon Mar 23 18:10:57 1998  Ulrich Drepper  (drepper@cygnus.com)

	* solib.c (solib_create_inferior_hook):  Rewrite previous
	change to check the type of file via BFD.

Mon Mar 23 13:52:28 1998  Ulrich Drepper  (drepper@cygnus.com) 
 
	* breakpoint.c (breakpoint_re_set_one): Treat bp_shlib_events
	like bp_breakpoints.
	* solib.c (solib_create_inferior_hook): Relocate section addresses
	if the alleged start address doesn't agree with the PC.

Sat Mar 21 19:34:49 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	merged changes from Foundry (list follows by file/author):

        - Tom Tromey  <tromey@cygnus.com>
        * Makefile.in (gdbres.o): New target.
        (WINDRES): New define.
        * configure: Rebuilt.
        * configure.in (WINDRES): Define.
        (CONFIG_OBS): Include gdbres.o on Windows.
        * gdbtool.ico: New file.
        * gdb.rc: New file.

        * ser-unix.c
        - Keith Seitz  <keiths@onions.cygnus.com>
        (wait_for): Don't reset the timeout_remaining for CYGWIN32,
        since we now effectively poll the serial port.
        Don't reset the current_timeout, either, since this member is used
        by hardwire_readchar to track the timeout and call the ui_loop_hook.
	(hardwire_readchar): Poll the serial port for Cygwin32. We timeout
 	every second, update the UI, and loop around doing this until we
 	have hit the real timeout or we get data or an error. This will
 	allow the UI to stay active while gdb is "blocked" talking to the
 	target.
       	- Martin M. Hunt  <hunt@cygnus.com>
	(wait_for): Do reset current_timeout because it is only used to
 	keep track of what the current timeout for the scb is.

        * top.c
        - Martin M. Hunt  <hunt@cygnus.com>
        (quit_confirm): Change exit message again
        for GUI.
        (pc_changed_hook): Add prototype.
        - Tom Tromey  <tromey@cygnus.com>
        (quit_confirm): Added missing `else'.
        (quit_confirm): Special-case message if init_ui_hook is
        set.

        * symtab.c
        - Martin M. Hunt  <hunt@cygnus.com>
        (find_pc_sect_line): If no symbol information
        is found, return correct pc anyway.
        (find_methods): Comment out an apparently
        bogus error message because it messes up Foundry.

        * serial.c
        - Martin M. Hunt  <hunt@cygnus.com>
        (_initialize_serial): Add a description of
        "set remotelogbase".

        * findvar.c
        - Martin M. Hunt  <hunt@cygnus.com>
        (write_register_gen): Add call to
        pc_changed_hook if the PC is being changed.

        * defs.h
        - Martin M. Hunt  <hunt@cygnus.com>
        (pc_changed_hook): Define.

        * command.c
        -  Martin M. Hunt  <hunt@cygnus.com>
        (do_setshow_command): If no arguments are supplied,
        don't dump core, instead print out an error message.

        * breakpoint.c
        - Martin M. Hunt  <hunt@cygnus.com>
        Make set_raw_breakpoint, set_breakpoint_count,
        and breakpoint_count non-static so they are accessible from
        elsewhere.
        (enable_breakpoint): Enable breakpoint
        with same disposition instead of changing all breakpoints
        to donttouch.

        * annotate.h
	- Keith Seitz  <keiths@onions.cygnus.com>
        Add declarations for annotation hooks.
 
        * annotate.c
	- Keith Seitz  <keiths@onions.cygnus.com>
        Add hooks: annotate_starting_hook, annotate_stopped_hook,
        annotate_signalled_hook, annotate_exited_hook.
        (annotate_starting): If hook exists, call it instead.
        (annotate_stopped): If hook exists, call it instead.
        (annotate_exited): If hook exists, call it instead.
        (annotate_signalled): If hook exists, call it instead.

Fri Mar 20 14:45:36 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* gdbserver/Makefile.in: add dependency on XM_CLIBS.
	* gdbserver/low-sim.c (registers) force into alignment.
	(create_inferior): Fix typo on new_argv; add abfd arg to 
	sim_open, sim_create_inferior.  Add reg_size arg to 
	sim_fetch_register, sim_store_register.  Make simulator
	take a single-step to get into a known running state.
	* gdbserver/gdbreplay.c: include fcntl.h for def'n of F_SETFL.
	* gdbserver/server.c: Add remote_debug variable to control 
	debug output.
	* gdbserver/server.h: Add prototypes for enable/disable_async_io.
	* gdbserver/remote-utils.c: add verbose debugging output controlled 
	by "remote_debug" variable.  Add call to "disable_async_io()"
	to avoid being killed by async SIGIO signals.
	* config/m32r/m32r.mt: define GDBSERVER_(LIBS and DEPFILES),
	so that gdbserver can be built with the m32r simulator.

Fri Mar 20 09:04:06 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbtypes.h (builtin_type_{,u}int{8,16,32,64}): New gdb builtin
 	types.

	* gdbtypes.c (_initialize_gdbtypes): Initialize new types.

	* mips-tdep.c (do_gp_register_row): Pad register value when GP
 	register is smaller than MIPS_REGSIZE.

	* findvar.c (value_of_register): When raw and virtual register
 	values identical, check that sizes are consistent.

Thu Mar 19 11:32:15 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)

	* minsyms.c (compare_minimal_symbols): If addresses are identical,
	then compare on names.  Sorted list should have symbols with 
	identical addresses AND names adjacent, so dups can be discarded.

Wed Mar 18 12:50:17 1998  Jeff Law  (law@cygnus.com)

	* stabsread.c (define_symbol): Don't look for ',' as a LRS
	indicator.

Wed Mar 18 10:34:51 1998  Nick Clifton  <nickc@cygnus.com>

	* rdi-share/etherdrv.c: Set sys_errlist[] as char * not const char *.

Fri Mar 13 15:43:53 1998  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

        * config/mips/xm-mips.h (CC_HAS_LONG_LONG):  Undefine for Ultrix
        when compiling with native cc, the compiler has broken long long
        support.

Fri Mar 13 15:37:02 1998  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

        * config/m68k/xm-sun3os4.h:  Remove malloc declarations, they
        are handled via autoconf now.
        * remote.c (remote_ops, extended_remote_ops):  Replace static
        forward declaration by moving the static definition to the top of
        the file, for old K&R compilers.
        * tracepoint.c (collect_symbol, trace_start_command):
        Replace ANSI string concatenation with K&R compatible simple string.

1998-03-11  Fred Fish  <fnf@ninemoons.com>

	* source.c (select_source_symtab): Don't reach error if we have
	a current_source_symtab from reading in partial symbol table.

Fri Mar  6 13:10:27 1998  Fred Fish  <fnf@cygnus.com>

	* utils.c (quit): Call SERIAL_DRAIN_OUTPUT rather than
 	SERIAL_FLUSH_OUTPUT.
	* serial.h (struct serial_ops): Add drain_output, pointer to
 	function that waits for output to drain.
	(SERIAL_DRAIN_OUTPUT): Macro to wait for output to drain.
	* ser-unix.c (hardwire_drain_output): New function and prototype.

	* ser-unix.c (hardwire_ops): Add entry for drain_output function.
	* ser-tcp.c (tcp_ops): Ditto.
	* ser-ocd.c (ocd_ops): Ditto.
	* ser-mac.c (mac_ops): Ditto.
	* ser-go32.c (dos_ops): Ditto.
	* ser-e7kpc.c (e7000pc_ops): Ditto.

Thu Mar  5 16:07:41 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)

	* sparcl-tdep.c: fix #endif comments

Thu Mar  5 15:10:35 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* Makefile.in (BISON): Configure substitutes in @YACC@, not @BISON@.

Thu Mar  5 14:42:41 1998  Keith Seitz  <keiths@onions.cygnus.com>

	* ocd.c (ocd_open): If we fail ocd_start_remote, make sure we
	error () so that we abort out of bdm_ppc_open.

Wed Mar  4 16:53:52 1998  Martin M. Hunt  <hunt@cygnus.com>

	* serial.c (_initialize_serial): Add a description of 
	"set remotelogbase".

	* command.c (do_setshow_command): If no arguments are supplied,
	don't dump core, instead print out an error message.

Wed Mar  4 01:39:08 1998  Ron Unrau  <runrau@cygnus.com>

	* elfread.c (elf_symtab_read): merge SYMBOL_IS_SPECIAL into
	MAKE_MSYMBOL_SPECIAL
	* config/mips/tm-mips.h: ditto

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.

Tue Mar  3 14:37:02 1998  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

        * alpha-nat.c (fetch_osf_core_registers):  Renamed from
        fetch_aout_core_registers.
        (alpha_osf_core_fns):  Renamed from alpha_aout_core_fns, change
        flavour to bfd_target_unknown_flavour for OSF core files.

Mon Mar  2 17:44:13 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)

	* breakpoint.c (_initialize_breakpoint): Make "en" an alias
	for "enable" (so that it doesn't conflict with "end").

Mon Mar  2 17:04:25 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* Makefile (VERSION): Bump to 4.17.1.

Mon Mar  2 16:59:15 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* rdi-share/etherdrv.c (sys_errlist): Add correct decl for Linux.

Mon Mar  2 16:51:44 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* Makefile.in (YYFILES): Remove in maintainer-clean, not distclean.

Mon Mar  2 16:47:11 1998  Philippe De Muyter  <phdm@macqel.be>

        * Makefile.in (distclean): Add `rm $(YYFILES)'.

Mon Mar  2 16:45:48 1998  Philippe De Muyter  <phdm@macqel.be>

	* coffread.c (coff_read_enum_type): Set TYPE_FLAG_UNSIGNED if enum
	is unsigned.

Sun Mar  2 15:16:13 1998 Richard Henderson  <rth@cygnus.com>         

        * configure.host, configure.tgt: Add sparc-linux.               
        * sparc-nat.c: Include <asm/reg.h> not <machine/reg.h> for Linux.
        * config/sparc/*linux*: New files.                         

Mon Mar  2 12:12:41 1998  Anthony Thompson   (athompso@cambridge.arm.com)

	* arm-tdep.c (gdb_print_insn_arm): Call print_insn_big_arm
	if we're big endian; else call print_insn_little_arm.

Mon Feb 24 11:24:57 1998  Richard Henderson  <rth@cygnus.com>

        * Makefile.in (BISON): Don't even pretend to use yacc.
        (c-exp.tab.o): Use bison -o to use a unique intermediate file.
        (f-exp.tab.o, m2-exp.tab.o): Likewise.
        (jv-exp.tab.o): Likewise.

Tue Feb 24 03:32:59 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-sim.c (gdbsim_fetch_register): Don't abort when the
 	register size is wrong.

Thu Feb 19 16:49:48 1998 John Metzler  <jmetzler@cygnus.com>

	* target.c (debug_to_fetch_registers,debug_to_store_registers,
	debug-to_insert_breakpoint,debug_to_remove_breakpoint): tracing
	64 bit targets crashed long long printfs.

Tue Feb 17 16:36:22 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)

	* symfile.c (read_target_int_array): rename read_target_long_array
        and force the sizeof an ovly_table element to sizeof(long),
        instead of sizeof(int).

Tue Feb 17 18:05:05 1998  Frank Ch. Eigler  <fche@cygnus.com>

	* remote-mips.c (mips_request): Use unsigned long during parsing
 	returned value from monitor, to prevent accidental sign extension.

Tue Feb 17 14:28:33 1998  Peter Schauer <pes@regent.e-technik.tu-muenchen.de>

        * acconfig.h: FORCE_MMCHECK changed to MMCHECK_FORCE.
        * configure.in: Ditto.
        * configure: Regenerated.

Tue Feb 17 14:07:34 1998  Peter Schauer <pes@regent.e-technik.tu-muenchen.de>

        * gdbtypes.c (check_typedef): Do not try to resolve the length of      
        a type which has TYPE_FLAG_TARGET_STUB set, if the target type has
        set TYPE_FLAG_TARGET_STUB as well.

Tue Feb 17 14:32:18 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-sim.c (gdbsim_fetch_register, gdbsim_store_register):
 	Pass register size to sim_{fetch,store}_register.  Check nr of
 	register bytes transfered is correct.

Mon Feb 16 14:05:54 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-d10v.c (remote_d10v_open): Call push_remote_target
 	instead of open_remote_target.

	* remote.c (remote_xfer_memory): Use REMOTE_TRANSLATE_XFER_ADDRESS
 	to translate addr/size when defined.
	(open_remote_target): Delete.

	* target.h (open_remote_target): Delete.

	* config/d10v/tm-d10v.h (REMOTE_TRANSLATE_XFER_ADDRESS): Define.

Mon Feb 16 14:05:54 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_extract_return_value): Wierd.  GCC wants to
 	return odd sized register quantities with only half of the first
 	register used!

	* config/d10v/tm-d10v.h (USE_STRUCT_CONVENTION): Use stack when
 	size > 8.

Mon Feb 16 14:05:54 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d10v/tm-d10v.h (USE_STRUCT_CONVENTION): Define. True when
 	sizeof type > 1.

Sun Feb 15 16:10:50 1998  Ron Unrau   <runrau@cygnus.com>

	* parse.c (write_dollar_variable): call new function 
	  target_map_name_to_register to allow targets to define their own 
	  register name aliases.
	* infcmd.c (registers_info): use target_map_name_to_register so that
	  "print $reg" and "info reg $reg" use the same register name aliases.

Fri Feb 13 16:40:30 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* config/i386/i386mk.mt (OBJFORMATS): Delete, no longer used.
	* config/i386/xm-i386mk.h: Fix an include.
	* config/pyr/tm-pyr.h (PC_INNER_THAN): Remove, never used.

Thu Feb 12 16:12:07 1998  Frank Ch. Eigler  <fche@cygnus.com>

	* remote-mips.c (mips_enter_debug): Sleep before sending CR to
 	monitor.
	(mips_exit_debug): Accept any whitespace / verbiage before monitor
 	prompt reappears.

Thu Feb 12 18:25:42 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (show_regs): Avoid use of %llx when printing 8 byte
 	accumulators.

Thu Feb 12 17:10:22 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* valops.c (value_at): For d10v, make read pointers with
 	read_target_unsigned_integer, keep addresses unsigned.
	(value_fetch_lazy): Ditto.

Thu Feb 12 12:14:02 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-d10v.c: New file.  Layer the d10v GDB->remote memory map
 	on top of the remote serial memory transfer functions.

	* config/d10v/d10v.mt (TDEPFILES): Add remote-d10v.o

	* Makefile.in (remote-d10v.o): Add dependencies.

	* remote.c (remote_open_1): Add arg extended_p, engage extended
 	protocol when extended_p.
	(remote_open, extended_remote_open): Pass !extended_p /
 	extended_p to remote_open_1.

	* remote.c (open_remote_target), target.h: New function.

Wed Feb 11 08:41:15 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/i386/fbsd.mh (XDEPFILES): Add ser-tcp.o.

Tue Feb 10 17:50:37 1998  Keith Seitz  <keiths@onions.cygnus.com>

	* tracepoint.c (tracepoint_operation): Call the modify_tracepoint_hook
	if it exists.
	Remove static declaration of free_actions.

	* tracepoint.h: Add declaration of free_actions.
		
Tue Feb 10 12:17:13 1998  Fred Fish  <fnf@cygnus.com>

	* symtab.c (decode_line_1): Revert change that mistakenly
	removed assignment of sals[0].pc field.

Mon Feb 10 12:37:47 1998  Philippe De Muyter  <phdm@macqel.be>

        * m68k/tm-delta68.h (EXTRACT_RETURN_VALUE): Type argument for
        `REGISTER_CONVERT_TO_VIRTUAL is `TYPE', not
        `REGISTER_VIRTUAL_TYPE (FP0_REGNUM)';
        (STORE_RETURN_VALUE): Ditto, and offset for `write_register_bytes'
        is `REGISTER_BYTE (FP0_REGNUM)', not `FP0_REGNUM'.
        (FRAME_NUM_ARGS): New macro.
        * m68k/tm-news.h (EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE): Ditto.
        * delta68-nat.c (clear_insn_cache): New function, forgotten in previous
        patch.

Mon Feb  9 11:10:06 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c: Replace references to IMEM_ADDR and DMEM_ADDR with
 	D10V_MAKE_[DI]ADDR and D10V_CONVERT_[ID]ADDR_TO_RAW macros.

	* config/d10v/tm-d10v.h (IMEM_START): Move to 0x01......
	(DMEM_START): Move to 0x00......
	(STACK_START): Move to 0x00..7ffe.
	(D10V_MAKE_IADDR, D10V_MAKE_DADDR): Translate unconditionally.

	* d10v-tdep.c (d10v_xlate_addr): Delete function.

Mon Feb  9 15:10:21 1998  Fred Fish  <fnf@cygnus.com>

	* symtab.c (fixup_psymbol_section): Move forward declaration to
	top of file with other such decls.  Make it a static function.
	* symtab.h: Minor formatting tweaks.

Mon Feb  9 13:14:12 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* config/a29k-udi.mt, config/i960/vxworks960.mt (REMOTE_OBS):
 	Remove redefinition.
	* config/i960/tm-i960.h (BREAKPOINT): Define.

Mon Feb  9 15:35:38 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (init.c): Ignore errors when making init.c.  Seems
	necessary to work around bug in Solaris make.

Sun Feb  6 02:44:28 1998  Philippe De Muyter  <phdm@macqel.be>

        * m68k/tm-delta68.h (CPLUS_MARKER): Macro deleted.
        (EXTRACT_STRUCT_VALUE_ADDRESS): Macro defined.
        (EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE): Macros modified
        because floating-point values return via %fp0.
        (CLEAR_INSN_CACHE): New macro.
        * m68k/tm-m68k.h (REGISTER_CONVERT_TO_VIRTUAL): Macro fixed
        to use DOUBLEST.
        (REGISTER_CONVERT_TO_RAW): Ditto.
        * infptrace.c (child_xfer_memory): If CLEAR_INSN_CACHE is defined,
        call it after having written in child process's memory.
        * inflow.c (PROCESS_GROUP_TYPE): Macro defined if HAVE_TERMIO.
        (gdb_has_a_terminal, terminal_ours_1): Functions fixed for HAVE_TERMIO.

Fri Feb  6 16:17:30 1998  Jeffrey A Law  (law@cygnus.com)

        * config/mips/tm-mips64.h (TARGET_LONG_BIT): Allow final target to
        override.
        (TARGET_LONG_LONG_BIT): Likewise.
        (TARGET_PTR_BIT): Likewise.

Fri Feb  6 17:42:22 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d10v/tm-d10v.h (D10V_CONVERT_IADDR_TO_RAW,
 	D10V_CONVERT_DADDR_TO_RAW): Define.

	* d10v-tdep.c (d10v_push_arguments): Re-write.  Pass arguments in
 	registers, regardless of their size, when they fit.

Thu Feb  5 13:16:36 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_extract_return_value): For function pointers
	translate address to IMAP area.

	* config/d10v/tm-d10v.h (EXTRA_FRAME_INFO): Delete dummy from
 	struct.
	(POP_FRAME): Point at generic_pop_current_frame.

	* d10v-tdep.c (d10v_pop_frame): Delete code handling dummy frames,
 	handled earlier.
	(d10v_push_return_address): New function.
	(d10v_pop_dummy_frame): Delete.
	(d10v_fix_call_dummy): Delete.
	(d10v_call_dummy_address): Delete.

	* d10v-tdep.c (d10v_init_extra_frame_info): Clear dummy and
 	frameless.

	* d10v-tdep.c (d10v_push_arguments): Keep stack word aligned.

	* config/d10v/tm-d10v.h (EXTRACT_STRUCT_VALUE_ADDRESS): Extract
 	address of structure from first ARG1_REGNUM.

	* d10v-tdep.c (d10v_push_arguments): Force 4 byte args into
 	even-odd register pair.  Store 1 and 2 byte args in registers.

	* valops.c (value_fetch_lazy): Ensure that a D10V function pointer
 	is fetched in the correct byte order.
	(value_at): Ditto. Also ensure data pointers are mapped to data
 	segment.

	* config/d10v/tm-d10v.h (D10V_DADDR_P, D10V_IADDR_P): 

	* d10v-tdep.c: Replace 2 with REGISTER_RAW_SIZE.
	(d10v_pop_frame): Replace R13 with LR_REGNUM.
	(d10v_push_arguments): Replace R2 with ARG1_REGNUM.
	(d10v_push_arguments): Replace 6 with ARGN_REGNUM.
	(d10v_extract_return_value): Access return value with RET1_REGNUM.

	* config/d10v/tm-d10v.h (ARG1_REGNUM, ARGN_REGNUM, RET1_REGNUM):
 	Define.
	(STORE_RETURN_VALUE): Specify return register using RET1_REGNUM.
	(STORE_STRUCT_RETURN): Specify ARG1_REGNUM as the struct ptr
 	location.

Thu Feb  5 13:16:36 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (generic_pop_dummy_frame): Flush the frame, no
 	longer valid.

	* blockframe.c (generic_pop_current_frame), frames.h: New
 	function.

Thu Feb  5 17:18:16 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-sim.c (gdbsim_create_inferior): clear_proceed_status
 	before /re/starting the simulator.

Thu Feb  5 15:55:31 1998  C. M. Heard (heard@vvnet.com)

        * top.c (do_nothing): Remove signal handler after signal is caught.

Thu Feb  5 11:57:06 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)

	* tracepoint.c (tracepoint_operation): call free_actions instead
	of free.  (free_actions): eliminate some memory leaks for actions.
	(validate_actionline): pass string arg by reference, so we can 
	change the pointer.  Change all memrange collection arguments to
	canonical form (literal address and size), to enforce early
	evaluation.  Accept UNOP_MEMVAL (assembly variables) for 
	trace collection.  (parse_and_eval_memrange): accept expressions
	for the address and size fields of a memrange (and evaluate
	them immediately).  (several places): use -1 instead of zero
	to distinguish an absolute memrange from a register-relative one.
	(encode_actions): add handling for UNOP_MEMVAL (assembly variable).

Wed Feb  4 17:40:21 1998  Jason Molenda  (crash@bugshack.cygnus.com)

        * Makefile.in (SFILES): add tracepoint.c.
        (LINTFILES): add @CONFIG_SRCS@.
        (SOURCES): Ditto.
        * configure.in (CONFIG_SRCS): Mirror use of CONFIG_OBS.
        * configure: Regenerated.

Tue Feb  3 16:12:32 1998  Gordon W. Ross (gwr@mc.com)

	* infptrace.c (child_resume): Don't try to step if 
	NO_SINGLE_STEP is defined.

Mon Feb  2 19:06:13 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* Makefile.in (VERSION): Bump to 4.16.2.

Mon Feb  2 17:18:25 1998  Richard Henderson  <rth@cygnus.com>

        * alpha-nat.c (fetch_aout_core_registers): Rename from
        fetch_core_registers.
        (fetch_elf_core_registers): New function.
        (supply_gregset): Use ALPHA_REGSET_BASE.
        (supply_fpregset): Likewise.
        (fill_fpregset): Likewise.
        (alpha_aout_core_fns): Rename from alpha_core_fns.
        (alpha_elf_core_fns): New.
        * config/alpha/alpha-linux.mh (NATDEPFILES): solib.o not osfsolib.o.
        Disable MMALLOC.
        * config/alpha/nm-linux.h (SVR4_SHARED_LIBS): Define if ELF.
	(TARGET_ELF64): Likewise.
        (ALPHA_REGSET_BASE): New.
        * config/alpha/nm-osf.h (ALPHA_REGSET_BASE): New.
        * config/alpha/tm-alphalinux.h: Include tm-sysv4.h.

        * solib.c (elf_locate_base): Add TARGET_ELF64 support.
        (info_sharedlibary_command): Likewise.

        * configure.host: Match alpha*.
        * configure.tgt: Likewise.

Fri Jan 30 15:11:38 1998  David Taylor  <taylor@texas.cygnus.com>

	Changes by <Peter.Schauer@Regent.E-Technik.TU-Muenchen.DE>
	* infrun.c (IN_SOLIB_DYNSYM_RESOLVE_CODE): new macro for detecting
 	whether we are in the dynamic symbol resolution code 
	(wait_for_inferior): invoke it.
	* solib.c (in_svr4_dynsym_resolve_code): new function
	(enable_break): record start and end of the dynamic linker
	text and plt sections for use in in_svr4_dynsym_resolve_code.
	* solib.h (IN_SOLIB_DYNSYM_RESOLVE_CODE): add svr4 definition;
	(in_svr4_dynsym_resolve_code): declare it.
	* config/nm-gnu.h (solib.h): move inclusion to after definition
	of SVR4_SHARED_LIBS.
	* config/nm-sysv4.h (solib.h): ditto.
	* config/i386/nm-i386sco5.h (solib.h): ditto.
	* config/i386/nm-linux.h (solib.h): ditto.
	* config/mips/nm-irix5.h (IN_SOLIB_DYNSYM_RESOLVE_CODE): undefine.

Thu Jan 29 19:39:31 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* coffread.c (coff_symtab_read) [SEM]: Remove code, macro can
	never be defined.
	* dbxread.c (process_one_symbol) [BLOCK_ADDRESS_ABSOLUTE]:
	Remove, no longer needed.
	* hppa-tdep.c (N_SET_MAGIC): Remove, no longer used.
	* config/pa/xm-hppab.h (SEEK_SET, SEEK_CUR, SEEK_END): Ditto.
	* config/mips/tm-mipsm3.h (NUMERIC_REG_NAMES): Ditto.
	* config/mips/mipsm3.mt (TDEPFILES): Remove mipsread.o.

Wed Jan 28 14:46:52 1998  Stan Shebs  <shebs@andros.cygnus.com>

	Suggested by Chris Walter <walter@budoe.bu.edu>:
	* dwarfread.c (set_cu_language): Recognize Fortran.
	* dwarf2read.c (set_cu_language): Ditto.
	(read_array_type): Fix language test.

Wed Jan 28 12:51:08 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)
 
        * blockframe.c (generic_frame_chain_valid): A frame pointer may
        be valid if it is equal to the frame pointer of its caller (ie.
        not necessarily strictly INNER_THAN).  Allows frameless functions.
 
Wed Jan 28 11:23:25 1998  Mark Alexander  <marka@cygnus.com>

	* monitor.c (monitor_vsprintf): New function to handle
	printing of large addresses using %A format specifier.
	(monitor_printf_noecho, monitor_printf): Use monitor_vsprintf
	instead of vsprintf.
	* dve3900-rom.c (_initialize_r3900_rom): Use %A instead of %Lx
	to print addresses.

Tue Jan 27 16:14:23 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* configure.in (CONFIG_LDFLAGS): Only add -export-dynamic
	when using GNU ld.

Mon Jan 26 19:07:46 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* config/alpha/tm-alphalinux.h (alpha_linux_sigtramp_offset):
	Add closing parenthesis.  From HJ Lu.

Mon Jan 26 17:54:45 1998  Mark Alexander  <marka@cygnus.com>

	* dve3900-rom.c: Improve performance by using memory commands
	that print less fluff.  Minor cosmetic changes.
	Eliminate compiler warnings.

Sat Jan 24 23:44:43 1998  Martin M. Hunt  <hunt@cygnus.com>

	* breakpoint.c (enable_breakpoint): Preserve breakpoint
	disposition when enabling a breakpoint.

	* symtab.c (find_pc_sect_line): If no symbol information
	is found, return correct pc anyway.

Fri Jan 23 17:26:22 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.host (i[3456]86-*-osf1mk*, mips-*-mach3*,
	ns32k-*-mach3*): Fix file names.
	(i[3456]86-*-os9k, m88*-*-mach3*, w65-*-*): Remove config
	recognition, no source files for these.
	* configure.tgt (powerpc-*-aix4*): Remove config, now identical
	to powerpc-*-aix*.
	* config/powerpc/{aix4.mh,aix4.mt,tm-ppc-aix4.h}: Remove files,
	no longer needed.

Fri Jan 23 16:49:41 1998  Mark Alexander  <marka@cygnus.com>

	* monitor.c (monitor_write, monitor_readchar): New functions.
	* monitor.h (monitor_write, monitor_readchar): Declare.
	* dve3900-rom.c: Add support for fast loading on ethernet connections.

Fri Jan 23 07:47:06 1998  Fred Fish  <fnf@cygnus.com>

	* config/d10v/tm-d10v.h (CALL_DUMMY): Define as "{ 0 }".
	(TARGET_READ_FP): Define to d10v_read_fp rather than d10v_read_sp.
	(TARGET_WRITE_FP): Define to d10v_write_fp rather than d10v_write_sp.
	(d10v_write_fp, d10v_read_fp): Add prototypes.
	* symtab.c (decode_line_1): Remove assignment of sals[0].pc field.
	* symfile.c (simple_overlay_update, simple_overlay_update_1):
	Ignore the size of overlay sections.  This check is redundant anyway.
	* printcmd.c (print_frame_args): Ditto.
	* valops.c (value_fetch_lazy): Ditto.
	* values.c (unpack_long): Ditto.
	* d10v-tdep.c (d10v_frame_chain, d10v_frame_find_saved_regs,
	d10v_init_extra_frame_info): Fix some minor bugs so the finish command
 	works properly.
	(show_regs): Change num1 and num2 types from "long long" to "LONGEST".
	(d10v_read_fp, d10v_write_fp): New functions.
	(d10v_push_arguments): Remove unneeded assigns to "val" and "contents".
	(d10v_push_arguments): Fix for pointers and structs.
	(d10v_extract_return_value): Fix for pointers and chars.

Tue Jan 20 18:53:18 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.tgt (i386-*-mach*, m88*-*-mach3*): Remove config
	recognition, no source files for these (note that the i386 Mach
	config is for pre-Mach 3).
	(mips*-*-mach3*, ns32k-*-mach3*): Fix file names.
	* config/mips/mipsel64.mt: Remove, never referenced.

Mon Jan 19 14:01:28 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* top.c (print_gdb_version): Restore to original message.

Mon Jan 19 13:34:40 1998  Ian Lance Taylor  <ian@cygnus.com>

	From cgf@bbc.com (Chris Faylor):
	* win32-nat.c (child_mourn_inferior): Call ContinueDebugEvent to
	let the child exit.
	(child_kill_inferior): Respond to all debug events as the child is
	terminating.

	* Makefile.in (all): Change gdb dependency to gdb$(EXEEXT).
	(uninstall): Add $(EXEEXT) to file name to remove.
	(gdb$(EXEEXT)): Rename target from plain gdb.
	(gdb1$(EXEEXT)): Rename target from plain gdb1.
	(clean, mostlyclean): Add $(EXEEXT) to binary names to remove.

1998-01-16  Felix Lee  <flee@cygnus.com>

	* top.c (print_gdb_version): delete stutter.

Thu Jan 15 12:29:13 1998  Nick Clifton  <nickc@cygnus.com>

	* remote-rdi.c (arm_rdi_open): Patch from Tony.Thompson@arm.com
	to prevent spurous error messages on non-ICE targets.

Wed Jan 14 19:27:02 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* config/mips/{r3900.mt,r3900l.mt,tm-r3900.h,tm-r3900l.h}:
	Remove, no longer used.

Wed Jan 14 18:11:26 1998  Michael Meissner  <meissner@cygnus.com>

	Patch from Jim Wilson.
	* d30v-tdep.c (d30v_frame_find_saved_regs_offsets): Properly
	declare void function before use.

	* config/d30v/tm-d30v.h (CALL_DUMMY): Initialize as { 0 }, not {}.

Tue Jan 13 16:38:48 1998  Fred Fish  <fnf@cygnus.com>

	* configure.in (--with-mmalloc): Add new configure arg to use the
	mmalloc package.  Default is to not use it.
	(START_INFERIOR_TRAPS_EXPECTED): Define to the integer 2, not
	the string "2".
	* acconfig.h (USE_MMALLOC, FORCE_MMCHECK): Add #undef.
	* configure: Regenerated.
	* config.in: Regenerated.
	* Makefile.in (MMALLOC_DIR, MMALLOC_SRC): Remove.
	(MMALLOC): Set using configure.
	(MMALLOC_CFLAGS): Set using configure.

	* config/i386/tm-linux.h (sys_quotactl): Define to 1 rather
	than just defining it.
	* mpw-make.sed: Undefine USE_MMALLOC rather than defining NO_MMALLOC.
	* utils.c (NO_MMALLOC): Use USE_MMALLOC instead.
	* objfiles.c: ditto.
	* defs.h: ditto.

	* config/sparc/sun4os4.mh (MMALLOC_CFLAGS): Remove.
	* config/m68k/sun3os4.mh (MMALLOC_CFLAGS): Remove.
	* config/i386/cygwin32.mh (MMALLOC_CFLAGS): Remove.
	* config/alpha/alpha-osf3.mh (MMALLOC_CFLAGS): Remove.
	* config/alpha/alpha-osf2.mh (MMALLOC_CFLAGS): Remove.
	* gdbserver/Makefile.in (MMALLOC_*): Remove.
	* config/rs6000/rs6000.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/rs6000/aix4.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/powerpc/aix4.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/powerpc/aix.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/ns32k/ns32km3.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/mips/mipsm3.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/mips/decstation.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/m88k/cxux.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/i386/xm-windows.h (NO_MMALLOC, NO_MMCHECK): Remove.
	* config/i386/i386mk.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/i386/i386m3.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/i386/i386gnu.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/alpha/alpha-osf1.mh (MMALLOC, MMALLOC_CFLAGS): Remove.
	* config/alpha/alpha-linux.mh (MMALLOC, MMALLOC_CFLAGS): Remove.

Mon Jan 12 11:46:51 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)

	* config/m68k/tm-m68k.h (REGISTER_VIRTUAL_TYPE): make A0 thru A7
	default to void pointer type (so that their default radix is hex).

	* symtab.c: move rbreak_command from no_class to class_breakpoint
	so it will be listed under "help breakpoints".

Sat Jan 10 14:58:04 1998  Stan Shebs  <shebs@andros.cygnus.com>

	* rdi-share/hostchan.c: Remove gettimeofday declaration.

Thu Jan  8 11:03:59 1998  Nick Clifton  <nickc@cygnus.com>

	* remote-rdp.c: Applied patches submitted by Tony.Thompson@arm.com
 	to implement the Angel remote debugging interface.

	* Makefile.in: Add build rules for remote-rdi.c and
	rdi-share/libangsd.a.

	* configure.tgt: Updated from source on branch.
	* config/arm/tm-arm.h: Updated from source on branch.
	* arm-tdep.c: Updated from source on branch.

	* rdi-share: New directory, RDI library contributed by ARM.

Mon Jan  5 20:21:59 1998  Mark Alexander  <marka@cygnus.com>

	* monitor.h (MO_PRINT_PROGRAM_OUTPUT): Define.
	* monitor.c (monitor_wait): Echo program output.
	* dve3900-rom.c (_initialize_r3900_rom): Remove MO_HANDLE_NL flag,
	add MO_PRINT_PROGRAM_OUTPUT flag.

Mon Jan  5 18:21:11 1998  David Taylor  <taylor@texas.cygnus.com>

	* top.h (HAVE_SIGSETJMP): define SIGJMP_BUF, SIGSETJMP, and
	SIGLONGJMP appropriately based on whether HAVE_SIGSETJMP is
	defined.
	* top.c (return_to_top_level, catch_errors): use the new macros
	* main.c (SET_TOP_LEVEL): ditto.
	* config/xm-sysv4.h (HAVE_SIGSETJMP): Define.

Fri Jan  2 18:48:58 1998  Mark Alexander  <marka@cygnus.com>

	* configure.in: Double up brackets in shell case pattern.

Fri Jan  2 17:06:05 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)

        * tracepoint.c (finish_tfind_command): improved algorithm for
        deciding when we've "stepped" into a new stack frame.
        (map_args_over_tracepoints): loop over tracepoint list "safely", 
	since list elements may be deleted during loop.
	(read_actions): add actions to history list.

For older changes see ChangeLog-1997

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
