Pristine Ack-5.5
[Ack-5.5.git] / h / out.h
1 /*
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".
4  */
5 /* $Id: out.h,v 2.7 1994/06/24 10:08:39 ceriel Exp $ */
6
7 #ifndef __OUT_H_INCLUDED
8 #define __OUT_H_INCLUDED
9 /*
10  * output format for ACK assemblers
11  */
12
13 struct outhead {
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 */
22 };
23
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 */
27
28 #define HF_LINK 0x0004                  /* unresolved references left */
29 #define HF_8086 0x0008                  /* os_base specially encoded */
30
31 struct outsect {
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 */
37 };
38
39 struct outrelo {
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 */
44 };
45
46 struct outname {
47         union {
48           char  *on_ptr;                /* symbol name (in core) */
49           long  on_off;                 /* symbol name (in file) */
50         }       on_u;
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 */
56 };
57
58 /*
59  * relocation type bits
60  */
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. */
68
69 /*
70  * section type bits and fields
71  */
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' */
75
76 /*
77  * S_TYP field values
78  */
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 */
84
85 /*
86  * S_ETC field values
87  */
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
95                                         */
96
97 /*
98  * structure format strings
99  */
100 #define SF_HEAD         "22222244"
101 #define SF_SECT         "44444"
102 #define SF_RELO         "1124"
103 #define SF_NAME         "4224"
104
105 /*
106  * structure sizes (bytes in file; add digits in SF_*)
107  */
108 #define SZ_HEAD         20
109 #define SZ_SECT         20
110 #define SZ_RELO         8
111 #define SZ_NAME         12
112
113 /*
114  * file access macros
115  */
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))
122
123 #endif /* __OUT_H_INCLUDED */