Tue Dec 31 15:19:32 1996  Geoffrey Noer  <noer@cygnus.com>

        * config/mn10300/tm-mn10300.h: more small register fixes

Tue Dec 31 06:51:43 1996  Mark Alexander  <marka@cygnus.com>

	* config/i386/xm-windows.h: Undo previous change to SIGTRAP
	and SIGQUIT values; it messed up non-MIPS targets.
	* config/mips/tm-mips.h: Undefine BREAKPOINT, replace
	with separate LITTLE_BREAKPOINT and BIG_BREAKPOINT definitions;
	this fixes problem with setting breakpoints in little-endian
	programs in the simulator.

Mon Dec 30 00:14:06 1996  Doug Evans  <dje@seba.cygnus.com>

	* remote-sim.c (gdbsim_open_p): New static local.
	(gdbsim_open): Call unpush_target if sim open.  Set gdbsim_open_p.
	(gdbsim_close): Only call sim_close if sim open.  Reset gdbsim_open_p.

Sun Dec 29 09:15:03 1996  Mark Alexander  <marka@cygnus.com>

	* config/i386/xm-windows.h: Make SIGTRAP and SIGQUIT consistent
	with sim/mips/support.h.

Fri Dec 27 14:53:40 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* v850-tdep.c (struct pifsr): Add cur_frameoffset field.
	(v850_scan_prologue): Add debug code #ifdef'ed DEBUG.  Support new
	compiler prologues using register save functions and short store
	instructions.  Add support for functions with large stack frames.

	* config/v850/tm-vm850.h ({R0,R1,R12,EP}_REGNUMS): New register
	number defintiions for r0, r1, r12, ep.
	(SAVE{1,2,3}_{START,END}_REGNUM): Register number definitions for
	the 3 sets of saved registers.

Thu Dec 26 19:56:55 1996  Mark Alexander  <marka@cygnus.com>

	* valprint.c (print_longest): Don't lose upper bits
	of 64-bit values on Windows.
	* config/i386/xm-windows.h: Leave CC_HAS_LONG_LONG defined,
	undefine PRINTF_HAS_LONG_LONG, so that 64-bit values will
	be printed without loss of upper bits.

Thu Dec 26 15:15:21 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* config/sparc/tm-sparclet.h: make registers ASR15, ASR19 invisible
          (they're not useful, you can't change, write or even read them)
	
Thu Dec 26 15:20:48 1996  Fred Fish  <fnf@cygnus.com>

	* config/pa/hppahpux.mh (TERMCAP): Always link to libc before
	libcurses, to avoid picking up broken select() from libcurses
	on some versions of HPUX.

Thu Dec 26 15:14:41 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>
	
	* sparclet-rom.c: Remove includes of Unix system files.
	  Add function "sparclet_supply_register" so that parse_register_dump
	  will not seg-fault by calling a null function pointer.
	  Remove XMODEM support (unfinished work?).
	  Remove flag "MO_HANDLE_NL", so monitor's output can be read by humans.
	  Add fill command.
	  Remove colon from getreg.resp_delim so PSR register will work.
	  Remove pointer to sparclet_load (downloading SREC's doesn't work).
	  Null out local register names for %g0, all %cc and all %asr regs,
	  since the monitor can't report them.  Will return zero instead.
	* sparclet-stub.c: New -- remote protocol support for sparclet CPU.
	* config/sparc/tm-sparclet.h: Re-arrange REGISTER_NAMES:
	  Add back %g0 and %psr, add %cc coprocessor regs, add %asr regs.
	  Adjust NUM_REGS and REGISTER_BYTES accordingly

Tue Dec 24 10:27:37 1996  Jeffrey A Law  (law@cygnus.com)

	* remote-e7000.c (want_h8300h, want_nopc_h8300h): Renamed
	from want and want_nopc.
	(want_h8300s, want_nopc_h8300s): New variables for H8/S register
	lists.
	(e7000_fetch_registers): Use H8/300H or H8/S register list string
	as needed.
	(e7000_wait): Likewise.

Mon Dec 23 02:25:58 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mips-tdep.c (mips_find_saved_regs):  If a frame has been
	interrupted by a signal, figure out whether the registers that
	the proc_desc claims are saved have been saved yet.
	(mips_push_dummy_frame):  Write dummy frame register after all
	registers have been saved in the dummy frame. Update comments
	to reflect the fact that we are now using an AT_ENTRY_POINT
	call dummy.

Sun Dec 22 15:52:25 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* d10v-tdep.c (d10v_skip_prologue): PR11287.  Fix problem where
	some breakpoints weren't being set.

Sat Dec 21 12:57:59 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/mips/tm-mips.h (PC_IN_CALL_DUMMY):  Removed, the default
	definition in inferior.h is sufficient.
	* mips-tdep.c (mips_pc_in_call_dummy):  Ditto.
	(mips_push_arguments):  Make sure that the stack is aligned to a
	multiple of 8 after the arguments are pushed.
	Structures are always passed by value in the old ABI.
	Adjust argument register value on big endian targets when passing
	a value whose length is less than the register size.
	Write stack arguments with a single write_memory call.
	(mips_pop_frame):  Use frame_saved_regs instead of proc_desc to
	decide which registers have to be restored.

	* irix5-nat.c (fill_gregset):  Sign extend registers before
	filling in the gregset structure.

Fri Dec 20 11:06:03 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* mswin/genmakes:  Don't define _DEBUG.  This breaks wingdb.

Thu Dec 19 19:42:44 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* v850-tdep.c (v850_scan_prologue): Deal with -mep shorting
	register saves by using the ep register.

Thu Dec 19 15:57:16 1996  Doug Evans  <dje@canuck.cygnus.com>

	* m32r-tdep.c (m32r_frame_find_saved_regs): Fix thinko in arg def.

Thu Dec 19 09:38:56 1996  Mark Alexander  <marka@cygnus.com>

	* values.c (unpack_double): Make it compile with MSVC++ 2.x.
	* remote-mips.c (S_IROTH): Define if not defined by stat.h, e.g.
	when using MSVC++.
	(common_open): Fix help string.

Wed Dec 18 23:01:32 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Use NewFolderRecursive for installation.

Sat Dec 14 20:50:01 1996  Mark Alexander  <marka@cygnus.com>

	* mips-tdep.c (mips_push_arguments): Handle floating point args.
	* config/mips/tm-mips.h (FIX_CALL_DUMMY): Define to set up $25
	correctly for PIC on Irix 5.

Sat Dec 14 09:52:30 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* i386-tdep.c (i386_frame_find_saved_regs):  Handle zero return
	from get_pc_function_start gracefully.

Sat Dec 14 00:43:57 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* c-exp.y (qualified_name):  Replace explicit check for valid
	destructor name with call to destructor_name_p.

	* c-lang.h, c-typeprint.c (cp_type_print_method_args):  Removed,
	no longer needed.

	* c-typeprint.c (c_type_print_varspec_prefix, c_type_print_base):
	Replace remaining fprintf_unfiltered calls with their filtered variant.
	(c_type_print_base):  Do not print return type for destructors from
	template classes.
	Replace cp_type_print_method_args with cplus_demangle call to get
	consistent type output for stubbed and unstubbed methods.

	* cp-valprint.c (cp_print_class_method):  Replace
	cp_type_print_method_args with cplus_demangle call to get consistent
	type output for stubbed and unstubbed methods.

	* gdbtypes.c, gdbtypes.h (get_destructor_fn_field):  New function
	to find the destructor field indices for a type.

	* gdbtypes.h (struct type):  Clarify comments for vptr_basetype
	and arg_types fields.
	(struct fn_field):  Remove args field, no longer used.

	* symtab.c (decode_line_1), valops.c (value_struct_elt,
	check_field_in):  Use get_destructor_fn_field to find the destructor
	field indices instead of assuming that the compiler passes the member
	function fields in a specific order.

	* symtab.c (find_methods):  Pass NULL instead of SYMBOL_BLOCK_VALUE
	to lookup_symbol.
	(list_symbol):  Replace cp_type_print_method_args with cplus_demangle
	call in zapped out code and explain why this code is zapped out.

Thu Dec 12 13:29:14 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/powerpc/ppc{,le}-sim.mt (SIM): Add the simulator common
	library ../sim/common/libcommon.a.

Wed Dec 11 11:15:08 1996  Doug Evans  <dje@canuck.cygnus.com>

	* monitor.c (monitor_load): Add support for load address argument.
	* dsrec.c: #include <time.h>.
	(load_srec): New argument load_offset.  Print download stats.
	* srec.h (load_srec): Update prototype.
	* sh3-rom.c (sh3_load): Update call to load_srec.

Mon Dec  9 17:34:05 1996  Geoffrey Noer  <noer@cygnus.com>

	* config/mn10300/tm-mn10300.h: more small register fixes
	* mn10300-tdep.c: filled in from another target

Mon Dec  9 17:12:19 1996  Doug Evans  <dje@canuck.cygnus.com>

	* monitor.c (monitor_insert_breakpoint): Handle bi-endian machines.

Mon Dec  9 15:58:51 1996  Mark Alexander  <marka@cygnus.com>

	* config/mips/tm-mips.h: Get rid of call-dummy code.
	Minor changes to make pre-ANSI compilers happy.
	* mips-tdep.c: Minor changes to make pre-ANSI compilers happy.
	(mips_push_arguments): Rewrite to partially support EABI.
	(mips_pc_in_call_dummy): New function.
	* infcmd.c: Include symfile.h to get prototype of entry_point_address,
	which fixes 64-bit sign extension bug on MIPS.

Mon Dec  9 00:14:49 1996  Geoffrey Noer  <noer@cygnus.com>

	* config/mn10300/tm-mn10300.h: fix register names
	* mn10300-tdep.c: new skeleton tdep for mn10300

Sun Dec  8 18:02:57 1996  Doug Evans  <dje@canuck.cygnus.com>

	* remote-sim.h: Update some comments.
	* remote-sim.c (gdb_os_error): New function.
	(init_callbacks): Fix initializing of gdb_callback.  Add gdb_os_error.
	(gdb_os_printf_filtered): Use gdb_stdout, not stdout.

Sun Dec  8 00:36:31 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* irix5-nat.c (supply_gregset, fill_gregset):  Handle gregsets
	from O32 and N32 ABI.
	(xfer_link_map_member):  Work around problem with alignments
	in struct obj when compiling GDB under N32 ABI.

Thu Dec  5 23:30:44 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* d10v-tdep.c: Add support for examination and interpretation
	of instruction trace buffer.
	(trace, untrace, info trace, tdisassemble): New commands.

Thu Dec  5 14:06:23 1996  Doug Evans  <dje@canuck.cygnus.com>

	* config/sparc/tm-sparclet.h (TARGET_BYTE_ORDER): Undef.
	(TARGET_BYTE_ORDER_SELECTABLE): Define.
	(BREAKPOINT): Undef.
	({BIG,LITTLE}_BREAKPOINT): Define.
	(TM_PRINT_INSN_MACH): Redefine for sparclet.

Wed Dec  4 16:34:05 1996  Geoffrey Noer  <noer@cygnus.com>

	* config/mn10300/mn10300.mt, config/mn10300/tm-mn10300.h: New.

Tue Dec  3 13:02:08 1996  Fred Fish  <fnf@ninemoons.com>

	* infptrace.c (store_inferior_registers): Move some common code out
	to store_register, like fetch_inferior_registers & fetch_register.
	(store_register): New function, from store_inferior_registers.
	(fetch_inferior_registers, fetch_register): Minor code tweaks to
	make {fetch,store}_inferior_registers and {fetch,store}_register
	routines as similar in structure as possible.
	(fetch_inferior_registers, store_inferior_registers): Eliminate
	local variable numregs and just use ARCH_NUM_REGS directly.
	
Tue Dec  3 11:38:14 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* blockframe.c: add macro USE_GENERIC_DUMMY_FRAMES to enable/disable
	  code for generic call_dummy frames.
	* config/h8300/tm-h8300.h: turn on USE_GENERIC_DUMMY_FRAMES
	* config/m32r/tm-m32r.h: Ditto.
	* config/sh/tm-sh.h: Ditto.
	* config/v850/tm-v850.h: Ditto.

Sun Dec  1 00:41:47 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* vax-tdep.c (vax_print_insn, print_insn_arg):  Use info functions
	for printing. From Valeriy Ushakov <uwe@ptc.spbu.ru>.

Sun Dec  1 00:40:46 1996  Geoffrey Noer  <noer@cygnus.com>

        * configure.tgt: Add new mn10300 entry.

Sun Dec  1 00:18:59 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	Add support for Irix 6.2 native O32 and N32 ABI.

	* config.in, configure.in, configure:  Check for <objlist.h>.
	* configure.tgt:  Handle mips*-sgi-irix6* like irix5 for now.

	* cp-valprint.c (cp_print_value_fields):  Use SYMBOL_VALUE_ADDRESS
	instead of SYMBOL_BLOCK_VALUE to get the address of a static member.

	* dwarf2read.c:  Turn warnings and recoverable errors into complaints,
	add new complaints where appropriate.
	gcc -Wall cleanup.
	(struct line_head):  Change line_base from char to int to avoid
	problems with compilers whose plain char is represented by an
	unsigned char.
	(struct partial_die_info):  Add is_declaration field.
	(dwarf2_tmp_obstack):  New obstack for allocating temporary storage
	used during symbol reading.
	(cu_header_offset):  New variable for resolving relative reference
	dies.
	(optimized_out, basereg, islocal, frame_base_reg, frame_base_offset):
	New interface variables for decode_locdesc.
	(struct dwarf2_pinfo):  New structure for communication between
	psymtab and symtab reading, passed via pst->read_symtab_private.
	(dwarf2_has_info, dwarf2_build_psymtabs):  Accept objects files
	without line number sections.
	(dwarf2_build_psymtabs_hard):  Initialize temporary obstack
	for symbol reading.
	Allocate and initialize pst->read_symtab_private.
	Relocate pst->textlow and pst->texthigh with baseaddr.
	(scan_partial_symbols):  Do not add DW_AT_declaration symbols
	to the partial symbol table.
	Add file scope enumerator symbols to the partial symbol table.
	Fix typo in highpc computation.
	If we didn't find a lowpc, set it to highpc to avoid complaints
	from `maint check.
	(add_partial_symbol):  Relocate symbol values with baseaddr.
	Add static DW_TAG_subprogram and DW_TAG_variable symbols to the
	minimal symbol table.
        Obtain symbol values for DW_TAG_variable symbols from the location
	descriptor, skip symbols with missing location desciptors.
	Skip symbols for aggregate types without children.
	Handle enumerator symbols.
	(dwarf2_psymtab_to_symtab):  Issue symbol reading message if verbose.
	(psymtab_to_symtab_1):  Set local variables from
	pst->read_symtab_private, set cu_header_offset and baseaddr.
	Initialize temporary obstack for symbol reading, initialize
	buildsym and add a cleanup to really_free_pendings.
	Relocate highpc with baseaddr when calling end_symtab.
	If the compilation is from a C file generated by language
	preprocessors, do not set the symtab language if it was already
	deduced by start_subfile.
	Removed verbose sorting symbol table message.
	(process_die):  Handle DW_TAG_ptr_to_member_type and
	DW_TAG_reference_type.
	Use read_subroutine_type to get the function type for
	DW_TAG_subprogram before calling read_func_scope.
	(read_file_scope):  Initialize file name to <unknown>, start_subfile
	expects a non-NULL name.
	If we didn't find a lowpc, set it to highpc to avoid complaints
	from finish_symbol.
	Relocate lowpc and highpc with baseaddr.
	Get rid of Irix6.2 native cc compile machine prefix in comp_dir.
	Zero out ftypes for each new compilation unit (may be different
	language or different objfile).
	Accept compilation units without line number information, pass
	comp_dir to decode_lines.
	(read_func_scope):  Initialize function name to <unknown> to avoid
	core dumps when DW_AT_name is missing.
	Relocate lowpc and highpc with baseaddr.
	Handle DW_AT_frame_base, keep result for DW_OP_fbreg operations.
	Pass function type to new_symbol.
	(read_lexical_block_scope):  Relocate lowpc and highpc with baseaddr.
	(read_structure_scope):  Set TYPE_TAG_NAME, not TYPE_NAME.
	Handle DW_TAG_class_type.
	Copy fields to type_obstack, release temporary storage for fields.
	Don't add symbol if die is a stub die and has no children.
	Handle C++ static member fields.
	(read_enumeration):  Set TYPE_TAG_NAME, not TYPE_NAME.
	Copy fields to type_obstack, release temporary storage for fields.
	Let new_symbol handle the symbol creation for enumerators
	instead of handcrafting a symbol.
	Determine signedness of enum type from enumerators.
	(dwarf_read_array_type):  Handle variable length arrays.
	Use lookup_pointer_type instead of handcrafting a type.
	Create array type only if a DW_TAG_subrange_type was found.
	(read_tag_pointer_type, read_tag_reference_type):
	Use lookup_pointer_type and lookup_reference_type instead
	of handcrafting a type.
	(read_tag_ptr_to_member_type):  New function to handle 
	DW_TAG_ptr_to_member_type.
	(read_subroutine_type):  Handle parameter dies.
	Use lookup_function_type instead of handcrafting a type.
	(read_typedef):  Allocate a TYPE_CODE_TYPEDEF type for the typedef.
	(read_base_type):  If the type has a name, use init_type to create
	a new type instead of second guessing a fundamental type.
	(read_comp_unit):  Reset die reference table before building
	a new one.
	(dwarf2_read_section):  Read section contents into psymbol_obstack.
	(dwarf2_read_abbrevs):  Handle unterminated abbreviations
	for a compile unit gracefully.
	(read_partial_die):  Zero partial die before reading its info.
	Handle DW_AT_declaration.
	Fix typo in handling of DW_FORM_block4.
	(read_full_die):  Fix typo in handling of DW_FORM_block4.
	(read_1_signed_byte, read_2_signed_bytes, read_4_signed_bytes):
	New routines to get signed values from a buffer.
	(read_n_bytes, read_string):  Allocate storage from the temporary
	obstack. If the host char size permits it, return pointer
	to buffer instead of allocating storage.
	(set_cu_language):  Handle DW_LANG_Mips_Assembler.
	(dwarf_attr):  Return NULL if reference die for DW_AT_specification
	or DW_AT_abstract_origin die is not found.
	(record_minimal_symbol):  Removed, replaced with a direct call to
	prim_record_minimal_symbol, it now handles saving the string itself.
	(convert_locdesc):  Removed, partial symtab reading now uses
	decode_locdesc.
	(dwarf_attr):  Use dwarf2_get_ref_die_offset to get the absolute
	offset for the die reference.
	(dwarf_decode_lines):  Complain if the line section info is missing.
	Use read_1_signed_byte to extract lh.line_base to avoid
        problems with compilers whose plain char is represented by an
        unsigned char.
	Add cleanups for allocated temporary storage.
	Start a subfile for the first file in the state machine.
	Fix off by one problem with dirs.dirs access.
	Use comp_dir when directory index is 0.
	Support multiple sequences (from Jason Merrill <jason@cygnus.com>).
	(dwarf2_start_subfile):  Try to keep line numbers from identical
	absolute and relative file names in a common subfile.
	(new_symbol):  Allocate symbol and symbol name on the symbol_obstack.
	Set SYMBOL_LINE from DW_AT_decl_line if present.
	Set SYMBOL_TYPE from passed type if not NULL.
	Change DW_TAG_variable symbol types with missing type entries
	to a sensible type.
	Handle optimized_out, offreg and islocal storage classes.
	Add external symbols with type information whose address isn't
	known as LOC_UNRESOLVED symbols.
	Synthesize typedefs for C++ classes, structs, unions and enumerations.
	Handle DW_TAG_enumerator symbols, complain for unrecognized
	symbol tags.
	(die_type):  A missing DW_AT_type represents a void type.
	Use dwarf2_get_ref_die_offset to get the absolute offset for
	the die reference.
	(die_containing_type):  New function to build type from
	DW_AT_containing_type attribut.
	(read_type_die):  Handle DW_TAG_ptr_to_member_type.
	Treat DW_TAG_subprogram like DW_TAG_subroutine_type.
	(dwarf_base_type):  Fix typo with creation of FT_UNSIGNED_SHORT
	fundamental type.
	(create_name):  Removed, symbol name allocation is now done
	in new_symbol.
	(dump_die):  Use print_address_numeric to print a CORE_ADDR.
	(dwarf2_empty_die_ref_table):  New function to clear the die
	reference table.
	(dwarf2_get_ref_die_offset):  New function to get the absolute
	die offset from a die reference attribute.
	(decode_locdesc):  Complete rewrite using a stack, code mostly
	borrowed from dwarfread.c:locval.
	(dwarf_alloc_type):  Removed, replaced by direct calls to alloc_type.
	(dwarf_alloc_block):  Allocate block on temporary obstack.

	* elfread.c (elf_symtab_read):  When handling Irix dynamic symbols,
	skip section name symbols and relocate all others.
	(elf_symfile_read):  Build dwarf2 psymtab even if offset is non-zero.

	* irix5-nat.c (fetch_core_registers):  Handle core_reg_sect
	from N32 executables. Call registers_fetched after extracting
	the registers.
	(obj_list_variant, struct link_map, LM_OFFSET, LM_ADDR):  New
	definitions to enable support of O32 and N32 format objlists.
	(struct so_list):  New members offset, so_name and lmstart to
	eliminate dependencies from the objlist format used.
	(solib_map_sections, symbol_add_stub, solib_add,
	info_sharedlibrary_command, solib_address, clear_solib):  Use
	so_name and LM_OFFSET.
	(first_link_map_member):  Rewrite to enable support of O32 and N32
	format objlists.
	(next_link_map_member, xfer_link_map_member):  New functions to
	support O32 and N32 format objlists.
	(find_solib):  Use first_link_map_member, next_link_map_member and
	xfer_link_map_member.
	(solib_create_inferior_hook):  Use TARGET_SIGNAL_* instead of
	host signal numbers.

	* mdebugread.c (parse_partial_symbols, handle_psymbol_enumerators):
	Pass CORE_ADDR variant to add_psymbol_to_list.

	* mips-tdep.c (heuristic_proc_desc):  Stop examining the prologue
	if we encounter a positive stack adjustment. Handle `move $30,$sp'.
	Handle `sd reg,offset($sp)' for 32 bit ABIs.

	* symmisc.c (dump_msymbols, print_partial_symbols):  Use
	print_address_numeric to print a SYMBOL_VALUE_ADDRESS.
	(dump_symtab):  Print compilation directory if it is not NULL.

	* valops.c (search_struct_field, value_struct_elt_for_reference):
	Use SYMBOL_VALUE_ADDRESS instead of SYMBOL_BLOCK_VALUE to get the
	address of a static member.

Thu Nov 28 00:46:24 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* vax-tdep.c (vax_print_insn):  Made static, modified to take
	disassemble_info as parameter.
	(_initialize_vax_tdep):  New function to initialize tm_print_insn
	to vax_print_insn.

Wed Nov 27 11:29:06 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* blockframe.c: Remove old-style CALL_DUMMY code.
	* h8300-tdep.c, config/h8300/tm-h8300.h: Ditto.
	* m32r-tdep.c, config/m32r/tm-m32r.h: Ditto.
	* sh-tdep.c, config/sh/tm-sh.h: Ditto.
	* v850-tdep.c, config/v850/tm-v850.h: Ditto.
	
Wed Nov 27 10:32:14 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* breakpoint.c: DELETE command will not delete CALL_DUMMY breakpoint.
	* blockframe.c: Add target-independant support for managing
			CALL_DUMMY frames on the host side.
	* frame.h:      Declarations for generic CALL_DUMMY frame support.
	* h8300-tdep.c: Add target function calls using generic frame support.
	* config/h8300/tm-h8300.h: config for generic target function calls.
	* m32r-tdep.c:  Add target function calls using generic frame support.
	* config/m32r/tm-m32r.h:   config for generic target function calls.
	* sh-tdep.c:    Add target function calls using generic frame support.
	* config/sh/tm-sh.h:       config for generic target function calls.
	* v850-tdep.c:  Add target function calls using generic frame support.
	* config/v850/tm-v850.h:   config for generic target function calls.
	* valops.c:     ADD PUSH_RETURN_ADDRESS so that it doesn't have to be
			done by PUSH_ARGUMENTS when there's no CALL_DUMMY.

Tue Nov 26 19:21:35 1996  Mark Alexander  <marka@cygnus.com>

	* config/mips/tm-mips.h (ADDR_BITS_REMOVE, TARGET_READ_SP): Define.
	(mips_addr_bits_remove): Declare.
	* mips-tdep.c (mips_push_dummy_frame): Fix heuristic-fence-post
	errors when hitting breakpoints during inferior function calls
	in 64-bit programs.
	(fix_sign_extension): Make public, rename to mips_addr_bits_remove.
	* utils.c (paddr_nz, preg_nz): New functions, similar to 
	paddr and preg but don't print leading zeroes.
	* defs.h (paddr_nz, preg_nz): Declare.
	* remote-mips.c: Use paddr_nz instead of paddr throughout
	to reduce packet size.
	(pmon_end_download): Improve timeout error handling.

Tue Nov 26 17:21:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Rebuild with autoconf 2.12.

Mon Nov 25 13:17:16 1996  Fred Fish  <fnf@ninemoons.com>

	From: Paul Eggert <eggert@twinsun.com>
	* remote-bug.c (wait_strings): Avoid creating a trigraph.

Fri Nov 22 15:55:22 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* valops.c (value_at, value_fetch_lazy): Put in D10V call 
	to fix up address pointers.
	* values.c (value_from_longest): Removed previous d10v changes.
	* config/d10v/tm-d10v.h (TARGET_PTR_BIT): Change to 4 bytes.
	
Fri Nov 22 10:06:19 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/i386/nm-i386v4.h (LOSING_POLL):  Define, needed for
	Unixware 1.1.2.

Thu Nov 21 19:13:58 1996  Mark Alexander  <marka@cygnus.com>

	* mips-tdep.c: Replace hard-coded constants with MIPS_INSTLEN.
	(common_breakpoint): Use paddr instead of %x to print 64-bit values.
	(heuristic_proc_desc): Add tests for 64-bit instructions.
	(init_extra_frame_info, mips_push_arguments): Recognize additional
	registers for EABI.
	* remote-mips.c: Extend DDB target to allow TFTP downloads.
	* config/mips/tm-mips.h (MIPS_LAST_ARG_REGNUM, MIPS_NUM_ARG_REGS):
	Define.

Wed Nov 20 19:09:16 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* infcmd.c (do_registers_info): Call val_print with the
	virtual buf instead of the raw buf.  Needed for REGISTER_CONVERT 
	to work with non-floating point regs.

	* d10v-tdep.c (d10v_skip_prologue): If we have line debugging 
	information, then the end of the prologue should the first 
	assembly instruction of the first source line.
	
	* values.c (value_from_longest): Put in D10V call to 
	fix up address pointers.

	* config/d10v/tm-d10v.h (REGISTER_VIRTUAL_SIZE): Modified.
	(REGISTER_VIRTUAL_TYPE): Modified for PC_REGNUM and SP_REGNUM.
	(REGISTER_CONVERTIBLE): Make PC and SP convertible.
	(REGISTER_CONVERT_TO_VIRTUAL): Define.
	(REGISTER_CONVERT_TO_RAW): Define.
	(D10V_MAKE_DADDR): Define.
	(D10V_MAKE_IADDR): Define.

Wed Nov 20 16:15:15 1996  Geoffrey Noer  <noer@cygnus.com>

        * config/i386/cygwin32.mh: add MMALLOC_CFLAGS = -I$(MMALLOC_SRC)
        -DMMCHECK_FORCE=1 so memory checks are loaded for cygwin32 gdb

Wed Nov 20 00:43:09 1996  Doug Evans  <dje@canuck.cygnus.com>

	* callback.h: Delete, moved to ../include.
	* callback.c: Delete, moved to ../sim/common.
	* Makefile.in (SFILES,COMMON_OBJS): Delete callback.[co].
	(callback.o): Delete rule.
	* remote-sim.h: No longer include callback.h.
	(sim_callback_write_stdout): Delete prototype.
	* remote-sim.c (init_callbacks,end_callbacks): New functions.
	(gdb_os_write_stdout, gdb_os_printf_filtered): New functions.
	(gdb_callback, callbacks_initialized): New static globals.
	(gdbsim_open): Call init_callbacks.
	(gdbsim_close): Call end_callbacks.
	(simulator_command): Call init_callbacks.

	* config/h8300/h8300.mt (SIM): Change to ../sim/h8300/libsim.a.
	* config/h8500/h8500.mt (SIM): Change to ../sim/h8500/libsim.a.

Mon Nov 18 15:58:05 1996  Jim Wilson  <wilson@cygnus.com>

	* config/mips/tm-mips.h (FIX_CALL_DUMMY): Change unsigned LONGEST
	to ULONGEST.

Fri Nov 15 15:34:18 1996  Fred Fish  <fnf@cygnus.com>

	From Peter Schauer <Peter.Schauer@Regent.E-Technik.TU-Muenchen.DE>
	* procfs.c (wait_fd):  Handle EINTR error return from poll
        by restarting the poll.
	* defs.h (PIDGET): Define a default version that just
	returns its argument unchanged.
	* inflow.c (terminal_init_inferior): Eliminate #ifdef
	of PIDGET and fold both alternatives into common code.
	(pass_signal): Use PIDGET for pid passed to kill().

Thu Nov 14 15:54:20 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* utils.c (paddr,preg): Use a static variable initialized to 32
	instead of doing addr>>32 to eliminate a warning produced by GCC
	on 32-bit systems.

	* config/d10v/tm-d10v.h (ULONGEST): Define.

Tue Nov 12 12:25:27 1996  Jim Wilson  <wilson@cygnus.com>

	* c-typeprint.c (cp_type_print_method_args): Pass -1 for show in
	recursive call to type_print.
	
Tue Nov 12 12:18:29 1996  Jim Wilson  <wilson@cygnus.com>

	* defs.h (ULONGEST): New macro.
	* alpha-tdep.c, breakpoint.c, c-exp.y, ch-exp.c, convex-xdep.c,
	corefile.c, defs.h, f-exp.y, findvar.c, gdbcore.h, m2-exp.y,
	m88k-tdep.c, printcmd.c, remote-hms.c, remote-mips.c, sparc-tdep.c,
	valarith.c, valops.c, values.c, config/gould/tm-np1.h,
	config/mips/tm-mips.h, mswin/prebuilt/gdb/cexptab.c,
	mswin/prebuilt/gdb/fexptab.c, mswin/prebuilt/gdb/m2exptab.c:
 	Change all occurances of unsigned LONGEST to ULONGEST.

	* configure.host (mips-sgi-irix6): Add.
	
Tue Nov 12 12:16:40 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* sh-tdep.c: Add functionality for target function calls.
	* config/sh/tm-sh.h: Add support for target function calls.

Tue Nov 12 12:06:58 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>
	 
	* m32r-tdep.c: Add functionality for target function calls.
	* valops.c:    Small change to support target function calls.
	* config/m32r/tm-m32r.h: Add support for target function calls.
	 
Mon Nov 11 17:15:59 1996  Geoffrey Noer  <noer@cygnus.com>

	* defs.h: Modify Nov 11 12:59:00 change so _MSC_VER is checked
	instead of _WIN32.
	* win32-nat.c: Fix Nov 11 12:59:00 change (windows.h should
	be included instead of windefs.h for compilers other than
	VC++).
	* mswin/windefs.h: Remove ^Ms and change C++ style comments
	to C style comments.

Mon Nov 11 14:32:38 1996  Mark Alexander  <marka@cygnus.com>

	* utils.c (get_cell): Fix off-by-one bug.
	* mips-tdep.c (get_frame_pointer, fix_sign_extension):
	New functions to consolidate common code.
	(mips_frame_chain, init_extra_frame_info): Use new functions
	to fix problems with backtrace and finish commands on ddb board.

Mon Nov 11 12:59:00 1996  Dawn Perchik <dawn@critters.cygnus.com>

	* mips-tdep.c, remote-mips.c, values.c, mdebugread.c,
	config/mips/tm-mips.h: Add/fix bugs for 64-bit mips support.
	* defs.h: Cleanup; add prototypes.
	* corefile.c: Change FIXME #ifdef
	* win32-nat.c: Include windefs instead of windows.h.
	* utils.c: Add routines for printing addresses and registers 
	based on type size.

Sat Nov  9 01:05:10 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* alpha-tdep.c (heuristic_proc_desc):  Stop examining the prologue
	if we encounter a positive stack adjustment. 
	(find_proc_desc):  If heuristic_fence_post is non-zero, use
	heuristic_proc_start to determine the start of a function before
	calling heuristic_proc_desc.

	* coffread.c (coff_symtab_read):  Change minimal symbol types
	for C_LABEL symbols from mst_* to mst_file_*.

	* config/m68k/sun3os4.mh (MMALLOC_CFLAGS): Define MMCHECK_FORCE to 1.

	* configure.in:  Handle error message from sun3 native ld when
	configuring HLDFLAGS.
	* configure:  Regenerated with autoconf.

	* c-valprint.c (c_value_print):  Adjust value address by VALUE_OFFSET.
	* cp-valprint.c (cp_print_value):  Prevent gdb crashes by making sure
	that the virtual base pointer from an user object still points to
	accessible memory.

	* dbxread.c (dbx_symfile_init):  Initialize sym_stab_info to
	clear the recently added header_files fields.
	(dbx_symfile_finish):  Free hfiles[i].vector to avoid storage leak.

Fri Nov  8 14:30:23 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* config/tm-sh.h: Added a missing comma in middle of
 	REGISTER_NAMES list.

Fri Nov  8 12:29:51 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* monitor.c: Fix some formatting and comments.

	* remote-sim.c (simulator_command): Set up callbacks before
	entering the simulator.

Thu Nov  7 15:19:08 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* d10v-tdep.c: Fix some problems with inferior function calls.
	* config/d10v/tm-d10v.h (EXTRA_FRAME_INFO): Change dummy to be
	a pointer to the dummy's stack instead of just a flag.
	
Tue Nov  5 10:21:02 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* m32r-tdep.c: Improved frame_chain and fn prologue analysis.
	* config/tm-m32r.h: Add framesize and register to extra_frame_info.

Tue Nov  5 10:08:07 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* mswin/gdbwin.h:  Remove bogus definition of CORE_ADDR.
	* mswin/srcwin.cpp (CSrcScroll1::CSrcScroll1):  Initialize depth
	to fix divide-by-zero problem with clicking on source window.

Mon Nov  4 00:48:37 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* mswin/recordit:  Fix problem with absolute paths.
	* mswin/recordit:  Fix problem with relative paths.

Sun Nov  3 18:06:42 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* mswin/{Makefile.in configure configure.in}:  New files for
	configuring wingdb under Unix.

Sat Nov  2 03:54:13 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* irix5-nat.c, osfsolib.c, solib.c (symbol_add_stub):  Handle
	missing or zero-sized .text sections properly.
	* mdebugread.c:  Handle scRConst and scSUndefined storage classes.
	* stabsread.c (scan_file_globals):  Try to resolve symbols
	for shared libraries from the minimal symbol table of the main
	executable first.

Fri Nov  1 13:59:28 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* d10v-tdep.c, config/d10v/tm-d10v.h:  Major fixes to support
	inferior function calls and proper stack backtracing on D10V-EVA
	board.

Fri Nov  1 10:50:51 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/powerpc/linux.mh (NATDEPFILES): Fix up things so that it
	links.
	(GDBSERVER_DEPFILES,TERMCAP): Ditto.

	* monitor.c (dev_name,targ_ops): Move static variables before
	first use, to avoid compiler warnings.

Thu Oct 31 16:37:17 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* m32r-tdep.c: Improved frame_chain and fn prologue analysis.
	* configure.tgt: Add entry for m32r target.
	* monitor.h:   Add a flag to tell monitor_store_register to use
			(val, regno) instead of (regno, val).
	* monitor.c:   Make monitor_store_register honor the above flag.
			Make monitor_exp ignore DC1/DC3 for m32r.
			Increase buf size in monitor_dump_regs.

Wed Oct 30 18:14:14 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* m32r-tdep.c, m32r-rom.c: New files.
	* config/m32r/m32r.mt: New file.
	* config/m32r/tm-m32r.h: New file.

Tue Oct 29 16:56:01 1996  Geoffrey Noer  <noer@cygnus.com>

	* config/i386/xm-cygwin32.h:
	* config/powerpc/xm-cygwin32.h:
	add #define LSEEK_NOT_LINEAR so source lines aren't unexpectedly
	truncated.

Tue Oct 29 18:36:43 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/powerpc/tm-ppc-eabi.h (TARGET_BYTE_ORDER_SELECTABLE):
	Define.

Tue Oct 29 14:59:20 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* TODO: Add item suggesting an "info bfd" command.

Tue Oct 29 12:48:04 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* d10v-tdep.c: Snapshot that supports D10V-EVA board.
 	
	* config/d10v/tm-d10v.h (REGISTER_NAMES): Add imap0,imap1,dmap.
	(TARGET_READ_FP,TARGET_WRITE_FP): Define. 
	
Mon Oct 28 17:34:24 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* mswin/genmakes mswin/recordit:  New scripts to generate make
	files for MSVC.

Sun Oct 27 20:18:04 1996  Mark Alexander  <marka@cygnus.com>

	* config/mips/{tm-vr5000.h,tm-vr5000el.h,vr5000.mt,vr5000el.mt}:
	New files.
	* configure.tgt: Modify cases for vr5000 to use new files.

Sat Oct 26 07:15:14 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/alpha/alpha-osf3.mh (XM_CLIBS):  Add -lm for OSF/1-4.0.

	* procfs.c (proc_set_exec_trap):  Under Alpha OSF/1-4.0, tracing
	the entry to the exit system call to detect termination of the
	inferior stopped working. Trace termination of the inferior via
	PRFS_STOPTERM instead.
	(procfs_init_inferior):  Do not trace entry to exit system call
	if PIOCSSPCACT is defined.
	(procfs_wait):  Handle PR_DEAD event, which signals the termination
	of the inferior if PRFS_STOPTERM is set.

	* mdebugread.c (parse_partial_symbols):  Ignore stNil section
	start address symbols.

	* sparc-tdep.c (get_saved_register):  Get saved PC from the
	frame info if not in innermost frame.

Thu Oct 24 10:51:45 1996  Mark Alexander  <marka@cygnus.com>

	* dbxread.c (process_one_symbol): Interpret end-of-function
	markers correctly; this fixes problem on Vr5000 where all
	functions in a module had the same address.
	* configure.in, configure.tgt, configure.host, gdbserver/configure.in:
	Correct	for pc-linux-gnu problem in config.guess.
	* configure: Regenerate.

Thu Oct 24 10:06:58 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* dbxread.c:  Don't swap symbols in place, since internal and
	external forms may have different sizes.  Don't assume that an
	internal_nlist has the same layout as an external_nlist.  Create
	symbol for n_strx element so to hide specifics of nlist from
	partial-stab.h. 
	* partial-stab.h:  Don't reference dbxread symbols directly.  Use
	CUR_SYMBOL_STRX instead.
	* config/i386/xm-windows.h:  Define SIGQUIT and SIGTRAP.

	* config/v850/tm-v850.h:  Define PS_REGNUM and TARGET_V850 for
	MSVC builds.
	* mswin/gdbwin.c (reg_order):  Define register order for V850.
	* mswin/gui.cpp (CGuiApp::InitInstance):  Define target name for
	V850.
	* mswin/regdoc.h:  Define MAXREGS for V850.

Tue Oct 22 16:28:20 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* v850-tdep.c (scan_prologue):  Changes to deal with scheduled
	prologues correctly.  First, prologue end is now defined by
	presence of a branch, jump or call insn.  Second, can no longer
	fix frame offsets because we may not know the offset until after a
	register has been saved.
	* (v850_init_extra_frame_info):  Fixup frame offsets here because
	we have all the info at this time.
	* (v850_frame_chain):  Use new calling convention for scan_prologue.

Tue Oct 22 10:25:29 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* d10v-tdep.c, config/d10v/tm-d10v.h: Changes to allow stack
 	backtraces and inferior function calls.

Tue Oct 22 10:32:46 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Update init.c editing to work with Oct 8 change.
	(@HLDFLAGS@): Always edit out.

Mon Oct 21 18:17:08 1996  Mark Alexander  <marka@cygnus.com>

	* mdebugread.c (parse_partial_symbols): Fix 64-bit
	sign-extension problems in calculating psymtab addresses.
	* buildsym.c (end_symtab): Use macro to pop context.

Mon Oct 21 14:40:50 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* v850-tdep.c:  Cleanup lots of things.  Add many comments.

	* v850-tdep.c (v850_init_extra_frame_info v850_frame_chain):  Fix
	sign bugs with scanning prologues.  Get a little smarter about
	calculating the length of uninteresting instructions.

Mon Oct 21 14:01:38 1996  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* top.c: Add new commands "set annotate" and "show annotate".
	
Sun Oct 20 04:38:39 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* corelow.c (core_close):  Clear inferior_pid only if there is
	an open core_bfd.

	* cp-valprint.c (cp_print_value_fields):  Pass correct address
	to val_print, not 0.

	From Andreas Schwab (schwab@issan.informatik.uni-dortmund.de):
	* eval.c (evaluate_subexp_standard) [case BINOP_REPEAT]: Chase
	typedefs before checking for integral type of right operand.

Fri Oct 18 17:26:22 1996  Mark Alexander  <marka@cygnus.com>

	* mdebugread.c (parse_symbol): Fix crash when malloc has
	no type info and void type has no associated pointer type.

Thu Oct 17 18:18:20 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.host: New file, host configuration mapping.
	* configure.tgt: New file, target configuration mapping.
	* configure.in: Remove host and target mapping.
	* configure: Rebuild.

Wed Oct 16 17:46:03 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* breakpoint.c (must_shift_inst_regs): New global.
	(bpstat_stop_status): Change #if uses of DECR_PC_AFTER_BREAK into
	equivalent expression uses.
	* infrun.c (wait_for_inferior): Ditto.

Wed Oct 16 01:53:43 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* v850-tdep.c (v850_push_arguments):  Use symbolic names for arg
	registers.
	* config/v850/tm-v850.h:  Change FP to 29.  Define arg regs.

Tue Oct 15 16:30:07 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in (init.c):  Don't use -s option with grep.  It means
	something different under Digital Unix.

	* buildsym.c (finish_block):  Treat LOC_BASEREG_ARG and
	LOC_LOCAL_ARG as arguments so that GDB will know about function
	args declared this way.  Mostly affects dwarf.
	* dwarfread.c (decode_die_type):  Change default type from int to
	void.  This allows GDB to recognize void functions.
	* (new_symbol):  If AT_PROTOTYPED is present, set a flag in the
	type structure.
	* findvar.c (extract_floating store_floating):  Clean up comments
	to reflect reality.
	* gdbtypes.h:  Add TYPE_FLAG_PROTOTYPED so that we can tell if a
	function has a prototype.  Currently, only dwarf supports this.
	* utils.c (floatformat_from_doublest):  Fix logic error with
	converting from double to float.  (It wasn't shifting mant_long if
	it had a hidden bit.)
	* v850-tdep.c:  Add support for function calling.  Fix some
	problems with debugging code w/o debug symbols.
	* config/v850/tm-v850.h:  Ditto.

Tue Oct 15 18:19:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* utils.c: Always ensure that size_t is defined.  Check
	HAVE_STDDEF_H rather than __STDC__
	(xmalloc, xrealloc): Use size_t rather than long.

Tue Oct 15 14:24:19 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/powerpc/tm-ppc-eabi.h: Undefine NO_SINGLE_STEP so targets
	can use single-step commands.

Sun Oct 13 11:38:25 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* stabsread.c (define_symbol):  If REG_STRUCT_HAS_ADDR is non-zero,
	follow typedefs before checking TYPE_CODE for structures and unions.

Fri Oct 11 15:43:54 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* frame.h:  Move definition of struct frame_saved_regs to before
	struct frame to make it possible to use frame_saved_regs in
	EXTRA_FRAME_INFO macro.

	* v850-tdep.c config/v850/tm-v850.h:  Lotsa new functions and
	macros to make frame operations (such as backtrace) work.

Fri Oct 11 14:23:50 1996  Fred Fish  <fnf@cygnus.com>

	* dbxread.c (process_one_symbol): Check for null string directly
	rather than using strcmp against "".
	* partial-stab.h: Ditto.

Fri Oct 11 12:18:32 1996  Mark Alexander  <marka@cygnus.com>

	* gdbserver/{gdbreplay.c,low-linux.c,remote-utils.c,utils.c}:
	Make it compile on Linux and eliminate some warnings.

Thu Oct 10 16:32:08 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in (init.c):  Fixup final sed script to work around
	Linux bug with `p' operator.

