Coherent4.2.10/include/sys/core.h

/* (-lgl
 *	Coherent 386 release 4.2
 *	Copyright (c) 1982, 1993 by Mark Williams Company.
 *	All rights reserved. May not be copied without permission.
 *	For copying permission and licensing info, write licensing@mwc.com
 -lgl) */

#ifndef __SYS_CORE_H__
#define __SYS_CORE_H__

/*
 * Core file header struct.
 *
 * This core-file structure is only an interim measure until ELF support is
 * available.
 *
 * Configurable kernel variable DUMP_LIM is used to keep core files from
 * getting out of hand.  Any segment whose size in bytes is larger than
 * DUMP_LIM will not be dumped.
 */

#include <common/_gregset.h>
#include <common/_dregset.h>
#include <common/_caddr.h>
#include <ieeefp.h>


/*
 * The following is a header written at the start of the corefile. If the
 * length value indicates data beyond the size of this structure, then there
 * is data in the "core_proc" format following this header.
 */

struct ch_info {
	unsigned short	ch_magic;	/* as below */
	unsigned int	ch_info_len;	/* including this structure */
};

#define CORE_MAGIC	0x0106


/*
 * In order to encourage a modicum of separation between debugger and kernel,
 * the following structure appears in the corefile as a replacement for the
 * real u area. This structure represents the exact same data as that which
 * can be requested via ptrace. In fact, the ptrace symbols would be defined
 * in terms of this structure except for some bugs in Coherent 'cc'.
 *
 * Per-process use of the hardware debug registers is not quite yet supported,
 * but we reserve the space.
 */

struct core_proc {
	gregset_t	cp_registers;
	int		cp_signal_number;
	struct _fpstate	cp_floating_point;
	dregset_t	cp_debug_registers;
};


/*
 * The various process segments follow; for pure text such as that found in
 * COFF .text segments or in COHERENT-286 separate executables, the pure text
 * segment is not present in the file itself, but can be identified from one
 * of the segment descriptor items below. (Note that for COHERENT-286 images,
 * the dump segment ordering may be used to disambiguate segments).
 */

/*
 * Rather than dump kernel internal data structures out into the core file,
 * instead we dump each memory segment prefixed by a header in the following
 * format. The header is then followed by "cs_pathlen" bytes of information
 * identifying the file from which the segment data originated (under COHERENT
 * 4.2, this name may not be a full pathname, and it may include an
 * unspecified amount of padding) after which "cs_dumped" bytes of core image
 * may be found.
 */

struct core_seg {
	size_t		cs_pathlen;	/* length of pathname */
	off_t		cs_dumped;	/* dumped size in bytes */

	caddr_t		cs_base;	/* virtual base address */
	off_t		cs_size;	/* full size in bytes */

	unsigned long	cs_reserved [8];
};

#endif /* ! defined (__SYS_CORE_H__) */