ecoff_machdep.h revision 1.17
1/*	$NetBSD: ecoff_machdep.h,v 1.17 2000/03/28 02:58:44 simonb Exp $	*/
2
3/*
4 * Copyright (c) 1997 Jonathan Stone
5 * All rights reserved.
6 *
7 * Copyright (c) 1994 Adam Glass
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 * 3. All advertising materials mentioning features or use of this software
19 *    must display the following acknowledgement:
20 *	This product includes software developed by Adam Glass.
21 * 4. The name of the Author may not be used to endorse or promote products
22 *    derived from this software without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY Adam Glass ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED.  IN NO EVENT SHALL Adam Glass BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 */
36
37#define ECOFF_LDPGSZ 4096
38
39#define ECOFF_PAD
40
41#define ECOFF_MACHDEP \
42        u_long gprmask; \
43        u_long cprmask[4]; \
44        u_long gp_value
45#ifdef _KERNEL
46#include <mips/cpu.h>		/* mips CPU architecture levels */
47#define _MIPS3_OK() CPUISMIPS3
48#else
49#define _MIPS3_OK() 1
50#endif
51
52
53#define ECOFF_MAGIC_MIPSEB	0x0160	/* mips1, big-endian */
54#define ECOFF_MAGIC_MIPSEL	0x0162	/* mips1, little-endian */
55#define ECOFF_MAGIC_MIPSEL3	0x0142	/* mips3, little-endian */
56
57#if BYTE_ORDER == LITTLE_ENDIAN
58#define ECOFF_BADMAG(ep) \
59    (!								\
60	((ep)->f.f_magic == ECOFF_MAGIC_MIPSEL ||		\
61	 (_MIPS3_OK() && (ep)->f.f_magic == ECOFF_MAGIC_MIPSEL3)) \
62    )
63#endif
64#if BYTE_ORDER == BIG_ENDIAN
65#define ECOFF_BADMAG(ep) ((ep)->f.f_magic != ECOFF_MAGIC_MIPSEB)
66#endif
67
68
69#define ECOFF_SEGMENT_ALIGNMENT(ep) ((ep)->a.vstamp < 23 ? 8 : 16)
70
71#ifdef _KERNEL
72struct proc;
73struct exec_package;
74void	cpu_exec_ecoff_setregs __P((
75    struct proc *, struct exec_package *, u_long));
76#endif	/* _KERNEL */
77
78
79/*
80 * ECOFF symbol definitions for 32-bit mips.
81 * XXX 64-bit (mips3?) may be different.
82 */
83struct ecoff_symhdr {
84	int16_t		magic;
85	int16_t		vstamp;
86	int32_t		ilineMax;
87	int32_t		cbLine;
88	int32_t		cbLineOffset;
89	int32_t		idnMax;
90	int32_t		cbDnOffset;
91	int32_t		ipdMax;
92	int32_t		cbPdOffset;
93	int32_t		isymMax;
94	int32_t		cbSymOffset;
95	int32_t		ioptMax;
96	int32_t		cbOptOffset;
97	int32_t		iauxMax;
98	int32_t		cbAuxOffset;
99	int32_t		issMax;
100	int32_t		cbSsOffset;
101	int32_t		issExtMax;
102	int32_t		cbSsExtOffset;
103	int32_t		ifdMax;
104	int32_t		cbFdOffset;
105	int32_t		crfd;
106	int32_t		cbRfdOffset;
107	int32_t		iextMax;
108	int32_t		cbExtOffset;
109};
110
111/* Macro for field name used by cgd's Alpha-derived code */
112#define esymMax iextMax
113
114
115struct ecoff_extsym {
116	u_int16_t	es_flags;
117	u_int16_t	es_ifd;
118	int32_t		es_strindex;
119	int32_t		es_value;
120	unsigned	es_type:6;
121	unsigned	es_class:5;
122	unsigned	:1;
123	unsigned	es_symauxindex:20;
124};
125