Wed Oct  9 18:02:48 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-mips.c: Use the correct name everywhere (DDB) for NEC's
 	VR4300 target.
	(ddb_ops, pmon_ops): Fix the documentation strings.

Wed Oct  9 07:42:44 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in (init.c):  Retro HPUX grep lacks -h option.  Strip
	filenames with sed instead.

Tue Oct  8 15:59:44 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* defs.h:  Remove decls of xmalloc and xrealloc.  There is a
	conflicting definition in libiberty.h.

Tue Oct  8 11:47:13 1996  Fred Fish  <fnf@cygnus.com>

	* dbxread.c (dbx_symfile_read): Call free_pending_blocks rather
	than poking global variable (which is now static).
	* hpread.c (hpread_build_psymtabs): Ditto.
	* os9kread.c (os9k_symfile_read): Ditto.
	* xcoffread.c (xcoff_initial_scan): Ditto.

	* buildsym.h (free_pending_blocks): Declare here.
	(pending_blocks): Remove declaration of global symbol.
	(free_pendings): Remove declaration of global symbol.
	(make_blockvector): Declare here.
	(record_pending_block): Declare here.
	
	* dstread.c (make_blockvector): Remove static copy that was old
	clone of version in buildsym.c.
	(process_dst_block): Call record_pending_block rather than doing
	it by hand.
	(read_dst_symtab): Ditto.

	* buildsym.c (make_blockvector): Make global rather than static,
	(record_pending_block): New function, code moved from finish_block.
	(finish_block): Use record_pending_block.
	(free_pending_blocks): New function.
	(really_free_pendings): Call free_pending_blocks.
	(pending_blocks): Make static instead of global.
	(free_pendings): Make static instead of global.
	
Tue Oct  8 09:03:22 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* config/i386/windows.mh config/i386/xm-windows.h::  New config
	files to support building Wingdb (built under Microsoft build
	environment).

	* Makefile.in:  Add rule for hpux-thread.o (needs special header
	files).
	* (SUBDIRS):  Remove mswin.
	* Change procedure for creating init.c.  Speeds things up quite a
	bit.
	* config.in configure configure.in:  Check for select, poll.
	* Check for OSF header files before including hpux-thread.o.
	* Don't configure doc or testsuite when building under MSVC.
	* findvar.c value.h (read_register_pid write_register_pid):  Make
	global.  Needed for hppa-tdep.c.
	* (supply_register):  Don't set pid to inferior_pid when supplying
	registers.
	* hppa-tdep.c (saved_pc_after_call):  frame_saved_pc ->
	FRAME_SAVED_PC.
	* (frame_saved_pc):  Change name to hppa_frame_saved_pc.
	* (hppa_pop_frame):  Don't use a pid of 0 with target_write_pc.
	Use write_pc instead, which uses the correct pid.
	* (target_read_pc target_write_pc):  Use read/write_register_pid
	instead of read/write_register to preserve the pid passed in.
	* inftarg.c (child_can_run):  Add flag child_suppress_run to allow
	hpux-threads.c to override this as a runnable target.
	* config/pa/nm-hppah.h:  Define target_new_objfile and
	target_pid_to_str.
	* config/pa/tm-hppa.h (FRAME_SAVED_PC):  Use hppa_frame_saved_pc
	instead of frame_saved_pc.
	* config/m68k/tm-m68k.h:  Define TARGET_M68K for Wingdb.
	* config/m68k/tm-monitor.h:  Use FRAME_CHAIN_VALID_ALTERNATE, since
	we can't easily determine the start file bounds with ELF.
	* config/mips/tm-mips.h:  Define TARGET_MIPS for Wingdb.
	* hpux-thread.c:  New file for HPUX/OSF thread support.
	* osf-share/{README AT386/cma_thread_io.h HP800/cma_thread_io.h
	RIOS/cma_thread_io.h cma_attr.h cma_deb_core.h cma_debug_client.h
	cma_errors.h cma_handle.h cma_init.h cma_list.h cma_mutex.h
	cma_sched.h cma_semaphore_defs.h cma_sequence.h cma_stack.h
	cma_stack_int.h cma_tcb_defs.h cma_util.h}:  New files for OSF
	thread support.

Sun Oct  6 15:48:09 1996  Fred Fish  <fnf@cygnus.com>

	* buildsym.c (finish_block): Change innerblock_anon_complaint to
	print the addresses as part of the complaint.  Add a complaint for
	cases where the block end address is smaller than the block start
	address, in case any such conditions slip through our fixup mechanism.
	* symmisc.c (dump_symtab): Only print blockvector for primary
 	symtabs, to avoid massive duplication of output due to secondary
 	symtabs that point to same blockvector.  Also do some minor 
	formatting tweaks.

Mon Oct  7 10:42:32 1996  Per Bothner  <bothner@deneb.cygnus.com>

	Replace header_files global by per-objfile field.
	* gdb-stabs.h (struct dbx_symfile_info):  Add fields header_files,
	n_header_files, n_allocated_header_files.
	* stabsread.h (header_files, n_header_files, n_allocated_header_files):
	Replace externs by macros HEADER_FILES, N_HEADER_FILES, and
	N_ALLOCATED_HEADER_FILES.
	* dbxread.c (dbx_symfile_finish):  Free HEADER_FILES.
	(free_header_files, init_header-files):  Don't free/init headerfiles.
	(various functions):  Use macros instead of header_files globals.
	* stabsread.c (various functions):  Likewise.

Sun Oct  6 22:43:06 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2read.c (read_tag_reference_type): New fn.
	(read_type_die): Call it.
	(dwarf_attr): Also look in the DIEs referred to by specification
 	or abstract_origin attributes.

Wed Oct  2 22:07:16 1996  Fred Fish  <fnf@cygnus.com>

	* inferior.h (IN_SIGTRAMP): Pass pc to SIGTRAMP_START and
	SIGTRAMP_END.
	* config/i386/tm-i386os9k.h (SIGTRAMP_START, SIGTRAMP_END):
	Define with dummy pc arg.
	* config/m68k/tm-nbsd.h: Ditto.

Mon Sep 30 20:02:45 1996  Fred Fish  <fnf@cygnus.com>

	* defs.h: Remove define of PRIVATE_XMALLOC.

Mon Sep 30 15:39:28 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* config/v850/tm-v850.h:  Use distinct register for PC, not EIPC.

Mon Sep 30 11:16:34 1996  Jeffrey A Law  (law@cygnus.com)

	* top.c (execute_control_command):  Free values from while_control
	and if_control conditions after evaluation to avoid storage leaks.
	From Peter Schauer.
 
Fri Sep 27 17:43:06 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* configure configure.in:  Recognize v850 target.
	* v850-tdep.c:  New file, NEC V850 target support.
	* config/v850/{v850.mt tm-v850.h}:  New files for NEC V850 support.

Fri Sep 27 14:48:15 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* infrun.c (wait_for_inferior):  Update current_line and
	current_symtab when stepping continues in the middle of a new line.

Fri Sep 27 10:25:30 1996  Fred Fish  <fnf@cygnus.com>

	* top.c (print_gdb_version): Rewrote to comply with new GNU coding
	standards for the --version option.
	(print_gnu_advertisement): Remove, now part of print_gdb_version.
	(show_version): Remove call to print_gnu_advertisement.
	* top.h (print_gnu_advertisement): Remove prototype.
	* main.c (print_gdb_help): Move help to static function and
	add prototype.
	(main): Call print_gdb_help rather than inlining it.
	(main): Remove call to print_gnu_advertisement.
	
Fri Sep 27 13:32:53 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/d10v/tm-d10v.h (TARGET_{INT,PTR}_BIT): Define.
	(TARGET_{,LONG_}DOUBLE_BIT): Ditto.

Thu Sep 26 23:10:26 1996  Mark Alexander  <marka@cygnus.com>

	* configure.in, config/i386/tm-linux.h: Fix configure
	problem on older Linux systems that prevented core files
	from being recognized.

Wed Sep 25 18:31:33 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* dbug-rom.c: New file, support for Motorola's dBUG monitor.
	* config/m68k/monitor.mt (TDEPFILES): Add it.
	* NEWS: Mention it.

Mon Sep 23 16:13:50 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/d10v/tm-d10v.h (SAVED_PC_AFTER_CALL): Fixed.  
	Now single-steps correctly.
	* d10v-tdep.c (d10v_pop_frame): Fixed.

Fri Sep 20 16:10:58 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* config/sh/tm-sh.h (REGISTER_NAMES): Move fp registers to
	be consistent with GCC.
	(FPUL_REGNUM, etc): Renumber to match list changes.
	(ADDR_BITS_REMOVE): Delete.
	* sh-tdep.c (sh_reg_names, sh3_reg_names, sh3e_reg_names):
	Rearrange to match REGISTER_NAMES.
	* sh3-rom.c (sh3_regnames, sh3e_regnames): Ditto.

Thu Sep 19 16:19:01 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* d10v-tdep.c:  Stack chain should work now. 

Tue Sep 17 18:46:57 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* d10v-tdep.c, config/d10v/tm-d10v.h: Snapshot. 

Tue Sep 17 12:20:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add cases for MIPS 5000 like MIPS 4300.
	* configure: Rebuild.

Tue Sep 17 12:09:00 1996  Dawn Perchik <dawn@critters.cygnus.com>

	* ser-e7kpc.c: Added wingdb support for target e7000pc.

Tue Sep 17 10:56:52 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* remote-mips.c (pmon_wait): DDB PMON does not require forced
 	re-entry back into debug mode.

Mon Sep 16 14:32:58 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* remote-mips.c (mips_load): Ensure that the PC is explicitly
 	loaded after a load to a DDB PMON system.
 	
Fri Sep 13 12:02:39 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (INTERNAL_LDFLAGS): Add @HLDFLAGS@ to list.
	(HLDENV): Set to @HLDENV@.
	(gdb): Prefix link command line with $(HLDENV).
	* configure.in: Add support to test for --enable-shared and
	generate appropriate values for HLDFLAGS and HLDENV.
	* configure: Regenerated with autoconf.

Sun Sep  8 15:26:27 1996  Fred Fish  <fnf@cygnus.com>

	* alpha-nat.c (fetch_core_registers): Match Sep 4 gdbcore.h prototype
	change for core_read_registers in struct core_fns.
	* core-regset.c (fetch_core_registers): Ditto & add prototype.
	* core-sol2.c (fetch_core_registers): Ditto & add prototype.
	* i386aix-nat.c (fetch_core_registers): Ditto & add prototype.
	* i386b-nat.c (fetch_core_registers): Ditto.
	* i386mach-nat.c (fetch_core_registers): Ditto & add prototype.
	* irix4-nat.c (fetch_core_registers): Ditto.
	* irix5-nat.c (fetch_core_registers): Ditto.
	* lynx-nat.c (fetch_core_registers): Ditto & add prototype.
	* m68knbsd-nat.c (fetch_core_registers): Ditto.
	* mips-nat.c (fetch_core_registers): Ditto & add prototype.
	* rs6000-nat.c (fetch_core_registers): Ditto.
	* sparc-nat.c (fetch_core_registers): Ditto.
	* sun3-nat.c (fetch_core_registers): Ditto & add prototype.
	* ultra3-nat.c (fetch_core_registers): Ditto & add prototype.

	* alpha-nat.c (register_addr): Match Sep 4 gdbcore.h prototype change.
	* delta68-nat.c (register_addr): Ditto.
	* gdbserver/low-linux.c (register_addr): Ditto.
	* gdbserver/low-hppabsd.c (register_addr): Ditto.
	* i386m3-nat.c (register_addr): Ditto.
	* mips-nat.c (register_addr): Ditto.
	* ultra3-nat.c (register_addr): Ditto.

