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.
        * gdb/m68klinux-nat.c: New file.
        * gdbserver/low-linux.c: Add support for m68k-linux.
        * gdb/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/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:
