view doc/objectfiles.txt @ 106:f643e2ff0008

Fix up some bogosity that prevented automake from working right
author lost
date Tue, 27 Jan 2009 05:55:52 +0000
parents doc/object files.txt@7fbccdd1defb
children
line wrap: on
line source

An object file consists of a series of sections each of which contains a
list of exported symbols, a list of incomplete references, and a list of
"local" symbols which may be used in calculating incomplete references. Each
section will obviously also contain the object code.

Exported symbols must be completely resolved to an address within the
section it is exported from.

Each object file starts with a magic number and version number. The magic
number is the string "LWOBJ16" for this 16 bit object file format. The only
defined version number is currently 0. Thus, the first 8 bytes of the object
file are:

4C574F424A313600

Each section has the following items in order:

* section name
* flags
* list of local symbols (and addresses within the section)
* list of exported symbols (and addresses within the section)
* list of incomplete references along with the expressions to calculate them
* the actual object code

The section starts with the name of the section with a NUL termination
followed by a series of flag bytes terminated by NUL. The following flag
bytes are defined:

Byte	Meaning
00		no more flags
01		section is BSS - no actual code is present

Either a NULL section name or end of file indicate the presence of no more
sections.

Each entry in the exported and local symbols table consists of the symbol
(NUL terminated) followed by two bytes which contain the value in big endian
order. The end of a symbol table is indicated by a NULL symbol name.

Each entry in the incomplete references table consists of an expression
followed by a 16 bit offset where the reference goes. Expressions are
defined as a series of terms up to an "end of expression" term. Each term
consists of a single byte which identifies the type of term (see below)
followed by any data required by the term. Then end of the list is flagged
by a NULL expression (only an end of expression term).

TERMTYPE	Meaning
00			end of expression
01			integer (16 bit in big endian order follows)
02			external symbol reference (NUL term symbol)
03			local symbol reference (NUL term symbol)
04			operator (1 byte operator number - see below)
05			section base address reference

External references are resolved using other object files while local
references are resolved using the local symbol table(s) from this file. This
allows local symbols that are not exported to have the same names as
exported symbols or external references.

The operator numbers are:

NUM	OP
01	+ (plus)
02	- (minus)
03	* (times)
04	/ (divide)
05	% (modulus)
06	\ (integer division)
07	bitwise and
08	bitwise or
09	bitwise xor
0A	boolean and
0B	boolean or
0C	- (unary negation, 2's complement)
0D	^ (unary 1's complement)

An expression is represented in a postfix manner with both operands for
binary operators preceding the operator and the single operand for unary
operators preceding the operator.