Sun Sep  8 15:14:00 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* blockframe.c (inside_main_func):  Cleanup slightly.  Move
	mainsym def into the block it's used in.
	* configure.in configure:  Allow NATDEPFILES to be recognized in
	.mh files regardless of whitespace.

	* cpu32bug-rom.c (cpu32bug_cmds):  Change load_response string to
	keep downloads from hanging.

	* remote-wiggler.c:  Add support for flash upgrades.
	* (wiggler_error):  Fix message format.  Add new error code.
	* (wiggler_write_byets):  Error code is hex.  Report errors with
	proper routine name.
	* (wiggler_read_byets):  Report errors with proper routine name.
	* (get_packet):  Add support for new flash commands.
	* (wiggler_load):  Call clear_symtab_users() to reset things
	properly after download.
	* (flash_xfer_memory bdm_update_flash_command):  New funxtions to
	support flash upgrades for Wiggler.
	* (_initialize_remote_wiggler):  Add `bdm update-flash' command.

Fri Sep  6 13:14:13 1996  Geoffrey Noer  <noer@cygnus.com>

	* ser-tcp.c: don't include netinet/tcp.h if __CYGWIN32__

Thu Sep  5 17:05:13 1996  Geoffrey Noer  <noer@cygnus.com>

	* config/i386/cygwin32.mh:
	* config/powerpc/cygwin32.mh: build ser-tcp.o for both hosts

Thu Sep  5 12:09:13 1996  Per Bothner  <bothner@deneb.cygnus.com>

	* value.h (COERCE_REF):  Fix previous change.
	(COERCE_ENUM):  Add a check_typedef  (this is the real fix).

Thu Sep  5 03:28:30 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* eval.c (evaluate_subexp_standard): In case of OP_ARRAY: make a
	better check of array boundaries.

Thu Sep  5 01:29:42 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* configure:  Update aclocal.m4 and re-run autoconf to get correct
	defs for BFD stuff.
	* remote-wiggler.c (wiggler_error):  Error codes are hex.  Also,
	fix default message generation.

Wed Sep  4 17:28:40 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in:  Add mswin to SUBDIRS.  Add rules for
	mswin/libwingdb.a and remote-wiggler.o.
	* breakpoint.c (breakpoint_here_p):  Clean up bp enabled test.
	* (breakpoint_inserted_here_p):  New func, just like
	breakpoint_here_p, except it's honest.  Honestly.
	* breakpoint.h:  Proto for above.
	* configure configure.in:  Add mswin to configdirs if host is
	i[3456]86-*-windows.
	* core-aout.c (fetch_core_registers register_addr) gdbcore.h:
	Change all vars that can contain addresses to type CORE_ADDR.
	* findvar.c (supply_register):  Allow val to be NULL.  This means
	that regno is unsupported.
	* (read_pc read_pc_pid write_pc write_pc_pid):  Make non-pid forms
	just call pid forms with inferior_pid so that there's only once
	place to hack PC's and such.
	* infrun.c (proceed):  Don't skip breakpoints if user changed PC.
	* remote-wiggler.c:  New file.  Support for BDM interface from
	Macraigor Systems.
	* serial.c:  Enhance serial logging capability.  Add hex and octal
	output modes (set remotelogbase {hex|octal|ascii}.  Also log
	breaks, timeouts, errors, and eofs.
	* serial.h:  Redefine SERIAL_SEND_BREAK to go through a wrapper
	function so that we can log breaks.  Don't export serial_logfile
	or serial_logfp.
	* top.c (execute_command):  Don't test for serial_logfp here.
	Just call serial_log_comand, and let serial.c sort it out.
	* valops.c (value_of_variable):  Don't attempt to establish frames
	for static and global variables.  This makes things work a bit
	better if the stack or frame pointer is trashed.
	* config/m68k/monitor.mt (TDEPFILES):  Add remote-wiggler.o.
	* config/m68k/tm-m68k.h:  Define STACK_ALIGN.  CPU32 can't hack
	misaligned stacks during function calls.

Wed Sep  4 13:06:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* terminal.h: Don't use #elif.

Wed Sep  4 06:49:35 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* ch-exp.c (parse_tuple_element): Allow (*): for array tuples
	if we have a type.

	* eval.c (evaluate_subexp_standard): In case of OP_ARRAY:
	check number of args against bounds of array to avoid
	memory corruption.

	* value.h (COERCE_REF): Do a CHECK_TYPEDEF in case we get
	a TYPE_CODE_TYPEDEF.

Fri Aug 30 15:07:14 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* remote-mips.c: Provide support for DDBVR4300 target board.
	(ddb_open, ddb_ops): Added.
	(mips_monitor_type): MON_DDB Added.
	(mips_enter_debug, mips_exit_debug, mips_initialize,
 	mips_fetch_registers, common_breakpoint, mips_load,
 	_initialize_remote_mips): Updated.

Thu Aug 29 17:00:18 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* nlm/configure.in (i[345]86-*-*): Recognize i686 for pentium pro.
	* nlm/configure: Regenerate.

	* gdbserver/configure.in (i[345]86-*-*): Recognize i686 for
	pentium pro.

Wed Aug 28 13:11:15 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: If CY_AC_PATH_TCLCONFIG can't find TCL, don't run
	CY_AC_LOAD_TCLCONFIG.
	* configure: Rebuild.

Tue Aug 27 12:40:40 1996  Fred Fish  <fnf@cygnus.com>

	* infrun.c (wait_for_inferior): Initialize stop_func_end before calling
	find_pc_partial_function.

Tue Aug 27 10:17:34 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure: Regenerate again.

Tue Aug 27 04:25:08 1996  Geoffrey Noer  <noer@cygnus.com>

        * configure.in: work around host_alias configure bug.
        AC_CANONICAL_HOST is called twice (first by AC_CHECK_TOOL
        and second by AC_CANONICAL_SYSTEM).  The second clobbers the
        previous setting.  Circumventing by moving the second check
        to before the first.
	* configure: regenerated

Mon Aug 26 18:36:54 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* config/d10v/d10v.mt: New file.
	* config/d10v/tm-d10v.h: New file.	
	* configure.in: New target D10V.	 
	* d10v-tdep.c: New file. 

Sun Aug 25 00:09:47 1996  Fred Fish  <fnf@rtl.cygnus.com>

	* rs6000-tdep.c: Fix typo in comment.
	* valops.c (call_function_by_hand): Set using_gcc to 2
	for code compiled without -g, per comment in code.
	* config/a29k/tm-a29k.h (STACK_ALIGN): Add comment.
	* config/sparc/tm-sparc.h (STACK_ALIGN): Add comment.
	* config/sparc/tm-sp64.h (STACK_ALIGN): Add comment.
	* config/pyr/tm-pyr.h (STACK_ALIGN): Add comment.
	* config/m88k/tm-m88k.h (STACK_ALIGN): Add comment.
	* config/pa/tm-hppa.h (PUSH_ARGUMENTS): Enclose args in ()'s.
	(STACK_ALIGN): Add comment, move to be with other associated
 	macros, and document.
	* config/mips/tm-mips.h (PUSH_ARGUMENTS): Enclose args in ()'s.
	(STACK_ALIGN): Remove completely, handled by PUSH_ARGUMENTS.
	* config/alpha/tm-alpha.h (PUSH_ARGUMENTS): Enclose args in ()'s.
	* config/rs6000/tm-rs6000.h (STACK_ALIGN): Remove completely,
	handled by PUSH_ARGUMENTS.
	(PUSH_ARGUMENTS): Enclose args in ()'s.
	
Fri Aug 23 13:55:05 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* infrun.c (wait_for_inferior):  Try to reenable shared library
	breakpoints even if auto_solib_load is not set.

Wed Aug 21 16:31:27 1996  Fred Fish  <fnf@cygnus.com>

	* valprint.c (print_longest): Test for CC_HAS_LONG_LONG as well as
	PRINTF_HAS_LONG_LONG.
	* expprint.c (dump_expression): Ditto.
	* configure.in: Fix check for long long support in compiler to
	use a function body, not a nested function.
	* configure: Rebuild with autoconf.
	
Tue Aug 20 17:59:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aclocal.m4: Include ../bfd/aclocal.m4.
	* configure.in: Add stdlib.h to AC_CHECK_HEADERS.  Call
	BFD_NEED_DECLARATION on malloc, realloc, and free.
	* acconfig.h: Add NEED_DECLARATION_MALLOC,
	NEED_DECLARATION_REALLOC, and NEED_DECLARATION_FREE.
	* configure, config.in: Rebuild.
	* defs.h: Include <stddef.h> and <stdlib.h> based on HAVE_*_H
	rather than __STDC__.  Only declare malloc, realloc, and free if
	NEED_DECLARATION_* is defined.

Tue Aug 20 15:37:03 1996  Fred Fish  <fnf@cygnus.com>

	* solib.c (_initialize_solib): Add missing '\' chars at ends of
 	strings that continue on next line.
	(enable_break): Replace "return 0" with setting success to zero
 	and letting normal return handle the return.

Sat Aug 17 14:16:23 1996  Fred Fish  <fnf@cygnus.com>

	* mips-tdep.c (mips_push_arguments): Make sure sp and struct_addr
	are properly aligned.

Fri Aug 16 17:54:26 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* rs6000-tdep.c (rs6000_fix_call_dummy): Add full set of arguments.
	* config/rs6000/tm-rs6000.h (FIX_CALL_DUMMY): Pass all arguments
	to function, declare function correctly.

Fri Aug 16 17:24:35 1996  Dawn Perchik <dawn@critters.cygnus.com>

        * symtab.h: changed namespace to _namespace for compiling under 
	MFC v4.0.

Fri Aug 16 13:52:21 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Update for various recent changes, add some
	comments.

Fri Aug 16 15:47:36 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/rs6000/tm-rs6000.h (FIX_CALL_DUMMY): Cast args to be an
	integer for type correctness.

Fri Aug 16 15:15:37 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* config/mips/{vr4300.mt, vr4300el.mt} (SIM): Add -lm when
 	simulator is included.

Thu Aug 15 13:44:13 1996  Fred Fish  <fnf@cygnus.com>

	* findvar.c (write_register_pid): Only needed when TARGET_WRITE_PC
	is not defined.
	(read_register_pid): Only needed when TARGET_READ_PC is not
	defined.
	* hppa-tdep.c (frame_saved_pc): Remove prototype.
	* infptrace.c (udot_info): Prototype when CHILD_XFER_MEMORY is
	not defined.
	* config/xm-aix4.h (aix_resizewindow): Convert old style decl
	to prototype.
	* xcoffsolib.c (command.h): Include for needed prototypes.

Wed Aug 14 17:54:19 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* config/i386/cygwin32.mh: Set NAT_FILE to nm-empty.h to make
	native work.

Wed Aug 14 02:03:42 1996  Fred Fish  <fnf@cygnus.com>

	From Blair MacIntyre <bm@cs.columbia.edu>:
	* hppa-tdep.c (hppa_fix_call_dummy): Use MSYMBOL_TYPE rather
	than SYMBOL_TYPE on msymbols.
	* somsolib.c (som_solib_create_inferior_hook): Ditto.

	* Makefile.in (init.c):  Generate with prototypes.

	* config/pa/tm-hppa.h (frame_saved_pc): Add prototype.
	* config/rs6000/xm-rs6000.h (aix_resizewindow): Ditto.
	* config/rs6000/tm-rs6000.h (frame_initial_stack_address): Ditto.
	(pc_load_segment_name): Ditto.
	(pop_frame): Ditto.
	(extract_return_value): Ditto.
	(is_magic_function_pointer): Ditto.
	(push_dummy_frame): Ditto.
	(fix_call_dummy): Ditto.
	(push_arguments): Ditto.
	(skip_trampoline_code): Ditto.
	(aix_process_linenos): Ditto.

	* config/m68k/tm-cisco.h (get_longjmp_target): Add prototype.
	* config/m68k/tm-es1800.h: Ditto.
	* config/m68k/tm-vx68.h: Ditto.
	* config/m68k/tm-sun3.h: Ditto.
	* config/m68k/tm-m68kv4.h: Ditto.

Tue Aug 13 23:04:36 1996  Fred Fish  <fnf@cygnus.com>

	* config/mips/nm-mips.h (get_longjmp_target): Add prototype.
	* config/mips/nm-irix3.h (get_longjmp_target): Add prototype.
	* remote-mips.c (mips_read_processor_type): Remove prototype.
	* mips-tdep.c (gdb_print_insn_mips): Add prototype and make static.
	* irix5-nat.c (fetch_core_registers): Add prototype.

Mon Aug 12 21:23:44 1996  Fred Fish  <fnf@cygnus.com>

	* remote-pa.c (boot_board): Add dummy params to make type compatible
 	for passing to add_com.
	* scm-exp.c (scm_lreadr): Ensure svalue is not used uninitialized.
	* buildsym.c (compare_line_numbers): Change function to match
	prototype and also what qsort expects.

Mon Aug 12 19:19:00 1996  Mark Alexander  <marka@cygnus.com>

	* remote.c: Make remote_write_size public.
	* sh-tdep.c (_initialize_sh_tdep): Set remote_write_size to 300
	to prevent packet errors with some versions of CMON.

Mon Aug 12 16:20:58 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* defs.h:  Define CONST_PTR as blank if compiling with Microsoft
	C, else it's `const'.
	* c-lang.c c-lang.h ch-lang.c f-lang.c language.c m2-lang.c
	scm-lang.c: Microsoft C can't hack const pointers.  Use CONST_PTR
	macro instead.
	* configure configure.in defs.h:  Use AC_C_CONST to figure out if
	the compiler supports const.  Gets rid of some cruft in defs.h.
	* dwarf2read.c:  <string.h> -> "gdb_string.h"
	* remote-sim.c:  Add prototypes.  Fix call to gdbsim_kill.
	* sparcl-tdep.c (download):  Add prototypes to write_routine and
	start_routine args.

	* mswin/gdbwin.c:  Don't include both varargs.h AND stdarg.h.  Get
	rid of varargs.h  Include string.h.
	* (gdbwin_update gdbwin_fputs regs_changed_f bpt_changed_f
	update):  Fix prototypes, fix calls.
	* (update):  Return value for catch_errors.
	* (run_execute_command togdb_command_from_tty togdb_command):
	Cleanup catching of errors from calls to execute_command.  Also,
	dup command string to avoid modifying const strings.
	* (togdb_breakinfo_i_init togdb_breakinfo_i_next):  Use 0 instead
	of NULL when see if b->address isn't set.
	* (bi_disable_bpt bi_enable_bpt bi_delete_all
	bi_delete_breakpoint):  Add arg to calls to update.
	* (gui_command):  Add prototype.
	* (mswin_query):  Fix prototype.
	* (_initialize_gdbwin):  Dup string to avoid modifying const.
	* (info_path togdb_get_info_path):  Remove const from decls cuz
	this can't be const (it points at malloc'ed memory).
	* (togdb_searchpath):  Remove const from path.  Dup string to
	avoid modifying const strings.
	* rindex -> strrchr.
	* (gdbwin_list_symbols):  Regexp param is const.
	* Fix lots of refs to psymtabs to deref correct pointers.
	* (togdb_set_breakpoint_sal):  Call set_breakpoint_sal with sal,
	not &sal.
	* mswin/gdbwin.h (togdb_searchpath togdb_get_info_path
	toget_set_info_path):  Fix prototypes to match reality.
	* mswin/gui.cpp:  Define _beginthreadex and _endthreadex routines
	with proper prototypes.
	* mswin/iface.cpp (gdbwin_fputs):  Define with correct number of args.
	* mswin/ser-win32s.c:  Fix defs of min and max.
	* mswin/serdll32.c (OpenComm16):  Make cbInQueue and cbOutQueue be
	USHORT.
	* (WriteComm16):  Change lpBug from LPVOID to LPCSTR.
	* mswin/serdll32.h:  Fix prototypes for OpenComm16 and WriteComm16.

Sun Aug 11 20:54:16 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* main.c (main):  Make sure command loop is used with cygwin32.
	* terminal.h:  Allow cygwin32 to use termios.h.

Fri Aug  9 12:42:49 1996  Jeffrey A Law  (law@cygnus.com)

	* somread.c (som_symtab_read): Handle secondary definition
	symbols (aka weak symbols).

	* config/tm-hppa.h (EXTRACT_RETURN_VALUE): Fix thinko in
	last change.

Thu Aug  8 10:12:36 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* symfile.c (symfile_bfd_open):  Change ifdef from __WIN32__ to
	_WIN32.

	* somread.c:  Rearrange order of includes to fix warnings under
	hpux-10.10.  Also don't include sys/file.h.

Wed Aug  7 21:45:52 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* dbxread.c:  Don't include param.h or sys/file.h.
	* (dbx_symfile_read):  Determine symfile_relocatable from bfd
	flags instead of file extension.  Also clean up a little bit.

Wed Aug  7 17:18:37 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* dwarf2read.c dwarfread.c exec.c infcmd.c infrun.c main.c
	mdebugread.c os9kread.c source.c top.c utils.c:  Don't
	include param.h or sys/file.h (or unistd.h in some cases).
	* defs.h exec.c inflow.c remote-array.c remote-e7000.c
	sparcl-tdep.c terminal.h utils.c:  Replace all occurances of
	__WIN32__, WINGDB, WIN32, etc... with _WIN32.
	* main.c:  Remove #ifndef WINGDB around option processing.  Fix
	bug with passing argc==0 and argv==NULL to getopt.
	* (main) Remove calls to access() before source_command.  Let
	soure_command handle access errors.
	* maint.c (maintenance_dump_me):  #ifdef out for _WIN32.
	* symtab.c (operator_chars):  Make this global for wingdb.
	* top.c (disconnect):  #ifdef out for _WIN32.
	* (source_command):  If got an error and from_tty, then call print
	error, else just return quietly.
	* utils.c (fatal_dump_core):  Can't kill ourselves under windows.
	Just exit.
	* (pollquit notice_quit):  #ifdef out stuff that doesn't exist
	under windows. 

Wed Aug  7 09:59:19 1996  Jeffrey A Law  (law@cygnus.com)

	* config/pa/tm-hppa.h (EXTRACT_RETURN_VALUE): Tweak for
	structures > 4 bytes in size.

	* valops.c (call_function_by_hand): Handle aligning stacks that
	grow up correctly.
	* config/pa/tm-hppa.h (USE_STRUCT_CONVENTION): Define.
	(STACK_ALIGN): Define.
	* hppa-tdep.c (hppa_alignof): Don't demand a minumim two byte
	alignment on structs/unions.
	
Sun Aug  4 16:22:42 1996  Fred Fish  <fnf@cygnus.com>

	* config/powerpc/nm-aix.h (PTRACE_ARG3_TYPE): Define to "int *",
	which is the documented type under at least AIX 3 and AIX 4.
	
Sat Aug  3 04:02:46 1996  Fred Fish  <fnf@cygnus.com>

	* config/alpha/alpha-osf3.mh (XM_FILE): Change from xm-alpha.h to
	xm-alphaosf.h.
	(MMALLOC_CFLAGS): Define NO_MMCHECK to not install consistency
	checks.

Thu Aug  1 10:11:34 1996  Fred Fish  <fnf@cygnus.com>

	* config/mips/tm-mips.h (TM_MIPS_H): Enclose file contents in
	this, define when contents are included.
	(mips_read_processor_type): Add prototype.
	* config/mips/xm-mips.h: Remove strdup decl, now in gdb_string.h
	* mdebugread.c (ecoff_relocate_efi): Add prototype.
	(fixup_sigtramp): Only needed when TM_MIPS_H is defined.

Wed Jul 31 20:21:24 1996  Fred Fish  <fnf@cygnus.com>

	* rs6000-nat.c (add_vmap): Return 0 to caller rather than random value.
	(vmap_ldinfo): Ensure got_exec_file is not used uninitialized.
	(fetch_core_registers): Add prototype.
	(vmap_symtab): Ditto.
	(objfile_symbol_add): Ditto.
	(add_vmap): Ditto.
	(vmap_ldinfo): Ditto.
	(vmap_exec): Ditto.

Tue Jul 30 17:57:46 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* stabsread.c (get_substring): Declare second arg as int.

	* remote-es.c: Include gdb_string.h after defs.h.

Mon Jul 29 21:13:20 1996  Fred Fish  <fnf@cygnus.com>

	* rs6000-tdep.c (push_arguments): Remove unused variable "pc".
	(branch_dest): Remove unused variable "offset".
	(pop_dummy_frame): Add prototype and make static.
	(push_arguments): Guard against using len uninitialized.
	(push_arguments): Guard against using arg uninitialized.
	(frame_saved_pc): Remove unused variable "frameless".
	(free_loadinfo): Ifdef out unused function.

	* xcoffread.c (compare_lte): Change prototype and function to
	be correct type for passing to qsort.
	(add_stab_to_list): Ifdef out unused function and prototype.
	(compare_lte): Add prototype
	(arrange_linetable): Ditto.
	(record_include_begin): Ditto.
	(record_include_end): Ditto.
	(process_linenos): Ditto.
	(xcoff_next_symbol_text): Ditto.
	(scan_xcoff_symtab): Ditto.
	(xcoff_initial_scan): Ditto.

	* mips-tdep.c (mips_read_processor_type): Add parens around
	bitwise-and operands in comparison; previous expression always
	evaluated to 0 because of equality comparison of two constants.

	* rs6000-tdep.c (skip_prologue): Add missing parens around
	operands of logical-or so that first operand does not bind
	to previous logical-and.

	* configure.in: Expand "long long" test to include code that triggers
	known problem on HPUX with native compiler.
	(configure): Regenerated.

Mon Jul 29 18:12:27 1996  Jeffrey A Law  (law@cygnus.com)

	* somsolib.c (som_solib_create_inferior_hook): Don't
	warn if __d_pid can't be found.

Sun Jul 28 10:46:39 1996  Fred Fish  <fnf@cygnus.com>

	* config/mips/tm-mips.h (struct frame_info): Forward decl.
	(struct type): Ditto.
	(struct value): Ditto.

	* config/mips/tm-mips.h (sigtramp_address): Move extern decl
 	from mips-tdep.c to here.
	(sigtramp_end): Ditto.
	(fixup_sigtramp): Ditto.

	* config/mips/tm-mips.h (init_extra_frame_info): Add prototype.
	(mips_frame_chain): Ditto.
	(mips_step_skips_delay): Ditto.
	(mips_frame_saved_pc): Ditto.
	(mips_find_saved_regs): Ditto.
	(mips_frame_num_args): Ditto.
	(mips_pop_frame): Ditto.
	(mips_extract_return_value): Ditto.
	(mips_store_return_value): Ditto.
	(mips_push_dummy_frame): Ditto.
	(mips_push_arguments): Ditto.
	(mips_do_registers_info): Ditto.
	(ecoff_relocate_efi): Ditto.
	(ecoff_relocate_efi): Ditto.
	* irix4-nat.c (fetch_core_registers): Add prototype.
	* mips-tdep.c (read_next_frame_reg): Add prototype
	(heuristic_proc_start): Ditto.
	(heuristic_proc_desc): Ditto.
	(mips_print_register): Ditto.
	* config/mips/nm-irix5.h (procfs_set_watchpoint): Add prototype.
	(procfs_stopped_by_watchpoint): Ditto.
	* config/mips/nm-irix4.h (procfs_set_watchpoint): Add prototype.
	(procfs_stopped_by_watchpoint): Ditto.
	* config/alpha/tm-alpha.h (ecoff_relocate_efi): Add prototype.
	(struct symbol): Add forward decl for prototype.

	* breakpoint.c (internal_breakpoint_number): Only needed if
	GET_LONGJMP_TARGET or SOLIB_ADD is defined.

	* objfiles.c (ecoff_relocate_efi): Remove prototype.

Sat Jul 27 17:47:35 1996  Fred Fish  <fnf@cygnus.com>

	* configure.in: Add test for "long long" support.
	* configure: Regenerate with autoconf.
	* acconfig.h: Add CC_HAS_LONG_LONG
	* config.in: Regenerate with autoheader.
	* config/mips/tm-mips64.h (FORCE_LONG_LONG): Remove
	* config/sparc/tm-sp64.h (CC_HAS_LONG_LONG): Remove.
	* config/mips/tm-vr4300el.h (CC_HAS_LONG_LONG): Remove.
	* config/mips/tm-vr4300.h (CC_HAS_LONG_LONG): Remove.
	* config/mips/xm-irix5.h (CC_HAS_LONG_LONG): Remove
	(PRINTF_HAS_LONG_LONG): Remove.
	(FORCE_LONG_LONG): Remove.
	* config/powerpc/xm-aix.h (UINT_MAX): Undef and use gdb's version.
	* config/convex/xm-convex.h (CC_HAS_LONG_LONG): Remove
	(PRINTF_HAS_LONG_LONG): Remove.
	* config/xm-nbsd.h (CC_HAS_LONG_LONG): Remove.
	(PRINTF_HAS_LONG_LONG): Remove.
	* config/pa/tm-hppa.h (GET_FIELD): Put parens around
	subtraction inside shift.  Put parens around subtraction
	in operand of bitwise and.
	(struct frame_info): Forward declare
 	if __STDC__ defined.
	(frame_saved_regs): Ditto.
	(struct value): Ditto.
	(struct type): Ditto.
	(struct inferior_status): Ditto.	
	(init_extra_frame_info): Add prototype.
	(skip_prologue): Ditto.
	(frameless_function_invocation): Ditto.
	(frame_chain): Ditto.
	(frame_chain_valid): Ditto.
	(saved_pc_after_call): Ditto.
	(hppa_fix_call_dummy): Ditto.	
	(hppa_push_arguments): Ditto.
	(pa_do_registers_info): Ditto.
	(in_solib_call_trampoline): Ditto.
	(in_solib_return_trampoline): Ditto.
	(push_dummy_frame): Ditto.
	* convex-tdep.c (decout): Use print_longest rather than
	fprintf_filtered.
	* defs.h: Remove use of FORCE_LONG_LONG and __GNUC__ to set
	CC_HAS_LONG_LONG.
	(INT_MIN): Fix so it works correctly when assigned to a long long.
	* valprint.c (longest_to_int): Rewrite to remove dependence
	on INT_MIN and INT_MAX.
	(print_longest): Rewrite the code that falls back to synthesized
	hex output when LONGEST value is not representable as in a long and
 	printf doesn't support printing long longs.
	* ch-valprint.c (chill_val_print): Cast 2nd arg of
	chill_print_type_scalar to LONGEST.
	chill_print_type_scalar): Make static and add prototype.
	* hppa-tdep.c (get_field): Ifdef out unused function.
	(set_field): Ditto.
	(extract_3): Ditto.
	(extract_5_store): Ditto.
	(extract_11): Ditto.
	(extract_12): Ditto.
	(deposit_17): Ditto.
	(extract_14): Convert to static and add prototype.
	(deposit_14): Ditto.
	(extract_21): Ditto.
	(deposit_21): Ditto.
	(extract_17): Ditto.
	(extract_5r_store): Ditto.
	(extract_5R_store): Ditto.
	(extract_5_load): Ditto.
	(find_proc_framesize): Ditto.
	(find_dummy_frame_regs): Ditto.
	(sign_extend): Ditto.
	(find_unwind_entry): Add prototype.
	(find_return_regnum): Ditto.
	(unwind_command): Ditto.
	(find_dummy_frame_regs): Add parens around subtraction in operand
	of bitwise-and.
	(skip_prologue): Add parens around operands of logical-and inside
	operand of logical-or.
	(sign_extend): Add parens around operands of subtraction inside
	operand of shift.
	(low_sign_extend): Ditto.
	* top.c (filename_completer): Convert old style decl of
	filename_completion_function into prototype.
	* f-lang.c (patch_common_entries): Ifdef out unused function.
	* stabsread.c (read_cfront_baseclasses): Remove unused local
	variable "msg_noterm".
	(resolve_cfront_continuation): Remove unused local variable "fip".
	(read_type): Remove unused variable xtypenums.
	(read_cfront_static_fields): Remove unused variable "i".
	(read_cfront_static_fields): Remove unused variable "nfields".
	(read_cfront_member_functions): Add missing comment terminator.
	(read_cfront_static_fields): Return 1 rather than random value.
	(read_cfront_baseclasses): Ditto.
	(read_cfront_baseclasses): Ditto.
	(read_cfront_baseclasses): Ditto.
	* somsolib.c (som_solib_create_inferior_hook): Remove unused
	variable "u".
	(som_solib_create_inferior_hook): Remove unused variable
	shadow_contents.
	(language.h): Add for needed prototypes.
	(som_solib_sharedlibrary_command): Add prototype.
	* hpread.c: (hpread_read_array_type): Add prototype.
	* somread.c (hpread_build_pysmtabs): Add prototype.
	(hpread_symfile_finish): Ditto.
	(hpread_symfile_init): Ditto.
	* hppah-nat.c (fetch_register): Convert old style decl
	to prototype.
	(gdbcore.h): Include for needed prototypes.
	(fetch_register): Remove unused variable "mess".
	* remote-pa.c (get_offsets): Ifdef out unused function.
	(remote_start_remote): Remove unused variable "timeout".
	(boot_board): Add prototype.
	(reaad_frame): Add prototype.
	(getpkt): Remove unused variable "bp".
	(remote_kill): Add prototype.
	(remote_mourn): Add prototype.
	(remote_insert_breakpoint): Add prototype.
	(remote_remove_breakpoint): Add prototype.
	* valops.c (value_push): Only use if PUSH_ARGUMENTS is not defined.
	* infcmd.c (do_registers_info): Only need prototype if
	DO_REGISTERS_INFO is not defined.
	(breakpoint_auto_delete_contents): Only need if
	CALL_DUMMY_BREAKPOINT_OFFSET is defined.

Sat Jul 27 08:49:49 1996  Fred Fish  <fnf@cygnus.com>

	* xcoffread.c (xcoff_end_psymtab): Add textlow_not_set parameter.
	(END_PSYMTAB): Ditto.
	(scan_xcoff_symtab): Call xcoff_end_psymtab with textlow_not_set.

Fri Jul 26 14:07:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* printcmd.c (_initialize_printcmd): Initialize
	tm_print_insn_info.flavour.

