| ("cs" 0x0 | |
| (("size") (1 byte) ("size")) | |
| (("hd") (1 byte) ("hd")) | |
| (("hs") (1 byte) ("hs")) | |
| (("un") (1 byte) ("un")) | |
| (("us") (1 byte) ("us")) | |
| (("sc") (1 byte) ("sc")) | |
| (("ss") (1 byte) ("ss")) | |
| (("er") (1 byte) ("er")) | |
| (("ed") (1 byte) ("ed")) | |
| (("sh") (1 byte) ("sh")) | |
| (("ob") (1 byte) ("ob")) | |
| (("rl") (1 byte) ("rl")) | |
| (("du") (1 byte) ("du")) | |
| (("dps") (1 byte) ("dps")) | |
| (("dsy") (1 byte) ("dsy")) | |
| (("dty") (1 byte) ("dty")) | |
| (("dln") (1 byte) ("dln")) | |
| (("dso") (1 byte) ("dso")) | |
| (("dus") (1 byte) ("dus")) | |
| (("dss") (1 byte) ("dss")) | |
| (("dbt") (1 byte) ("dbt")) | |
| (("dpp") (1 byte) ("dpp")) | |
| (("dfp") (1 byte) ("dfp")) | |
| (("den") (1 byte) ("den")) | |
| (("dds") (1 byte) ("dds")) | |
| (("dar") (1 byte) ("dar")) | |
| (("dpt") (1 byte) ("dpt")) | |
| (("dul") (1 byte) ("dul")) | |
| (("dse") (1 byte) ("dse")) | |
| (("dot") (1 byte) ("dot"))) | |
| ("hd" 0x04 | |
| (("module type") (4 bits) ("mt") | |
| (("MTYPE_ABS_LM" "0") | |
| ("MTYPE_REL_LM" "1") | |
| ("MTYPE_OMS_OR_LMS" "2") | |
| ("MTYPE_UNSPEC" "0xf"))) | |
| (("spare")(4 bits) ("spare1")) | |
| (("creation date")( chars 12 bytes)( "cd")) | |
| (("number of units") (2 bytes) ("nu")) | |
| (("code") (1 byte) ("code")) | |
| (("version") (chars 4 bytes) ("ver")) | |
| (("address update") (1 byte) ("au")) | |
| (("segment identifier") (1 bit) ("si")) | |
| (("address field length") (4 bits) ("afl")) | |
| (("spare")(3 bits) ("spare2")) | |
| (("space size within segment") (1 byte) ("spcsz")) | |
| (("segment size") (1 byte) ("segsz")) | |
| (("segment shift") (1 byte) ("segsh")) | |
| (("entry point") (1 byte) ("ep")) | |
| (cond "ptr->ep" | |
| (cond "ptr->mt != MTYPE_ABS_LM" | |
| (("unit appearance number") (2 bytes) ("uan")) | |
| (("section appearance number") (2 bytes) ("sa"))) | |
| (cond "segmented_p" | |
| (("segment address") (segsize bytes) ("sad"))) | |
| (("address") (addrsize bytes) ("address"))) | |
| (("os name") (chars variable bytes) ("os")) | |
| (("sys name") (chars variable bytes) ("sys")) | |
| (("module name") (chars variable bytes) ("mn")) | |
| (("cpu") (chars variable bytes) ("cpu"))) | |
| ("hs" 0x05 | |
| (("neg number") (2 bytes) ("neg"))) | |
| ("un" 0x06 | |
| (("format") (2 bits) ("format") | |
| (("FORMAT_LM" "0") | |
| ("FORMAT_OM" "1") | |
| ("FORMAT_OMS_OR_LMS" "2"))) | |
| (("spare") (6 bits) ("spare1")) | |
| (("number of sections") (2 bytes) ("nsections")) | |
| (("number of external refs") (2 bytes) ("nextrefs")) | |
| (("number of external defs") (2 bytes) ("nextdefs")) | |
| (("unit name") (chars variable byte) ("name")) | |
| (("tool name") (chars variable byte) ("tool")) | |
| (("creation date") (chars 12 bytes) ("tcd")) | |
| (("linker name") (chars variable byte) ("linker")) | |
| (("creation date") (chars 12 bytes) ("lcd"))) | |
| ("us" 0x07 | |
| (("negotiation number") (2 bytes) ("neg"))) | |
| ("sc" 0x08 | |
| (("format") (2 bits) ("format")) | |
| (("spare") (6 bits) ("spare")) | |
| (("segment address") (segsize bytes) ("segadd")) | |
| (("address") (addrsize bytes) ("addr")) | |
| (("length") (addrsize bytes) ("length")) | |
| (("alignment") (addrsize bytes) ("align")) | |
| (("contents") (4 bits) ("contents") | |
| (("CONTENTS_CODE" "0") | |
| ("CONTENTS_DATA" "1") | |
| ("CONTENTS_STACK" "2") | |
| ("CONTENTS_DUMMY" "3") | |
| ("CONTENTS_SPECIAL" "4") | |
| ("CONTENTS_NONSPEC" "0xf"))) | |
| (("concat") (4 bits) ("concat") | |
| (("CONCAT_SIMPLE" "0") | |
| ("CONCAT_SHAREDC" "1") | |
| ("CONCAT_DUMMY" "2") | |
| ("CONCAT_GROUP" "3") | |
| ("CONCAT_SHARED" "4") | |
| ("CONCAT_PRIVATE" "5") | |
| ("CONCAT_UNSPEC" "0xf"))) | |
| (("read") (2 bits) ("read")) | |
| (("write") (2 bits) ("write")) | |
| (("exec") (2 bits) ("exec")) | |
| (("initialized") (2 bits) ("init")) | |
| (("mode") (2 bits) ("mode")) | |
| (("spare") (6 bits) ("spare1")) | |
| (("name") (chars variable byte) ("name"))) | |
| ("ss" 0x09 | |
| (("neg number") (2 bytes) ("neg"))) | |
| ("er" 0x0c | |
| (("symbol type") (2 bits) ("type") | |
| (("ER_ENTRY" "0") | |
| ("ER_DATA" "1") | |
| ("ER_NOTDEF" "2") | |
| ("ER_NOTSPEC" "3"))) | |
| (("spare") (6 bits) ("spare")) | |
| (("symbol name") (chars variable byte) ("name"))) | |
| ("ed" 0x14 | |
| (("section appearance number") (2 bytes) ("section")) | |
| (("symbol type") (3 bits) ("type") | |
| (("ED_TYPE_ENTRY" "0") | |
| ("ED_TYPE_DATA" "1") | |
| ("ED_TYPE_CONST" "2") | |
| ("ED_TYPE_NOTSPEC" "7"))) | |
| (("spare") (5 bits) ("spare")) | |
| (cond "ptr->type==ED_TYPE_ENTRY || ptr->type==ED_TYPE_DATA" | |
| (("symbol address") (addrsize bytes) ("address"))) | |
| (cond "ptr->type==ED_TYPE_CONST" | |
| (("constant value") (addrsize bytes) ("constant"))) | |
| (("symbol name") (chars variable byte) ("name"))) | |
| ("sh" 0x1a | |
| (("unit appearance number") (2 bytes) ("unit")) | |
| (("section appearance number") (2 bytes) ("section"))) | |
| ("ob" 0x1c | |
| (("starting address flag") (1 bit) ("saf")) | |
| (("compression flag") (1 bit) ("cpf")) | |
| (("spare") (6 bits) ("spare")) | |
| (cond "ptr->saf" | |
| ( ("starting address") (addrsize bytes) ("address"))) | |
| (cond "ptr->cpf" | |
| (("comp reps") (addrsize bytes) ("compreps"))) | |
| (("data") (barray counted byte) ("data"))) | |
| ("rl" 0x20 | |
| (("boundary of relocatable area") (4 bits) ("boundary")) | |
| (("address polarity") (1 bit) ("apol")) | |
| (("segment number") (1 bit) ("segment")) | |
| (("sign of relocation") (1 bit) ("sign")) | |
| (("check range") (1 bit) ("check")) | |
| (("reloc address") (addrsize bytes) ("addr")) | |
| (("bit loc") (1 byte) ("bitloc")) | |
| (("field length") (1 byte) ("flen")) | |
| (("bcount") (1 byte) ("bcount")) | |
| (("operator") (1 byte) ("op") | |
| (("OP_RELOC_ADDR" "1") | |
| ("OP_SEC_REF" "0") | |
| ("OP_EXT_REF" "2"))) | |
| (cond "ptr->op == OP_EXT_REF" | |
| (("symbol number") (2 bytes) ("symn")) ) | |
| (cond "ptr->op == OP_SEC_REF" | |
| (("section number") (2 bytes) ("secn")) | |
| (("const opcode") (1 byte) ("copcode_is_3")) | |
| (("addend length") (1 byte) ("alength_is_4")) | |
| (("addend") (4 byte) ("addend")) | |
| (("plus opcode") (1 byte) ("aopcode_is_0x20"))) | |
| (cond "ptr->op == OP_RELOC_ADDR" | |
| (("dunno") (2 bytes) ("dunno"))) | |
| (("end") (1 byte) ("end"))) | |
| ("du" 0x30 | |
| (("format") (2 bits) ("format")) | |
| (("optimized") (1 bit) ("optimized")) | |
| (("stackfrmt") (2 bits) ("stackfrmt")) | |
| (("spare") (3 bits) ("spare")) | |
| (("unit number") (2 bytes) ("unit")) | |
| (("sections") (2 bytes) ("sections")) | |
| (repeat "ptr->sections" | |
| (("section appearance number") (2 bytes) ("san")) | |
| (("address") (addrsize bytes) ("address")) | |
| (("section length") (addrsize bytes) ("length"))) | |
| (("tool name") (chars variable byte) ("tool")) | |
| (("creation date") (chars 12 bytes) ("date"))) | |
| ("dsy" 0x34 | |
| (("symbol type") (7 bits) ("type") | |
| (("STYPE_VAR" "0") | |
| ("STYPE_LAB" "1") | |
| ("STYPE_PROC" "2") | |
| ("STYPE_FUNC" "3") | |
| ("STYPE_TYPE" "4") | |
| ("STYPE_CONST" "5") | |
| ("STYPE_ENTRY" "6") | |
| ("STYPE_MEMBER" "7") | |
| ("STYPE_ENUM" "8") | |
| ("STYPE_TAG" "9") | |
| ("STYPE_PACKAGE" "10") | |
| ("STYPE_GENERIC" "11") | |
| ("STYPE_TASK" "12") | |
| ("STYPE_EXCEPTION" "13") | |
| ("STYPE_PARAMETER" "14") | |
| ("STYPE_EQUATE" "15") | |
| ("STYPE_UNSPEC" "0x7f"))) | |
| (("assignment info") (1 bit) ("assign")) | |
| (("symbol id") (2 bytes) ("snumber")) | |
| (("symbol name") (chars variable bytes) ("sname")) | |
| (("nesting level") (2 bytes) ("nesting")) | |
| (cond "ptr->assign" | |
| (("assignment type") (1 byte) ("ainfo") | |
| (("AINFO_REG" "1") | |
| ("AINFO_STATIC_EXT_DEF" "2") | |
| ("AINFO_STATIC_EXT_REF" "3") | |
| ("AINFO_STATIC_INT" "4") | |
| ("AINFO_STATIC_COM" "5") | |
| ("AINFO_AUTO" "6") | |
| ("AINFO_CONST" "7") | |
| ("AINFO_UNSPEC" "0xff"))) | |
| (("data length") (addrsize bytes) ("dlength")) | |
| (cond "ptr->ainfo == AINFO_STATIC_EXT_DEF | |
| || ptr->ainfo == AINFO_STATIC_INT | |
| || ptr->ainfo == AINFO_STATIC_COM" | |
| (("section number") (2 bytes) ("section"))) | |
| (cond "ptr->ainfo == AINFO_STATIC_EXT_DEF | |
| || ptr->ainfo == AINFO_STATIC_INT | |
| || ptr->ainfo == AINFO_STATIC_COM | |
| || ptr->ainfo == AINFO_AUTO" | |
| (("address") (addrsize bytes) ("address"))) | |
| (cond "ptr->ainfo == AINFO_REG" | |
| (("register name") (chars variable bytes) ("reg"))) | |
| (cond "ptr->ainfo == AINFO_STATIC_EXT_DEF | |
| || ptr->ainfo == AINFO_STATIC_EXT_REF" | |
| (("external name") (chars variable bytes) ("ename"))) | |
| (cond "ptr->ainfo == AINFO_CONST" | |
| (("constant") (chars variable bytes) ("constant")))) | |
| (cond "ptr->type == STYPE_MEMBER" | |
| (("assignment unit") (1 bit) ("bitunit")) | |
| (("spare") (7 bits) ("spare2")) | |
| (("field length") (addrsize bytes) ("field_len")) | |
| (("field offset") (addrsize bytes) ("field_off")) | |
| (cond "ptr->bitunit" | |
| (("bit offset") (addrsize bytes) ("field_bitoff")))) | |
| (cond "ptr->type== STYPE_ENUM" | |
| (("value length") (1 byte) ("evallen")) | |
| (("value") (4 bytes) ("evalue"))) | |
| (cond "ptr->type == STYPE_CONST" | |
| (("value") (chars variable bytes) ("cvalue"))) | |
| (cond "ptr->type == STYPE_EQUATE" | |
| (("value length") (1 byte) ("qvallen")) | |
| (("value") (4 bytes) ("qvalue")) | |
| (("basic type") (1 byte) ("btype")) | |
| (("size information") (addrsize bytes) ("sizeinfo")) | |
| (("sign") (2 bits) ("sign")) | |
| (("floating point type") (6 bits) ("flt_type"))) | |
| (("source file number") (2 bytes) ("sfn")) | |
| (("source line number") (2 bytes) ("sln")) | |
| (("negotiation number") (2 bytes) ("neg")) | |
| (cond "ptr->type == STYPE_TAG" | |
| (("magic") (1 byte) ("magic")))) | |
| ("dul" 0x52 | |
| (("max declaration type flag") (1 bit) ("max_variable")) | |
| (("max spare") (7 bits) ("maxspare")) | |
| (cond "ptr->max_variable == 0" | |
| (("maximum") (addrsize bytes) ("max")) | |
| (("max mode") (chars variable bytes) ("maxmode"))) | |
| (("min declaration type flag") (1 bit) ("min_variable")) | |
| (("min spare") (7 bits) ("minspare")) | |
| (cond "ptr->min_variable == 0" | |
| (("minimum") (addrsize bytes) ("min")) | |
| (("min mode") (chars variable bytes) ("minmode")))) | |
| ("dty" 0x36 | |
| (("end flag") (1 bit) ("end")) | |
| (("spare") (7 bits) ("spare")) | |
| (cond "!ptr->end" | |
| (("negotiation") (2 bytes) ("neg")))) | |
| ("dbt" 0x44 | |
| (("basic type") (1 byte) ("btype") | |
| (("BTYPE_VOID" "0") | |
| ("BTYPE_UNDEF" "1") | |
| ("BTYPE_CHAR" "2") | |
| ("BTYPE_INT" "3") | |
| ("BTYPE_FLOAT" "4") | |
| ("BTYPE_BIT" "5") | |
| ("BTYPE_STRING" "6") | |
| ("BTYPE_DECIMAL" "7") | |
| ("BTYPE_ENUM" "8") | |
| ("BTYPE_STRUCT" "9") | |
| ("BTYPE_TYPE" "10") | |
| ("BTYPE_TAG" "11") | |
| ("BTYPE_UNSPEC" "0xff"))) | |
| (("size info") (addrsize bytes) ("bitsize")) | |
| (("sign") (2 bits) ("sign") | |
| (("SIGN_SIGNED" "0") | |
| ("SIGN_UNSIGNED" "1") | |
| ("SIGN_UNSPEC" "3"))) | |
| (("floating point type") (6 bits) ("fptype") | |
| (("FPTYPE_SINGLE" "0") | |
| ("FPTYPE_DOUBLE" "1") | |
| ("FPTYPE_EXTENDED" "2") | |
| ("FPTYPE_NOTSPEC" "0x3f"))) | |
| (cond "ptr->btype==BTYPE_TAG || ptr->btype == BTYPE_TYPE" | |
| (("symbol id") (2 bytes) ("sid"))) | |
| (("negotiation") (2 bytes) ("neg"))) | |
| ("dar" 0x4e | |
| (("element length" ) (addrsize bytes) ("length")) | |
| (("dims") (1 byte) ("dims")) | |
| (repeat "ptr->dims" | |
| (("variable flag") (1 bit) ("variable") | |
| (("VARIABLE_FIXED" "0") | |
| ("VARIABLE_VARIABLE" "1"))) | |
| (("subscript type") (1 bit) ("subtype") | |
| (("SUB_INTEGER" "0") | |
| ("SUB_TYPE" "1"))) | |
| (("spare") (6 bits) ("spare")) | |
| (cond "ptr->subtype[n] == SUB_TYPE" | |
| (("sub symbol id") (2 bytes) ("sid"))) | |
| (cond "ptr->subtype[n] == SUB_INTEGER" | |
| (("max declaration type flag") (1 bit) ("max_variable")) | |
| (("max spare") (7 bits) ("maxspare")) | |
| ;; FIXME: next field should be conditional on max_variable, | |
| (("maximum") (addrsize bytes) ("max")) | |
| (("min declaration type flag") (1 bit) ("min_variable")) | |
| (("min spare") (7 bits) ("minspare")) | |
| ;; FIXME: next field should be conditional on min_variable | |
| (("minimum") (addrsize bytes) ("min")))) | |
| (("negotiation") (2 bytes) ("neg"))) | |
| ("dso" 0x3a | |
| (("function name") (2 bytes) ("sid")) | |
| (("sp update count") (4 bytes) ("spupdates")) | |
| (repeat "ptr->spupdates" | |
| (("update address") (addrsize bytes) ("address")) | |
| (("offset") (addrsize bytes) ("offset")))) | |
| ("dln" 0x38 | |
| (("number of lines") (2 bytes) ("nln")) | |
| (repeat "ptr->nln" | |
| (("source file number") (2 bytes) ("sfn")) | |
| (("source line number") (2 bytes) ("sln")) | |
| (("section number") (2 bytes) ("section")) | |
| (("from address") (addrsize bytes) ("from_address")) | |
| (("to address") (addrsize bytes) ("to_address")) | |
| (("call count") (2 bytes) ("cc")) | |
| ) | |
| (("neg") (2 bytes) ("neg"))) | |
| ("dpp" 0x46 | |
| (("start/end") (1 bit) ("end")) | |
| (("spare") (7 bits) ("spare")) | |
| (cond "!ptr->end" | |
| (("params") (1 byte) ("params")) | |
| (("neg number") (2 bytes) ("neg")))) | |
| ("den" 0x4a | |
| (("start/end") (1 bit) ("end")) | |
| (("spare") (7 bits) ("spare")) | |
| (cond "!ptr->end" | |
| (("neg number") (2 bytes) ("neg")))) | |
| ("dfp" 0x48 | |
| (("start/end flag") (1 bit) ("end")) | |
| (("spare") (7 bits) ("spare")) | |
| (cond "!ptr->end" | |
| (("number of parameters") (1 byte) ("nparams")) | |
| (("neg number") (2 bytes) ("neg")))) | |
| ("dds" 0x4c | |
| (("start/end") (1 bit) ("end")) | |
| (("spare") (7 bits) ("spare")) | |
| (cond "!ptr->end" | |
| (("neg number") (2 bytes) ("neg")))) | |
| ("dpt" 0x50 | |
| (("neg number") (2 bytes) ("neg")) | |
| (("dunno") (1 byte) ("dunno"))) | |
| ("dse" 0x54 | |
| (("neg number") (2 bytes) ("neg")) | |
| (("dunno") (1 byte) ("dunno"))) | |
| ("dot" 0x56 | |
| (("unknown") (1 byte) ("unknown"))) | |
| ; FIXME: unknown field should be repeated symbol number? | |
| ("dss" 0x42 | |
| (("type") (1 byte) ("type")) | |
| (("external/internal") (1 bit) ("internal")) | |
| (("spare") (7 bits) ("spare")) | |
| (cond "!ptr->internal" | |
| ( ("package name") (chars variable byte) ("package"))) | |
| (cond "ptr->internal" | |
| (("symbol id") (2 bytes) ("id"))) | |
| (("record type") (2 bytes) ("record")) | |
| (("rules") (chars variable byte) ("rules")) | |
| (("number of symbols") (2 bytes) ("nsymbols")) | |
| (("unknown" ) (2 bytes) ("fixme"))) | |
| ("pss" 0x40 | |
| (("negotiation number") (2 bytes) ("efn")) | |
| (("number of source files") (2 bytes) ("ns")) | |
| (repeat "ptr->ns" | |
| (("directory reference bit") (1 bit) ("drb")) | |
| (("spare") (7 bits) ("spare")) | |
| (("completed file name") (chars variable byte) ("fname")) | |
| (cond "ptr->drb[n]" | |
| (("directory apperance number") (2 bytes) ("dan")))) | |
| (("number of directories") (2 bytes) ("ndir")) | |
| (repeat "ptr->ndir" | |
| (("directory name") (chars variable bytes) ("dname")))) | |
| ; FIXME: the tr block has no contents. sysinfo, etc. aren't prepared | |
| ; to deal with that. | |
| ; ("tr" 0x7f) | |
| ("dus" 0x40 | |
| (("negotiation number") (2 bytes) ("efn")) | |
| (("number of source files") (2 bytes) ("ns")) | |
| (repeat "ptr->ns" | |
| (("directory reference bit") (1 bit) ("drb")) | |
| (("spare") (7 bits) ("spare")) | |
| (("completed file name") (chars variable byte) ("fname")) | |
| (cond "ptr->drb[n]" | |
| (("directory apperance number") (2 bytes) ("dan")))) | |
| (("number of directories") (2 bytes) ("ndir")) | |
| (repeat "ptr->ndir" | |
| (("directory name") (chars variable bytes) ("dname")))) | |
| ("dps" 0x32 | |
| (("start/end flag") (1 bit) ("end")) | |
| (("block type") (7 bits) ("type") | |
| (("BLOCK_TYPE_COMPUNIT" "0") | |
| ("BLOCK_TYPE_PROCEDURE" "2") | |
| ("BLOCK_TYPE_FUNCTION" "3") | |
| ("BLOCK_TYPE_BLOCK" "4") | |
| ("BLOCK_TYPE_BASIC" "9"))) | |
| (cond "!ptr->end" | |
| (("optimization") (1 byte) ("opt")) | |
| (("section number") (2 bytes) ("san")) | |
| (("address") (addrsize bytes) ("address")) | |
| (("block size") (addrsize bytes) ("block_size")) | |
| (("nesting") (1 byte) ("nesting")) | |
| (cond "ptr->type == BLOCK_TYPE_PROCEDURE | |
| || ptr->type == BLOCK_TYPE_FUNCTION" | |
| (("return address") (1 bit) ("retaddr")) | |
| (("interrupt function flag") (1 bit) ("intrflag")) | |
| (("stack update flag") (1 bit) ("stackflag")) | |
| (("intra page JMP") (1 bit) ("intrpagejmp")) | |
| (("spare") (4 bits) ("spare"))) | |
| (("neg number") (2 bytes) ("neg")))) | |