FreeBSD/Linux Kernel Cross Reference
sys/sys/exec_coff.h
1 /* $NetBSD: exec_coff.h,v 1.7 2005/12/11 12:25:20 christos Exp $ */
2
3 /*-
4 * Copyright (C) 2000 SAITOH Masanobu. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #ifndef _SYS_EXEC_COFF_H_
30 #define _SYS_EXEC_COFF_H_
31
32 #include <machine/coff_machdep.h>
33
34 /*
35 * COFF file header
36 */
37
38 struct coff_filehdr {
39 u_short f_magic; /* magic number */
40 u_short f_nscns; /* # of sections */
41 long f_timdat; /* timestamp */
42 long f_symptr; /* file offset of symbol table */
43 long f_nsyms; /* # of symbol table entries */
44 u_short f_opthdr; /* size of optional header */
45 u_short f_flags; /* flags */
46 };
47
48 /* f_flags */
49 #define COFF_F_RELFLG 0x1
50 #define COFF_F_EXEC 0x2
51 #define COFF_F_LNNO 0x4
52 #define COFF_F_LSYMS 0x8
53 #define COFF_F_SWABD 0x40
54 #define COFF_F_AR16WR 0x80
55 #define COFF_F_AR32WR 0x100
56 #define COFF_F_AR32W 0x200
57
58 /*
59 * COFF system header
60 */
61
62 struct coff_aouthdr {
63 short a_magic;
64 short a_vstamp;
65 long a_tsize;
66 long a_dsize;
67 long a_bsize;
68 long a_entry;
69 long a_tstart;
70 long a_dstart;
71 };
72
73 /*
74 * COFF section header
75 */
76
77 struct coff_scnhdr {
78 char s_name[8];
79 long s_paddr;
80 long s_vaddr;
81 long s_size;
82 long s_scnptr;
83 long s_relptr;
84 long s_lnnoptr;
85 u_short s_nreloc;
86 u_short s_nlnno;
87 long s_flags;
88 };
89
90 /* s_flags */
91 #define COFF_STYP_REG 0x00
92 #define COFF_STYP_DSECT 0x01
93 #define COFF_STYP_NOLOAD 0x02
94 #define COFF_STYP_GROUP 0x04
95 #define COFF_STYP_PAD 0x08
96 #define COFF_STYP_COPY 0x10
97 #define COFF_STYP_TEXT 0x20
98 #define COFF_STYP_DATA 0x40
99 #define COFF_STYP_BSS 0x80
100 #define COFF_STYP_INFO 0x200
101 #define COFF_STYP_OVER 0x400
102 #define COFF_STYP_SHLIB 0x800
103
104 /*
105 * COFF shared library header
106 */
107
108 struct coff_slhdr {
109 long entry_len; /* in words */
110 long path_index; /* in words */
111 char sl_name[1];
112 };
113
114 struct coff_exechdr {
115 struct coff_filehdr f;
116 struct coff_aouthdr a;
117 };
118
119 #define COFF_ROUND(val, by) (((val) + by - 1) & ~(by - 1))
120
121 #define COFF_ALIGN(a) ((a) & ~(COFF_LDPGSZ - 1))
122
123 #define COFF_HDR_SIZE \
124 (sizeof(struct coff_filehdr) + sizeof(struct coff_aouthdr))
125
126 #define COFF_BLOCK_ALIGN(ap, value) \
127 ((ap)->a_magic == COFF_ZMAGIC ? COFF_ROUND(value, COFF_LDPGSZ) : \
128 value)
129
130 #define COFF_TXTOFF(fp, ap) \
131 ((ap)->a_magic == COFF_ZMAGIC ? 0 : \
132 COFF_ROUND(COFF_HDR_SIZE + (fp)->f_nscns * \
133 sizeof(struct coff_scnhdr), \
134 COFF_SEGMENT_ALIGNMENT(fp, ap)))
135
136 #define COFF_DATOFF(fp, ap) \
137 (COFF_BLOCK_ALIGN(ap, COFF_TXTOFF(fp, ap) + (ap)->a_tsize))
138
139 #define COFF_SEGMENT_ALIGN(fp, ap, value) \
140 (COFF_ROUND(value, ((ap)->a_magic == COFF_ZMAGIC ? COFF_LDPGSZ : \
141 COFF_SEGMENT_ALIGNMENT(fp, ap))))
142
143 #ifdef _KERNEL
144 int exec_coff_makecmds(struct lwp *, struct exec_package *);
145
146 int exec_coff_prep_omagic(struct lwp *, struct exec_package *,
147 struct coff_filehdr *,
148 struct coff_aouthdr *);
149 int exec_coff_prep_nmagic(struct lwp *, struct exec_package *,
150 struct coff_filehdr *,
151 struct coff_aouthdr *);
152 int exec_coff_prep_zmagic(struct lwp *, struct exec_package *,
153 struct coff_filehdr *,
154 struct coff_aouthdr *);
155 #endif /* _KERNEL */
156 #endif /* !_SYS_EXEC_COFF_H_ */
Cache object: 84702e0a8a083bb25f0f28031b22d22f
|