Thu Jul 25 19:41:31 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (scm-valprint.o): Depends upon gdbcore_h.
	(arm-tdep.o): Ditto.
	(dcache.o): Ditto.
	(i386ly-tdep.o): Ditto.
	(i960-tdep.o): Ditto.
	(m68k-tdep.o): Ditto.
	(nindy-tdep.o): Ditto.
	(scm-lang.o): Ditto.
	(w65-tdep.o): Ditto.
	(z8k-tdep.o): Ditto.
	(m68k-tdep.o): Depends upon value_h and gdb_string.h
	(m2-valprint.o): Depends upon m2-lang.h.
	(sparc-tdep.o): Depends upon gdb_string.h
	(valprint.o): Depends upon valprint.h
	
	* remote-e7000.c (notice_quit): Remove prototype.
	* top.c (initialize_targets): Remove prototype, now in target.h.
	* stabsread.c (resolve_cfront_continuation): Remove prototype.
	* dbxread.c (resolve_cfront_continuation): Remove prototype.
	* symfile.h (set_demangling_style): Remove prototype.
	* config/tm-sysv4.h (in_plt_section): Remove prototype, in objfiles.h.
	* config/sparc/tm-sparc.h (single_step): Remove extern decl, now in
 	target.h.
	* config/arc/tm-arc.h (one_stepped, single_step): Remove extern decls,
 	now in target.h.
	* ser-unix.c (hardwire_restore): Remove obsolete prototype.
	* sparc-tdep.c (single_step): Remove forward decl of isbranch.
	* scm-lang.c (find_function_in_inferior): Remove prototype.
	(value_allocate_space_in_inferior): Ditto.
	* infrun.c (write_pc_pid): Remove prototype, now in inferior.h.
	* defs.h (strchr): Remove declarations, they are declared in
 	gdb_string.h also.
	(strrchr): Ditto.
 	(strstr): Ditto.
 	(strtok): Ditto.
 	(strerror): Ditto.
	* f-valprint.c (f77_print_array_1): Remove extra arg that was being
	passed to f77_print_array_1.
	* gdbtypes.c (add_name): Remove unused variables lenstrlen and lenstr.
	* scm-exp.c (scm_istr2int): Remove unused variable "j".
	(scm_parse): Remove unused variable "str".
	* hp300ux-nat.c (store_inferior_register): Remove unused variable
 	"buf".
	(store_inferior_registers): Remove unnecessary decl "registers".
	* m68k-tdep.c (m68k_pop_frame): Remove unused variable "fi".
	* scm-lang.c (scm_get_field): Remove unused variable "val".
	(scm_lookup_name): Remove unused variable "symval".
	* objfiles.c (map_to_file): Remove unused local variable "tempfd".
	* procfs.c (do_attach, do_detach): Remove unused variable "result".
	(last_resume_pid): Remove unused static variable.
	* alpha-tdep.c (alpha_linux_sigtramp_offset): Remove unused variable
	"res".
	* objfiles.c (map_to_address): Remove unused function.
	* f-valprint.c (print_max): Remove extraneous extern decl,
 	in valprint.h.
	(calc_f77_array_dims): Remove extraneous prototype, in f-lang.h.
	* ch-exp.c (write_lower_upper_value): Remove prototype for
	type_lower_upper.

	* gdbtypes.c (cfront_mangle_name): #ifdef out unused function.
	* ch-exp.c (parse_mode_call): Ditto.
	* f-valprint.c (there_is_a_visible_common_named): Ditto.
	* f-lang.c (clear_function_list): Ditto.
	(get_bf_for_fcn): Ditto.
 	(clear_bf_list): Ditto.
 	(add_common_block): Ditto.
	(patch_all_commons_by_name): Ditto.
 	(find_first_common_named): Ditto.
 	(add_common_entry): Ditto.
	(allocate_saved_function_node): Ditto.
 	(allocate_saved_bf_node): Ditto.
	(allocate_common_entry_node): Ditto.
	(allocate_saved_f77_common_node): Ditto.
	
	* arm-tdep.c (gdbcore.h): Include for necessary prototypes.
	* dcache.c (gdbcore.h): Ditto.
	* i386ly-tdep.c (gdbcore.h): Ditto.
	* i960-tdep.c (gdbcore.h): Ditto.
	* m2-valprint.c (m2-lang.h): Ditto.
	* m68k-tdep.c (gdbcore.h): Ditto.
	(value.h): Ditto.
	(gdb_string.h): Ditto.
	* nindy-tdep.c (gdbcore.h): Ditto.
	* scm-lang.c (gdbcore.h): Ditto.
	* scm-valprint.c (gdbcore.h): Ditto.
	* w65-tdep.c (gdbcore.h): Ditto.
	* z8k-tdep.c (gdbcore.h): Ditto.
	* sparc-tdep.c (gdb_string.h): Include.
	* valprint.c (valprint.h): Include.

	* config/xm-lynx.h: Remove part of comment about INT_MIN
	redefined warnings from defs.h, since INT_MIN define in
	defs.h is now protected by #ifndef INT_MIN.
	* config/i386/xm-i386bsd.h: Ditto.
	* config/m68k/xm-hp300bsd.h: Ditto.
	* config/m68k/xm-news.h: Ditto.

	* config/pa/xm-hppah.h (INT_MIN): Remove bogus INT_MIN
	definition as 0x80000000.  The macro in defs.h is better.
	* config/i386/xm-i386m3.h (INT_MIN): Ditto.
	* config/i386/xm-i386mach.h (INT_MIN): Ditto.
	* config/ns32k/xm-ns32km3.h (INT_MIN): Ditto.
	* config/pa/xm-hppab.h: Ditto.

	* core-aout.c (fetch_core_registers): Add prototype.
	* hp300ux-nat.c (fetch_inferior_register): Ditto.
	(store_inferior_register_1): Ditto.
	(store_inferior_register): Ditto.
	* config/m68k/tm-m68k.h (find_saved_regs): Ditto.
	*scm-valprint.c (c_val_print): Ditto.
	* procfs.c (add_fd): Ditto.
	(remove_fd): Ditto.
	(wait_fd): Ditto.
	(sigcodename): Ditto.
	(sigcodedesc): Ditto.
	(procfs_kill_inferior): Ditto.
	(procfs_xfer_memory): Ditto.
 	(procfs_store_registers): Ditto.
	(create_procinfo): Ditto.
 	(procfs_init_inferior): Ditto.
 	(proc_set_exec_trap): Ditto.
	(procfs_attach): Ditto.
 	(procfs_detach): Ditto.
 	(procfs_prepare_to_store): Ditto.
	(procfs_files_info): Ditto.
 	(procfs_open): Ditto.
 	(procfs_wait): Ditto.
 	(procfs_fetch_registers): Ditto.
	(procfs_mourn_inferior): Ditto.
 	(procfs_can_run): Ditto.
 	(procfs_thread_alive): Ditto.
	(procfs_stop): Ditto.
	* alpha-nat.c (fetch_core_registers): Ditto.
	* config/alpha/tm-alpha.h (alpha_osf_skip_sigtramp_frame): Ditto.
	* objfiles.c (ecoff_relocate_efi): Ditto.
	* inflow.c (pass_signal): Ditto.
	(handle_sigio): Ditto.
	* annotate.c (breakpoint_changed): Ditto.
	* callback.c (wrap): Ditto.
	(fdbad): Ditto.
 	(fdmap): Ditto.
	* utils.c (malloc_botch): Ditto.
	(fputs_maybe_filtered): Ditto.
	(vfprintf_maybe_filtered): Ditto.
	* defs.h (notice_quit): Ditto.
	* defs.h (xmalloc, xrealloc): Ditto.
	* top.c (stop_sig): Ditto.
	(init_signals): Ditto.
 	(user_defined_command): Ditto.
 	(source_cleanup_lines): Ditto.
	(dont_repeat_command): Ditto.
	(serial_log_command): Ditto.
	(disconnect): Ditto.
	* target.h (initialize_targets): Ditto.
	* os9kread.c (read_minimal_symbols): Ditto.
	* mdebugread.c (mdebug_psymtab_to_symtab): Ditto.
	(fdr_name): Ditto.
 	(push_parse_stack): Ditto.
	(pop_parse_stack): Ditto.
 	(is_pending_symbol): Ditto.
 	(add_pending): Ditto.
	* serial.c (serial_logchar): Ditto.
	(serial_interface_lookup): Ditto.
	* serial.h (serial_log_command): Ditto.
	* f-valprint.c (info_common_command): Ditto.
	* gdbtypes.h (print_type_scalar): Ditto.
	* scm-valprint.c (scm_scmlist_print): Ditto.
	(scm_ipruk): Ditto.
	* scm-lang.c (scm_printstr): Ditto.
	(in_eval_c): Ditto.
 	(evaluate_subexp_scm): Ditto.
	* scm-exp.c (scm_read_token): Ditto.
	(scm_skip_ws): Ditto.
 	(scm_lreadparen): Ditto.
	* m2-lang.c (emit_char): Ditto.
	(m2_printchar): Ditto.
 	(m2_printstr): Ditto.
	(m2_create_fundamental_type): Ditto.
	* f-lang.c (emit_char): Ditto.
	(f_printchar): Ditto.
 	(f_printstr): Ditto.
	(f_create_fundamental_type): Ditto.
	* ch-lang.c (chill_printchar): Ditto.
	(chill_printstr): Ditto.
	(chill_create_fundamental_type): Ditto.
 	(value_chill_length): Ditto.
 	(value_chill_card): Ditto.
	(value_chill_max_min): Ditto.
 	(evaluate_subexp_chill): Ditto.
	* ch-exp.c (PEEK_TOKEN): Ditto.
	(peek_token_): Ditto.
 	(forward_token_): Ditto.
 	(parse_case_label): Ditto.
	(parse_opt_untyped_expr): Ditto.
 	(parse_unary_call): Ditto.
 	(parse_call): Ditto.
	(parse_named_record_element): Ditto.
 	(parse_tuple_element): Ditto.
	(parse_opt_element_list): Ditto.
 	(parse_tuple): Ditto.
 	(parse_primval): Ditto.
 	(parse_operand6): Ditto.
	(parse_operand5): Ditto.
 	(parse_operand4): Ditto.
 	(parse_operand3): Ditto.
 	(parse_operand2): Ditto.
	(parse_operand1): Ditto.
 	(parse_operand0): Ditto.
 	(parse_expr): Ditto.
 	(parse_then_alternative): Ditto.
	(parse_else_alternative): Ditto.
 	(parse_if_expression): Ditto.
 	(parse_untyped_expr): Ditto.
	(growbuf_by_size): Ditto.
 	(match_simple_name_string): Ditto.
 	(decode_integer_value): Ditto.
	(decode_integer_literal): Ditto.
 	(match_float_literal): Ditto.
 	(match_float_literal): Ditto.
	(match_string_literal): Ditto.
 	(match_character_literal): Ditto.
 	(match_integer_literal): Ditto.
	(match_bitstring_literal): Ditto.
 	(write_lower_upper_value): Ditto.
	* ch-lang.h (type_lower_upper): Ditto.
	* c-lang.c (emit_char): Ditto.
	* dwarfread.c (free_utypes): Ditto.
	* stabsread.h (resolve_cfront_continuation): Ditto.
	* stabsread.c (get_substring): Ditto.
	(read_one_struct_field): Ditto.
	* stabsread.h (process_later): Ditto.
	* demangle.c (set_demangling_command): Ditto.
	* defs.h (set_demangling_style): Ditto.
	* maint.c (maintenance_info_command): Ditto.
	(print_section_table): Ditto.
	(maintenance_info_sections): Ditto.
 	(maintenance_print_command): Ditto.
	* symtab.h (maintenance_print_statistics): Ditto.
	* objfiles.h (in_plt_section): Ditto.
	* objfiles.c (add_to_objfile_sections): Ditto.
	* bcache.c (hash): Ditto.
	(lookup_cache): Ditto.
	* exec.c (bfdsec_to_vmap): Ditto.
	(ignore): Ditto.
	* f-exp.y (growbuf_by_size, match_string_literal): Ditto.
	* language.c (unk_lang_printchar): Ditto.
	(unk_lang_printstr): Ditto.
	(unk_lang_create_fundamental_type): Ditto.
 	(unk_lang_print_type): Ditto.
	(unk_lang_val_print): Ditto.
 	(unk_lang_value_print): Ditto.
	* target.c (update_current_target): Ditto.
	(debug_to_open): Ditto.
 	(debug_to_close): Ditto.
	(debug_to_attach): Ditto.
 	(debug_to_detach): Ditto.
 	(debug_to_resume): Ditto.
 	(debug_to_wait): Ditto.
	(debug_to_fetch_registers): Ditto.
 	(debug_to_store_registers): Ditto.
 	(debug_to_prepare_to_store): Ditto.
 	(debug_to_xfer_memory): Ditto.
 	(debug_to_files_info): Ditto.
 	(debug_to_insert_breakpoint): Ditto.
	(debug_to_remove_breakpoint): Ditto.
 	(debug_to_terminal_init): Ditto.
	(debug_to_terminal_inferior): Ditto.
 	(debug_to_terminal_ours_for_output): Ditto.
	(debug_to_terminal_ours): Ditto.
 	(debug_to_terminal_info): Ditto.
 	(debug_to_kill): Ditto.
	(debug_to_load): Ditto.
 	(debug_to_lookup_symbol): Ditto.
 	(debug_to_create_inferior): Ditto.
	(debug_to_mourn_inferior): Ditto.
 	(debug_to_can_run): Ditto.
 	(debug_to_notice_signals): Ditto.
	(debug_to_thread_alive): Ditto.
 	(debug_to_stop): Ditto.
	* breakpoint.h (set_breakpoint_sal): Ditto.
	* remote-utils.c (usage): Ditto.
	* remote.c (set_thread): Ditto.
	(remote_thread_alive): Ditto.
	(get_offsets): Ditto.
	(read_frame): Ditto.
	(remote_insert_breakpoint): Ditto.
	(remote_remove_breakpoint): Ditto.
	* sparc-nat.c (fetch_core_registers): Ditto.
	* corelow.c (add_to_thread_list): Ditto.
	(ignore): Ditto.
	* inftarg.c (proc_wait): Ditto.
	* infptrace.c (udot_info): Ditto.
	(fetch_register): Ditto.
	* ser-unix.c (hardwire_noflush_set_tty_state): Ditto.
	(hardwire_print_tty_state): Ditto.
	(hardwire_flush_output): Ditto.
	(hardwire_flush_input): Ditto.
	(hardwire_send_break): Ditto.
	(hardwire_setstopbits): Ditto.
	* ser-tcp.c (tcp_return_0): Ditto.
	(tcp_noflush_set_tty_state): Ditto.
	(tcp_print_tty_state): Ditto.
	* solib.c (match_main): Ditto.
	* gdbtypes.c (print_bit_vector): Ditto.
	(print_arg_types): Ditto.
	(dump_fn_fieldlists): Ditto.
	(print_cplus_stuff): Ditto.
	* symfile.h (entry_point_address): Ditto.
	* symfile.c (decrement_reading_symtab): Ditto.
	* valops.c (value_arg_coerce): Ditto.
	* value.h (find_function_in_inferior): Ditto.
	(value_allocate_space_in_inferior): Ditto.
	* values.c (vb_match): Ditto.
	* thread.c (info_thread_command): Ditto.
	(restore_current_thread): Ditto.
	(thread_apply_all_command): Ditto.
	(thread_apply_command): Ditto.
	* inferior.h (write_pc_pid): Ditto.
	* infrun.c (delete_breakpoint_current_contents): Ditto.
	* breakpoint.c (print_it_normal): Ditto.
	(watchpoint_check): Ditto.
	(print_it_done): Ditto.
	(print_it_noop): Ditto.
	(maintenance_info_breakpoints): Ditto.
	(create_longjmp_breakpoint): Ditto.
	(hbreak_command): Ditto.
	(thbreak_command): Ditto.
	(watch_commnd_1): Ditto.
	(rwatch_command): Ditto.
	(awatch_command): Ditto.
	(do_enable_breakpoint): Ditto.
	* ch-valprint.c (chill_val_print_array_elements): Ditto.
	* eval.c (evaluate_subexp): Ditto.
	(get_label): Ditto.
	(evaluate_struct_tuple): Ditto.
	* eval.c (init_array_element): Ditto.

	* alpha-tdep.c (push_sigtramp_desc): Add prototype and make static.
	* breakpoint.c (hw_breakpoint_used_count): Ditto.
	(hw_watchpoint_used_count): Ditto.
	* findvar.c (write_register_gen): Ditto.
	(read_register_pid): Ditto.
	* symtab.c (cplusplus_hint): Ditto.
	* infcmd.c (breakpoint_auto_delete_contents): Ditto.
	* ch-valprint.c (chill_print_type_scalar): Ditto.
	* gdbtypes.c (add_name): Ditto.
	(add_mangled_type): Ditto.
	(cfront_mangle_name): Ditto.
	* sparc-tdep.c (isbranch): Ditto.
	* inftarg.c (child_stop): Ditto.
	* win32-nat.c (child_stop): Ditto.
	* mac-nat.c (child_stop): Ditto.
	* remote-utils.c (sr_com): Ditto.
	* dbxread.c (process_now): Ditto.
	* ch-exp.c (require): Ditto.
	(check_token): Ditto.
	(expect): Ditto.
	(parse_mode_call): Ditto.
	(parse_mode_or_normal_call): Ditto.
	* scm-lang.c (scm_lookup_name): Ditto
	* f-lang.c (allocate_saved_bf_node): Ditto.
	(allocate_saved_function_node): Ditto.
	(allocate_saved_f77_common_node): Ditto.
 	(allocate_common_entry_node): Ditto.
	(add_common_block): Ditto.
 	(add_common_entry): Ditto.
 	(find_first_common_named): Ditto.
	(patch_common_entries): Ditto.
 	(patch_all_commons_by_name): Ditto.
 	(clear_bf_list): Ditto.
	(get_bf_for_fcn): Ditto.
 	(clear_function_list):  Ditto.
	* scm-exp.c (scm_istr2int): Ditto.
	(scm_istring2number): Ditto.
	* scm-valprint.c (scm_inferior_print): Ditto.
	* f-typeprint.c (print_equivalent_f77_float_type): Ditto.
	* f-valprint.c (f77_get_dynamic_length_of_aggregate): Ditto.
	(f77_create_arrayprint_offset_tbl): Ditto.
 	(f77_print_array_1): Ditto.
 	(f77_print_array): Ditto.
	(list_all_visible_commons): Ditto.
 	(there_is_a_visible_common_named): Ditto.
	* mdebugread.c (ecoff_relocate_efi): Ditto.
	* callback.c (os_close): Ditto.
	(os_get_errno): Ditto.
 	(os_isatty): Ditto.
 	(os_lseek): Ditto.
 	(os_open): Ditto.
	(os_read): Ditto.
 	(os_read_stdin): Ditto.
 	(os_write): Ditto.
 	(os_write_stdout): Ditto.
 	(os_rename): Ditto.
	(os_system): Ditto.
 	(os_time): Ditto.
 	(os_unlink): Ditto.
 	(os_shutdown): Ditto.
 	(os_init): Ditto.
	(os_printf_filtered): Ditto.

	* scm-lang.h (scm_parse): Change old style decl to prototype.
	* config/alpha/tm-alphalinux.h (alpha_linux_sigtramp_offset): Ditto.
	* top.c (init_proc): Ditto.
	(query_hook): Ditto.
	(error_hook): Ditto.
	* f-lang.c (c_value_print): Ditto.
	* ch-exp.c (parse_expression): Ditto.
	(parse_primval): Ditto.
 	(parse_untyped_expr): Ditto.
	(parse_opt_untyped_expr): Ditto.
 	(ch_lex): Ditto.
	* config/sparc/tm-sparc.h (sparc_init_extra_frame_info): Ditto.
	(sparc_frame_saved_pc): Ditto.
	(sparc_push_dummy_frame): Ditto.
	(sparc_pop_frame): Ditto.
	* defs.h (fclose): Ditto.
	(atof): Ditto.
 	(error_hook): Ditto.

	* arc-tdep.c (single_step): Change arg to type "enum target_signal".
	* rs6000-tdep.c (single_step): Ditto.
	* sparc-tdep.c (single_step): Ditto.

	* breakpoint.c (cleanup_executing_breakpoints): Change unused arg type
	to PTR which is what make_cleanup expects.
	* utils.c (null_cleanup): Change arg type to PTR.
	* defs.h (null_cleanup): Change prototype to match actual function.
	* config/sparc/tm-sparc.h (struct frame_info): Move forward decl.
	* ch-valprint.c (chill_val_print): Cast 2nd arg of
	chill_print_type_scalar to LONGEST.
	* infrun.c (wait_for_inferior): Have empty switch case for
	BPSTAT_WHAT_CHECK_SHLIBS when SOLIB_ADD is not defined.
	(stop_on_solib_events): Only needed if SOLIB_ADD is defined.
	* infcmd.c (attach_command): Only need auto_solib_add if SOLIB_ADD
	is defined.
	* symfile.c (generic_load): Scan long int using a long int spec,
	not an int spec.
	* infptrace.c (udot_info): Only need local variables if	KERNEL_U_SIZE
 	is defined.
	(fetch_register): Only need function if FETCH_INFERIOR_REGISTERS is
 	not defined.
	* inflow.c (handle_sigio): Only need prototype when the actual
	function is compiled in.
	* valprint.c (longest_to_int): Expand error message to be
	separate messages for args larger than largest signed int
	and args smaller than smallest signed int.
	* valprint.c (print_longest): Fix problems with support for case
	where compiler supports type "long long" but the runtime doesn't
	support printing them with "%ll".
	* scm-valprint.c (scm_scmlist_print, scm_scmval_print): Change
 	return types to void since we don't actually return anything
 	meaningful and callees ignore the values anyway.
	* procfs.c (modify_inherit_on_fork_flag): Enclose pr_flags in PIOCSET
	ifdef.
	(modify_run_on_last_close_flag): Ditto.
	(wait_fd): Enclose local variables "num_fds" and "i" LOSING_POLL
	ifdef
	* alpha-tdep.c (push_sigtramp_desc): Return proc_desc rather than
 	random value.
	* infrun.c (wait_for_inferior): Ensure random_signal is not used
	uninitialized.
	* valops.c (call_function_by_hand): Ensure struct_addr is not used
	uninitialized.
	* breakpoint.c (watch_command_1): Ensure prev_frame is not used
	uninitialized.
	* utils.c (vfprintf_maybe_filtered): Change second arg from "char *"
	to "const char *".
	* infptrace.c (udot_info): Add two dummy args so that the type is
	correct for passing to add_info.
	* f-lang.c (saved_fcn): Move decl to head of file so it can be used
 	in prototypes.
 	(saved_bf_symnum): Ditto.
 	(SAVED_FUNCTION): Ditto.
	(SAVED_FUNCTION_PTR): Ditto.
 	(SAVED_BF): Ditto.
 	(SAVED_BF_PTR): Ditto.
	* ch-exp.c (parse_named_record_element): Build error message in
	temporary buffer before passing it to expect, rather than passing
	wrong number of args to expect.
	* demangle.c (set_demangling_style): Call set_demangling_command with
	correct number of arguments.
	* inferior.h (terminal_init_inferior_with_pgrp): Change arg type to
	int to match actual function.
	(os_isatty): Call fdmap with right number of arguments, was missing
	the host_callback* arg.
	* target.c (cleanup_target): Prototype all functions casts.
	* target.h (one_stepped, single_step): Declare here and convert
	single_step to prototype.
	* infrun.c (one_stepped, single_step): Don't declare externs
	here, they have moved to target.h.
 	* eval.c (init_array_element): Declare previously undeclared
	last two args as LONGEST.
	* dcache.c (dcache_xfer_memory):  Change xfunc decls to prototype form.

Thu Jul 25 16:11:54 1996  Doug Evans  <dje@canuck.cygnus.com>

	* dsrec.c (load_srec): Protect ANSI style function parms with PARAMS.

Mon Jul 22 18:13:27 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in (os9kread.o):  Remove dependency on partial-stab.h.
	* dbxread.c (read_dbx_symtab end_psymtab), partial-stab.h:  Don't
	use partial_symtab->textlow==0 as a flag, as 0 is a legitimate
	text address.  Use a seperate flag (textlow_not_set) instead.
	This makes stabs in ELF .o files work a lot better.
	* mdebugread.c xcoffread.c:  Define textlow_not_set for
	partial-stab.h.
	* stabsread.h (end_psymtab):  Add textlow_not_set arg to prototype.

Sat Jul 20 10:41:06 1996  Fred Fish  <fnf@cygnus.com>

	* dwarf2read.c (struct filenames): Change internal "struct file"
	to "struct fileinfo" to avoid conflict with "struct file" in
	<sys/file.h> on HPUX and Solaris.

Fri Jul 19 14:05:57 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* dwarf2read.c: New file, DWARF 2 reader originally contributed by
	Brent Benson, with additions by Gary Funck and Jerry Kreuscher.
	* Makefile.in (COMMON_OBS): Add dwarf2read.o.
	(SFILES): Add dwarf2read.c.
	(dwarf2read.o): Add build rule.
	* symfile.h (dwarf2_has_info, dwarf2_build_psymtabs): Declare
	exported functions.
	* elfread.c (elf_symfile_read): Call them.
	(elf_symtab_read) [HARRIS_TARGET]: Skip some special symbols.

Thu Jul 18 01:22:01 1996  Geoffrey Noer  <noer@cygnus.com>

	* symfile.c (symfile_bfd_open): 
	* exec.c (exec_file_command): for __GO32__ and __WIN32__ systems,
	free the user from having to type the .exe extension.

Wed Jul 17 06:54:50 1996  Mark Alexander  <marka@cygnus.com>

	* mon960-rom.c: Shorten the mon960_inits string to a single
	carriage return; this prevents a hang on connecting immediately
	after powerup, when MON960 is attempting autobaud detection.

Tue Jul 16 23:47:04 1996  Mark Alexander  <marka@cygnus.com>

	* a29k-tdep.c (get_saved_register): Allow PC to be modified
	when innermost frame is selected, but not in outer frames.

Tue Jul 16 23:37:25 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* command.c (do_setshow_command):  Don't segfault when showing
	var_string and var_string_noescape vars that are NULL.

Mon Jul 15 16:55:48 1996  Doug Evans  <dje@canuck.cygnus.com>

	* win32-nat.c (handle_load_dll): dos_path_to_unix_path renamed to
	cygwin32_conv_to_posix_path.
	(child_create_inferior): unix_path_to_dos_path renamed to
	cygwin32_conv_to_win32_path.  Rewrite code to translate PATH.

Mon Jul 15 16:44:05 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* defs.h printcmd.c:  Create global disassemble_info structure
	tm_print_insn_info.
	* i386-tdep.c (set_assembly_language_command):  set
	tm_print_insn_info.mach to the appropriate value for 386 or 8086
	disassembly.
	* printcmd.c (print_insn):  Move init of disassembler_info to
	_initialize_printcmd.  Set endian for disassembler here.
	* sparc-tdep.c:  Set tm_print_insn_info.mach as appropriate to
	select sparc/sparclite.
	* config/sparc/{tm-sparc.h tm-sparclite.h}:  Get rid of
	TM_PRINT_INSN.  Set TM_PRINT_INSN_MACH to
	bfd_mach_sparc/bfd_mach_sparc_sparclite.

Fri Jul 12 19:04:32 1996  Fred Fish  <fnf@cygnus.com>

	* hpread.c (hpread_lookup_type): Use xmmalloc/xmrealloc rather
	than xmalloc/xrealloc.

Fri Jul 12 17:59:47 1996  Fred Fish  <fnf@cygnus.com>

	* objfiles.c (map_to_file): Error return from mmalloc_findbase is
	a NULL pointer, not a -1.

