Wed Dec 29 17:41:11 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (create_breakpoints, parse_breapoint_sals,
 	breakpoint_sals_to_pc): New functions.
	(break_command_1): Rewrite. Use create_breakpoints,
 	parse_breapoint_sals, breakpoint_sals_to_pcto create the list of
 	breakpoints specified in ``sals''.  Delete unused variables.
  	Pre-allocate addr_strings for all breakpoints.  Allocate a
 	separate cond and cond_string for each breakpoint.
	(gdb_breakpoint, do_captured_breakpoint, struct
 	captured_breakpoint_args): Provide a library interface into
 	create_breakpoints.

	* defs.h (gdb_breakpoint): Add declaration.

1999-12-22  Michael Chastain  <chastain@cygnus.com>

	* dbxread.c (process_one_symbol): check for nested LBRAC
	symbols before calling finish_block rather than after.  Do not
	call define_symbol for these symbols.

1999-12-21  Stan Shebs  <shebs@andros.cygnus.com>

	* blockframe.c (generic_pop_current_frame): Cosmetic changes to
	clarify.

1999-12-20  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* procfs.c: Completely rewritten.  All functions replaced, to make
	maintainence easier in the presence of two very different versions
	of /proc (ioctl vs. read/write).
	* proc_api.c: New file, pretty-print /proc diagnostic trace info.
	* proc_events.c: New file, pretty-print /proc signals, exceptions.
	* proc_flags.c: New file, pretty-print /proc flags.
	* proc_why.c: New file, pretty-print /proc reasons for stopping.
	* Makefile.in: Add rules for above new files.
	* config/i386/i386sol2.mh: Add above new files to NATDEPFILES.
	* config/sparc/sun4sol2.mh: ditto.
	* config/i386/i386dgux.mh: ditto.
	* config/i386/i386v4.mh: ditto.
	* config/i386/i386v42mp.mh: ditto.
	* config/i386/ncr3000.mh: ditto.
	* config/m68k/m68kv4.mh: ditto.
	* config/m88k/delta88v4.mh: ditto.
	* config/mips/irix4.mh: ditto.
	* config/mips/irix5.mh: ditto.
	* config/mips/mipsv4.mh: ditto.
	* config/powerpc/solaris.mh: ditto.
	* config/alpha/alpha-osf2.mh: ditto.
	* config/alpha/alpha-osf3.mh: ditto.
	* testsuite/gdb.base/callfuncs.exp: make "next" test match the
	next source line, in case the "next" runs away.
	* acconfig.h: remove obsolete def HAVE_MULTIPLE_PROC_FDS, 
	add new def NEW_PROC_API
	* config.in; ditto.
	* configure.in: Detect sparc solaris 7 and all versions of 
	UnixWare, and define NEW_PROC_API.
	* configure: auto-generate.
	* infrun.c (MAY_SWITCH_FROM_INFERIOR_PID): remove define, make it
	the default behavior.  (switched_from_inferior_pid): rename to
	previous_inferior_pid.  (handle_inferior_event): remove the
	[Switching to thread...] message.  (normal_stop): move the
	[Switching to thread...] message to here.
	* sol-thread.c (sol_find_new_threads): add a call to 
	procfs_find_new_threads, so that new LWPs are found too.
	* config/mips/nm-irix5.h (TARGET_CAN_USE_HARDWARE_WATCHPOINT): 
	define to always use.  (target_insert_watchpoint) define to use
	new procfs call (one additional parameter).
	(target_remove_watchpoint): ditto.
	(TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT) define always true.
	* config/mips/nm-irix4.h: ditto.
	
	
1999-12-21  Jim Blandy  <jimb@cygnus.com>

	* Makefile.in (elf_bfd_h): Look for elf-bfd.h in BFD_SRC, not
	BFD_DIR.  Unlike bfd.h, it is not a generated file.
	
Fri Dec 17 18:24:58 1999  David Taylor  <taylor@texas.cygnus.com>

	* language.c (_initialize_language): move settings of language,
 	range, and type and corresponding function calls
 	set_language_command, set_type_command, and set_range_command
 	closer together to match the model of having the user set the
 	variable via the 'set {language | range | type}' commands.
	This eliminates startup noise introduced by Jimmy Guo's change
	of Dec 13th.

1999-12-17  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* configure.in: test for <stdint.h>, which is not available
	on earlier versions of Linux.
	* config.in: define HAVE_STDINT_H if it's present.
	* configure: autoconfiscate.
	* lin-thread.c: if not HAVE_STDINT_H, stub out the entire module.
	
Fri Dec 17 20:45:21 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.c (find_target_beneath): Change ``='' in if to ``==''.

1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* defs.h (TIDGET): add default definition.
	* lin-thread.c (check_for_thread_event): for now, just provide
	an empty definition (to be filled in later).

1999-12-16  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* varobj.c (varobj_list): Improve the test and the text of the
	assertion that guards against wrong tally of root varobjs.
	(uninstall_variable): Fix for a bug in which the number of root
	varobjs was not decremented if the first one in the list was deleted.

1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>
	
	* linux-thread.c: Remove printf-debugging code.
	* lin-thread.c: ditto.
	* config/alpha/nm-linux.h: protect with NM_LINUX_H.
	* testsuite/gdb.threads/linux-dp.exp: Make test for "New Thread"
	message more forgiving.  Ditto test for "info threads".
	
1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* lin-thread.c: new file.  Implements multi-thread debugging on
	Linux using the thread_db API first implemented on Solaris.  This
	frees GDB from any dependency on the internal implementation of
	the thread library.  Future versions of the thread library will
	implement a libthread_db API for debuggers, which GDB will use.
	* config/i386/linux.mh: add lin-thread.o to the link, and add
	-ldl and -rdynamic since libthread_db is a dynamic library.
	* config/alpha/alpha-linux.mh: ditto.
	* configure.in: test for thread_db.h, proc_service.h
	* configure: autoconf.
	* config.in: conditionally define HAVE_THREAD_DB_H
	and HAVE_PROC_SERVICE_H
	* gdb_thread_db.h: new file, used when the system doesn't have it.
	* gdb_proc_service.h: ditto.
	
1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* linux-thread.c: changes to accomodate the new lin-thread.c
	module based on the thread_db API.  These changes make parts of
	linux-thread.c shareable with lin-thread.c.
	(linuxthreads_wait_mask): replace with linuxthreads_block_mask.
	(using_thread_db): new variable.  Allows linux-thread module to 
	detect when lin-thread (thread_db API) module is in use.
	(save_inferior_pid, restore_inferior_pid): make 32/64 bit safe.
	(check_all_signal_numbers) make extern, shared with lin-thead.c.
	(linuxthreads_new_objfile): use target_new_objfile_chain to share
	this hook with the lin-thread module.  Call the other module FIRST.
	If using_thread_db is turned on by the other thread module, do not
	set linuxthreads_debug and do not call update_stop_threads.  Do call
	check_all_signal_numbers, to be sure it gets set before target_wait.
	(linux_child_wait): new function.  Abstracts out the "child_wait"
	functionality, so that it can be shared with the lin-thread module.
	(linuxthreads_wait): call linux_child_wait, instead of doing the
	waiting inline.  If using_thread_db, do not call update_stop_threads
	and do not turn on linuxthreads_debug.
	(linuxthreads_mourn_inferior): abstract out the clearing of global
	state, so that it can be shared with the lin-thread.c module.
	(_initialize_linuxthreads): use linuxthreads_wait_mask to block
	SIGCHLD exactly ONCE, and leave it blocked!  Then linux_child_wait
	will call sigsuspend when it wants to wait for this signal.
	(thread_attach): abstract out ptrace attach to share with lin-thread.c
	
1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>

	Make target_pid_to_str a target_ops vector.
	* target.h (target_pid_to_str): redefine to use a target_ops vector.
	(target_tid_to_str): default to using target_pid_to_str.
	(target_pid_or_tid_to_str): ditto.
	* target.c (update_current_target): inherit to_pid_to_str method.
	(find_target_beneath): new function.  Find target stratum below 
	the given one.
	* config/nm-gnu.h: don't define target_pid_to_str.
	* config/i386/tm-i386sol2.h: ditto.
	* config/sparc/tm-sun4sol2.h: ditto.
	* gnu-nat.c (init_gnu_ops): initialize to_pid_to_str vector.
	* linux-thread.c (init_linuxthreads_ops): ditto.
	* sol-thread.c (init_sol_thread_ops: ditto.
	* procfs.c (init_procfs_ops): ditto.
	* win32-nat.c (init_child_ops): ditto.
	* config/i386/tm-cygwin.h: don't define target_pid_to_str.
	* inftarg.c (child_pid_to_str): new function, used to initialize
	to_pid_to_str vector.  May be suppressed by defining CHILD_PID_TO_STR.
	(init_child_ops): initialize to_pid_to_str using child_pid_to_str.
	Derivative modules may substitute their own child_pid_to_str func
	by defining CHILD_PID_TO_STR.
	* lynx-nat.c (lynx_pid_to_str): rename to child_pid_to_str.
	* config/nm-lynx.h: define CHILD_PID_TO_STR.  
	Don't define target_pid_to_str.
	* hppah-nat.c (hppa_pid_to_str): rename to child_pid_to_str.
	* infttrace.c (hppa_pid_or_tid_to_str): call child_pid_to str 
	instead of hppa_pid_to_str.
	* config/pa/nm-hppah.h: define CHILD_PID_TO_STR.
	Don't define target_pid_to_str.
	
1999-12-16  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* i386-linux-nat.c: introduce PIDGET/TIDGET macros as on Solaris, 
	preparatory to using the thread_db debugging API for Linux.
	(fill_gregset): guard against invalid input.
	(fetch_regs): add a pid/thread_id argument, so we can fetch regs
	from multiple processes/clones/threads.  (store_regs): ditto.
	(fetch_fpregs): ditto.  (store_fpregs): ditto.
	(fetch_xfpregs): ditto.  (store_xfpregs): ditto.
	(fetch_inferior_registers): use TIDGET to extract an appropriate
	thread/clone/process id from inferior_pid, if there's one there, 
	and pass it to fetch_regs etc.  (store_inferior_registers): ditto.

	* infptrace.c: include every available version of wait.h.
	introduce PIDGET/TIDGET macros for use with thread_db API on Linux.
	(call_ptrace): rearrange lines that were split by an ifdef.
	(fetch_register): use TIDGET to extract an appropriate process ID
	from inferior_pid, in case we are debugging more than one process.
	(store_register): ditto.  This is for Linux.
	(child_xfer_memory): use PIDGET to extract the main process id from
	inferior_pid, in case we are debugging multiple processes that share
	the same address space (as on Linux).

1999-12-16  Christopher Faylor  <cgf@cygnus.com>

	* win32-nat.c: Add a missing register to mappings array.
	(child_fetch_inferior_registers): Use precalculated index into mappings
	array as supply_registers argument.
	(handle_output_debug_string): Avoid considering every debug string as a
	cygwin signal.
	(handle_exception): Trap first chance exceptions.
	(child_create_inferior): Initialize Microsoft thread walking API.
	(sgmb): New function.  Used by Microsoft API for stack walking.
	(child_frame_chain): New function.  Uses Microsoft API for stack
	walking.
	(child_frame_chain_saved_pc): Ditto.
	* config/i386/tm-cygwin.h: Define frame handling stuff.

1999-12-15  Stan Shebs  <shebs@andros.cygnus.com>

	ARM GNU/Linux support and general ARM target fixes/cleanup from
 	Scott Bambrough <scottb@netwinder.org>, plus obsoletion of the old
 	RISCix support.
	* NEWS: Mention addition and obsoletion.
	* configure.host: Recognize arm* instead of just arm.
 	(arm*-*-linux*): Recognize.
	* configure.tgt: Ditto, plus assume arm*-*-* is embedded.
	* config/arm/arm.mh, config/arm/arm.mt, config/arm/nm-arm.h,
 	config/arm/xm-arm.h: Mark as OBSOLETE.
	* config/arm/embed.mt, config/arm/tm-embed.h: New files.
	* config/arm/linux.mh, config/arm/linux.mt, config/arm/nm-linux.h,
 	config/arm/tm-linux.h, config/arm/xm-linux.h: Ditto.
	* config/arm/tm-arm.h: Add more comments, eliminate PARAMS.
	(STACK_END_ADDR): Remove.
	(ARM_LE_BREAKPOINT, ARM_BE_BREAKPOINT, THUMB_LE_BREAKPOINT,
	THUMB_BE_BREAKPOINT): Move to here from arm-tdep.c.
	(NUM_REGS): Define as sum.
	(NUM_FREGS, NUM_SREGS, NUM_GREGS): New definitions.
	(FP_REGISTER_RAW_SIZE, FP_REGISTER_VIRTUAL_SIZE,
 	STATUS_REGISTER_SIZE): Define.
	(REGISTER_BYTES, REGISTER_BYTE, REGISTER_RAW_SIZE,
	REGISTER_VIRTUAL_SIZE): Rewrite to use symbolic values.
	(REGISTER_CONVERTIBLE, REGISTER_CONVERT_TO_VIRTUAL,
	REGISTER_CONVERT_TO_RAW, USE_STRUCT_CONVENTION,
	EXTRACT_RETURN_VALUE): Rewrite to use new functions.
	(IN_SIGTRAMP): Remove definition.
	* arm-convert.s: Mark as OBSOLETE.
	* arm-linux-nat.c: New file.
	* Makefile.in: Add build rule for it.
	* arm-tdep.c (struct frame_extra_info): New struct.
	(arm_use_struct_convention): Rewrite.
	(arm_push_arguments): Rewrite to handle more cases.
	(arm_register_convertible, arm_register_convert_to_virtual,
 	arm_register_convert_to_raw, arm_extract_return_value): New
 	functions.
	(LITTLE_BREAKPOINT, BIG_BREAKPOINT): Remove.
	* arm-xdep.c: Mark as OBSOLETE.

1999-12-15  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c (run_stack_dummy): Temporarily lie about the target
 	ability to support asynchronous execution.

	* remote.c (remote_can_async_p, remote_is_async_p): Return true
 	iff to_async_mask_value is true too.
	(remote_async): Error out if called when to_async_mask_value is 0.
	(init_remote_async_ops): Initialize to_async_mask_value to 1.
	(remote_async_detach, remote_async_resume, remote_async_wait,
 	remote_async_kill): Change SERIAL_IS_ASYNC_P call to
 	target_is_async_p call.
	(remote_async_resume): Change SERIAL_CAN_ASYNC_P call to
 	target_can_async_p call.
	
	* target.c (update_current_target): Inherit to_async_mask_value.
	(target_async_mask): New function. To temporarily turn the target
 	into a synchronous one for inferior function calls, and back to
 	asynchronous.

	* target.h (to_async_mask_value): New entry in the target
 	vector.
	(target_async_mask): Export.
	(target_async_mask_value): Define.
 	
Wed Dec 15 11:24:32 1999  Jeffrey A Law  (law@cygnus.com)

	* hp-psymtab-read.c (trans_lang): Use HP_LANGUAGE_FORTRAN instead
	of HP_LANGUAGE_F77.

Wed Dec 15 13:37:55 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdb-events.h, gdb-events.c (set_gdb_event_hooks): Return the old
 	event hooks vector.

1999-08-13  Jim Kingdon  <http://developer.redhat.com/>

        * breakpoint.c (bpstat_stop_status): Revert 1998-09-08 change
        to ->frame matching.  The change did not match the ChangeLog
        entry, looked fishy, and caused infinite stepping when running
        "next" from main on sparc w/ RH Linux.  Thanks to Jakub for the
	report.

1999-12-14  Stan Shebs  <shebs@andros.cygnus.com>

	* arm-tdep.c (arm_get_next_pc): Add argument to shifted_reg_val
	call.

1999-12-14  Mark Salter  <msalter@cygnus.com>

	* mips-tdep.c (mips_print_register): Fix printing of individual
	registers when REGISTER_VIRTUAL_SIZE != REGISTER_RAW_SIZE.

Tue Dec 14 23:29:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (mcalloc): Delcare.
	* utils.c (xcalloc, mcalloc): New functions.

1999-12-13  Stan Shebs  <shebs@andros.cygnus.com>

	* config/arm/tm-arm.h: Reformat comments, in preparation for
	real changes.
	* arm-tdep.c: Similarly, plus change function definitions to
	modern form.

1999-12-13  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* breakpoint.h (enum bptype): add new BP type bp_thread_event.
	This will be used when a target needs to set an invisible 
	breakpoint to detect events such as thread creation.
	* breakpoint.c (interlan_breakpoint_number): remove ifdefs.
	(create_thread_event_breakpoint): new function.
	(remove_thread_event_breakpoints): new function.
	(bpstat_what): don't stop at invisible thread_event breakpoints.
	(update_breakpoints_after_exec): if bp_thread_event breakpoins
	still exist after an exec, delete them.  They'll need to be 
	found and installed anew anyway.
	(print_it_typical): don't announce bp_thread_event breakpoints.
	(print_one_breakpoint): account for new breakpoint type.
	(mention): don't mention invisible bp_thread_event breakpoints.
	(delete_command): don't delete invisible bp_thread_event bp's.
	(breakpoint_re_set_one): don't touch bp_thread_event bp's.
	
Mon Dec 13 11:10:59 1999  Jimmy Guo	<guo@cup.hp.com>

	* language.h (longest_raw_hex_string, longest_local_hex_string,
	longest_local_hex_string_custom): Declare.
	* language.c: New functions, and misc. fixes.
	(longest_raw_hex_string, longest_local_hex_string,
	longest_local_hex_string_custom): New functions.

	* c-typeprint.c
	(c_type_print_varspec_prefix,c_type_print_varpsec_suffix): Add
	TYPE_CODE_TEMPLATE case and default case.
	(c_type_print_base): Revise how demangled_no_class is found;
	print '}' before printing local file:line info.
	* c-valprint.c (c_value_print): print reference type to class.

	* valarith.c (value_binop): Add support for exponentiation,
	equal, not equal.
	(my_strcmp): New function.
	(value_equal,value_less): Add string equality comparison support.

	* m2-exp.y (lex): add default case statement to capture
	unhandled token and call error().

1999-12-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* main.c (main): Remove unused variable.

	From Hubert VERSTRAETE (hubertV@bigfoot.com):
	* main.c (captured_main): Disambiguate command line option '-d' by
 	preferring --directory over --dbx.

	* top.c (return_to_top_level): Do not do exec cleanups if the
 	target is executing. Those cleanups are supposed to be done when
 	the target has stopped.

Mon Dec 13 20:52:37 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (do_captured_breakpoint_query,
 	gdb_breakpoint_query): New functions.  Implement a breakpoint
 	query.

	* defs.h (enum gdb_rc): Declare.
	(gdb_breakpoint_query): Declare.

Mon Dec 13 14:18:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdb-events.h: Fix typo in description of breakpoint events.
	* gdb-events.sh: Update.

Mon Dec 13 13:57:26 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (ep_type_description_t): Delete.
	(print_one_breakpoint): Add local declaration of struct
 	ep_type_description.

Mon Dec 13 12:38:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* top.h: Delete #include <setjmp.h>.  Moved to top.c.
	(SIGJMP_BUF, SIGSETJMP, SIGLONGJMP, SIGJMP_BUF, SIGSETJMP,
 	SIGLONGJMP): Delete.  Moved to top.c
	(error_return, quit_return): Delete extern declarations.

	* top.c: #include <setjmp.h>.
 	(error_return, quit_return): Make static.
	(SIGJMP_BUF, SIGSETJMP, SIGLONGJMP, SIGJMP_BUF, SIGSETJMP,
 	SIGLONGJMP): Define.

Mon Dec 13 11:54:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* tracepoint.c (trace_start_command, tracepoints_info): Print
 	step_count using %ld.
	* Makefile.in (tracepoint.o): Compile tracepoint.o with -Werror.

1999-12-12  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* target.h (enum target_waitkind): Add new enumeration value
 	TARGET_WAITKIND_IGNORE. For inferior events that we should do
 	nothing about.

	* remote.c (remote_async_wait): After each character of console
 	output from the inferior, return to the event loop with an event
 	kind of TARGET_WAITKIND_IGNORE instead of looping here.

	* infrun.c (handle_inferior_event): In case of
 	TARGET_WAITKIND_IGNORE, return immediately, and set things up so
 	that we are still waiting for the inferior.

1999-12-12  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (handle_timer_event): When calling the timer
 	procedure, use the saved_timer data, not the timer_ptr data,
 	because the latter has been already freed.

Fri Dec 10 12:01:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* eval.c (evaluate_subexp): Only inline when GNUC and not STDC.

Sat Dec 11 17:52:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (print_one_breakpoint): New function.  Move
 	breakpoint print code to here.
	(breakpoint_1): From here.

Mon Dec  6 20:31:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.sh: Replace field init_p with invalid_p.
	(TARGET_BFD_VMA_BIT): New architecture vector method.  Defaults to
 	architecture bits_per_address.
	* gdbarch.h, gdbarch.c: Update.
	* defs.h (TARGET_BFD_VMA_BIT): Provide default of TARGET_PTR_BIT
 	for non- multi-arch case.

	* gdbtypes.h (builtin_type_bfd_vma, builtin_type_ptr,
 	builtin_type_CORE_ADDR): New GDB specific address types.
	* gdbtypes.c (_initialize_gdbtypes, build_gdbtypes): Initialize
 	new builtin types.

Wed Dec  8 17:48:56 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/sparc/nm-nbsd.h (FETCH_INFERIOR_REGISTERS): Delete
 	definition.  Already defined in config/nm-nbsd.h.  Include the
 	more explicit config/nm-nbsd.h.

	* config/sparc/nbsd.mt (TDEPFILES): Move solib.o from here.
	* config/sparc/nbsd.mh (NATDEPFILES): To here.
	* config/xm-nbsd.h: #include <sys/param.h> to get definition of
 	NGROUPS needed by <limits.h> and missing on some systems.
	* config/nm-nbsd.h: Only macro's that match NetBSD definitions
 	with what is expected by solib.c when not SVR4_SHARED_LIBS.

	* configure.host: Add patterns for sparc-*-netbsdaout* and
 	sparc-*-netbsdelf*.
	* config/sparc/nm-nbsdelf.h: New file.
	* config/sparc/nbsdelf.mh: New file.

Wed Dec  8 19:56:48 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* frame.h, blockframe.c: Rename default_frame_chain_valid to
 	file_frame_chain_valid.  Rename alternate_frame_chain_valid to
 	func_frame_chain_valid.

	* config/sparc/tm-sparclite.h, config/mips/tm-mipsv4.h,
 	config/m88k/tm-delta88v4.h, config/m68k/tm-m68kv4.h,
 	config/m68k/tm-monitor.h, config/i386/tm-i386nw.h,
 	config/i386/tm-i386v4.h, config/h8300/tm-h8300.h: Update.
	* mips-tdep.c (mips_gdbarch_init): Update.
	
Wed Dec  8 19:12:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (generic_file_frame_chain_valid): Rename
 	generic_file_frame_chain_valid.
	* frame.h: Update.
	* config/fr30/tm-fr30.h, config/m32r/tm-m32r.h,
 	config/mn10200/tm-mn10200.h, config/mn10300/tm-mn10300.h,
 	config/sh/tm-sh.h, config/v850/tm-v850.h, config/mcore/tm-mcore.h:
 	Update.

	* blockframe.c (generic_func_frame_chain_valid): New function.
  	Implement dummy-frame equivalent of function based frame chain
 	valid.
	* frame.h (generic_func_frame_chain_valid): Declare.

Wed Dec  8 16:26:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (alternate_frame_chain_valid,
 	default_frame_chain_valid): Swap implementations.  The change Mon
 	Nov 30 11:18:48 1998 Andrew Cagney <cagney@chook> which converted
 	several macros to functions was backwards.

	* mips-tdep.c (mips_gdbarch_init): Update.  Call
 	alternate_frame_chain_valid and not default_frame_chain_valid.

Wed Dec  8 15:29:48 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* infptrace.c: Simplify handling of <sys/wait.h>. Always include
 	"wait.h" from the ../include/wait.h directory.  #include
 	<sys/wait.h> was added as part of Mon Nov 29 12:14:10 1999 Andrew
 	Cagney <cagney@b1.cygnus.com> but the ChangeLog was omitted.

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

	Add support for SSE registers in core files.
	* corelow.c (get_core_register_section): New function.
	(get_core_registers): Fetch the new ".reg-xfp" sections,
	in addition to the traditional ".reg" and ".reg2" sections.
	Check for per-thread variants of all three.  Use
	get_core_register_section, instead of writing it out over and over
	again.
	* i386-linux-nat.c (i386_linux_fetch_core_registers): New function.
	(i386_linux_nat_core_fns): New core_fns structure.  We do our own
	core handling now, instead of using the generic code in core-regset.c.
	(_initialize_i386_linux_nat): New function, needed to register
	i386_linux_nat_core_fns.
	* config/i386/linux.mh (NATDEPFILES): Remove core-regset.o;
	i386-linux-nat.c has its own sniffer now.
	* gdbcore.h: (struct core_fns): Doc fix.

	* i386v-nat.c (i386_float_info): Definition is #if 0'd; delete it
	altogether.  This should use the function i387-tdep.c.

	Patch from Mark Kettenis  <kettenis@gnu.org>:

	* config/i386/tm-i386.h (FLOAT_INFO): New define.
	* i387-tdep.c (print_i387_value, print_i387_ext,
	print_i387_status_word, print_i387_control_word, i387_float_info):
	New functions, used to implement generic `info float' command.

1999-12-06  Christopher Faylor  <cgf@cygnus.com>

	* dcache.c (set_dcache_state): New function.
	* dcache.h: Declare set_dcache_state().

Sat Dec  4 15:17:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (build_remote_packet_sizes): Reduce the default packet
 	size of 400 bytes by one to 399.  Stops GDB trashing stubs that
 	append a trailing NUL to an already full buffer.

Sat Dec  4 01:16:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* tracepoint.c (remote_get_noisy_reply): Add parameter sizeof_buf.
	(finish_tfind_command): Add parameter sizeof_msg.
	
	* remote.c (remote_threads_info): Move assignment operator to
 	outside of function call.
	(remote_send): Add parameter sizeof_buf.
	(getpkt): Add parameter sizeof_buf. Call read_frame passing in
 	sizeof_buf.

	* remote.h (getpkt): Update.
	
	* tracepoint.c (remote_set_transparent_ranges,
 	remote_get_noisy_reply, trace_start_command, trace_stop_command,
 	trace_status_command, finish_tfind_command, trace_find_pc_command,
 	trace_find_tracepoint_command, trace_find_line_command,
 	trace_find_range_command, trace_find_outside_command): Update.

	* remote.c (set_thread, remote_thread_alive,
 	remote_get_threadinfo, remote_get_threadlist,
 	remote_current_thread, remote_threads_info,
 	extended_remote_restart, get_offsets, remote_open_1,
 	remote_async_open_1, remote_wait, remote_async_wait,
 	remote_fetch_registers, check_binary_download, remote_write_bytes,
 	remote_read_bytes, remote_send, remote_detach,
 	remote_async_detach, remote_fetch_registers,
 	store_register_using_P, store_register_using_P,
 	remote_fetch_registers, remote_store_registers, putpkt_binary,
 	remote_insert_breakpoint, remote_remove_breakpoint,
 	compare_sections_command, remote_rcmd, packet_command,
 	remote_info_process, remote_query, remote_insert_watchpoint,
 	remote_search, remote_remove_watchpoint,
 	remote_insert_hw_breakpoint, remote_remove_hw_breakpoint): Update.

Fri Dec  3 17:38:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* (read_frame): Add sizeof_buf parameter. Don't allow repeat when
 	first character.  Always leave space at the end of the buffer.
  	Return size of packet or -1.
	(getpkt): Update.  Pass in PBUFSIZ.

Thu Dec  2 17:14:53 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c: Include <string.h> for memset().

1999-12-01  Jim Blandy  <jimb@cygnus.com>

	* gdbtypes.c (builtin_type_v4si, builtin_type_v8qi,
	builtin_type_v4hi, builtin_type_v2si): New SIMD types.
	(build_gdbtypes): Initialize them.
	(_initialize_gdbtypes): Gdbarch_swap them.
	* gdbtypes.h (builtin_type_v4si, builtin_type_v8qi,
	builtin_type_v4hi, builtin_type_v2si): Declare them. 

	* findvar.c (read_register_bytes, write_register_bytes): Correctly
	determine how the region the caller is writing overlaps with each
	register's bytes.

	* value.h (struct value): Doc fixes.

	* valops.c (value_assign): Clarify error message.

1999-12-01  Christopher Faylor  <cgf@cygnus.com>

	* config/i386/tm-cygwin.h: Change tm-i386.h include back to tm-i386v.h.

1999-12-01  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* inf-loop.c (inferior_event_handler): In case of
 	INF_EXEC_CONTINUE, don't do all the regular continuations, but
 	just the intermediate ones.

	* infcmd.c (step_once): Add the continuation to the
 	intermediate_continuation list instead of the regular continuation
 	list.

	* utils.c (add_intermediate_continuation): New function, to add
 	continuations to the intermedite_continuation list.
	(do_all_intermediate_continuations): New function, do all the
 	continuations in the intermediate list.
	(discard_all_intermediate_continuations): New function, discard
 	all the continuations in the intermediate list.
	(intermediate_continuation): New global list for use by step_1().

	* defs.h: Export intermediate_continuation,
 	add_intermediate_continuation, do_all_intermediate_continuations,
 	discard_all_intermediate_continuations.

1999-11-30  Christopher Faylor  <cgf@cygnus.com>

	* win32-nat.c (mappings): Reorganize slightly for new uniform i386
	register configuration.
	(do_child_fetch_inferior_registers): Handle special case floating point
	registers.
	(handle_output_debug_string): Handle cygwin-specific signals broadcast
	from the cygwin DLL.
	(handle_exceptions): Add code to properly allow continuation after a
	CTRL-C.
	(child_continue): Accept propagated "continue_status" which controls
	how the inferior should be continued.
	(get_child_debug_event): New function.
	(child_wait): Use above function to handle debug events.
	(child_create_inferior): Add more intelligent method for running the
	inferior to the appropriate point before handing it off to the rest of
	gdb.
	(child_stop): Specifically send a CTRL-C to the debugged process.
	(child_kill_inferior): Set global continue status here to cause
	inferior to run to completion.
	(child_resume): Eliminate code which attempts to decide how to continue
	the inferior.  This is now handled by child_continue.
	* config/i386/tm-cygwin.h: Gut and reorganize for consistency with new
	tm-i386.h.

	Patch from Egor Duda (deo@logos-m.ru)
	* win32-nat.c (psapi_get_dll_name): New function.
	(handle_load_dll): Correctly load DLL symbol tables after attaching to
	a running pid.

1999-11-30  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infrun.c (handle_inferior_pid): revert 11-29 change: resuming
	a thread other than the current thread with a signal.  Apparently
	target_resume with a specific pid, a specific signal, and no step
	means to continue ALL threads but to only send the signal to one
	(and not, as I had assumed, to continue only the specified thread).
	* i386-linux-nat.c (fill_gregset): guard against invalid input.
	
1999-11-30  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c (step_once): New function. Used to do just one step
 	operation.
	(step_1_continuation): New function. Figure out if we need to step
 	again before returning control to the user.
	(step_1): If we are in asynchronous mode, don't do the for loop,
 	but rather delegate to continuations the task of repeating the
 	step operation.

	* utils.c (do_all_continuations): Copy the continuation list aside
 	before working on it.

	* target.h (enum inferior_event_type): Add new enum
 	INF_EXEC_CONTINUE.

	* inf-loop.c (inferior_event_handler): Handle new case
 	INF_EXEC_CONTINUE.

	* infrun.c (fetch_inferior_event): If we are in the middle of a
 	'step n' type command, don't say that the execution is complete,
 	but that it will have to continue.

1999-11-30  Kevin Buettner  <kevinb@cygnus.com>

	* utils.c (verror): Don't traverse va_list argument twice.  Also,
	removed extraneous va_end() call.

1999-11-29  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infrun.c (handle_inferior_pid): If a child thread stops on a 
	signal that we are ignoring, and GDB silently resumes the child, 
	resume ALL threads (not just the one that got the signal).  All
	threads are stopped, so all must be resumed.
	(handle_inferior_event): on detecting a thread context switch, 
	swap infrun_state ONLY if both the old thread and the new one
	are in the thread list.  Otherwise state information will be lost!
	Problem may arise with flaky back-ends.
	
1999-11-29  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.c (bpstat_stop_status): Don't decrease hit_count
	in case of a wp that has not changed.

Mon Nov 29 12:14:10 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbtypes.c (init_simd_type): Make static.

	* configure.in (AC_CHECK_HEADERS): Check for <sys/ioctl.h>.
	* configure, config.h: Re-generate.
	* inflow.c: Include <sys/ioctl.h>

	* i386b-nat.c: Include "gdbcore.h".
	* fork-child.c: Include "command.h".

	* remote.c (remote_cisco_section_offsets,
 	remote_start_remote_dummy, store_register_using_P,
 	remote_info_process, remote_cisco_open, remote_cisco_close,
 	readsocket, readtty, minitelnet, remote_cisco_wait,
 	init_remote_async_ops, init_extended_async_remote_ops,
 	set_remote_cmd), infrun.c (default_skip_permanent_breakpoint): Use
 	ISO-C syntax for function definition.

Mon Nov 29 11:28:21 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* stabsread.c: Revert 1999-11-09 Jim Blandy
 	<jimb@zwingli.cygnus.com> and 1999-11-08 Jim Blandy
 	<jimb@cygnus.com>.  Broken on non-Linux targets.

1999-11-26  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* symfile.c (show_load_progress): Add total sent so far to the
 	information passsed to the hook users.
	(generic_load): Collect total sent so far and pass that to the
 	progress hook.

	* defs.h (show_load_progress): Update.

1999-11-25  Nick Clifton  <nickc@cygnus.com>

	* coffread.c (coff_symfile_read): Treat "epoc-pe" targets as "pe"
	targets.
	* dbxread.c (dbx_read_symfile): Treat "epoc-pe" targets as "pe"
	targets. 

Wed Nov 24 17:07:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (init.c): Add SUBDIR_INIT_FILES so that sub
 	directories can hook in extra init files.

1999-11-23  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* defs.h (show_load_progress): Export.

	* symfile.c (show_load_progress): New hook for download.
	(generic_load): Collect total size of executable to load. 
	Call progress hook when downloading.

Thu Nov 18 11:54:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* arc-tdep.c (codestream_fill): Rewrite byte swap code using
 	function extract_unsigned_integer.

Wed Nov 17 17:01:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* arm-xdep.c: #include "arm-opcode.h" -> "opcode/arm.h".

1999-11-22  Jim Blandy  <jimb@cygnus.com>

	* Makefile.in (i386-tdep.o): Update list of dependencies.

1999-11-22  Jim Blandy  <jimb@cygnus.com>

	* config/i386/tm-i386v.h (NUM_REGS, REGISTER_NAMES,
	REGISTER_BYTES, REGISTER_BYTE, REGISTER_RAW_SIZE,
	REGISTER_VIRTUAL_SIZE, MAX_REGISTER_RAW_SIZE,
	MAX_REGISTER_VIRTUAL_SIZE, REGISTER_VIRTUAL_TYPE): Deleted.  All
	of these should inherit identical or compatible values from
	tm-i386.h, as long as you don't define HAVE_SSE_REGS or
	HAVE_I387_REGS, which are new anyway.

Mon Nov 22 21:39:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.c (do_target_signal_to_host): New function.  Indicate of
 	the conversion was successful to the caller via an additional
 	parameter.
	(target_signal_to_host_p): New function. Return non-zero if the
 	GDB signal exists on the host system.
	(target_signal_to_host): Rewrite.  Use do_target_signal_to_host.
	* target.h (target_signal_to_host_p): Add declaration. Document
 	target_singal vs host signal vs target OS signal confusion.
	
	From 1999-11-08 Jimmy Guo <guo@cup.hp.com>:
	* hppah-nat.c (require_notification_of_events): Start by ignoring
 	all signals and then adding back in ones we're interested in.
	
Thu Nov 18 18:12:48 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* jv-typeprint.c (java_type_print_base), kod-cisco.c
 	(cisco_kod_open), kod.c (kod_set_os), xcoffread.c
 	(process_linenos), symfile.c (add_symbol_file_command),
 	remote-rdi.c (arm_rdi_open, rdilogfile_command), main.c
 	(captured_main), go32-nat.c (go32_create_inferior), exec.c
 	(exec_file_attach), corefile.c (core_file_command,
 	reopen_exec_file): Replace strdup with xstrdup.

Mon Nov 22 12:02:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* bcache.c (print_bcache_statistics): Fix printf_filtered
 	arguments.
	(print_percentage): Make function void.

1999-11-21  Jim Blandy  <jimb@cygnus.com>

	Make the bcache hash table grow.
	* bcache.h (BCACHE_NUM_BUCKETS): Delete definition.
	(struct bcache): Add new element: num_buckets.  Make bucket be a
	pointer to an array, not an array.
	(free_bcache): New extern declaration.
	* bcache.c (CHAIN_LENGTH_THRESHOLD): New constant.
	(expand_hash_table): New function.
	(bcache): Grow the hash table if the average chain length reaches
	CHAIN_LENGTH_THRESHOLD.
	(free_bcache): New function.
	(print_bcache_statistics): Don't assume that the number of buckets
	is constant any more.
	(BSTRING_SIZE): Moved down to just above 'bcache' function, where
	it's used.
	* objfiles.c (free_objfile): Call free_bcache, instead of just 
	freeing the bcache's obstack directly.
	* symfile.c (reread_symbols): Same.

1999-11-20  Jim Blandy  <jimb@cygnus.com>

	* bcache.c, bcache.h: Rewritten.  New version imposes less memory
	overhead, and has a more effective hash function, so it's probably
	faster, too.

	* config/nm-linux.h: No need to check whether __STDC__ is
	#defined --- GDB requires ANSI C now.

	* config/i386/nm-linux.h (linuxthreads_pid_to_str,
	linuxthreads_prepare_to_proceed): Delete declarations --- they're
	provided by config/nm-linux.h now.

1999-11-19  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c (print_command_lines): Remove unused var.

1999-11-19  Jim Kingdon  <kingdon@redhat.com>

        Patch applied by Jim Blandy <jimb@cygnus.com>:

	Enable threads for all linux architectures:
	* config/nm-linux.h: New file.
	config/alpha/nm-linux.h, config/i386/nm-linux.h,
	config/m68k/nm-linux.h, config/sparc/nm-linux.h: Use it.
	* config/tm-linux.h: New file.
	* config/i386/tm-linux.h, config/m68k/tm-linux.h,
	config/sparc/tm-linux.h, config/alpha/tm-alphalinux.h: Use it.
	* config/m68k/linux.mh, config/sparc/linux.mh,
	config/alpha/alpha-linux.mh: Add linux-thread.o.

1999-11-18  Tom Tromey  <tromey@cygnus.com>

	* tracepoint.h (get_tracepoint_by_number): Updated declaration.
	* tracepoint.c (trace_pass_command): Better error message.  Fixed
	logic when `all' not specified.
	(get_tracepoint_by_number): Added `optional_p' argument.  Fixed
	all callers.

Wed Nov 17 17:40:30 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* findvar.c (SWAP_FLOATING): Delete macro. Unused.

1999-11-16  Mark Salter  <msalter@cygnus.com>

	* monitor.c (monitor_supply_register): Initialize value to zero.

1999-11-15  Eli Zaretskii  <eliz@is.elta.co.il>

	(Patches applied by Jim Blandy <jimb@zwingli.cygnus.com>)
	
	Change DJGPP target use the common register layout in
	config/i386/tm-i386.h.
	* config/i386/tm-go32.h: #include "i386/tm-i386.h", not 
	"i386/tm-i386v.h".
	(HAVE_I387_REGS): Define.
	(HAVE_SSE_REGS): Undefine.
	(NUM_FREGS, NUM_REGS, REGISTER_NAMES, FP_REGNUM, SP_REGNUM,
	PS_REGNUM, PC_REGNUM, FP0_REGNUM, FPC_REGNUM, FPCWD_REGNUM,
	FPSWD_REGNUM, FPTWD_REGNUM, FPIPO_REGNUM, FPIPS_REGNUM,
	FPOOS_REGNUM, FPOPS_REGNUM, REGISTER_BYTES, REGISTER_BYTE,
	REGBYTE_0, REGBYTE_10 REGBYTE_16, REGBYTE_24, REGBYTE_29,
	REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE, MAX_REGISTER_RAW_SIZE,
	MAX_REGISTER_VIRTUAL_SIZE, REGISTER_CONVERTIBLE): Definitions
	deleted.
	(i387_to_double, double_to_i387): Declarations deleted.
	(REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW,
	REGISTER_VIRTUAL_TYPE): Use definitions from
	config/i386/tm-i386.h, unless LD_I387 is #defined.
	
	* go32-nat.c (go32_fetch_registers, store_register)
	(go32_create_inferior, init_go32_ops): Replace fatal with
	internal_error.
	(sig_map): Map exception 7 to TARGET_SIGNAL_EMT.

	* utils.c (notice_quit): Doc fixes.

1999-11-15  Kevin Buettner  <kevinb@cygnus.com>

	* gdbserver/server.h (initialize_low): Declare this target
	specific function.
	* gdbserver/server.c (main): Call initialize_low.
	* gdbserver/low-hppabsd.c, gdbserver/low-linux.c,
	gdbserver/low-sim.c, gdbserver/low-sparc.c, gdbserver/low-sun3.c
	(initialize_low): Renamed from initialize.  Also removed
	initialization of inferior_pid.
	(have_inferior_p): Removed.
	* gdbserver/low-lynx.c (initialize_low): New function.

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

	* remote-rdi.c: Fix indentation accordingly to GNU standards.

Thu Oct 28 00:28:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_gdbarch_init): Make the d10v:ts3 the default.

Tue Oct 26 09:57:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.sh: Re-sync with Cagney's earlier const change.

Sun Oct 24 20:07:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (struct gdbarch_tdep): Replace nr_a_regs,
 	imap0_regnum, nr_imap_regs, dmap0_regnum, with dmap_register and
 	imap_register.
	(R0_REGNUM, LR_REGNUM, PSW_REGNUM, NR_IMAP_REGS, NR_A_REGS):
 	Convert to enums.
	(TS2_NR_A_REGS, TS2_NR_IMAP_REGS, TS3_NR_IMAP_REGS,
 	TS3_NR_A_REGS): Delete.
	(d10v_ts2_dmap_register, d10v_ts3_dmap_register,
 	d10v_ts2_imap_register, d10v_ts3_imap_register): New functions.
	(d10v_dmap_register, d10v_imap_register,
 	d10v_ts2_register_sim_regno, d10v_ts3_register_sim_regno,
 	show_regs): Update.
	(remote_d10v_translate_xfer_address): Rewrite.  Use
 	sim_d10v_translate_addr to translate addresses.
	(d10v_gdbarch_init): Initialize tdep members dmap_register and
 	imap_register.

Sun Oct 24 00:12:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (struct gdbarch_tdep): Declare.
	(NR_IMAP_REGS, NR_DMAP_REGS, A0_REGNUM, NR_A_REGS): Redefine using
 	value in gdbarch_tdep.
	(d10v_dmap_register, d10v_imap_register): Ditto.
	(d10v_ts2_register_name, d10v_ts2_register_sim_regno): Rename
 	d10v_register_name and d10v_register_sim_regno
	(enum ts3_regnums, d10v_ts3_register_name,
 	d10v_ts3_register_sim_regno, d10v_register_sim_regno): New.
	(d10v_gdbarch_init): Configure registers and G packet according to
 	d10v/ts2 and d10v/ts3.

Sat Oct 23 21:28:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d10v/tm-d10v.h (IMAP0_REGNUM, IMAP1_REGNUM, DMAP_REGNUM):
 	Delete macro.
	(R0_REGNUM, LR_REGNUM, PSW_REGNUM, A0_REGNUM): Move from here.
	* d10v-tdep.c: To here.

	* d10v-tdep.c: (NR_DMAP_REGS, NR_IMAP_REGS, NR_A_REGS): Define.
	(d10v_dmap_register, d10v_imap_register): New functions.
	(remote_d10v_translate_xfer_address): Make static.
	(d10v_register_virtual_size): Use TYPE_LENGTH of
 	REGISTER_VIRTUAL_TYPE.
	(d10v_register_byte, do_d10v_pop_frame,
 	remote_d10v_translate_xfer_address, show_regs,
 	d10v_register_raw_size): Ditto.
	(d10v_register_virtual_type): Ditto. Use explicitly sized builtin
 	types.

Sat Oct 23 19:08:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c: Include "sim-d10v.h".
	(enum ts2_regnums): Declare.
	(d10v_register_sim_regno): New function.

	* config/d10v/tm-d10v.h: Delete pre multi-arch code.
  	(REGISTER_SIM_REGNO): Define.
	(d10v_register_sim_regno): Declare.
	
Sat Oct 23 16:39:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (initialize_current_architecture): Make ``choice''
 	const.

Wed Nov 10 16:10:22 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (hppa_fix_call_dummy): Fix typo in error message.

Wed Nov 10 16:47:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (error_last_message): Use gdb_file_xstrdup.

	* defs.h (verror, internal_verror): Declare.

	* utils.c (verror, internal_error): New functions.
	(error, internal_error): Use verror / internal_verror.
	(error_stream): Use gdb_file_xstrdup.  Correctly handle %s in
 	error message body.
	(error_init): Use mem_fileopen.

	* corefile.c (memory_error): Use mem_fileopen instead of
 	tui_sfileopen.  Don't call error_begin.
	* remote-sim.c (gdb_os_error): Rewrite using verror. Don't call
 	error_begin.

Wed Nov 10 14:21:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_file_xstrdup): New function.
	* utils.c (gdb_file_xstrdup, do_gdb_file_xstrdup): Implement.

1999-11-09  Stan Shebs  <shebs@andros.cygnus.com>

	* exec.c (exec_file_attach), irix5-nat.c, osfsolib.c, solib.c
 	(info_sharedlibrary_command), pa64solib.c
 	(pa64_sharedlibrary_info_command), somsolib.c
 	(som_sharedlibrary_info_command): Replace "exec file" with
	"executable file" in messages.

1999-11-09  Jim Blandy  <jimb@zwingli.cygnus.com>

	Finish the job attempted by the previous change.
	* stabsread.c (read_range_type): Make n2 and n3 LONGEST.  Adjust
	the various tests that check for maximum values, bit counts, etc.
	In the long run, it might have been simpler just to give GDB bignums.
	
Tue Nov  9 18:34:13 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* defs.h (gdb_file_put): Add parameter write.
	(gdb_file_put_method_ftype): New typedef.
	* utils.c (gdb_file_put, mem_file_put, tui_file_put,
 	null_file_put): Update.
	
	* utils.c (struct gdb_file): Add field magic.
	(gdb_file_new): Initialize.
	(gdb_file_data): Verify.

	* utils.c (mem_file_fputs): Delete.  Replaced by.
	(mem_file_write): New function. Rewrite mem_file.
	(mem_file_new): Update.
	
Tue Nov  9 17:51:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-sim.c (gdb_os_write_stdout): Use gdb_file_write.
	(gdb_os_flush_stdout): Flush gdb_stdtarg instead of gdb_stdout.

Tue Nov  9 15:33:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (procfs.o): Don't compile with -Werror for moment.
	* sol-thread.c (info_cb): Move assignments to outside of if
 	statement.
	(info_cb): Use paddr when printing addresses.

1999-11-08  Jim Blandy  <jimb@cygnus.com>

	* defs.h (ULONGEST_MAX, LONGEST_MAX): New definitions.
	* stabsread.c (read_huge_number): Parse and return LONGEST values.

1999-11-08  Mark Salter  <msalter@cygnus.com>

	* utils.c (floatformat_to_doublest): Fix conversion of denormals.

Mon Nov  8 20:14:13 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* remote.c (get_memory_read_packet_size): For moment limit read
 	size to PBUFSIZ.
	(putpkt_binary): Remove check on packet size.  Allocate ``cnt +
 	6'' characters for output buffer.
	(get_memory_packet_size): When packet size is ``fixed'' and the
 	size is zero, return MAX_REMOTE_PACKET_SIZE.  Check that packets
 	are at least MIN_REMOTE_PACKET_SIZE.
	(set_memory_packet_size): Print usage when ``args'' is NULL.

Mon Nov  8 18:18:07 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h, utils.c (gdb_file_deallocate): Delete.
	* corefile.c (memory_error): Use make_cleanup_gdb_file_delete.

	* defs.h, utils.c (gdb_file_init_astring): Delete.

	* defs.h, utils.c (tui_file_get_strbuf): Rename
 	gdb_file_get_strbuf.
	(tui_file_adjust_strbuf): Rename gdb_file_adjust_strbuf.
	* utils.c (error_stream, error_last_message): Update.
	
Mon Nov  8 16:28:00 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h, utils.c (gdb_fclose): Delete.
	* defs.h (make_cleanup_gdb_file): Declare.
	* utils.c (make_cleanup_gdb_file_delete, do_gdb_file_delete): New
 	functions.

	* symmisc.c (maintenance_print_symbols,
 	maintenance_print_psymbols, maintenance_print_msymbols): Use
 	make_cleanup_gdb_file_delete.
	* serial.c (do_serial_close): Use gdb_file_delete.

Mon Nov  8 14:16:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_file_write_ftype, set_gdb_file_write,
 	gdb_file_write): Declare.

	* utils.c (struct gdb_file): Add to_write member.
	(gdb_file_write, set_gdb_file_write): New functions.
	(gdb_file_new): Initialize the write method.
	(null_file_write): New function.
	(null_file_fputs, null_file_write): ``write'' calls ``fputs'' and
 	``fputs'' calls ``write'' when the other is implemented.
	(stdio_file_new): Initialize write method.
	(stdio_file_write): New function.

	* utils.c (putchar_unfiltered, fputc_unfiltered): Use
 	gdb_file_write.

Thu Nov  4 11:59:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (get_memory_packet_size, set_memory_packet_size,
 	build_memory_packet_size): New functions. Set / compute / update
 	the size of a memory read / write packet.
	(set_memory_read_packet_size, set_memory_write_packet_size): New
 	functions.  Verify changes to the memory read / write packet size.
	(prefered_memory_write_packet_size,
 	current_memory_write_packet_size, prefered_memory_read_packet_size,
 	current_memory_read_packet_size): New variables.
	(get_memory_read_packet_size, get_memory_write_packet_size): New
 	functions. Determine the current memory read/write packet size.  A
 	function is needed as ``current_register_packet_size'', a variable
 	is used in the calculation.
	(register_remote_packet_sizes, build_remote_packet_sizes):
 	Initialize packet sizes according the current architecture.
	(remote_fetch_registers, remote_write_bytes, remote_read_bytes,
 	build_remote_gdbarch_data): Update.
	(_initialize_remote): Add the commands ``set remote
 	memory-read-packet-size'' and ``set remote
 	memory-write-packet-size''.  Deprecate ``set remotepacketsize''.

Sun Nov  7 18:09:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.h, target.c (target_load): Replace macro with a function.

	* config/i960/tm-nindy960.h (ADDITIONAL_OPTION_HANDLER): Rewrite
 	replacing SET_TOP_LEVEL with catch_command_errors.
	(nindy_open): Add extern declaration.

	* top.h (top_level_val, SET_TOP_LEVEL): Delete.
	* defs.h (catch_command_errors_ftype, catch_command_errors): Add
 	declarations.
	* top.c (struct captured_command_args): Declare.
	(do_captured_command, catch_command_errors): New functions. Call
 	the command function via catch_errors.
	(catch_errors): Add more comments.
	
	* main.c (struct captured_main_args): Define.
 	(captured_main): New.  Rewrite main.  Replace SET_TOP_LEVEL with
 	calls to catch_command_errors. Delete calls to do_cleanups which
 	are now handled by catch_errors. Call the command loop via
 	captured_command_loop and catch_errors.
	(main): Move code body to captured_main.  Call captured_main via
 	catch_errors.
	(captured_command_loop): New function. Wrap call to command_loop.

1999-11-05  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* procfs.c (unconditionally_kill_inferior) (init_procinfo)
 	(create_procinfo) (procfs_exit_handler) (proc_set_exec_trap)
 	(do_attach) (do_detach) (procfs_wait) (set_proc_siginfo)
 	(procfs_resume) (info_proc_mappings)
 	(modify_run_on_last_close_flag) (procfs_lwp_creation_handler)
 	(procfs_thread_alive): Remove unused variables, conditionalize
 	vars declarations to eliminate compiler warnings.

Fri Nov  5 16:32:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* inferior.h (CALL_DUMMY_ADDRESS, CALL_DUMMY_START_OFFSET,
 	CALL_DUMMY_BREAKPOINT_OFFSET, CALL_DUMMY_LENGTH,
 	CALL_DUMMY_STACK_ADJUST, CALL_DUMMY_WORDS,
 	SIZEOF_CALL_DUMMY_WORDS, PUSH_DUMMY_FRAME, FIX_CALL_DUMMY,
 	STORE_STRUCT_RETURN), d10v-tdep.c (print_insn), d30v-tdep.c
 	(print_insn), target.h (SOFTWARE_SINGLE_STEP): Call internal_error
 	instead of abort.

	* utils.c (stdio_file_delete, stdio_file_flush, stdio_file_fputs,
 	stdio_file_isatty, tui_file_delete, tui_file_isatty,
 	tui_file_rewind, tui_file_put, gdb_file_init_astring,
 	gdb_file_get_strbuf, gdb_file_adjust_strbuf): Call internal_error
 	instead of error.

1999-11-04  Kevin Buettner  <kevinb@cygnus.com>

	* remote.c (build_remote_gdbarch_data): Set remote_address_size...
	(_initialize_remote) ...but don't set it here.  Also, tie
	remote_address_size to the target architecture via call to
	register_gdbarch_swap().

1999-11-04  Jeff Holcomb  <jeffh@cygnus.com>

	* remote-rdp.c (send_rdp): Fix typo.

1999-11-04  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* breakpoint.c (commands_command): remove unprotected ref to 
	args pointer (which may be null).

1999-11-04  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c (print_return_value): New function. Print return value
 	from finish command.
	(finish_command_continuation): Call print_return_value().
	(finish_command): Ditto.

1999-11-04  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infrun.c (handle_inferior_event): Add calls to print_stop_reason()
	for end of stepping range cases.
	
Thu Nov  4 17:46:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* event-loop.c (gdb_do_one_event): Delete SET_TOP_LEVEL call.
  	Move error code to start_event_loop.
	(start_event_loop): Call gdb_do_one_event via catch_errors.
  	Handle caught errors.

Thu Nov  4 17:36:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* breakpoint.c (get_number): Delete static declaration.

1999-11-03  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* breakpoint.c (map_breakpoint_numbers): use a match count
	instead of a goto.

1999-11-03  Nick Clifton  <nickc@cygnus.com>

	* config/mcore/tm-mcore.h (TARGET_BYTE_ORDER_DEFAULT): Change to
	little endian.

1999-11-02  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* target.h (target_new_objfile) replace macro with function pointer
	hook.  Any module needing notification of new objfiles may claim
	this hook.  Multiple notification clients must cooperate by saving
	the previous pointer (if any) and calling it.
	* sol-thread.c (_initialize_sol_thread): point new_objfile hook at
	sol_thread_new_objfile.  Save old pointer if any.
	(sol_thread_new_objfile): call old owner of event hook if any.
	* hpux-thread.c (_initialize_hpux_thread, hpux_thread_new_objfile):
	ditto.
	* linux-thread.c (_initialize_linux_thread, linux_thread_new_objfile):
	ditto.
	symfile.c (symbol_file_add, clear_symtab_users) call the new
	function pointer hook, instead of the macro.
	* config/sparc/nm-sun4sol2.h: remove define of target_new_objfile.
	* config/pa/nm-hppah.h: ditto.
	* config/i386/nm-i386sol2.h: ditto.
	* config/i386/nm-linux.h: ditto.
	
1999-11-02  Tom Tromey  <tromey@cygnus.com>

	* NEWS: Mention breakpoint ranges.

1999-11-02  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* rdi-share/devsw.c (openLogFile): Change a call to setlinebuf()
	to an equivalent call to setvbuf() to prevent an unresolved
	reference when building on cygwin.

1999-11-02  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infrun.c (inferior_stop_reason): New enum, explicitly name the
 	resons for which the inferior stops.
	(handle_inferior_event): Case TARGET_WAITKIND_EXITED: replace
 	printf's with call to print_stop_reason(). Case
 	TARGET_WAITKIND_SIGNALLED: Same.  When stopped by random signal:
 	Same.
	(print_stop_reason): New static function. Print relevant messages
 	when stopping.

1999-11-02  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* rdi-share/Makefile.in: Rename dependency from bytesex.o to
	angel_bytesex.o.

1999-11-02  Fernando Nasser  <fnasser@totem.to.cygnus.com>

        * kod.c: Remove prototype for show_kod() which is no longer used.

1999-11-01  Michael Snyder <msnyder@cygnus.com>
	    Tom Tromey  <tromey@cygnus.com>

	* tracepoint.h (get_tracepoint_by_number): Updated declaration.
	* tracepoint.c (get_tracepoint_by_number): Added `multi_p'
	argument.  Now uses get_number_or_range and get_number.
	(trace_pass_command): Allow a tracepoint range.
	* breakpoint.h (get_number, get_number_or_range): Declare.
	* breakpoint.c (get_number_trailer): New function.
	(get_number): Rewrote to use get_number_trailer.
	(get_number_or_range): New function.
	(condition_command): Check `get_number' return value.
	(commands_command): Likewise.
	(ignore_command): Likewise.
	(map_breakpoint_numbers): Use get_number_or_range.

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* remote-rdi.c (_initialize_remote_rdi): Make log commands
	subcommands of maintenance. Remove improper identation from
	command documentation.

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	From Grant Edwards <grante@visi.com>:
	* rdi-share/etherdrv.c (fetch_ports): Print out additional TCP/IP
	port information in ethernet driver if the DEBUG flag is set.
	* rdi-share/hostchan.c (Adp_addToQueue): Changed #if statement in
	hostchan.c to avoid compiler complaint when DEBUG macro was
	undefined.
	* rdi-share/unixcomm.c (Unix_ReadSerial): Print system error code
	if read() system call fails.

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* rdi-share/bytesex.h: Deleted. Conflicts with a system header file
	on some systems like Linux Red Hat 5.2.
        * rdi-share/angel_bytesex.h: New file. Replaces the above.
        * rdi-share/bytesex.c: Deleted. Name changed to match the header
	mentioned above (this is the implementation file).
        * rdi-share/angel_bytesex.c: New file. Replaces the above.
        * rdi-share/Makefile.am: Reflect above changes.
        * rdi-share/Makefile.in: Reflect above changes.

1999-11-01  Jimmy Guo  <guo@cup.hp.com>

	* annotate.c (breakpoints_changed, annotate_ignore_count_change,
 	annotate_stopped): Provide annotation for breakpoint ignore_count
 	changes but only provide once at annotate_stopped time for
 	sucessive ignore_count triggered breakpoint changes, to make GUIs
 	happy yet lazy.
	* annotate.h (annotate_ignore_count_change): Declare.
	* breakpoint.c (bpstat_stop_status): Call
	annotate_ignore_count_change when ignore_count changes.

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	From Grant Edwards <grante@visi.com>:
	* rdi-share/ardi.c (HandleStoppedMessage): Changed code that
	handles the "stop" message so that unrecognized errors are
	returned as "Error" rather than "NoError".  The old code resulted
	in some error conditions not being reported to the user.

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	From Grant Edwards <grante@visi.com>:
	* remote-rdi.c (arm_rdi_open): Added a call to Adp_CloseDevice()
	before attempting to open a connection.  This allows the user to
	issue the "target rdi" command multiple times (in case the user
	needs to change options or re-initialize the link).

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	From Grant Edwards <grante@visi.com>:
	* rdi-share/endian.h: Deleted.  Name clash with
	/usr/include/endian.h. This was causing the wrong  byte order to
	be used by htons() in the RDI Ethernet driver.
	* rdi-share/angel_endian.h: New file.  Replaces the above.
	* rdi-share/ardi.c: Replace include to reflect the above change.
	* rdi-share/etherdrv.c: Ditto.
	* rdi-share/hsys.c: Ditto.
	* rdi-share/msgbuild.c: Ditto.
	* rdi-share/params.c: Ditto.
	* rdi-share/rx.c: Ditto.
	* rdi-share/tx.c: Ditto.
        * rdi-share/Makefile.am: Reflect above changes.
        * rdi-share/Makefile.in: Reflect above changes.

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	From Grant Edwards <grante@visi.com>:
        * remote-rdi.c (_initialize_remote_rdi): Added command
	rdilogenable. Allows the user to log ADP packets that are
	exchanged between gdb and the target.  Both the raw packets are
	shown and some minimal decoding is attempted. Default state is
	disabled.
	(_initialize_remote_rdi): Added command rdilogfile. Allows the
	user to specify the filename to which the ADP packet log is to be
	written. Default state is "rdi.log".
	(rdilogenable_command): New function. Related to rdilogenable.
	(rdilogfile_command): New function. Related to rdilogfile.
	* rdi-share/devsw.c (openLogFile, closeLogFile,
	DevSW_SetLogEnable, DevSW_SetLogfile, dumpPacket): New
	functions. Implement logging.
	(DevSW_Read): Log if requested.
	(DevSW_Write): Log if requested.
	* rdi-share/devsw.h: Add prototypes for DevSW_SetLogfile and
	DevSW_SetLogEnable.
	* rdi-share/hostchan.c (Adp_SetLogEnable, Adp_SetLogfile): New
	functions.  Related to rdilogenable and rdilogfile.
	* rdi-share/hostchan.h: Add prototypes for the above functions.

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

        From Grant Edwards <grante@visi.com>:
        * remote-rdi.c (arm_rdi_open): Added code to split the arguments
        to the 'target rdi' command at the first space.  The first word is
        passed to Adp_OpenDevice as the device name, the tail is passed as
        the "arguments" parameter.  This allows user specified baud rates
        -- among other things that still need to be documented [e.g. (gdb)
        target rdi /dev/ttyS1 19200]. NB: With very limited testing, the
        ARM Embedded-ICE seems to run at 19.2K (though it is reported to
        be unreliable above 9600), and the EPI Jeeni seems to run at
        38.4K.

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	From Grant Edwards <grante@visi.com>:
	* remote-rdi.c (_initialize_remote_rdi): Added the boolean
	set/show variable rdiromatzero. Should be set to true if the
	target has ROM at address 0.  If true, then gdb will not tell the
	target to trap fetches to interrupt vectors (which are located at
	address 0).  Using the Angel monitor, attempting to set
	breakpoints in ROM is an error.  Using JTAG debugging of the
	ARM7TDMI, attempting to set more than two breakpoints in ROM is an
	error. Default state is false (vectors will be trapped) -- used to
	be hardwired false.

1999-11-01  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	From Grant Edwards <grante@visi.com>:
	* remote-rdi.c (_initialize_remote_rdi): Added the boolean
	set/show variable rdiheartbeat. This enables or disables ADP
	link-check "heartbeat" packets sent by the host to the target.
	Heartbeat packets can cause both the ARM Embedded-ICE and the EPI
	Jeeni to malfunction: If a heartbeat packet is received by the
	target while it is sending a packet, that packet will be aborted,
	and the ADP protocol engine then gets very confused. Default state
	is off -- used to hardwired on.

1999-10-29  Kevin Buettner  <kevinb@cygnus.com>

	* i386-linux-nat.c (dummy_sse_values): Also define for systems
	without PTRACE_GETXFPREGS.

1999-10-29  Jim Blandy  <jimb@zwingli.cygnus.com>

	Hardware watchpoint fix from Eli Zaretskii <eliz@gnu.org>:
	
	* breakpoint.c (insert_breakpoints): Fetch the value of the
 	expression we need to watch.  If it's a lazy memory lvalue, then
	we need to fetch it now, before we start the inferior again.
	(insert_breakpoints, remove_breakpoint, bpstat_stop_status,
 	can_use_hardware_watchpoint): Only those values representing
 	memory we actually fetched need to be watched.

1999-10-29  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.h (bpstat_print): Return 'enum print_stop_action',
 	not 'int'.

1999-10-29  Jim Blandy  <jimb@zwingli.cygnus.com>

	* acconfig.h: Fix entries for HAVE_STRUCT_SAVE_STATE_T,
 	HAVE_STRUCT_MEMBER_SS_WIDE, and HAVE_PTRACE_GETXFPREGS.
	* config.h.in: Regenerated.
	
1999-10-28  Jim Blandy  <jimb@zwingli.cygnus.com>

	Fixes for warnings from Andreas Jaeger <aj@suse.de>.
	* linux-thread.c (linuxthreads_sig_restart,
	linuxthreads_sig_cancel, linuxthreads_sig_debug): Add missing
	initializers to avoid gcc warnings.
	(resume_thread): Add braces as recommended by gcc -Wparentheses.
	(stop_thread): Likewise.
	(linuxthreads_wait): Likewise.
	(linuxthreads_find_trap): Likewise.

1999-10-28  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c: Fix typo.

1999-10-28  Jim Blandy  <jimb@cygnus.com>

	* gdbtypes.c (init_simd_type): The upper bound to
	create_range_type is inclusive, not exclusive.

	Add preliminary support for the Pentium-III's Streaming SIMD
	Extensions --- specifically, the ability to read the XMM
	registers.
	* Configure.in: Check for PTRACE_GETXFPREGS, and #define
	HAVE_PTRACE_GETXFPREGS if we have it.
	* acconfig.h: Add entry for HAVE_PTRACE_GETXFPREGS.
	* configure, config.in: Regenerated.
	* config/i386/tm-linux.h (HAVE_SSE_REGS): #define, iff the
	configure script #defined HAVE_PTRACE_GETXFPREGS.
	(REGISTER_VIRTUAL_TYPE): Provide the proper types for the pointer
	registers and the SSE registers. 
	* i386-linux-nat.c (GETREGS_SUPPLIES, GETFPREGS_SUPPLIES,
	GETXFPREGS_SUPPLIES): New macros.
	(have_ptrace_getxfpregs): New variable.
	(FPREGSET_T_FPREG_ADDR): Renamed from FPREGSET_T_FPREG_OFFSET.
	(supply_fpregset, convert_to_fpregset): Callers changed.
	(supply_xfpregset, convert_to_xfpregset, fetch_xfpregs,
	store_xfpregs, dummy_sse_values): New functions.
	(fetch_inferior_registers, store_inferior_registers): Use the
	*_SUPPLIES macros to decide how to fetch a given register.  Use
	{fetch,store}_xfpregs and dummy_sse_values to provide access to
	the SSE registers, on systems where they are present.

1999-10-28  Kevin Buettner  <kevinb@cygnus.com>

	* gdbserver/gdbreplay.c (config.h, errno.h): Include.
	(perror_with_name): Don't declare sys_nerr, sys_errlist, or errno
	when STDC_HEADERS is defined.
	* gdbserver/utils.c (STDC_HEADERS): Likewise.

	* gdbserver/low-hppabsd.c, gdbserver/low-linux.c,
	gdbserver/low-lynx.c, gdbserver/low-sim.c, gdbserver/low-sparc.c,
	gdbserver/low-sun3.c (my_registers): Declare.
	(registers): Changed from array type to pointer type in order
	to match declaration in inferior.h in main gdb sources.
	* gdbserver/server.h (registers): Likewise.
	* gdbserver/remote-utils.c (outreg): Removed declaration of
	registers[].

	* gdbserver/low-linux.c (fetch_register): Changed PTRACE_PEEKUSR to
	PTRACE_PEEKUSER.  [Note the missing 'E'.]
	(store_inferior_registers): Likewise for PTRACE_POKEUSER.

	* gdbserver/low-linux.c (sys/ptrace.h): Move include to
	avoid conflict with #defines coming from <sys/user.h>.
	(sys/reg.h): Only include when HAVE_SYS_REG_H is defined.
	(PTRACE_XFER_TYPE): Provide a default type in case
	the target doesn't define it.
	(fetch_register, read_inferior_memory, write_inferior_memory):
	Use PTRACE_XFER_TYPE instead of int for ptrace() transfers.
	(I386_GNULINUX_TARGET): Use #ifdef with this symbol instead
	of assuming it's an x86 target when it's not a m68k target.
	(i386_register_raw_size, i386_register_byte): Define these arrays
	to match other changes that've been occuring to the x86 target
	in the main gdb sources.
	(initialize_arch): New (static) function for doing target arch
	specific initializations.

	* gdbserver/server.h (MAXBUFBYTES, PBUFSIZ): New defines
	[actually stolen from remote.c].
	* gdbserver/remote-utils.c (putpkt): Use PBUFSIZ to make
	sure that buffer is big enough.
	* gdbserver/server.c (main): Ditto.

	* gdbserver/remote-utils.c (outreg): Allow register numbers
	bigger than 255.
	(prepare_resume_reply):  Provide alternate mechanism,
	GDBSERVER_RESUME_REGS, for defining list of registers to send
	to gdb.
	* gdbserver/Makefile.in (INTERNAL_CFLAGS): Swapped order of
	INCLUDE_CFLAGS and BFD_CFLAGS to ensure that gdb's config.h
	gets found before bfd's config.h.  Also added -DGDBSERVER
	switch.
	(INCLUDE_CFLAGS): Added -I.. .

1999-10-27  Nick Clifton  <nickc@cygnus.com>

	* arm-tdep.c (THUMB_BE_BREAKPOINT): Change to 0xbebe.
	(THUMB_LE_BREAKPOINT): Change to 0xbebe.

Mon Oct 25 18:22:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c: Document future of compare_sections_command.
	(remote_insert_breakpoint, remote_remove_breakpoint,
 	remote_insert_watchpoint, remote_insert_watchpoint,
 	remote_remove_watchpoint, remote_insert_hw_breakpoint,
 	remote_remove_hw_breakpoint): Use alloca instead of GCC's dynamic
 	array feature.

Mon Oct 25 18:08:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (REGISTER_GDBARCH_SWAP): Define.
	* gdbarch.sh: Update.

Sat Oct 23 16:39:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (initialize_current_architecture): Make ``choice''
 	const.

1999-10-22  Tom Tromey  <tromey@cygnus.com>

	* gdbarch.sh: Updated for gdbarch.[ch] changes.
	* top.c (gdb_init): Call initialize_current_architecture.
	* gdbarch.h (initialize_current_architecture): Declare.
	* gdbarch.c (initialize_current_architecture): New function.

1999-10-21  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* utils.c (chars_per_line): fix typo in comment.

1999-10-21  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.h (bp_print_how): New enum, used for deciding how to
 	print bpstat information when we stop, instead of having 3
 	different functions.
	(struct bpstat): Change print_it field to be an enum instead of a
 	function pointer.

	* breakpoint.c (print_it_typical): New name for print_it_normal().
	(print_bp_stop_message): New function. High level routine for
 	printing of why we stopped.
	(bpstat_print): Call print_bp_stop_message instead of using the
 	print_it function pointer.
	(print_it_done, print_it_noop): Delete these functions.
	
1999-10-21  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.c (print_it_normal): Reorganize into a switch
 	statement.

1999-10-21  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* Makefile.in (event-top.o): Add dependency on target.h.
	* event-top.c: Make dependency on target.h explicit.

	* breakpoint.c (bpstat_print): Clean up logic. Remove recursion.
	(catch_exec_command_1): Surround with appropriate ifdef's,
	to avoid compiler warnings.
	(catch_fork_command_1): Ditto.

1999-10-20  Jim Blandy  <jimb@cygnus.com>

	* Makefile.in (dwarf2read.o): Note that this depends on bfd/elf-bfd.h.
	(elf_bfd_h): New variable.

1999-10-19  Jim Blandy  <jimb@cygnus.com>

	* config/i386/tm-i386.h (REGISTER_NAMES): Change names of FPU
	instruction and operand pointer registers to improve consistency,
	following J. T. Conklin's suggestions.

1999-10-18  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.h: Change return type of field print_it of struct
 	bpstats to enumeration print_stop_action.
	Define new enumeration print_stop_action.

	* breakpoint.c (print_it_normal): Change return type to
 	enumeration type print_stop_action. Handle bp_shlib_event here
 	instead of in normal_stop().
	(bpstat_print): Change return type to enumeration type
 	print_stop_action.
	(print_it_done): Ditto.
	(print_it_noop): Ditto.
	
	* infrun.c (is_internal_shlib_eventpoint): Delete this function.
	(stopped_for_internal_shlib_event): Delete.
	(normal_stop): Move logic to handle bp_shlib_event from here to
 	print_it_normal(). Use switch to handle return value from
 	bpstat_print().

Mon Oct 18 17:32:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* symfile.c (generic_load): Rewrite.  Make the size of each
 	chunk/block write a run-time option. Check for quit_flag.
	Use target_write_memory_partial for downloads.

1999-10-18  Jim Blandy  <jimb@cygnus.com>

	Change Linux x86 register support to use the new tm-i386.h layout.
	* config/i386/tm-linux.h (HAVE_I387_REGS): #define this, so we get
	the full set of FP register definitions from tm-i386.h.
	(REGISTER_RAW_SIZE, REGISTER_NAMES, REGISTER_BYTES, REGISTER_BYTE,
	MAX_REGISTER_VIRTUAL_SIZE, MAX_REGISTER_RAW_SIZE, NUM_REGS,
	NUM_FREGS): Remove #undefs and subsequent redefinitions: we're
	using the values from tm-i386.h now.
	(FPSTART_REGNUM, FPCONTROL_REGNUM, FPSTATUS_REGNUM, FPTAG_REGNUM,
	FPDATA_REGNUM, FPEND_REGNUM, FPENV_BYTES, FPREG_RAW_SIZE,
	FPREG_BYTES): Deleted.
	(TARGET_LONG_DOUBLE_BIT): Deleted.
	(REGISTER_CONVERTIBLE, REGISTER_CONVERT_TO_VIRTUAL,
	REGISTER_CONVERT_TO_RAW): Redefine these only if LD_I387 is #defined.
	* i386-linux-nat.c (convert_to_gregset, convert_to_fpregset,
	FPREGSET_T_FPREG_OFFSET): New functions and macros.
	(supply_gregset, fill_gregset, supply_fpregset,
	fill_fpregset, fetch_fpregs, store_fpregs, fetch_regs,
	store_regs, fetch_inferior_registers, store_inferior_registers):
	Adjusted to use new macros from tm-i386.h.
	
	* config/i386/tm-i386.h: Provide a decent x86 FPU description here,
	so that the various i386 targets can share more FPU handling code.
	(NUM_GREGS): New macro.
	(NUM_SSE_REGS): New macro, dependent on HAVE_SSE_REGS
	(NUM_FREGS): Depend on HAVE_I387_REGS.
	(NUM_REGS, REGISTER_BYTES): Define in terms of NUM_GREGS,
	NUM_FREGS, and NUM_SSE_REGS.
	(MAX_NUM_REGS): New macro.
	(REGISTER_NAMES): Expand name list with FPU control registers and
	SSE registers.
	(FP7_REGNUM, FCTRL_REGNUM, FSTAT_REGNUM, FTAG_REGNUM, FCS_REGNUM,
	FCOFF_REGNUM, FDS_REGNUM, FDOFF_REGNUM, FOP_REGNUM,
	FIRST_FPU_CTRL_REGNUM, LAST_FPU_CTRL_REGNUM): New macros, more
	fully describing the FPU register set.
	(XMM0_REGNUM, XMM7_REGNUM, MXCSR_REGNUM): New macros, describing
	the SSE register set.
	(IS_FP_REGNUM, IS_SSE_REGNUM, FPU_REG_RAW_SIZE, SIZEOF_GREGS,
	SIZEOF_FPU_REGS, SIZEOF_FPU_CTRL_REGS, SIZEOF_SSE_REGS): New
	convenience macros.
	(REGISTER_BYTE, REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE): Turn
	these into tables, since the register sizes are pretty irregular.
	(i386_register_byte, i386_register_raw_size,
	i386_register_virtual_size): New extern declarations.
	(TARGET_LONG_DOUBLE_BIT): Define.
	(MAX_REGISTER_RAW_SIZE): Bump to 16, for the SSE registers.
	(REGISTER_VIRTUAL_TYPE, REGISTER_CONVERTIBLE,
	REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW): New macros
	for handling floating-point registers.
	(i387_to_double, double_to_i387): New extern declarations.
	* i386-tdep.c (i386_register_byte, i386_register_raw_size,
	i386_register_virtual_size): New arrays.
	(_initialize_i386_tdep): Initialize i386_register_byte and
	i386_register_virtual_size.

	* i386-tdep.c (_initialize_i386_tdep): Move new_cmd to a block
	created specially for its use.

Mon Oct 18 23:36:58 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* symfile.c (generic_load): Cleanup the validate code - remove
 	#ifdef, use paddr to print address.
	(validate_download): Static, replace VALIDATE_DOWNLOAD
	
	* symfile.c (generic_load): Use strtoul to scan the optional load
 	offset.  Allocate a filename of the correct size.

Mon Oct 18 17:32:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* symfile.c (generic_load): Don't filter output. Use
 	print_transfer_performance for summary. Use paddr for addresses.
	(print_transfer_performance): New function.  Includes write count.
	(report_transfer_performance): Call
 	print_transfer_performance. Deprecate.

	* defs.h (print_transfer_performance): Add declaration.
	(generic_load): Move declaration to here.
	* symfile.h (generic_load): From here.

Mon Oct 18 16:29:52 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* remote.c (remote_write_bytes): Re-write.  Transfer a single
 	packet and then return the that packets byte size.

Sun Oct 17 15:09:00 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_console_output): Flush gdb_stdtarg after
 	processing an ``O'' packet.
	* remote.h (remote_console_output): Strip PARAMS.
	
Sun Oct 17 15:12:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.c (target_xfer_memory_partial): New function. Simple
 	implementation of partial memory reads.
	(target_read_memory_partial): New function.  Replaces old
 	target_read_memory_partial.
	(target_write_memory_partial): New function.
	* target.h: Update.

	* valprint.c (partial_memory_read): New function, based on old
 	memory_read_partial.  Implement partial memory reads the way that
 	val_print_string likes.
	(val_print_string): Use partial_memory_read.

Sun Oct 17 13:58:56 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (ui_load_progress_hook): Add declaration.
	* dsrec.c (ui_load_progress_hook): Delete extern declaration.
	
	* symfile.c (ui_load_progress_hook): Make first argument const.
	(generic_load): Don't cast the result of bfd_get_section_name.
  	Replace ``sect'' with ``sect_name'', use consistently.

1999-10-15  Jim Blandy  <jimb@cygnus.com>

	Add beginnings of support for SIMD register types.
	* gdbtypes.c (init_simd_type): New function for building
	types for registers consisting of arrays of objects.
	(builtin_type_v4sf): New built-in type.
	(build_gdbtypes): Initialize it.
	(_initialize_gdbtypes): Arrange for gdbarch swapping.
	* gdbtypes.h (builtin_type_v4sf): Add external decl.

Fri Oct 15 18:20:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-hms.c: Commented out H8 code.

Fri Oct 15 17:46:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* dcache.c (dcache_p): Rename variable remote_dcache.  Make
 	static.
	(_initialize_dcache): Fix description of ``set remotecache''.
  	Cache is OFF by default.

1999-10-13  Jim Blandy  <jimb@cygnus.com>

	* valops.c (value_push): Don't forget to initialize container_len.

Wed Oct 13 17:58:20 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (tui_file_flush): Don't call flush_hook.  Don't try to
 	flush ``astring''.
	* gdb-events.sh: Update
	* top.c (flush_hook): Delete.

1999-10-13  Kevin Buettner  <kevinb@cygnus.com>

	* mem-break.c (memory_insert_breakpoint,
	memory_remove_breakpoint): Added missing return statements.

Wed Oct 13 20:53:42 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (mem_fileopen, mem_file_delete, mem_file_new,
 	mem_file_rewind, mem_file_put, mem_file_fputs): New functions.
	* defs.h (mem_fileopen): Declare.
	
1999-10-13  Kevin Buettner  <kevinb@cygnus.com>

	* mem-break.c (default_memory_insert_breakpoint): Renamed from
	memory_insert_breakpoint.
	(default_memory_remove_breakpoint): Renamed from
	memory_remove_breakpoint.
	(memory_insert_breakpoint, memory_remove_breakpoint,
	MEMORY_INSERT_BREAKPOINT, MEMORY_REMOVE_BREAKPOINT):  New
	wrappers.
	* target.h (default_memory_remove_breakpoint,
	default_memory_insert_breakpoint): Added declarations.
	* gdbarch.sh (MEMORY_INSERT_BREAKPOINT, MEMORY_REMOVE_BREAKPOINT):
	New methods.
	* gdbarch.h, gdbarch.c (MEMORY_INSERT_BREAKPOINT,
	MEMORY_REMOVE_BREAKPOINT, gdbarch_memory_insert_breakpoint,
	gdbarch_memory_remove_breakpoint, set_gdbarch_memory_insert_breakpoint,
	set_gdbarch_memory_remove_breakpoint) : Generated from gdbarch.sh.

Wed Oct 13 19:15:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h: Remove PARAMS from all declarations.  Re-indent.  Clean
 	up the gdb_file declarations.

Tue Oct 12 12:19:07 1999  David Taylor  <taylor@texas.cygnus.com>

	* i386-linux-nat.c (supply_fpregset, fill_fpregset): copy
	from/to start of fpregsetp not start of st_space as the first
	stuff we copy is the FP control registers not the actual FP values.

1999-10-12  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* eval.c (evaluate_subexp_standard): Fix gdb invocation of
	inferior C functions when debugging C++ code.
	* valops.c (find_overload_match): Ditto.
	* symtab.c (make_symbol_overload_list): Ditto.

1999-10-11  Jim Blandy  <jimb@zwingli.cygnus.com>

	* config/pa/tm-hppa.h (SYMBOLS_CAN_START_WITH_DOLLAR): It's not
	enough to #define this; you have to give it a non-zero value.

1999-10-11  Jim Blandy  <jimb@cygnus.com>

	Fix from Jim Kingdon <kingdon@redhat.com>, with tweaks to make it
	gdbarch- and bigendian-friendly:
	* valops.c (PARM_BOUNDARY): If not #defined, default to zero.
	(value_push): If PARM_BOUNDARY is not zero, align arguments to
	that boundary.
	* config/i386/tm-i386.h: Define PARM_BOUNDARY.

Mon Oct 11 14:23:55 1999  Fred Fish  <fnf@cygnus.com>

	* config/mips/tm-irix3.h (PS_REGNUM): Don't undef if we aren't
	going to redefine it to something else.

1999-10-11  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarfread.c (read_func_scope): Don't try to set main_func_*;
	we handle that in blockframe.c:inside_main_func.
	* dwarf2read.c (read_func_scope): Likewise.
	(dwarf2_add_field, dwarf2_add_member_fn): Get member function name
	directly, not from mangled name.
	(skip_member_fn_name): Lose.

Mon Oct 11 12:24:52 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (enum serial_rc): Clarify SERIAL_TIMEOUT and
 	restrictions on TIMEOUT in ASYNC mode.

	* serial.c (serial_readchar): Check for invalid timeout when in
 	async mode.  Disable test.

Thu Oct  7 17:20:01 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* monitor.c (monitor_printable_string): Add length argument. Don't
 	return final string length.
	(monitor_printf_noecho, monitor_printf, monitor_expect): Update.
	(monitor_error): Pass real_len to monitor_printable_string.
	(monitor_error): Rewrite. Replace printf fmt string parameter with
 	function name and message parameters.
	(monitor_read_memory_single, monitor_read_memory): Update.

1999-10-07  Stan Shebs  <shebs@andros.cygnus.com>

	* main.c (print_gdb_help): Fix bug reporting address.
	* gnu-regex.h, gnu-regex.c: Ditto.

1999-10-07  Jim Blandy  <jimb@zwingli.cygnus.com>

	* parse.c (SYMBOLS_CAN_START_WITH_DOLLAR): New macro,
	whose value can be overridden by target files.
	(write_dollar_variable): Don't check the symbol table for
	identifiers beginning with `$' unless
	SYMBOLS_CAN_START_WITH_DOLLAR is non-zero.
	* config/pa/tm-hppa.h (SYMBOLS_CAN_START_WITH_DOLLAR): Define.
	* doc/gdbint.texinfo (SYMBOLS_CAN_START_WITH_DOLLAR): Document.

	Remove all traces of the BINOP_SCOPE operator.  It's never
 	generated, and not implemented.
	* expression.h (enum exp_opcode): Delete BINOP_SCOPE.
	* c-lang.c (c_op_print_tab): Delete entry for BINOP_SCOPE.
	* eval.c (evaluate_subexp_standard): Doc fix.
	* expprint.c (op_name): Remove case for BINOP_SCOPE.
	(dump_subexp): Same.

	* dwarf2read.c (dwarf2_const_value): Treat DW_FORM_data1,
	DW_FORM_data2, DW_FORM_data4, and DW_FORM_data8 as signed values,
	since that's what read_var_value will do anyway.

1999-10-07  Fred Fish  <fnf@cygnus.com>

	* objfiles.h (struct objfile): Delete is_solib member, now handled
	by OBJF_SHARED bit in struct objfile's flags.
	* objfiles.c (objfile_purge_solibs): Check OBJF_SHARED bit in flags
	instead of old is_solib int member in objfile struct.

	* objfiles.c (allocate_objfile): Remove is_solib arg.  Now passed
	as a bit in combined flags arg.
	* symfile.c (symbol_file_add): Ditto.
	* objfiles.h (allocate_objfile): Adjust prototype after removal
	of is_solib arg.
	* symtab.h (symbol_file_add): Ditto.

	* cxux-nat.c (add_shared_symbol_files): Remove zero passed to
	symbol_file_add in old is_solib arg, defaults to zero now in
	flags.
	* irix5-nat.c (symbol_add_stub): Ditto.
	* remote-mm.c (mm_load): Ditto.
	* remote-udi.c (udi_load): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* symfile.c (symbol_file_command): Ditto.
	(add_symbol_file_command): Ditto.

	* coff-solib.c (coff_solib_add): Call symbol_file_add with
	OBJF_SHARED in flags bit, rather than 1 in old is_solib
	arg.
	* osfsolib.c (symbol_add_stub): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

	* objfiles.c (allocate_objfile): Remove old args "mapped" and
	"user_loaded".  Replaced with new arg "flags" containing specific
	If global var mapped_symbol_files is nonzero
	then set OBJF_MAPPED in flags arg.  Check for OBJF_MAPPED bit in
	flags where we used to check mapped arg.
	Pass flags to open_mapped_file instead of mapped arg.
	Ensure that OBJF_MAPPED bit is reset in flags when the objfile
	is not mapped.  Add passed flags bits to objfile's flags bits.
	(open_mapped_file): Replace "mapped" arg with new "flags" arg.
	Adjust prototype.  Pass flags to open_existing_mapped_file.
	(open_existing_mapped_file): Replace "mapped" arg with new "flags".
	Check flags for OBJF_MAPPED.
	* objfiles.h (allocate_objfile): Adjust prototype.
	* rs6000-nat.c (add_vmap): Pass zero for combined flags, rather
	than separate zero ints for old "mapped" and "user_loaded" flags.
	* symfile.c (symbol_file_add): Pass allocate_objfile combined flags
	rather than individual mapped and user loaded bits.

	* symfile.c (symbol_file_add): Delete user_loaded arg.
	* symtab.h (symbol_file_add): Adjust prototype for deleted
	user_loaded arg.
	* objfiles.h (struct objfile): Delete user_loaded member.
	(OBJF_USERLOADED): New flag bit to replace user_loaded.

	* symfile.c (symbol_file_command): Add OBJF_USER_LOADED to flags
	passed to symbol_file_add.  Delete previous passing of explicit 1
	for user_loaded.
	(add_symbol_file_command): Ditto.

	* coff-solib.c (coff_solib_add): No longer pass zero for user loaded,
	now defaults to zero in flags.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* irix5-nat.c (symbol_add_stub): Ditto.
	* osfsolib.c (symbol_add_stub): Ditto.
	* remote-mm.c (mm_load): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* remote-udi.c (udi_load): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

Thu Oct  7 19:24:05 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (monitor.o): Allow monitor.o to be compiled with
 	-Werror.

	* monitor.c (monitor_debug_p): New variable. Replaces macro.
	(EXTRA_RDEBUG): Delete.  Update all uses.
	(monitor_debug): New function.  Replaces macro.
 	(RDEBUG): Delete macro.  Update all uses.
 	debug output to gdb_stdlog and not the console.

	* monitor.c: Fix printf formating.  Replace printf calls with
 	fprintf_unfiltered.

1999-10-06  Stan Shebs  <shebs@andros.cygnus.com>

	* MAINTAINERS: Switch ARM target maintenance from Elena
	Zannoni to Jim Ingham.

1999-10-06  Frank Ch. Eigler  <fche@cygnus.com>

	* remote.c (hexnumnstr): New function.  Allow setting of width.
	(hexnumstr): Call the above.
	(remote_write_bytes): Fill in X-protocol address field more
	reliably.

1999-10-06  Fred Fish  <fnf@cygnus.com>

	* xcoffread.c (xcoff_symfile_offsets): Fix typo, addr->addrs.

1999-10-06  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* remote.c (handle_remote_sigint_twice): Make this signal be
 	handled by inferior_event_handler, via the wrapper function.
	(async_remote_interrupt_twice): Make not static. Add debug print.
	* remote.h (async_remote_interrupt_twice): Export for use in
 	inf-loop.c.

	* inf-loop.c (inferior_event_handler_wrapper): New function.
	(inferior_event_handler): Handle a request to quit and kill the
 	target.
	Include remote.h.
	* inf-loop.h (inferior_event_handler_wrapper): Export.

1999-10-04  James Ingham  <jingham@leda.cygnus.com>

	* remote-rdi.c (arm_rdi_open): If the angel_RDI_Open fails, close
	the serial port and raise an error.  If you try to go on, you will 
	stall forever down in the rdi-share code.

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* printcmd.c (output_command): Makes sure result from the output
	command is printed before the next prompt.

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* printcmd.c (print_formatted): Add missing stream parameter.
	(do_examine, print_command_1, output_command, do_one_display):
	Adjust call to print_formatted().

1999-10-04  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c: Remove include of event-loop.h.
	* utils.c: Ditto.
	* top.c: Ditto.

	* infrun.c (fetch_inferior_event): Call inferior_event_handler
 	when inferior stops, instead of doing work ourselves.  
	(fetch_inferior_event): Use void* instead of gdb_client_data.
	Remove includes of event-top.h and event-loop.h. Add include of
 	inf-loop.h.
	(complete_execution): Move from here.

	* inf-loop.c (complete_execution): To here.
	(inferior_event_handler): Handle inferior's execution completion
 	case as well.
	* inf-loop.h: Add def of INF_LOOP_H.
	
	* event-top.h: Don't use gdb_client_data, use void*, to avoid
 	dependency on event-loop.h.
	
	* remote.c (remote_async_resume): Set target_executing only after we
	actually register the inferior with the event loop.

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* corefile.c (memory_error): Use error_stream() and eliminate call
	to return_to_top_level().

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* utils.c (error): Save error message text (w/o new line).
	(error_last_message): New function. Returns the last message
	issued by gdb.
	(error_init): New function. Initializes error handling machinery.
	(error_stream): New function. Allows the error message to be
	passed on a stream buffer.
	* defs.h: Add prototypes for error_stream() and
	error_last_message().
	* main.c (main): Add call to error_init().

1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* utils.c (tui_sfileopen): New function.  Replaces
	gdb_file_init_astring().
	* defs.h: Add prototype for the above.

Mon Oct  4 19:25:55 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* symfile.c (add_symbol_file_command): Fix -Wformat on query call.

1999-10-01  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* target.c (cleanup_target): Type of to_async param is now
 	function with enum inferior_event_type param.
	
	* target.h (target_ops): Adjust to_async accordingly. Move enum
 	inferior_event_type to this file.  Don't have a typedef for
 	inferior_event_type. Add more enumeration constants INF_QUIT_REQ,
 	INF_EXEC_COMPLETE. Remove INF_SIGINT_FIRST, INF_SIGINT_SECOND.

	* inf-loop.c (inferior_event_handler): Change first param to tell
 	the type of event we are dealing with. Deal with INF_ERROR and
 	INF_REG_EVENT, for the moment. 
	Include target.h.

	* inf-loop.h (inferior_event_handler): Adjust prototype. Remove
 	enum inferior_event_type from here.
	
	* remote.c (remote_async_serial_handler): Pass INF_REG_EVENT to
 	the client callback.
	(remote_async): Change callback's param type to inferior_event_type.
	(async_client_callback): Change type as above.
	
1999-10-01  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (stdin_event_handler): Delete fd parameter, use
 	input_fd instead.
	* event-top.h (stdin_event_handler): Delete fd parameter.

	* inf-loop.c (inferior_event_handler): Delete fd parameter.  Use
 	target_async() to unregister the inferior fd in case of errors.
	* inf-loop.h(inferior_event_handler): Delete fd parameter. 

	* ser-unix.c (fd_event): Delete fd parameter. Use scb->fd,
 	instead.

	* remote.c (async_client_callback):  Delete fd parameter.
	(remote_async_serial_handler): Ditto.
	(remote_async): Adjust to new type of callback function.

	* target.c (cleanup_target): Adjust parameters for to_async
 	default case.
	* target.h (*to_async): Delete fd parameter from cb function.

	* event-loop.h (handler_func): Delete fd parameter.
	* event-loop.c (handle_file_event): Delete fd param from call to
 	proc. Do not include inferior.h.
	
1999-10-01  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (inferior_event_handler,
 	inferior_event_handler_wrapper): Move from here.
	* inf-loop.c: To here. New file.
	
	* event-loop.h (inferior_event_handler): Move from here.
	* inf-loop.h: To here. New file.

	* remote.c: Include inf-loop.h.
	(set_extende_protocol): Remove unused prototpye.

	* Makefile.in (SFILES): Add inf-loop.c. 
	(inf_loop_h): Define.
	(COMMON_OBS): Add inf-loop.o.
	(inf-loop.o): Add rule.
	(remote.o): Add dependency on inf-loop.h.

Fri Oct  1 19:59:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-unix.c: Add some notes on how the async code works.

Fri Oct  1 01:45:32 1999  Jeffrey A Law  (law@cygnus.com)

	* somread.c (som_symfile_offsets): Fix typo in last change.

1999-09-30  Fred Fish  <fnf@cygnus.com>

	* coff-solib.c (coff_solib_add): Adjust call to symbol_file_add.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* irix5-nat.c (symbol_add_stub): Ditto.
	* osfsolib.c (symbol_add_stub): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* remote-mm.c (mm_load): Ditto.
	* remote-udi.c (udi_load): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

	* irix5-nat.c (symbol_add_stub): Add section_addrs, zero it.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* osfsolib.c (symbol_add_stub): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* symfile.c (symbol_file_command): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

	* irix5-nat.c (symbol_add_stub): Use section_addrs to pass text addr.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* osfsolib.c (symbol_add_stub): Ditto.
	* pa64solib.c (pa64_solib_add_solib_objfile): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* somsolib.c (som_solib_add_solib_objfile): Ditto.
	* symfile.c (symbol_file_command): Ditto.
	* win32-nat.c (handle_load_dll): Ditto.

	* coff-solib.c (coff_solib_add): Call symbol_file_add with NULL ptr.
	* cxux-nat.c (add_shared_symbol_files): Ditto.
	* remote-udi.c (udi_load): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* symfile.c (symbol_file_command): Ditto.

	* dstread.c (dst_symfile_offsets): Take "section_addr_info *"
	instead of CORE_ADDR.
	* somread.c (som_symfile_offsets): Ditto.
	* symfile.c (default_symfile_offsets): Ditto.
	* xcoffread.c (xcoff_symfile_offsets): Ditto.

	* symfile.h (default_symfile_offsets): Adjust prototype.
	(syms_from_objfile): Ditto.
	* symtab.h (symbol_file_add): Ditto.

	* rs6000-nat.c (objfile_symbol_add): Call syms_from_objfile with NULL.
	* xcoffsolib.c (solib_add): Ditto.
	* gdb-stabs.h (SECT_OFF_MAX): Increase from 4 to 16.
	* symtab.h (MAX_SECTIONS): Define.
	(struct section_addr_info): New struct for better control over
	changing load addresses of sections.
	* objfiles.h (OBJF_READNOW): Add new flag bit.
	* symfile.h (sym_offsets): Change second param from CORE_ADDR to
	"section_addr_info *".

	* symfile.c (symbol_file_add): Replace scalar arg "CORE_ADDR addr"
	with "struct section_addr_info *addrs".
	(syms_from_objfile): Ditto.
	(add_symbol_file_command): Remove local variables "readnow" and
	"mapped".  Replaced with general "flags" variable.
	(symbol_file_command): Ditto.
	(add_symbol_file_command): Add local variables i, sec_num, argcnt,
	expecting_option, option_index, and opt. Rework option parsing code
	to handle additional options.
	(_initialize_symfile): Adjust add-symbol-file usage to match new
	option handling.
	(symbol_file_add): Remove parameters "mapped" and "readnow",
	replace with general "flags".
	(symbol_file_add): In call to allocate_objfile, replace "mapped"
	with extracted OBJF_MAPPED bit from flags.
	(symbol_file_add): Use OBJF_READNOW bit from flags, instead of
	"readnow" variable.
	(symbol_file_command): Set OBJF_MAPPED and OBJF_READNOW bits
	from parsed options.  Pass flags to symbol_file_add.
	(add_symbol_file_command): Ditto.
	(syms_from_objfile): Add local variables i, sect, lower_sect,
	lower_offset, and local_addr.  Substitute local_addr for addrs
	when addrs is NULL.  Find lowest loadable section to be used as
	starting point for contiguous sections.  Adjust offsets if segments
	are not contiguous.  Call sym_offsets with section_addr_info
	instead of single addr.
	(default_symfile_offsets): Initialize objfile's section_offsets
	with user specified offsets.
	(symbol_file_add): Call syms_from_objfile with offsets.
	(unknown_option_complaint): Add.
	(add_symbol_file_command): Add "section_addrs", zero it with memset.

1999-09-30  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Call config.sub explicitly instead of misusing the
	autoconf internal variable $ac_config_sub.
	* configure: Regenerated.

Thu Sep 30 15:53:59 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (readchar): When EOF mourn the inferior.
	(getpkt): Try QUIT.  Might not be a watchdog timer timeout.
	(remote_async_serial_handler): Pass ``-1'' as the dummy FD.  Safer
 	than ZERO == STDIN.

	* serial.h (enum serial_rc): Replace #define SERIAL_ERROR,
 	SERIAL_TIMEOUT and SERIAL_EOF.
	(struct _serial_t): Add more notes on termios specific fields.

	* ser-unix.c (generic_readchar): Make SERIAL_ERROR sticky.
	(do_hardwire_readchar, do_unix_readchar): Don't use bufcnt as a
 	tempoary for the return-value from read.

	* serial.c (serial_logchar): Add a stream parameter.
	(serial_readchar, serial_write, serial_send_break): Update.
	(serial_readchar): Add serial debug trace.

Thu Sep 30 12:07:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (struct _serial_t): Add field async_state.  Better
 	document field bufcnt.
	(SERIAL_ERROR): Delete comment about errno.
	* serial.c (serial_open, serial_fdopen): Initialize async_state.

	* ser-unix.c (push_event, fd_event, reschedule): New functions.
  	Handle ASYNC serial input.
	(ser_unix_async): Update.
	(generic_readchar): New function. Handle event scheduling. Make
 	EOF condition sticky.
	(do_unix_readchar): Rename ser_unix_readchar.
	(ser_unix_readchar): New function, call do_unix_readchar via
 	generic_readchar.
	(do_hardwire_readchar, hardwire_readchar): Ditto.

	* ser-unix.c (ser_unix_readchar): Delete code working around ASYNC
 	fifo bugs.
	(hardwire_readchar): Delete code working around ASYNC fifo bugs.

Wed Sep 29 21:27:16 1999  Jeffrey A Law  (law@cygnus.com)

	* breakpoint.c (insert_breakpoints): Addresses are CORE_ADDRs,
	not "int"s.
	(remove_breakpoint): Likewise.

1999-09-29  Fred Fish  <fnf@cygnus.com>

	* breakpoint.c (breakpoint_1):  Replace cast "(CORE_ADDR) - 1"
	with the more obviously intended expression "(CORE_ADDR) -1".
	* dwarf2read.c (scan_partial_symbols, read_file_scope): Ditto.
	* gnu-nat.c (gnu_create_inferior): Ditto.
	* go32-nat.c (go32_create_inferior): Ditto.
	* hppa-tdep.c (hppa_pop_frame): Ditto.
	* infcmd.c (continue_command, step_1, signal_command): Ditto.
	(until_next_command, finish_command): Ditto.
	* infrun.c (proceed): Ditto.
	* inftarg.c (child_create_inferior): Ditto.
	* m3-nat.c (m3_create_inferior): Ditto.
	* mac-nat.c (child_create_inferior): Ditto.
	* procfs.c (procfs_create_inferior): Ditto.
	* remote-sim.c (gdbsim_create_inferior): Ditto.
	* target.c (target_link): Ditto.
	* win32-nat.c (child_create_inferior): Ditto.

Thu Sep 30 10:36:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-unix.c (ser_unix_flush_input): New function.  Discard input
 	buffer.
	(hardwire_flush_input): Use ser_unix_flush_input.
	(ser_unix_nop_flush_input): Delete.
	* ser-unix.h (ser_unix_flush_input): Update.
	ser-tcp.c (_initialize_ser_tcp), ser-pipe.c
 	(_initialize_ser_pipe): Update.
	
	* ser-unix.c (hardwire_write): Delete.
	(_initialize_ser_hardwire): Update, use ser_unix_write.

Thu Sep 30 10:16:50 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c (pipe_open): Don't make the FD non-blocking.  Already
 	being handled in ser_unix_wait_for by a select.
	
Thu Sep 30 10:00:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (struct _serial_t): Add field debug_p.
	(SERIAL_DEBUG, SERIAL_DEBUG_P): Define.

	* serial.c (serial_open, serial_fdopen): Initialize debug_p.
	(serial_debug, serial_debug_p): New functions.
	(global_serial_debug_p): New variable.
	(_initialize_serial): Add ``set serialdebug'' command.

Thu Sep 30 09:09:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (serial_event_ftype): Replace FD and ERROR args with
 	SERRIAL_T arg.
	* ser-unix.c (ser_unix_event): Update.

	* remote.c (remote_async_serial_handler): New function.  Handle
 	serial events.
	(remote_async): Pass remote_async_serial_handler to SERIAL.
	(async_client_callback, async_client_context): New variables.

	* remote.c (extended_remote_async_create_inferior): Use
 	target_async to register the inferior event handler.

Thu Sep 30 00:02:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (AC_CHECK_FUNCS): Test for sigprocmask.
	* configure, config.in: Re-generate.
	* event-top.c (async_stop_sig): Use sigprocmask when available.  

1999-09-29  Doug Evans  <devans@casey.cygnus.com>

	* sh-stub.c (handle_exception): Fix typo in patch of 1999-08-26.
	* m68k-stub.c (handle_exception): Ditto.

1999-09-28  Fred Fish  <fnf@cygnus.com>

	* alpha-nat.c (alpha_osf_core_fns, alpha_elf_core_fns):
	Add default entries for check_format and core_sniffer.
	* core-aout.c (aout_core_fns): Ditto.
	* core-regset.c (regset_core_fns): Ditto.
	* core-sol2.c (solaris_core_fns): Ditto.
	* i386aix-nat.c (i386aix_core_fns): Ditto.
	* i386mach-nat.c (i386mach_core_fns): Ditto.
	* irix4-nat.c (irix4_core_fns): Ditto.
	* irix5-nat.c (irix5_core_fns): Ditto.
	* lynx-nat.c (lynx_core_fns): Ditto.
	* mips-nat.c (mips_core_fns): Ditto.
	* ns32knbsd-nat.c (nat_core_fns): Ditto.
	* rs6000-nat.c (rs6000_core_fns): Ditto.
	* sparc-nat.c (sparc_core_fns): Ditto.
	* sun-nat.c (sun3_core_fns): Ditto.
	* ultra3-nat.c (ultra3_core_fns): Ditto.

	* corelow.c (core_vec): New, for selected core file handler.
	(sniff_core_bfd): New function.
	(gdb_check_format): New function.
	(default_check_format): New function.
	(default_core_sniffer): New function.
	(sniff_core_bfd): New function.
	(core_close): Reset core_vec to NULL.
	(core_open): Fall back to gdb_check_format if bfd_check_format
	does not identify the file format.  Call sniff_core_bfd to pick
	a core file handler.
	(get_core_registers): Remove code that is now in sniff_core_bfd.
	Use current core_vec.

	* gdbcore.h (check_format): New core_fns function, points to function
	to try and identify a core file format.
	(core_sniffer): New core_fns function, points to function to select
	a specific handler for the selected core file format.
	(default_core_sniffer): Add prototype.
	(default_check_format): Add prototype.

	* i960-tdep.c (inferior.h): Include.
	* mips-tdep.c (read_next_frame_reg): Use ADDR_BITS_REMOVE
	on addresses pulled from stack.

1999-09-29  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (poll_timers): Check whether the timer list has any
 	element on it by looking at the first element pointer, instead of
 	num_timers.

Wed Sep 29 18:02:31 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* command.c: Attempt to include POSIX <sys/wait.h> before
 	<wait.h>.

	* ser-unix.c (hardwire_print_tty_state): Ditto.
	* inflow.c (child_terminal_info): Fix printf args.

1999-09-28  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* remote.c (remote_async_resume): Register the inferior with the
 	event loop.
	(remote_async_open_1): Don't put the target in async mode here,
 	just do it when executing.

	* infrun.c (complete_execution): Unregister the inferior from the
 	event loop.

	* event-top.c (async_disable_stdin): Don't add
 	async_enable_stdin() to the exec_cleanups chain.

Tue Sep 28 11:08:34 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (hppa_fix_call_dummy): Ignore IMPORT_SHLIB stubs
	except for hpux11 native.  Break out of the loop to find a
	stub as soon as we find an IMPORT stub.
	(skip_prologue_hard_way): Also recognize copy %ret1,target and
	all PA64 argument stores as prologue instructions.

1999-09-28  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.c, defs.h, event-top.c, infcmd.c, infrun.c, main.c,
 	remote.c, top.c, tracepoint.c, utils.c (async_p): Change var name
 	to event_loop_p.
	
1999-09-28  Jim Blandy  <jimb@cygnus.com>

	* hppa-tdep.c (skip_prologue_hard_way): Recognize ldo insns
	which generate pointers into the argument list.

Tue Sep 28 13:56:49 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.h (cleanup_sigint_signal_handler,
 	initialize_sigint_signal_handler): Delete extern declarations.
	* event-top.c, infrun.c: No longer need to include "remote.h".
	* remote.c (cleanup_sigint_signal_handler,
 	initialize_sigint_signal_handler): Make static.
	* Makefile.in (event-top.o): Delete dependency on "remote.h".

	* remote.c (remote_async_terminal_ours_p): New static global. Keep
 	track of who currently owns the terminal.
 	(remote_async_open_1): Initialize.
	(remote_async_terminal_inferior): Test
 	remote_async_terminal_ours_p.  Claim CNTRL-C handler as part of
 	transfering the terminal to the target.
	(remote_async_terminal_ours): Similar.

Mon Sep 27 12:33:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (async_interrupt_query): Delete function.  Merged into
 	interrupt_query.  Async cases handled by target_terminal_ours,
 	target_terminal_inferior and SERIAL_CLOSE.
	(async_remote_interrupt_twice): Update.
	(remote_async_terminal_ours, remote_async_terminal_inferior): New
 	functions. Steal STDIN from GDB's CLI.
	(init_remote_async_ops): Initialize to_terminal_ours and
 	to_terminal_inferior.

	* event-top.c (async_disable_stdin, async_disable_stdin): Use
 	target_terminal_ours / target_terminal_inferior to transfer
 	ownership of the terminal between GDB and the target.

1999-09-27  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c (run_command): Call async_disable_stdin() only if
	dealing with an asynchronous target.

Mon Sep 27 11:48:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.h (struct target_ops): Add to_can_async_p, to_is_async_p,
 	to_async.  Delete to_has_async.  These correspond well with
 	SERIAL* async methods.
	(target_can_async_p, target_is_async_p, target_async): Define.
	* target.c (update_current_target, cleanup_target): Update.

	* remote.c (remote_async_open_1): Change target to async using
 	target_async.
	(remote_can_async_p, remote_is_async_p, remote_async): New
 	functions.
	(remote_async_wait, remote_async_open_1): Add FIXME about how
 	wait_forever_enabled_p can almost be deleted once the client can
 	enable/disable target_async.

	* breakpoint.c (until_break_command), infrun.c (proceed), infcmd.c
 	(run_command, continue_command, step_1, jump_command,
 	until_command, finish_command, interrupt_target_command), top.c
 	(return_to_top_level, execute_command), event-top.c
 	(command_handler): Replace target_has_async with
 	target_can_async_p.

Sun Sep 26 02:10:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_async_open_1): If we go into async mode, never
 	wait for ever.

	* infcmd.c: Include "event-top.h".
	(run_command, continue_command, jump_command, until_command,
 	finish_command): Use async_disable_stdin to disable the console
 	for synchronous commands.

	* remote.c (async_interrupt_query): Only disconnect the console
 	from the terminal when sync_execution.

	* remote.c (initialize_sigint_signal_handler): Move declaration
 	from here.
	* remote.h: To here.  Make non-static.

	* remote.c (remote_async_resume, async_interrupt_query): Move
 	prompt code from here.
	* event-top.c (async_disable_stdin, async_enable_stdin): To
 	here. New function.

	* infrun.c (start_remote): Delete commented out code.

Fri Sep 24 12:38:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_async_open_1): Perform the initial async_open
 	using only synchronous calls.  Only after the target is fully
 	connected, switch to async mode.  Include FIXME about now it
 	currently works VS how it should be working.
	(remote_async_open_1, set_extended_protocol): Delete function
 	set_extended_protocol.  All open communication is now done
 	synchronously.
	(forever_enabled_p): New variable.  Determine if remote_async_wait
 	should block FOREVER when fetching target information.
	(remote_cisco_open, remote_open_1): Set forever_enabled_p.

	* infrun.c (start_remote): During the initial connect, always use
 	a synchronous wait.

Sat Sep 25 18:13:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (event-top.o): Add dependency.
	* event-top.c: Include "remote.h".
	* remote.c (async_interrupt_query), event-top.c:
 	(async_enable_stdin): Pass dummy parameter to
 	cleanup_sigint_signal_handler.
	* remote.c (cleanup_sigint_signal_handler), remote.h
 	(cleanup_sigint_signal_handler), event-top.c (async_enable_stdin),
 	event-top.h (async_enable_stdin): Change signature to match
 	make_exec_error_cleanup handler pararameter.

Thu Sep 23 20:48:22 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (enum command_class): Move from here.
	* command.h (command_class): To here.

1999-09-24  Kevin Buettner  <kevinb@cygnus.com>
	* breakpoint.c (bpstat_stop_status): Use not_a_breakpoint to
	help properly set bp_addr.
	* infrun.c (handle_inferior_event): Simplify calls to
	bp_stop_status.

1999-09-24  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c (return_to_top_level): Do exec_error cleanups if are
 	interrupting a simulated synchronous execution command.

	* infrun.c (start_remote): Create a cleanup to enable stdin in
 	case of error from this command.
	(complete_execution): Do the enabling of stdin via the exec_error
 	cleanups, when needed.

	* remote.c (remote_async_resume): Make sure we re-enable stdin in
 	case of error from the target.
	(handle_remote_sigint_twice): The handler to be set is
 	async_remote_interrupt_twice, not async_remote_interrupt.
	(async_remote_interrupt_twice): Don't do anything if the target
 	has been killed already. Call async_interrupt_query, instead of
 	interrupt_query.
	(async_interrupt_query): New function. Async case of
 	interrupt_query().
	
	* event-top.c (async_enable_stdin): New function. Reinstate stdin
 	with the event loop.
	* event-top.h (async_enable_stdin): Export.

	* utils.c (exec_error_cleanup_chain): New cleanup chain.
	(make_exec_error_cleanup, do_exec_error_cleanups,
 	discard_exec_error_cleanups): New functions.
	* defs.h (make_exec_error_cleanup, do_exec_error_cleanups,
 	discard_exec_error_cleanups): Export.

1999-09-24  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c (expr_to_agent): Don't forget to pass argument to
 	new_agent_expr.

1999-09-24  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (fetch_inferior_event_wrapper): New
 	function. Wrapper to pass to catch_errors.
	(inferior_event_handler): Pop the target if things go bad with it.
	Call fetch_inferior_event() from within catch_errors(). 

1999-09-24  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c: Use internal_error instead of error, where
	appropriate.

1999-09-23  James Ingham  <jingham@leda.cygnus.com>

	* target.c (target_resize_to_sections): New function.  Gather the
	resizing code for the to_sections field into one place, and make
	sure you update the other targets that are sharing the to_sections 
	structure.
	* target.h: Declare the target_resize_to_sections function.
	* solib.c (solib_add): use target_resize_to_sections.
	* somsolib.c (som_solib_load_symbols): ditto
	* rs6000-nat.c (xcoff_relocate_core): ditto
	* pa64solib.c (pa64_solib_load_symbols): ditto
	* irix5-nat.c (solib_add):ditto

	* top.c: Define the attach & detach hooks
	* defs.h: Declare the attach & detach hooks.
	* infcmd.c (attach_command): call the attach hook if it exists.
	(detach_command): call the detach hook if it exists.

	* complaints.c (complain): Send the complaints to stderr rather
	than stdout, so they don't get mixed into the result stream from
	commands. 

1999-09-23  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (poll_timers): Use correct timeval field names,
 	when setting the notifier timeouts, in case of select() used.
	(gdb_wait_for_event): Pass a pointer to the timeout structure to
 	select(), not the structure.

Wed Sep 22 10:35:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (init.c): Change generated file to include "defs.h"
 	and "call-cmds.h". Use initialize_file_ftype when declaring
 	each initialize functions.
	(call_cmds_h): Add definition.
	(init.o): Add target and dependencies.
	(init.c): Don't grep for _initialize* in init.c.

	* defs.h (initialize_file_ftype): Add function typedef.

1999-09-22  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* procfs.c (init_procinfo): move fltset initialization to caller.
	(do_attach, create_procinfo): initialize fltset.

1999-09-22  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c, event-top.c, event-loop.h: Rerun indent.

1999-09-21  Doug Evans  <devans@casey.cygnus.com>

	* m32r-stub.c (handle_exception): Fix typo in patch of 1999-08-26.

Tue Sep 21 14:55:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	From 1999-08-20 J.T. Conklin  <jtc@redback.com>:
	* remote.c (read_frame): expand cisco run-length encoding variant
 	inline as is done for the standard encoding.
	(remote_cisco_expand): Removed.

1999-09-20  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c: Include <sys/time.h>.

1999-09-20  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* ser-ocd.c: (ser_ocd_open, ser_ocd_raw, ser_ocd_readchar,
 	ser_ocd_setbaudrate, ser_ocd_write, ser_ocd_close,
 	ser_ocd_get_tty_state, ser_ocd_set_tty_state): Remove unused
 	prototypes.
	(ocd_readremote): Remove.
	(ocd_write): Remove unused var 'c'.

1999-09-20  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (change_line_handler): Cleanup dead code. Add comments.
	* event-loop.c: Cleanup #if 0 code.

	* event-loop.h (timer_handler_func): New function type.
	(create_timer): Export function.
	(delete_timer): Export function.

	* event-loop.c: Add timeout and timeout_valid fields to
 	gdb_notifier.  New structures gdb_timer and timer_list.
	(gdb_do_one_event): Check whether there are any timers tht are
 	ready, before going to wait.
	(gdb_wait_for_event): If the timeout structure is meaningful, pass
 	that to select()/poll().
	(create_timer): New function. Creates a timer.
	(delete_timer): New function. Deletes a timer.
	(handle_timer_event): New function. Deals with timers that are ready.
	(poll_timers): New Function. Chack whether timers have expired.

Mon Sep 20 17:00:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (getpkt, putpkt, remote_console_output): Move
 	declaration from here.
	* remote.h: To here. New file.
	* tracepoint.c(putpkt, getpkt, remote_console_output): Delete
 	declarations. Moved to "remote.h".
	* Makefile.in (remote_h): Define.
	* remote.c, tracepoint.c: Include "remote.h".
	* Makefile.in (tracepoint.o, remote.o): Add dependency on
 	"remote.h".

	* remote.h (remote_cisco_objfile_relocate,
 	cleanup_sigint_signal_handler): Add declaration.  Include FIXME.
	* infrun.c: Include "remote.h".
	(complete_execution): Delete local extern declaration
 	of ``cleanup_sigint_signal_handler''.
	* Makefile.in (infrun.o): Add dependency on remote.h.

Mon Sep 20 13:41:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* kod.c (ecos_kod_open, ecos_kod_request, ecos_kod_close,
 	cisco_kod_open, cisco_kod_request, cisco_kod_close): Move
 	declarations from here.
	* kod.h: To here. New file.
	* kod-cisco.c, kod.c: Include "kod.h".
	* Makefile.in (kod-cisco.o, kod.o): Add dependency on "kod.h".

	* kod.h (kod_display_callback_ftype, kod_query_callback_ftype):
 	New function types.
	* kod.h (kod_cisco_open): Use in declaration.
	* kod.c (gdb_kod_open): Update definition.
	* kod-cisco.c (cisco_kod_open): Update definition.

Mon Sep 20 12:13:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mn10300-tdep.c (_initialize_mn10300_tdep): Add declaration.

	* breakpoint.c (until_break_command_continuation): Add
 	declaration.  Make static.
	* event-top.c (rl_callback_read_char_wrapper): Ditto.

Fri Sep 17 19:28:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* source.c: Include "source.h".
	(open_source_file, find_source_lines): Move declaration from here.
	* source.h: New file. To here.
	* Makefile.in (source.o): Add dependency on source.h.

	* breakpoints.c (delete_command): Move declaration from here.
	* breakpoints.h (delete_command): To here.
	
1999-09-18  Jim Blandy  <jimb@cygnus.com>

	* hppa-tdep.c (in_solib_call_trampoline): If we can't recognize
	the instruction we're at, we're not in a stub.

Sat Sep 18 07:13:03 1999  Jeffrey A Law  (law@cygnus.com)

	* dwarf2read.c (dwarf_decode_lines): Correctly handle
	DW_LNS_const_add_pc.

1999-09-18  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* remote.c (remote_async_open_1): Use inferior_event_handler to
 	handle inferior events.
	(extended_remote_async_create_inferior): Ditto.

	* serial.h (serial_event_ftype): Add two pars. 

	* ser-unix.c (ser_unix_event): Add two parameters, error and fd.
	Pass those into the call to the actual inferior event handler.

	* infrun.c (complete_execution): Stdin handler is stdin_event_handler.

	* event-top.h (stdin_event_handler): Export new function.

	* event-top.c (stdin_event_handler): New function. Smarter handler
 	for events on stdin.
	(change_line_handler): Don't need to update the handler for stdin
 	here anymore.
	(_initialize_event_loop): Stdin handler is now stdin_event_handler.

	* event-loop.h: (handler_func): Change signature, adding two new
 	args.
	(sig_handler_func): New function type. It is the old handler_func.
	(create_async_signal_handler): Update to use sig_handler_func.
	(delete_async_signal_handler): Prototype for new function.

	* event-loop.c: Include "inferior.h".
	(struct file_handler): Add field error, to indicate error
 	condition on fd.
	(struct async_signal_handler): Rename type of proc field.
	(add_file_handler): Add exception condition as something select()
 	should report.
	(handle_file_event): In case of error on the fd, record this in
 	the file_handler structure. Update call to (*proc)() to match new
 	signature.
	(gdb_wait_for_event): If select() or poll() return error, report
 	this to user.
	(create_async_signal_handler): Change first param type to
 	sig_handler_func*.
	(inferior_event_handler): New function. Smarter inferior event
 	handling.

1999-09-18  Jim Blandy  <jimb@cygnus.com>

	* pa64solib.c (pa64_solib_create_inferior_hook): Remove code which
	tries to set __d_pid; it's not relevant to PA64 shared libraries.

	A psymtab's texthigh element, and a block's endaddr element, are
	the address past the end of the address range, never the address
	of the last byte.  These data structures mean the same thing on
	forty different architectures; there's no reason they should be
	different on HP/UX.
	* symtab.c (find_pc_sect_psymtab): Remove special case for HP/UX.
	(find_pc_sect_symtab): Same.
	* objfiles.c (find_pc_sect_section): Same.

Sat Sep 18 07:13:03 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (internalize_unwinds): Handle PA64 shared libraries
	correctly

	* hppa-tdep.c (in_solib_call_trampoline): Handle PA64 shared library
	trampolines.

1999-09-17  Jim Blandy  <jimb@zwingli.cygnus.com>

	* breakpoint.c (permanent_breakpoint_here_p): Delete.
  	Accidentally left over from previous changes.

1999-09-17  Jim Blandy  <jimb@cygnus.com>

	* config/pa/tm-hppa64.h (ARGS_GROW_DOWNWARD): Deleted.  There are
	many more differences between the 32- and 64-bit ABI's than the
	direction the arguments grow, so this name is misleading.
	(PA20W_CALLING_CONVENTIONS): Define this instead.
	* config/pa/tm-hppa.h (ARGS_GROW_DOWNWARD): Delete.
	* hppa-tdep.c (hppa_push_arguments): Split into two separate
	functions, depending on whether PA20W_CALLING_CONVENTIONS is
	#defined.  These implement completely separate specifications,
	they don't really share that much code anyway, and this is much
	more readable.  Specifically: leave a 16-byte, not 32-byte, frame
	marker; correctly align objects larger than eight bytes; promote
	all integral scalar arguments smaller than eight bytes to a full
	register width; pad aggregates smaller than eight bytes on the
	right.

Thu Sep 16 17:33:35 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_async_open_1): Use SERIAL_ASYNC to
 	enable/disable async event callback on serial port.  Use
 	SERIAL_CAN_ASYNC_P / SERIAL_IS_ASYNC_P to determine if / when
 	async mode.
	(remote_async_resume, remote_async_detach, remote_async_kill,
 	extended_remote_async_create_inferior, remote_async_wait): Ditto.

	* ser-unix.c (hardwire_readchar): When ASYNC, only read a single
 	character.
	(ser_unix_readchar): Ditto.  Problems occure with back-to-back
 	data from a target.  The ASYNC code can loose the second data
 	chunk.

	* serial.c (serial_fdopen): Initialize async_handler and
 	async_context.

1999-09-16  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* utils.c (discard_all_continuations): New function.
	* defs.h: (discard_all_continuations): Add prototype.

1999-09-16  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* valops.c: Remove prototype for search_struct_field_aux(). THe
 	function was nowhere in the file.
	(value_ind): Remove unused var real_val.
	(value_find_oload_method_list): Remove unused var v. 
	(find_overload_match): Remove extra declaration of var jj.

	* Makefile.in (event_top_h): Define. Add dependency on this for
 	every file that includes event-top.h.

Thu Sep 16 17:33:35 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.c (serial_open): Delete ``&'' device.
	* ser-unix.c (_initialize_ser_hardwire): Make the "hardwire"
 	device async.  Delete temporary "async-hardwire" device.

Thu Sep 16 16:27:13 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (SERIAL_IS_ASYNC_P): Define.  Non-zero when serial
 	device is in async mode.
	(SERIAL_CAN_ASYNC_P): Rename SERIAL_ASYNC_P.
	* serial.c (serial_is_async_p): Implement.
	(serial_can_async_p): Rename serial_async_p.
	(serial_open): Initialize ASYNC_HANDLER and ASYNC_CONTEXT. Save
 	the original name in SCB instead of the stripped name.

Thu Sep 16 12:20:11 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (struct serial_ops): Add field ASYNC.
	(SERIAL_ASYNC, SERIAL_ASYNC_P): New macros.
	(struct _serial_t): Add fields async_context and async_handler.
	* serial.c (serial_async, serial_async_p): Implement.

	* ser-unix.c: Include "event-loop.h".
	(ser_unix_async), ser-unix.c: New function.  Implement async mode.
	(async_event): Handle async events.
	* ser-unix.c (_initialize_ser_hardwire), ser-tcp.c
 	(_initialize_ser_tcp), ser-pipe.c (_initialize_ser_pipe): Enable
 	ASYNC.

	* serial.c (serial_open): Discard leading ``|'' before opening a
 	pipe device.
	* ser-pipe.c (pipe_open): Adjust.
	* serial.c (serial_open): Add ``&'' prefix so that
 	"async-hardwire" device can be explicitly selected.  Work in
 	progress.
	* ser-unix.c: Register "async-hardwire" device.
  
Thu Sep 16 09:04:53 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-unix.h: New file.  Declare generic ser_unix functions.
	* ser-unix.c (ser_unix_nop_get_tty_state,
 	ser_unix_nop_set_tty_state, ser_unix_nop_raw, ser_unix_wait_for,
 	ser_unix_readchar, ser_unix_nop_noflush_set_tty_state,
 	ser_unix_nop_print_tty_state, ser_unix_nop_setbaudrate,
 	ser_unix_nop_setstopbits, ser_unix_write,
 	ser_unix_nop_flush_output, ser_unix_nop_flush_input,
 	ser_unix_nop_send_break, ser_unix_nop_drain_output): New
 	functions.
	* ser-unix.c: Include <sys/wait.h>, <sys/socket.h>,
 	"gdb_string.h".
	
 	* ser-tcp.c (_initialize_ser_tcp), ser-unix.c
 	(_initialize_ser_hardwire), ser-pipe.c (_initialize_ser_tcp):
 	Initialize ops vector using assignment.

	* ser-pipe.c, ser-tcp.c, ser-unix.c: Include ser-unix.h.
	
	* ser-pipe.c (pipe_get_tty_state, pipe_set_tty_state,
 	pipe_return_0, pipe_raw, wait_for, pipe_readchar,
 	pipe_noflush_set_tty_state, pipe_print_tty_state,
 	pipe_setbaudrate, pipe_setstopbits, pipe_write), ser-tcp.c
 	(tcp_get_tty_state, tcp_set_tty_state, tcp_return_0, tcp_raw,
 	wait_for, tcp_readchar, tcp_noflush_set_tty_state,
 	tcp_print_tty_state, tcp_setbaudrate, tcp_setstopbits, tcp_write):
 	Delete functions.

1999-09-15  Stan Shebs  <shebs@andros.cygnus.com>

	* d10v-tdep.c (remote_d10v_translate_xfer_address): Move to here
	from remote-d10v.c, also change the memory translation to its
	previous version.
	* remote-d10v.c: Remove.
	* config/d10v/d10v.mt (TDEPFILES): Remove remote-d10v.o.

1999-09-15  Jim Blandy  <jimb@cygnus.com>

	* breakpoint.c (remove_breakpoint): Return zero, not nothing.

1999-09-14  Jim Blandy  <jimb@cygnus.com>

	* hppa-tdep.c (frame_chain): If the unwind info says we've saved
	r3, don't trust it.  Call get_frame_saved_regs and see if we can
	actually find an address for r3 there.

	* pa64solib.c (pa64_sharedlibrary_info_command): Text fix.

Tue Sep 14 14:34:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (DEPRECATED_SERIAL_FD): Define.
	* serial.c (deprecated_serial_fd): New function.

	* remote.c (remote_async_open_1, remote_async_open_1,
 	remote_async_detach, remote_async_kill,
 	extended_remote_async_create_inferior, minitelnet): Update.
	* remote-es.c (es1800_open, es1800_close, es1800_transparent): Update.

	* remote-st.c (connect_command), remote-os9k.c (connect_command):
 	Fix.  Call FD_SET et.al. with FD instead of serial_t.

1999-09-14  Jim Blandy  <jimb@cygnus.com>

	* hppa-tdep.c (hppa_frame_find_saved_regs): The two possible
	instructions for saving the return pointer (32- and 64-bit) save
	it at different offsets.

	* config/pa/tm-hppa64.h: Doc fix.

	* defs.h (continuation): Make this a typedef.

	* Makefile.in (gdbtk.o, gdbtk-cmds.o): Depend on $(top_h).

	* Makefile.in (i386-linux-nat.o): Depend on symfile.h, not
	$(symfile_h); the latter has no definition.

	* breakpoint.c (breakpoint_here_p): Remove meaningless code,
	testing b->enable against shlib_disabled and call_disabled after
	we know it is enabled.

	Implement "permanent breakpoints" --- breakpoints that are
	hardwired into the inferior's code.  GDB knows they're there, but
	doesn't try to insert or remove them, etc.
	* breakpoint.h (enum enable): Add `permanent' enablement state.
	* breakpoint.c (make_breakpoint_permanent): New function.
	* breakpoint.h (make_breakpoint_permanent): Add declaration.
	* breakpoint.c (insert_breakpoints): Don't bother to insert
	permanent breakpoints...
	(remove_breakpoint): ... or remove them.
	(breakpoint_here_p): Handle `permanent' like `enabled'.  Change
	return value to indicate whether it's a permanent breakpoint here,
	or an ordinary breakpoint.
	* breakpoint.h (enum breakpoint_here): New enum.
	(breakpoint_here_p): Change declaration.
	* breakpoint.h (breakpoint_1): Extend bpenables to cover all the
	enablement states.
	(describe_other_breakpoints): Describe permanent breakpoints.
	(check_duplicates): If one of the breakpoints at ADDRESS is a
	permanent breakpoint, treat all the others as the duplicates, so
	we don't try to insert or remove any of them.  Verify that only
	the permanent breakpoint is actually inserted.
	(delete_breakpoint): Complain if we discover that another
	breakpoint was inserted at the same place as a permanent
	breakpoint.
	(disable_breakpoint): Fail silently if asked to disable a
	permanent breakpoint.
	(do_enable_breakpoint): Don't change a permanent breakpoint's
	enablement to ordinary `enabled'.  Leave it alone.
	(create_solib_event_breakpoint): Return the
	breakpoint object created.
	* breakpoint.h (create_solib_event_breakpoint): Fix declaration.
	* pa64solib.c (pa64_solib_create_inferior_hook): Do turn on the
	DT_HP_DEBUG_CALLBACK flag in the dynamic linker, so it will call
	__dld_break, which contains the permanent breakpoint, when interesting
	things happen.	Tell GDB that the breakpoint in __dld_break is
	permanent.
	* gdbtk-cmds.c (gdb_get_breakpoint_info): Report a permanent
	breakpoint as enabled.
	* infrun.c (SKIP_PERMANENT_BREAKPOINT): Provide default	definition.
	(default_skip_permanent_breakpoint): New function.
	(resume): If we're trying to resume at a permanent breakpoint, use
	SKIP_PERMANENT_BREAKPOINT to step over it.
	* hppa-tdep.c (hppa_skip_permanent_breakpoint): New function.
	* config/pa/tm-hppa.h (hppa_skip_permanent_breakpoint): Declare.
	(SKIP_PERMANENT_BREAKPOINT): Define.
	
1999-09-14  Kevin Buettner  <kevinb@cygnus.com>

	* symtab.h, minsyms.c (find_stab_function_addr): Changed
	type of second parameter from partial_symtab * to char *.
	Fixed all callers.
	* minsyms.c (find_stab_function_addr): Look for minimal
	symbol without filename if filename based search fails.
	* dbxread.c (process_one_symbol): Call find_stab_function_addr()
	in place of inline code with identical functionality.
	* partial-stab.h (case N_FUN, descriptors 'F' and 'f'): Look
	up symbol's address from minimal symbol table when N_FUN
	address is missing.  Also, make sure this value is used for
	calculating the value of the texthigh field.

1999-09-14  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (create_file_handler): Increment the total number
 	of file descriptors for the poll case, only if this is a new file
 	desc.

1999-09-14  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c: misc minor cleanups and fixes missed in last patch.

Tue Sep 14 12:37:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.h (SERIAL_PRINT_TTY_STATE): Add STREAM parameter.
	(union serial_ops): Update.

	* ser-unix.c (hardwire_print_tty_state, ser-tcp.c
 	(tcp_print_tty_state), ser-pipe.c (pipe_print_tty_state,
 	ser-go32.c (dos_print_tty_state, ser-mac.c (mac_print_tty_state,
 	ser-ocd.c (ocd_print_tty_state, ser-e7kpc.c
 	(e7000pc_print_tty_state): Update.
	* inflow.c (child_terminal_info): Update.
	* serial.c (serial_print_tty_state): Update.

Tue Sep 14 11:41:37 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.c, serial.h, ser-tcp.c, ser-unix.c, ser-pipe.c: Convert
 	all functions to ISO-C.
	* serial.h, serial.c: Move all indirect macro function calls from
 	serial.h into serial.c.
	(serial_drain_output, serial_flush_output, serial_flush_input,
 	serial_raw, serial_get_tty_state, serial_set_tty_state,
 	serial_print_tty_state, serial_noflush_set_tty_state,
 	serial_setbaudrate, serial_setstopbits): New functions.
	(do_serial_close): Rename serial_close.
	(serial_close, serial_un_fdopen): New functions. Call
 	do_serial_close.

1999-09-13  James Ingham  <jingham@leda.cygnus.com>

	* symtab.c (decode_line_1): Find the rightmost parenthesis in the
	expression, not the leftmost.  This allows us to parse function
	declarations with embedded function prototypes.

Mon Sep 13 18:39:31 1999  Jeffrey A Law  (law@cygnus.com)

	* pa64solib.c (pa64_sharedlibrary_info_command): Fix typos.

1999-09-13  Kevin Buettner  <kevinb@cygnus.com>

	* i386-tdep.c (i386_extract_return_value): ifdef'd so that
	non-linux targets will work again.
	(i386_do_registers_info, i386_print_register): Revert changes
	of 1999-09-03; these functions have been removed because they
	are Linux specific and break non-Linux builds.  This functionality
	will be restored after FP support unification has been achieved.
	* i387-tdep.c (i387_print_register, void i387_float_info):
	Likewise.
	* config/i386/tm-linux.h (i387_float_info, FLOAT_INFO,
	DO_REGISTERS_INFO, i386_do_registers_info,
	i387_print_register):  Likewise.

1999-09-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (call_readline): Change to accept gdb_client_data as
 	param.
	(rl_callback_read_char_wrapper): New function to match what the
 	event loop expects and what readline expects.
	(change_line_handler): Make call_readline point to
 	rl_callback_read_char_wrapper, instead of rl_callback_read_char.
	(_initialize_event_loop): Ditto.
	(gdb_readline2): Change parameter to gdb_client_data.
	* event-top.h (call_readline, gdb_readline2): Change accordingly.

	* event-loop.c (add_file_handler): Change 2nd par to
 	handler_func*.  No more need for casting.
	* event-loop.h (create_async_signal_handler): Change accordingly.

	* inferior.h (fetch_inferior_event): Change parameter to void*.
	* infrun.c (fetch_inferior_event): Ditto.

1999-09-13  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (step_into_function): New function, broken out from the
 	step_into_function label in handle_inferior_event.
	(handle_inferior_event): Change a goto into a function call.

1999-09-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.h: New file. All the exported vars and functions from
 	event-top.c.

	* event-loop.h (struct gdb_event, event_handler_func,
 	file_handler, async_signal_handler, SELECT_MASK, fd_mask, NBBY,
 	FD_SETSIZE, howmany, NFDBITS, MASK_SIZE): Move to event-loop.c.
	(struct prompts, PROMPT, PREFIX, SUFFIX, display_gdb_prompt,
 	async_init_signals, set_async_editing_command,
 	set_async_annotation_level, set_async_prompt, handle_stop_sig,
 	handle_sigint, pop_prompt, push_prompt, gdb_readline2,
 	mark_async_signal_handler_wrapper, async_request_quit,
 	async_command_editing_p, exec_done_display_p,
 	async_annotation_suffix, new_async_prompt, the_prompts,
 	call_readline, input_handler, input_fd): Move to event-top.h.
	(All function prototypes): Don't use PARAMS anymore.

	* event-loop.c: (struct gdb_event, event_handler_func,
 	file_handler, async_signal_handler, SELECT_MASK, fd_mask, NBBY,
 	FD_SETSIZE, howmany, NFDBITS, MASK_SIZE): Move to here from
 	event-loop.h.
	Include event-top.h. Remove use of PARAMS. ANSIfy functions headers.
		
	* event-top.c: Include event-top.h. Include "signals.h", not
 	<signals.h>.
	Remove use of PARAMS. ANSIfy functions headers.
	(handle_stop_sig): move prototype to event-top.h.

	* remote.c: Include event-top.h. Make it understand
 	async_signal_handler type.
	* infrun.c: Include event-top.h.
	* mi-main.c: Ditto.
	* top.c Ditto.
	* utils.c: Ditto.
	
Mon Sep 13 18:54:05 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.sh: Describe each of the fields.
	
Mon Sep 13 17:51:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	From 1999-09-12 Jim Blandy <jimb@cygnus.com>:
	* gdbarch.sh (generating setters): Use sed to generate the proper
	indentation, not tr; tr's behavior is notoriously unportable.

1999-09-10  Jim Blandy  <jimb@zwingli.cygnus.com>

	* i387-tdep.c (print_387_control_bits): Don't print newline; the
	callers take care of that.  (Thanks to H.J. Lu.)

1999-09-09  Stan Shebs  <shebs@andros.cygnus.com>

	* d10v-tdep.c (DMEM_START): Set to 0x2000000.
	(itrace, iuntrace, info itrace, itdisassemble, itracedisplay,
 	itracesource): Add 'i' prefix to commands, so as not to conflict
 	with generic trace commands.

1999-09-09  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* remote.c (_initialize_remote): Fix the specification of the
	"remote" prefix to set and show commands.

1999-09-09  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (create_file_event): New function. Creates a gdb
 	event for a given fd.
	(gdb_wait_for_event): Use create_file_event().  
	* event-loop.h: export create_file_event().

	* event-loop.c (delete_file_handler): Move the clearing of the
 	mask to later on in the function, because we need it in order to
 	deactivate the correct fd when using select().

	* m32r-tdep.c (decode_prologue): Fix typo. Instructions starting
 	with 0xf are branch instructions.
	(m32r_scan_prologue): Initialize framesize to 0.

1999-09-07  J.T. Conklin  <jtc@redback.com>

	* i386-stub.c (exceptionHook, oldExceptionHook): Removed.
	(handle_exception): Removed #if'd out exception hook code.

	* i386-stub.c, m68k-stub.c (error): Removed unused variable.

	* i386-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
	sparcl-stub.c, sparclet-stub.c (remcomInBuffer, remcomOutBuffer):
	Make static.

Tue Sep  7 14:06:22 1999  Kevin Buettner  <kevinb@cygnus.com>

	* config/i386/tm-linux.h (SOFUN_ADDRESS_MAYBE_MISSING): 
	Define.

Tue Sep  7 08:18:01 1999  Kevin Buettner  <kevinb@cygnus.com>

	From Jim Blandy <jimb@cygnus.com>:
	
	Step into calls to functions in shared libraries properly.  See
	the comments for SKIP_SOLIB_RESOLVER atop infrun.c for details.
	* infrun.c (SKIP_SOLIB_RESOLVER): New macro.

1999-09-05  Fred Fish  <fnf@cygnus.com>

	* elfread.c (elf_symtab_read): Remove separately passed bfd
	pointer and offset.  Pick up bfd pointer from objfile, and
	get offset from objfile's section_offsets.

Fri Sep  3 22:29:39 1999  Kevin Buettner  <kevinb@cygnus.com>

	* config/i386/tm-linux.h (REGISTER_NAMES): Changed register
	named "foo" to "fopo" which more accurately describes the FPU
	Operand Pointer Offset.  The real reason for this change, of
	course, is that many programmers use $foo as a convenience
	variable and are likely to be unpleasantly surprised to find
	that they're unwittingly changing the state of their ia32 FPU.

1999-09-03  Jason Molenda  (jsm@bugshack.cygnus.com)

	* monitor.c (monitor_supply_register): Stop scanning val string
	if a newline is encountered.

1999-09-03  Jason Molenda  (jsm@bugshack.cygnus.com)

        monitor.c (TARGET_BUF_SIZE): New macro, defined to 2048.
        (monitor_expect_regexp, monitor_wait, monitor_dump_reg_block,
        monitor_dump_reg_block): Dump hard-coded constants in favor
        of TARGET_BUF_SIZE.

        (readchar): Re-enable output of characters read from monitor when
        remotedebug is set.

        (monitor_supply_register): Use ULONGEST to hold value.
        Replace strtoul() call with hand-coded loop to handle values
        larger than 'long'.

        (monitor_store_register): Use ULONGEST to hold value.

Fri Sep  3 00:47:44 1999  Kevin Buettner  <kevinb@cygnus.com>

	[Merged linux/x86 floating point code from Bill Metzenthen,
	Jim Blandy, Anthony Green, H. J. Lu, and possibly others.  The
	following remarks are Jim Blandy's.]

	* findvar.c (extract_floating): Call TARGET_EXTRACT_FLOATING, if
	#defined.
	(store_floating): Call TARGET_STORE_FLOATING, if #defined.

	* i386-tdep.c (i386_print_register, i386_do_registers_info): New
	functions.
	(i386_extract_return_value): GNU/Linux returns floating point
	values in a floating point register too.
	(set_disassembly_flavor): Add prototype.
	(i386_extract_return_value): Use FPDATA_REGNUM, not FP0_REGNUM (
	which wasn't the first FP data register).
	(i386_do_registers_info): Use FPSTART_REGNUM and FPEND_REGNUM as
	the limits of the FPU-related registers.
	(i386_extract_return_value): Tell GDB how to find return values
	larger than four bytes.  (Thanks to Paul N. Hilfinger for the bug
	report.)

	* i387-tdep.c (print_387_control_word): Break out bit-splitting into...
	(print_387_control_bits): New function.
	(print_387_status_word): Break out bit-splitting into...
	(print_387_status_bits): New function.
	(i387_print_register, i387_float_info, i387_hex_float_input): New
	functions.
	(i387_extract_floating, i387_store_floating): New functions.

	* valprint.c (print_floating): Use macro TARGET_ANALYZE_FLOATING,
	if it's #defined.  Tolerate values of `nonnegative' other than
	zero and one.

	* i386-linux-nat.c: New file.
	* Makefile.in (ALLDEPFILES): Mention i386-linux-nat.c.
	(i386-linux-nat.o): New rule, listing dependencies.
	* config/i386/linux.mh (NATDEPFILES): Use i386-linux-nat.o, not
	the plain i386v4-nat.o.
	* config/i386/nm-linux.h (FETCH_INFERIOR_REGISTERS): Define.
	* config/i386/xm-linux.h: Define HOST_I386.

	* config/i386/tm-linux.h (FP0_REGNUM): Replaced by...
	(FPSTART_REGNUM, FPCONTROL_REGNUM, FPSTATUS_REGNUM, FPTAG_REGNUM,
	FPDATA_REGNUM, FPEND_REGNUM): New definitions.
	(REGISTER_BYTES): Changed accordingly.
	(SKIP_SOLIB_RESOLVER): #define this.
	(i386_linux_skip_solib_resolver): New declaration.
	(i387_float_info): Added extern decl for this function.
	(TARGET_EXTRACT_FLOATING, TARGET_STORE_FLOATING,
	TARGET_ANALYZE_FLOATING): Define.
	(i387_extract_floating, i387_store_floating): New extern decls.
	(I386_GNULINUX_TARGET): Define.
	(NUM_REGS, NUM_FREGS, REGISTER_NAMES, FP0_REGNUM, FPDATA_REGNUM,
	FPENV_BYTES, FPREG_RAW_SIZE, FPREG_BYTES, REGISTER_BYTES,
	REGISTER_BYTE, REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE,
	MAX_REGISTER_RAW_SIZE, MAX_REGISTER_VIRTUAL_SIZE,
	TARGET_LONG_DOUBLE_BIT, FLOAT_INFO, DO_REGISTERS_INFO): New
	definitions, perhaps overriding those inherited from
	config/i386/tm-i386.h.
	(i386_do_registers_info, i387_print_register, double_to_i387,
	i387_to_double): New declarations.
	(LD_I387): Define iff both the host and target are using i387
	FPU's.
	(HEX_FLOAT_INPUT, REGISTER_CONVERTIBLE,
	REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW,
	REGISTER_VIRTUAL_TYPE): Define these if LD_I387 is defined.

	* source.c (list_command): List the right number of source lines,
	even if we're at the top of the file.

1999-09-02  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (step_over_function): New function, broken out from the
 	step_over_function label in handle_inferior_event.
	(handle_inferior_event): Change a goto into a function call.

Thu Sep  2 18:26:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (GDB_WERROR_CFLAGS, GBB_WARN_CFLAGS): Define.
 	(INTERNAL_CFLAGS): Update
	* configure.in (WERROR_CFLAGS, WARN_CFLAGS): Sync with
 	../sim/common/aclocal.m4.
	* configure: Re-generate.
	
Thu Sep  2 00:27:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (z8k-tdep.o): For moment, don't try to compile with
 	-Werror.  See Makefile.in.
	* z8k-tdep.c (z8k_set_pointer_size): Document problem.

	* config/z8k/tm-z8k.h (z8k_print_register_hook, z8k_frame_chain,
 	z8k_saved_pc_after_call, z8k_frame_saved_pc,
 	z8k_set_pointer_size): Declare.
	(z8k_skip_prologue): Fix typo. Was mz8k_skip_prologue.
	(FRAME_CHAIN, PRINT_REGISTER_HOOK, FRAME_SAVED_PC,
 	SAVED_PC_AFTER_CALL): Update.
	* z8k-tdep.c (z8k_print_register_hook): Rename
 	z8k_print_register_hook.
	(z8k_frame_chain): Rename frame_chain.
	(z8k_saved_pc_after_call): Rename saved_pc_after_call.
	(z8k_frame_saved_pc): Rename frame_saved_pc.
	(z8k_print_register_hook): Fix printf.
	(read_memory_pointer): Add declaration.
	("value.h"): Include.
	* Makefile.in (z8k-tdep.o): Add dependency on value.h.

	* config/sparc/tm-sparc.h (PRINT_EXTRA_FRAME_INFO): Fix
 	printf. calls
	* Makefile.in (remote-e7000.o): For moment, don't try to compile
 	with -Werror.  See Makefile.in.
	* sh-tdep.c (sh_show_regs): Fix printf calls.
	* xcoffsolib.c (solib_info): Fix Printf calls.
	* dink32-rom.c: #include "symfile.h" for generic_load and
 	"inferior.h" for write_pc.
	* Makefile.in (dink32-rom.o): Update.

	* config/mn10300/tm-mn10300.h (mn10300_store_struct_return),
 	config/mn10200/tm-mn10200.h (mn10200_store_struct_return): Add
 	declarations.

Tue Aug 31 00:48:27 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-tx49el.h (REGISTER_SIM_REGNO): Define.

	* remote-sim.c (gdbsim_fetch_register, gdbsim_store_register):
 	Pass REGISTER_SIM_REGNO converted register number to the
 	simulator.

1999-09-01  Tom Tromey  <tromey@cygnus.com>

	* config/i386/nm-linux.h (PREPARE_TO_PROCEED): Added argument.

1999-09-01  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* values.c (value_virtual_fn_field): Remove unused var(s).
	* thread.c (prune_threads): Ditto.
	* symtab.c (lookup_transparent_type): Ditto.
	(decode_line_1): Ditto.
	(make_symbol_overload_list): Ditto. 
	* rs6000-tdep.c (frame_get_saved_regs): Ditto.
	(set_processor): Ditto.
	* remote.c (remote_remove_breakpoint): Ditto.
	(remote_query): Ditto.
	(readtty): Ditto.
	* remote-sds.c (sds_fetch_registers): Ditto.
	(putmessage): Ditto.
	* ppcbug-rom.c (ppcbug_supply_register): Ditto.
	(ppcbug_open): Remove unused prototype.
	* parse.c (parse_nested_classes_for_hpacc): Remove unused var(s).
	* ocd.c (ocd_open): Ditto.
	(ocd_get_packet): Ditto.
	* monitor.c (monitor_error): Ditto.
	(monitor_wait_srec_ack): Ditto.
	* main.c (main): Ditto.
	* gdbtypes.c (count_virtual_fns): Ditto.
	* exec.c (exec_file_command): Ditto.

	* event-top.c: Include handle_sigwinch() function prototype within
 	appropriate #ifdef.

	* eval.c (evaluate_subexp_standard): Remove unused variable.
	(evaluate_subexp_standard): Remove unused variables.
	* dink32-rom.c (dink32_supply_register): Remove unused variable.
	* dbxread.c (elfstab_build_psymtabs): Ditto.
	* command.c (do_setshow_command): Ditto.
	* breakpoint.c (solib_load_unload_1): Remove unused variables 'i'
 	and 'sal'.
	(until_break_command): Remove unused variables 'arg1' and 'arg2'.
	(create_exception_catchpoint): Remove unused variable 'i'.
	* ax-gdb.c (gen_sub): Remove unused variable.
	(_initialize_ax_gdb): Ditto.

	* ser-pipe.c (pipe_readchar): If timeout is expired return
 	SERIAL_TIMEOUT.
	* ser-tcp.c (tcp_readchar): If timeout is expired return
 	SERIAL_TIMEOUT.

Wed Sep  1 15:07:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* version.h: New file.
	* Makefile.in (version_h): Define.
	(version.o): Add target.

	* remote-array.c: #include "version.h".
 	(version): Delete extern declarations.
	* Makefile.in (remote-array.o): Add dependency on version.h.

	* top.c: #include "version.h".
	(version, host_name, target_name): Delete extern declarations.
	* Makefile.in (top.o): Add dependency on version.h.

	* remote.c (remote_remove_watchpoint, remote_insert_watchpoint),
 	remote-array.c (array_open), remote-mips.c (send_srec),
 	dve3900-rom.c (store_bitmapped_register): Fix Printfs.

	* mips-tdep.c (mips_print_extra_frame_info, print_unpack),
 	m32r-rom.c (m32r_load_section), m32r-tdep.c (m32r_frame_chain),
 	dsrec.c (load_srec): Fix printf problems.
	
Wed Sep  1 13:16:49 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (monitor.o): For moment, don't try to compile with
 	-Werror.  monitor.c has -Wformat problems.  See Makefile.in for
 	more info.

Tue Aug 31 21:23:38 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (prologue_inst_adjust_sp): Correct offset computation
	for doubleword store instructions.
	(hppa_frame_find_saved_regs): Similarly.

Wed Sep  1 09:22:50 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d30v-tdep.c (d30v_print_register): 
	(tdisassemble_command): 

	* d10v-tdep.c (show_regs, trace_info, tdisassemble_command): Fix
 	printf problems.

	* remote-sim.c (dump_mem), remote-rdi.c (arm_rdi_create_inferior):
 	Fix printf arguments.

	* remote-mips.c, mips-tdep.c: Move declaration of
 	``mips_set_processor_type_command'' from here.
	* config/mips/tm-mips.h: To here.
	* remote-array.c: #include "inferior.h".
	* config/mips/tm-embed.h (remote_mips_stopped_by_watchpoint): Add
 	declaration.
	* remote-mips.c (remote_mips_stopped_by_watchpoint): Define using
 	ISO-C prototype.
	(monitor_supports_breakpoints): Integer variable.

	* m32r-rom.c: #include "inferior.h" and <ctype.h>
	* config/m32r/tm-m32r.h (m32r_write_sp): Add declaration.

	* config/i960/tm-i960.h (leafproc_return, i960_pop_frame): Add
 	declaration.
	(POP_FRAME): Call i960_pop_frame.
	* i960-tdep.c (i960_pop_frame): Rename pop_frame.
	* mon960-rom.c: #include "inferior.h" for declaration of write_pc.

1999-08-15  Fred Fish  <fnf@cygnus.com>

	* objfiles.c (objfile_relocate): Use SIZEOF_SECTION_OFFSETS when
	allocating section_offsets array.
	* remote-os9k.c (rombug_wait): Ditto.
	* remote-vx.c (vx_add_symbols): Ditto.
	* remote.c (get_offsets): Ditto.
	(remote_cisco_objfile_relocate): Ditto.
	* rs6000-nat.c (vmap_symtab): Ditto.

	* dstread.c (dst_symfile_offsets): Set section_offsets directly instead
	of returning a pointer to section offsets.
	* somread.c (som_symfile_offsets): Ditto.
	* xcoffread.c (xcoff_symfile_offsets): Ditto.
	* symfile.c (default_symfile_offsets): Ditto.
	(syms_from_objfile): The sym_offsets function has already set section
	offsets and no longer returns a value.

	* xcoffread.c (scan_xcoff_symtab): Eliminate section_offsets passed
	separate from objfile.
	(xcoff_start_psymtab): Ditto.
	(START_PSYMTAB): Ditto.
	* os9kread.c (read_minimal_symbols): Ditto.
	(read_os9k_psymtab): Ditto.
	(os9k_start_psymtab): Ditto.
	(record_minimal_symbol): Ditto.
	* dbxread.c (START_PSYMTAB): Ditto.
	(start_psymtab): Ditto.
	* mdebugread.c (START_PSYMTAB): Ditto.
	(elfmdebug_build_psymtabs): Ditto.
	(mdebug_build_psymtabs): Ditto.
	(parse_partial_symbols): Ditto.
	(new_psymtab): Ditto.
	* dwarfread.c (dwarf_build_psymtabs): Ditto.
	* partial-stab.h (START_PSYMTAB): Ditto.
	* stabsread.h (start_psymtab): Ditto.
	* dwarf2read.c (dwarf2_build_psymtabs): Ditto.
	(dwarf2_build_psymtabs_easy): Ditto.
	(dwarf2_build_psymtabs_hard): Ditto.
	* hp-psymtab-read.c (hpread_build_psymtabs): Ditto.
	(hpread_quick_traverse): Ditto.
	(hpread_start_psymtab): Ditto.
	(scan_procs): Ditto.
	* hpread.c (hpread_build_psymtabs): Ditto.
	* symfile.h (dwarf2_build_psymtabs): Ditto.

	* dbxread.c (read_dbx_symtab): Use ANOFFSET to access section
	offsets.
	* coffread.c (enter_linenos): Pass objfile instead of section
	offsets.

	* dbxread.c (dbx_symfile_read): No need to explicitly pass
	text addr and size.  Let read_dbx_symtab find them.
	(read_dbx_symtab): Get text addr and size from objfile.
	(dbx_symfile_read): Remove dead code (call to strlen);
	
1999-08-31  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* Makefile.in: add rule for sol-thread.o.
	Add rule for linux-thread.o.

1999-08-13  Jim Kingdon  <kingdon@redhat.com>

	Threads code from gdb 4.18-codefusion-990706
	[Thanks to Eric Paire, H. J. Lu, Jim Blandy and others]
	* infrun.c (signal_stop_update, signal_print_update,
	signal_pass_update): new functions.
	* inferior.h: new prototypes for above functions.
	* target.h (enum strata): add thread stratum.
	* linux-thread.c: new file.  Support for debugging linux threads.
	* config/i386/nm-linux.h: several new prototypes for above.
	* config/i386/linux.mh: add linux-thread.o to NATDEPFILES.

	More threads code from the same place:
	* config/i386/tm-linux.h (REALTIME_LO, REALTIME_HI): Add
	definitions.
	* target.h (enum target_signal): Add TARGET_SIGNAL_REALTIME_32.
	* target.c (signals, target_signal_from_host,
	target_signal_to_host): Add clauses for
	TARGET_SIGNAL_REALTIME_32.
	
1999-08-31  Neil Schellenberger <neil.schellenberger@crosskeys.com>

	* sol-thread.c (sol_thread_detach): strip thread-id out of 
	inferior_pid, so that procfs_detach can't choke on it.

1999-08-31  J.T. Conklin  <jtc@redback.com>

	* i386-stub.c, m32r-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
 	sparcl-stub.c, sparclet-stub.c (getpacket): Remove 'buffer' arg,
	define it as a pointer to &remcomInBuffer[0].
	(handle_exception): Update.

	* sparc-stub.c, sparcl-stub.c, sparclet-stub.c (handle_exception):
 	Removed #ifdef'd out code which implements the non-standard 'b'
	(set baud rate) command.

1999-08-31  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (keep_going): New function, broken out from the
 	keep_going label in handle_inferior_event.
	(handle_inferior_event): Change more gotos into function calls.

Tue Aug 31 02:29:27 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (read_unwind_info): Handle multiple unwind sections.

Tue Aug 31 15:28:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/alpha/tm-alpha.h (PRINT_EXTRA_FRAME_INFO): Fix printf
 	format argument.
	* alpha-tdep.c (heuristic_proc_start): Ditto.

	From Stan Shebs <shebs@andros.cygnus.com>:
	* defs.h (strlen_paddr): Fix prototype - add void argument list.

Tue Aug 31 14:02:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_print_host_address), utils.c
 	(gdb_print_host_address): Rename gdb_print_address.

	* expprint.c, gdbtypes.c, symmisc.c: Update.

	*expprint.c: Use gdb_print_host_address when displaying native
 	pointers.

Sat Aug 28 14:23:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* scm-valprint.c (scm_ipruk), jv-valprint.c (java_value_print),
 	cp-valprint.c (cp_print_class_member), exec.c (exec_files_info),
 	remote.c (putpkt_binary, compare_sections_command,
 	remote_cisco_section_offsets), dcache.c (dcache_info),
 	breakpoint.c (break_at_finish_at_depth_command_1,
 	break_at_finish_command_1), symfile.c (generic_load),
 	(report_transfer_performance), top.c (get_prompt_1), f-valprint.c
 	(f_val_print), maint.c (maintenance_translate_address): Fix printf
 	-Wformat warnings.  Use paddr, paddr_nz, sizeof_paddr, paddr_u and
 	paddr_d to print addresses. Change ``d'' to ``ld''.

	* utils.c (strlen_paddr): New function.
	
Tue Aug 31 01:36:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d30v/tm-d30v.h (d30v_frame_chain,
 	d30v_init_frame_pc): Add declaration.

	* arc-tdep.c (arc_pop_frame): Rename pop_frame.
	(arc_push_dummy_frame): Rename push_dummy_frame.
	(arc_set_cpu_type_command): Add declaration.
	
	* config/arc/tm-arc.h (arc_pop_frame, arc_push_dummy_frame): Add
 	declaration.
	
1999-08-30  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (prepare_to_wait): New function, broken out from the
 	wfi_continue label in handle_inferior_event.
	(handle_inferior_event): Change more gotos into function calls.

1999-08-30  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* tracepoint.c: -Wall warning cleanup. 
	(parse_and_eval_memrange): remove (unused).
	(output_command, args_info, locals_info, registers_info): add decls.
	(getpkt, putpkt, remote_console_output): add decls.
	(isalnum, isspace): cast arg to avoid warning.
	(printf, fprintf, sprintf): use [fs]printf_vma for printing addrs.
	
Mon Aug 30 21:47:58 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c: #include "language.h".

Mon Aug 30 20:38:57 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (AC_CHECK_HEADERS): Check for <time.h>.
	* configure, acconfig.in: Re-generate.

	* remote-rdp.c: #include <time.h>

	* config/arm/tm-arm.h (arm_float_info): Add declaration.

	* arm-tdep.c (convert_from_extended, convert_to_extended): Change
 	double ptr arg to void ptr arg.

	* config/arm/tm-arm.h (arm_frameless_function_invocation): Add
 	declaration.
	(arm_frame_find_saved_regs): Rename frame_find_saved_regs.
	(convert_from_extended, convert_to_extended): Add declaration.

Mon Aug 30 19:05:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (WERR_CFLAGS): Separate the -Werror flag.
	* configure: Re-generate.

	* Makefile.in (INTERNAL_CFLAGS): Re-define using
 	INTERNAL_WARN_CFLAGS.
	(INTERNAL_WARN_CFLAGS): Define.  Leave off WERR_CFLAGS.
	(tracepoint.o): Add explicit rule.
	(WERR_CFLAGS): Add definition.

Mon Aug 30 17:52:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c: #include "event-loop.h" for declaration of
 	async_request_quit.
	* Makefile.in (utils.o): Add dependency on event-loop.h.

	* event-top.c (mark_async_signal_handler_wrapper,
 	async_request_quit): Move declaration from here.
	* event-loop.h: To here.
	
	* defs.h: Add declaration of exec.c:exec_set_section_offsets.

	* event-top.c: #include "gdbcmd.h" which includes "command.h" and
 	hence expose declaration of function dont_repeat.

	* top.c (ISATTY), tracepoint.c (ISATTY), utils.c (ISATTY),
 	event-top.c (ISATTY): Move definitions from here.
	* defs.h (ISATTY): To here. #include <unistd.h>.

	* sol-thread.c, solib.c, source.c, sparcl-tdep.c, tracepoint.c,
 	utils.c, win32-nat.c, wince.c, top.c, symfile.c, ser-unix.c,
 	ser-tcp.c, procfs.c, maint.c, infttrace.c, hppa-tdep.c,
 	ser-pipe.c, remote-rdp.c, main.c, inftarg.c, inflow.c,
 	hpux-thread.c, hp-psymtab-read.c, go32-nat.c, fork-child.c,
 	corelow.c, command.c: Do not #include <unistd.h>, moved to defs.h.

Mon Aug 30 15:14:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (struct tui_stream, enum streamtype): Move from here.
	* utils.c: To here.

	* main.c (tui_file_fputs): Move from here.
	* utils.c: To here.

Sun Aug 29 10:03:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdb-events.h, gdb-events.c, gdb-events.sh: New files.

1999-08-27  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* solib.c (open_symbol_file_object): new function.
	Called when attaching to a new process, if there is no loaded
	symbol file.  Attempts to locate the executable file for the
	attached process and load symbols from it.
	(solib_add): Call open_symbol_file_object if attaching to a
	new process and no open symbol file.	

1999-08-27  Jason Molenda  (jsm@bugshack.cygnus.com)

	* config/i386/tm-sun386.h (GDB_TARGET_IS_SUN386): Definition
	removed--no longer checked anywhere in gdb.

1999-08-27  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (stop_stepping): New function, broken out from
	stop_stepping label in handle_inferior_event.
	(handle_inferior_event): Change gotos into function calls.

Fri Aug 27 20:13:22 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (LONGEST): Move definition to earlier in file - to just
 	after BFD.
	(paddr_u, paddr_d): Declare.
	* utils.c (decimal2str): New function.
	(paddr_u, paddr_d): Define.

	* remote.c (remote_cisco_section_offsets,
 	compare_sections_command): Fix XprintfX arguments.  Use paddr...
	(putpkt_binary): Fix XprintfX arguments.

Tue Aug 24 21:30:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

        * arm-tdep.c (arm_init_extra_frame_info): Add braces.  Recommended
        by gcc -Wparentheses.

1999-08-26  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (check_sigtramp2): New function, broken out from
	check_sigtramp2 label in handle_inferior_event.
	(handle_inferior_event): Change gotos into function calls.

	Declare Tahoe configuration obsolete.
	* configure.host, configure.tgt: Comment out Tahoe configs.
	* Makefile.in: Comment out Tahoe-related action.
	* tahoe-tdep.c, config/tahoe/*: Comment out.
	* NEWS: Mention obsolete status.

1999-08-26  J.T. Conklin  <jtc@redback.com>

	* i386-stub.c, m32r-stub.c, m68k-stub.c, sh-stub.c, sh-stub.c,
	sparc-stub, sparcl-stub.c sparclet-stub.c (getpacket): If '$',
	the packet start character is received in the 'middle' of a 
	packet, assume that packet end character has been lost and
	start a new packet.

	* i386-stub.c, m32r-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
 	sparcl-stub.c sparclet-stub.c (getpacket): Changed to return ptr
 	to first character of input buffer.  Removed & 0x7f masks.
	(handle_exception): Don't access remcomInBuffer directly.

1999-08-25  Stan Shebs  <shebs@andros.cygnus.com>

	* breakpoint.c (disable_breakpoints_in_shlibs): Only disable
	enabled breakpoints.

Tue Aug 24 14:59:23 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* tracepoint.c, remote.c, pa64solib.h, value.h, somsolib.h,
 	solib.h, scm-lang.h, language.h, inferior.h, defs.h, coff-solib.h,
 	ch-lang.h, breakpoint.h, annotate.h: Remove #if __STDC__ wrapping
 	struct declarations.

	* config/sparc/nm-sun4sol2.h, config/mn10300/tm-mn10300.h,
 	config/mn10200/tm-mn10200.h, config/i386/tm-i386.h,
 	config/i386/tm-i386v.h, config/i386/nm-i386sol2.h,
 	config/pa/nm-hppah.h, config/rs6000/nm-rs6000.h,
 	config/sparc/tm-sp64.h, config/v850/tm-v850.h,
 	config/tic80/tm-tic80.h, config/sparc/tm-sparc.h,
 	config/sh/tm-sh.h, config/rs6000/tm-rs6000.h, config/pa/tm-hppa.h,
 	config/mips/tm-mips.h, config/m68k/tm-m68k.h,
 	config/m32r/tm-m32r.h, config/i960/tm-mon960.h,
 	config/fr30/tm-fr30.h, config/h8300/tm-h8300.h,
 	config/arm/tm-arm.h, config/alpha/tm-alpha.h,
 	config/a29k/tm-a29k.h: Ditto.

Wed Aug 25 10:45:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (gdb$(EXEEXT)): Add dependency on TDEPLIBS.

	* config/arm/arm.mt (TDEPLIBS): Define.  Move libangsd.a to here.
	(TDEPFILES): From here.

1999-08-24  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c (init_main): Add new set/show command exec-done-display,
 	default value is off.
	* event-loop.h: Export exec_done_display_p.
	* event-top.c: New variable exec_done_display_p.
	* infrun.c (complete_execution): Print completion message if
 	corresponding flag is set.

	* top.c (DEFAULT_PROMPT): Add space after "(gdb)" at end of prompt.

	From: J.T. Conklin  <jtc@redback.com> 
	* top.c (DEFAULT_PROMPT): Set to "(gdb)" if not already defined.
	(init_main): Always use DEFAULT_PROMPT.

Tue Aug 24 03:23:31 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c: Remove useless "purecov: deadcode" comments.
	(hppa_use_struct_convention): Update for PA64.
	(hppa_frame_saved_pc): Properly extract the saved PC in a call
	dummy frame.
	(in_solib_call_trampoline): Return nonzero if we are in a function
	called ".stub".
	(prologue_inst_adjust_sp): Handle std,ma.
	(skip_prologue_hard_way): Handle more PA2.0/PA64 insns.
	(hppa_frame_find_saved_regs): Similarly.  Handle indirect save of
	%r3 into the stack.

	* config/pa/tm-hppa64.h (CALL_DUMMY_BREAKPOINT_OFFSET_P): Define.
	(CALL_DUMMY_BREAKPOINT_OFFSET): Define.

Tue Aug 24 14:59:23 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (gdb$(EXEEXT)): Add dependency on main.o that was
 	lost when libgdb.a was added.

Tue Aug 24 14:26:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c, gdbarch.h: Convert to pure ISO-C.
	
	* gdbarch.sh: New file.
	* gdbarch.c, gdbarch.h: Add note describing gdbarch.sh

Mon Aug 23 19:36:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* Makefile.in (libgdb.a): New target.
	(gdb$(EXEEXT)): Add dependency on libgdb.a.
	(libgdb-files, LIBGDB_OBS, libgdb, LIBGDBDEPS, LIBGDBFILES): Delete.

Mon Aug 23 10:16:32 1999  Jeffrey A Law  (law@cygnus.com)

	* infttrate.c (child_pid_to_exec_file): Find the correct base
	of the stack for PA64.

	* pa64solib.c: Fix some minor whitespace problems.
	(bfd_lookup_symbol): New function.
	(pa64_solib_create_inferior_hook): Find the address __dld_break
	in the dynamic linker.  Try to set a shlib event breakpoint in
	that function.
	(add_to_solist): Do not add the same shared library to the shlib
	list more than once.

Sun Aug 22 14:49:40 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* value.h (enum lval_type): Move declaration from here.
	* defs.h (enum lval_type): To here.
	* frame.h, gdbarch.h: Delete incomplete declaration of ``enum
 	lval_type''.
	
1999-08-20  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* breakpoint.c (can_use_hardware_watchpoint): reject expressions
	that refer to registers or register variables.

Fri Aug 20 10:53:38 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (hppa_fix_call_dummy): Provide PA2.0W aware code.

	* pa64solib.c pa64solib.h: New files.

	* config/pa/hppa64.mt: Delete commented out code that is and
	never will be appropriate for this target.
	* config/pa/hpux11w.mt (TDEPFILES): Remove SOM references.  Also
	remove pa64solib.o.
	* config/pa/hpux11w.mh (NATDEPFILES): Remove SOM references.

	* configure.host; Use "hpux11w" and "hpux11" instead of
	"hpux1100w" and "hpux1100" respectively
	* config/pa/hpux11w.mh: Renamed from hpux1100w.mh.
	* config/pa/hpux11w.mt, config/pa/hpux11.mh: Likewise.
	* config/pa/hpux11.mt: Likewise.

1999-08-19  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* breakpoint.h (target_hw_bp_type): new enum.
	* breakpoint.c (insert_breakpoints): use enum instead of consts.
	(remove_breakpoint): use enum instead of consts.
	(throughout): use "warning" instead of "fprintf(stderr, ..."
	[Also clean up a bunch of excessively long lines.]
	
1999-08-19  J.T. Conklin  <jtc@redback.com>

	* i386-stub.c (waitabit): Removed.
	(breakpoint): Update.

	* i386-stub.c, m32r-stub.c, sparc-stub.c, sparcl-stub.c,
 	sparclet-stub.c (set_debug_traps): Don't send gratuitous ACK.

	* m68k-stub.c (putpacket): Restore code so that packets are sent
 	until an ACK is received.

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* breakpoint.c (bpstat_stop_status): Accept triggered addresses
	anywhere inside the region occupied by a watched variable as a
	sign that the watchpoint fired.  Don't stop if some watchpoint
	was triggered, but its address doesn't match the address of this 
	watchpoint.
	(TARGET_REGION_OK_FOR_HW_WATCHPOINT): New macro.
	Default definition is to call TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT.
	(can_use_hardware_watchpoint): Call TARGET_REGION_OK_FOR_HW_WATCHPOINT;
	if it returns zero, return zero immediately. 
	(insert_breakpoints): Try to insert watchpoints for all the values
	on the value chain, even if some of them fail to insert.  Remove
	the breakpoint if parts of its value chain couldn't be inserted.
	
1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (go32_stopped_by_watchpoint): Remove unused code.

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (tcgetpgrp, tcsetpgrp): New functions.

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (go32_wait): If we are in a single-step mode, and the
	next instruction is INT nn or INTO, use a temporary breakpoint to
	simulate single-step mode, and reset the trace flag.

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (wp_op): New typedef.
	(SHOW_DR): Print the length of watched region as well.
	(go32_insert_aligned_watchpoint): Remove unused argument PID.  All
	callers and the prototype changed.
	(go32_handle_nonaligned_watchpoint): Renamed from
	go32_insert_nonaligned_watchpoint.  Now handles all operations on
	non-aligned watchpoints: insertion, deletion, and counting.  If
	called with wp_count as the first argument, return the count of
	debug registers needed to watch the region.  Don't break out of
	the loop before all the addresses in the region are processed.
	(go32_remove_watchpoint): Call go32_remove_aligned_watchpoint to
	do the actual work.
	(go32_remove_aligned_watchpoint): New function, modeled after
	go32_insert_aligned_watchpoint.  Removes watchpoints that watch
	regions of arbitrary length by calling
	go32_handle_nonaligned_watchpoint as needed.
	(go32_region_ok_for_watchpoint): New function, called from
	can_use_hardware_watchpoint via the new macro
	TARGET_REGION_OK_FOR_HW_WATCHPOINT.

	* config/i386/nm-go32.h (TARGET_REGION_OK_FOR_HW_WATCHPOINT):
	Define to call go32_region_ok_for_watchpoint.
	(DECR_PC_AFTER_HW_BREAK): Define back to zero (previous redefinition
	to 1 was due to a bug in go32-nat.c).

1999-08-19  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (cleanup_dregs): New function.
	(go32_mourn_inferior): Call it.
	(IS_REG_FREE, LOCAL_ENABLE_REG, GLOBAL_ENABLE_REG, DISABLE_REG,
	SET_BREAK, SET_WATCH, IS_WATCH, WATCH_HIT): Protect arguments with
	parentheses.
	(SET_BREAK): Increment the debug register's reference count.
	(DR_DEF): New macro, returns the access and length bits of the
	breakpoint.
	(SHOW_DR): Print the reference count of each register.  Disable or
	enable print-out depending on an environment variable GDB_SHOW_DR.
	(go32_insert_aligned_watchpoint): Look for an occupied debug
	register with the same address and access/length bits, and reuse
	it by incrementing reference the count, before occupying another
	register.  Return zero upon success.
	(go32_insert_nonaligned_watchpoint): Pass the read/write bits to
	go32_remove_watchpoint.
	(go32_remove_watchpoint): Accept an additional parameter: the
	read/write bits of the watchpoint to remove, and only remove a
	watchpoint if it's occupied and its address and read/write bits
	match.  Only disable the register if its reference count is zero;
	otherwise just decrease the reference count.
	(go32_remove_hw_breakpoint): Only decrease reference count and
	disable the debug register if it is occupied and its access bits
	match those of an instruction breakpoint.
	(go32_insert_hw_breakpoint): Before occupying another debug
	register, look for an already occupied register that defines an
	instruction breakpoint with the same address.  If found, increment
	its reference count.  Call SHOW_DR even if failed to insert a
	breakpoint.

	* config/i386/nm-go32.h (target_remove_watchpoint): Accept the
	TYPE argument as well.

Wed Aug 18 17:47:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mips-tdep.c: Add more comments.

1999-08-17  Stan Shebs  <shebs@andros.cygnus.com>

	* blockframe.c: Don't use PARAMS anymore, remove obsolete comment
	about frameless functions.

1999-08-16  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* thread.c (delete_thread): delete any step_resume breakpoint
	held by the thread.  (prune_threads): call delete_thread.
	* breakpoint.c (breakpoint_init_inferior): if startup, then
	delete any remaining step_resume breakpoints.
	* infrun.c (handle_inferior_event): add cautionary comment.

1999-08-16  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* remote.c (remote_async_mourn): New function. Async version of
	remote_mourn().

1999-08-16  Eli Zaretskii  <eliz@is.elta.co.il>

	* terminal.h [__GO32__]: Remove conditional; DJGPP now supports
	termios.

1999-08-16  Eli Zaretskii  <eliz@is.elta.co.il>

	* command.c (CANT_FORK) [__MSDOS__]: Define.
	(shell_escape) [CANT_FORK]: If ARG is NULL, pass an empty string
	to `system'.
	[__DJGPP__]: Return to the original directory after the shell
	exits.

1999-08-16  Eli Zaretskii  <eliz@is.elta.co.il>

	* config/i386/xm-go32.h (ROOTED_P): Don't reference X[1] if X[0]
	is a null character.

	* config/i386/nm-go32.h (DECR_PC_AFTER_HW_BREAK): Define to 1.

1999-08-16  Eli Zaretskii  <eliz@is.elta.co.il>

	* go32-nat.c (redir_cmdline_parse, redir_cmdline_delete,
	redir_to_child, redir_to_debugger, redir_debug_init)
	[__DJGPP_MINOR__ < 3]: Dummy stubs for redirecting debuggee's
	standard handles.
	(print_387_status): Print "last FP instruction", not "last
	exception".  Restore the upper 5 bits of the opcode that aren't
	stored in the FPU state.  Print the FPU stack in its physical
	order, not relative to ST(0).  Print "special", not "trap" for
	unnormals and infinities.  Print all 10 bytes of each FP register,
	and print them with 19 significant digits.
	(regno_mapping): Make the mapping consistent with tm-go32.h.
	(sig_map): Add mappings for SIGQUIT, SIGFPE, SIGALRM.  Map NMI to
	SIGBUS.
	(excep_map): New variable, maps GDB signals to DJGPP exceptions.
	(go32_attach): Signal an error: we cannot attach to other
	processes.
	(go32_resume): Record the signal with which the inferior should be
	resumed, mapped to the DJGPP exception number.
	(go32_wait): Pass the signal recorded in go32_resume to the
	debuggee.  Save and restore debugger's and debuggee's current
	working directory.
	[__DJGPP_MINOR__ < 3]: Save and restore inferior's FPU state.
	(store_register): FPU regsiters have numbers less than 31.
	(go32_kill_inferior): Delete the parsed command-line storage.
	(go32_create_inferior): Initialize the parsed command-line
	storage.  Parse the command line and create the redirections for
	inferior's standard handles.
	[__DJGPP_MINOR__ < 3]: Init the inferior's FPU state.
	(ignore2): Function deleted.
	(device_mode): New function, switches a character device between
	raw and cooked mode.
	(go32_terminal_init): Invalidate the raw/cooked mode information.
	(go32_terminal_info): Print whether the inferior's terminal is in
	raw or cooked mode.
	[__DJGPP_MINOR__ > 2]: Say if standard handles are redirected or
	closed by the inferior.
	(go32_terminal_inferior): Switch standard handles to the
	inferior's files/devices.  Put the inferior's input device to
	raw/cooked mode, exactly like we found it last time.
	(go32_terminal_ours): Restore debugger's standard handles and put
	the terminal into cooked mode.  Save the mode of inferior's input
	device.
	(init_go32_ops): Assign go32_ops.to_attach,
	go32_ops.to_terminal_info, go32_ops.to_terminal_ours_for_output.
	Initialize inferior's cwd and the command-line storage.

Mon Aug 16 14:29:30 1999  Jeffrey A Law  (law@cygnus.com)

	* config/pa/tm-hppa.h (ARGS_GROW_DOWNWARD): Define.
	* config/pa/tm-hppa64.h (ARGS_GROW_DOWNWARD): Undefine.
	* hppa-tdep.c (hppa_push_arguments): Handle arguments growing in
	both directions depending ARGS_GROW_DOWNWARD.
	(hppa_find_saved_regs): Update for 64bit wide registers & pointers
	and PA64 ABI. 

	* hppa-tdep.c (hppa_pop_frame): Various fixes for 64bit wide
	registers and pointers.
	(hppa_fix_call_dummy, skip_trampoline_code): Likewise.
	(restore_pc_queue): Update tests for width of memory loads.
	(hppa_push_arguments): Delete version that was #if 0'd out.

	* hppa-tdep.c (push_dummy_frame): Handle the new 64it ABI.
	(find_dummy_frame_regs): Corresponding changes.

	* hppa-tdep.c (read_unwind_info): Initialize obj_private->dp.
	(internalize_unwinds): Improve test for when to use segment
	relative code for unwinder bounds.
	(rp_saved): Fix offset of saved return pointer for the 64bit ABI.
	(hppa_frame_saved_pc): Various updates to handle 64bit registers
	and pointers.
	(frame_chain, restore_pc_queue): Likewise.

	* hppa-tdep.c (rp_saved): RP is saved at frame-16 when
	pointers are 64bits wide.

	* hppa-tdep.c (record_text_segment_lowaddr): New function.
	(internalize_unwinds): Use it if addressess are 8 bytes wide. 

	* symfile.c (syms_from_objfile): No longer warn if the lowest
	section does not have SEC_CODE set.

	* Makefile.in (pa64solib.o): Add dependencies.

	* hppah-nat.c (store_inferior_registers): Do not try to write a
	nonzero value to the high part of IPSW.  Fix typo in unable to store
	warning.

	* config/pa/tm-hppa.h (opd_data structure): Delete.  Not actually
	needed.
	(struct obj_private_struct): Add new entry for the objfile's DP
	value.
	* config/pa/tm-hppa64.h (CALL_DUMMY): Add a nop to make it an even
	number of instructions.  Pack the dummy into word sized hunks.
	(CALL_DUMMY_LENGTH): Update appropriately.
	(PC_IN_CALL_DUMMY, CALL_DUMMY_LOCATION_AFTER_TEXT_END): Delete.

Mon Aug 16 19:08:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in: Try -lsocket when looking for socketpair.
	* configure, config.h: Re-generate.

1999-08-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	From Christopher Faylor <cgf@cygnus.com>:
	
	* event-loop.c (gdb_wait_for_event): Before going to wait for
 	another event with select or poll, flush the error and the output
 	streams.

	* event-top.c (gdb_readline2): Do not buffer the input, because
 	doing so can interfere with select/poll in bad ways.

Fri Aug 13 17:36:56 1999  Eli Zaretskii  <eliz@is.elta.co.il>

	* maint.c (maintenance_dump_me) [__DJGPP__]: Simulate a core dump
 	with SIGABRT.
	* utils.c (quit) [__MSDOS__]: Don't mention SIGINT, since it's not
 	gonna happen.
	(notice_quit): No need to define this function for the DJGPP port.

1999-08-13  James Ingham  <jingham@leda.cygnus.com>

	* arm-tdep.c (arm_frameless_function_invocation): SKIP_PROLOGUE
	macro no longer modifies its argument.  Update uses to accord.

	* config/arm/arm.mt (TDEPFILES): Add the remote-rdi.o to the
	TDEPFILES.
	* configure.tgt: Add rdi-share to configdir for the Arm targets.

Fri Aug 13 11:16:32 1999  Jeffrey A Law  (law@cygnus.com)

	* hppah-nat.c (store_inferior_registers): Revamp to be PA2.0W
	aware.

	* infttrace.c (ttrace_write_reg_64): New function.

	* hp-symtab-read.c (is_in_import_list): Delete extern declaration.
	* somread.c (is_in_import_list): Delete function.
	* objfiles.c (is_in_import_list): New function.
	* objfiles.h (is_in_import_list): Declare.

	* config/pa/tm-hppa64.h (GDB_TARGET_IS_HPPA20W): Define before
	including tm-hppah.h.
	(PC_IN_CALL_DUMMY): Define.
	(HPUX_1100): Similarly.
	* config/pa/tm-hppa.h (somsolib.h, pa64solib.h): Conditionalize
	includes on GDB_TARGET_IS_HPPA20W.

	* configure.host: Distinguish between wide and narrow modes
	for hpux11.
	* config/pa/hpux1100w.mh, config/pa/hpux1100w.mt: New files.

	* config/pa/tm-hppa64.h (STACK_ALIGN): Redefine.
	(REG_PARM_STACK_SPACE): Likewise.

	* config/pa/tm-hppa.h (CLEAN_UP_REGISTER_VALUE): Handle 64bit
	PA target correctly.
	(REG_PARM_STACK_SPACE): Define.
	(struct unwind_table_entry): region_start and region_end are
	CORE_ADDRs.
	(typedef opd_data): New.
	(obj_private_data_t): Include pointer to opd_data structure.

1999-08-13  Keith Seitz  <keiths@cygnus.com>

	* stabsread.c (stabsread_clear_cache): New funciton which clears
	an optimization cache of the reader.

	* coffread.c (coff_symfile_finish): Give stabs reader a chance to
	clean up.

	* win32-nat.c (handle_load_dll): Don't suppress re-reading symbols
	from a DLL if an objfile for it already exists. (Not that this should
	happen anymore anyway...)

1999-08-13  Keith Seitz  <keiths@cygnus.com>

	* config/mcore/tm-mcore.h (SAVE_DUMMY_FRAME_TOS): Define for MCore,
	which also requires that the stack pointer be saved for call
	dummies BEFORE arguments get pushed onto it.

1999-08-12  Stan Shebs  <shebs@andros.cygnus.com>

	From Eli Zaretskii  <eliz@is.elta.co.il>:
	* source.c (mod_path) [_WIN32 || __DJGPP__]: Don't remove trailing
	slash from "d:/".  Don't overstep the beginning of name.
	[_WIN32 || __MSDOS__]: Convert "d:" to "d:.", otherwise appending
	a slash changes its meaning.
	(openp): Use SLASH_P, not equality with SLASH_CHAR.
	(print_source_lines_base) [CRLF_SOURCE_FILES]: Skip \r only before
	a \n.
	(forward_search_command) [CRLF_SOURCE_FILES]: Remove \r at the end
	of all lines.
	(reverse_search_command) [CRLF_SOURCE_FILES]: Likewise.

	* gnu-regex.c (CHAR_CLASS_MAX_LENGTH): Don't use wide characters
 	unless HAVE_BTOWC is defined.

Fri Aug 13 10:20:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	From J.T. Conklin <jtc@redback.com>:
	* gdbinit.in: Change the template .gdbinit to match the recent
 	fatal error handling change.

1999-08-11  Keith Seitz  <keiths@cygnus.com>

	* maint.c (maintenance_internal_error): Fix typo in prototype.

Wed Aug 11 15:38:05 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* remote.c (remote_rcmd): Pass an empty command across to the
 	target.  Check for and handle an ``Enn'' return status.

Tue Aug 10 13:59:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* maint.c (_initialize_maint_cmds): Add ``maintenance
 	internal-error'' command.
	(maintenance_internal_error): New function.

1999-08-10  James Ingham  <jingham@leda.cygnus.com>

	* top.c: Remove the disassembly_flavor_hook, use the new set_hook
	instead. 
	* defs.h: Ditto.
	* arm-tdep.c (set_disassembly_flavor_sfunc):  Ditto.

1999-08-10  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* config/i386/nm-i386sol2.h (FIND_NEW_THREADS): remove, obsolete.
	* config/sparc/nm-sun4sol2.h (FIND_NEW_THREADS): remove, obsolete.
		
1999-08-10  J.T. Conklin  <jtc@redback.com>

	* configure.tgt (i[3456]86-*-aout*, i[3456]86-*-coff*,
 	i[3456]86-*-elf*): Use embed.mt.
	* config/i386/embed.mt: New file.

1999-08-10  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* remote.c (remote_async_open_1): Remove casting in call to
 	add_file_handler.
	(extended_remote_async_create_inferior): Ditto.

	* event-top.c (change_line_handler): Ditto.
	(_initialize_event_loop): Ditto.

	* infrun.c (complete_execution): Ditto.

	* event-loop.c (add_file_handler): Change proc parameter to be ptr
 	to func with void parameter, rather than void*. Coerce second
 	paramter in calls to create_file_handler. Replace
 	async_handler_func and file_handler_func with handler_func.

	* event-loop.h: Get rid of typedefs for file_handler_func and
 	async_handler_func, just have one, and call it handler_func.
  	Replace async_handler_func and file_handler_func occurrences with
 	handler_func.

Tue Aug 10 03:13:03 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c: Delete random #if 0 code.
	(is_branch): Handle new branching opcodes from PA2.0
	(inst_saves_gr, inst_saves_fr): Handle additional instructions
	used to save general and floating point registers in the stack.
	(skip_prologue_hard_way): Handle additional instructions to
	save the return pointer in the stack.
	(after_prologue): Fix mis-guided and incorrect code to find
	the end of the prologue using debug symbols.
	(hppa_skip_prologue): Generally clean up comments, lose code
	which does not apply to the PA, etc.

Sun Aug  8 17:53:41 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* MAINTAINERS: Make Andrew Cagney the mn10300 maintainer.
  	Transfer responsibility for the PowerPC from Andrew Cagney to
 	Elena Zannoni.

Tue Aug 10 13:59:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	Based on code from J.T. Conklin <jtc@redback.com>:
	* utils.c (internal_error): Make quit? and coredump? separate
 	questions so that the user can dump-core and not quit.
	(internal_error): Cleanup error message.

1999-08-09  Tom Tromey  <tromey@cygnus.com>

	* kod-cisco.c (cisco_kod_open): Removed incorrect `arg' argument.

Sun Aug  8 12:06:47 1999  Fred Fish  <fnf@cygnus.com>

	* coffread.c (process_coff_symbol): Remove section_offsets from
	prototype and function definition.  Get section_offsets from the
	passed objfile and pass it on to callees the same way.
	(coff_symtab_read): Ditto.
	(coff_symfile_read): Ditto.
	* dbxread.c (read_dbx_dynamic_symtab): Ditto.
	(read_dbx_symtab): Ditto.
	(dbx_symfile_read): Ditto.
	(coffstab_build_psymtabs): Ditto.
	(elfstab_build_psymtabs): Ditto.
	(stabsect_build_psymtabs): Ditto.
	* dstread.c (dst_symfile_read): Ditto.
	* elfread.c (elf_symfile_read): Ditto.
	* jv-class.c (jv_class_symfile_read): Ditto.
	* mipsread.c (mipscoff_symfile_read): Ditto.
	* nlmread.c (nlm_symfile_read): Ditto.
	* os9kread.c (os9k_symfile_read): Ditto.
	* somread.c (som_symfile_read): Ditto.
	* stabsread.h (elfstab_build_psymtabs): Ditto.
	* xcoffread.c (xcoff_initial_scan): Ditto.

	* symfile.h (sym_read): Remove section_offsets from prototype.
	* symfile.c (syms_from_objfile): Call sym_read without
 	section_offsets.
	(reread_symbols): Ditto.

	* elfread.c (elfstab_offset_sections): Use SIZEOF_SECTION_OFFSETS
	to allocate sections offsets array.
	* xcoffread.c (xcoff_symfile_offsets): Ditto.

	* partial-stab.h (section_offsets): Get from objfile.
	* dbxread.c (read_dbx_symtab): Fix typo that made -1 casted
	to a CORE_ADDR look like an subtraction expression.
	* objfiles.h: Add some comments.
	* symfile.c: Add some comments.
	* objfiles.c: Add some comments.
	(objfile_relocated): Use ALL_OBJFILE_OSECTIONS to iterate over
	sections.
	(find_pc_sect_sections): Use ALL_OBJSECTIONS to iterate over all
	sections in all objfiles.
	* symfile.c (syms_from_objfile): Use ALL_OBJFILE_OSECTIONS.

	* irix5-nat.c (symbol_add_stub): Fix typo that made taking the
	address of lowest_sect with '&' look like a bitwise and op.
	* osfsolib.c (symbol_add_stub): Ditto.
	* solib.c (symbol_add_stub): Ditto.
	* symfile.c (syms_from_objfile): Ditto.

	* dwarf2read.c (dwarf2_build_psymtabs_hard): Minor format tweak.
	* symfile.c (syms_from_objfile): Ditto, and fix typo.
	* top.c (init_main): Fix typo in comment (DEFULAT_PROMPT).
	* doc/gdbint.texinfo (find_sym_fns): This replaces symfile_init.

1999-08-08  James Ingham  <jingham@leda.cygnus.com>

	* remote.c (remote_insert_breakpoint): Fix typo in Z packet support. 
	Also move Z packet support OUTSIDE of REMOTE_BREAKPOINT ifdef,
	since this is not set for all targets that support the Z packet.

Fri Aug  6 17:17:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (fatal): Delete declaration.
	(internal_error): Declare.
	* utils.c (nomem): Call internal_error instead of fatal.
	(fatal_dump_core): Delete.
	(malloc_botch): Print message direct to stderr.
	(fatal): Delete definition.
	* utils.c (internal_error): Define.
	
	* gdbarch.h, gdbarch.c, hppah-nat.c, ch-exp.c, dsrec.c, sh-tdep.c,
 	infptrace.c, f-lang.c, symm-nat.c, top.c, m3-nat.c, v850-tdep.c,
 	remote-vx.c, remote-sim.c, remote-mips.c, source.c, infcmd.c,
 	findvar.c, remote.c: Replace fatal with call to internal_error.

Sun Aug  8 15:28:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c (STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO): Move
 	definition from here.
	* defs.h: To here.
	
Sat Aug  7 21:44:59 1999  Fred Fish  <fnf@cygnus.com>

	* remote.c (remote_insert_breakpoint): Fix typo, missing ';'.

Sun Aug  8 11:26:57 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mips-tdep.c (mips_gdbarch_init): Add break; to the default case.

Fri Aug  6 19:26:03 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h: Delete #if ANSI_PROTOTYPES code, GDB assumes ISO-C.
	* remote-rdp.c (send_rdp), remote-os9k.c (printf_monitor),
 	remote-mips.c: (mips_error), remote-array.c: (printf_monitor,
 	debuglogs), complaints.c (complain), monitor.c:
 	(monitor_printf_noecho, monitor_printf), language.c (type_error,
 	range_error), remote-st.c: (printf_stdebug), remote-sim.c
 	(gdb_os_printf_filtered, gdb_os_vprintf_filtered,
 	gdb_os_evprintf_filtered, gdb_os_error), serial.c (serial_printf),
 	utils.c (warning, error, fatal, fatal_dump_core, (query,
 	fprintf_filtered, fprintf_unfiltered, fprintfi_filtered,
 	printf_filtered, printf_unfiltered, printfi_filtered): Delete
 	legacy #ifndef ANSI_PROTOTYPES varargs code.

	* defs.h: Don't #include <varargs.h>.
	* remote-rdp.c, remote-os9k.c, remote-mips.c, remote-array.c,
 	monitor.c, remote-st.c: Don't include <varargs.h> or <stdarg.h>.

1999-08-06  James Ingham  <jingham@leda.cygnus.com>

	* configure.in, configure: add the --enable-multi-ice to determine 
	whether to configure and build the multi-ice-gdb-server.  Note,
	for now this only builds on cygwin, so don't enable it for other
	platforms... 

1999-08-06  Tom Tromey  <tromey@cygnus.com>

	* Makefile.in (SFILES): Added kod.c and kod-cisco.c.
	(COMMON_OBS): Added kod.o and kod-cisco.o.
	(kod-cisco.o): New target.
	(kod.o): New target.
	* kod-cisco.c: New file.
	* kod.c: New file.

1999-08-06  James Ingham  <jingham@leda.cygnus.com>

	These are some fixups for the Arm, and support for the
	disassembly-flavor for the ARM.
	
	* defs.h: Declare the disassembly_flavor_hook
	* top.c: Define the disassembly_flavor_hook
	* i386-tdep.c: Remove unnecessary declaration of the
	disassembly_flavor_hook.

	* config/arm/tm-arm.h: Change definition of
	arm_init_extra_frame_info.
	Add a few more comments.
	* arm-tdep.c (arm_init_extra_frame_info): Listen to and use the
	fromleaf parameter passed into init_extra_frame_info.
	(set_disassembly_flavor_sfunc): New Function.
	(set_disassembly_flavor): New Function.
	(arm_othernames): Use the set_disassembly_flavor.
	(_initialize_arm_tdep): Setup the disassembly flavor commands, and 
	initialize the flavor.
	(arm_frameless_function_invocation): Adjust for
	frameless functions that have 1 or 2 instructions that mimic the
	standard APCS form.
	(arm_scan_prologue): Be more careful about scanning the function
	prologue.  Don't match things that just have a few of the prologue 
	instructions out of order, and don't get thrown by the scheduler
	migrating instructions into the prologue.

	Add support for the "Z" and "z" packets to request the stub
	to set a breakpoint.
	
	* remote.c (set_remote_protocol_Z_packet_cmd): New function.
	(show_remote_protocol_Z_packet_cmd): New Function.
	(remote_open_1): Init the Z packet config.
	(remote_async_open_1): Init the Z packet config.
	(remote_insert_breakpoint): Use the "Z" packet if supported.
	(remote_remove_breakpoint): Use the "z" packet if supported.
	(remote_insert_watchpoint): New Function - currently wired to
	nothing. 
	(remote_remove_watchpoint): Ditto.
	(remote_insert_hw_breakpoint): Ditto.
	(remote_remove_hw_breakpoint): Ditto.

1999-08-06  Stan Shebs  <shebs@andros.cygnus.com>

	* infcmd.c: Include parser-defs.h.
	(interrupt_target_command): Declare.
	(stack_dummy_testing): Remove old funky flag.
	(run_stack_dummy): Remove unused reference to old funky flag.

1999-08-06  Tom Tromey  <tromey@cygnus.com>

	* command.c (do_setshow_command): Call set_hook if not NULL.
	* top.c (set_hook): New hook definition.
	* defs.h (set_hook): Declare.

1999-08-05  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c: Convert code to pure standard C, elim some warnings.
	(stopped_for_shlib_catchpoint): Remove, never used.

1999-08-05  Keith Seitz  <keiths@cygnus.com>

	* NEWS: Mention new Motorola MCore target.

	* sparc-tdep.c (gdb_print_insn_sparc): Print insns of the current
	architecture.

Thu Aug  5 20:41:22 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (configdirs): Add check for socketpair.
	* configure, config.in: Re-generate.

	From Mon Jul 19 10:46:18 1999 Philippe De Muyter <phdm@macqel.be>:
	* ser-pipe.c (sys/wait.h): Include this file only #if HAVE_SYS_WAIT_H.
	(STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO): Macros defined if needed.

Thu Aug  5 20:04:17 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* target.c (debug_to_open, debug_to_attach, debug_to_post_attach,
 	debug_to_require_attach, debug_to_detach, debug_to_require_detach,
 	debug_to_wait, debug_to_post_wait, debug_to_fetch_registers,
 	debug_to_store_registers, debug_to_prepare_to_store,
 	debug_to_xfer_memory, debug_to_files_info,
 	debug_to_insert_breakpoint, debug_to_remove_breakpoint,
 	debug_to_terminal_init, debug_to_terminal_inferior,
 	debug_to_terminal_ours_for_output, debug_to_terminal_ours,
 	debug_to_terminal_info, debug_to_kill, debug_to_load,
 	debug_to_lookup_symbol, debug_to_create_inferior,
 	debug_to_post_startup_inferior,
 	debug_to_acknowledge_created_inferior,
 	debug_to_clone_and_follow_inferior,
 	debug_to_post_follow_inferior_by_clone,
 	debug_to_insert_fork_catchpoint, debug_to_remove_fork_catchpoint,
 	debug_to_insert_vfork_catchpoint,
 	debug_to_remove_vfork_catchpoint, debug_to_has_forked,
 	debug_to_has_vforked, debug_to_can_follow_vfork_prior_to_exec,
 	debug_to_post_follow_vfork, debug_to_insert_exec_catchpoint,
 	debug_to_remove_exec_catchpoint, debug_to_has_execd,
 	debug_to_reported_exec_events_per_exec_call,
 	debug_to_has_syscall_event, debug_to_has_exited,
 	debug_to_mourn_inferior, debug_to_can_run,
 	debug_to_notice_signals, debug_to_thread_alive, debug_to_stop,
 	debug_to_query, debug_to_rcmd, debug_to_enable_exception_callback,
 	debug_to_get_current_exception_event, debug_to_pid_to_exec_file,
 	debug_to_core_file_to_sym_file, debug_to_close): Send trace output
 	to ``gdb_stdlog'' instead of ``gdb_stderr''.

Thu Aug  5 16:22:10 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (init_remote_ops): Initialize remote_ops.to_rcmd.
	(init_remote_async_ops): Initialize remote_async_ops.to_query.
	(remote_rcmd): New function.

	* monitor.c (monitor_rcmd): Rename monitor_command.
	(init_base_monitor_ops): Initialize monitor_ops.to_rcmd.
	(_initialize_remote_monitors): Move "monitor" command from here.
	* target.c (initialize_targets): To here.
	(monitor_command): New function.  Implement "monitor" command.

	* target.c (cleanup_target): de_fault to_rcmd.
	(update_current_target): INHERIT to_rcmd.
	(debug_to_rcmd): New function.
	(setup_target_debug): Initialize current_target.to_rcmd.

	* target.h (struct target_ops): Add field to_rcmd.
	(target_rcmd): Define.

Thu Aug  5 14:24:07 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c: Replace comment describing remote protocol with
 	pointer to official document.
	
Thu Aug  5 11:59:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_protocol_binary_download): New variable.
  	Replace ``remote_binary_download'' and ``remote_binary_checked''.
	(set_remote_protocol_binary_download_cmd,
 	show_remote_protocol_binary_download_cmd): New functions.
	(remote_open_1, remote_async_open_1, remote_cisco_open):
 	Initialize ``remote_protocol_binary_download'' instead of
 	``remote_binary_download''.
	(check_binary_download): Re-write.
	(remote_write_bytes): Ditto.
	(_initialize_remote): Add ``set remote X-packet'' and ``show
 	remote X-packet'' commands.  Disable old ``set
 	remotebinarydownload'' command.

1999-08-04  Keith Seitz  <keiths@cygnus.com>

	* remote-rdi.c (arm_rdi_close): Close the transport device, too.

Wed Aug  4 10:42:58 1999  Fred Fish  <fnf@cygnus.com>

	* xcoffread.c (scan_xcoff_symtab): Change main_aux into
	an array of 5 internal_auxent to leave room for bfd to
	write n_numaux entries.  Change code to use the first one.

1999-08-02  Stan Shebs  <shebs@andros.cygnus.com>

	* c-valprint.c (c_val_print): When printing decimal equivalent
	of a char, cast appropriately.

1999-08-02  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	From Jonathan Larmour <jlarmour@cygnus.co.uk>:
	* main.c (print_gdb_help): Use gdbinit variable to determine file
 	name used for --nx help

1999-08-01  Jason Molenda  (jsm@bugshack.cygnus.com)

	* config/mips/tm-mips.h (BIG_ENDIAN): Don't define here.

1999-08-01  Jim Blandy  <jimb@zwingli.cygnus.com>

	* stabsread.c (read_range_type): Handle an unsigned range type
	whose length in bytes is any power of two, not just a few
	common ones.

	* monitor.c (monitor_expect): When we receive a character that
	isn't part of the string we were expecting, don't just start
	matching again at the beginning of the string --- some shorter
	suffix of the input might be a prefix of the string too.

1999-07-31  Fred Fish  <fnf@cygnus.com>

	* symfile.c (symbol_file_command): Fix typo that made -1 casted
	to a CORE_ADDR look like an subtraction expression.
	(add_symbol_file_command): Ditto.

1999-07-30  Jim Blandy  <jimb@cygnus.com>

	* hppa-tdep.c (pa_print_registers): Frob register output some more.

1999-07-29  Jim Blandy  <jimb@cygnus.com>

	* config/pa/nm-hppah.h (PTRACE_ARG3_TYPE): After more
	consideration, make this a CORE_ADDR, like WDB did. 

	Rather than casting every single use of really_free_pendings to 
	make_cleanup_func, why not actually make it have that type?  Golly!
	* buildsym.c (really_free_pendings): Change argument type to PTR.
	buildsym.h (really_free_pendings): Fix declaration.
	* dbxread.c (dbx_symfile_read, dbx_psymtab_to_symtab_1),
	dwarf2read.c (psymtab_to_symtab_1), dwarfread
	(psymtab_to_symtab_1), hp-psymtab-read.c (hpread_build_psymtabs),
	os9kread.c (os9k_symfile_read, os9k_psymtab_to_symtab_1),
	xcoffread.c (xcoff_psymtab_to_symtab_1, xcoff_initial_scan):
	Remove casts.

	Pass a CORE_ADDR safely through catch_errors.
	* hppa-tdep.c (args_for_find_stub): New member, return_val.
	(cover_find_stub_with_shl_get): Change argument and return type to
	match catch_errors.  Save return value of find_stub_with_shl_get
	in *args.
	(initialize_hp_cxx_exception_support): Collect value of
	eh_notify_callback_addr from args. 

	Get rid of some noise.  It would be nice to get helpful warnings
	from the compiler about lossy conversions.
	* hppa-tdep.c (eh_notify_hook_addr, eh_notify_callback_addr,
	eh_break_addr, eh_catch_catch_addr, eh_catch_throw_addr,
	break_callback_sal): Initialize these to zero, not NULL, to shush
	warnings.
	* infttrace.c (thread_fake_step): Compare signal to
	TARGET_SIGNAL_0, not NULL, to avoid warnings.
	(_initialize_infttrace): Add sanity check.

	* config/pa/nm-hppah.h (PTRACE_ARG3_TYPE): Define this to be
	long, so we can pass arguments properly to ptrace.

	* hppah-nat.c (child_xfer_memory): Correctly compute mask to round
	address to an int boundary.

1999-07-29  Jim Blandy  <jimb@cygnus.com>

	Change from Ian Lance Taylor <ian@zembu.com>.  The
	i386_linux_sigtramp* functions should be moved to
	i386-linux-tdep.c, when that file is introduced.

	* config/i386/tm-linux.h (LINUX_SIGCONTEXT_SIZE): Define.
	(LINUX_SIGCONTEXT_PC_OFFSET): Define.
	(LINUX_SIGCONTEXT_SP_OFFSET): Define.
	(SIGCONTEXT_PC_OFFSET): Don't define.
	(I386_LINUX_SIGTRAMP): Define.
	(IN_SIGTRAMP): Define.
	(i386_linux_sigtramp): Declare.
	(sigtramp_saved_pc): Define.
	(i386_linux_sigtramp_saved_pc): Declare.
	(FRAMELESS_SIGNAL): Define.
	(FRAME_CHAIN, FRAME_SAVED_PC): Define after #undef.
	* i386-tdep.c (i386_linux_sigtramp_start): New static function if
	I386_LINUX_SIGTRAMP.
	(i386_linux_sigtramp): New function if I386_LINUX_SIGTRAMP.
	(i386_linux_sigtramp_saved_pc): Likewise.
	(i386_linux_sigtramp_saved_sp): Likewise.

1999-07-28  Jim Blandy  <jimb@cygnus.com>

	* infrun.c (handle_inferior_event): Don't try to use the code for
	stepping over a function call to also handle stepping out of a
	sigtramp on HP-UX.  That ends up trashing step-resume breakpoints.
	This change reverts some of David Taylor's change of 31 Dec 1998.
	The HP-UX maintainer needs to submit a new change for whatever
	problem the original change was trying to fix.

1999-07-28  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (command_line_handler): Don't treat an empty line
 	from readline the same way as a multiline command. This avoids
 	missing detecting when the user presses just 'enter'.

1999-07-28  Jim Blandy  <jimb@cygnus.com>

	Provide more sanity checking:
	* infrun.c (handle_inferior_event): Before assigning a new
	breakpoint to step_resume_breakpoint, make sure it's not already
	pointing at one; if it is, that's a bug.
	(check_for_old_step_resume_breakpoint): New function.

1999-07-28  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	From Eli Zaretskii  <eliz@is.elta.co.il>:
	* top.c (gdb_init) [__MSDOS__]: Arrange for GDB to return to the
	original directory before exiting.
	(cd_command) [_WIN32 || __MSDOS__]: Canonicalize the new directory
	name explicitly.  Handle "d:/" names correctly.
	(init_history) [__MSDOS__]: Use _gdb_history as the default GDB
	history file name.

Mon Jul 26 17:13:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (enum packet_support, enum packet_detect, struct
 	packet_config): Define.
	(set_packet_config_cmd, show_packet_config_cmd,
 	add_packet_config_cmd, init_packet_config): New functions.
  	Generic support for optional packets.
	(remote_protocol_P): Replace stub_supports_P.
 	(set_remote_protocol_P_packet_cmd, show_remote_protocol_P_packet_cmd):
 	New functions.
	(_initialize_remote): Add ``set remote-protocol-P-packet'' command.
	(remote_open_1, remote_async_open_1, remote_cisco_open):
 	Initialize ``remote_protocol_P''.
	(remote_store_registers): Re-write ``P'' probe logic.
	(store_register_using_P): New function.

	From Ian Lance Taylor <ian@airs.com>:
	(remote_prepare_to_store): Only read registers when ``P'' packet
 	is in state unsupported or support-unknown.
	
1999-07-24  Fred Fish  <fnf@cygnus.com>

	* symfile.c (default_symfile_offsets): Clear section_offsets
	before filling it in.

1999-07-16  Keith Seitz  <keiths@cygnus.com>

	* remote.c (_initialize_remote): "remotebreak" should be a var_boolean.

1999-07-15  Jim Blandy  <jimb@cygnus.com>
	
	Make the output from "info registers" fit withinin 80 columns.
	* hppa-tdep.c (pa_print_registers): Make it easy to change row and
	column counts.  Switch to three columns, instead of four, and
	adjust spacing.

	First cut at supporting HPPA2.0 in "wide" (64-bit) mode.
	* configure.tgt: Add hppa2.0w target.
	* config/pa/hppa64.mt, config/pa/tm-hppa64.h: New files.
	* hppa-tdep.c (hppa_fix_call_dummy): Dyke out code to tweak the
	call dummy, if target is PA2.0w.  This is temporary, until I get
	function calls working.
	* hppah-nat.c (fetch_register): Rewritten to handle both narrow
	and wide register requests.
	(HPPAH_OFFSETOF): New macro.

	* gdbtypes.c (is_integral_type): New function.
	* gdbtypes.h: Prototype for above.

1999-07-15  J.T. Conklin  <jtc@redback.com>

	* configure.tgt (i[3456]86-*-vxworks*): New target.
	* config/i386/vxworks.mt: New file, x86 VxWorks target
	* config/i386/tm-vxworks.h: New file.

	* configure.tgt (powerpc-*-vxworks*): New target.
	* config/powerpc/vxworks.mt: New file, PowerPC VxWorks target
	* config/powerpc/tm-vxworks.h: New file.

	* NEWS: Mention the new configs.

1999-07-15  Fernando Nasser  <fnasser@cygnus.com>

	* target.c (target_preopen): Prevent query when not from_tty.
	* infcmd.c (run_command): Prevent query when not from_tty.

1999-07-15  Fernando Nasser  <fnasser@cygnus.com>

	* event-loop.c: Fix typo in comment.

Wed Jul 14 17:29:31 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c (struct pipe_state): Define.
 	(pipe_close): Retain the PID of the sub-process using ``struct
 	pipe_state''.  Delete #ifdef code that used popen().
	(pipe_close): Kill of the sub-process as part of the cleanup.

	* serial.h (struct _serial_t): Add field ``state''.

1999-07-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (display_gdb_prompt): Don't display the prompt if we
 	are in the middle of an execution command. Also trick readline so
 	it doesn't try to display the prompt.
	(command_line_handler): Get rid of change_prompt, unused variable.
	Use {push, pop}_prompt mechanism in case of multiline commands.

	* infrun.c (complete_execution): Set target_executing to 0 as
 	first thing, so that display_gdb_prompt does the right thing.

Tue Jul 13 20:29:46 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* parse.c (build_parse): Fix conditional increment of num_std_regs
 	for SP_REGNUM. Was conditional on FP_REGNUM.

Tue Jul 13 16:44:58 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Revert 1999-07-07 Stan Shebs
 	<shebs@andros.cygnus.com> indentation change.  Don't let indent
 	mess with these files.

Mon Jul 12 11:15:09 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/mips/tm-mips.h (REGISTER_CONVERT_TO_RAW,
 	REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERTIBLE): Define.
	(REGISTER_RAW_SIZE): Re-define as mips_register_convert_to_raw.
	* mips-tdep.c (mips_register_convert_to_raw,
 	mips_register_convert_to_virtual, ): New functions.
	(mips_register_raw_size, mips_register_convertible): New
 	functions.  Handle bug introduced by ``Wed Apr 1 23:13:23 1998
 	Andrew Cagney <cagney@b1.cygnus.com>'' where remote mips64 target
 	transfers SR as 64 bits yet GDB expected only 32 bits.
	(mips64_transfers_32bit_regs): New static variable.
	(_initialize_mips_tdep): Add obscure command ``set
 	remote-mips64-transfers-32bit-regs'' that provides backward
 	compatibility.
	(do_gp_register_row): Extract register values from raw buffer.

	* NEWS: Document protocol change.

1999-07-12  Keith Seitz  <keiths@cygnus.com>

	* rdi-share/unixcomm.c (Unix_ResetSerial): Remove CYGWIN32
	conditional.  It's no longer needed.
	(SERPORT1, SERPORT2): Linux serial ports are "/dev/ttyX", not
	"/dev/cuaX" (X=0,1,2,3,...).

Mon Jul 12 02:02:00 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* defs.h, utils.c (fputstrn_filtered, fputstrn_unfiltered,
 	fputstrnn_unfiltered): New functions.
	(gdb_printchar): Delete.

	* remote.c (print_packet): Replace gdb_printchar with
 	fputstrn_filtered.
	(getpkt): Use fputstrn_unfiltered to dump packet received.
	(putpkt_binary): Use fputstrnn_unfiltered to dump packet sent.

1999-07-09  Keith Seitz  <keiths@cygnus.com>

	* blockframe.c (blockvector_for_pc_sect): When looking for a block,
	we want the one whose end is greater than our PC, not greater or equal.

1999-07-08  Stan Shebs  <shebs@andros.cygnus.com>

	* sparcl-tdep.c (init_sparclite_ops): Fix doc strings, remove
	useless inits.
	(sparclite_ops): Remove redundant decl.

Thu Jul  8 16:48:40 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* ser-pipe.c (pipe_open): Bi-directional popen found on both
 	NetBSD and OpenBSD.
	* ser-pipe.c: New file.  Implement popen() style serial interface.
	* NEWS: Mention.
	* Makefile.in (ALLDEPFILES): Add ser-pipe.c.
	(ser-pipe.o): Add new target.  Specify dependencies.
	(SER_HARDWIRE): Add ser-pipe.o.
	* serial.c (serial_open): Recognize a serial pipe ``|''.

1999-07-07  Stan Shebs  <shebs@andros.cygnus.com>

	* All C files except *-stub.c and *-share/*: Indent to GNU
	standard, using indent 1.9.1.
	* defs.h: Make indent ignore this file, macros confuse it.

	* gnu-regex.c, gnu-regex.h: Don't let indent mess with these.

Wed Jul  7 13:06:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-mips.c (fputs_readable): Rename puts_readable, add struct
 	gdb_file argument.
	(fputc_readable): Rename putc_readable, add struct gdb_file
 	argument.

	* remote-mips.c (mips_expect_timeout, mips_receive_header,
 	mips_send_packet, mips_receive_packet), remote-rdp.c (put_byte,
 	get_byte, put_word, rdp_init, rdp_init), remote-sds.c
 	(sds_interrupt, sds_wait, readchar, putmessage, read_frame,
 	getmessage), remote-udi.c (udi_store_registers, fetch_register):
	(store_register), xmodem.c (readchar), utils.c (puts_debug),
 	gnu-nat.h (debug), parse.c (parse_exp_1): Cleanup - send debug/log
 	messages to gdb_stdlog.

1999-07-06  Stan Shebs  <shebs@andros.cygnus.com>

	* exec.c: Remove long-#ifed-out section of code that confuses
	indent.
	* gdbtypes.c (add_mangled_type): Add some braces to indicate
	grouping better.
	* gnu-nat.c: Remove literal newlines embedded in strings,
	causes indent to weird out.
	* language.c (binop_result_type): Remove extra paren.
	* lynx-nat.c: Add a missing paren to fetch_core_registers decl.
	* nec4102rom.c (vr4102_insert_step): Fix typos.
	(_initialize_vr4102_rom): Remove literal newline in string.
	* config/a29k/tm-a29k.h: Suppress formatting of pictures.
	* config/m68k/xm-3b1.h: Remove excess #endif.

	Declare Pyramid configuration obsolete.
	* configure.host, configure.tgt: Comment out Pyramid configs.
	* Makefile.in: Comment out Pyramid-related actions.
	* pyr-xdep.c, pyr-tdep.c, config/pyr/*: Comment out.
	* NEWS: Mention obsolete status.

1999-07-06  Jason Molenda  (jsm@bugshack.cygnus.com)

	* remote.c: Include <sys/time.h> to pick up FD_SET et al defns on
	some old Linux distributions.
	* remote-os9k.c, remote-st.c, ser-tcp.c, ser-unix.c,
	sparcl-tdep.c, remote.c: Back out inclusion of <sys/select.h>.
	It isn't necessary after all.

1999-07-06  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infcmd.c (strip_bg_char): Remove assignment from 'if' condition.

1999-07-05  Jason Molenda  (jsm@bugshack.cygnus.com)

	* remote.c: Include <sys/select.h> if it exists in order to pick up
	FD_SET et al defns.
	* remote-os9k.c:  Same.
	* remote-st.c:  Same.
	* ser-tcp.c:  Same.
	* ser-unix.c:  Same.
	* sparcl-tdep.c:  Same.

Fri Jul  2 19:38:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* top.c (target_output_hook): Delete definition.
	* defs.h (target_output_hook): Delete declaration.

	* remote.c (remote_console_output): Delete call to
 	target_output_hook().  Send target output to gdb_stdtarg using an
 	unfiltered write. Make more robust.

	* remote-sim.c (gdb_os_write_stdout, gdb_os_write_stderr):
 	Ditto. For moment, do not try to separate target stdout and stderr
 	streams.

	* defs.h (gdb_stdtarg): New global. Output from target and
 	simulators.

1999-07-02  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c (return_to_top_level): Do all the exec_cleanups too.

	* event-top.c (command_handler): Set up for a continuation, if we
 	are in the middle of running an execution command which will
 	finish later on. Do cleanups, an display of time/space only if not
 	running with an async target or not running an execution command.
	(command_line_handler_continuation): New function. Continuation
 	for command_line_handler.

	* utils.c (exec_cleanup_chain): New cleanup chain to be used in
 	async mode for the execution commands.
	(make_exec_cleanup): New function. Add a cleanup to the
 	exec_cleanup_chain.
	(do_exec_cleanups): New Function. Do cleanups on the
 	exec_cleanup_chain.
	(add_continuation): New function. Add a new continuation to the
 	cmd_continuation list.
	(do_all_continuations): New function. Do all the continuations on
 	the cmd_continuation list.

	* top.h (ALL_CLEANUPS): Move from here to defs.h.

	* defs.h (struct continuation_arg): New structure. Arg to pass to
 	the call to a command continuation.
	(struct continuation): New structure. Continuation for an
 	execution command.
	(ALL_CLEANUPS): Move here from top.h.
	
	* remote.c (remote_async_open_1): Set things up for telling the
 	target we are running the extended protocol, only after the target
 	has stopped.
	(set_extended_protocol): New function. Tell the target we are
 	using the extended protocol.
	(remote_async_resume): Set things up for sync execution only if
 	this is the first time we are called.

	* breakpoint.c (until_break_command_continuation): New function.
  	Stuff to be done after the target stops during the 'until'
 	command.
	(until_break_command): Set things up for completing the 'until'
 	command later on. Do the final cleanups only if not running
 	asynchronously or async execution is not supported by the target.

	* infcmd.c (until_command): Recognize '&' at end of command and
 	handle it properly.
	(finish_command_continuation): New function. Do whatever is needed
 	after the target has stopped.
	(finish_command): Recognize '&' at end of command and handle it
 	properly. Don't do stuff needed after target has stopped if
 	running asynchronously and target has async. Use exec_cleanup_chain
	if running asynchronously and target is asynchronous.

	* infrun.c (cmd_continuation): New gloabl variable. Used to
 	coplete execution commands in async mode, after the target has
 	stoped.
	(fetch_inferior_event): Use exec_cleanup_chain, instead of
 	cleanup_chain. Do all the exec cleanups at the end. Do all the
 	continuations at the end. Call complete_execution from here,
 	instead of normal_stop.
	(complete_execution): Cleanup the signals handlers for SIGINT
 	before displaying the prompt.
	(start_remote): Set target_executing to 1.
	(normal_stop): Don't call complete_execution from here.
	
Thu Jul  1 19:14:30 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (struct dummy_frame): Add member ``top''.
	(generic_push_dummy_frame): Initialize top to sp.
	(generic_save_dummy_frame_tos): New function.  Initialize top.
	(generic_find_dummy_frame): Check for the top of the frame.

	* blockframe.c (generic_push_dummy_frame): Free the dummy_frame
 	registers.

	* config/mn10300/tm-mn10300.h (SAVE_DUMMY_FRAME_TOS): Define.
	(TARGET_READ_FP): Return the SP as a best guess.

Wed Jun 30 15:45:48 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.host (hppa*-*-hpux11*): Accept any version of hpux11
	instead of hpux11.0*.

1999-06-30  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* source.c (directory_command): Add missing test for from_tty. 

1999-06-29  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* remote.c: Include event-loop.h.
	(remote_async_ops, extended_async_remote_ops): Define new target
 	vector structures for asynchronous debugging.
	(remote_async_open): New function. Asynchronous version of
 	remote_open.
	(extended_remote_async_open): New function. Asynchronous version
 	of extended_remote_open.
	(remote_async_open_1): New function. Async version of
 	remote_open_1.
	(remote_async_detach): New function. Async version of
 	remote_detach.
	(remote_async_resume): New function. Async version of
 	remote_resume.
	(initialize_sigint_signal_handler, handle_remote_sigint,
 	handle_remote_sigint_twice, async_remote_interrupt,
 	async_remote_interrupt_twice, cleanup_sigint_signal_handler): New
 	functions. Used for handling ^C while target is running.
	(remote_async_wait): New function. Async version of remote_wait.
	(remote_async_kill): New function. Async version of remote_kill.
	(extended_remote_async_create_inferior): New function. Async
 	version of extended_remote_create_inferior.
	(init_remote_async_ops): New function. Initialize target vector
 	for target async.
	(init_extended_async_remote_ops): New function. Initialize target
 	vector for target extended-async.
	(_initialize_remote): Initialize remote_async_ops and
 	extended_async_remote_ops.

	* infrun.c: Include "event-loop.h".
	(sync_execution): new global variable.
	(proceed): Invoke wait_for_inferior and normal_stop only if not
 	running in async mode or if target doesn't support async
 	execution.
	(start_remote): Don't call wait_for_inferior and normal_stop if
 	not running in async mode or if target not async. If running async
 	and target is async, start the target in simulated synchronous
 	mode.
	(async_ecss, async_ecs): New global vars, for inferior state.
	(fetch_inferior_event): New function. Async version of
 	wait_for_inferior.
	(complete_execution): New function. Reset of gdb prompt and stdin,
 	after inferior execution has completed.
	(normal_stop): Call complete_execution at end of asynchronous
 	execution.

	* infcmd.c (strip_bg_char): New function to detect the background
 	execution char '&'.
	(run_command): Modify to support background and foreground
 	execution in async mode.
	(continue_command): Ditto.
	(step_1): Ditto.
	(jump_command): Ditto.
	(interrupt_target_command): New function. Interrupt the
 	target execution.
	(_initialize_infcmd): Add new command 'interrupt'.
	
	* top.c (target_executing): New global variable.
	(execute_command): Reject commands that cannot be executed while
	the target is running asynchronously.

	* event-top.c (push_prompt): Make non static.
	(pop_prompt): Make non static. If the current prompt is empty,
 	don't try to copy it over the previous one.
	(handle_sigint): Make non static.
	(command_handler): Do the cleanups only when not executing with an
 	asynchronous target.

	* event-loop.c (delete_async_signal_handler): Pass a pointer to a
 	pointer to a signal handler, so that is can be freed at the end.

	* target.c (update_current_target): Inherit to_has_async_exec.

	* inferior.h: Add global variables target_executing, and
 	sync_execution. Export function fetch_inferior_event.

	* event-loop.h: Add push_prompt, pop_prompt, handle_sigint to the
 	exported functions. Update prototype for delete_signal_handler.

	* target.h (struct target_ops): New target op: to_has_async_exec.
	(target_has_async): New macro.

	* Makefile.in (infrun.o): Add dependency on event-loop.h.
	(remote.o): Ditto.

1999-06-28  Jim Blandy  <jimb@zwingli.cygnus.com>

	* solib.c (clear_solib): Don't disable breakpoints if we're
	running an a.out executable (Solaris's SunOS emulation).

1999-06-25  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* main.c (main): Remove intialization of command_loop_hook, it
	is now done in _initialize_event_loop().
	* event-loop.c (gdb_do_one_event): Make static.
	(start_event_loop): New function. Just start the event loop.
	* event-top.c (cli_command_loop): New name for start_event_loop().
	(gdb_readline2): Make non static.
	(_initialize_event_loop): Set command_loop_hook to cli_command_loop.
	* event-loop.h: Adjust exported functions accordingly.

	* top.c (init_main): Move setting of async_command_editing_p from
 	here.  
	* event-top.c (_initialize_event_loop): To here.
	(change_line_handler): Revert previous change. Add comment.
	(_initialize_event_loop): Revert previous change.
	(cli_command_loop): New name for start_event_loop().
	(start_event_loop): New function. This just starts up the event loop.
	(gdb_readline2): Make non static.
	(_initialize_event_loop): Set command_loop_hook to cli_command_loop.

1999-06-25  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (change_line_handler): Get rid of the global
 	variable input_fd, use `fileno (instream)' instead.
	(_initialize_event_loop): Ditto
	
	* event-loop.c (add_file_handler): New function. Wrapper for
 	create_file_handler.
 	(create_file_handler): Make static.  
	* event-top.c (_initialize_event_loop): Call add_file_handler,
 	instead of create_file_handler.
	(change_line_handler): Ditto.  
	Remove poll.h include.
	* event-loop.h: Export add_file_handler instead of
 	create_file_handler.	

1999-06-24  Stan Shebs  <shebs@andros.cygnus.com>

	Declare Altos configuration obsolete.
	* configure.host, configure.tgt: Comment out Altos config.
	* Makefile.in: Comment out Altos-related actions.
	* altos-xdep.c, config/m68k/altos.mh, altos.mt, tm-altos.h,
 	xm-altos.h: Comment out.
	* NEWS: Mention obsolete status.

1999-06-24  Jason Molenda  (jsm@bugshack.cygnus.com)

	* Makefile.in: Add MAKEHTML and MAKEHTMLFLAGS; pass them down;
	recognize html and install-html targets.
	* gdbserver/Makefile.in: Add empty html and install-html targets.
	* nlm/Makefile.in: Ditto.
	* rdi-share/Makefile.in: Ditto.

1999-06-24  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c (agent_command): Remove vestigial call to ax_reqs.

1999-06-24  James Ingham  <jingham@leda.cygnus.com>

	* arm-tdep.c (arm_othernames): Change both gdb's register display
	AND the opcode disassembly register naming if the othernames
	command.  Fixes the gdb part of CR 101177.

1999-06-23  Stan Shebs  <shebs@andros.cygnus.com>

	Declare Convex configuration obsolete.
	* configure.host, configure.tgt: Comment out Convex configs.
	* Makefile.in: Comment out Convex-related actions.
	* convex-xdep.c, convex-tdep.c, config/convex/*: Comment out.
	* NEWS: Mention obsolete status.

1999-06-23  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* main.c: Turn on async by default by setting async_p to 1.

Wed Jun 23 15:44:39 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	From Jimmy Guo <guo@cup.hp.com>:
	* frame.h (enum lval_type): Delcare when an __STDC__ compiler.
  	Reverts Mon Aug 11 16:08:52 1997 Fred Fish <fnf@cygnus.com>
 	change.
	* utils.c (gdb_file_rewind, gdb_file_put): Fix.  A void function
 	does not return a result.

Wed Jun 23 15:30:46 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (set_thread, remote_get_threadinfo,
 	remote_threads_info, remote_current_thread, remote_get_threadlist,
 	extended_remote_restart, get_offsets, remote_open_1,
 	remote_detach, remote_resume, remote_wait, remote_fetch_registers,
 	remote_store_registers, check_binary_download, remote_write_bytes,
 	remote_read_bytes, remote_search, putpkt_binary, putpkt_binary,
 	read_frame, compare_sections_command, remote_query,
 	packet_command, remote_info_process): Use alloca to create space
 	for arrays of size PBUFSIZ.

1999-06-22  Jason Molenda  (jsm@bugshack.cygnus.com)

	* top.c: Update copyright years to include 1999.

1999-06-18  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c: Move include of event-loop.h, to avoid redefinition of
 	NFDBITS.

	* event-loop.c (create_file_handler): Do not do a realloc of the
 	pollfd structure of the notifier, unless there is already one.
	Include <sys/types.h> for platforms that have no poll.
	
	* event-top.c: Fix prototype for _initialize_event_loop.
	(_initialize_event_loop): Do something only if running in async
 	mode.

1999-06-17  Jim Blandy  <jimb@zwingli.cygnus.com>

	Make the '/c' print format use a true character type.  This is
	more appropriate than builtin_type_char for languages other than
	C, and C tolerates it.
	* gdbtypes.c (builtin_type_true_char): New variable.
	(build_gdbtypes): Initialize it.
	* gdbtypes.h (builtin_type_true_char): New declaration.
	* printcmd.c (print_scalar_formatted): When the format is 'c',
	extract the value as a builtin_type_true_char.

	* jv-exp.y (yylex): Say character literals are java_char_type, not
	builtin_type_char.  Java treats the latter like `byte'.

1999-06-17  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* Makefile.in (top_h): Define.
	(event-loop.o): Add dependencies on top.h and defs.h.
	(event-top.o): Add dependency on terminal.h.

	* event-loop.c: Get rid of #include <readline.h>.

	* event-loop.h: Get rid of nested #include's. 
	* event-loop.c: Rearrange includes to accomodate change in
 	event-loop.h. Include poll.h, not sys/poll.h.
	* event-top.c: Ditto.
	* main.c: Ditto.
	
1999-06-16  David Taylor  <taylor@louisiana.cygnus.com>

	* alpha-tdep.c (alpha_pop_frame): if frame->proc_desc
	is NULL, call find_proc_desc so we know how to restore
	the registers.

1999-06-15  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* event-top.c (start_event_loop): call get_prompt.
	(display_gdb_prompt): call get_prompt.
	(async_stop_sig): call get_prompt.

1999-06-15  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (delete_file_handler): When positioning prev_ptr,
 	keep looping while the one after is not equal to file_ptr, instead
 	of equal.

1999-06-14  Stan Shebs  <shebs@andros.cygnus.com>

	* MAINTAINERS: Add Jimmy Guo and Jim Blandy as HP testsuite and
	SVR4 solib maintainers, respectively.

1999-06-14  Michael Snyder  <msnyder@cleaver.cygnus.com>

	Add parameters to the gdb prompt.
	* top.c (prompt): Rename to gdb_prompt_string for clarity.
	(command_line_input): rename "prrompt" to prompt_arg for clarity.
	(gdb_readline): rename "prrompt" to prompt_arg for clarity.
	(read_command_lines): rename "prompt" to prompt_arg for clarity.
	(stop_sig): call get_prompt instead of reading prompt string directly.
	(command_loop): ditto.
	(gdb_prompt_escape): New variable.  Esc char for prompt parameters.
	(get_prompt_1): New function, workhorse for get_prompt.
	(get_prompt): Completely rewrite.  Add functionality for a 
	parameterized prompt, ie. the displayed prompt can change according
	to the value of one or more expressions given as parameters in the
	prompt string.
	(init_main): use renamed variable gdb_prompt_string.  Add new
	command "set prompt-escape-char" to set gdb_prompt_escape.
	
Sun Jun 13 10:44:13 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_stdlog), main.c: Declare.
	* main.c (main): Initialize.
	* gdbarch.c: Write trace messages to the log file.
	* remote.c: Update any debug/log prints.

1999-06-11  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (remote_wait): Clean up new thread handling.
	(record_currthread): Announce new threads.

1999-06-11  Jim Blandy  <jimb@zwingli.cygnus.com>

	* partial-stab.h (case N_LSYM, 'T' descriptor): Don't create
	partial symbol table entries for nameless enums, even if the type
	name is " ".  (We still pick up the enum elements, though.)

	* partial-stab.h: Remove #if 0'd sections, dating back to 1992,
 	which set a variable which exists nowhere else in the source.
  	Please examine your test suite output carefully, and report any
 	problems to me.

1999-06-11  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (setup_event_loop): Change name to start_event_loop.
  	Move the intialization of event-loop variables to
 	_initialize_event_loop.
	(_initialize_event_loop): New function. Called at init time, to
 	set up important event-loop variables.

	* event-loop.h: setup_event_loop is now start_event_loop.
	* main.c (main): Ditto.

Fri Jun 11 18:34:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* defs.h (gdb_file_rewind_ftype, gdb_file_rewind,
 	set_gdb_file_rewind, gdb_file_put_ftype, gdb_file_put,
 	set_gdb_file_put): Declare.
	
	* utils.c (gdb_file_new): Initialize ``rewind'' and ``put''.
	(struct gdb_file): Add to_rewind and to_put.
	(null_file_put, null_file_rewind, gdb_file_put, gdb_file_rewind,
 	set_gdb_file_put, set_gdb_file_rewind): New functions.
	(tui_file_rewind, tui_file_put): New functions.
	(tui_file_new): Add rewind and put.

Fri Jun 11 15:10:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_push_arguments): Fix order of arguments passed
 	to store_address.

Fri Jun 11 10:31:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (tty_input): Change array to pointer.
 	(_initialize_remote): Call build_remote_gdbarch_data.
	(build_remote_gdbarch_data): New function. Allocate space for
 	tty_input.
	(readsocket, readtty): Delete extern declaration of tty_input.

1999-06-10  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (gdb_readline2): Call the command handling function
 	via the input_handler pointer.
	(change_line_handler): When turning off editing, set input_handler
 	as well.

	* utils.c (prompt_for_continue): If running asynchronously, call
 	async_request_quit, instead of request_quit.

	* tracepoint.c (read_actions): If running asynchronously, set the
 	signal handler for STOP_SIGNAL to handle_stop_sig.

	* top.h: (source_line_number, source_file_name, source_error,
 	source_pre_error, history_expansion_p, server_command): export for
 	use of event-top.c.

	* event-top.c: Include top.h and terminal.h.
	(instream): Remove extern declaration.
	(handle_sigint, handle_sigquit, handle_sighup, handle_sigfpe,
 	handle_sigwinch, async_do_nothing, async_disconnect,
 	async_float_handler, async_stop_sig): Make static.
	(async_request_quit, async_do_nothing, async_disconnect,
 	async_float_handler, async_stop_sig): Add gdb_glient_data
 	argument.
	(handle_stop_sig): New function.
	(sigtstp_token): New variable.
	(sigint_token, sigquit_token, sigfpe_token, sigwinch_token):
 	Change their type tp PTR.
	(mark_async_signal_handler_wrapper): New function.
	(setup_event_loop): Initialize all the variables used by readline
 	only if not already done while reading the .gdbinit file.  Display
 	the initial gdb prompt, if .gdbinit took care of setting things up
 	for readline.
	(change_line_handler): When turning on the use of readline,
 	initialize input_handler as well.
	(command_line_handler): Set up the signal handler for STOP_SIGNAL
 	to be handle_stop_sig.
	(async_init_signals): Remove coercion of signal handlers in calls
 	to create_async_signal_handler.  Initialize token for stop signal.
	(handle_sigint): Call async_request_quit using one argument.
	(handle_sigint, handle_sigquit, handle_sighup, handle_sigfpe,
 	handle_sigwinch): Call mark_async_signal_handler_wrapper instead
 	of mark_async_signal_handler.

	* event-loop.h: Add extern declarations for handle_stop_sig,
 	async_command_editing_p, async_annotation_suffix,
 	new_async_prompt, the_prompts.

	* top.c (command_line_input): Set the signal handler to be
 	handle_stop_sig, in case gdb is running asynchronously.
	(get_prompt): Return the top of the prompt stack if running
 	asynchronously.
	(set_prompt): Set the top of the prompt stack if running
 	asynchronously.
	(init_main): Move ``extern'' vars from here to event-loop.h.
	
1999-06-10  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* values.c (value_from_string): new function.  Make a value_ptr
	from a string, with storage in local GDB memory (not in inferior).
	* value.h (value_from_string): add prototype.
	* remote.c (remote_cisco_ops): New remote target, "target cisco".
	(init_remote_cisco_ops): New function, initialize new target.
	(remote_cisco_mourn, remote_cisco_wait, remote_cisco_open, 
	remote_cisco_close): New functions, implement new target cisco.
	(minitelnet, readtty, readsocket) New functions, implement the
	I/O pass-through mode for target cisco.
	(remote_wait): Detect special enhanced version of the 'S' packet
	for target cisco.  
	(remote_cisco_expand): Perform Cisco variant of RLL decoding.

1999-06-10  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-loop.c (gdb_wait_for_event): Initialize num_found to 0.

	* top.c (print_prompt): Delete this function.

	From: Andrew Cagney  <cagney@b1.cygnus.com>

	* event-top.c (async_hook): Delete extern declaration.

	* defs.h: Replace ``async_hook'' with ``async_p''.
	* top.c (gdb_init, init_main, init_main, init_main, init_main):
 	Replace ``async_hook'' with ``async_p''.

	* main.c: Rename ``async'' to ``async_p''.
	(main): Add --noasync option.
	(main): Hook in the asynchronous event-loop based CLI using
 	command_loop_hook instead of async_hook. Delete call to
 	async_hook().

Thu Jun 10 21:14:16 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mn10300-tdep.c (mn10300_store_return_value,
 	mn10300_extract_struct_value_address,
 	mn10300_extract_return_value), config/mn10300/tm-mn10300.h: New
 	functions.
	* config/mn10300/tm-mn10300.h (EXTRACT_STRUCT_VALUE_ADDRESS,
 	STORE_RETURN_VALUE, EXTRACT_RETURN_VALUE): Update.
	(TARGET_MN10300): Delete macro.  Not used.

Thu Jun 10 20:04:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mn10300-tdep.c (mn10300_register_names): Make static.
	(STORE_STRUCT_RETURN): Do not modify SP.

	* config/mn10300/tm-mn10300.h(mn10300_register_name),
 	mn10300-tdep.c : New function.
	* config/mn10300/tm-mn10300.h (REGISTER_NAME): Update.
	* config/mn10300/tm-mn10300.h (mn10300_saved_pc_after_call),
 	mn10300-tdep.c: New function.
	* config/mn10300/tm-mn10300.h (SAVED_PC_AFTER_CALL): Update.

1999-06-10  Keith Seitz  <keiths@cygnus.com>

	* mcore-rom.c (picobug_dumpregs): Return a value. Any value, it
	doesn't matter.
	* mcore-tdep.c (mcore_analyze_prologue): Set NO_MORE_FRAMES
	if the start of the function is the entry point.
	(mcore_analyze_prologue): rotli takes an immediate, not an
	offset immediate.
	(mcore_push_arguments): Fix compiler warning.

1999-06-09  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

        * rs6000-tdep.c (skip_prologue): Don't mistake a branch for a     
        subroutine call.        

1999-06-08  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (remote_wait): Add 'N' response packet, which is a
	stop with signal number plus section offsets for .text, .data and
	.bss.  This is used by Cisco to indicate relocation offsets.
	(remote_cisco_section_offsets, remote_cisco_objfile_relocate):
	new files to support 'N' packet.  
	(remote_info_process): New function.  Implements the 
	"info remote-process" command, by means of which the remote target 
	can report anything it wants to about the remote process/app being 
	debugged.  
	(_initialize_remote): add info remote-proc command.  
	(remote_threads_info): New function for "info threads" command.  
	Attempts to use new query "qfThreadInfo" instead of the old 
	undocumented query.
	* exec.c (exec_set_section_offsets) new files to support 'N' packet.

Tue Jun  8 13:33:42 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* inferior.h (generic_target_read_pc, generic_target_write_pc,
 	generic_target_read_fp, generic_target_write_fp,
 	generic_target_read_sp, generic_target_write_sp): Declare new
 	functions.
	* findvar.c (generic_target_read_pc, generic_target_write_pc,
 	generic_target_read_fp, generic_target_write_fp,
 	generic_target_read_sp, generic_target_write_sp): New functions.
	(TARGET_READ_PC, TARGET_WRITE_PC, TARGET_READ_FP, TARGET_WRITE_FP,
 	TARGET_READ_SP, TARGET_WRITE_SP): Default to corresponding generic
 	function.
	(write_pc_pid, write_pc_pid, read_sp, write_sp, read_fp,
 	write_fp): Simplify.

	* gdbarch.c (verify_gdbarch): Always verify TARGET_PTR_BIT,
 	TARGET_SHORT_BIT, TARGET_INT_BIT, TARGET_LONG_BIT,
 	TARGET_LONG_LONG_BIT, TARGET_FLOAT_BIT, TARGET_DOUBLE_BIT,
 	TARGET_LONG_DOUBLE_BIT, TARGET_READ_PC, TARGET_WRITE_PC,
 	TARGET_READ_FP, TARGET_WRITE_FP, TARGET_READ_SP, TARGET_WRITE_SP,
 	USE_GENERIC_DUMMY_FRAMES, CALL_DUMMY_BREAKPOINT_OFFSET_P,
 	CALL_DUMMY_P, CALL_DUMMY_STACK_ADJUST_P, GET_SAVED_REGISTER,
 	REGISTER_CONVERTIBLE, PUSH_ARGUMENTS, PUSH_RETURN_ADDRESS,
 	FRAME_CHAIN_VALID.
	(GET_GDBARCH, SET_GDBARCH): Delete macros.  Implement functions
 	directly.
	* gdbarch.h, gdbarch.c: Call fatal() instead of abort().  Identify
 	the function / macro with a problem.  Always verify a architecture
 	attribute before returning it.
	* gdbarch.h, gdbarch.c (generic_register_convertible_not): New
 	function.

	* mips-tdep.c (mips_push_return_address): New function.
	* config/mips/tm-mips.h (PUSH_RETURN_ADDRESS): Define.

	* mips-tdep.c (mips_gdbarch_init): Initialize short_bit,
 	double_bit, long_double_bit, read_pc, write_pc, read_fp, write_fp,
 	read_sp, write_sp, frame_chain_valid, get_saved_register,
 	push_arguments, push_return_address, register_convertible,
 	call_dummy_p, use_generic_dummy_frames,
 	call_dummy_breakpoint_offset_p, call_dummy_stack_adjust_p,
 	call_dummy_words and sizeof_call_dummy_words.
	* config/mips/tm-mips.h: Don't define CALL_DUMMY when multi-arch.

1999-06-07  Keith Seitz  <keiths@cygnus.com>

	* v850ice.c (init_hidden_window): Do not rely on the existence of
	a gui for window creation. Return boolean status.
	(v850ice_open): Use boolean status of init_hidden_window.
	Allow any ICE execution command to run under CLI. Maybe one
	day gdb will use a real event loop and allow this code to run.
	* configure.tgt: Configure the v850 ice for all cygwin-hosted
	toolchains.

Mon Jun  7 23:37:26 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-mips.h (EXTRA_FRAME_INFO): Delete.
	* mips-tdep.c (mips_init_extra_frame_info): Allocate saved_regs.
	(temp_saved_regs): Replace struct with a simple pointer.
	(set_reg_offset, mips32_heuristic_proc_desc, heuristic_proc_desc,
 	mips_init_extra_frame_info): Update.

Mon Jun  7 21:40:12 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-mips.h (EXTRA_FRAME_INFO): Move elements from here.
	* mips-tdep.c (struct frame_extra_info): To here.

	* mips-tdep.c (mips_print_extra_frame_info, mips_find_saved_regs,
 	mips_init_extra_frame_info, mips_pop_frame): Update
	(mips_init_extra_frame_info): Allocate space for the extra info.

Mon Jun  7 21:08:50 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-mips.h (mips_init_extra_frame_info), mips-tdep.c:
 	Rename init_extra_frame_info.  Add argument ``fromleaf''.
	mips-tdep.c (mips_gdbarch_init): Add mips_init_extra_frame_info.

	* config/mips/tm-mips.h (mips_print_extra_frame_info),
 	mips-tdep.c: New function.
	(PRINT_EXTRA_FRAME_INFO): Update definition.

Mon Jun  7 20:11:07 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* config/mips/tm-mips.h, config/mips/tm-irix3.h,
 	config/mips/tm-tx19.h, config/mips/tm-tx19l.h,
 	config/mips/tm-tx39.h, config/mips/tm-tx39l.h: Rename macro
	REGISTER_NAMES to MIPS_REGISTER_NAMES.

	* config/mips/tm-mips.h (REGISTER_NAME): Define.
	* mips-tdep.c (mips_processor_reg_names): New static variable.
	(mips_register_name): New function.
	(mips_set_processor_type): Update mips_processor_reg_names.
	(mips_generic_reg_names): Initialize using MIPS_REGISTER_NAMES.
	(mips_gdbarch_init): Add mips_register_name.

Sun Jun  6 11:09:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (PBUFSIZ): Re-define so that value is computed at
 	run-time.
	(MAXBUFBYTES): Re-define as a macro function.
	* gdbarch.h, gdbarch.c: Add multi-arch support for REGISTER_BYTES.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.

1999-06-05  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* symtab.c (decode_line_1): Accept filenames with spaces in
	'linespecs' when enclosed in double quotation marks and handle
	drive specification is DOS format (D:).

1999-06-04  Jim Blandy  <jimb@zwingli.cygnus.com>

	* parse.c: Don't include <ctype.h> twice.

1999-06-04  David Taylor  <taylor@louisiana.cygnus.com>

	Sat May 15 12:16:09 1999  Per Bothner  <bothner@deneb.cygnus.com>

        * eval.c (evaluate_subexp_standard):  Remove Gilmore rant.
        (Of course C has "expected types", at least if you allow
        brace-initializer expressions - as in Gcc.)
        Remove NULLing out expect_type.  Do pass NULL_TYPE in place
        the incoming expect_type where appropriate.

Fri Jun  4 10:56:23 1999  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (hppa_fix_call_dummy): Make it work for GCC compiled
	executables without end.o.  Clean up lots of mis-guided comments.

Fri Jun  4 17:10:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* parser-defs.h (std_regs): Replace array with pointer.
	* parse.c (build_parse): Build the std_regs table according to the
 	standard registers available.
	(_initialize_parse): Register std_regs and num_std_regs as
 	architecture specific.
	* gdbarch.h, gdbarch.c: Add multi-arch support for SP_REGNUM,
 	FP_REGNUM, PC_REGNUM, NUM_REGS, REGISTER_NAME.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.
	
1999-06-03  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* thread.c: eliminate the target_thread_vector (functionality
	moved into the standard target vector).
	* gdbthread.h: eliminate target_thread_vector.  Move all related
	defines into remote.c, since they are no longer shared with thread.c.
	* remote.c: eliminate the target_thread_vector.
 	(remote_find_new_threads): change return type to void, consistent
	with the target vector table.  (cont_thread): rename continue_thread.
	(record_currthread): remove dead code.  (remote_thread_alive):
	clean up and simplify.  (threadref etc.): move definitions to here
	from gdbthread.h.  

1999-06-02  Jason Molenda  (jsm@bugshack.cygnus.com)

	* inftarg.c (child_create_inferior): Remove dead HPUX specific code
	which tries to find csh.
	* fork-child.c: Remove DEBUGGING predefine and conditionalized
	printfs.
	(fork_inferior): Remove dead HPUX specific code which assumes shell
	is csh.

	* hppa-tdep.c: Remove DEBUGGING and #if 0 debugging printfs.
	* parse.c: Ditto.
	* somread.c: Ditto.

	* gdbarch.h: Forward decl of struct value.

Thu Jun  3 10:12:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (do_d10v_pop_frame): Rename d10v_pop_frame.  Make
 	static.
	* d10v-tdep.c (d10v_pop_frame), config/d10v/tm-d10v.h: New
 	function.  Call generic_pop_current_frame.
	* config/d10v/tm-d10v.h (POP_FRAME): Update.
	* gdbarch.h, gdbarch.c (frame_num_args_unknown): New function.
	* gdbarch.h, gdbarch.c: Add multi-arch support for POP_FRAME,
 	SKIP_PROLOGUE, INNER_THAN, DECR_PC_AFTER_BREAK,
 	FUNCTION_START_OFFSET, REMOTE_TRANSLATE_XFER_ADDRESS, FRAME_CHAIN,
 	FRAME_CHAIN_VALID, FRAME_SAVED_PC, FRAME_ARGS_ADDRESS,
 	FRAME_LOCALS_ADDRESS, FRAME_ARGS_SKIP,
 	FRAMELESS_FUNCTION_INVOCATION, REGISTER_BYTE, REGISTER_RAW_SIZE,
 	REGISTER_VIRTUAL_SIZE, REGISTER_VIRTUAL_TYPE, SAVED_PC_AFTER_CALL,
 	FRAME_NUM_ARGS, MAX_REGISTER_RAW_SIZE, MAX_REGISTER_VIRTUAL_SIZE,
 	REGISTER_SIZE.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.
	* config/d10v/tm-d10v.h (DMEM_START, IMEM_START, STACK_START,
 	ARG1_REGNUM, ARGN_REGNUM, RET1_REGNUM): Move definitions from
 	here.
	* d10v-tdep.c: To here.
	* config/d10v/tm-d10v.h (struct type): Move declaration from here.
	* gdbarch.h: To here.
	* config/d10v/tm-d10v.h (struct frame_info, struct
 	frame_saved_regs, struct type): Delete declarations.
	
1999-06-02  Robert Hoehne  <robert.hoehne@gmx.net>

	* go32-nat.c: go32_terminal_init, go32_terminal_inferior and
	go32_terminal_ours are new functions to save/restore the inferior`s
	stdin/stdout filemodes

1999-06-02  Stan Shebs  <shebs@andros.cygnus.com>

	* MAINTAINERS: Add Mark Kettenis, Jeff Law, and Philippe De Muyter
	as maintainers for Hurd, HP/UX, and COFF, respectively.

1999-06-02  Mark Kettenis  <kettenis@gnu.org>

	* gnu-nat.c (inf_continue): New function.
	(struct inf): Use `unsigned int' instead of `int' for bit-fields.
	Add new bit-field named `nomsg'.
	(inf_validate_procinfo): Renamed from inf_validate_stopped, all
	callers changed.  Also update the `nomsg' and `traced' fields of
	INF.
	(make_inf): Initialize INF->nomsg.
	(inf_cleanup): Reset INF->nomsg.
	(inf_detach): Call `inf_validate_procinfo'.  Call `inf_continue'
	instead of `inf_signal' if the inferior does not have a message
	port.
	(gnu_resume): Likewise.
	(gnu_create_inferior): Reset INF->nomsg in `attach_to_child'.
	Call `inf_validate_procinfo' after returning from `fork_inferior'.
	(gnu_attach): Update signal thread and tracing state.

	* config/i386/tm-i386gnu.h: Include "i386/tm-i386.h" instead of
	"i386/tm-i386v.h".
	(STACK_END_ADDR): Remove.
	(SIGCONTEXT_PC_OFFSET): New define.
	Include "tm-sysv4.h".

1999-06-02  J.T. Conklin  <jtc@redback.com>

	* config/tm-vxworks.h: New file, header for definitions common to
 	all vxWorks targets.
	* config/a29k/tm-vx29k.h, config/i960/tm-vx960.h,
 	config/m68k/tm-vx68.h, config/mips/tm-vxmips.h,
 	config/sparc/tm-vxsparc.h: Include tm-vxworks.h.

Wed Jun  2 17:37:03 1999  Jeffrey A Law  (law@cygnus.com)

	* config/pa/tm-hppa.h (IMPORT_SHLIB): New unwind stub type.

1999-06-02  Christopher Faylor <cgf@cygnus.com>

	* configure.tgt: Alphabetically reorder some targets.

1999-06-02  Keith Seitz  <keiths@cygnus.com>

	* v850ice.c (v850ice_xfer_memory): Insert lost "break".

1999-06-02  Jim Blandy  <jimb@zwingli.cygnus.com>

	* rs6000-tdep.c (variants): Fix description of 750 register set.
	(Thanks to J. T. Conklin.)

Wed Jun  2 16:10:08 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Add multi-arch support for
 	STORE_STRUCT_RETURN, STORE_RETURN_VALUE,
 	EXTRACT_STRUCT_VALUE_ADDRESS, USE_STRUCT_CONVENTION,
	FRAME_INIT_SAVED_REGS and INIT_EXTRA_FRAME_INFO.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.

	* config/d10v/tm-d10v.h (FRAME_INIT_SAVED_REGS): Replace
 	FRAME_FIND_SAVED_REGS.
	(d10v_frame_init_saved_regs): Replace d10v_frame_find_saved_regs.
	* d10v-tdep.c (d10v_pop_frame, d10v_frame_chain,
 	d10v_frame_init_saved_regs): Update.
	* gdbarch.h: Disallow FRAME_FIND_SAVED_REGS when multi-arch.

	* gdbarch.h, gdbarch.c: Add multi-arch support for
 	D10V_MAKE_DADDR, D10V_MAKE_IADDR, D10V_DADDR_P, D10V_IADDR_P,
 	D10V_CONVERT_DADDR_TO_RAW and D10V_CONVERT_IADDR_TO_RAW.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.

	* config/d10v/tm-d10v.h (EXTRA_FRAME_INFO): Delete.
	* d10v-tdep.c (struct frame_extra_info): Define.
	(d10v_init_extra_frame_info, d10v_pop_frame, d10v_frame_chain,
 	d10v_frame_find_saved_regs): Update.
	* gdbarch.h: Disallow EXTRA_FRAME_INFO when multi-arch.

Tue Jun  1 13:36:31 1999  Philippe De Muyter  <phdm@macqel.be>

	* config/m68k/tm-delta68.h (FRAME_NUM_ARGS): Macro prototype fixed.
	* config/m68k/tm-news.h, config/ns32k/tm-merlin.h: Ditto.
	* config/ns32k/tm-umax.h (FRAME_NUM_ARGS): Old macro definition
	removed; new macro prototype fixed.

Wed Jun  2 11:18:37 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Add multi-arch support for
 	EXTRACT_RETURN_VALUE, PUSH_ARGUMENTS, PUSH_DUMMY_FRAME,
 	PUSH_RETURN_ADDRESS, POP_FRAME, FRAME_FIND_SAVED_REGS.
	* d10v-tdep.c, config/d10v/tm-d10v.h: Update.

	* gdbarch.h, gdbarch.c: Add multi-arch support for
 	REGISTER_CONVERTIBLE, REGISTER_CONVERT_TO_VIRTUAL,
 	REGISTER_CONVERT_TO_RAW.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_gdbarch_init): Update.

	* defs.h (REGISTER_NAME): Move compatibility definition from here.
	* gdbarch.h: To here.

	* frame.h, blockframe.c (generic_fix_call_dummy): New
 	stub function.
	* gdbarch.h, gdbarch.c: Add multi-arch support for FIX_CALL_DUMMY.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_gdbarch_init): Update.

Tue Jun  1 20:06:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_gdbarch_init): Set get_saved_register.
	* config/d10v/tm-d10v.h: Update.
	
Tue Jun  1 19:50:05 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Add multi-arch support for TARGET_READ_PC,
 	TARGET_WRITE_PC, TARGET_READ_FP, TARGET_WRITE_FP, TARGET_READ_SP
 	and TARGET_WRITE_SP.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_gdbarch_init): Update.

Tue Jun  1 19:19:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (default_gdbarch): Set field GET_SAVED_REGISTER to
 	generic_get_saved_register.
	* gdbarch.c: Change update dispatch functions so that they check
 	for a NULL function pointer.

Tue Jun  1 19:19:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: Add multi-arch support for TARGET_INT_BIT,
 	TARGET_CHAR_BIT, TARGET_SHORT_BIT, TARGET_FLOAT_BIT,
 	TARGET_DOUBLE_BIT and TARGET_LONG_DOUBLE_BIT.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_gdbarch_init): Update.
	
Tue Jun  1 18:47:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* parse.c (build_parse): New function.  Initialize
 	msym_text_symbol_type, msym_data_symbol_type and
 	msym_unknown_symbol_type.
	(_initialize_parse): Call build_parse.
	(_initialize_parse): Register variables msym_text_symbol_type,
 	msym_data_symbol_type as msym_unknown_symbol_type as
 	per-architecture.

Tue Jun  1 11:30:09 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (_initialize_d10v_tdep): Register d10v as an
 	architecture.
	(d10v_gdbarch_init): New function.
	* confg/d10v/tm-d10v.h (GDB_MULTI_ARCH): Define.

Tue Jun  1 10:45:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d10v/tm-d10v.h (REGISTER_CONVERTIBLE,
 	REGISTER_CONVERT_TO_RAW, REGISTER_CONVERT_TO_VIRTUAL): Convert
 	macros into functions.
	* config/d10v/tm-d10v.h, d10v-tdep.c (d10v_register_convertable,
 	d10v_register_convert_to_virtual, d10v_register_convert_to_raw):
 	The new functions.

1999-05-31  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* stack.c (print_args_stub): Add missing stream parameter.

Mon May 31 15:50:08 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	Fri May 28 16:51:00 1999  Martin Dorey  <martin.dorey@madge.com>:
        * valops.c, value.h (default_push_arguments): Fix order of
 	parameters to match PUSH_ARGUMENTS arguments.

Thu May 27 11:42:55 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (EXTRACT_STRUCT_VALUE_ADDRESS): Return 0.

	* valops.c (value_assign): Delete redundant test of
 	REGISTER_CONVERTIBLE.

Thu May 27 11:33:57 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/w65/tm-w65.h, config/tic80/tm-tic80.h, config/sh/tm-sh.h,
 	config/i386/tm-i386m3.h, config/i386/tm-go32.h,
 	config/i386/tm-cygwin.h, config/h8500/tm-h8500.h,
 	config/d30v/tm-d30v.h, config/d10v/tm-d10v.h: Delete definition of
 	macro NAMES_HAVE_UNDERSCORE.

Thu May 27 09:31:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (EXTRACT_STRUCT_VALUE_ADDRESS,
 	EXTRACT_STRUCT_VALUE_ADDRESS_P): Provide default definitions.
	* values.c (value_being_returned): Use
 	EXTRACT_STRUCT_VALUE_ADDRESS when EXTRACT_STRUCT_VALUE_ADDRESS_P.

Wed May 26 13:51:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (tui_file_new, tui_file_delete, tui_fileopen): New
 	functions.
	(tui_file_isatty): Rename gdb_file_isatty.
	(gdb_file_init_astring): Use tui_file_new to create stream.
	(gdb_file_get_strbuf, gdb_file_adjust_strbuf): Call gdb_file_data
 	to access the tui_stream.
	(tui_file_flush): Rename gdb_flush. Call gdb_file_data to access
 	the tui_stream. Pass FILE and not STREAM down.
	
	* utils.c (struct stdio_file, stdio_file_flush, stdio_file_fputs,
 	stdio_file_isatty, stdio_file_delete, stdio_file_new,
 	stdio_fileopen): Define type and functions.  Implement a simple
 	STDIO based gdb_file.
	(struct gdb_file, gdb_file_new, gdb_file_delete, null_file_isatty,
 	null_file_flush, null_file_fputs, null_file_delete, gdb_file_data,
 	set_gdb_file_flush, set_gdb_file_isatty, set_gdb_file_fputs,
 	set_gdb_file_data, fputs_unfiltered, gdb_flush, gdb_file_isatty):
 	Define type and functions.  Implement virtual functions for
 	gdb_file.

	* defs.h (struct gdb_file): Declare.
	(GDB_FILE): Change type to struct gdb_file. Deprecate.
	(gdb_file_flush_ftype, gdb_file_fputs_ftype,
 	gdb_file_isatty_ftype, gdb_file_delete_ftype): Add function type
 	declarations.
	
	* defs.h (set_gdb_file_flush, set_gdb_file_fputs,
 	set_gdb_file_isatty, set_gdb_file_data, gdb_file_new,
 	gdb_file_delete, gdb_file_data, stdio_fileopen, tui_fileopen): Add
 	function declarations.
	(gdb_fopen): Re-implement. Call stdio_file_new.
	(gdb_fclose): Re-implement. Call gdb_file_delete.
	
	* main.c (tui_file_fputs): Rename fputs_unfiltered.  Use
 	gdb_file_data to gain access to the tui_stream data.  Use FILE
 	instead of STREAM where applicable.
	(main): Create gdb_stdout and gdb_stderr using tui_fileopen.
	
	* defs.h (struct tui_stream): Add field ts_magic.
	* utils.c (tui_file_magic): Local variable.
	(tui_file_new): Set field ts_magic.
	(tui_file_delete, tui_file_isatty, gdb_file_init_astring,
 	gdb_file_get_strbuf, gdb_file_adjust_strbuf, tui_file_flush):
 	Verify ts_magic.

1999-05-25  Jim Blandy  <jimb@zwingli.cygnus.com>

 	* breakpoint.c (insert_breakpoints, remove_breakpoint,
	breakpoint_1): Add a 'default' case, which prints a warning
	message, to remove EGCS warnings.

1999-05-25  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* utils.c (gdb_file_adjust_strbuf): Take into account the
	possibility that the buffer has not been allocated yet.

Tue May 25 16:05:11 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (REGISTER_CONVERTIBLE, REGISTER_CONVERT_TO_VIRTUAL,
 	REGISTER_CONVERT_TO_RAW): Provide default definition.

	* valops.c (value_assign), infcmd.c (do_registers_info), findvar.c
 	(value_from_register, value_of_register): Remove #ifdef
 	REGISTER_CONVERTIBLE.  Assume REGISTER_CONVERTIBLE etc defined.

1999-05-25  Keith Seitz  <keiths@cygnus.com>

	* config/mcore/tm-mcore.h (FRAME_NUM_ARGS): Re-write definition of
 	FRAME_NUM_ARGS so that it returns NUM_ARGS as a result instead of
 	setting a variable as a side effect.

Tue May 25 16:18:25 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* remote-d10v.c (d10v_eva_prepare_to_trace,
 	d10v_eva_get_trace_data), remote-sim.c (_initialize_remote_sim):
 	Add declaraton.  Make static.

	* remote-d10v.c (_initialize_remote_d10v), d10v-tdep.c
 	(_initialize_d10v_tdep): Add declaration.
	* config/d10v/tm-d10v.h (d10v_frame_chain): Add declaration.

Tue May 25 15:20:58 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* main.c (init_proc, proc_remove_foreign): Delete function.
	* inftarg.c (child_mourn_inferior): Update. Delete call to
 	proc_remove_foreign().
	* top.c (gdb_init): Update. Delete call to init_proc().

	* utils.c (pollquit, fmthex, hexlate): Delete function.

Tue May 25 13:01:43 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* main.c (gdb_init): Move declaration from here.
	* top.h: To here.
	
	* defs.h (init_page_info): Add declaration.

	* top.c (initialize_utils): Move declaration from here.
	* defs.h: To here.

	* infcmd.c (target_map_name_to_register): Move declaration from
 	here.
	* parser-defs.h: To here.

	* c-typeprint.c (cp_type_print_method_args), target.c
 	(nosupport_runtime, normal_target_post_startup_inferior): Add
 	declaration.  Make static.

Tue May 25 13:53:23 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* main.c: Include "event-loop.h".
	* Makefile.in (main.o): Add dependency.

	* top.h (setup_event_loop, async_init_signals), top.c
 	(set_async_editing_command, set_async_annotation_level,
 	set_async_prompt), event-loop.c (display_gdb_prompt): Move
 	declarations from here.
	* event-loop.h: To here.
	
	* event-loop.h (delete_async_signal_handler): Add function
 	declaration.

	* event-top.c (change_annotation_level, command_handler): Add
 	declaration.  Make static.

Tue May 25 12:44:58 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* tracepoint.c (free_actions_list, add_register): Add declaration.
  	Make static.
	(free_actions_list_cleanup_wrapper): New function.  Wraps
 	free_actions_list for make_cleanup.
	(trace_start_command): Pass free_actions_list_cleanup_wrapper
 	instead of free_actions_list to make_cleanup.
	(_initialize_tracepoint): Add extern declaration.

Tue May 25 12:23:39 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* jv-typeprint.c (java_type_print_base, jv-valprint.c
 	(java_print_value_fields): Add static declaration.

	* jv-lang.c (java_lookup_type, get_java_utf8_name,
 	java_lookup_type): Add static declaration.
	(get_java_class_symtab, java_class_is_primitive,
 	java_value_string): Add declaration. Make static.
	(java_rerun_cleanup): Add extern declaration for this stub
 	function.
	
Tue May 25 12:06:29 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h: When multi-arch, check that REGISTER_NAMES was not
 	defined.

Mon May 24 16:16:29 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* inflow.c (_initialize_inflow), annotate.c
 	(_initialize_annotate), os9kread.c (_initialize_os9kread),
 	serial.c (_initialize_serial), nlmread.c (_initialize_nlmread),
 	f-valprint.c (_initialize_f_valprint), cp-valprint.c
 	(_initialize_cp_valprint), typeprint.c (_initialize_typeprint),
 	complaints.c (_initialize_complaints), scm-lang.c
 	(_initialize_scheme_language), m2-lang.c
 	(_initialize_m2_language), dbxread.c (_initialize_dbxread),
 	f-lang.c (_initialize_f_language), ch-lang.c
 	(_initialize_chill_language), c-lang.c (_initialize_c_language),
 	corefile.c (_initialize_core), stabsread.c
 	(_initialize_stabsread), mipsread.c (_initialize_mipsread),
 	elfread.c (_initialize_elfread), coffread.c
 	(_initialize_coffread), maint.c (_initialize_maint_cmds),
 	demangle.c (_initialize_demangler), maint.c
 	(_initialize_maint_cmds), language.c (_initialize_language): Add
 	external declaration.

Mon May 24 10:04:56 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/z8k/tm-z8k.h, config/w65/tm-w65.h, config/v850/tm-v850.h,
 	config/tic80/tm-tic80.h, config/tahoe/tm-tahoe.h,
 	config/rs6000/tm-rs6000.h, config/sparc/tm-sparc.h,
 	config/sh/tm-sh.h, config/pyr/tm-pyr.h, config/pa/tm-hppa.h,
 	config/ns32k/tm-merlin.h, config/mn10300/tm-mn10300.h,
 	config/mn10200/tm-mn10200.h, config/mips/tm-mips.h,
 	config/m88k/tm-m88k.h, config/m68k/tm-news.h,
 	config/m68k/tm-delta68.h, config/m68k/tm-isi.h,
 	config/m68k/tm-m68k.h, config/m32r/tm-m32r.h,
 	config/i960/tm-i960.h, config/i386/tm-i386v.h,
 	config/i386/tm-i386.h, config/h8500/tm-h8500.h,
 	config/h8300/tm-h8300.h, config/fr30/tm-fr30.h,
 	config/d30v/tm-d30v.h, config/d10v/tm-d10v.h,
 	config/convex/tm-convex.h, config/arc/tm-arc.h,
 	config/arm/tm-arm.h, config/alpha/tm-alpha.h,
 	config/a29k/tm-a29k.h: Re-write definition of FRAME_NUM_ARGS so
 	that it returns NUM_ARGS as a result instead of setting a variable
 	as a side effect.

	* ns32k-tdep.c (merlin_frame_num_args), tahoe-tdep.c
 	(tahoe_frame_num_args), vax-tdep.c (vax_frame_num_args),
 	m68k-tdep.c (news_frame_num_args, delta68_frame_num_args,
 	isi_frame_num_args), convex-tdep.c (convex_frame_num_args): New
 	functions.

	* stack.c (print_args_stub): Update use of FRAME_NUM_ARGS.

Mon May 24 11:57:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote.c (remote_xfer_memory): Re-write with assumption that
 	REMOTE_TRANSLATE_XFER_ADDRESS is defined.  Pass targ_addr and
 	targ_len by reference.
	(REMOTE_TRANSLATE_XFER_ADDRESS): Provide default definition.
	
	* remote-d10v.c (remote_d10v_translate_xfer_address): Update.
	* config/d10v/tm-d10v.h (REMOTE_TRANSLATE_XFER_ADDRESS): Update.

Mon May 24 12:10:58 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* value.h (default_push_arguments): Add function declaration.

	* alpha-tdep.c (alpha_about_to_return), gdbarch.c (verify_gdbarch,
 	arch_ok, set_arch), command.c (find_cmd), infrun.c
 	(follow_inferior_fork, follow_fork, follow_vfork,
 	set_schedlock_func, is_internal_shlib_eventpoint,
 	stopped_for_internal_shlib_event, stopped_for_shlib_catchpoint,
 	xdb_handle_command), infcmd.c (run_no_args_command, go_command),
 	symfile.c (add_filename_language, set_ext_lang_command,
 	info_ext_lang_command, init_filename_language_table), symtab.c
 	(overload_list_add_symbol), defs.h (default_get_saved_register),
 	ax-general.c (grow_expr, append_const, read_const, generic_ext):
 	Ditto.

	* infrun.c (currently_stepping): Ditto.  Make static.

	* valops.c (hand_function_call): Explictly type static variable
 	``checked''.

Mon May 24 08:36:18 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (d10v_breakpoint_from_pc, d10v_register_name,
 	d10v_register_byte, d10v_register_raw_size,
 	d10v_register_virtual_size, d10v_register_virtual_type,
 	d10v_make_daddr, d10v_make_iaddr, d10v_daddr_p, d10v_iaddr_p,
 	d10v_convert_iaddr_to_raw, d10v_convert_daddr_to_raw,
 	d10v_store_struct_return, d10v_store_return_value,
 	d10v_extract_struct_value_address, d10v_frame_saved_pc,
 	d10v_frame_args_address, d10v_frame_locals_address,
 	d10v_saved_pc_after_call): New functions.
	
	* config/d10v/tm-d10v.h (REGISTER_BYTE, REGISTER_RAW_SIZE,
 	REGISTER_VIRTUAL_SIZE, REGISTER_VIRTUAL_TYPE, STORE_STRUCT_RETURN,
 	D10V_MAKE_DADDR, D10V_MAKE_IADDR, D10V_DADDR_P, D10V_IADDR_P,
 	D10V_CONVERT_DADDR_TO_RAW, D10V_CONVERT_IADDR_TO_RAW,
 	STORE_STRUCT_RETURN, STORE_RETURN_VALUE,
 	EXTRACT_STRUCT_VALUE_ADDRESS, SAVED_PC_AFTER_CALL, FRAME_SAVED_PC,
 	FRAME_ARGS_ADDRESS): Re-define using new functions.

	* config/d10v/tm-d10v.h (BREAKPOINT_FROM_PC): Replace BREAKPOINT.
	(REGISTER_NAME): Replace REGISTER_NAMES.

	* utils.c (core_addr_lessthan, core_addr_greaterthan): New
 	functions.
	* defs.h (core_addr_lessthan, core_addr_greaterthan): Declare.
	
Sat May 22 16:44:06 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* utils.c (n_spaces): Handle case where first call has N equal to
 	zero.
	(print_spaces): Use n_spaces.

Fri May 21 11:23:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* valops.c (value_push): Remove conditional definition based on
 	absense of macro PUSH_ARGUMENTS.  Pass SP and STRUCT_ADDR by
 	reference.
	(default_push_arguments): New function.

	* config/v850/tm-v850.h, config/tic80/tm-tic80.h,
 	config/sparc/tm-sparc.h, config/sparc/tm-sp64.h,
 	config/sh/tm-sh.h, config/rs6000/tm-rs6000.h, config/pa/tm-hppa.h,
 	config/mn10300/tm-mn10300.h, config/mn10200/tm-mn10200.h,
 	config/mips/tm-mips.h, config/m32r/tm-m32r.h,
 	config/h8300/tm-h8300.h, config/fr30/tm-fr30.h,
 	config/d30v/tm-d30v.h, config/d10v/tm-d10v.h, config/arm/tm-arm.h,
 	config/alpha/tm-alpha.h: Update definition of PUSH_ARGUMENTS.
  	Return updated SP.

	* rs6000-tdep.c (rs6000_push_arguments): Rename push_arguments.

Thu May 20 12:18:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (get_prev_frame): Remove #ifdef around test for
 	FRAMELESS_FUNCTION_INVOCATION.
  	(get_prev_frame): Change FRAMELESS_FUNCTION_INVOCATION call to a
 	function invocation.
	* i386-tdep.c (i386_frame_num_args), stack.c (frame_info): Ditto.
	* config/z8k/tm-z8k.h, config/w65/tm-w65.h, config/vax/tm-vax.h,
 	config/sparc/tm-sparc.h, config/sh/tm-sh.h,
 	config/rs6000/tm-rs6000.h, config/pa/tm-hppa.h,
 	config/mips/tm-mips.h, config/m88k/tm-m88k.h,
 	config/m68k/tm-m68k.h, config/i960/tm-i960.h,
 	config/i386/tm-sun386.h, config/i386/tm-i386v.h,
 	config/i386/tm-i386.h, config/h8500/tm-h8500.h,
 	config/h8300/tm-h8300.h, config/fr30/tm-fr30.h,
 	config/d30v/tm-d30v.h, config/d10v/tm-d10v.h,
 	config/convex/tm-convex.h, config/arm/tm-arm.h,
 	config/arc/tm-arc.h, config/alpha/tm-alpha.h,
 	config/a29k/tm-a29k.h: Update FRAMELESS_FUNCTION_INVOCATION.
	* fr30-tdep.c (fr30_frameless_function_invocation), convex-tdep.c
 	(convex_frameless_function_invocation), arm-tdep.c
 	(arm_frameless_function_invocation): New functions.

1999-05-20  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c: Change dates in comments to ISO format.

	* event-top.c: Ditto.
	* event-loop.c: Ditto.
	* main.c: Ditto.
	
1999-05-19  Keith Seitz  <keiths@cygnus.com>

	* config/mcore/tm-mcore.h (BELIEVE_PCC_PROMOTION): Define. We
	really do want to believe what gcc tells us about types...

1999-05-19  Keith Seitz  <keiths@cygnus.com>

	* config/mcore/tm-mcore.h (FRAME_ARGS_ADDRESS): Define to a function.
	 (FRAME_LOCALS_ADDRESS): Ditto.
	* mcore-tdep.c (mcore_frame_args_addcress): New function.
	(mcore_frame_locals_address): New function.

	* monitor.c (monitor_open): Only assume we have eight
	breakpoints if the monitor implementation does not tell
	us how many there really are. Alloc memory for these
	dynamically.
	(monitor_close): Free memory associated with breakpoint
	storage.
	(monitor_insert_breakpoint): Don't rely on a hardcoded
	number of breakpoints.
	(monitor_remove_breakpoint): Ditto.
	(NUM_MONITOR_BREAKPOINTS): Removed and replaced with monitor_ops
	specification.
	* monitor.h (struct monitor_ops): Add new member so that the
	individual monitor implementations can tell us how many
	breakpoints the monitor supports.

	* mcore-rom.c (init_picobug_cmds): Add number of breakpoints supported
	by picobug monitor.

1999-05-18  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	From Philippe De Muyter  <phdm@macqel.be>:
	* event-loop.h: Include sys/wait.h only if HAVE_SYS_WAIT_H.
	
1999-05-17  Keith Seitz  <keiths@cygnus.com>

	* configure.tgt: Add MCore target.
	* Makefile.in: Add mcore-tdep.c and mcore-rom.c
	* config/mcore/tm-mcore.h: New file.
	* config/mcore/mcore.mt: New file.
	* mcore-rom.c: New file.
	* mcore-tdep.c: New file.

1999-05-17  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* top.c (print_command_line): Added the missing stream argument.
	* gdbcmd.h: Added argument to prototype.
	* command.c: Fixed call to include extra argument.
	* breakpoint.c: Same.

1999-05-14  Jim Blandy  <jimb@zwingli.cygnus.com>

	Targets are #defining PREPARE_TO_PROCEED with inconsistent numbers
	of arguments.  Since the Mach 3 target needs an argument, we'll
	make things consistent by adding an argument everywhere.
	* infrun.c (proceed): Pass an argument to PREPARE_TO_PROCEED.
	* config/pa/nm-hppah.h (PREPARE_TO_PROCEED): Add ignored argument
	to definition.

1999-05-11  Stan Shebs  <shebs@andros.cygnus.com>

	Fri Apr 23 13:27:34 PDT 1999  Toshiyasu Morita  (tm@netcom.com)
	* sh-stub.c: Mostly localize processor dependencies.

1999-05-10  Martin Hunt  <hunt@cygnus.com>

	* debugify.c, debugify.h: Removed because they are no
	longer used.

1999-05-08  Jim Blandy  <jimb@zwingli.cygnus.com>

	* infrun.c (_initialize_infrun): Handle TARGET_SIGNAL_LWP,
	TARGET_SIGNAL_WAITING, and TARGET_SIGNAL_CANCEL like SIGALRM or
	SIGIO --- pass them through to the inferior silently. 
	* target.h (enum target_signals): Add TARGET_SIGNAL_CANCEL, for
	Solaris's SIGCANCEL.
	* target.c (target_signal_from_host, target_signal_to_host): Add
 	mapping between SIGCANCEL and TARGET_SIGNAL_CANCEL.
	(signals): Add entry for SIGCANCEL.

1999-05-07  Stan Shebs  <shebs@andros.cygnus.com>

	After years of talking about it, finally break up the
 	wait_for_inferior loop.
	* infrun.c (struct execution_control_state): New struct,
	holds what used to be local vars governing wfi behavior.
	(init_execution_control_state): New function, was code in
	wfi that set up execution control state.
	(handle_inferior_event): New function, was body of main
	wfi loop.  Rewrite all local var references to go through
	the ecs structure passed into this function.
	(wait_for_inferior): Rewrite to set up and use execution control
 	state, and to call the new functions.
	(currently_stepping): New function, was the macro
 	CURRENTLY_STEPPING.
	(enum infwait_states): Rename from wfi_states.
	(infwait_normal_state, etc): Similarly.

Thu May  6 15:25:32 1999  Philippe De Muyter  <phdm@macqel.be>

	* coffread.c (coff_symtab_read): Call `record_line' with the line
	number of the ".bf" symbol only for one-line functions.

1999-05-06  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* Makefile.in: thread.o depends on target.h.

1999-05-06  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* event-top.c (change_line_handler): Use POLLIN instead of
	POLLRDNORM, for compatibility with Linux.
	(setup_event_loop): Ditto.

1999-05-06  Jim Blandy  <jimb@zwingli.cygnus.com>

	* mips-tdep.c (heuristic_proc_start): Rewrite cryptic error
	message about hitting the "heuristic fence post" with something
	that actually gives the user a fighting chance of figuring out
	why GDB is unhappy.
	
1999-05-06  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* top.c: Include event-loop.h.
	(init_main): Add async version of 'set prompt' command.
	If in async mode define the editing and annotate set 
	commands in a different way.
	Initialize new variable asyn_command_editing_p to 1.
	Initialize the gdb prompt for async mode.
	(quit_cover): Make not static, for use by the event loop.
	(gdb_init): Call async_init_signals for the asynchronous case.
	(source_line_number, source_file_name, source_error,
	source_pre_error, history_expansion_p): Make non-static, so
	event-top.c can use them.
	(command_loop_marker): Make non-static, for use in event-top.c.
	Include event-loop.h.
	
	* top.h: Add prototype for async_init_signals.
	(SET_TOP_LEVEL): Move here from main.c.
	Add setup_event_loop to exported functions.

	* defs.h: Add async_hook to exported variables.

	* main.c (SET_TOP_LEVEL): Move to top.h, so that it is visible in 
	event-loop.c.  Add new global variable async to determine whether 
	we are running in async mode or not.
	(main): Add support for --async switch. Use async_hook to call
	setup_event_loop, when running in async mode.

	* event-top.c: New file. Gdb input line handler and command line
	handler for the event loop. Initialization of signal handlers.
	All the handled	signals have handlers called handle_<signalname>.
	Set up all the appropriate tokens for asynchronous signal 
	handling.
		
	* event-loop.h: New file. Data structures and definitions for the
	event loop.

	* event-loop.c: New file. Functions for the event loop 
	implementation.

	* config.in: Regenerate with autoheader.

	* configure.in (AC_CHECK_FUNCS): Add poll to list of functions 
	to be checked for. 

	* configure: Regenerate.
                                                        
	* Makefile.in (SFILES): Add new source files.
	(eventloop_h): Define.
	(COMMON_OBS): Add new object files.
	(event-loop.o): Add rule for target object.
	(event-top.o): Ditto.

1999-05-05  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (wait_for_inferior): Transform breaks and continues
	into gotos, move the target_wait to the very top of the loop.

1999-05-05  Jonathan Larmour  <jlarmour@cygnus.co.uk>

	* configure.in: Ensure that GDB links with libuser32.a under
	cygwin because libreadline requires it.
	* Makefile.in (WIN32LIBS): Substitute in result from configure
	* configure: regenerate

1999-05-04  Jim Blandy  <jimb@zwingli.cygnus.com>

	Fix from John Rigby.  Richard Henderson says it seems okay.
	* alpha-tdep.c (PROC_DUMMY_FRAME): As long as we're abusing fields
	of (proc)->pdr, we ought to at least abuse one large enough to
	hold the value we're trying to store in it.  iopt is only 32 bits
	wide; cbLineOffset is a bfd_vma.

1999-05-04  DJ Delorie  <dj@cygnus.com>

	DJGPP changes from Robert Hoehne  <robert.hoehne@gmx.net>

	* ser-go32.c: correct includes
	* source.c (openp): use ROOTED_P instead of SLASH_P
	* go32-nat.c: enhance exception and NPX handling
	(go32_kill_inferior): fix small bug killing inferior
	* configure.in: don't look for termcap with djgpp
	* configure: rebuild

1999-05-04  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* main.c (main): Comment out unused and undocumented command line
 	option '-'.

1999-04-30  Jim Blandy  <jimb@zwingli.cygnus.com>

	Cleanup from Philippe De Muyter:
	* configure.in (BFD_NEED_DECLARATION): Check also for strstr.
	* acconfig.h (NEED_DECLARATION_MALLOC, NEED_DECLARATION_REALLOC,
	NEED_DECLARATION_FREE, NEED_DECLARATION_STRERROR): Define slots
	removed; they are now generated automatically.
	* gdb_string.h (strstr): Provide function prototype if
	NEED_DECLARATION_STRSTR.
	* configure, config.in: Regenerated.

Fri Apr 30 11:16:09 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* target.h (to_find_new_threads): new target ops vector.
	(target_find_new_threads): define.
	* target.c (update_current_target): inherit new target ops vector.
	* remote.c: Setup to_find_new_threads vector.
	* sol-thread.c: ditto.
	* thread.c (target_find_new_threads): rename: local_find_new_threads.
	(info_threads_command): call target_find_new_threads by new method,
	as a target ops vector, rather than previous macro definition method.
	* infcmd.c (go_command): define only if in xdb mode.
	* procfs.c: fix typo in comment.
	
Fri Apr 30 01:02:05 1999  Jeffrey A Law  (law@cygnus.com)

	* hppah-nat.c: Fix various coding convention violations introduced
	by HP.
	(child_acknowledge_created_inferior): Do nothing if PT_SET_EVENT_MASK
	is not defined.

1999-04-28  Stan Shebs  <shebs@andros.cygnus.com>

	* TODO: Add some items inspired by review of the manual.

Tue Apr 27 17:38:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/z8k/tm-z8k.h, config/v850/tm-v850.h,
 	config/tic80/tm-tic80.h, config/sparc/tm-sparc.h,
 	config/sh/tm-sh.h, config/pyr/tm-pyr.h, config/pa/tm-hppa.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/fr30/tm-fr30.h, config/d30v/tm-d30v.h,
 	config/d10v/tm-d10v.h, config/alpha/tm-alpha.h,
 	config/arm/tm-arm.h, config/a29k/tm-a29k.h, config/arc/tm-arc.h:
 	Change SKIP_PROLOGUE and SKIP_PROLOGUE_FRAMELESS_P macros so that
 	they return the new address.

	* sparc-tdep.c (sparc_skip_prologue), hppa-tdep.c
 	(hppa_skip_prologue), m88k-tdep.c
 	(m88k_skip_prologue), i960-tdep.c
 	(i960_skip_prologue), arc-tdep.c
 	(arc_skip_prologue), a29k-tdep.c (a29k_skip_prologue): Rename
 	skip_prologue function.

	* config/m68k/tm-isi.h: Convert macro SKIP_PROLOGUE into a new
 	function.
	* m68k-tdep.c (isi_skip_prologue): That new function.
	* vax-tdep.c (vax_skip_prologue), config/vax/tm-vax.h: Ditto.
	* tahoe-tdep.c (tahoe_skip_prologue), config/tahoe/tm-tahoe.h: Ditto.
	* rs6000-tdep.c (rs6000_skip_prologue), config/rs6000/tm-rs6000.h:
 	Ditto.
	* ns32k-tdep.c (umax_skip_prologue), config/ns32k/tm-umax.h: Ditto.
	* config/ns32k/tm-merlin.h, ns32k-tdep.c (merlin_skip_prologue):
 	Ditto.
	* config/m68k/tm-altos.h, m68k-tdep.c (altos_skip_prologue): Ditto.
	* config/convex/tm-convex.h, convex-tdep.c (convex_skip_prologue):
 	Ditto.

	* symtab.c (in_prologue, find_function_start_sal, decode_line_1),
 	infrun.c (wait_for_inferior), blockframe.c
 	(frameless_look_for_prologue): Update.
	* config/fr30/tm-fr30.h (FRAMELESS_FUNCTION_INVOCATION): Update.

1999-04-27  Stan Shebs  <shebs@andros.cygnus.com>

	* TODO: Remove item about DEBUG_EXPRESSIONS, no longer meaningful.

	* infrun.c (enum wfi_state): New enum.
	(wait_for_inferior): Merge all but one of the target_wait calls
	into a single call, add a wfi_state variable to encode which of
	the calls is being made.

1999-04-26  Jim Blandy  <jimb@zwingli.cygnus.com>

	Fix from Dave Holcomb.
	* hpux-thread.c (init_hpux_thread_ops): Use the right function
	name when initializing hpux_thread_ops.to_thread_alive.

	* coffread.c (coff_symfile_read): If we have a `.stab' section,
	but no `.stabstr' section, then print an error message; don't
	crash.

1999-04-26  Jim Blandy  <jimb@zwingli.cygnus.com>

	1999-04-25  Mark Kettenis  <kettenis@gnu.org>

	* gnu-nat.c (gnu_attach): Call target_terminal_init before calling
	inf_set_traced, since that function calls code that might try to
	restore the terminal settings.

Mon Apr 26 08:55:46 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c: More format cleanups.

Sun Apr 25 18:54:51 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (CALL_DUMMY_STACK_ADJUST_P): Replace
 	SIZEOF_CALL_DUMMY_STACK_ADJUST_P.
	(CALL_DUMMY_STACK_ADJUST): Replace
 	SIZEOF_CALL_DUMMY_STACK_ADJUST_P.
	* gdbarch.c (gdbarch_call_dummy_stack_adjust,
 	set_gdbarch_call_dummy_stack_adjust): Define.

Fri Apr 23 15:00:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (arch_ok): New function. Fix logic test for a valid
 	architecture.
	(set_arch): Use.

1999-04-22  Jason Molenda  (jsm@bugshack.cygnus.com)

        * README: Note that readline is not installed as a part of
        make install.

Thu Apr 22 21:02:28 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c (GET_SAVED_REGISTER, get_saved_register):
 	Add.
	(struct gdbarch, verify_gdbarch, gdbarch_alloc, gdbarch_dump,
 	default_gdbarch): Update.

	* value.h (get_saved_register): Cleanup prototype.
	* findvar.c (default_get_saved_register): Rename function
 	get_saved_register.
	(GET_SAVED_REGISTER): Define as default_get_saved_register when
 	undefined.
	(get_saved_register): Always declare. Call GET_SAVED_REGISTER.

	* sparc-tdep.c (sparc_get_saved_register): Rename function
 	get_saved_register.
	* config/sparc/tm-sparc.h (GET_SAVED_REGISTER): Update.
	* a29k-tdep.c (a29k_get_saved_register): Rename function
 	get_saved_register.
	* config/a29k/tm-a29k.h (GET_SAVED_REGISTER): Update.

	* config/d10v/tm-d10v.h, config/powerpc/tm-ppc-eabi.h,
 	config/h8300/tm-h8300.h, config/m32r/tm-m32r.h,
 	config/mn10200/tm-mn10200.h, config/mn10300/tm-mn10300.h,
 	config/sh/tm-sh.h, config/tic80/tm-tic80.h, config/v850/tm-v850.h:
 	Update macro GET_SAVED_REGISTER so that it calls
 	generic_get_saved_register.
	* v850-tdep.c, tic80-tdep.c, sh-tdep.c, mn10300-tdep.c,
 	mn10200-tdep.c, m32r-tdep.c, h8300-tdep.c, rs6000-tdep.c: Delete
 	function get_saved_register.

Thu Apr 22 13:32:23 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c: Cleanup.  Re-order the definition of the ``struct
 	gdbarch'' initialization functions so that maintenance is more
 	straightforward.
	
Thu Apr 22 11:07:21 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h, gdbarch.c (use_generic_dummy_frames,
 	USE_GENERIC_DUMMY_FRAMES): Add.
	(struct gdbarch, verify_gdbarch, gdbarch_alloc, gdbarch_dump,
 	default_gdbarch): Update.

	* config/v850/tm-v850.h, config/tic80/tm-tic80.h,
 	config/sh/tm-sh.h, config/powerpc/tm-ppc-eabi.h,
 	config/mn10300/tm-mn10300.h, config/mn10200/tm-mn10200.h,
 	config/m32r/tm-m32r.h, config/h8300/tm-h8300.h,
 	config/fr30/tm-fr30.h, config/d10v/tm-d10v.h: Give the
 	USE_GENERIC_DUMMY_FRAMES macro the value one.
	* inferior.h (USE_GENERIC_DUMMY_FRAMES): Default to a value of
 	zero.

	* blockframe.c (generic_find_dummy_frame,
 	generic_pc_in_call_dummy, generic_read_register_dummy,
 	generic_push_dummy_frame, generic_pop_current_frame,
 	generic_pop_dummy_frame, generic_frame_chain_valid,
 	generic_get_saved_register): Always define.

	* breakpoint.c (frame_in_dummy): Convert #ifdef
 	USE_GENERIC_DUMMY_FRAMES to runtime test.

	* rs6000-tdep.c (pop_frame, push_arguments, push_arguments,
 	push_arguments, frame_saved_pc, rs6000_frame_chain,
 	rs6000_frame_chain): Convert #ifdef USE_GENERIC_DUMMY_FRAMES to
 	runtime test.
	(get_saved_register): Always define.

Wed Apr 21 17:15:52 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (gdbarch_dump): Fix robustness check on
 	BELIEVE_PCC_PROMOTION_TYPE.

Wed Apr 21 15:39:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (TARGET_BYTE_ORDER_SELECTABLE_P): When multi-arch,
 	force selectable byte order.
	(CALL_DUMMY): Check for CALL_DUMMY definition when multi-arch. Are
 	incompatible.
	* gdbarch.c (verify_gdbarch): Check call_dummy_stack_adjust.
	
Wed Apr 21 14:45:44 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (gdbarch_update): Move dump-arch code from here.
	(gdbarch_dump): To here.  Make more robust.
	* gdbarch.h (gdbarch_dump): Add prototype.
	
	* gdbarch.c (enum set_arch): Declare.
	(set_arch): Add type parameter.  Only disable
 	``target_architecture_auto'' when set_arch_manual.
	(set_architecture, set_architecture_from_arch_mach,
 	set_architecture_from_file): Update.
	(set_arch): When ``gdbarch_debug'', gdbarch_dump() the current
 	architecture.

Wed Apr 21 10:48:53 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* frame.h (generic_pc_in_call_dummy):  Make signature consistent
 	with other pc_in_call_dummy functions by adding SP parameter.
	* blockframe.c (generic_pc_in_call_dummy): Update.  Pass SP and
 	not FP to generic_find_dummy_frame().
	* breakpoint.c (frame_in_dummy): Update.
	* config/v850/tm-v850.h, config/tic80/tm-tic80.h,
 	config/sh/tm-sh.h, config/mn10300/tm-mn10300.h,
 	config/mn10200/tm-mn10200.h, config/m32r/tm-m32r.h,
 	config/h8300/tm-h8300.h, config/fr30/tm-fr30.h,
 	config/d10v/tm-d10v.h: Update PC_IN_CALL_DUMMY definition.

Tue Apr 20 12:15:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/d10v/tm-d10v.h (GDB_TARGET_IS_D10V): Move from here.
	* gdbarch.h (GDB_TARGET_IS_D10V): To here.  Implement using
 	TARGET_ARCHITECTURE.
	(D10V_MAKE_DADDR, D10V_MAKE_IADDR): Provide fatal default
 	definitions.

	* valops.c (value_at): Replace #ifdef GDB_TARGET_IS_D10V code with
 	runtime test.
	(value_fetch_lazy): Ditto.
	* values.c (unpack_long): Ditto.
	* printcmd.c (print_frame_args): Ditto.

Sat Apr 17 15:39:33 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h: Cleanup multi-arch comments.

Fri Apr 16 15:39:10 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h: Provide definition if GDB_MULTI_ARCH > 1 or
 	GDB_MULTI_ARCH > 0 and no previous definition.
	* gdbarch.c (verify_gdbarch): Only verify a full multi-arch
 	target.

1999-04-15  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (wait_for_inferior) [HAVE_STEPPABLE_WATCHPOINT,
 	HAVE_NONSTEPPABLE_WATCHPOINT, HAVE_CONTINUABLE_WATCHPOINT]: Test
 	at runtime instead of compile time.

Thu Apr 15 15:15:07 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* mips-tdep.c (struct gdbarch_tdep): Rename elf_abi to
 	elf_flags. Check ABFD is elf_flavour before extracting elf_flags.
  	Match ARCH against entire elf_flags instead of just the
 	EF_MIPS_ABI field.
	(mips_gdbarch_init): Extract/print ef_mips_arch and
 	ef_mips_bitptrs and ef_mips_abi fields from elf_flags.

1999-04-14  Philippe De Muyter  <phdm@macqel.be>

	* breakpoint.c (maintenance_info_breakpoints): Function made
 	static to match previous prototype.

	* coffread.c (coff_record_line): Static function removed.
	(enter_linenos): Call `record_line' instead of `coff_record_line'.
	(FILE-LEVEL, coff_start_symtab, coff_end_symtab): `coff_record_line'
	-related stuff removed.
	(coff_symfile_read): Redundant statement removed.
	(coff_symtab_read): `record_line' is now called with the first line
	number of each function, given by the ".bf" symbol.  This solves
	the line-number bug for one-line functions.

Wed Apr 14 11:09:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.h (BELIEVE_PCC_PROMOTION_TYPE, BELIEVE_PCC_PROMOTION):
 	Add multi-arch definitions.
	* gdbarch.c (gdbarch_believe_pcc_promotion,
 	gdbarch_believe_pcc_promotion_type): New functions.
	(gdbarch_update): Update
	(struct gdbarch default_gdbarch): Update.

	* stabsread.c (BELIEVE_PCC_PROMOTION_TYPE): Provide default.
	(define_symbol): Change #if BELIEVE_PCC_PROMOTION_TYPE and #if
 	BELIEVE_PCC_PROMOTION to if().

1999-04-13  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in (HAVE_MULTIPLE_PROC_FDS): Don't define if we're
	on a Solaris host (of any architecture).
	* configure: Regenerated.

Wed Apr 14 08:23:32 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* gdbarch.c (SET_GDBARCH, GET_GDBARCH, FSET_GDBARCH): New macros.
	(gdbarch_byte_order, gdbarch_long_bit, gdbarch_long_long_bit,
 	gdbarch_ptr_bit, gdbarch_call_dummy_location,
 	gdbarch_call_dummy_address, gdbarch_call_dummy_address,
 	gdbarch_call_dummy_breakpoint_offset,
 	gdbarch_call_dummy_breakpoint_offset, gdbarch_call_dummy_length,
 	gdbarch_pc_in_call_dummy, dbarch_call_dummy_breakpoint_offset_p,
 	dbarch_call_dummy_p, dbarch_call_dummy_words,
 	dbarch_sizeof_call_dummy_words, dbarch_call_dummy_stack_adjust,
 	dbarch_call_dummy_stack_adjust_p): Define using new macros.
	
1999-04-13  Jason Molenda  (jsm@bugshack.cygnus.com)

	* rom68k-rom.c (init_rom68k_cmds): Fix an accidental substitution
	in monitor command strings, fix some formatting mistakes.

1999-04-13  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.tgt (arm-*-*): Whack another vestige of wingdb.

1999-04-12  James Ingham  <jingham@cygnus.com>

	* arm-tdep.c (arm_pop_frame): don't clobber the previous frame's
	stack pointer (stored in frame->framereg's register) BEFORE
	reading it.  This was causing "return" to behave very oddly.

1999-04-12  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Mention tic80.

1999-04-12  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* a68v-nat.c: Remove reference to 'extern char registers[]' throughout.
	* altos-xdep.c: Ditto.
	* arm-xdep.c: Ditto.
	* convex-xdep.c:  Ditto.
	* cxux-nat.c: Ditto.
	* hp300ux-nat.c: Ditto.
	* hppab-nat.c: Ditto.
	* i386aix-nat.c: Ditto.
	* i386mach-nat.c: Ditto.
	* m88k-nat.c: Ditto.
	* ptx4-nat.c: Ditto.
	* pyr-xdep.c: Ditto.
	* rs6000-nat.c: Ditto.
	* sun3-nat.c: Ditto.
	* sun386-nat.c: Ditto.
	* symm-nat.c: Ditto.
	* umax-xdep.c: Ditto.
	* i386v4-nat.c: Ditto. Also include inferior.h.
	* m68k-tdep.c: Ditto. Also include inferior.h.

Mon Apr 12 15:57:16 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* inferior.h (CALL_DUMMY_STACK_ADJUST, CALL_DUMMY_STACK_ADJUST_P):
 	Provide default definitions.
	* valops.c (hand_function_call): Replace #ifdef
 	CALL_DUMMY_STACK_ADJUST with if (CALL_DUMMY_STACK_ADJUST_P).

	* gdbarch.h (SIZEOF_CALL_DUMMY_STACK_ADJUST,
	(SIZEOF_CALL_DUMMY_STACK_ADJUST_P): Define
	* gdbarch.c (struct gdbarch): Add call_dummy_stack_adjust,
 	call_dummy_stack_adjust_p.
	(gdbarch_call_dummy_stack_adjust,
 	set_gdbarch_call_dummy_stack_adjust,
 	gdbarch_call_dummy_stack_adjust_p,
 	set_gdbarch_call_dummy_stack_adjust_p): New functions.
	(default_gdbarch): Update.

1999-04-09  Jim Blandy  <jimb@zwingli.cygnus.com>

	* ax-gdb.c, ax-gdb.h, ax-general.c, ax.h: Remove RCS Id strings.
	They're a pain.

	* GDB 4.18 released.
	* Makefile.in (VERSION): Bump to 4.18.1.

Thu Apr  8 16:04:34 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* inferior.h (CALL_DUMMY_P, CALL_DUMMY_WORDS,
 	SIZEOF_CALL_DUMMY_WORDS): Define macros.
	(PUSH_DUMMY_FRAME, FIX_CALL_DUMMY, STORE_STRUCT_RETURN): Provide
 	fatal default.

	* inferior.h, gdbarch.c (call_dummy_words,
 	sizeof_call_dummy_words): Declare/Define variables.
	* valops.c (value_arg_coerce, find_function_addr,
 	call_function_by_hand): Always define.
	(hand_function_call): Rename CALL_DUMMY version of
 	call_function_by_hand.  Make static.  Add prototype.
	(hand_function_call): Update.  Allocate space for *dummy and
 	*dummy1 using alloca.
	* breakpoint.c (frame_in_dummy): Update.

	* gdbarch.h (CALL_DUMMY_P, CALL_DUMMY_WORDS,
 	SIZEOF_CALL_DUMMY_WORDS): Define.
	* gdbarch.c (gdbarch_call_dummy_p, set_gdbarch_call_dummy_p,
 	gdbarch_call_dummy_words, set_gdbarch_call_dummy_words,
 	gdbarch_sizeof_call_dummy_words,
 	set_gdbarch_sizeof_call_dummy_words): New functions.
	(gdbarch_alloc, verify_gdbarch, gdbarch_update, struct
 	default_gdbarch): Update.

1999-04-08  Jason Molenda  (jsm@bugshack.cygnus.com)

	* monitor.c (monitor_read_memory): If a MO_GETMEM_NEEDS_RANGE 
	monitor, increase the end address by one byte.

1999-04-08  Jason Molenda  (jsm@bugshack.cygnus.com)

	* dbug-rom.c (init_dbug_cmds): Fix strings in 
        dbug_cmds.{step,clr_break,clr_all_break,fill} to send correct
	commands to the monitor.

1999-04-08  Keith Seitz  <keiths@cygnus.com>

	* m32r-stub.c (branchDestination): Undo overly ambitious
	sed script's conversion of cast from "char" to "unsigned char".
	Return offset should now be properly computed.

Thu Apr  8 14:13:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* inferior.h (CALL_DUMMY_BREAKPOINT_OFFSET_P): New macro.
  	Non-zero when CALL_DUMMY_BREAKPOINT_OFFSET is valid.

	* infcmd.c (breakpoint_auto_delete_contents): Always define.
	(run_stack_dummy): Update.
	* infrun.c (wait_for_inferior): Update

	* gdbarch.h (CALL_DUMMY_BREAKPOINT_OFFSET_P): New macro.
	* gdbarch.c (set_gdbarch_call_dummy_breakpoint_offset_p,
 	gdbarch_call_dummy_breakpoint_offset_p): New functions.
	(struct gdbarch, gdbarch_alloc, default_gdbarch, gdbarch_update):
 	Update.

1999-04-07  Stan Shebs  <shebs@andros.cygnus.com>

	* MAINTAINERS: Mark Alexander can no longer maintain
	h8300 and other embedded targets, sniff.

1999-04-06  Stan Shebs  <shebs@andros.cygnus.com>

	* inftarg.c (child_wait): Initialize execd_pathname.
	* target.c (debug_to_has_execd): Handle NULL execd_pathname.

	* solib.c (clear_solib): Don't call disable_breakpoints_in_shlibs,
	this breaks rerunning on sun4 native.

1999-04-06  Jim Blandy  <jimb@zwingli.cygnus.com>

	* config/sparc/nm-linux.h: Don't redefine PT_ATTACH to use the
 	deprecated PTRACE_SUNATTACH compatibility commands.  The
	definitions from <sys/ptrace.h> are fine.

1999-04-06  Martin Hunt  <hunt@cygnus.com>

	* annotate.h: Declare annotate_signal_hook.

	* annotate.c (annotate_signal): Add a call to 
	annotate_signal_hook().

1999-04-06  Jim Blandy  <jimb@zwingli.cygnus.com>

	* dwarf2read.c (dwarf_decode_lines): Don't call record_line when
	we hit a DW_LNE_end_sequence instruction.

	* README: Note that GDB requires an ANSI C compiler, and explain
	how to get GCC.

	* README: Update.

1999-04-05  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Add more notes about user-visible changes.

Mon Apr  5 14:56:59 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* target.c (target_signal_to_string): check for signal
	number in range; otherwise if the target board returns
	a bogus signal number we might core dump (per David Taylor).

1999-04-05  David Taylor  <taylor@ryobi.cygnus.com>

	* utils.c (fputs_maybe_filtered): test value of
	pagination_enabled before paginating.

1999-04-02  James Ingham  <jingham@cygnus.com>

	* blockframe.c (get_prev_frame): Remove the redundant
	get_prev_frame_info.  It is now exactly the same as
	get_prev_frame, so there is no reason to have both functions.
 	
	* rs6000-tdep.c (rs6000_init_extra_frame_info): 
	  frame.h: 
	  a29k-tdep.c (init_extra_frame_info): 
	  config/a29k/tm-a29k.h: 
	  i386-tdep.c:
        Change all references to get_prev_frame_info to get_prev_frame.
	
1999-04-02  Stan Shebs  <shebs@andros.cygnus.com>

	* bcache.c, bcache.h, breakpoint.c, defs.h, expprint.c,
 	expression.h, gdbarch.c, gdbtypes.c, gdbtypes.h, gnu-nat.c,
 	gnu-nat.h, hppa-tdep.c, maint.c, monitor.c, objfiles.h, parse.c,
 	remote-mips.c, remote-sds.c, remote.c, sol-thread.c, symmisc.c,
 	symtab.h, target.c, top.c, typeprint.c, config/nm-gnu.h: Evaporate
 	the unused MAINTENANCE_CMDS conditional.

1999-04-02  James Ingham  <jingham@cygnus.com>

	* config/arm/tm-arm.h: (EXTRACT_STRUCT_VALUE_ADDRESS): This needs
	to call extract_address, not just cast the first 4 bytes, since
	the result will be passed to value_at which expects host-byte
	order. 

	* arm-tdep.c (arm_scan_prologue): The prologue_start address was
	directly &'ed with 0x03fffffc, rather than using
	ADDR_BITS_REMOVE.  This would cause inferior function calls to
	report the stack incorrectly on return.


1999-04-02  Keith Seitz  <keiths@cygnus.com>

	* top.c (ui_loop_hook): Change declaration. Now returns an int.
	* win32-nat.c (child_wait): Timeout WaitForDebugEvent and call
	the ui_loop_hook if there was no debug event.
	* top.c (ui_loop_hook): Change to return an int and include
	on all non-Cygwin builds.
	* v850ice.c: Change prototype of ui_loop_hook.
	(v850ice_wait): Update call to ui_loop_hook.
	* ser-unix.c (hardwire_readchar): Enable ui_loop_hook callbacks
	for non-Cygwin builds. Check return status of ui_loop_hook and
	return a timeout if told to detach. Add more documentation.
	* ser-tcp.c (tcp_readchar): Break up timeouts into one second
	intervals and call ui_loop_hook so that other UIs can
	keep up to date. If ui_loop_hook returns non-zero, then
	return SERIAL_TIMEOUT to facilitate detaching from the
	target.
	* remote.c (remote_interrupted_already): Remove.
	(remote_interrupt_twice): Revive.
	(remote_interrupt): Call remote_stop to interrupt the target
	and install remote_interrupt_twice to take more severe
	actions if this fails.
	(remote_stop): Only attempt to stop the target. This separates
	the command line from other UIs.
	* remote-sim.c (gdb_os_poll_quit): Add a call to ui_loop_hook,
	if it is defined.

1999-04-01  Jim Blandy  <jimb@zwingli.cygnus.com>

	Fix for cross-debugging on an AIX host from Johanna Svenningsson:
	* ax-gdb.h (enum axs_lvalue_kind): Remove trailing comma from enum.
	* ax.h (enum agent_op): Same.
	* tracepoint.h (enum actionline_type): Same.
	* config/xm-aix4.h: Add declaration for termdef.

1999-03-31  Stan Shebs  <shebs@andros.cygnus.com>

	* jv-lang.h (dynamics_objfile): Remove decl, conflicts with static
	decl in jv-lang.c.

	* infrun.c (follow_inferior_fork): Add ifdefs around
 	SOLIB_REMOVE_INFERIOR_HOOK.

Wed Mar 31 11:39:49 1999  David Taylor  <taylor@ryobi.cygnus.com>

	* valops.c (search_struct_field): revert HP merge change
	to this function -- it causes messages to be printed about
	member class ambiguity when the compiler is happy.
	(search_struct_field_aux): delete -- added as part of HP merge
	change; with aforementioned change it is no longer called.

1999-03-30  Stan Shebs  <shebs@andros.cygnus.com>

	Make more HPUX-specific code generic.
	* infrun.c: Include top.h.
	(MAY_SWITCH_FROM_INFERIOR_PID, MAY_FOLLOW_EXEC,
 	USE_THREAD_STEP_NEEDED): New native macros.
	(may_switch_from_inferior_pid, may_follow_exec,
	use_thread_step_needed): New globals.
	(follow_inferior_fork): Remove HPUXHPPA ifdef.
	(follow_exec): Ditto, also save run target and re-push instead of
 	always pushing child_ops, add ifdefs around SOLIB_RESTART and
 	SOLIB_CREATE_INFERIOR_HOOK.
	(wait_for_inferior): Use new globals instead of ifdefing HPUXHPPA,
	always use printf_filtered to report new threads.
	(normal_stop): Ditto.
	* target.h, target.c (find_run_target): New function.
	* config/pa/nm-hppah.h: Define new macros.

1999-03-29  Stan Shebs  <shebs@andros.cygnus.com>

	* top.h: Include setjmp.h here.
	* main.c, top.c: Don't include it here.

1999-03-29  Keith Seitz  <keiths@cygnus.com>

	* symtab.c (decode_line_1): Take out change which breaks symbols
 	which include class names and methods, e.g., "Foo::bar".

1999-03-26  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.tgt (i[3456]86-*-sysv4.2MP, i[3456]86-*-sysv4.2uw2*):
	Recognize both, as i[3456]86-*-sysv4.2*.
	(i[3456]86-*-sysv5*): Recognize.

	* infrun.c (wait_for_inferior): Remove most #if 0 segments.

Fri Mar 26 17:27:27 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (pc_in_call_dummy_on_stack): Fix.  Had copied code
 	from at_entry_point.

Thu Mar 25 19:30:02 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* gdbarch.c: Include all headers.
	(struct gdbarch), gdbarch.h (CALL_DUMMY_LOCATION,
 	CALL_DUMMY_ADDRESS, CALL_DUMMY_START_OFFSET,
 	CALL_DUMMY_BREAKPOINT_OFFSET, CALL_DUMMY_LENGTH,
 	PC_IN_CALL_DUMMY): Add ``call_dummy_location'',
 	``call_dummy_length'', ``pc_in_call_dummy'',
 	``call_dummy_start_offset'', ``call_dummy_breakpoint_offset'' to
 	multi-arch framework.

	* inferior.h, blockframe.c (pc_in_call_dummy_before_text_end,
 	pc_in_call_dummy_after_text_end, pc_in_call_dummy_on_stack,
 	pc_in_call_dummy_at_entry_point): Convert PC_IN_CALL_DUMMY macro's
 	into functions.

	* mips-tdep.c (mips_gdbarch_init): Initialize above

Tue Mar 23 17:22:57 1999  Philippe De Muyter  <phdm@macqel.be>

	* remote.c, parse.c: Include ctype.h.

1999-03-24  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.host (mips-dec-mach3*): Use mipsm3 not mach3.

	Attempt to sort out SCO-related configs.
	* configure.host (i[3456]86-*-sysv4.2*): Use instead of
	i[3456]86-*-sysv4.2MP and i[3456]86-*-sysv4.2uw2*.
	(i[3456]86-*-sysv5*): Recognize.
	* configure.tgt (i[3456]86-*-sco3.2v5*, i[3456]86-*-sco3.2v4*):
 	Recognize.

Wed Mar 24 16:19:01 1999  Christopher Faylor <cgf@cygnus.com>

	* MAINTAINERS: Add DJ Delorie (dj@cygnus.com) as the djgpp
	maintainer.

Wed Mar 24 21:19:57 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* target.h (enum target_signal): Do not hardwire values of MACH
 	signals.

1999-03-14  Ken Raeburn  <raeburn@raeburn.org>

	* target.h (enum target_signal): Add TARGET_SIGNAL_INFO.
	* target.c (signals): Add SIGINFO description.
	(target_signal_from_host, target_signal_to_host): Translate
	SIGINFO to/from TARGET_SIGNAL_INFO.

Wed Mar 24 01:01:27 1999  Andrew Cagney  <cagney@sludge.cygnus.com>

	* rs6000-tdep.c (rs6000_software_single_step): Change SIGNAL to
 	unsigned int.

	From Rodney Brown <rodneybrown@pmsc.com>
	* target.h (enum thread_control_capabilities), breakpoint.h (enum
 	bptype), breakpoint.c (enum insertion_state_t): Strict ISO-C
 	doesn't allow trailing comma in enum definition.
	
Mon Mar 22 15:56:04 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* blockframe.c (inside_entry_file, inside_entry_func): Convert #if
 	CALL_DUMMY_LOCATION to if.
	* valops.c (call_function_by_hand): Ditto.
	* infcmd.c (run_stack_dummy): Ditto.
	* inferior.h (CALL_DUMMY_ADDRESS, CALL_DUMMY_START_OFFSET,
 	CALL_DUMMY_BREAKPOINT_OFFSET): Provide default.

1999-03-23  Jason Molenda  (jsm@bugshack.cygnus.com)

	* hppa-tdep.c (pa_register_look_aside): Remove CPU_HPPA_RISC_20
	check, test for presence of struct save_state_t and the ss_wide 
	member directly.
	* configure.in:  Remove CPU_HPPA_RISC_20 test.  Add tests for
	HAVE_STRUCT_SAVE_STATE_T and HAVE_STRUCT_MEMBER_SS_WIDE.
	* acconfig.h: Add HAVE_STRUCT_SAVE_STATE_T HAVE_STRUCT_MEMBER_SS_WIDE.
	* configure, config.in: Regenerated.

Mon Mar 22 13:25:13 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infttrace.c (proc_wait): rename to ptrace_wait.

1999-03-18  Jim Blandy  <jimb@zwingli.cygnus.com>

	* dwarf2read.c: Correctly recognize location expressions that
	designate LOC_REF_ARG arguments.  Doc fixes.
	(isderef): New global.  (Yuck.)
	(dwarf2_complex_location_expr): New complaint.
	(read_func_scope): Reject frame_base attributes that use the
	`deref' opcode as too complex.
	(new_symbol): If both regoff and isderef are set, and the base
	register is the frame pointer, then it's a LOC_REF_ARG argument.
	(decode_locdesc): Recognize the `deref' opcode in location
	expressions.  Complain if it's not the last op in the expression.

	* config/fr30/tm-fr30.h (COERCE_FLOAT_TO_DOUBLE): #define this to
	be true, or else value_arg_coere won't respect the (accurate)
	information we have about whether a function is prototyped.

1999-03-17  Jim Blandy  <jimb@zwingli.cygnus.com>

	* config/fr30/tm-fr30.h (STACK_ALIGN): Define this here, so
 	calling functions by hand with odd-sized arguments doesn't munge
 	the stack.

1999-03-17  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in (HAVE_MULTIPLE_PROC_FDS): Don't define for Solaris
	hosts--gdb doesn't support this yet.
	* configure: Regenerated.

1999-03-16  Keith Seitz  <keiths@cygnus.com>

        * remote.c (remote_binary_checked): New file global.
        (check_binary_download): New function to check if
        stub supports binary downloading that works with
        stubs that are not eight bit clean.
        (remote_write_bytes): Check for binary download capability
        and use it if available.
        Remove references to global remote_binary_length. What a hack.
        (putpkt_binary): New function.
	(putpkt): Call putpkt_binary.
	Use xor to escape trouble characters.
	* m32r-stub.c (bin2mem): Follow escape char convention change.

Tue Mar 16 01:11:33 1999  Andrew Cagney  <cagney@rhino.cygnus.com>

	* target.h (struct target_ops), target.c (debug_to_query),
 	remote.c (pack_hex_byte, remote_query): Promote char parameters to
 	int.  Stops compile problems with pedantic ISO-C compilers.
	
Tue Mar 16 15:29:04 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* go32-xdep.c: Remove, no longer used by anything.
	* Makefile.in: Remove references.

	* jv-lang.c, jv-lang.h (java_primitive_type): Declare argument
	as int instead of char.

Mon Mar 15 11:42:43 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* d10v-tdep.c (push_stack_item, pop_stack_item): New function.
 	(d10v_push_arguments): Use.
	
	From Martin M. Hunt  <hunt@cygnus.com>:
	* d10v-tdep.c (d10v_push_arguments): When arguments
	must be pushed onto the stack, they go on in
	reverse order.

1999-03-16  Jim Blandy  <jimb@zwingli.cygnus.com>

	* symtab.c (make_symbol_overload_list): Don't try to stuff minimal
 	or partial symbols into the overload list; we don't know their
 	types.  (Thanks to Rajiv Mirani.)

1999-03-15  Jason Molenda  (jsm@bugshack.cygnus.com)

	* acinclude.m4 (--with-itclconfig, --with-itkconfig, --with-tixconfig):
	Fix whitespace so --help messages line up.
	* configure.in (--with-cpu): Fix capitalization for --help messages.
	* configure, aclocal.m4: Regenerated.

Mon Mar 15 11:39:03 1999  Ian Carmichael  <iancarm@cygnus.com>

        Support building gdb w/o simulator:
        * configure.in: Support --disable-sim. Check for sim directory.
        * Makefile.in (IGNORE_SIM, IGNORE_SIM_OBS): New.
        * acconfig.h (WITH_SIM): Define.
        * configure, config.in: Regenerate.

Mon Mar 15 08:01:33 1999  Elena Zannoni  <ezannoni@cygnus.com>

        Patch from Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* top.c (read_command_lines): Reset control_level to 0.
	(define_command): Don't do it here.

Sun Mar 14 16:12:15 1999  Andrew Cagney  <cagney@rhino.cygnus.com>

	* hppah-nat.c (store_inferior_registers): Delete extern
 	registers[] declaration.

Sun Mar 14 19:17:30 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* infrun.c (write_inferior_status_register): New function. Provide
 	update access to an inf_status register buffer.  Only used by HP.
	* inferior.h (write_inferior_status_register): Add prototype.

	* hppa-tdep.c (push_dummy_frame): Use
 	write_inferior_status_register when hacking around a sleeping
 	inferior.  Accidently fix byte-order problem.

Sun Mar 14 16:40:10 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/pa/tm-hppa.h (PUSH_DUMMY_FRAME): Fix parameter. Address
 	not needed.

Fri Mar 12 13:11:48 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (remote_write_bytes): fix 'X' packet protocol so that it
	can't overwrite the end of its buffer with escaped characters.

1999-03-12  Jim Blandy  <jimb@zwingli.cygnus.com>

        Alpha patches from Richard Henderson:

	* alpha-tdep.c (alpha_skip_prologue): Recognize subq.

	* config/alpha/tm-alpha.h (REGISTER_NAMES): No f31, but fpcr.
	(FPCR_REGNUM): New.
	(REGISTER_CONVERTIBLE): Don't convert fpcr.
	(REGISTER_VIRTUAL_TYPE): Don't make fpcr a double.

	* stabsread.c (define_symbol): Only consider live range extension
	if we have an open parenthesis.

1999-03-11  Jim Blandy  <jimb@zwingli.cygnus.com>

	* monitor.c (monitor_fetch_register): Print RDEBUG info correctly
 	when the register name is null.

Thu Mar 11 19:33:07 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* infrun.c (wait_for_inferior): Change #if DECR_PC_AFTER_BREAK
	uses to expressions, remove redundant extern decls.

Thu Mar 11 18:05:11 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infptrace.c (proc_wait): Rename to ptrace_wait.
	* inftarg.c (child_wait): call ptrace_wait instead of proc_wait.
	* inferior.h: Declare ptrace_wait instead of proc_wait.

Thu Mar 11 11:46:25 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* breakpoint.c (create_solib_load_unload_event_breakpoint,
 	create_fork_vfork_event_catchpoint, tcatch_command,
 	create_exception_catchpoint, break_at_finish_at_depth_command_1,
 	catch_fork_command_1, ep_skip_leading_whitespace,
 	break_at_finish_command_1, catch_exec_command_1,
 	catch_exception_command_1, stop_command, stopin_command,
 	stopat_command, ep_parse_optional_filename,
 	ep_find_event_name_end, ep_parse_optional_if_clause,
 	catch_fork_command_1), stack.c (show_and_print_stack_frame_stub,
 	print_stack_frame_stub, print_only_stack_frame_stub,
 	backtrace_command_1, backtrace_full_command, func_command),
 	valprint.c (print_decimal), source.c (print_source_lines_base):
 	Add prototype.

	* stack.c (print_stack_frame_stub, show_and_print_stack_frame_stub,
 	print_only_stack_frame_stub): Make param void*.

Wed Mar 10 19:33:28 1999  Geoffrey Noer  <noer@cygnus.com>

	* win32-nat.c: If old Cygwin Win32 API headers aren't being used,
	 define some gdb-specific defines that shouldn't have been in the
	 global headers.

Wed Mar 10 21:20:25 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* findvar.c (registers, register_valid): Replace array with pointer.
	(build_findvar): New function.  Allocate space for REGISTERS and
 	REGISTER_VALID.
	(_initialize_findvar): Call build_findvar.
	(_initialize_findvar): Register REGISTERS and REGISTER_VALID as
 	arch dependant.
	
	* inferior.h (registers, register_valid): Replace array with
 	pointer.

	* inferior.h (struct inferior_status): Move definition from here.

  	* infrun.c (struct inferior_status): To here.
	(struct inferior_status): Change ``stop_registers'' and
 	``registers'' to pointers.
	(xmalloc_inferior_status, free_inferior_status): New functions.
	(restore_inferior_status): Call free_inferior_status.
	(save_inferior_status): Call xmalloc_inferior_status.
	(discard_inferior_status): New function, discard inf_status
 	buffer.  Call free_inferior_status.
	
	* inferior.h (stop_registers): Replace array with pointer.
	* infrun.c (stop_registers): Update.
	(build_infrun): Initialize stop_registers.
	(_initialize_infrun): Call build_infrun.
	(_initialize_infrun): Register ``stop_registers'' as arch dependant.

Wed Mar 10 14:50:42 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* alpha-tdep.c (alpha_linux_sigtramp_offset): Only compile when
 	LINUXALPHA target. Hack.

	* infrun.c (set_follow_fork_mode_command): Make static.  Add
 	prototype.
	* tracepoint.c (add_register): Ditto.
	* valprint.c (strcat_longest): Comment out.  Does not appear to be
 	used.
	* valops.c (find_method_list): Make static.  Add prototype.
	* thread.c (target_find_new_threads): Make static.  Add prototype.
	* stack.c (stack_publish_stopped_with_no_frame,
 	select_and_maybe_print_frame): Comment out.  Does not appear to be
 	used.
	(current_frame_command): Add prototype.
	* breakpoint.c (break_at_finish_command,
 	break_at_finish_at_depth_command, tbreak_at_finish_command): Make
 	static.  Add prototype.
	* findvar.c (read_relative_register_raw_bytes_for_frame): Ditto.

Wed Mar 10 23:38:54 1999  Andrew Cagney  <cagney@b1.cygnus.com>

 	* corefile.c (registers): Delete redundant variable declaration.
	* inferior.h (run_stack_dummy): Change array argument to pointer.
	* infcmd.c (run_stack_dummy): Update.
	* value.h (value_being_returned): Change RETBUF to a pointer.
	* values.c (value_being_returned): Update.

Wed Mar 10 11:08:16 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* source.c (list_command): GCC suggested explicit braces to avoid
 	ambiguous `else'.

	* jv-typeprint.c: Include "c-lang.h".
	* Makefile.in (jv-typeprint.o): Add dependency.
	* jv-valprint.c: Include "gdbcore.h", "annotate.h".
	* Makefile.in (jv-valprint.o): Add dependencies.
	* objfiles.c: Include "breakpoint.h".
	* Makefile.in (objfiles.o): Add dependency.
	* main.c: Include <unistd.h>.
	* parse.c: Include <ctype.h>.
	* remote.c: Include <ctype.h>.
	* ser-tcp.c: Include <unistd.h>.
	* ax-general.c: Include "value.h".
	* Makefile.in (ax-general.o): Add dependency.

	* alpha-tdep.c (alpha_push_arguments): Make ``i'' an int instead
 	of a register.
	* frame.h (show_and_print_stack_frame): Add function prototype.
	* language.h (language_enum): Add function prototype.
	* value.h (find_overload_match): Add function prototype.

	* defs.h, utils.c (subset_compare): Rename subsetCompare. Add
 	prototype.
	* stack.c (backtrace_command): Update.

Wed Mar 10 13:58:36 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.in (AC_CHECK_HEADERS): Check for <sys/select.h>
	* configure, config.in: Re-generate.
	* inflow.c: Conditionally include <sys/select.h>.

Wed Mar 10 13:44:38 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* frame.h (struct dummy_frame): Move from here.
	* blockframe.c (struct dummy_frame): To here.

	* blockframe.c (struct dummy_frame): Replace ``regs'' with pointer
 	``registers''.
	(generic_pop_dummy_frame): Free it.
	(generic_push_dummy_frame): Allocate dummy frame register buffer.

Wed Mar 10 11:08:16 1999  Andrew Cagney  <cagney@amy.cygnus.com>

	* thread.c (_initialize_thread): Delete redundant ``extern struct
 	cmd_list_element *cmdlist''.
	* printcmd.c (print_command_1): Ditto for ``objectprint'';

1999-03-09  Stan Shebs  <shebs@andros.cygnus.com>

	* MAINTAINERS: New file, list of maintainers and areas they
 	maintain.

1999-03-09  Rodney Brown  <RodneyBrown@pmsc.com>

	Get working on UnixWare 2.1.1.
	* acconfig.h: Update for defines for procfs.c.
	* configure.in: Identify defines for procfs.c.
	* configure.host: i386-*-sysv4.2uw2* => i386v42mp
	* configure.tgt:  i386-*-sysv4.2uw2* => i386v42mp
	* configure, config.in: Regenerate.
	* procfs.c: Rename HAVE_NO_PRRUN_T to HAVE_PRRUN_T (autoconf
 	standard), wrap UNIXWARE difference in THE_PR_LWP macro for
 	legibility.
	* config/i386/tm-i386v42mp.h: Remove HAVE_PSTATUS_T,
 	HAVE_NO_PRRUN_T; now set by configure.

Tue Mar  9 16:29:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* i386-tdep.c (gdb_print_insn_i386): Abort when disassembly_flavor
 	undefined..

	* fr30-tdep.c (_initialize_fr30_tdep): Add prototype.  Fix
	coding style.

	* target.c (debug_to_enable_exception_callback,
 	debug_to_get_current_exception_event): Return result of call to
 	debug_target().

1999-03-09  Jim Blandy  <jimb@zwingli.cygnus.com>

	Another HURD fix from Mark Kettenis:
	* gnu-nat.c: Include <string.h>.  Remove declaration of strerror.
	Include <bits/waitflags.h> instead of <waitflags.h> and define
	_SYS_WAIT_H to prevent the warning that we should not include it.
	(gnu_create_inferior): Change return type of attach_to_child to
	void.  Do not return INFERIOR_PID.
	(gnu_pid_to_exec_file): Change return type to char *.
	Return NULL.

	Fix for the HURD from Mark Kettenis:
	* configure.in: Add AC_PROG_AWK.  Needed by the	machine-dependent
	makefile fragments for the Hurd.
	* Makefile.in (AWK): Add.  Set by configure.
	* configure: Regenerated.

1999-03-08  Jason Molenda  (jsm@bugshack.cygnus.com)

	* infttrace.c (hppa_get_process_events): Removed. Function only
 	usable on HPUX 10 and above.  It is not called by any other part
 	of GDB.
	* hppah-nat.c (hppa_get_process_events): Ditto.
	(child_pid_to_exec_file): Only call ptrace with
 	PT_GET_PROCESS_PATHNAME if that symbol has been defined.
	* config/pa/nm-hppah.h: Don't set up prototypes et al for 
	hppa_get_process_events.

	* config/pa/hppahpux.mh (TERM_LIB): Do not initialize, let autoconf
	determine best library automatically.
	* config/pa/hpux1020.mh: Ditto.
	* config/pa/hpux1100.mh: Ditto.
	* configure.in (TERM_LIB): Also check for libHcurses.
	* configure: Regenerated.

Thu Mar  4 17:16:04 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* m32r-stub.c: add support for crc "Compare" command.

1999-03-04  Jim Blandy  <jimb@zwingli.cygnus.com>

	* fr30-tdep.c (fr30_store_return_value): Allocate zeroes
 	dynamically, to save BSS space, and to remove assumptions about
	the size of the largest value we'll return.

	* config/fr30/tm-fr30.h (fr30_store_return_value): Use PARAMS in
	prototype.

Thu Mar  4 08:37:35 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* sh3-rom.c (sh3_supply_register, sh3_supply_register),
 	mips-tdep.c (mips_push_arguments), m32r-rom.c
 	(m32r_upload_command), m32r-tdep.c (decode_prologue), monitor.c
 	(longlong_hexchars), tracepoint.c (validate_actionline,
 	read_actions), mdebugread.c
 	(parse_symbol), jv-typeprint.c
 	(java_type_print_base, java_type_print_base), mdebugread.c
 	(parse_symbol), top.c (source_command), utils.c
 	(floatformat_to_doublest): GCC suggest explicit braces to avoid
 	ambiguous `else'.
	
	* tracepoint.c (map_args_over_tracepoints, trace_actions_command),
 	m32r-rom.c (m32r_supply_register), win32-nat.c
 	(handle_output_debug_string, child_continue), i960-tdep.c
 	(pop_frame), m32r-rom.c (m32r_upload_command): GCC suggested
 	parentheses around assignment used as truth value.

	* remote-sds.c (sds_wait), monitor.c (monitor_fetch_register),
 	ser-e7kpc.c, (dosasync_write), arc-tdep.c (arc_get_frame_setup):
 	GCC suggested parentheses around operands.

	* c-typeprint.c (c_type_print_base): GCC suggested enclosing
 	"while" expression in paren.

Wed Mar  3 18:14:33 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	* sol-thread.c (save_inferior_pid): Cast the saved pid to void*.
	(restore_inferior_pid): Takes void* as required by make_cleanup.
  	Casts pid back to an int.

	* procfs.c (make_cleanup_close_proc_file,
 	close_proc_file_cleanup): Create a proc_file cleanup.
	(info_proc): Use.

	* defs.h (make_cleanup_freeargv): Helper function.  Establish
 	cleanup using freeargv.  Can not just typecast/pass freeargv as it
 	violates ISO-C.
	* utils.c (do_freeargv): Helper.
	(make_cleanup_freeargv): New function.

	* symmisc.c (maintenance_print_symbols,
 	maintenance_print_psymbols, maintenance_print_msymbols), symfile.c
 	(symbol_file_command), stack.c (backtrace_command), remote-sim.c
 	(gdbsim_create_inferior, gdbsim_open), remote-mips.c
 	(common_open), procfs.c (info_proc), infrun.c (handle_command,
 	xdb_handle_command), exec.c (exec_file_attach): Call
 	make_cleanup_freeargv.

1999-03-03  James Ingham  <jingham@cygnus.com>

	* i386-tdep.c (_initialize_i386_tdep): Set the inital value for
	disassembly flavor at startup, rather than hardcoding it.

1999-03-03  Jim Blandy  <jimb@zwingli.cygnus.com>

	Put return values in the right place.
	* fr30-tdep.c (fr30_store_return_value): New function.
	* config/fr30/tm-fr30.h (STORE_RETURN_VALUE): Call
	fr30_store_return_value.

Wed Mar  3 18:10:55 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	* gdbtypes.c (virtual_base_list_aux): Return void.  Add prototype.

	* breakpoint.c (map_catch_names): Comment out unused function.

1999-03-02  Jason Molenda  (jsm@bugshack.cygnus.com)

	* hppa-tdep.c (pa_register_look_aside): Only refer to save_state_t
	structure on PA 2.0 systems.

1999-03-02  Stan Shebs  <shebs@andros.cygnus.com>

	From Gary Thomas  <gthomas@cygnus.co.uk>:
	* arm-tdep.c (ARM_LE_BREAKPOINT, ARM_BE_BREAKPOINT,
	THUMB_LE_BREAKPOINT, THUMB_BE_BREAKPOINT): Use illegal instruction
	instead of SWI 24.
	* config/arm/tm-arm.h (CALL_DUMMY): Ditto.
	(IN_SIGTRAMP): Define.

1999-03-02  Nick Clifton  <nickc@cygnus.com>

	* findvar.c (store_address): Delete incorrect big endian
        code. 

Tue Mar  2 18:02:42 1999  Andrew Cagney  <cagney@chook>

	* configure.in (gdb_cv_os_cygwin): Compat.  Continue to reconize
 	__CYGWIN32__.

1999-03-01  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Move setting of gdb_cv_os_cygwin to before
	setting of TERM_LIB.  Check for __CYGWIN__ instead of __CYGWIN32__.
	* configure: Regenerated.

1999-03-01  DJ Delorie  <dj@cygnus.com>

	* configure.in: Change -cygwin32* to -cygwin*.
	* configure: Ditto.

1999-02-25  Stan Shebs  <shebs@andros.cygnus.com>

	* breakpoint.c (SOLIB_LOADED_LIBRARY_PATHNAME,
 	SOLIB_UNLOADED_LIBRARY_PATHNAME, SOLIB_CREATE_CATCH_LOAD_HOOK,
 	SOLIB_CREATE_CATCH_UNLOAD_HOOK): Supply default definitions.
	* infrun.c (SOLIB_IN_DYNAMIC_LINKER): Ditto.

1999-02-25  Keith Seitz  <keiths@cygnus.com>

	* corelow.c (core_close): Clear out solib state before
	closing the bfd associated with the core file.
	* solib.c (clear_solib): Mention that clear_solib requires
	an open BFD in order for disable_breakpoints_in_shlibs to
	determine whether breakpoints live in shared libraries.

1999-02-24  Jason Molenda  (jsm@bugshack.cygnus.com)

        * configure.in: Set CPU_HPPA_RISC_20 if the host CPU is a PA 2.0 
        processor.
        * acconfig.h: Add CPU_HPPA_RISC_20
        * config.in, configure: Regenerated.
        * hppa-tdep.c (pa_register_look_aside): Only refer to new 
        structure elements if we are on a PA2.0 system.
        * defs.h: Include limits.h.

Tue Feb 23 14:37:08 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infrun.c (wait_for_inferior): Check scheduler_locking state 
	before resuming after a thread-specific breakpoint.

1999-02-23  Jim Blandy  <jimb@zwingli.cygnus.com>

	* aclocal.m4, config.in, configure: Regenerated with latest
	autotools.

Mon Feb 22 12:32:19 1999  Per Bothner  <bothner@cygnus.com>

	* jv-valprint.c (java_val_print):  Restore line that somehow got lost.

	* jv-valprint.c (java_print_value_fields):  Check for NULL type.

1999-02-21  Jim Blandy  <jimb@zwingli.cygnus.com>

	* tm-h8500.h, i386lynx-nat.c: Removed.  These files are long
	dead; it seems that they only appeared due to some CVS weirdness.
	If they appear again, we may need to distribute garlic and holy
	water.

1999-02-19  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in (TERM_LIB): Move checking for TERM_LIB, substituting.
	* configure: Regenerated.

1999-02-19 Robert Hoehne (robert.hoehne@gmx.net)

        * configure.host (i[3456]86-*-msdosdjgpp*): New host.
        * configure.tgt (i[3456]86-*-msdosdjgpp*): New target.
        * go32-nat.c: New file, native DJGPP support.
        * config/i386/go32.mh: Rewrite for DJGPP (go32) host.
        * config/i386/go32.mt: New file, DJGPP (go32) target.
        * config/i386/nm-go32.h: New file.
        * config/i386/tm-go32.h: New file.
        * config/i386/xm-go32.h: Rewritten for current DJGPP.

1999-02-18  Jason Molenda  (jsm@bugshack.cygnus.com)

	* reply_mig_hack.awk, config/nm-gnu.h, config/alpha/nm-linux.h
	config/alpha/xm-alphalinux.h, config/alpha/xm-alphaosf.h
	config/i386/nm-i386sco5.h, config/i386/tm-fbsd.h, config/i386/tm-i386.h
	config/powerpc/nm-aix.h, config/powerpc/tm-macos.h
	config/powerpc/tm-ppc-aix.h, config/powerpc/xm-aix.h
	config/rs6000/tm-rs6000-aix4.h, testsuite/gdb.chill/tests1.ch
	testsuite/gdb.chill/tests2.ch, testsuite/gdb.chill/tests2.exp:
	Update FSF address in copyright notices.

1999-02-18  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Quote "$GCC" correctly.
	* configure: Regenerated.

1999-02-18  Jim Blandy  <jimb@zwingli.cygnus.com>

	* dbxread.c (elfstab_build_psymtabs): Don't assume that there's a
	section named ".text", which has all the code in it.  Instead, look
	at all the sections in the file with the `code' flag set.
	(find_text_range): New function, that does all the work.

Thu Feb 18 17:50:45 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* mips-tdep.c (FP_REGISTER_DOUBLE): Conditionally define.

Fri Jan 29 16:51:11 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	* mips-tdep.c (return_value_location): New function. Merge/rewrite
 	of return-value code in mips_extract_return_value,
 	mips_store_return_value.  Stop buffer overflow when 64 bit value
 	in 32 bit registers.  Extract 64bit float from 32 bit register
 	pair of correct order.
	(mips_extract_return_value, mips_store_return_value): Call
 	return_value_location.  For store, ensure that remainder of
 	register is zero.
	
Thu Jan 28 18:58:02 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	From John Metzler <jmetzler@cygnus.com>:
	* mips-tdep.c (struct gdbarch_tdep): Add mips_saved_regsize.
	(MIPS_SAVED_REGSIZE): Define.
	(mips_find_saved_regs, read_next_frame_reg, mips_pop_frame):
 	Read/write MIPS_SAVED_REGSIZE bytes of register on stack instead
 	of MIPS_REGSIZE.
	(mips_gdbarch_init): Initialize mips_saved_regsize.

	* mips-tdep.c (mips_frame_saved_pc, mips16_heuristic_proc_desc,
 	mips_push_arguments, mips_push_dummy_frame,
 	mips_use_struct_convention): Ditto.  For MIPS_SAVED_REGSIZE <
 	REGISTER_RAW_SIZE, handle little/big endian issues from only using
 	half the register.
	(STACK_ARGSIZE): Default to MIPS_SAVED_REGSIZE instead of
 	MIPS_REGSIZE.

	* mips-tdep.c (struct gdbarch_tdep, FP_REGISTER_DOUBLE,
 	mips_gdbarch_init): Apply similar changes.  Add
 	mips_fp_register_double to struct.

Wed Feb 17 10:10:27 1999  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* gdbtypes.h (get_discrete_bounds):  Remove duplicate decl.

	* jv-typeprint.c (java_type_print_base):  Change fputs => fputs_filtered.
	
Mon Jan 25 18:30:57 1999  Per Bothner  <bothner@cygnus.com>

	* jv-lang.h (JAVA_OBJECT_SIZE):  Change from hard-wired constant.
	(java_primitive_type_from_name, get_java_object_header_size):  Declare.
	* jv-lang.c (java_class_from_object):  Use get_java_object_type.
	* jv-lang.c:  Update Class field names:  dtable->vtable,
	msize->method_count, nfields->field_count, bfsize->size_in_bytes,
	nmethods->method_count.
	(type_from_class):  Demangle array type names.
	(java_link_class_type):  Array type names are now demangled.
	(get_java_object_type):  If not defined yet, try looking it up.
	(get_java_object_header_size):  New function.
	(java_primitive_type_from_name):  New function.
	(java_demangled_signature_length, java_demangled_signature_copy): New.
	(java_demangle_type_signature):  Re-implement using above functions.
	(evaluate_subexp_java):  For UNOP_IND, call evaluate_subexp_java
	to evaluate subexp (not evaluate_subexp_standard).
	For BINOP_SUBSCRIPT update for new array type naming scheme.
	* jv-valprint.c (java_value_print):  Use java_class_from_object.
	Update array printing to new array type naming convention.
	(java_val_print):  Doing check_typedef when printing a pointer is
	is a waste of effort.  Also, handle TYPE_CODE_INT, to make sure
	Java bytes as not printed as C chars.

Fri Jan  8 16:58:22 1999  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* blockframe.c (find_pc_sect_partial_function):  Search full symtabs as
	a last ditch effort (after the partial & minimal symtabs).
	* defs.h utils.c:  Fixup prototypes for vprintf_filtered,
	vfprintf_filtered, vfprintf_unfiltered and vprintf_unfiltered to return
 	ints to match their standard equivalents.
	* defs.h symtab.c top.c:  Create skip_prologue_hook to allow Java to
	control the prologue skipping process.
	* jv-typeprint.c (java_type_print_base):  Remove extern for
	jv_class_demangle, add new arg for objfile (NULL).
	* symtab.h:  Remove struct sourcevector and struct source.  Definately
	not needed.
	* values.c (value_virtual_fn_field):  Fixes code to handle new vtable
	debug info format.  Patch from marka.
	
Wed Dec 16 23:11:25 1998  Stu Grossman  <grossman@fencer.cygnus.com>

	* jv-lang.c (java_class_from_object java_class_is_primitive
	is_object_type):  Change dtable to vtable.
	* (java_primitive_type):  Change arg to type char.
	* (_initialize_java_language):  Make java_char_type be unsigned.
	* jv-lang.h:  Fixup prototypes.
	
Mon Dec  7 19:02:15 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* jv-valprint.c (java_value_print):  Fix printing of values where
	run time type != compile time type.

Fri Dec  4 15:23:38 1998  Stu Grossman  <grossman@fencer.cygnus.com>

	* Makefile.in:  Whack out m2-typeprint.c.
	* c-typeprint.c (c_type_print_varspec_suffix) typeprint.h:  Make this
	global.  It's needed by Java.
	* (c_type_print_base):  Whack prefix off of qualified method names
	(names with name spaces).
	* gdbtypes.h (struct cplus_struct_type):  Add bits for Java attributes.
  	Shrink voffset
	to 16 bits to compensate for added bits above (hopefully this is still
 	enough).
	* Add new accessor macros (TYPE_FND_FIELD_PUBLIC, ...) for all new
	attribute bits.
	* jv-typeprint.c (java_type_print_base):  Fix printing of method
	attributes.  Handle JVM style manglings.
	* (java_print_type):  Enable code type print varspec_suffix to allow
	array indices to print out.
	* jv-valprint.c (java_val_print):  Minor formatting.
	* m2-lang.c (m2_language_d):  Change m2_print_type to c_print_type.
	* stabsread.c (read_member_functions):  Save public and static attributes.
	
Wed Feb 17 15:32:57 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* breakpoint.c (watch_command_1): Reformat comment.

	* c-typeprint.c (c_type_print_base): Reformat comments.

1999-02-17  Jim Blandy  <jimb@zwingli.cygnus.com>

	* Makefile.in (VERSION): Bump version to 4.17.2.

Tue Feb 16 15:48:20 1999  Edith Epstein  <eepstein@sophia.cygnus.com>
 
        * config/pa/nm-hppah.h: Added prototype declarations for
        hppa_enable_page_protection_events and 
        hppa_disable_page_protection_events.
 
        * inftarg.c (child_wait): Fixed code that checks whether
        or not the target program has done a fork/vfork. 
        related_pid  does not have a value unless the target 
        program has forked/vforked.
 
        * infttrace.c (hppa_insert_hw_watchpoint): Make sure that
        function always returns a value.
        (hppa_remove_hw_watchpoint): Make sure that function always
        returns a value.

Tue Feb 16 06:31:58 1999  Keith Seitz  <keiths@cygnus.com>

	* config/powerpc/tm-ppc-eabi.h: Do not define PC_IN_CALL_DUMMY,
	let the generic call dummy infrastructure do it.

Sun Feb 14 18:21:08 1999  Mark Alexander  <marka@cygnus.com>

	* config/sh/tm-sh.h (BELIEVE_PCC_PROMOTION): Define, so that
	coffread.c will correctly handle char or short function parameters.

1999-02-11  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure, aclocal.m4: Regenerate with correct version of aclocal.

1999-02-10  Syd Polk  <spolk@cygnus.com>

	* acinclude.m4: Fix for new location of itclConfig.sh and itkConfig.sh.
	* aclocal.m4: Regnerate.
	* configure: Regenerate.

1999-02-10  Jason Molenda  (jsm@bugshack.cygnus.com)

        * demangle.c: Fix comments to mention "set demangle-style"
        instead of "set demangle".
        Run through indent to fix minor indenting problems.

Wed Feb 10 17:53:09 1999  Bob Manson  <manson@charmed.cygnus.com>

	* i386-tdep.c (gdb_print_insn_i386): Add missing returns.

Wed Feb 10 13:17:21 1999  Stan Shebs  <shebs@andros.cygnus.com>

	Declare Gould configuration obsolete:
	* configure.host, configure.tgt: Comment out Gould configs.
	* Makefile.in: Comment out Gould-related actions.
	* gould-xdep.c, gould-tdep.c, config/gould/*: Comment out.
	* NEWS: Mention obsolete status.

1999-02-09  DJ Delorie  <dj@cygnus.com>

	* sparcl-tdep.c: UDP download works in cygwin

1999-02-08  Jason Molenda  (jsm@bugshack.cygnus.com)

	* gnu-regex.c: Check ENABLE_NLS instead of HAVE_LIBINTL_H.
	* configure.in: Don't check for libintl.h.
	* configure, config.in: Regenerated.

Mon Feb  8 18:10:50 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Mention new X packet and PowerPC variant support.

1999-02-08  Nick Clifton  <nickc@cygnus.com>

	* configure.host: Add support for StrongARM host.
	* configure.tgt: Add support for StrongARM target.

Mon Feb  8 12:05:05 1999  David Taylor  <taylor@texas.cygnus.com>

	* dsrec.c (make_srec): Cast targ_addr to int in call to sprintf
 	otherwise on big endian machine with a bfd_vma of 64 bits,
 	*everything* gets loaded at location 0.

Mon Feb  7 10:05:43 1999  Frank Ch. Eigler  <fche@cygnus.com>

       * infrun.c (wait_for_inferior): Allow SIGTRAP to be "pass"ed
       to target program.

Fri Feb  5 16:46:14 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* NEWS: Add mentions of various new things.

Thu Feb  4 00:19:14 1999  Christopher Faylor <cgf@cygnus.com>

	* configure.in: Move termcap determination later in the
	file to catch setting of cygwin flag.
	* configure: Regenerate.

Wed Feb  3 14:16:38 1999  Christopher Faylor <cgf@cygnus.com>

	* config/i386/cygwin.mh: Move TERMCAP test code to configure.in.
	* configure.in: Treat libtermcap.a detection as a special case
	when hosting on cygwin.
	* configure: Regenerate.

1999-02-03  Keith Seitz  <keiths@cygnus.com>
 
        * remote.c (remote_binary_download, remote_binary_length): New
        static globals for dealing with binary transmissions.
        (remote_write_bytes): Add support for binary downloads
        by shadowing the "M" packet with a new "X" packet. This
        defaults to ON; if the stub does not understand this, it
        will fall back to using "M".
        (putpkt): Add support for binary downloading.
        * monitor.c (monitor_expect): The mon2000 monitor
        on the MSA2000 will also emit random DC1/DC3 chars.
        * m32r-stub.c: Change all char's to unsigned char's
        to support binary downloading.
        (handle_exception): Add support for binary downloading
        via a new "X" packet.
        (getpacket): Do NOT strip eighth bit of incoming chars.
        Watch out for escaped characters in the incoming stream.
        (putpacket): Do NOT strip eighth bit of incoming chars.
        (bin2mem): New function to write binary data directly to
        memory.
        * m32r-rom.c: Add new "mon2000" target.

Tue Feb  2 18:40:29 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* hp-psymtab-read.c (hpread_build_psymtabs): Coerce first arg
	passed to make_cleanup to the correct type.
	(hpread_quick_traverse): Change fifth arg to call to 
	hpread_end_psymtab to be 0. 
	Compare CURR_MODULE_END to 0 rather than NULL.
	Get rid of ifdef'ed out code.
	(scan_procs): Get rid of ifdef'ed out code.

	* somread.c (som_symfile_read): Coerce first argument passed to
	make_cleanup to the correct type.

Tue Feb  2 17:36:29 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* hp-psymtab-read.c (do_pxdb): New function. Check whether the
	file needs to be processed by pxdb (an HP debug info massaging
	tool), if so call it.
	(hpread_build_psymtabs): Initialize scan_start to 0 and
	simplify flow of control.

	* somread.c (som_symfile_read): Add call to do_pxdb (), 
	in hp-psymtab-read.c.

	* symfile.c (symbol_file_add): Remove ifdef'ed out HPUX specific
	code.
	(symfile_bfd_open): Remove HPUXHPPA ifdef'ed code. Code is now
	in hp-psymtab-read.c.

1999-02-02  Martin Hunt  <hunt@cygnus.com>

	* printcmd.c (print_scalar_formatted): Use strcat to concat all
	the output together before calling fprintf_filtered().

1999-02-01  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Require autoconf 2.13.
	(AM_EXEEXT): Replace with new AC_EXEEXT.
	* acinclude.m4: Move itcl header macros from aclocal.m4 to here.
	* aclocal.m4: Regenerated.
	* configure: Regenerated.

1999-02-01  Jim Blandy  <jimb@zwingli.cygnus.com>

	Allow PPC users to select which PPC/RS6000 variant they're
 	debugging at run-time.  At the moment, the only thing this affects
 	is the set of registers visible.
	* config/rs6000/tm-rs6000.h (REGISTER_NAME): Define this as a call
	to the function rs6000_register_name.
	(rs6000_register_name): Include extern decl.
	(NUM_REGS): Bump to 183.  What's the right way to do this?
	(FIRST_UISA_SP_REGNUM, LAST_UISA_SP_REGNUM): Renamed from
	FIRST_SP_REGNUM, LAST_SP_REGNUM.
	(REGISTER_BYTES): Recompute this.
	* rs6000-tdep.c: Renamed all uses of FIRST_SP_REGNUM and
	LAST_SP_REGNUM to FIRST_UISA_SP_REGNUM and LAST_UISA_SP_REGNUM, with
	some concomitant formatting changes.
	#include "gdbcmd.h", so we can define commands here.
	(struct variant): New structure.
	(COMMON_UISA_REG_NAMES, PPC_UISA_SPR_NAMES, PPC_SEGMENT_REG_NAMES,
	PPC_32_OEA_SPR_NAMES, num_registers): New macros. 
	(register_names_rs6000, register_names_uisa, register_names_403,
 	register_names_403GC, register_names_505, register_names_860,
 	register_names_601, register_names_602, register_names_603,
 	register_names_604, register_names_750, variants): New variables.
	(rs6000_register_name, install_variant, find_variant_by_name,
	install_variant_by_name, list_variants, show_current_variant,
	set_processor, show_processor): New functions.
	(_initialize_rs6000_tdep): Define new commands `set processor' and
	`show processor', and call install_variant_by_name to set the
	default variant.
	* rs6000-nat.c: Renamed all uses of FIRST_SP_REGNUM and
	LAST_SP_REGNUM to FIRST_UISA_SP_REGNUM and LAST_UISA_SP_REGNUM, with
	some concomitant formatting changes.
	* configure.in: Accept the `--with-cpu' flag, to specify a default
	processor variant.
	* acconfig.h: Provide a blurb for TARGET_CPU_DEFAULT, which is set
	by configure's `--with-cpu' flag.
	* config.in, configure: Regenerated.

Sun Jan 31 15:24:24 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* buildsym.h, buildsym.c: Convert to ANSI-only.

	* buildsym.h, buildsym.c: Reformat to standard.

	* buildsym.c (merge_symbol_lists): Remove unused variable.
	(_initialize_buildsym): Remove, does nothing.

1999-01-31 J.T. Conklin  <jtc@redbacknetworks.com>

	* i386-stub.c, m32r-stub.c, m68k-stub.c, sh-stub.c, sparc-stub.c,
 	sparcl-stub, sparclet-stub.c: Change declaration of putDebugChar
 	to include explicit void return type as per documentation.  Fix up
 	occasions where stubs erroneously checked return type.

Sun Jan 31 13:18:33 1999  Stan Shebs  <shebs@andros.cygnus.com>

	From J.T. Conklin <jtc@redbacknetworks.com>:
	* remote.c (remote_query): Fix tipo.

Fri Jan 29 15:25:09 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.tgt (v850): Add wildcard to match.

Fri Jan 29 16:44:01 1999  Edith Epstein  <eepstein@sophia.cygnus.com>

	* inferior.h: Ran indent.

	* fork-child.c: Ran indent.

	* infrun.c : Ran indent.

Fri Jan 29 12:57:34 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* infrun.c (_initialize_infrun): Do not stop or print anything
	when a SIGWINCH is received.

	* Makefile.in (m2-exp.tab.c): Use YACC not BISON.
	(f-exp.tab.c): Ditto.
	(jv-exp.tab.c): Ditto.
	(c-exp.tab.c): Ditto.
	(YACC): Define as @YACC@.

1999-01-29  Martin Hunt  <hunt@cygnus.com>

	Changes from Keith Seitz  <keiths@cygnus.com>
        * valops.c (value_assign): Add calls to register_changed_hook and
        memory_changed_hook to inform UIs that the user has changed
        the target's registers/memory.
        * findvar.c (write_register_gen): Remove call to pc_changed_hook.
        * defs.h: Remove declaration for pc_changed_hook and
        add declarations for register_changed_hook and
        memory_changed_hook.
        * top.c: Ditto.

1999-01-29  Mark Alexander  <marka@cygnus.com>

	* procfs.c (wait_fd): Handle deleted threads correctly.

1999-01-28  Jason Molenda  (jsm@bugshack.cygnus.com)

	* utils.c (init_page_info): Force window size if running under emacs.

1999-01-27  James Ingham  <jingham@cygnus.com>

	* typeprint.c (whatis_exp): Remove static declaration.

Wed Jan 27 16:50:25 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* hp-psymtab-read.c: Reformat using indent.

Wed Jan 27 13:20:25 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* hp-psymtab-read.c: Reformat comments, update copyright.

Wed Jan 27 15:09:22 1999  Andrew Cagney  <cagney@chook.cygnus.com>

	* mips-tdep.c (mips_gdbarch_init): Trace e_flags from BFD
 	elf_info.

Tue Jan 26 16:02:47 1999  Mark Alexander  <marka@cygnus.com>

	* v850-tdep.c (v850_generic_reg_names, v850e_reg_names,
	v850_register_names, v850_processor_type_table): Declare tables
	and structures for handling differences in register names for
	v850 and v850e.
	(struct reg_list): Define new structure for creating tables
	of register bit masks in v850e instrutions.
	(handle_prepare, handle_pushm): New helpers for v850_scan_prologue.
	(v850_scan_prologue): Recognize v850e instructions: callt, prepare,
	and pushm.
	(v850_target_architecture_hook): New function to set register
	names based on current machine.
	(_initialize_v850_tdep): Set up target_architecture_hook.
	* config/v850/tm-v850.h (v850_register_names): Declare.
	(REGISTER_NAME): Define to refer to v850_register_names.
	(SR0_REGNUM, CTBP_REGNUM): Define.
	(PS_REGNUM): Redefine in terms of SR0_REGNUM.

Tue Jan 26 18:27:26 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* Makefile.in (c-exp.tab.c): Use BISON instead of YACC, to pick
	the correct value from configure output.
	(jv-exp.tab.c): Ditto.
	(f-exp.tab.c): Ditto.
	(m2-exp.tab.c): Ditto.

1999-01-26  Jason Molenda  (jsm@bugshack.cygnus.com)

	* breakpoint.h (ep_is_exception_catchpoint): Add prototype.
	* frame.h (select_and_print_frame): Add prototype.
	* stack.c (func_command): Call select_and_print_frame with correct
	number of arguments.  Reformat whitespace.

Tue Jan 26 16:53:54 1999  Fernando Nasser  <fnasser@cygnus.com>

	* remote.c (remote_query): fix maximum packet size to account for
	  remote_debug use.
	  (putpkt): add comment to alert about extra byte need.

Mon Jan 25 19:55:30 1999  Mark Alexander  <marka@cygnus.com>

	* sh-tdep.c (sh_target_architecture_hook): Return immediately
	when a matching machine is found.

Fri Jan 22 09:10:35 1999  Mark Alexander  <marka@cygnus.com>

	* remote-mips.c (mips_initialize): Fix parameters to clear_breakpoint.
	(common_breakpoint): Restore support for instruction breakpoints
	on non-LSI targets.

Thu Jan 21 17:16:19 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* stack.c: Close open comment.
	* symtab.c (find_pc_sect_line): Ditto.

Thu Jan 21 17:51:51 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* procfs.c (init_procfs_ops): New function, fills in procfs_ops,
	init only nonzero fields, leave to_require_attach and
	to_require_detach empty, not needed for /proc systems yet.
	(_initialize_procfs): Call init_procfs_ops.

	From J.T. Conklin <jtc@redbacknetworks.com>:
	* top.c (init_main): Fix tipo in description of the remotetimeout
	variable.
	* breakpoint.c (bpstat_stop_status): Handle systems where
	DECR_PC_AFTER_BREAK != DECR_PC_AFTER_HW_BREAK.

Thu Jan 21 17:25:46 1999  Mark Alexander  <marka@cygnus.com>

	* mon960-rom.c (_initialize_mon960): Call init_mon960_cmds
	to fill in mon960_cmds structure properly.

Wed Jan 20 17:53:22 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-sds.c (sds_ops): Define only once.
	(init_sds_ops, sds_command, _initialize_remote_sds): Declare.
	(init_sds_ops): Init only non-zero fields.

Wed Jan 20 15:45:15 1999  Mark Alexander  <marka@cygnus.com>

	* h8300-tdep.c (original_register_names, h8300h_register_names,
	h8300_register_names): Define new variables.
	(set_register_names): New function to set register names based on
	current CPU type.
	(h8300_command, h8300h_command, h8300s_command): Call
	set_register_names.
	* config/h8300/tm-h8300.h (h8300_register_names): Declare.
	(REGISTER_NAME): Define to refer to h8300_register_names.

1999-01-19  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* sol-thread.c abug-rom.c cpu32bug-rom.c dbug-rom.c m32r-rom.c 
	mac-nat.c mon960-rom.c op50-rom.c ppc-bdm.c remote-adapt.c 
	remote-array.c remote-bug.c remote-e7000.c remote-eb.c remote-es.c 
	remote-est.c remote-hms.c remote-mm.c remote-nindy.c remote-nrom.c 
	remote-os9k.c remote-rdp.c remote-sds.c remote-sim.c remote-st.c 
	remote-udi.c rom68k-rom.c sh3-rom.c sparcl-tdep.c sparclet-rom.c 
	v850ice.c win32-nat.c: cosmetic changes to conform to coding
	standards. 

1999-01-19  Jim Blandy  <jimb@zwingli.cygnus.com>

	Use aclocal to generate GDB's aclocal.m4 script.  
	* acinclude.m4: New file, containing the hand-written local macro
 	definitions that used to be in aclocal.m4.  Don't sinclude
 	../bfd/aclocal.m4 any more; running aclocal in this directory will
 	get us the definitions we need.  HOWEVER: Do sinclude
 	../bfd/acinclude.m4, because we need the definition of
 	BFD_NEED_DECLARATION.
	* aclocal.m4: Regenerated by aclocal.
	* configure: Regenerated by autoconf.

Tue Jan 19 10:27:23 1999  David Taylor  <taylor@texas.cygnus.com>

	* breakpoint.c (disable_breakpoints_in_shlibs): new parameter,
	silent, controls whether to print message about removal of shared
	library breakpoints.
	* breakpoint.h (disable_breakpoints_in_shlibs): decl updated.
	* irix5-nat.c (clear_solib): call disable_breakpoints_in_shlibs.
	* osfsolib.c (clear_solib): ditto.
	* solib.c (clear_solib): ditto.
	* somsolib.c (som_solib_restart): update call to
	disable_breakpoints_in_shlibs.

	* target.h (child_post_attach): only declare if CHILD_POST_ATTACH
	is define.

Tue Jan 19 18:07:11 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* corelow.c (solib_add_stub): Ditto.
	(core_file_to_sym_file): Cast make_cleanup parameter.

	* solib.c (symbol_add_stub, solib_map_sections): Change argument
 	to PTR insted of a char*.  Matches catch_errors interface.

Mon Jan 18 14:01:24 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-array.c (array_open): Don't use fprintf_filtered to send
 	data to the log file.

	* remote-array.c (handle_load_dll): Change argument type to PTR so
 	that it is compatible with catch_errors.
	* ocd.c (ocd_start_remote): Ditto.
	* remote-sds.c (sds_start_remote): Ditto.

	* win32-nat.c (win32_child_thread_alive): Namespace proof
 	child_thread_alive.
	(init_child_ops): Update.

Mon Jan 18 12:03:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* remote-rdi.c (arm_rdi_open): Set gdb_hostif.hostosarg and
 	gdb_hostif.dbgarg to NULL instead of stdout.
	(voiddummy, myprint, mywritec): Use gdb_stdout instead of stdout.

Mon Jan 18 16:40:50 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* ser-ocd.c (ocd_open): Handle Unix case gracefully.

	* target.c (dummy_target): Don't initialize statically.
	(init_dummy_target): New function, fills in dummy_target.
	(initialize_targets): Use it.
	* hpux-thread.c (hpux_thread_ops): Don't initialize statically.
	(init_hpux_thread_ops): New function, fills in hpux_thread_ops.
	(_initialize_hpux_thread): Use it.
	* m3-nat.c (m3_ops): Don't initialize statically.
	(init_m3_ops): New function, fills in m3_ops.
	(_initialize_m3): Use it.

1999-01-18  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* sol-thread.c: delete compile time initialization of target_ops
	  (_initialize_sol_thread): initialize target_ops at run time.
	* hpux-thread.c: added target_ops entry.
	* m3-nat.c: ditto.

Mon Jan 18 15:19:13 1999  David Taylor  <taylor@texas.cygnus.com>

	* procfs.c (procfs_ops): delete compile time initialization.
	(_initialize_procfs): initialize procfs_ops at run time.

Mon Jan 18 12:51:44 1999  Christopher Faylor <cgf@cygnus.com>

	* configure.in: Ensure that -luser32 is always linked in
	for cygwin build.
	* configure: Regenerated.

Mon Jan 18 08:38:05 1999  Mark Alexander  <marka@cygnus.com>

	* values.c (value_virtual_fn_field): Clear the pointed-to
	offset when casting to the base class.

Mon Jan 18 10:30:51 1999  David Taylor  <taylor@texas.cygnus.com>

	* remote-udi.c (init_udi_ops): change non-existant udi_run_ops to
	udi_ops; delete NULL initializers.

Mon Jan 18 12:03:47 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* serial.c (serial_close): gdb_fclose tages gdb_file** arg, not
 	gdb_file*.

	* f-valprint.c, target.c, gdbarch.c: Pass gdb_stderr not stderr.

Mon Jan 18 10:46:12 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* stack.c (print_frame_info_base): Don't cast call to
 	catch_errors.
	(print_args_stub): Change char* arg to PTR.
	* symmisc.c (print_symbol): Ditto.
	* top.c (quit_cover): Ditto.
	* remote.c (remote_open_1, remote_start_remote): Ditto.
	* infrun.c (normal_stop, hook_stop_stub, restore_selected_frame):
 	Ditto.

	* stack.c (backtrace_command): Cast first arg of make_cleanup to
 	make_cleanup_func.
	* remote.c (remote_kill): Cast putpkt arg to catch_errors_ftype.

Mon Jan 18 08:47:02 1999  Andrew Cagney  <cagney@b1.cygnus.com>
	
	* defs.h (catch_errors_ftype): Define.
	(catch_errors): Replace char* arg with PTR arg.
	* top.c (catch_errors): Update

	* breakpoint.c (bpstat_stop_status, bpstat_stop_status,
 	delete_breakpoint, breakpoint_re_set): Delete all casts in call to
 	catch_errors.
 	(breakpoint_cond_eval, watchpoint_check,
 	cover_target_enable_exception_callback, breakpoint_re_set_one):
 	Arg is PTR not char*.
	
	* breakpoint.c (cover_target_enable_exception_callback): Change
 	type to int. Check for cast values of 0 and -1.  Return a result!
	(insert_breakpoints): Move declaration of SAL and ARGS to where
 	they are used.

1999-01-16  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* remote.c (remote_query): new function - creates proper interface
	to the remote protocol "q" command.	

Fri Jan 15 17:11:48 EST 1999  Zdenek Radouch   (radouch@cygnus.com)

	* config/fr30/tm-fr30.h:  Changed ABI to match GCC change
	  (always use pointer for structs passed by value).

1999-01-15  Fernando Nasser  <fnasser@totem.to.cygnus.com>

	* target.h: added entry for target queries (to_query)
	  target.c: ditto.

Thu Jan 14 18:29:17 1999  David Taylor  <taylor@texas.cygnus.com>

	* mips-tdep.c (mips_gdbarch_init): fix stream arg in
	fprintf_unfiltered calls.
	* remote-mm.c (mm_wait): fix stream arg to gdb_flush.
	* remote-udi.c (udi_wait): fix stream arg to fwrite.
	* symmisc.c (maintenance_check_symtabs): fix stream argument to
	print_address_numeric.
	
Wed Jan 13 19:33:16 1999  David Taylor  <taylor@texas.cygnus.com>

	* breakpoint.c (insert_breakpoints): insert cast to eliminate
	warning.

Wed Jan 13 14:59:02 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* infrun.c (set/show scheduler-locking) New command.  Set a
	  mode bit that will control how GDB attempts to control thread
	  scheduling for step, continue, etc.  (resume): make use of
	  the schedule-locking mode.
	* target.h (struct target_ops): new field to_has_thread_control.
	* sol-thread.c: initialize target_ops to_has_thread_control.
	* procfs.c: ditto.
	* target.c: ditto.
	* m3-nat.c: ditto.
	* remote.c: ditto.
	* hpux-thread.c: ditto.
	* thread.c: cull duplicate prototypes.  Move prototypes to top.
	* serial.c: indentation cleanup.
	* breakpoint.c: add casts to eliminate compiler warnings.
	
Tue Jan 12 17:00:00 1999  Edith Epstein  <eepstein@sophia.cygnus.com>

	* inftarg.c (child_create_inferior): fixed HPUXHPPA specific
	  call to fork_inferior. The shell param is now NULL.

1999-01-12  Jason Molenda  (jsm@bugshack.cygnus.com)

	* monitor.c (init_base_monitor_ops): Whitespace cleanup.
	(_initialize_remote_monitors): Same.

1999-01-12  Jason Molenda  (jsm@bugshack.cygnus.com)

	* monitor.c (init_monitor_ops): Initialize the monitor_ops
	structure if it hasn't already been done.

Tue Jan 12 14:50:10 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* inftarg.c (child_ops): Don't initialize statically.
	(init_child_ops): New function, fills in child_ops.
	(_initialize_inftarg): Use it.
	(child_post_attach): Declare extern.
	(child_wait): Fix ambiguous parens.
	(child_attach_to_process): Remove unused local wstatus.
	(child_insert_fork_catchpoint, child_remove_fork_catchpoint,
	child_insert_vfork_catchpoint, child_remove_vfork_catchpoint,
	child_has_forked, child_insert_exec_catchpoint,
	child_remove_exec_catchpoint): Return a value.

Mon Jan 11 16:43:44 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (remote_wait): Add inferior_pid to thread list only
	if it is not already there.

1999-01-11  Jason Molenda  (jsm@bugshack.cygnus.com)

	* scm-tags.h: Update FSF's address on copyright notice.
	* ser-e7kpc.c: Same.
	* gnu-nat.h: Same.

Mon Jan 11 13:45:57 1999  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* dwarf2read.c (dump_die):  Change stderr to gdb_stderr.
	* expprint.c (print_subexp):  fprintf => fprintf_unfiltered.
	* jv-typeprint.c (java_type_print_base):  fputs => fputs_filtered.
	* stack.c (struct function_bounds):  Remove superfluous `typedef'.
	* symfile.c (list_overlays_command):  stdout => gdb_stdout.
	* symmisc.c (maintenance_check_symtabs):  stdout => gdb_stdout.
	* utils.c (print_spaces):  Make more efficient.
	
Mon Jan 11 13:55:51 1999  David Taylor  <taylor@texas.cygnus.com>

	* utils (print_spaces): fix arg to strcat; fix formatting.

Fri Jan  8 11:57:24 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* exec.c (exec_ops): Don't initialize statically.
	(init_exec_ops): New function, fills in exec_ops.
	(_initialize_exec): Use it.

Thu Jan  7 17:50:15 EST 1999  Zdenek Radouch   (radouch@cygnus.com)

	Beta FR30 port.
	* fr30-tdep.c
	* config/fr30/tm-fr30.h
	
Wed Jan  6 12:28:35 1999  David Taylor  <taylor@texas.cygnus.com>

	* configure.in: Add an --enable-tui argument.  Construct
 	tui/Makefile from tui/Makefile.in.  Use AM_PROG_CC_STDC.  If we
 	have the GUI, then we need this to process libgui.h.
	(ENABLE_CFLAGS): define and export BUILD_TUI.
	(AC_CHECK_HEADERS): Add check for term.h.
	
	* configure.host (hppa-*-hpux10.20, hppa-*-hpux11.0*): New configs.

	* config.in, configure : regenerated.

	* Makefile.in: Allow the TUI code to be conditionally enabled.
	(TUI_LIBRARY): New variable, value are set by the configuration
 	script.  Set to the empty string when the TUI isn't enabled.
	(gdb$(GDBEXT)): Use those, instead of referring to all-tui and
 	tui/libtui.a directly.
	(BUILD_TUI): 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.
	(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.
	(gdb$(EXEEXT)): Add all-tui to the list of dependencies, and add
 	tui/libtui.a to the link list.
	(all-tui): New rule, which does a recursive make in the tui
 	subdir.
	(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
        (SFILES): add hp-psymtab-read.c, hp-symtab-read.c add rules for
 	the new files.  Remove hpread.c, hpread.o
	(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): Always recurse to make sure the library is up to
 	date.

Wed Jan  6 12:05:12 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* remote.c: Pacify --enable-build-warnings, reformat code
	to conform to standards, fix spelling errors.
	(ishex, stubhex, record_currthread, etc): Declare.
	(ishex, stubhex): Declare char arg as int.
	(pack_string): Comment out, never used but possibly useful.
	(threadref_to_int, remote_get_threadinfo, etc): Make static.

Wed Jan  6 11:43:32 1999  David Taylor  <taylor@texas.cygnus.com>

	The following changes were made by Elena Zannoni
 	<ezannoni@cygnus.com> and Edith Epstein <eepstein@cygnus.com> as
 	part of a project to merge in changes made by HP.

	* 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.  Handle true and false tokens.
	
Tue Jan  5 11:13:36 1999  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* remote.c (record_curthread): Must not modify inferior_pid when
 	called from wait_for_inferior.  Instead, if a new thread-id is
 	detected, call add_thread.
	(MAGIC_NULL_PID): new macro, use instead of the magic number
 	"42000".
	(remote_find_new_threads): if inferior_pid is unknown, get and use
 	the current thread id.
	(remote_start_remote): on connecting, attempt to get the current
 	thread id for inferior_pid.
	(remote_resume): If pid == -1, then resume any-thread (not the
 	current thread specifically).  Also some cosmetic fixups.
	
	* thread.c (info_threads_command): don't initialize current_pid 
	until after call to FIND_NEW_THREADS (which may change inferior_pid).
	Also some cosmetic fixups.
	* infrun.c: cosmetic fixups and casts to avoid warnings.
	* infcmd.c: cosmetic fixups, mainly long lines.
	
Tue Jan  5 11:55:57 1999  David Taylor  <taylor@texas.cygnus.com>

	* target.c (noprocess): terminate sentence with a period.
	* breakpoint.c (catch_command_1): ditto.

	* c-valprint.c (c_value_print): remove hack^2 from HP; it causes
	testsuite losses with no real gain.

	* inferior.h (START_INFERIOR_TRAPS_EXPECTED): restore, but only
	if tm-*.h hasn't overridden default value.

1999-01-04  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Fix whitespace indentation for --help.
	* configure: Regenerated.

1999-01-04  Manuel Bouyer <bouyer@antioche.lip6.fr>

	* main.c: Add --write command line option, document -w.
	* gdb.1: Document --write.

1999-01-04  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Require autoconf 2.12.1 or higher.
	* doc/configure.in: Ditto.
	* nlm/configure.in: Ditto.
	* rdi-share/configure.in: Ditto.
	* testsuite/configure.in: Ditto.
	* doc/Makefile.in: Don't hardcode $(SHELL).
	* nlm/Makefile.in: Ditto.
	* rdi-share/Makefile.in: Ditto.
	* testsuite/Makefile.in: Ditto.

Mon Jan  4 12:53:03 1999  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-vx.c (init_vx_ops, init_vx_run_ops): Remove unneeded
	inits of new fields, including ref to bogus field.
	(vx_ops, vx_run_ops): Make static.

Mon Jan  4 15:05:29 1999  David Taylor  <taylor@texas.cygnus.com>

	* inferior.h (START_INFERIOR_TRAPS_EXPECTED): delete,
	already defined in tm.h.

	* inftarg.c: change <sys/unistd.h> to <unistd.h> and
	conditionalize its inclusion.
	* infttrace.c: ditto.

For older changes see ChangeLog-98

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
