diff options
Diffstat (limited to 'spec/iex')
-rw-r--r-- | spec/iex/iex-spec.txt | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/spec/iex/iex-spec.txt b/spec/iex/iex-spec.txt new file mode 100644 index 0000000..6979cfc --- /dev/null +++ b/spec/iex/iex-spec.txt @@ -0,0 +1,128 @@ +This is the IEX file specification. + +Document version (semver): 0.0.1 +Main Author: Kyle Gunger + +License: Apache 2.0 + +---------------------------------- + +Contents: + +Organization + +---------------------------------- + +Organization + +Magic number starts the file "IEX" or 0x49 0x45 0x58 + +The header of the file can be represented as such + +;struct IEX_HEAD { + raw {3}char # Always "IEX" + magic, + + {}char + name, + arch, + os, + + uint8 # Version info + major, + minor, + patch, + # OS abi info + os_major, + os_minor, + os_patch, + + bool # Tells loader that the file holds a main function + can_execute, + + ~void ({}{}char args) [int] + # Address of main in file + start_addr, + + {}IEX_SECTION + sections, + + {}IEX_LIB + dependencies, + + IEX_MODULE + self +} + +a section is defined as + +;struct IEX_SECTION { + {}char + name, + + uint8 # Denotes dependency, symbol table, data, bss, text, etc. + type, + + ~void # Points to start and end of section + start, + end +} + +;struct IEX_LIB { + {}char + name, + + uint8 # Version info + major, + minor, + patch +} + +;struct IEX_MODULE { + {}char + name, + + {}IEX_FUNCTION + func, + + {}IEX_TYPE + types, + + {}IEX_MODULE + sub +} + +;struct IEX_FUNCTION { + {}char + name, + + uint32 + overload, + bytes_in, + bytes_out, + + ~void + addr +} + +;struct IEX_TYPE { + {}char + name, + + bool + raw_struct, + interface, + dynamic, + + uint32 + size, + + {}IEX_FUNCTION + methods, + + {}IEX_TYPE + supers, + + ~void + addr +} |