comparison doc/object files.txt @ 96:7fbccdd1defb

Added doc subdirectory to distribution
author lost
date Sat, 17 Jan 2009 07:09:02 +0000
parents
children
comparison
equal deleted inserted replaced
95:f3497072ac44 96:7fbccdd1defb
1 An object file consists of a series of sections each of which contains a
2 list of exported symbols, a list of incomplete references, and a list of
3 "local" symbols which may be used in calculating incomplete references. Each
4 section will obviously also contain the object code.
5
6 Exported symbols must be completely resolved to an address within the
7 section it is exported from.
8
9 Each object file starts with a magic number and version number. The magic
10 number is the string "LWOBJ16" for this 16 bit object file format. The only
11 defined version number is currently 0. Thus, the first 8 bytes of the object
12 file are:
13
14 4C574F424A313600
15
16 Each section has the following items in order:
17
18 * section name
19 * flags
20 * list of local symbols (and addresses within the section)
21 * list of exported symbols (and addresses within the section)
22 * list of incomplete references along with the expressions to calculate them
23 * the actual object code
24
25 The section starts with the name of the section with a NUL termination
26 followed by a series of flag bytes terminated by NUL. The following flag
27 bytes are defined:
28
29 Byte Meaning
30 00 no more flags
31 01 section is BSS - no actual code is present
32
33 Either a NULL section name or end of file indicate the presence of no more
34 sections.
35
36 Each entry in the exported and local symbols table consists of the symbol
37 (NUL terminated) followed by two bytes which contain the value in big endian
38 order. The end of a symbol table is indicated by a NULL symbol name.
39
40 Each entry in the incomplete references table consists of an expression
41 followed by a 16 bit offset where the reference goes. Expressions are
42 defined as a series of terms up to an "end of expression" term. Each term
43 consists of a single byte which identifies the type of term (see below)
44 followed by any data required by the term. Then end of the list is flagged
45 by a NULL expression (only an end of expression term).
46
47 TERMTYPE Meaning
48 00 end of expression
49 01 integer (16 bit in big endian order follows)
50 02 external symbol reference (NUL term symbol)
51 03 local symbol reference (NUL term symbol)
52 04 operator (1 byte operator number - see below)
53 05 section base address reference
54
55 External references are resolved using other object files while local
56 references are resolved using the local symbol table(s) from this file. This
57 allows local symbols that are not exported to have the same names as
58 exported symbols or external references.
59
60 The operator numbers are:
61
62 NUM OP
63 01 + (plus)
64 02 - (minus)
65 03 * (times)
66 04 / (divide)
67 05 % (modulus)
68 06 \ (integer division)
69 07 bitwise and
70 08 bitwise or
71 09 bitwise xor
72 0A boolean and
73 0B boolean or
74 0C - (unary negation, 2's complement)
75 0D ^ (unary 1's complement)
76
77 An expression is represented in a postfix manner with both operands for
78 binary operators preceding the operator and the single operand for unary
79 operators preceding the operator.