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.
	* doc/gdbint.texinfo: Document that SIGTRAMP_START and
	SIGTRAMP_END are macros that take an single argument.

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)

	* gdb/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.
        * gdb/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:
