2 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3 * See the copyright notice in the ACK home directory, in the file "Copyright".
5 /* $Id: out.h,v 2.7 1994/06/24 10:08:39 ceriel Exp $ */
7 #ifndef __OUT_H_INCLUDED
8 #define __OUT_H_INCLUDED
10 * output format for ACK assemblers
14 unsigned short oh_magic; /* magic number */
15 unsigned short oh_stamp; /* version stamp */
16 unsigned short oh_flags; /* several format flags */
17 unsigned short oh_nsect; /* number of outsect structures */
18 unsigned short oh_nrelo; /* number of outrelo structures */
19 unsigned short oh_nname; /* number of outname structures */
20 long oh_nemit; /* sum of all os_flen */
21 long oh_nchar; /* size of string area */
24 #define O_MAGIC 0x0201 /* magic number of output file */
25 #define O_STAMP 0 /* version stamp */
26 #define MAXSECT 64 /* Maximum number of sections */
28 #define HF_LINK 0x0004 /* unresolved references left */
29 #define HF_8086 0x0008 /* os_base specially encoded */
32 long os_base; /* startaddress in machine */
33 long os_size; /* section size in machine */
34 long os_foff; /* startaddress in file */
35 long os_flen; /* section size in file */
36 long os_lign; /* section alignment */
40 char or_type; /* type of reference */
41 char or_sect; /* referencing section */
42 unsigned short or_nami; /* referenced symbol index */
43 long or_addr; /* referencing address */
48 char *on_ptr; /* symbol name (in core) */
49 long on_off; /* symbol name (in file) */
51 #define on_mptr on_u.on_ptr
52 #define on_foff on_u.on_off
53 unsigned short on_type; /* symbol type */
54 unsigned short on_desc; /* debug info */
55 long on_valu; /* symbol value */
59 * relocation type bits
61 #define RELSZ 0x07 /* relocation length */
62 #define RELO1 1 /* 1 byte */
63 #define RELO2 2 /* 2 bytes */
64 #define RELO4 4 /* 4 bytes */
65 #define RELPC 0x08 /* pc relative */
66 #define RELBR 0x10 /* High order byte lowest address. */
67 #define RELWR 0x20 /* High order word lowest address. */
70 * section type bits and fields
72 #define S_TYP 0x007F /* undefined, absolute or relative */
73 #define S_EXT 0x0080 /* external flag */
74 #define S_ETC 0x7F00 /* for symbolic debug, bypassing 'as' */
79 #define S_UND 0x0000 /* undefined item */
80 #define S_ABS 0x0001 /* absolute item */
81 #define S_MIN 0x0002 /* first user section */
82 #define S_MAX (S_TYP-1) /* last user section */
83 #define S_CRS S_TYP /* on_valu is symbol index which contains value */
88 #define S_SCT 0x0100 /* section names */
89 #define S_LIN 0x0200 /* hll source line item */
90 #define S_FIL 0x0300 /* hll source file item */
91 #define S_MOD 0x0400 /* ass source file item */
92 #define S_COM 0x1000 /* Common name. */
93 #define S_STB 0xe000 /* entries with any of these bits set are
94 reserved for debuggers
98 * structure format strings
100 #define SF_HEAD "22222244"
101 #define SF_SECT "44444"
102 #define SF_RELO "1124"
103 #define SF_NAME "4224"
106 * structure sizes (bytes in file; add digits in SF_*)
116 #define BADMAGIC(x) ((x).oh_magic!=O_MAGIC)
117 #define OFF_SECT(x) SZ_HEAD
118 #define OFF_EMIT(x) (OFF_SECT(x) + ((long)(x).oh_nsect * SZ_SECT))
119 #define OFF_RELO(x) (OFF_EMIT(x) + (x).oh_nemit)
120 #define OFF_NAME(x) (OFF_RELO(x) + ((long)(x).oh_nrelo * SZ_RELO))
121 #define OFF_CHAR(x) (OFF_NAME(x) + ((long)(x).oh_nname * SZ_NAME))
123 #endif /* __OUT_H_INCLUDED */