Fri Jul 12 10:16:24 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* i386-tdep.c (set_assembly_language_command):  New routine to
	select between i386 and i8086 instruction sets for disassembly.
	New command `set assembly-language {i386 i8086}'.

Thu Jul 11 21:13:21 1996  Mark Alexander  <marka@cygnus.com>

	* monitor.c (monitor_write_memory, monitor_read_memory_single):
	Disable use of "long long" memory read/write commands; can't
	use them because we hold the values to read/write in an int
	variable, and because strtoul fails on values that exceed the
	size of a long.  This fixes breakpoint problems on MON960.

Thu Jul 11 11:39:31 1996  Fred Fish  <fnf@cygnus.com>

	* config/m68k/xm-hp300hpux.h (HAVE_MMAP): Remove definition.
	* config/pa/xm-hppah.h (HAVE_MMAP): Ditto.

Wed Jul 10 16:54:41 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (MMALLOC_CFLAGS): Eliminate intermediate MMALLOC_DISABLE
	and MMALLOC_CHECK macros, and add comment indicating how host dependent
	makefile fragment should modify MMALLOC_CFLAGS to not use mmalloc, or
	to use it but to not do heap corruption checking.
	* gdbserver/Makefile.in: Ditto.
	* utils.c (init_malloc): Replace warning() use with direct call of
	fprintf_unfiltered, since current_target has not yet been set and thus
 	we cannot use warning().  If we try to use mmcheck and it fails,
	suggest that this configuration needs NO_MMCHECK or MMCHECK_FORCE
 	defined.  Other small mmalloc related cleanups.
	* config/sparc/sun4os4.mh (MMALLOC_CFLAGS): Define MMCHECK_FORCE to 1.
	* config/alpha/alpha-osf2.mh (MMALLOC_CFLAGS): Set to -DNO_MMCHECK.

	* config/sparc/xm-sun4os4.h (MMAP_BASE_ADDRESS, MMAP_INCREMENT):
	* config/i386/xm-i386v4.h (MMAP_BASE_ADDRESS, MMAP_INCREMENT): 
	* config/i386/xm-linux.h (MMAP_BASE_ADDRESS, MMAP_INCREMENT):
	* config/m68k/xm-hp300hpux.h (MMAP_BASE_ADDRESS, MMAP_INCREMENT):
	* config/m68k/xm-m68kv4.h (MMAP_BASE_ADDRESS, MMAP_INCREMENT);
	* config/m68k/xm-sun3os4.h (MMAP_BASE_ADDRESS, MMAP_INCREMENT):
	* config/pa/xm-hppah.h (MMAP_BASE_ADDRESS, MMAP_INCREMENT):
	* config/sparc/xm-sun4sol2.h (MMAP_BASE_ADDRESS, MMAP_INCREMENT):
	Remove obsolete defines.

	* config/alpha/alpha-linux.mh (MMALLOC_DISABLE):
	* config/alpha/alpha-osf1.mh (MMALLOC_DISABLE):
	* config/rs6000/rs6000.mh (MMALLOC_DISABLE):
	* config/rs6000/aix4.mh (MMALLOC_DISABLE):
	* config/powerpc/aix4.mh (MMALLOC_DISABLE):
	* config/powerpc/aix.mh (MMALLOC_DISABLE):
	* config/ns32k/ns32km3.mh (MMALLOC_DISABLE):
	* config/mips/mipsm3.mh (MMALLOC_DISABLE):
	* config/mips/decstation.mh (MMALLOC_DISABLE):
	* config/m88k/cxux.mh (MMALLOC_DISABLE):
	* config/i386/i386mk.mh (MMALLOC_DISABLE):
	* config/i386/i386m3.mh (MMALLOC_DISABLE):
	* config/i386/i386gnu.mh (MMALLOC_DISABLE):
	Use MMALLOC_CFLAGS instead.

Tue Jul  9 22:41:12 1996  Jeffrey A Law  (law@cygnus.com)

	* h8300-tdep.c: Remove some outdated comments.
	(h8300_skip_prologue): Rework to be more correct for the H8/300H.
	Handle stm.l insns for the H8/S.
	(examine_prologue): Likewise.

Tue Jul  9 16:48:55 1996  Raymond Jou  <rjou@mexican.cygnus.com>

	* ser-mac.c (mac_close): Change a typo SetSetBuf to SerSetBuf.

Mon Jul 08 08:50:39 1996  Mark Alexander  <marka@cygnus.com>

	* mon960-rom.c (mon960_open): Add floating point detection to
	prevent hang on non-FPU processors (PR 9775).
	(mon960_cmds): Swap setmem.cmdw and setmem.cmdl to fix problem
	setting breakpoints and improve loading speed.

Sun Jul  7 14:57:34 1996  Fred Fish  <fnf@cygnus.com>

	* coffread.c (record_minimal_symbol): Don't presave name string
	on symbol_obstack before passing to prim_record_minimal_symbol.
	It now handles saving the string itself.
	* dbxread.c (read_dbx_dynamic_symtab): Ditto.
	* mipsread.c (read_alphacoff_dynamic_symtab): Ditto.
	* os9kread.c (record_minimal_symbol): Ditto.
	* solib.c (solib_add_common_symbols): Ditto.

	* coffread.c (coff_symtab_read): Don't presave name string on
	symbol_obstack before passing to prim_record_minimal_symbol_and_info.
	It now handles saving the string itself.
	* dbxread.c (record_minimal_symbol): Ditto.
	* elfread.c (record_minimal_symbol_and_info): Ditto.
	
	* dstread.c (record_minimal_symbol): Remove static function that just
	called prim_record_minimal_symbol with the same args (after change to
 	prim_record_minimal_symbol to do it's own name string saves).
	* nlmread.c (record_minimal_symbol): Ditto.
	* somread.c (record_minimal_symbol): Ditto.

	* hpread.c (hpread_read_enum_type): Save symbol name on symbol obstack.
	(hpread_read_function_type): Ditto.
	(hpread_process_one_debug_symbol): Ditto.
	* mdebugread.c (parse_symbol): Ditto.
	(new_symbol): Ditto.
	* minsyms.c (prim_record_minimal_symbol_and_info): Ditto.

	* coffread.c (process_coff_symbol): Use obsavestring to save
	SYMBOL_NAME, rather than obstack_copy0.
	* dstread.c (create_new_symbol): Ditto
	* symfile.c (obconcat): Ditto.
	* stabsread.c (patch_block_stabs): Ditto.
	* xcoffread.c (SYMNAME_ALLOC): Ditto.

	* symfile.c (obsavestring): Update comments
	* solib.c (solib_add_common_symbols): Remove local var origname.

Wed Jul  3 15:56:08 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* configure:  Re-build with autoconf-2.10.

	* sparcl-tdep.c (_initialize_sparc_tdep) config/sparc/tm-sparc.h,
	config/sparc/tm-sparclite.h:  Initialize tm_print_insn from
	TM_PRINT_INSN, which comes from the tm file.

Tue Jul 02 21:41:20 1996  Mark Alexander  <marka@cygnus.com>

	* coffread.c, dbxread.c, elfread.c, mipsread.c, nlmread.c, 
	os9kread.c: Replace identical sym_offsets functions with
	default_symfile_offsets.
	* somread.c (som_symfile_offsets): Use new SIZEOF_SECTION_OFFSETS
	macro to allocate section_offsets.
	* symfile.c (default_symfile_offsets): New function.
	* symfile.h: Declare default_symfile_offsets.
	* symtab.h: Define SIZEOF_SECTION_OFFSETS macro to
	simplify allocation of section_offsets.

Tue Jun 11 12:02:55 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in (INTERNAL_LDFLAGS):  Add in flags from configure.
	* configure configure.in:  Only make sol-thread.o for native.
	Also, switch to dlopened libthread_db.so.1.
	* sol-thread.c:  Switch to using dlopen to get the thread_db
	library.

Thu Jun 13 16:53:25 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* configure, configure.in:  Change test for libthread_db to only
	work for configs where build/host/target are the same.

Tue Jul  2 15:04:20 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/powerpc/{linux.mh,xm-linux.h}: New files, for Linux on
	PowerPC.

	* configure.in (powerpc-*-linux): Add Linux, System V, and ELF
	support.
	* configure: Regenerate.

Mon Jul  1 13:00:43 1996  Stan Shebs  <shebs@andros.cygnus.com>

	From Raymond Jou  <rjou@mexican.cygnus.com>:
        * mpw-make.sed: Add lines to whack out autoconf hook
        @CONFIG_LDFLAGS@.

Mon Jul 01 11:07:15 1996  Mark Alexander  <marka@cygnus.com>

	* remote-e7000.c (e7000_stop): New function.

Fri Jun 28 06:34:19 1996  Dawn Perchik  <dawn@cygnus.com>

	* configure, configure.in: Add target sparclet.
	* monitor.h, monitor.c: Added monitor flags MO_NO_ECHO_ON_SETMEM
 	(don't expect echo on setmem command), MO_RUN_FIRST_TIME (if
 	command to start process running on target is different from one
 	to continue execution), MO_HEX_PREFIX (if addresses from monitor
 	have a "0x" prefix).
	* monitor.c, parse.c, sparc-tdep.c: Don't require strings in the
 	registers array.  This is to allow NULLs to be place holders in
 	the tm-*.h file so that only minor changes are needed when a new
 	processor is introduced (eg, one without floating point).
	* sparc-tdep.c: Conditionally remove dependancies on floating
 	point.
  	* sparclet-rom.c, config/sparc/sparclet.mt,
 	config/sparc/tm-sparclet.h: New files for target sparclet.
	* symfile.c (load_command): Add option for 2nd parameter; a load
 	offset added to the vma of each section.

Fri Jun 28 05:39:19 1996  Dawn Perchik  <dawn@cygnus.com>

        * main.c (main): Add option "l" for setting remote_timeout.

Fri Jun 28 05:25:18 1996  Dawn Perchik  <dawn@cygnus.com>

        * remote-e7000.c, remote.c, target.h, top.c: Add set option
 	"remote_timeout" for setting remote_timeout.  Add set option
 	"use_hard_breakpoints" for setting hardware .vs. memory
 	breakpoints.

Fri Jun 28 04:32:18 1996  Dawn Perchik  <dawn@cygnus.com>

        * remote-e7000.c (e7000_parse_device): New function.
	Add option "tcp_remote" to target command if using 
	tcp to connect to a remote host which is then connected 
	via serial port to the e7000 (for exampole, a port master).
	(e7000_open): Change to call e7000_parse_device.

Fri Jun 28 03:47:17 1996  Dawn Perchik  <dawn@cygnus.com>

	* monitor.c (monitor_debug): Fix remotedebug buffering.

Thu Jun 27 18:24:17 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* config/i386/cygwin32.mh, config/powerpc/cygwin32.mh
	(NATDEPFILES): Add a space.

Wed Jun 26 06:05:39 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* gdbtypes.c (create_array_type): If TYPE_LENGTH (result_type)
	is zero, set TYPE_FLAG_TARGET_STUB to force reevaluation of the type.

	* ch-exp.c (calculate_array_length): Function removed.

Tue Jun 25 17:41:06 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* remote-e7000.c (e7000_read_inferior_memory_large): New function.
	(e7000_xfer_inferior_memory): Call it.

Tue Jun 25 23:14:07 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* gdbserver/Makefile.in (docdir): Removed.

Tue Jun 25 22:05:38 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir):
	Use autoconf set values.
	(docdir): Removed.
	* configure.in (AC_PREREQ): autoconf 2.5 or higher.
	* nlm/Makefile.in (bindir, libdir, datadir, mandir, infodir, 
	includedir): Use autoconf set values.
	(docdir): Removed.
	* nlm/configure.in (AC_PREREQ): autoconf 2.5 or higher.
	* nlm/configure: Rebuilt.
        * gdbserver/Makefile.in (datadir): Set to $(prefix)/share.

Mon Jun 24 09:56:14 1996  Angela Marie Thomas (angela@cygnus.com)

	* stabsread.c (read_cfront_member_functions): add type

Sun Jun 23 23:40:48 1996  Doug Evans  <dje@canuck.cygnus.com>

	* win32-nat.c: #include <unistd.h>.
	(unix_paths_to_dos_paths, dos_paths_to_unix_paths): Delete.
	(child_create_inferior): Convert only env var PATH to win32 style.
	(set_pathstyle_dos): Delete.
	(_initialize_inftarg): Delete dos-path-style command.

Thu Jun 20 13:42:23 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure.in: Revise sol-thread.o test.
	* configure: Regenerated.

	* source.c (find_source_lines): Reassign size to result of read.

Tue Jun 18 16:25:54 1996  Jeffrey A. Law  <law@rtl.cygnus.com>

	* h8300-dep.c (gdb_print_insn_h8300): Handle the H8/S.
	(h8300_command): Likewise.
	(set_machine): Likewise.
	(set_machine_hook): Likewise.
	(_initialize_h8300m): Likewise.

	* config/h8300/tm-h8300.h (h8300smode): Declare.

Sun Jun 16 15:21:51 1996  Jeffrey A. Law  <law@rtl.cygnus.com>

	* somsolib.c (som_solib_create_inferior_hook): Handle tracking
	of shl_load calls for hpux10.

Thu Jun 13 11:16:10 1996  Tom Tromey  <tromey@thepub.cygnus.com>

	* config.in: Regenerated.
	* acconfig.h (HAVE_THREAD_DB_LIB): Added entry.

	* configure: Regenerated.
	* aclocal.m4 (CY_AC_PATH_TCLH, CY_AC_PATH_TKH): Use odd names to
	avoid name clashes with SunOS headers.

Tue Jun 11 19:52:50 1996  Fred Fish  <fnf@cygnus.com>

	From Michael Snyder <Michael_Snyder@next.com>:
	* bcache.c (print_bcache_statistics): Avoid divide-by-zero
	exception if one or more objfile has no symbols, such as when
	a dynamic library has been stripped.

Tue Jun 11 12:02:55 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in (INTERNAL_LDFLAGS):  Add in flags from configure.
	* configure configure.in:  Only make sol-thread.o for native.
	Also, switch to dlopened libthread_db.so.1.
	* sol-thread.c:  Switch to using dlopen to get the thread_db
	library.

Mon Jun 10 14:17:19 1996  Fred Fish  <fnf@cygnus.com>

	* config/sparc/{xm-sun4sol2.h,xm-sun4os4.h} (MMAP_BASE_ADDRESS):
 	Change from 0xE0000000 to 0xC0000000.

Thu Jun  6 17:10:32 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/powerpc/xm-solaris.h: Initial version of support for
	Solaris on PowerPC.

Wed Jun  5 01:52:57 1996  James G. Smith  <jsmith@cygnus.co.uk>

 	* configure.in (configdirs): Force 4100 builds to use 4300 GDB
  	target.
	* configure: Rebuild.

	* config/mips/vr4300el.mt (SIM_OBS): Include simulator in
 	little-endian builds.
	
Mon Jun  3 11:48:29 1996  Jeffrey A Law  (law@cygnus.com)

	* inftarg.c (child_thread_alive): Protect declaration with
	#ifndef CHILD_THREAD_ALIVE.

	* source.c (find_source_lines): Check the time on the symtab's bfd if
	it exists, else check the time on the exec_bfd.

Thu May 30 09:43:17 1996  Mark Alexander <marka@cygnus.com>

	* dsrec.c (make_srec):  Fix calculation of address size
	to allow addresses less than 0x100.

Thu May 30 04:24:09 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* ch-exp.c (ch_lex): In case of LOC_TYPEDEF call calculate_array_length.

Tue May 28 16:15:47 1996  Geoffrey Noer  <noer@cygnus.com>

	* remote-mips.c: cannot use EINVAL for breakpoint test since
	its value varies for different hosts (e.g. go32's is 19, while
	sunos is 22).  Changed to hardcoded 22 since that is what the
	mips boards return.

Tue May 28 11:14:58 1996  Tom Tromey  <tromey@creche.cygnus.com>

	* configure: Regenerated.
	* aclocal.m4 (CY_AC_PATH_TCLH): Don't use AC_TRY_RUN.
	(CY_AC_PATH_TKH): Don't use AC_TRY_RUN.

Sun May 26 16:56:35 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* solib.c (solib_absolute_prefix, solib_search_path): New variables.
	(_initialize_solib): Add set/show commands for those variables.
	(solib_map_sections): Implement searching using them.

Sun May 26 14:14:49 1996  Fred Fish  <fnf@cygnus.com>

	Changes from: David Mosberger-Tang  <davidm@azstarnet.com>

	* NEWS:  Add Alpha Linux as a new native configuration.

	* mdebugread.c (parse_symbol): When we find a malloc() symbol with
 	return type VOID, assume no debugging info is available for that
 	object file and patch the return value into VOID *.  Otherwise,
	operations requiring an implicit call to malloc() will fail.

	* infrun.c (wait_for_inferior): The criterion to detect entering a
 	sigtramp handler is now: (a) the current pc is inside a sigtramp
 	handler, (b) the previous pc is not in a sigtramp handler, and (c)
 	the current stack pointer is "inner" than the old one.  Condition
	(c) is new to avoid mistaking a return from a signal handler into
 	sigtramp as a new sigtramp invocation.

	* dcache.c (struct dcache_block): Declare addr as CORE_ADDR.  An
 	int may not be big enough to hold an address.
	(dcache_hit): Ditto.
	(dcache_peek_byte): Fix indentation.

	* configure.in (alpha-*-linux*): Add target.
	* configure: Rebuild

	* config/alpha/tm-alpha.h (PROC_DESC_IS_DYN_SIGTRAMP): New macro.
	(SET_PROC_DESC_IS_DYN_SIGTRAMP): Ditto.
	(DYNAMIC_SIGTRAMP_OFFSET): Ditto.
	(SIGCONTEXT_ADDR): Ditto.
	(FRAME_PAST_SIGTRAMP_FRAME): Ditto.

	* config/alpha/alpha-linux.mh: New file.
	* config/alpha/alpha-linux.mt: Ditto.
	* config/alpha/nm-linux.h: Ditto.
	* config/alpha/tm-alphalinux.h: Ditto.
	* config/alpha/xm-alphalinux.h: Ditto.
	* config/alpha/xm-alphaosf.h: Renamed from xm-alpha.h.
	* config/alpha/alpha-osf1.mh (XM_FILE): Change from xm-alpha.h to
 	xm-alphaosf.h.
	* config/alpha/alpha-osf2.mh: Ditto.

	* blockframe.c (find_pc_partial_function): Pass PC to
 	SIGTRAMP_START and SIGTRAMP_END macros for the benefit of systems
 	that detect sigtramp code via designated code sequences (as is the
 	case for Linux/Alpha, for example).
	
	* config/i386/tm-i386bsd.h: Change SIGTRAMP_START and SIGTRAMP_END
	to ignore new PC argument.
	* config/m68k/tm-hp300bsd.h: Ditto.
	* config/vax/tm-vax.h: Ditto.

	* alpha-tdep.c (alpha_linux_sigtramp_offset): New function.
	(alpha_osf_skip_sigtramp_frame): Ditto.
	(push_sigtramp_desc): Ditto.
	(alpha_find_saved_regs): Use SIGCONTEXT_ADDR macro to extract
 	sigcontext address from frame.
	(alpha_saved_pc_after_call): When in sigtramp, use
 	alpha_frame_saved_pc() instead of read-register().
	(after_prologue): When inside a dynamically generated sigtramp
 	function, there is no prologue, so return address of first
 	instruction.
	(alpha_in_prologue): Fix typo in comment.
	(find_proc_desc): Use macro DYNAMIC_SIGTRAMP_OFFSET to determine
 	whether we're inside a dynamicaly generated sigtramp function.  If
 	so, create and push and appropriate procedure descriptor.
	(alpha_frame_chain): Use macro FRAME_PAST_SIGTRAMP_FRAME to obtain
 	the frame past a sigtramp frame (if the current frame is indeed a
 	sigtramp function).
	(init_extra_frame_info): Don't read next frame register off of
 	stack-pointer when inside a dynamiccaly generated sigtramp.
	(alpha_pop_frame): Also unlink and destroy procedure descriptors
 	created for dynamically generated sigtramp functions.

	* alpha-nat.c: When compiling under Linux, include <asm/reg.h> and
 	<alpha/ptrace.h> instead of <machine/reg.h>

Tue Jul  2 13:58:10 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (inf_validate_task_sc):
	Give terminal to gdb while asking question.
	(inf_resume): Don't validate the task suspend-count while execing.

Thu Jun 13 11:04:52 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (inf_validate_task_sc): Query user before clearing any
	additional suspend count.
	(S_proc_wait_reply, gnu_attach): Don't call inf_validate_task_sc.
	(inf_resume): Call inf_validate_task_sc here.
	(gnu_resume): Call inf_update_procs to ensure noticing new threads.

Fri Jun  7 17:00:43 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (gnu_create_inferior: attach_to_child): Return PID.

Thu May 23 15:13:56 1996  Jeffrey A Law  (law@cygnus.com)

	* h8300-tdep.c (IS_PUSH): Refine.
	(IS_MOVE_FP, IS_MOV_SP_FP): Accept H8/300H varaints.
	(IS_SUB4_SP, IS_SUBL_SP): New macros.
	(h8300_skip_prologue): Handle H8/300H prologue code sequences.
	(examine_prologue): Handle addresses from 0x010000 to 0xffffff
	when in H8/300H mode.  Get the return pointer's address correctly
	for the H8/300H.  Handle H8/300H prolouge code sequences.

	* symfile.c (generic_load): Print the starting address
	of the file just loaded.

Thu May 23 12:09:52 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Edit @THREAD_DB_OBS@ out of makefile.

Tue May 21 11:53:56 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* breakpoint.c (bpstat_do_actions):  Avoid endless recursion
	if a `source' command is contained in bs->commands.

	* infrun.c (wait_for_inferior):  Update step_frame_address when
	stepping into a new line.

	From schwab@issan.informatik.uni-dortmund.de (Andreas Schwab):
	* breakpoint.c (breakpoint_1):  Add shlib_disabled case to
	bpenables array.

Mon May 20 22:52:00 1996  Mark Alexander  <marka@cygnus.com>

	* dsrec.c (load_srec): Add WAITACK parameter, for machines
	like EST visionICE that send back an ACK after each S-record.
	* monitor.c (monitor_wait_srec_ack): New function.
	(monitor_load): Pass monitor_wait_srec_ack to load_srec
	if the monitor's MO_SREC_ACK flag is set.
	* monitor.h: Define MO_SREC_ACK flag.
	* remote-est.c (est_cmds): Add MO_SREC_ACK flag.
	* sh3-rom.c (sh3_load): Accomodate change in load_srec prototype.
	* srec.h: Add WAITACK parameter to load_srec prototype.

Sun May 19 21:22:00 1996  Rob Savoye  <rob@chinadoll>

	* config/sparc/sparclite.mt: Add the sparc simulator.

Sun May 19 16:49:37 1996  Fred Fish  <fnf@cygnus.com>

	* defs.h (read_command_lines, query_hook): Update prototypes.
	(readline_begin_hook, readline_hook, readline_end_hook): Declare.
	* breakpoint.c (commands_command): Build message in temporary buffer
	and pass that, as well as tty control flag, to read_command_lines.
	* top.c (readline_begin_hook, readline_hook, readline_end_hook):
	Define here.
	(command_loop): Check for non-NULL instream before looping.
	(command_line_input): Use readline_hook when appropriate, to get
	user input from a GUI window.
	(read_next_line): Also build prompt if getting user input from a GUI.
	(recurse_read_control_structure): Fix typo in comment.
	(read_command_lines): Use passed in prompt and tty flag to decide how
	to build message.  Use readline_begin_hook when appropriate, to set
	up a GUI interaction window.  Just return head, whether NULL or not,
	after using readline_end_hook to complete GUI interaction.
	(define_command, document_command): Build message in a temporary
	buffer and pass it to read_command_lines, along with tty flag.


Sat May 18 02:43:58 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* blockframe.c (frameless_look_for_prologue):
	Add FUNCTION_START_OFFSET only if func_start is non-zero.
	* minsyms.c (lookup_minimal_symbol_by_pc):  Return NULL if
	pc is not in a known section.
	* stack.c (print_frame_info):  Remove check for fi->pc in known
	section, now handled by lookup_minimal_symbol_by_pc.


Fri May 17 13:31:04 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* sh-stub.c: New file, was config/sh/stub.c.


Wed May 15 08:25:12 1996  Jeffrey A Law  (law@cygnus.com)

	* top.c (read_next_line): Fix thinkos.  From Donn Seeley.

	* coffread.c (coff_symtab_read): Handle C_LABEL symbols like
	C_STAT symbols.
	* h8300-tdep.c (h8300_pop_frame): Reset $sp and $pc correctly.
	Flush cached frames just before exiting.
	* remote-sim.c (gdbsim_resume): Complain if the program isn't
	being run.
	* config/h8300/tm-h8300.h (BELIEVE_PCC_PROMOTION): Define.

Tue May 14 18:05:16 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* procfs.c (procfs_thread_alive procfs_stop):  Make static.
	(procfs_pid_to_str):  New routine to print out thread id's in an
	intelligible manner.
	* sol-thread.c (sol_thread_fetch_registers):  Re-order manner in
	which supply_register is called to fix bug with writing
	individual regs.
	* config/sparc/tm-sun4sol2.h:  Define default for
	target_pid_to_str in case host lacks libthread_db.

Mon May 13 23:53:30 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in config.in configure configure.in
	config/sparc/nm-sun4sol2.h config/sparc/sun4sol2.mh
	config/sparc/tm-sun4sol2.h:  Use autoconf to config Solaris thread
	and pthread support, since pre-2.5 systems don't come with
	libthread_db.so.1.

	* procfs.c (info_proc):  Use int instead of id_t.  Old versions of
	Irix don't seem to define this.

Mon May 13 17:40:58 1996  Jeffrey A Law  (law@cygnus.com)

	* top.c (execute_control_command, case while_control): Allow
	a while command to be interrupted.

Mon May 13 16:17:36 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* sol-thread.c:  More cleanup, add comments.
	(sol_thread_resume):  Prevent people from trying to step
	inactive threads.
	(sol_thread_wait sol_thread_fetch_registers
	sol_thread_store_registers):  Remove unnecessary check for
	sol_thread_active.  These routines won't get called unless threads
	are active.

Mon May 13 11:29:37 1996  Stan Shebs  <shebs@andros.cygnus.com>

	SH3-E support from Allan Tajii <atajii@hmsi.com>:
	* sh-tdep.c (sh_reg_names, sh3_reg_names): Add empty names for
	float registers.
	(sh3e_reg_names): New register name array.
	(sh_processor_type_table): Add sh3e processor type.
	* config/sh/tm-sh.h (REGISTER_VIRTUAL_TYPE): Fix test.
	(REGISTER_NAMES, NUM_REGS, NUM_REALREGS, etc): Adjust for
	full set of registers.
	* remote-e7000.c (want_sh3, want_sh3_nopc): New globals.
	(e7000_fetch_registers, e7000_wait): Use them.
	* sh3-rom.c (sh3_regnames): Add float registers.
	(sh3e_cmds, sh3e_ops): New globals.
	(sh3e_open): New function.
	(_initialize_sh3_rom): Rename from _initialize_sh3, set up
	sh3e target vector.

Fri May 10 15:53:38 1996  Stu Grossman  (grossman@lisa.cygnus.com)

	* sol-thread.c:  Cleanup.  gcc -Wall fixes.  Add prototypes.
	Print out messages instead of codes for thread_db errors.  Make
	access macros for thread and lwp manipulation.  Make cleanups to
	fixup inferior_pid in case of errors.

Thu May  9 19:06:02 1996  Fred Fish  <fnf@cygnus.com>

	* aclocal.m4: Remove unused definition of AC_C_CROSS.
	* configure.in: Add powerpcle-*-solaris* host and target config
	so April 30th change does not get lost next time configure is
	rebuilt.

Thu May  9 14:13:08 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in, breakpoint.c, corelow.c, fork-child.c, inflow.c,
	infrun.c, mac-nat.c, procfs.c, remote.c, sol-thread.c, thread.c,
	win32-nat.c, config/nm-lynx.h:  Rename thread.h to gdbthread.h to
	avoid conflict with Solaris /usr/include/thread.h.

Thu May  9 12:33:32 1996  Rob Savoye  <rob@chinadoll.cygnus.com>

	* abug-rom.c: Config file for the older style ABug monitor that
	runs on the mvme13x boards.
	* config/m68k/monitor.mt: Add abug support for m68k cross
	debugging.

Wed May  8 20:33:24 1996  Fred Fish  <fnf@cygnus.com>

	* infcmd.c (do_registers_info):  Always print the raw floating
	point value's bytes in big endian order, so the the leftmost bit
	is the most significant.
	* breakpoint.c (clear_momentary_breakpoints): Remove dead code
	that is referenced nowhere else.
	(set_breakpoint): Ditto.
	(do_enable_breakpoint): Created from enable_once_breakpoint
	with a couple of changes.
	(enable_breakpoint): Call do_enable_breakpoint with an appropriate
	bpdisp enum value to set disposition of breakpoint.
	(enable_once_breakpoint): Ditto.
	(enable_delete_breakpoint): Ditto.
	* breakpoint.h (clear_momentary_breakpoints): Remove prototype.
	* symtab.c (find_pc_line): Improve comments.
	* xcoffread.c: Ditto.

Tue May  7 18:37:06 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* target.c (debug_to_xfer_memory): Insert line breaks when
	dumping the memory block.

Mon May  6 13:52:52 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* fork-child.c (fork_inferior), inferior.h:  init_trace_fun now
	returns a possibly modified pid.
	* inftarg.c (ptrace_him):  Now returns pid;
	* m3-nat.c (m3_trace_him):  Now returns pid;
	* infcmd.c (run_command):  Minor cleanup.
	* infrun.c (wait_for_inferior):  Add another check for one_stepped
	near where we read the pc to avoid erroneously setting
	random_signal for multi-threaded support.
	* procfs.c:  Add support for Solaris LWPs.  Remove def of
	LOSING_POLL.  Many cleanups...  Several workarounds for Solaris
	lossage.  System call entry and exit are now handled by
	dynamically registered handlers.
	* (syscallname):  Don't barf when handed an unknown syscall
	number.
	* (info_proc_syscalls):  Ditto.
	* sol-thread.c:  New file.  Implements Solaris thread support.
	* symfile.c (symbol_file_add):  Add call to target_new_objfile to
	notify target-dependent code about new symbol tables.
	* (clear_symtab_users):  Call target_new_objfile to notify it of
	the removal of all symbol tables.
	* target.c (push_target):  Make sure that to_close is non-zero
	before calling it.
	* target.h (target_new_objfile):  Provide default.	
	* config/alpha/nm-osf2.h:  Define LOSING_POLL because this version
	of OSF can't hack using poll with /proc.
	* config/sparc/nm-sun4sol2.h (target_new_objfile):  Define to be
	sol-thread-new-objfile.
	* config/sparc/sun4sol2.mh:  Add sol-thread.o to NATDEFFILES, and
	add libthread_db.so.1 to NAT_CLIBS.
	* config/sparc/tm-sun4sol2.h:  Define PIDGET, TIDGET, and
	target_pid_to_str.

