[9] | 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 | /* $Header: /cvsup/minix/src/commands/autil/out.h,v 1.1.1.1 2005/04/21 14:54:10 beng Exp $ */
|
---|
| 6 |
|
---|
| 7 | #ifndef __OUT_H_INCLUDED
|
---|
| 8 | #define __OUT_H_INCLUDED
|
---|
| 9 | /*
|
---|
| 10 | * output format for ACK assemblers
|
---|
| 11 | */
|
---|
| 12 | #ifndef ushort
|
---|
| 13 | #define ushort unsigned short
|
---|
| 14 | #endif /* ushort */
|
---|
| 15 |
|
---|
| 16 | struct outhead {
|
---|
| 17 | ushort oh_magic; /* magic number */
|
---|
| 18 | ushort oh_stamp; /* version stamp */
|
---|
| 19 | ushort oh_flags; /* several format flags */
|
---|
| 20 | ushort oh_nsect; /* number of outsect structures */
|
---|
| 21 | ushort oh_nrelo; /* number of outrelo structures */
|
---|
| 22 | ushort oh_nname; /* number of outname structures */
|
---|
| 23 | long oh_nemit; /* sum of all os_flen */
|
---|
| 24 | long oh_nchar; /* size of string area */
|
---|
| 25 | };
|
---|
| 26 |
|
---|
| 27 | #define O_MAGIC 0x0201 /* magic number of output file */
|
---|
| 28 | #define O_STAMP 0 /* version stamp */
|
---|
| 29 | #define MAXSECT 64 /* Maximum number of sections */
|
---|
| 30 |
|
---|
| 31 | #define HF_LINK 0x0004 /* unresolved references left */
|
---|
| 32 | #define HF_8086 0x0008 /* os_base specially encoded */
|
---|
| 33 |
|
---|
| 34 | struct outsect {
|
---|
| 35 | long os_base; /* startaddress in machine */
|
---|
| 36 | long os_size; /* section size in machine */
|
---|
| 37 | long os_foff; /* startaddress in file */
|
---|
| 38 | long os_flen; /* section size in file */
|
---|
| 39 | long os_lign; /* section alignment */
|
---|
| 40 | };
|
---|
| 41 |
|
---|
| 42 | struct outrelo {
|
---|
| 43 | char or_type; /* type of reference */
|
---|
| 44 | char or_sect; /* referencing section */
|
---|
| 45 | ushort or_nami; /* referenced symbol index */
|
---|
| 46 | long or_addr; /* referencing address */
|
---|
| 47 | };
|
---|
| 48 |
|
---|
| 49 | struct outname {
|
---|
| 50 | union {
|
---|
| 51 | char *on_ptr; /* symbol name (in core) */
|
---|
| 52 | long on_off; /* symbol name (in file) */
|
---|
| 53 | } on_u;
|
---|
| 54 | #define on_mptr on_u.on_ptr
|
---|
| 55 | #define on_foff on_u.on_off
|
---|
| 56 | ushort on_type; /* symbol type */
|
---|
| 57 | ushort on_desc; /* debug info */
|
---|
| 58 | long on_valu; /* symbol value */
|
---|
| 59 | };
|
---|
| 60 |
|
---|
| 61 | /*
|
---|
| 62 | * relocation type bits
|
---|
| 63 | */
|
---|
| 64 | #define RELSZ 0x07 /* relocation length */
|
---|
| 65 | #define RELO1 1 /* 1 byte */
|
---|
| 66 | #define RELO2 2 /* 2 bytes */
|
---|
| 67 | #define RELO4 4 /* 4 bytes */
|
---|
| 68 | #define RELPC 0x08 /* pc relative */
|
---|
| 69 | #define RELBR 0x10 /* High order byte lowest address. */
|
---|
| 70 | #define RELWR 0x20 /* High order word lowest address. */
|
---|
| 71 |
|
---|
| 72 | /*
|
---|
| 73 | * section type bits and fields
|
---|
| 74 | */
|
---|
| 75 | #define S_TYP 0x007F /* undefined, absolute or relative */
|
---|
| 76 | #define S_EXT 0x0080 /* external flag */
|
---|
| 77 | #define S_ETC 0x7F00 /* for symbolic debug, bypassing 'as' */
|
---|
| 78 |
|
---|
| 79 | /*
|
---|
| 80 | * S_TYP field values
|
---|
| 81 | */
|
---|
| 82 | #define S_UND 0x0000 /* undefined item */
|
---|
| 83 | #define S_ABS 0x0001 /* absolute item */
|
---|
| 84 | #define S_MIN 0x0002 /* first user section */
|
---|
| 85 | #define S_MAX (S_TYP-1) /* last user section */
|
---|
| 86 | #define S_CRS S_TYP /* on_valu is symbol index which contains value */
|
---|
| 87 |
|
---|
| 88 | /*
|
---|
| 89 | * S_ETC field values
|
---|
| 90 | */
|
---|
| 91 | #define S_SCT 0x0100 /* section names */
|
---|
| 92 | #define S_LIN 0x0200 /* hll source line item */
|
---|
| 93 | #define S_FIL 0x0300 /* hll source file item */
|
---|
| 94 | #define S_MOD 0x0400 /* ass source file item */
|
---|
| 95 | #define S_COM 0x1000 /* Common name. */
|
---|
| 96 | #define S_STB 0xe000 /* entries with any of these bits set are
|
---|
| 97 | reserved for debuggers
|
---|
| 98 | */
|
---|
| 99 |
|
---|
| 100 | /*
|
---|
| 101 | * structure format strings
|
---|
| 102 | */
|
---|
| 103 | #define SF_HEAD "22222244"
|
---|
| 104 | #define SF_SECT "44444"
|
---|
| 105 | #define SF_RELO "1124"
|
---|
| 106 | #define SF_NAME "4224"
|
---|
| 107 |
|
---|
| 108 | /*
|
---|
| 109 | * structure sizes (bytes in file; add digits in SF_*)
|
---|
| 110 | */
|
---|
| 111 | #define SZ_HEAD 20
|
---|
| 112 | #define SZ_SECT 20
|
---|
| 113 | #define SZ_RELO 8
|
---|
| 114 | #define SZ_NAME 12
|
---|
| 115 |
|
---|
| 116 | /*
|
---|
| 117 | * file access macros
|
---|
| 118 | */
|
---|
| 119 | #define BADMAGIC(x) ((x).oh_magic!=O_MAGIC)
|
---|
| 120 | #define OFF_SECT(x) SZ_HEAD
|
---|
| 121 | #define OFF_EMIT(x) (OFF_SECT(x) + ((long)(x).oh_nsect * SZ_SECT))
|
---|
| 122 | #define OFF_RELO(x) (OFF_EMIT(x) + (x).oh_nemit)
|
---|
| 123 | #define OFF_NAME(x) (OFF_RELO(x) + ((long)(x).oh_nrelo * SZ_RELO))
|
---|
| 124 | #define OFF_CHAR(x) (OFF_NAME(x) + ((long)(x).oh_nname * SZ_NAME))
|
---|
| 125 |
|
---|
| 126 | #endif /* __OUT_H_INCLUDED */
|
---|