| ("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")))) |
| |