Sat May  4 02:13:34 1996  N Srin Kumar  <nsrin@wipinfo.soft.net>

	* procfs.c (remove_fd):  Fix copy of fds to fill hole left after
	removal of the requested fd.

Mon May  6 07:52:48 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000-tdep.c (_initialize_rs6000_tdep): Don't do XCOFF specific
	hooks under ELF.

	* config/powerpc/tm-ppc-eabi.h: Define ELF_OBJECT_FORMAT.

Thu May  2 12:46:14 1996  Jeffrey A Law  (law@cygnus.com)

	From Peter Schauer:
	* breakpoint.h (enum bpdisp):  Add del_at_next_stop.
	* breakpoint.c (insert_breakpoints, watchpoint_check,
	bpstat_stop_status):  Avoid bad references to memory freed via
	delete_breakpoint on watchpoints going out of scope.
	Do not delete these watchpoints, disable them and change their
	disposition to del_at_next_stop instead.
	(breakpoint_auto_delete):  Delete all breakpoints whose disposition
	is del_at_next_stop.
	(breakpoint_init_inferior):  Use switch to avoid reference to
	already deleted breakpoint.

Wed May  1 17:29:18 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (rs6000-nat.o): Depend on xcoffsolib.h.
	* config/rs6000/rs6000.mh (NATDEPFILES): Move xcoffread.o ...
	* config/rs6000/rs6000.mt (TDEPFILES): ... to here.
	* xcoffsolib.c (xcoff_relocate_symtab_hook): Define and initialize.
	(solib_info): Call xcoff_relocate_symtab via the hook.
	(sharedlibrary_command): Ditto.
	* xcoffread.c: Remove all FAKING_RS6000 comments and defines.
	(xcoff_add_toc_to_loadinfo_hook): Define and initialize here.
	(xcoff_init_loadinfo_hook): Define and initialize here.
	(scan_xcoff_symtab): Call xcoff_add_toc_to_loadinfo via the hook.
	(xcoff_initial_scan): Call xcoff_init_loadinfo via the hook.
	* xcoffsolib.h (xcoff_relocate_symtab_hook): Declare extern func.
	* rs6000-tdep.c (_initialize_rs6000_tdep): Add initializations
	of xcoff_add_toc_to_loadinfo_hook and xcoff_init_loadinfo_hook.
	* rs6000-nat.c (_initialize_core_rs6000): Add initialization
	of xcoff_relocate_symtab_hook.

Tue Apr 30 13:22:02 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure (powerpcle-*-solaris*): Add Solaris support.

	* config/powerpc/{solaris.m[ht],tm-solaris.h}: New files for
	Solaris support.

Mon Apr 29 16:17:31 1996  Dawn Perchik <dawn@cygnus.com>

	* c-valprint.c (c_val_print): Fix printing for arrays defined 
	with 0 length.

Sun Apr 28 15:08:05 1996  Stan Shebs  <shebs@andros.cygnus.com>

	Support for bi-endian remote breakpoints.
	* remote.c (big_break_insn, little_break_insn): New globals.
	(break_insn): Remove.
	(remote_insert_breakpoint, remote_remove_breakpoint): Use own
	code if REMOTE_BREAKPOINT defined, otherwise call memory
	breakpoint functions.
	* config/sh/tm-sh.h (REMOTE_BREAKPOINT): Remove.
	(BIG_REMOTE_BREAKPOINT, LITTLE_REMOTE_BREAKPOINT): Define.

	* mon960-rom.c (mon960_cmds): Remove forward decl.
	(mon960_load): Use current_monitor instead of mon960_cmds.
	(mon960_regnames): Remove backslashes from line ends.
	(_initialize_mon960): Fix documentation string.

Sun Apr 28 12:10:35 1996  Fred Fish  <fnf@cygnus.com>

	* symfile.h (psymbol_allocation_list):  Expand comments which
	describe the psymbol allocation list and how each field is
	used.

Sun Apr 28 03:44:30 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* breakpoint.c (delete_breakpoint):  Fix bpt->val, bpt->exp
	storage leaks.
	(breakpoint_re_set_one):  Fix b->exp, b->val, b->cond storage leaks.

	* infcmd.c (run_command), solib.c (locate_base):  Check for
	target_has_execution in addition to inferior_pid, a core file
	from a threaded program is yielding a non-zero inferior_pid.

	* sparc-tdep.c (get_saved_register):  Handle window registers
	in a dummy frame correctly.

Sat Apr 27 20:38:32 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (CLIBS): Move $(MMALLOC) past all other libs,
	so that anything that wants an allocation function not yet pulled
	in, will get it from mmalloc rather than a system library.
	* Makefile.in (INSTALLED_LIBS): Reorder to match order of CLIBS,
	to avoid surprising results when used.

Sat Apr 27 00:12:05 1996  Dawn Perchik  (dawn@cygnus.com)

	* stabsread.c: Changes and bug fixes for cfront support.
	Fix bug for class data members.
	Fix parsing bug when no base classes exist.
	Fix memory bug - allocate space for cplusplus specific info.
	Add support for static data.
	Add prototypes for static functions.
	Enhance comments to show what each function expects to parse.
	Cleanup code.
	* stabsread.c(resolve_cont),dbxread.c(resolve_cont): Rename 
	function to resolve_cfront_continuation.

Fri Apr 26 23:58:26 1996  Jeffrey A Law  (law@cygnus.com)

	* infrun.c (wait_for_inferior): Call registers_changed when
	restarting the inferior to get over a nullified instruction.
	
Tue Apr 24 12:12:55 1996  Dawn Perchik (dawn@cygnus.com)

	* dbxread.c,stabsread.c,gdbtypes.c,partial-stab.h,valops.c: 
	Add new support for parsing cfront stabs.

Wed Apr 24 00:32:55 1996  Jeffrey A Law  (law@cygnus.com)

	* infrun.c (wait_for_inferior): Move "have_waited" label
	outside of #ifdef conditionals.  Don't trash the wait status
	if we get a signal and the current instruction is nullified.

Mon Apr 22 20:17:01 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (VERSION): Bump version number to 4.16.1.
	* NEWS: Update for 4.16 release.

Mon Apr 22 16:32:29 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* monitor.h: Clean up comment formatting.
	(current_monitor): Remove decl.
	(LOADTYPES, LOADPROTOS, INIT_CMD, etc): Remove definitions.
	(push_monitor, SREC_SIZE): Remove.
	* monitor.c: Expand old macro into current_monitor derefs
	everywhere.
	* remote-os9k.c (current_monitor): Remove definition.

Mon Apr 22 14:54:45 1996  Mark Alexander  <marka@superball.cygnus.com>

	* corefile.c (specify_exec_file_hook): Allow arbitrary number of
 	hooks.
	(call_extra_exec_file_hooks): New function.
	* h8300-tdep.c: Lint; add .h files to provide missing declarations,
	remove unused variables.
	(set_machine_hook): New function.
	(_initialize_h8300m): Initialize it.

Fri Apr 19 15:03:49 1996  Ian Lance Taylor  <ian@cygnus.com>

	* remote-mips.c (encoding): Don't specify size, to avoid bug in
	SunOS native compiler.

Thu Apr 18 18:46:57 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* monitor.c: Use int rather than LONGEST for values, since
	the formatting strings are not prepared to accept long longs.

Wed Apr 17 20:17:27 1996  Doug Evans  <dje@canuck.cygnus.com>

	* arm-tdep.c (initialize_arm_tdep): Make apcs32 a `zinteger'.

Tue Apr 16 17:38:23 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* corelow.c (add_to_thread_list):  Make sure reg_sect is non-null
	before de-referencing it.  Prevents deref of NULL pointer if core
	file lacks .reg section.
	* defs.h:  Rename floatformat_{to from}_long_double to
	floatformat_{to from}_doublest.  Get rid of FLOATFORMAT_{TO
	FROM}... macros.
	* findvar.c (extract_floating store_floating):  Change all refs to
	FLOATFORMAT_{FROM TO}... to floatformat_{from to}_doublest.
	* utils.c:  Change floatformat_{to from}_long_double to
	floatformat_{to from}_doublest cuz the new routines will use
	whatever size (double or long double) is appropriate.
	* config/i960/tm-i960.h (REGISTER_CONVERT_TO_VIRTUAL
	REGISTER_CONVERT_TO_RAW):  Change FLOATFORMAT... macros to
	floatformat... routine calls.

Mon Apr 15 16:34:11 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* stabsread.c (read_type):  Move handling of '@' from type
	number handling to handling of types proper (as emitted by gcc!).
	For typedefs, allocate the typedef type before reading its
	definition, to properly handling recursive types.

Mon Apr 15 11:19:26 1996  Jeffrey A Law  (law@cygnus.com)

	* ch-exp.c (calculate_array_length): Fix prototype.

Sat Apr 13 14:21:16 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* remote-nindy.c (nindy_open):  Acquire more target state so that
	user can attach to a previously running program.
	* (nindy_fetch_registers nindy_store_registers):  Get rid of fp
	conversion code.  That's all handled in {extract store}_floating
	now.
	* utils.c (floatformat_to_double):  Don't bias exponent when
	handling zero's, denorms or NaNs.
	* config/i960/tm-i960.h (REGISTER_CONVERT_TO_VIRTUAL
	REGISTER_CONVERT_TO_RAW):  Change to using DOUBLST and
	FLOATFORMAT_TO/FROM_DOUBLEST macros.
	* config/i960/tm-nindy960.h:  Undefine
	REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW, and
	REGISTER_CONVERTIBLE.  These are no longer necessary now that all
	the magic happens in extract/store_floating.

Sat Apr 13 02:58:02 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* eval.c (evaluate_subexp_standard):  Report error when attempting to
	evaluate subscripts for types which cannot be subscripted.

	* valarith.c (value_x_binop, value_x_unop):  Add noside parameter.
	Return a zero value with the return type of the member function
	if noside is EVAL_AVOID_SIDE_EFFECTS instead of calling the member
	function.
	* values.h (value_x_binop, value_x_unop):  Update prototypes
	accordingly.
	* eval.c (evaluate_subexp_standard):  Update all callers of
	value_x_binop, value_x_unop accordingly.

	* valarith.c (value_neg, value_complement):  Perform ANSI C/C++
	integral promotion on operands.

Fri Apr 12 13:19:27 1996  Fred Fish  <fnf@cygnus.com>

	* README: Update for 4.16 release.
	* configure.in (AC_CHECK_FUNCS): Also check for sbrk.
	* configure: Regenerate with autoconf.
	* config.in: Regenerate with autoheader.
	* main.c (main): Only use sbrk() when HAVE_SBRK is defined.
	* top.c (command_loop): Ditto.

Fri Apr 12 09:45:29 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* defs.h:  Define TARGET_{FLOAT DOUBLE LONG_DOUBLE}_FORMAT
	defaults for bi-endian targets.  Replace function pointers for
	floatformat routines with macros.  No need for these to be runtime
	selectable.
	* findvar.c:  Get rid of floatformat function pointers.  Use
	macros in extract_floating and store_floating.
	* remote-nindy.c (nindy_fetch_registers nindy_store_registers):
	Use floatformat macros.

Thu Apr 11 21:28:02 1996  Fred Fish  <fnf@cygnus.com>

	From: Miles Bader  <miles@gnu.ai.mit.edu>
	* configure.in (AC_CHECK_HEADERS): check for endian.h.
	Use AC_CHECK_TOOL to find AR & RANLIB.  Add AC_PROG_AWK.
	Add host & target cases for i[345]86-*-gnu*.
	* config.in: Regenerate with autoheader.
	* configure: Regenerate with autoconf.
	* Makefile.in (AR, AWK): Set from corresponding autoconf substs.
	(init.c): Don't scan mig-generated files.
	* defs.h (endian.h): Include if HAVE_ENDIAN_H defined.
	* config/nm-m3.h (ATTACH_NO_WAIT): Define.
	* infcmd.c (attach_command): Use "#ifndef ATTACH_NO_WAIT"
 	rather than "#ifndef MACH".

Thu Apr 11 18:49:42 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* remote.c (remotewritesize): New GDB variable, controls size
	of memory packets sent to the target.

Thu Apr 11 13:47:52 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* dcache.c:  Add prototypes.  Make many functions static.
	* (dcache_peek dcache_fetch dcache_poke):  Make dcache_fetch and
	dcache_poke call dcache_xfer_memory directly in order to fix
	problems with turning off dcache.  dcache_peek is now unnecessary,
	so it goes away.

	* defs.h:  Define new macros HOST_{FLOAT DOUBLE	LONG_DOUBLE}_FORMAT 
	and TARGET_{FLOAT DOUBLE LONG_DOUBLE}_FORMAT to specify a pointer
	to a struct floatformat.  This allows for better handling of
	targets whose floating point formats differ from the host by more
	than just byte order.
	* (floatformat_to_long_double floatformat_from_long_double):
	Prototypes for new functions in utils.c.
	* (floatformat_to_doublest floatformat_from_doublest):  Prototypes
	for pointers to floating point conversion functions.  The actual
	function uses either double or long double if the host supports it.
	* findvar.c (floatformat_to_doublest floatformat_from_doublest):
	Initialize to point at correct function depending on HAVE_LONG_DOUBLE.
	* (extract_floating store_floating):  Rewrite.  Now, if host fp
	format is the same as the target, we just do a copy.  Otherwise,
	we call floatformat_{to from}_doublest.
	* remote-nindy.c (nindy_xfer_inferior_memory):  Change param
	`write' to `should_write'.
	* utils.c (floatformat_to_long_double
	floatformat_from_long_double):  New routines that implement long
	double versions of functions in libiberty/floatformat.c.
	* config/i960/tm-i960.h (TARGET_LONG_DOUBLE_FORMAT):  Define this for
	i960 extended real (80 bit) numbers.
	* nindy-share/nindy.c (ninMemGet ninMemPut):  Return number of bytes
	actually read or written.

Wed Apr 10 02:56:06 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* ch-valprint.c (chill_val_print): Remove call to calculate_array_length.
	(calculate_array_length): Move function from here ...

	* ch-exp.c (calculate_array_length): ... to here.
	(parse_primval): If we have a symbol with an array type
	and the length is 0, call calculate_array_length.

Tue Apr  9 01:23:05 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* eval.c (evaluate_subexp_standard): In case of TYPE_CODE_SET:
	Add some checks for powerset compatibility.

	* valops.c (value_slice): Use lowbound instead of lowerbound for
	call to slice_range_type to get correct bounds.

Mon Apr  8 12:53:56 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (scm-exp.o, scm-lang.o, scm-valprint.o): Add targets and
	dependencies.
	* scm-lang.c (gdb_string.h): Include.
	* objfiles.c (add_to_objfile_sections): Cast second arg of obstack_grow
	call to correct type (char *).
	* cp-valprint.c (cp_print_static_field): Ditto.
	* somsolib.c (som_solib_create_inferior_hook): Add a declaration
	for external find_unwind_entry function (from hppa-tdep.c).
	* remote-pa.c (remote_write_bytes, remote_read_bytes): Change
	type of second arg to "char *" to be type compatible with
	dcache.
	(remote_wait): Cast second arg to strtol to correct type.
	* hppa-tdep.c (compare_unwind_entries): Change argument types to
	"const void *" to be type compatible with qsort, and then
	assign to local args prior to use.

Mon Apr  8 15:35:52 1996  Jeffrey A Law  (law@cygnus.com)

	* infptrace.c (kill_inferior): Remove call to "kill"; update
	comments.

Mon Apr  8 14:05:07 1996  Geoffrey Noer  <noer@cygnus.com>

	* remote-e7000.c: don't append :23 to target port if __WIN32__
	is defined (it's WinGDB).

Sun Apr  7 22:34:29 1996  Fred Fish  <fnf@cygnus.com>

	From: Miles Bader  <miles@gnu.ai.mit.edu>
	* gnu-nat.c, gnu-nat.h, msg.defs, exc_request.defs, i386gnu-nat.c,
	msg_reply.defs, notify.defs, process_reply.defs, reply_mig_hack.awk,
	config/nm-gnu.h, config/i386/{i386gnu.mh, i386gnu.mt, nm-gnu.h,
	m-i386gnu.h, xm-i386gnu.h}: New files for GNU hurd.

Sun Apr  7 13:32:41 1996  Fred Fish  <fnf@cygnus.com>

	* configure.in (case host): Add i386sco5 host.
	* configure: Regenerate.
	
	From: Robert Lipe <robertl@dgii.com>
	Add support for SCO OpenServer 5 (a.k.a. 3.2v5*)  This
	target is an SVR3.2 with COFF, ELF, and shared libes, but
	no /proc.
	* config/i386/i386sco5.mh:  New file.
	* config/i386/nm-i386sco5.h:  New file.

Sat Apr  6 08:55:22 1996  Fred Fish  <fnf@cygnus.com>

	* bcache.c (bcache): When size of chunk to cache is exactly equal to
 	BCACHE_MAXLENGTH, stash chunk as unique copy.

Sat Apr  6 00:46:26 1996  Fred Fish  <fnf@cygnus.com>

	* symfile.c (INLINE_ADD_PSYMBOL): Remove ifdef.
	(add_psymbol_to_list): Add an arg for passing CORE_ADDR values and
	use it, rather than calling add_psymbol_addr_to_list.
	(add_psymbol_addr_to_list): Delete.
	(add_psymbol_to_list): Make psymbol static to avoid random data in
	gaps due to alignment of structure members.
	* symfile.h (INLINE_ADD_PSYMBOL, ADD_PSYMBOL_TO_LIST,
 	ADD_PSYMBOL_ADDR_TO_LIST): Remove.  Real world tests show no
	performance improvements by inlining via complicated macros and
	they just make gdb larger and harder to maintain.
	* dwarfread.c (add_enum_psymbol): Replace ADD_PSYMBOL_TO_LIST
	and/or ADD_PSYMBOL_ADDR_TO_LIST macro(s) with call to
	add_psymbol_to_list with appropriate long or CORE_ADDR args.
	(add_partial_symbol): Ditto.
	* partial-stab.h: Ditto.
	* os9kread.c (read_os9k_psymtab): Ditto
	* mdebugread.c (parse_partial_symbols): Ditto.
	(handle_psymbol_enumerators): Ditto.
	(demangle.h): Include.
	* hpread.c (hpread_build_psymtabs): Ditto.
	(hpread_build_psymtabs): Ditto.
	(demangle.h): Include

Thu Apr  4 20:16:55 1996  Fred Fish  <fnf@cygnus.com>

	* configure.in: Check for setpgid function.
	* config.in: Regenerate with autoheader.
	* configure: Regenerate with autoconf.
	* inflow.c (_initialize_inflow): Only try to use _SC_JOB_CONTROL
	if it is actually defined.
	(gdb_setpgid): Use HAVE_SETPGID.
	* ch-exp.c: Change include of <string.h> to "gdb_string.h".
	* c-exp.y, f-exp.y, m2-exp.y: Ditto.
	* c-exp.y, serial.c: Include <ctype.h>.
	* config/m68k/nm-news.h: Add typedef for pid_t which is
	apparently missing from <sys/types.h>.  Enclose entire
	file in NM_NEWS_H ifndef and define when included.
	* config/mips/nm-news-mips.h: Ditto.
	* config/m68k/tm-m68k.h (REGISTER_CONVERT_TO_VIRTUAL,
	REGISTER_CONVERT_TO_RAW): Change name of temporary variable.

Thu Apr  4 19:04:18 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* arm-xdep.c: Move native-specific code to here from arm-tdep.c.
	* arm-tdep.c (arm_apcs_32): New global.
	(arm_addr_bits_remove, arm_saved_pc_after_call,
 	arm_push_dummy_frame, arm_pop_frame): New functions.
	(arm_skip_prologue): Updated version from Richard Earnshaw.
	(_initialize_arm_tdep): Add set/show "apcs32".
	* config/arm/tm-arm.h (ADDR_BITS_REMOVE): Call
	arm_addr_bits_remove.
	(SAVED_PC_AFTER_CALL): Call arm_saved_pc_after_call.
	(frame_find_saved_regs): Declare properly.
	(PUSH_DUMMY_FRAME): Call arm_push_dummy_frame.
	(POP_FRAME): Call arm_pop_frame, use ADDR_BITS_REMOVE instead of
	explicit mask.
	* config/arm/nm-arm.h: New file.
	* config/arm/xm-arm.h (KERNEL_U_ADDR, FETCH_INFERIOR_REGISTERS):
	Move definitions to nm-arm.h.
	* config/arm/arm.mh (NAT_FILE): Define.

	* symfile.c (generic_load): Initialize data_count properly.

Thu Apr  4 17:17:53 1996  Fred Fish  <fnf@cygnus.com>

	* symmisc.c (print_objfile_statistics): Print memory used by
	psymbol cache obstack.

Thu Apr  4 15:43:07 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* symfile.c (report_transfer_performance): New function.
	(generic_load): Call it to report transfer rate.
	* remote-e7000.c (e7000_load): Ditto.

Mon Apr  1 16:31:00 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Change references to config.h to be in objdir,
	edit out rules to rebuild config.h.

Mon Apr  1 08:32:23 1996  Fred Fish  <fnf@cygnus.com>

	* hppa-tdep.c (hppa_pop_frame): Call clear_proceed_status before
	proceeding.

Sun Mar 31 16:15:43 1996  Fred Fish  <fnf@cygnus.com>

	* hppah-nat.c (store_inferior_registers, store_inferior_registers,
	fetch_register, child_xfer_memory): Use call_ptrace function supplied
	by infptrace.c rather than calling ptrace directly.

Sun Mar 31 15:39:00 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mon960-rom.c: Cleanups and elimination of unused code,
	clarify documentation string.
	(mon960_serial, mon960_ttyname): Remove.
	* config/i960/tm-mon960.h (ADDITIONAL_OPTIONS,
	ADDITIONAL_OPTION_CASES, ADDITIONAL_OPTION_HELP): Remove.

Sat Mar 30 11:00:22 1996  Fred Fish  <fnf@cygnus.com>

	* configure.in: Check whether printf family supports printing
	long doubles or not and define PRINTF_HAS_LONG_DOUBLE if so.
	* acconfig.h: Provide default undef for PRINTF_HAS_LONG_DOUBLE.
	* configure: Regenerate.
	* valprint.c (print_floating): Use PRINTF_HAS_LONG_DOUBLE.
	* c-exp.y (parse_number): Use PRINTF_HAS_LONG_DOUBLE.
	* configure.in: Fix have_gregset and have_fpregset autoconf
	variable names so that they match the pattern required to
	cache them.

Fri Mar 29 21:39:56 1996  Fred Fish  <fnf@cygnus.com>

	* core-aout.c (fetch_core_registers): Cast core_reg_size to int
	before testing against reg_ptr.
	* eval.c (evaluate_subexp_standard): Cast type of
	TYPE_FN_FIELD_VOFFSET to int.
	* findvar.c (extract_signed_integer, extract_unsigned_integer,
	extract_long_unsigned_integer): Cast type of sizeof to int.
	* values.c (unpack_field_as_long, modify_field): Ditto.
	* valops.c (value_assign, call_function_by_hand): Ditto.
	* infcmd.c (do_registers_info): Ditto.
	* ser-tcp.c (tcp_open): Ditto.
	* remote.c (putpkt): Ditto.
	* dcache.c (dcache_peek): Ditto.
	* dcache.c (dcache_poke): Ditto.
	* m2-exp.y (yylex): Ditto.
	* gnu-regex.c (re_match_2): Ditto.
	* f-lang.c (ADD_BF_SYMNUM, saved_bf_list_end, tmp_bf_ptr): Ifdef
	out unused macro definition and variables.
	* inftarg.c (proc_wait): Move from main.c to here, and make static.
	* valprint.c (val_print_string): Change bufsize from int to unsigned.
	* main.c (wait.h): Include.
	* top.c (command_line_input): Remove unused variable "c".
	* f-typeprint.c (f_type_print_varspec_prefix): Add missing enum
	value TYPE_CODE_TYPEDEF to switch statement.
	(f_type_print_varspec_suffix): Add missing enum value
	TYPE_CODE_TYPEDEF to switch statement.
	* ch-exp.c (parse_primval): Add remaining enumeration values to
	switch statement, with no specific action.
	(ch_lex): Add LOC_UNRESOLVED in switch statement.
	(pushback_token): Ifdef out, since code using it is ifdef'd out.
	* stabsread.c (cleanup_undefined_types): Remove unused label
	"badtype".
	* objfiles.h (print_symbol_bcache_statistics): Add prototype.
	* maint.c (objfiles.h): Include.
	(maintenance_print_statistics): Remove unused variable "temp".
	* minsyms.c (lookup_minimal_symbol_solib_trampoline): Remove
	unused variable "found_file_symbol".
	* m2-exp.y (yylex): Add LOC_UNRESOLVED case to switch.
	* language.c (lang_bool_type): Use existing function local type
	variable rather than create block local variables.
	* solib.c (disable_break): Enclose in ifndef SVR4_SHARED_LIBS.
	* infptrace.c (wait.h, command.h): Include.
	* ser-tcp.c (gdb_string.h): Include
	* i386-tdep.c (codestream_seek): Change "place" to CORE_ADDR.
	(i386_get_frame_setup): Change "pc" from int to CORE_ADDR.
	* command.c (complete_on_enum): Make assignment used as truth value
	explictly check against NULL.
	(wait.h): Include.
	* infrun.c (wait_for_inferior): Ifdef out prologue_pc since code
	that uses it is ifdef'd out.
	* parser-defs.h: Add prototype for write_dollar_variable.
	* infrun.c: Add prototype for write_pc_pid.
	* breakpoint.h: Add prototype for re_enable_breakpoints_in_shlibs.
	* symmisc.c (bcache.h): Include.
	* bcache.h: Add prototype for print_bcache_statistics.
	* symfile.c: Include <time.h>.
	* printcmd.c (print_scalar_formatted): Change len to unsigned int.
	* valarith.c (value_equal): Cast result of TYPE_LENGTH to int.
	* valarith.c (value_binop): Change result_len, promoted_len1,
 	and promoted_len2 to unsigned int.
	* valarith.c (value_subscripted_rvalue): Change elt_offs and
 	elt_size to unsigned int.
	* valops.c (value_array): Change typelength to unsigned int.
	(destructor_name_p): Change len to unsigned int.
	* scm-lang.h (scm_parse): Add prototype for scm_unpack.
	* symfile.c (decrement_reading_symtab): Change return type to void.
	* valarith.c (value_subscript): Remove unused variable "word".
	(value_subscript): Remove unused variable "tint".
	* valops.c (auto_abandon): Ifdef out, since code using it is also
	ifdef'd out.
	* eval.c (init_array_element): Remove unused variable "val".
	* Makefile.in (values.o): Depends on scm-lang.h.
	(command.o): Depends upon wait_h.
	(ser-tcp.o): Depends upon gdb_string.h.
	(infptrace.o): Depends upon wait_h and command_h.
	(maint.o): Depends on objfiles.h and symfile.h.
	* values.c (allocate_repeat_value): Remove unused variable
	"element_type".
	(scm-lang.h): Include.
	* breakpoint.c (create_longjmp_breakpoint): Enclose in
	GET_LONGJMP_TARGET define, unused otherwise.
	* config/i386/nm-linux.h: Add prototypes for i386_insert_watchpoint,
	i386_remove_watchpoint and i386_stopped_by_watchpoint.
	
Thu Mar 28 12:53:19 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure.in (sparc64-*-solaris2*): Delete.
	Stick with sparc-*-solaris2*.
	* configure: Regenerated.

Thu Mar 28 06:51:26 1996  Fred Fish  <fnf@cygnus.com>

	* valops.c (value_assign): Make copy of internal variable value
	before returning it as a new value, since it is owned by the 
	internal variable and will be freed along with it.

Wed Mar 27 08:36:17 1996  Jeffrey A Law  (law@cygnus.com)

	* From Peter Schauer.
	* breakpoint.c (breakpoint_re_set_one):  Keep temporary
	breakpoints bp_until, bp_finish, bp_watchpoint_cope, bp_call_dummy
	and bp_step_resume in case breakpoint_re_set_one is called due
	to a step over a dlopen call.
	* infrun.c (wait_for_inferior):  Always remove breakpoints from
	inferior in BPSTAT_WHAT_CHECK_SHLIBS case.

Tue Mar 26 13:15:32 1996  Fred Fish  <fnf@cygnus.com>

	* config/mips/tm-mips.h (COERCE_FLOAT_TO_DOUBLE): Only prefer
	non-prototyped case over prototyped case for C.
	* config/pa/tm-hppa.h (COERCE_FLOAT_TO_DOUBLE):  Ditto.

Sat Mar 23 17:24:28 1996  Fred Fish  <fnf@cygnus.com>

	* os9kread.c (os9k_process_one_symbol): Note nonportable
	assumption that an int can hold a char *.

	* bcache.h (struct hashlink): Wrap data[] inside union with
	double to force longest alignment.
	(BCACHE_DATA): New macro to access data[].
	(BCACHE_ALIGNMENT): New macro to get offset to data[].
	* bcache.c (lookup_cache, bcache): Use BCACHE_DATA to get
 	address of cached data.  Use BCACHE_ALIGNMENT to compute
	amount of space to allocate for each hashlink struct.

Sat Mar 23 12:14:02 1996  Fred Fish  <fnf@cygnus.com>

	* ch-lang.c (evaluate_subexp_chill): Fix typo.

Thu Mar 21 08:27:19 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (VERSION): Bump version to 4.15.3

Thu Mar 21 10:56:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config.in: Rename from config.h.in.
	* configure.in: Call AC_CONFIG_HEADER with config.h:config.in.
	Change CONFIG_HEADERS test in AC_OUTPUT accordingly.
	* configure: Rebuild.
	* Makefile.in (stamp-h): Depend upon config.in, not config.h.in.
	Set CONFIG_HEADERS to config.h:config.in.

Tue Mar 19 12:47:51 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* partial-stab.h (case N_ENDM):  Finish current partial symbol
	table for Solaris 2 cc.

Tue Mar 19 10:39:15 1996  Jeffrey A Law  (law@cygnus.com)

	* rs6000-nat.c (exec_one_dummy_insn): Don't clobber the
	PC in the registers array.  From Peter Schauer.

Mon Mar 18 13:47:09 1996  Fred Fish  <fnf@cygnus.com>

	* symfile.c (reread_symbols): Reinitialize bcache struct
	members to zero using memset.  Also use memset to reinit
	global_psymbols and static_psymbols, rather than explicitly
	resetting each structure member.

Sat Mar 16 19:47:36 1996  Fred Fish  <fnf@cygnus.com>

	* configure.in: Add fragment to create stamp-h.
	
	From Peter Schauer <Peter.Schauer@Regent.E-Technik.TU-Muenchen.DE>
	* configure.in (AC_CHECK_HEADERS):  Check for link.h.
	* configure:  Regenerate with autoconf.
	* config.h.in:  Regenerate with autoheader.
	* config/i386/nm-linux.h:  Include solib.h only if HAVE_LINK_H
	is defined.
	* solib.c:  Exclude most of the code if HAVE_LINK_H is not defined.
	* config/i386/linux.mh:  Reinstate XM_CLIBS, it is needed for
	older a.out based systems.

Sat Mar 16 16:45:43 1996  Fred Fish  <fnf@cygnus.com>

	* config.h.in: New file.
	* acconfig.h: New file, for autoheader.
	* configure.in (AC_CONFIG_HEADER): Add, generate config.h.
	* configure: Regenerate.
	* Makefile.in (defs_h): Add config.h
	(distclean): Remove config.h and stamp-h during distclean.
	(config.h, stamp-h): New targets to remake config.h when necessary.
	* defs.h (config.h): Include before any other includes or defines.
	* i386-tdep.c (gdb_string.h): Move include after include of defs.h.
	* i386v4-nat.c (defs.h): Include before testing HAVE_SYS_PROCFS_H.

Sat Mar 16 14:55:27 1996  Fred Fish  <fnf@cygnus.com>

	From Peter Schauer <Peter.Schauer@Regent.E-Technik.TU-Muenchen.DE>
	* Makefile.in (INSTALLED_LIBS):  Make sure that @LIBS@ will not
	result in an empty line, to work around a bug in native Ultrix 4.4
	and OSF/1-3.2C make.

Sat Mar 16 13:33:17 1996  Fred Fish  <fnf@cygnus.com>

	* configure.in: Add gdbserver to configdirs under linux.
	* configure: Regenerate.
	
Fri Mar 15 12:06:58 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config/i386/nm-nbsd.h (FLOAT_INFO): Comment out.
	* config/i386/tm-nbsd.h (NUM_REGS): Define.

Thu Mar 14 10:31:18 1996  Jeffrey A Law  (law@cygnus.com)

	* solib.c (solib_break_names): Add _r_debug_state for
	vanilla SVR4 implementations.  From Peter Schauer.

Mon Mar 11 14:24:57 1996  Dawn Perchik  <dawn@critters.cygnus.com>

	* mon960-rom.c: New file; support mon960 rom monitor on i960.
	* monitor.c (monitor_debug): Change remotedebug to buffer strings.
	* monitor.c (monitor_open): Add test for flag MO_NO_ECHO_ON_OPEN before
	epecting prompt and echo during open.
	* monitor.c (monitor_stop): Add test for flag MO_SEND_BREAK_ON_OPEN to 
	determine if break should be sent as stop command.
	* monitor.h: Add flags MO_NO_ECHO_ON_OPEN and MO_SEND_BREAK_ON_OPEN.
	* i960-tdep.c (mon960_frame_chain_valid): New function for getting 
	stack frame on mon960.
	* Makefile.in: Add mon960 files.
	* configure.in: Changed i960-*-coff* and i960-*-elf* to target mon960;
 	added i960-nindy-coff* and i960-nindy-elf* for target nindy.
	* configure: Regenerated.
	* config/i960/mon960.mt, config/i960/tm-mon960.h: New files; 
	support mon960 rom monitor on i960.

Mon Mar 11 11:02:47 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	With Michael Snyder:
	* i386-tdep.c (skip_trampoline_code): Fix strncmp length.
	* win32-nat.c (CHECK, DEBUG*, debug_*): New.
	(handle_load_dll): Don't reload symbols.
	(handle_exception):  Use the DEBUG_* names.
	(child_wait): Add DEBUG_* code.
	(_initialize_inftarg): Add new commands to set debug_ names.

Mon Mar 11 09:19:58 1996  Jeffrey A Law  (law@cygnus.com)

	* From Peter Schauer:
	* breakpoint.c (insert_breakpoints): Use ALL_BREAKPOINTS_SAFE.
	(bpstat_stop_status): Likewise.
	(remove_solib_event_breakpoints): Likewise.
	(clear_momentary_breakpoints): Likewise.
	(re_enable_breakpoints_in_shlibs): Don't reenable a breakpoint
	if we still can't read the memory for that breakpoint.
	(mention): Add bp_shlib_event case to keep gcc quiet.
	
Fri Mar  8 12:08:12 1996  Jeffrey A Law  (law@cygnus.com)

	* breakpoint.h (enum enable): New enum shlib_disabled for
	shared library breakpoints that have been temporarily disabled.
	* breakpoint.c: Handle temporarily disabled shared library
	breakpoints like disabled breakpoints in most places.
	(insert_breakpoints): Use shlib_disabled to indicate
	that an unsettable breakpoint is only temporarily disabled.
	(re_enable_breakpoints_in_shlibs): New function.
	* corelow.c (solib_add_stub): After adding shared libraries,
	try to reenable any temporarily disabled breakpoints.
	* infcmd.c (attach_command): Likewise.
	* infrun.c (wait_for_inferior): Likewise.

Fri Mar  8 11:41:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* defs.h (extract_long_unsigned_integer): Declare.
	* findvar.c (extract_long_unsigned_integer): New function.
	* printcmd.c (print_scalar_formatted): Use it.
	* valprint.c (val_print_type_code_int): Likewise.

Thu Mar  7 17:40:50 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* infcmd.c (do_registers_info): Ignore anonymous registers.
	* sh-tdep.c (set processor): New command to set specific
	processor type.
	(sh_reg_names, sh3_reg_names): Arrays of register names for
	SH and SH3 processors.
	(sh_set_processor_type): New function.
	* sh3-rom.c (sh3_open): Call it.
	(sh3_regname): Add names of all the bank registers.
	(sh3_supply_register): Clean up formatting.
	* config/sh/tm-sh.h (NUM_REGS, NUM_REALREGS): Increase to include
 	bank registers.
	(REGISTER_NAMES): Add names of bank registers.
	(FP15_REGNUM): Define.
	(REGISTER_VIRTUAL_TYPE): Use it.
	* monitor.c: Clean up some comments.

Thu Mar  7 12:09:51 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* i386b-nat.c: Revert part of Mar 5 change.  FreeBSD collapsed the
 	s* and t* symbols too.

Thu Mar  7 15:18:51 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* symfile.c (generic_load): Avoid division by zero.

Wed Mar  6 17:57:59 1996  Jeffrey A Law  (law@cygnus.com)

	* breakpoint.c (bfd_lookup_symbol): Provide for all SVR4 systems,
	not just those with HANDLE_SVR4_EXEC_EMULATORS.

	From Peter Schauer:
	* breakpoint.c (internal_breakpoint_number): Move to file scope.
	(create_solib_event_breakpoint): Use an internal breakpoint number.

Wed Mar  6 00:32:44 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* valarith.c (value_in): Change builtin_type_chill_bool to
	LA_BOOL_TYPE.

Tue Mar  5 23:48:36 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* ch-exp.c (parse_primval): Handle CARD, MAX, MIN.
	(match_string_literal): Handle control sequence.
	(match_character_literal): Deto.

	* ch-lang.c (chill_printchar): Change formating of nonprintable
	characters from C'xx' to ^(num).
	(chill_printstr): Deto.
	(value_chill_card, value_chill_max_min): New functions to process
	Chill's CARD, MAX, MIN.
	(evaluate_subexp_chill): Process UNOP_CARD, UNOP_CHMAX, UNOP_CHMIN.

	* expression.h (exp_opcode): Add UNOP_CARD, UNOP_CHMAX, UNOP_CHMIN
	for Chill's CARD, MAX, MIN.

	* valarith.c (value_in): Add processing of TYPE_CODE_RANGE
	and change return type from builtin_type_int to
	builtin_type_chill_bool.

Tue Mar  5 18:54:04 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* config/nm-nbsd.h (link_object, lo_name, etc): Move to here
 	from config/nm-nbsd.h.
	* config/sparc/nm-nbsd.h (regs, fp_status, etc): Move to here
	from config/sparc/tm-nbsd.h.

	* config/m68k/nm-hp300hpux.h (FIVE_ARG_PTRACE): Define here
	instead of in config/m68k/xm-hp300hpux.h.

Tue Mar  5 12:05:35 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* i386b-nat.c, m68knbsd-nat.c (fetch_core_registers): Provide
 	implementation for NetBSD systems.

Mon Mar  4 23:44:16 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* valarith.c (binop_user_defined_p):  Return 0 for BINOP_CONCAT.
	(value_concat):  Handle varying strings (add COERCE_VARYING_ARRAY).

	* ch-lang.c (evaluate_subexp_chill case MULTI_SUBSCRIPT):  Error
	if "function" is pointer to non-function.

Mon Mar  4 17:47:03 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* top.c (print_gdb_version): Update copyright year.

Mon Mar  4 14:44:54 1996  Jeffrey A Law  (law@cygnus.com)

	From Peter Schauer:
	* infrun.c (wait_for_inferior): Remove breakpoints and
	switch terminal settings before calling SOLIB_ADD.
	* solib.c (enable_break, SVR4 variant): Don't map in symbols
	for the dynamic linker, the namespace pollution causes real
	problems.

Sun Mar  3 17:18:57 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* remote-mips.c (common_breakpoint): Explicitly terminate the
 	returned buffer.

Wed Feb 28 22:32:18 1996  Stan Shebs  <shebs@andros.cygnus.com>

	From Wilfried Moser <wilfried.moser@aut.alcatel.at>:
	* remote.c (remote_detach): Send a command 'D' to the target
	when detaching, update the function's comments.

Thu Jun  6 16:11:38 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (thread_cmd_list): New declaration.
	(parse_int_arg): New function.

Wed Jun  5 17:28:04 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.h (struct proc): Add DETACH_SC field.
	* gnu-nat.c (make_proc): Set DETACH_SC.
	(struct inf): Add DETACH_SC & DEFAULT_THREAD_DETACH_SC fields.
	(make_inf): Set DETACH_SC & DEFAULT_THREAD_DETACH_SC fields.
	(add_thread_commands): Add set/show for detach-suspend-count.
	Add takeover-suspend-count cmd.
	(inf_detach): Set suspend counts to the detach SC, not 0.
	(set_thread_detach_sc_cmd, show_thread_detach_sc_cmd,
	set_task_detach_sc_cmd, show_task_detach_sc_cmd,
	set_thread_default_thread_detach_sc_cmd,
	show_thread_default_thread_detach_sc_cmd): New functions.
	(show_task_cmd): Also show detach-suspend-count values.
	(thread_takeover_sc_cmd): New function.

Fri May 31 16:49:24 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (show_thread_run_cmd): Actually print state.

Thu May 30 10:47:56 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (inf_signal): Make unforwardable exceptions an error.

Tue May 28 17:06:36 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (inf_validate_stopped): proc_getprocinfo takes a
	pointer to the flags now, not the flags themselves.

Mon May 27 13:31:17 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (gnu_wait): Print debugging msgs for pending execs.
	(gnu_create_inferior): Check return from ptrace.

Sun May 26 16:56:35 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.h (struct proc): Add DEAD field.
	* gnu-nat.c (make_proc): Initialize DEAD.
	(inf_set_traced, inf_validate_task_sc, inf_validate_procs: Frob it.
	(gnu_wait): Only abort for 0 threads if the task isn't dead.

Sat May 25 17:06:05 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (inf_signal): Pass SIGCODE when posting a signal.

Wed May 22 18:44:28 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (S_proc_wait_reply): Add SIGCODE argument.
	(inf_set_traced): Only give no-signal-thread error message if
	turning *on* tracing.

Wed May 15 13:03:16 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (inf_validate_procs): If INF has no threads, always
	set inf->threads_up_to_date to 0.
	(inf_signal): Pass in new SIGCODE argument to msg_sig_post_untraced.
	(gnu_wait): Pass in new TIMEOUT arg to interrupt_operation.
	(proc_update_sc): Cast thread state arg to thread_set_state.
	(proc_get_state): Cast thread state arg to thread_get_state.
	(inf_validate_task_sc): Cast task_basic_info arg to task_info.
	* i386gnu-nat.c (gnu_fetch_registers, gnu_store_registers): Call
	inf_update_procs before we lookup the thread.
	* config/i386/i386gnu.mh (MH_CFLAGS): New variable.

Tue May  7 17:52:33 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (gnu_kill_inferior): Use inf_set_task to clear the task.

Mon May  6 19:06:49 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (inf_set_traced): Use msg_set_init_int with
	INIT_TRACEMASK instead of setting the exec flags.

Fri May  3 19:10:57 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (inf_validate_procs): Don't clear INF->task if we find
	the task's died, so others have a chance at it.
	(gnu_resume): When single-stepping a single thread, given an error
	if there is no such thread.  When single-stepping one but running
	the others, just given a warning and still run all the threads.
	(gnu_wait): If there seem to be no threads, look harder, and
	signal an error if there really aren't any.
	(gnu_attach): Reset thread numbering to 0.

	* i386gnu-nat.c (gnu_fetch_registers, gnu_store_registers): Give
	thread name in warning messages.

	* gnu-nat.c (active_inf): New function.
	(show_sig_thread_cmd, show_stopped_cmd): Use it.
	(info_port_rights, info_send_rights_cmd, info_port_sets_cmd,
	info_recv_rights_cmd, info_port_rights_cmd, info_port_rights_cmd):
	New functions.
	(add_task_commands): Add new port-right info commands.

Fri Apr 26 20:42:16 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (gnu_wait): Instead of _hurd_intr_rpc_mach_msg, just
	use mach_msg with MACH_RCV_INTERRUPT.
	(set_noninvasive_cmd): New function.
	(add_task_commands): Add command entry for `set noninvasive'.

Mon Mar  4 14:12:02 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (gnu_read_inferior): Use hurd_safe_memmove, not safe_bcopy.
	(safe_bcopy): Function removed.

Mon Dec  4 14:18:26 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c (proc_update_sc): Assert only threads can have state.
	(make_proc): Initialize state_valid & state_changed fields.

Tue Nov 28 17:51:21 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* reply_mig_hack.awk: New file.

Tue Nov 14 14:31:03 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* breakpoint.c (breakpoint_1): Print breakpoint thread field.

	* lynx-nat.c (child_wait): Return TARGET_WAITKIND_SPURIOUS for new
	threads.

Mon Nov 13 18:30:53 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* target.c (debug_to_check_threads): New function.

	* inflow.c (terminal_init_inferior_with_pgrp): New function.
	(terminal_init_inferior): Call terminal_init_inferior_with_pgrp.
	* inferior.h (terminal_init_inferior_with_pgrp): New declaration,
	but only if PROCESS_GROUP_TYPE is defined.

Mon Nov  6 16:42:09 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* target.c (debug_to_thread_alive): Pass through the return value.

Thu Nov  2 18:05:00 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* target.c (signals, target_signal_from_host, target_signal_to_host): 
	Add mach exceptions.
	* target.h (enum target_signal): Add mach exceptions.

Mon Oct 30 16:41:04 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* gnu-nat.c: New file: gnu native backend.
	* i386gnu-nat.c: New file: i386-specific part of gnu native backend.
	* gnu-nat.h: New file.
	* config/nm-gnu.h: New file.
	* config/tm-i386gnu.h: New file.
	* config/xm-i386gnu.h: New file.
	* config/i386/i386gnu.mh: New file.
	* config/i386/i386gnu.mt: New file.

Wed Feb 28 15:50:12 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (VERSION): Bump version to 4.15.2 to establish
	baseline for gdb 4.16 rerelease testing.

Wed Feb 28 13:32:05 1996  Jeffrey A Law  (law@cygnus.com)

	* somsolib.c (som_solib_create_inferior_hook): Before returning
	call clear_symtab_users.

Tue Feb 27 00:04:46 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* remote-e7000.c (e7000_open):  Delete all breakpoints when
	connecting to e7000.  Change connect message to allow use of
	monitor.exp in test suite.
	* (e7000_load):  Print transfer rate of download.
	* symfile.c (generic_load):  Print transfer rate of download.

Sun Feb 25 13:58:33 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.in (mips*-*-vxworks*): New config.
	* configure: Regenerated.

	* config/mips/vxmips.mt, config/mips/tm-vxmips.h: New files.
	* remote-vxmips.c (vx_convert_to_virtual, vx_convert_from_virtual):
	Remove, never used.

Sat Feb 24 12:30:28 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* partial-stab.h (case N_FUN):  Function symbols generated
	by SPARCworks cc have a meaningless zero value, do not update
	pst->textlow if the function symbol value is zero. 

	* stabsread.c (define_symbol):  Initialize SYMBOL_TYPE field
	for function prototype declaration symbols.

Fri Feb 23 22:33:04 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* remote-e7000.c (e7000_load):  New routine to download via the
	network.
	* (e7000_wait):  Don't backup PC when we hit a breakpoint.
	Apparantly new sh2 pods get this right...
	* (e7000_ops):  Add call to e7000_load.

Thu Feb 22 00:52:42 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config/m68k/{nbsd.mh,nbsd.mt,nm-nbsd.h,tm-nbsd.h,xm-nbsd.h},
	m68knbsd-nat.c: New files, support for NetBSD/m68k.

	* configure.in (m68k-*-netbsd*): New config.
	* configure: Regenerated.

Wed Feb 21 19:00:21 1996  Fred Fish  <fnf@cygnus.com>

	* standalone.c (open, _initialize_standalone): Fix obvious typos
	reported by Martin Pool <martin@citr.uq.oz.au>.

Wed Feb 21 14:24:04 1996  Jeffrey A Law  (law@cygnus.com)

	* solib.c (solib_create_inferior_hook): Fix thinko.

Tue Feb 20 23:59:19 1996  Jeffrey A Law  (law@cygnus.com)

	* solib.c (solib_break_names): Define for Solaris and Linux.
	(enable_break): For SVR4 systems, first try to use the debugger
	interfaces in the dynamic linker to track shared library events
	as they happen, then fall back to BKPT_AT_SYMBOL code.  Convert
	BKPT_AT_SYMBOL code to use shared library event breakpoints.
	(solib_create_inferior_hook): Simplify BKPT_AT_SYMBOL code,
	it no longer needs to restart/wait on the inferior.
	* symfile.c (find_lowest_section): No longer static.
	* symfile.h (find_lowest_section): Corresponding changes.

Tue Feb 20 18:54:08 1996  Fred Fish  <fnf@cygnus.com>

	* valops.c (COERCE_FLOAT_TO_DOUBLE): Define default value.
	(value_arg_coerce): Use COERCE_FLOAT_TO_DOUBLE.
	* config/alpha/tm-alpha.h (COERCE_FLOAT_TO_DOUBLE): Define to 1.
	* config/mips/tm-mips.h: Ditto.
	* config/pa/tm-hppa.h: Ditto.
	* config/rs6000/tm-rs6000.h: Ditto.
	* config/sparc/tm-sparc.h: Ditto.
	
Tue Feb 20 17:32:05 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config/{i386,ns32k}/nbsd.mh (NATDEPFILES): Remove core-aout.o.

	* config/nm-nbsd.h (FETCH_INFERIOR_REGISTERS): Defined.
	* config/xm-nbsd.h (CC_HAS_LONG_LONG, PRINTF_HAS_LONG_LONG):
	#ifdef'd out definitions ---  Causes serious gdb failures on 
	the i386.  Need to investigate further before enabling.

	* i386b-nat.c (fetch_inferior_registers, store_inferior_registers,
	fetch_core_registers): New functions.  These functions are defined
	if FETCH_INFERIOR_REGISTERS is set.  Registers are fetched/stored
	with ptrace PT_GETREGS/PT_SETREGS.

Tue Feb 20 16:55:06 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* findvar.c (extract_floating store_floating):  Replace `long
	double' with `DOUBLEST'.

Mon Feb 19 15:25:51 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config/xm-nbsd.h (CC_HAS_LONG_LONG, PRINTF_HAS_LONG_LONG):
 	Define.

Mon Feb 19 10:32:05 1996  Jeffrey A Law  (law@cygnus.com)

	* symtab.h (looup_minimal_symbol_solib_trampoline): Declare.

	* breakpoint.h (remove_solib_event_breakpoints): Declare.
	* breakpoint.c (remove_solib_event_breakpoints): New function.
	* somsolib.c (solib_create_inferior_hook): Remove all solib event
	breakpoints before inserting any new ones.  Use a solib event
	breakpoint for the breakpoint at "_start".
	Remove extraneous "\n" from calls to warning.  
	
	* breakpoint.c (breakpoint_1): Add missing "sigtramp" to bptypes
	name array.
	
Mon Feb 19 01:09:32 1996  Doug Evans  <dje@cygnus.com>

	* dwarfread.c (add_partial_symbol): Use ADD_PSYMBOL_ADDR_TO_LIST
	for CORE_ADDR values.
	(new_symbol): Use SYMBOL_VALUE_ADDRESS for CORE_ADDR values.
	* symfile.h (add_psymbol_{,addr}to_list): Add prototypes.

Sun Feb 18 14:37:13 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (mipscoff_symfile_read):  Unconditionally add
	alpha coff dynamic symbols for all symbol files.  Makes skipping
	over the trampoline code work when stepping from a function in a
	shared library into a function in a different shared library.

Sun Feb 18 09:27:10 1996  Stu Grossman  (grossman@cygnus.com)

	* config/sparc/tm-sparc.h:  Define PS_FLAG_CARRY.  Define
	RETURN_VALUE_ON_STACK to return long doubles on the stack.

Sat Feb 17 16:33:11 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (ch-exp.o): Add dependencies.
	(various): Add gdb_string.h to dependencies that need it.

Sat Feb 17 08:57:50 1996  Fred Fish  <fnf@cygnus.com>

	* symmisc.c (print_symbol_bcache_statistics): Update description for
	printing byte cache statistics.

Thu Feb 16 16:02:03 1996  Stu Grossman  (grossman@cygnus.com)

	* Add native support for long double data type.
	* c-exp.y (%union):  Change dval to typed_val_float.  Use DOUBLEST
	to store actual data.  Change types of INT and FLOAT tokens to
	typed_val_int and typed_val_float respectively.  Create new token
	DOUBLE_KEYWORD to specify the string `double'.  Make production
	for FLOAT use type determined by parse_number.  Add production for
	"long double" data type.
	* (parse_number):  Use sscanf to parse numbers as float, double or
	long double depending upon the type of typed_val_float.dval.  Also
	allow user to specify `f' or `l' suffix to explicitly specify
	float or long double constants.  Change typed_val to
	typed_val_int.
	* (yylex):  Change typed_val to typed_val_int.  Also, scan for
	"double" keyword.
	* coffread.c (decode_base_type):  Add support for T_LNGDBL basic
	type.
	* configure, configure.in:  Add check for long double support in
	the host compiler.
	* defs.h:  Define DOUBLEST appropriatly depending on whether
	HAVE_LONG_DOUBLE (from autoconf) is defined.  Also, fix prototypes
	for functions that handle this type.
	* expression.h (union exp_element):  doubleconst is now type
	DOUBLEST.
	* m2-exp.y f-exp.y (%union):  dval becomes type DOUBLEST.
	* findvar.c (extract_floating):  Make return value be DOUBLEST.
	Also, add support for numbers with size of long double.
	* (store_floating):  Arg `val' is now type DOUBLEST.  Handle all
	floating types.
	* parser-defs.h parse.c (write_exp_elt_dblcst):  Arg expelt is now
	DOUBLEST.
	* valarith.c (value_binop):  Change temp variables v1, v2 and v to
	type DOUBLEST.  Coerce type of result to long double if either op
	was of that type.
	* valops.c (value_arg_coerce):  If argument type is bigger than
	double, coerce to long double.
	* (call_function_by_hand):  If REG_STRUCT_HAS_ADDR is defined, and
	arg type is float and > 8 bytes, then use pointer-to-object
	calling conventions.
	* valprint.c (print_floating):  Arg doub is now type DOUBLEST.
	Use appropriate format and precision to print out floating point
	values.
	* value.h:  Fixup prototypes for value_as_double,
	value_from_double, and unpack_double to use DOUBLEST.
	* values.c (record_latest_value):  Remove check for invalid
	floats.  Allow history to store them so that people may examine
	them in hex if they want.
	* (value_as_double unpack_double):  Change return value to DOUBLEST.
	* (value_from_double):  Arg `num' is now DOUBLEST.
	* (using_struct_return):  Use RETURN_VALUE_ON_STACK macro (target
	specific) to expect certain types to always be returned on the stack.

Fri Feb 16 14:00:54 1996  Fred Fish  <fnf@cygnus.com>

	* bcache.c, bcache.h: New files to implement a byte cache.
	* Makefile.in (SFILES): Add bcache.c.
	(symtab_h): Add bcache.h.
	(HFILES_NO_SRCDIR): add bcache.h
	(COMMON_OBJS): Add bcache.o
	(bcache.o): New target.
	* dbxread.c (start_psymtab): Make global_syms & static_syms
 	type "partial_symbol **".
	* hpread.c (hpread_start_symtab):  Ditto.
	* os9kread.c (os9k_start_psymtab):  Ditto.
	* stabsread.h (start_psymtab):  Ditto.
	* {symfile.c, symfile.h} (start_psymtab_common):  Ditto.
	* maint.c (maintenance_print_statistics): Call
 	print_symbol_bcache_statistics.
	* objfiles.c (allocate_objfile): Initialize psymbol bcache malloc
	and free pointers.
	* solib.c (allocate_rt_common_objfile): Ditto.
	* symfile.c (reread_symbols):  Ditto.
	(free_objfile): Free psymbol bcache when objfile is freed.	
	(objfile_relocate): Use new indirect psymbol pointers.
	* objfiles.h (struct objfile): Add psymbol cache.
	* symfile.c (compare_psymbols): Now passed pointers to pointers to
	psymbols.
	(reread_symbols): Free psymbol bcache when freeing other objfile
	resources.
	(add_psymbol_to_list, add_psymbol_addr_to_list): Initialize new
	psymbol using the psymbol bcache.
	(init_psymbol_list): Psymbol lists now contain pointers rather than
	the actual psymbols.
	* symfile.h (psymbol_allocation_list): Psymbol lists now dynamically
	grown arrays of pointers.
	(ADD_PSYMBOL_VT_TO_LIST): Initialize new symbol using the psymbol
	bcache.
	* symmisc.c (print_partial_symbols): Now takes pointer to pointer
	to partial symbol.
	(print_symbol_bcache_statistics): New function to print per objfile
 	bcache statistics.
	(print_partial_symbol, print_partial_symbols,
 	maintenance_check_symtabs, extend_psymbol_list):
 	Account for change to pointer to pointer to partial symbol.
	* symtab.c (find_pc_psymbol, lookup_partial_symbol, decode_line_2,
	make_symbol_completion_list): 
 	Account for change to pointer to pointer to partial symbol.
	* symtab.h (bcache.h): Include.
	* xcoffread.c (xcoff_start_psymtab): Make global_syms & static_syms
 	type "partial_symbol **".

Fri Feb 16 10:02:34 1996  Fred Fish  <fnf@cygnus.com>

	* dwarfread.c (free_utypes): New function.
	(read_file_scope): Call free_utypes as cleanup,	rather than just
 	freeing the utypes pointer.

Thu Feb 15 21:40:52 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* demangle.c (is_cplus_marker):  New function, checks if a
	character is one of the commonly used C++ marker characters.
	* defs.h (is_cplus_marker):  Add prototype.
	* c-typeprint.c (c_type_print_base), ch-lang.c (chill_demangle),
	cp-valprint.c (cp_print_class_method), mdebugread.c (parse_symbol),
	stabsread.c (define_symbol, read_member_functions, read_struct_fields),
	symtab.h (OPNAME_PREFIX_P, VTBL_PREFIX_P, DESTRUCTOR_PREFIX_P),
	values.c (vb_match):  Use is_cplus_marker instead of comparison
	with CPLUS_MARKER.

Thu Feb 15 18:08:13 1996  Fred Fish  <fnf@cygnus.com>

	* symfile.h (INLINE_ADD_PSYMBOL): Default this to 0 and possibly
	delete entirely someday.

Thu Feb 15 15:25:34 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Edit out makefile rebuild rule.
	(host_alias, target_alias): Comment out instead of deleting.
	(@LIBS@): Edit out references.

Tue Feb 13 22:56:46 1996  Fred Fish  <fnf@cygnus.com>

	* symfile.c (add_psymbol_to_list, add_psymbol_addr_to_list):
 	Use n_psyms in OBJSTAT, not psyms.

Mon Feb 12 15:59:31 1996  Doug Evans  <dje@charmed.cygnus.com>

	* configure.in (sparclet-*-aout*): New config.
	* configure: Regenerated.

Mon Feb 12 14:17:52 1996  Fred Fish  <fnf@cygnus.com>

	* somsolib.c (som_solib_add): Use xmalloc rather than bare
	unchecked call to malloc.
	* remote-mips.c (pmon_load_fast): ditto.
	* remote-mm.c (mm_open): ditto.
	* hpread.c (hpread_lookup_type): ditto.
	* remote-adapt.c (adapt_open): ditto.

Mon Feb 12 13:11:32 1996  Fred Fish  <fnf@cygnus.com>

	* f-lang.c (allocate_saved_bf_node, allocate_saved_function_node,
	allocate_saved_f77_common_node, allocate_common_entry_node,
	add_common_block): Use xmalloc rather than malloc, some of which
	were unchecked.
	* gnu-regex.c: At same point as other gdb specific changes
	#undef malloc and then #define it to xmalloc.
	* ch-exp.c (growbuf_by_size): Use xmalloc/xrealloc rather than
	bare unchecked calls to malloc/realloc.
	* stabsread.c (dbx_lookup_type): Use xmalloc rather than bare
 	unchecked call to malloc.

Wed Feb  7 11:31:26 1996  Stu Grossman  (grossman@cygnus.com)

	* symtab.c (gdb_mangle_name):  Change opname var to be const to
	match return val of cplus_mangle_name.
	* i960-tdep.c:  Change arg types of next_insn to match callers.

Wed Feb  7 07:34:24 1996  Fred Fish  <fnf@cygnus.com>

	* config/i386/linux.mh (XM_CLIBS, GDBSERVER_LIBS):  Remove.  These
	apparently aren't needed in any reasonably recent version of
	linux.

Tue Feb  6 21:37:03 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* stabsread.c (read_range_type):  If !self-subrange and language
	is Chill, assume a true range.  If a true_range is a sub_subrange,
	use builtin_type_int for index_type.

Tue Feb  6 18:38:51 1996  J.T. Conklin  <jtc@slave.cygnus.com>

	* nindy-share/nindy.c (say): Use stdarg.h macros when compiling
        with an ANSI compiler.

Mon Feb  5 18:24:28 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	From Michael_Snyder@NeXT.COM (Michael Snyder):
	* valops.c (value_arg_coerce): Coerce float to double, unless the
 	function prototype specifies float.
	
Mon Feb  5 09:51:55 1996  Tom Tromey  <tromey@creche.cygnus.com>

	* language.c (set_language_command): Use languages table when
	printing available languages.

Sat Feb  3 12:22:05 1996  Fred Fish  <fnf@cygnus.com>

	Fix problems reported by Hans Verkuil (hans@wyst.hobby.nl):
	* command.c (add_cmd):  Add missing initialization for enums member.
	Reorder members to match structure declaration to make it easier to
	tell when one is missing.
	* exec.c (exec_file_command): Fix problem where filename in malloc'd
 	memory is referenced after being freed.

Sat Feb  3 03:26:21 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* dwarfread.c (read_func_scope):  Avoid GDB core dumps if
	AT_name tag is missing.

	* procfs.c (procfs_stopped_by_watchpoint):  Fix logic when
	FLTWATCH and FLTKWATCH are defined.

	* remote.c (remote_read_bytes):  Advance memaddr for transfers,
	return number of bytes transferred for partial reads.

	* top.c (init_signals):  Reset SIGTRAP to SIG_DFL.

Fri Feb  2 13:40:50 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* win32-nat.c (mappings): Add ppc registers.
	(child_resume): Turn off step for ppc.

Thu Feb  1 10:29:31 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* config/powerpc/(cygwin32.mh, cygwin32.mt, tm-cygwin32.h,
	xm-cygwin32.h): New.
	* config/i386/(*win32*): Becomes *cygwin32*.
	* configure.in (i[3456]86-*-win32*): Becomes i[3456]86-*-cygwin32.
	(powerpcle-*-cygwin32): New.
	* configure: Regenerate.
	* win32-nat.c  (child_create_inferior): Call CreateProcess
	with the right program arg.

Thu Feb  1 11:01:10 1996  Jeffrey A Law  (law@cygnus.com)

	* config/pa/tm-hppa.h (SOFT_FLOAT): Provide a default definition.

Wed Jan 31 19:01:28 1996  Fred Fish  <fnf@cygnus.com>

	* serial.c: Change fputc/fputs/fprintf to _unfiltered forms.

Wed Jan 31 18:36:27 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* config/sparc/xm-sun4os4.h (HAVE_TERMIOS): Remove.

	* config/sparc/xm-sparc.h (HAVE_WAIT_STRUCT): Remove, never used.

	* config/i386/nm-i386mach.h (CHILD_PREPARE_TO_STORE): Move to
	here from config/i386/xm-i386mach.h, fix name.
	* config/i386/nm-sun386.h: Ditto, from config/i386/xm-sun386.h.
	* config/i386/nm-ptx4.h (CHILD_PREPARE_TO_STORE): Move to
	here from config/i386/xm-ptx4.h.
	* config/i386/nm-ptx4.h: Ditto,	from config/i386/xm-ptx.h.
	* config/i386/nm-symmetry.h: Ditto, from config/i386/xm-symmetry.h.
	* config/m68k/nm-sun3.h: Ditto, from config/m68k/xm-sun3.h.
	* config/sparc/nm-nbsd.h: Ditto, from config/sparc/xm-nbsd.h.
	* config/sparc/nm-sun4os4: Ditto, from config/sparc/xm-sparc.h.

	* config/sparc/nm-sun4sol2.h: New file, renamed from nm-sysv4.h.
	(PRSVADDR_BROKEN): Move here from xm-sun4sol2.h.
	* config/sparc/sun4sol2.mh (NAT_FILE): Update.

Wed Jan 31 17:20:26 1996  Jeffrey A Law  (law@cygnus.com)

	* config/pa/tm-hppa.h (EXTRACT_RETURN_VALUE): Handle software
	floating point correctly.
	(STORE_RETURN_VALUE): Likewise.
	* config/pa/tm-pro.h (SOFT_FLOAT): define.

Wed Jan 31 13:34:52 1996  Fred Fish  <fnf@cygnus.com>

	* config/i386/xm-linux.h (MMAP_BASE_ADDRESS, MMAP_INCREMENT): 
	Define to what should be reasonable values.  However, apparently
	a bug in linux mmap prevents mapped symbol tables from working.

Tue Jan 30 18:26:19 1996  Fred Fish  <fnf@cygnus.com>

	* defs.h (errno.h>:  Move #include closer to head of file to solve
	obscure problem with systems that declare perror with const arg, in
 	both errno.h and stdio.h, and const is defined away by intervening
 	local include.

Tue Jan 30 15:41:10 1996  Fred Fish  <fnf@cygnus.com>

	From Jon Reeves <reeves@zk3.dec.com>:
	* i386-stub.c (getpacket): Change fprintf stream from "gdb" to stderr.
	(mem_fault_routine): Fix misplaced volatile type qualifier in decl.

Mon Jan 29 19:05:58 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (diststuff): Make all-doc; diststuff target does not
	exist in doc/Makefile.in.

Mon Jan 29 18:44:57 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* config/m88k/xm-cxux.h (BP_HIT_COUNT): Remove, never used.

Mon Jan 29 00:10:35 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* ch-valprint.c (calculate_array_length): New function to
 	determine the length of an array type.
	(chill_val_print (case TYPE_CODE_ARRAY)): If the length of an
	array type is zero, call calculate_array_length.

	* gdbtypes.c (get_discrete_bounds (case TYPE_CODE_ENUM)): The
 	values may not be sorted. Scan all entries and set the real lower
 	and upper bound.

Sun Jan 28 15:50:42 1996  Fred Fish  <fnf@cygnus.com>

	* config/xm-linux.h: Move include of solib.h and #define of
	SVR4_SHARED_LIBS from here ...
	* config/nm-linux.h: ...to here.

Sat Jan 27 10:34:05 1996  Fred Fish  <fnf@cygnus.com>

	* configure.in (AC_CHECK_HEADERS): Check for sys/procfs.h.
	Also check for gregset_t and fpregset_t types.
	* configure: Regenerate.
	* core-regset.c (sys/procfs.h): Only include if HAVE_SYS_PROCFS_H
 	is defined.
	(fetch_core_registers): Turn into stub unless both HAVE_GREGSET_T
 	and HAVE_FPREGSET_T are defined.  These changes allow systems
 	like linux that are migrating to /proc support to use a single
 	configuration for both new and old versions.

	* config/i386/linux.mt: Note that this is now for both a.out and
	ELF systems.
	* config/i386/linux.mh (NATDEPFILES): Add solib.o, core-regset.o,
	i386v4-nat.o
	* config/i386/tm-linux.h (tm-sysv4.h): Include.
	* config/i386/xm-linux.h (solib.h): Include
	(SVR4_SHARED_LIBS): Define.
	* i386v4-nat.c: Only compile if HAVE_SYS_PROCFS_H is defined.
	(supply_gregset, fill_gregset): Compile if HAVE_GREGSET_T defined.
	(supply_fpregset, fill_fpregset): Compile if HAVE_FPREGSET_T
 	defined.

Fri Jan 26 13:48:14 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* config/sparc/xm-sparc.h (NEW_SUN_CORE): Remove, never used.
	* config/i386/xm-sun386.h: Ditto.
	* config/m68k/xm-sun2.h, config/m68k/xm-sun3.h: Ditto.

Thu Jan 25 16:05:53 1996  Tom Tromey  <tromey@creche.cygnus.com>

	* Makefile.in (INSTALLED_LIBS, CLIBS): Include @LIBS@.

Thu Jan 25 09:22:15 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	From Greg McGary  <gkm@gnu.ai.mit.edu>:
	* dcache.c (dcache_peek, dcache_poke): Advance addr for
	multi-byte I/O.

Thu Jan 25 13:08:51 1996  Doug Evans (dje@cygnus.com)

	* infrun.c (normal_stop): Fix test for shared library event.

Thu Jan 25 03:26:38 1996  Doug Evans  <dje@charmed.cygnus.com>

	* configure.in (sparc64-*-*): Add default host configuration.
	(sparc64-*-solaris2*): Add target configuration.
	(sparc64-*-solaris2* host): Link statically if GCC used.
	* configure: Regenerated.
	* sparc/sp64sol2.mt: New file.

Wed Jan 24 22:31:37 1996  Doug Evans  <dje@charmed.cygnus.com>

	* Makefile.in (RUNTEST): srcdir renamed to rootsrc.

Wed Jan 24 15:42:24 1996  Tom Tromey  <tromey@creche.cygnus.com>

	* Makefile.in (lint): Close backquotes.

Wed Jan 24 13:19:10 1996  Fred Fish  <fnf@cygnus.com>

	* NEWS: Make note of new record and replay feature for
	remote debug sessions.
	* serial.c (gdbcmd.h): Include.
	(serial_logfile, serial_logfp, serial_reading, serial_writing):
 	Define here, for remote debug session logging.
	(serial_log_command, serial_logchar, serial_write, serial_readchar):
	New functions for remote debug session logging.
	(serial_open): Open remote debug session log file when needed.
	(serial_close): Close remote debug session log file when needed.
	(_initialize_serial): Add set/show commands for name of remote
	debug session log file.
	* serial.h (serial_readchar): Declare
	(SERIAL_READCHAR): Call serial_readchar().
	(SERIAL_WRITE): Call serial_write().
	(serial_close): Declare as extern.
	(serial_logfile, serial_logfp): Declare.
	* top.c (execute_command): Declare serial_logfp.  Log user command
	in remote debug session log if log file is open.
	* remote-array.c (array_wait): #ifdef out echo to gdb_stdout.
	(array_read_inferior_memory): Rewrite to fix memory overwrite bug.
	* remote-array.c (SREC_SIZE): Remove, duplicates define in
	monitor.h.
	* remote-array.c (hexchars, hex2mem):  Remove, unused.
	* gdbserver/low-linux.c (store_inferior_registers): Remove
	unnecessary extern declaration of registers[].
	* gdbserver/Makefile.in (all): Add gdbreplay.
	* gdbserver/gdbreplay.c: New file.
	* gdbserver/README: Give example of recording a remote
	debug session with gdb and then replaying it with gdbreplay.
	
Tue Jan 23 18:02:35 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* stabsread.c (rs6000_builtin_type):  Make bool type unsigned.
	(read_one_struct_field):  Support boolean bitfields.
	* c-valprint.c (c_val_print): Print booleans properly.

Tue Jan 23 18:54:09 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-vxsparc.c (vx_convert_to_virtual, vx_convert_from_virtual):
	Remove, never used.
	* config/sparc/vxsparc.mt (TDEPFILES): Add remote-vxsparc.o.

Tue Jan 23 14:36:05 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* ch-exp.c (parse_tuple):  Error if invalid mode.

	* value.h (COERCE_ARRAY):  Don't coerce enums.
	(COERCE_ENUM):  Don't COERCE_REF.
	(COERCE_NUMBER):  New macro (same as COERCE_ARRAY then COERCE_ENUM).
	* valops.c (value_assign):  Only do COERCE_ARRAY if internalvar (let
 	value_cast handle it otherwise); do *not* COERCE_ENUM either way.
	* valarith.c:  Use COERCE_NUMBER instead od COEREC_ARRAY.
	Add COERCE_REF before COERCE_ENUM.
	* values.c (value_as_long):  Simplify.

	* valops.c (value_array):  Create internalvar if !c_style_arrays.

	* language.c (lang_bool_type):  Add Fortran support.
	* eval.c (OP_BOOL):  Use LA_BOOL_TYPE.

Tue Jan 23 13:08:26 1996  Jeffrey A Law  (law@cygnus.com)

	* symfile.c (auto_solib_add): Renamed from auto_solib_add_at_startup.
	All references changed.
	* breakpoint.c (bpstat_what): Add shlib_event to the class types.
	Update state table.  Reformat so that it's still readable.
	When we hit the shlib_event breakpoint, set the calss of shlib_event.
	(breakpoint_1): Add "shlib events" as a breakpoint type.
	Print the shlib_event breakpoint like other breakpoints.
	(create_solib_event_breakpoint): New function.
	(breakpoint_re_set_one): Handle solib_event breakpoints.
	* breakpoint.h (enum bytype): Add bp_shlib_event breakpoint type.
	(enum bpstat_what_main_action): Add BPSTAT_WHAT_CHECK_SHLIBS
	action.
	(create_solib_event_breakpoint): Declare.
	* infrun.c (wait_for_inferior): Handle CHECK_SHLIBS bpstat.
	(normal_stop): Inform the user when the inferior stoped due
	to a shared library event.
	(_initialize_infrun): Add new set/show variable "stop-on-solib-events"
	to control whether or not gdb continues the inferior or stops it when
	a shared library event occurs.
	* minsyms.c (lookup_minimal_symbol_solib_trampoline): New function.
	* somsolib.c (TODO list): Update.
	(som_solib_create_inferior_hook): Arrange for gdb to be notified
	when significant shared library events occur.
	* hppa-tdep.c (find_unwind_entry): No longer static.

Tue Jan 23 09:00:48 1996  Doug Evans  <dje@charmed.cygnus.com>

	* printcmd.c (print_insn): Pass fprintf_unfiltered to
 	INIT_DISASSEMBLE_INFO.

Mon Jan 22 16:59:40 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* remote.c (remotebreak): New GDB variable.
	(remote_break): New global.
	(remote_interrupt): Send a break instead of ^C if remote_break.
	* NEWS: Describe the new variable.

Mon Jan 22 16:24:11 1996  Doug Evans  <dje@charmed.cygnus.com>

	* sparc-tdep.c (_initialize_sparc_tdep): Always use print_insn_sparc.

Fri Jan 19 07:19:38 1996  Fred Fish  <fnf@cygnus.com>

	* hp300ux-nat.c (getpagesize): Remove unused function
 	fetch_core_registers.
	(hp300ux_core_fns):  Remove, is unused.
	(_initialize_core_hp300ux):  Remove, is unused.
	(gdbcore.h):  Remove #include, no longer needed.
	
Fri Jan 19 00:59:53 1996  Jeffrey A Law  (law@cygnus.com)

	* rs6000-nat.c (exec_one_dummy_insn): Rework to avoid
	ptrace bug in aix4.1.3 on the rs6000.

Wed Jan 17 13:22:27 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-hms.c (hms_ops): Add value for to_thread_alive.
	* remote-nindy.c (nindy_ops): Ditto.
	* remote-udi.c (udi_ops): Ditto.

Tue Jan 16 18:00:35 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* remote-mips.c (pmon_opn, pmon_wait, pmon_makeb64, pmon_zeroset,
 	pmon_checkset, pmon_make_fastrec, pmon_check_ack,
	pmon_load_fast): New functions. Support for the PMON monitor world.
	(common_open): New function to merge support for different monitors.
	(mips_open): Use common_open().
	(mips_send_command): New function.
	(mips_send_packet): Scan out-of-sequence packets.
	(mips_enter_debug, mips_exit_debug): New functions.
	(pmon_ops): New target definition structure.
	
Tue Jan 16 11:22:58 1996  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in (CLIBS):  Add LIBS to allow libraries to be
	specified on the make command line (via make LIBS=xxx).


Fri Jan 12 21:41:58 1996  Jeffrey A Law  (law@cygnus.com)

	* symtab.c (find_pc_symtab): Don't lose if OBJF_REORDERED
	is set but there are no psymtabs.

Fri Jan 12 15:56:12 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* dsrec.c (load_srec): Remove unused variable.
	* monitor.c (monitor_expect): Don't expect a ^C to echo.
	* serial.c (serial_open): Add parallel interface.
	* sh3-rom.c (parallel, parallel_in_use): New.
	(sh3_load): If parallel_in_use, download though the
	parallel port.
	(sh3_open): Open parallel port if specified.
	(sh3_close): New function.
	(_inititalize_sh3): Add sh3_close hook and documentation.
	* monitor.c (monitor_close): Export.
	* monitor.h (monitor_close): Add prototype.

Fri Jan 12 13:11:42 1996  Stan Shebs  <shebs@andros.cygnus.com>

	From Wilfried Moser <wilfried.moser@aut.alcatel.at>:
	* remote.c (remotetimeout): New GDB variable, use to set the
	remote timeout for reading.

Fri Jan 12 07:14:27 1996  Fred Fish  <fnf@cygnus.com>

	* lynx-nat.c, irix4-nat.c, sparc-nat.c: Include gdbcore.h
	to get "struct core_fns" defined.
	* Makefile.in (lynx-nat.o, irix4-nat.o, sparc-nat.o):
 	Are dependent upon gdbcore_h.

Thu Jan 11 23:13:24 1996  Per Bothner  <bothner@cygnus.com>

	* symfile.c (decrement_reading_symtab):  New function.
	* symfile.c, symtab.h (currently_reading_symtab):  New variable.
	* symfile.c (psymtab_to_symtab):  Adjust currently_reading_symtab.
	* gdbtypes.c (check_typedef):  Don't call lookup_symbol if
	currently_reading_symtab (since that could infinitely recurse).

Thu Jan 11 17:21:25 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* stabsread.c (read_struct_type):  Trivial simplification.

	* stabsread.c (define-symbol):  Use invisible references
	for TYPE_CODE_SET and TYPE_CODE_BITSTRING too.
	* valops.c (call_function_by_hand):  Likewise.
	* eval.c (evaluate_subexp_standard):  When known, use the formal
	parameter type as the expected type when evaluating arg expressions.
	* ch-lang.c (evaluate_subexp_chill):  Likewise (for MULTI_SUBSCRIPT).

Thu Jan 11 10:08:14 1996  Tom Tromey  <tromey@creche.cygnus.com>

	* main.c (main): Disable window interface if --help or --version
	specified.

Wed Jan 10 16:08:49 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* configure.in, configure: Recognize rs6000-*-aix4*.
	* config/powerpc/xm-aix.h: Reduce to include "xm-aix4.h".
	* config/rs6000/aix4.mh (XM_FILE): Point to xm-aix4.h.
	* config/rs6000/xm-aix4.h: New file.
	* config/xm-aix4.h: New file.

Wed Jan 10 11:25:37 1996  Fred Fish  <fnf@cygnus.com>

	From Wilfried Moser <wilfried.moser@aut.alcatel.at>:
	* gdbserver/low-linux.c: New file.
	* remote.c (remote_read_bytes): Fix aborts on larger packets.

	* config/i386/linux.mh (GDBSERVER_DEPFILES, GDBSERVER_LIBS):
	Define.
	* stabsread.c (define_symbol): If register value is too large,
	tell what it is and what max is.

Tue Jan  9 09:33:53 1996  Jeffrey A Law  (law@cygnus.com)

	* hpread.c (hpread_build_psymtabs): Finish Jan 4th 
	enum namespace -> enum_namespace change.

Tue Jan  9 04:44:47 1996  Wilfried Moser  <moser@rtl.cygnus.com>

	* ch-exp.c (parse_primval): In case ARRAY, add missing
	FORWARD_TOKEN ().

Mon Jan  8 13:29:34 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-mips.c (mips_receive_header): Recognize \012 instead
	of \n, but write \n when program sends a \012.
	* ser-mac.c (mac_input_buffer): Increase size of buffer.

Mon Jan  8 12:00:40 1996  Jeffrey A Law  (law@cygnus.com)

	* infptrace.c (initialize_infptrace): Move function out of
	#ifdef conditional; put code within the function inside an
	#ifdef conditional.

	* buildsym.c (end_symtab): Remove sort_pending and sort_linevec
	arguments.  Sorting is now dependent on OBJF_REORDERED.  All
	callers/references changed.
	* dbxread.c (read_ofile_symtab): Correctly determine value for
	last_source_start_addr for reordered executables.
	(process_one_symbol): Handle N_FUN with no name as an end of
	function marker.
	* partial-stab.h (case N_FN, N_TEXT): Don't assume CUR_SYMBOL_VALUE
	is the high text address for a psymtab.
	(case N_SO): Likewise.
	(case N_FUN): Handle N_FUN with no name as an end of function
	marker.
	* minsyms.c (lookup_minimal_symbol_by_pc): Examine all symbols
	at the same address rather than a random subset of them.
	* coffread.c (coff_symfile_init): Set OBJF_REORDERED.
	* elfread.c (elf_symfile_init): Similarly.
	* somread.c (som_symfile_init): Similarly.
	* xcoffread.c (xcoff_symfile_init): Similarly.

Fri Jan  5 17:46:01 1996  Stu Grossman  (grossman@cygnus.com)

	* stack.c (print_stack_frame print_frame_info) symmisc.c
	(dump_symtab):  Change RETURN_MASK_ERROR to RETURN_MASK_ALL so
	that catch_errors doesn't get blindsided by QUIT and lose the
	cleanup chain.  This fixes a problem where ^C while in a
	user-defined command sometimes leaves instream NULL and causes a
	segfault in command_loop.

Fri Jan  5 13:59:16 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* configure.in, configure: Add `-ldl -lw' for Solaris linking.

Fri Jan  5 12:02:00 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* config/sh/sh.mt, config/powerpc/*.mt, config/pa/hppapro.mt,
	config/m68k/monitor.mt, config/h8500/h8500.mt, config/h8300/h8300.mt:
	srec.o renamed to dsrec.o.

Thu Jan  4 16:04:54 1996  Stu Grossman  (grossman@cygnus.com)

	* breakpoint.c (remove_breakpoint):  Change error to warning so
	that hardware watchpoint removal problems won't leave breakpoint
	traps in the target.
	* remote-e7000.c (e7000_insert_breakpoint,
	e7000_remove_breakpoint):  Use e7000 based breakpoints, not memory
	breakpoints.
	* (e7000_wait):  Adjust PC back by two when we see a breakpoint to
	compensate for e7000 maladjustment.
	* sparcl-tdep.c (sparclite_check_watch_resources):  Fix logic bug
	which prevented hardware watchpoints from working.

Thu Jan  4 10:44:17 1996  Fred Fish  <fnf@cygnus.com>

	* infptrace.c (udot_info): New function.
	(PT_*): Define each individually if that one is not defined.
	* rs6000-nat.c (kernel_u_size): New function
	Include <sys/user.h> for "struct user"
	* alpha-nat.c (kernel_u_size): New function.
	Include <sys/user.h> for "struct user"
	* sparc-nat.c (kernel_u_size): New function.
	Include <sys/user.h> for "struct user"
	* i386b-nat.c (kernel_u_size): New function.
	* i386v-nat.c (kernel_u_size): New function.
	* config/i386/nm-fbsd.h (KERNEL_U_SIZE): Define.
	(kernel_u_size): Declare.
	* config/i386/nm-linux.h (KERNEL_U_SIZE): Define.
	(kernel_u_size): Declare.
	* config/sparc/nm-sun4os4.h (KERNEL_U_SIZE): Define.
	(kernel_u_size): Declare.
	* config/alpha/nm-osf2.h (KERNEL_U_SIZE): Define.
	(kernel_u_size): Declare.
	* config/rs6000/nm-rs6000.h (KERNEL_U_SIZE): Define.
	(kernel_u_size): Declare.

Thu Jan  4 11:00:01 1996  steve chamberlain  <sac@slash.cygnus.com>

	* mdebugread.c (mylookup_symbol): enum namespace becomes
	enum_namespace 	type.
	* symfile.c (add_psymbol_to_list)
	(add_psymbol_addr_to_list): Ditto.
	* symtab.c (lookup_partial_symbol): Ditto.
	(lookup_symbol): Ditto.
	(lookup_block_symbol): Ditto.	
	* win32-nat.c (handle_load_dll): Use incoming dll base.
	(child_wait): Catch DLL load errors.
	(create_child_inferior): Translated between paths correctly.

Wed Jan  3 23:13:53 1996  Fred Fish  <fnf@cygnus.com>

	* i386v4-nat.c (supply_gregset, fill_gregset): Subtract NUM_FREGS
 	from NUM_REGS to get number of general registers that we care about.
	* config/i386/tm-i386.h (REGISTER_BYTES): Define in terms
	of number of general regs and number of floating point regs.

Wed Jan  3 19:49:54 1996  steve chamberlain  <sac@slash.cygnus.com>

	* config/i386/tm-win32.h (IN_SOLIB_CALL_TRAMPOLINE): New.
	(SKIP_TRAMPOLINE_CODE): New.
	* config/i386/xm-win32.h (CANT_FORK): Deleted.
	(SLASH*) Changed to use unix style slash.
	* symtab.h (namespace enum): becomes typedef to avoid namespace
	collision in C++. 
	* infcmd.c (path_command): Use empty string if PATH name not set.
	* i386-tdep.c (skip_trampoline_code): New function.
	* srec.c: Renamed dsrec.c to avoid filename collision.
	* Makefile.in: Cope with renaming.
	
Wed Jan  3 13:09:04 1996  Fred Fish  <fnf@cygnus.com>

	* symmisc.c (print_objfile_statistics): Print memory use statistics
	for objfile psymbol, symbol, and type obstacks.

Tue Jan  2 13:41:14 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* config/mips/nm-irix5.h: Restore.
	(TARGET_HAS_HARDWARE_WATCHPOINTS, etc): Define as for Irix 4;
	from Lee Iverson <leei@ai.sri.com>.
	* config/mips/irix5.mh (NAT_FILE): Use nm-irix5.h.
	* config/mips/irix[345].mh (MUNCH_DEFINE): Remove.

For older changes see ChangeLog-1995

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
