aboutsummaryrefslogtreecommitdiffstats
path: root/section_structs.py
diff options
context:
space:
mode:
Diffstat (limited to 'section_structs.py')
-rw-r--r--section_structs.py301
1 files changed, 301 insertions, 0 deletions
diff --git a/section_structs.py b/section_structs.py
new file mode 100644
index 0000000..219f7ea
--- /dev/null
+++ b/section_structs.py
@@ -0,0 +1,301 @@
+# contains the data classes we use to hold the information of a module
+class WASM_SECTION(object):
+ def __init__(self):
+ self.section_id = int()
+ self.string = str()
+ self.payload_length = int()
+ self.is_custom_section = bool()
+ self.name_len = int()
+ self.name = str()
+ self.payload_data = bytes()
+
+class WASM_SEGMENT_INFO():
+ def __int__(self):
+ self.count = int()
+ self.segments = []
+
+class WASM_SEGMENT_INFO_SEGMENT():
+ def __init__(self):
+ self.name_len = int()
+ self.name_data = str()
+ self.alignment = int()
+ self.flags = int()
+
+class WASM_COMDAT_INFO_SUB():
+ def __init__(self):
+ self.count = int()
+ self.comdats = []
+
+class COMDAT():
+ def __init(self):
+ self.name_len = int()
+ self.name_str = str()
+ self.flags = int()
+ self.count = int()
+ self.comdat_syms = []
+
+class COMDAT_SYM():
+ def __init(self):
+ self.kind = int()
+ self.index = int()
+
+class WASM_COMDAT_KIND():
+ WASM_COMDAT_DATA = 0
+ WASM_COMDAT_FUNCTION = 1
+ WASM_COMDAT_GLOBAL = 2
+
+class WASM_INIT_FUNCS():
+ def __init__(self):
+ self.count = int()
+ self.functions = []
+
+class WASM_SYMBOL_TABLE():
+ def __init__(self):
+ self.count = int()
+ self.syminfo = []
+
+class SYM_INFO():
+ def __init__(self):
+ self.kind = int()
+ self.flags = int()
+
+class SYM_INFO_FLAGS():
+ WASM_SYM_BINDING_WEAK = 1
+ WASM_SYM_BINDING_LOCAL = 2
+ WASM_SYM_VISIBILITY_HIDDEN = 4
+ WASM_SYM_UNDEFINED = 16
+
+
+class Rel_Entry():
+ def __int__(self):
+ self.type = int()
+ self.offset = int()
+ self.index = int()
+
+class RelA_Entry():
+ def __int__(self):
+ self.type = int()
+ self.offset = int()
+ self.index = int()
+ self.addend = int()
+
+class Relocation_Section():
+ def __int__(self):
+ self.section_id = int()
+ self.name_length = int()
+ self.name = str()
+ self.count = int()
+ self.entries = int()
+
+class Func_Type():
+ def __init__(self):
+ self.form = int()
+ self.param_cnt = int()
+ self.param_types = []
+ self.return_cnt = int()
+ self.return_type = []
+
+class Global_Type():
+ def __init__(self):
+ self.content_type = int()
+ self.mutability = int()
+
+class Resizable_Limits():
+ def __init__(self):
+ self.flags = int()
+ self.initial = int()
+ self.maximum = int()
+
+class Table_Type():
+ def __init__(self):
+ self.element_type = int()
+ self.limit = Resizable_Limits()
+
+class External_Kind():
+ def __init__(self):
+ self.Function = 0
+ self.Table = 1
+ self.Memory = 2
+ self.Global = 3
+
+class Memory_Type():
+ def __init__(self):
+ self.limits = [Resizable_Limits()]
+
+# @DEVI-FIXME-
+class Init_Expr():
+ pass
+
+class Type_Section():
+ def __init__(self):
+ self.count = []
+ self.func_types = []
+
+class Import_Entry():
+ def __init__(self):
+ self.module_len = int()
+ self.module_str = []
+ self.field_len = int()
+ self.field_str = []
+ self.kind = int()
+ self.type = int()
+
+class Import_Section():
+ def __init__(self):
+ self.count = []
+ self.import_entry = []
+
+class Function_Section():
+ def __init__(self):
+ self.count = []
+ self.type_section_index = [int()]
+
+class Table_Section():
+ def __init__(self):
+ self.count = []
+ self.table_types = []
+
+class Memory_Section():
+ def __init__(self):
+ self.count = []
+ # Resizable_Limits
+ self.memory_types = []
+
+class Global_Variable():
+ def __init__(self):
+ self.global_type = Global_Type()
+ self.init_expr = []
+
+class Global_Section():
+ def __init__(self):
+ self.count = []
+ # Global_Variable
+ self.global_variables = []
+
+class Export_Entry():
+ def __init__(self):
+ self.field_len = int()
+ self.field_str = []
+ self.kind = int()
+ self.index = int()
+
+class Export_Section():
+ def __init__(self):
+ self.count = []
+ # Export_Entry
+ self.export_entries = []
+
+class Start_Section():
+ def __init__(self):
+ self.function_section_index = []
+
+class Elem_Segment():
+ def __init__(self):
+ self.index = int()
+ self.offset = []
+ self.num_elem = int()
+ self.elems = []
+
+class Element_Section():
+ def __init__(self):
+ self.count = []
+ # Elem_Segment
+ self.elem_segments = []
+
+class Local_Entry():
+ def __init__(self):
+ self.count = int()
+ self.type = int()
+
+class WASM_Ins():
+ def __init__(self):
+ self.opcode = str()
+ self.opcodeint = int()
+ self.operands = []
+
+class Func_Body():
+ def __init__(self):
+ self.body_size = int()
+ self.local_count = int()
+ # Local_Entry
+ self.locals = []
+ # WASM_Ins
+ self.code = []
+ self.end = int()
+
+class Code_Section():
+ def __init__(self):
+ self.count = []
+ # Func_Body
+ self.func_bodies = []
+
+class Data_Segment():
+ def __init__(self):
+ self.index = int()
+ self.offset = []
+ self.size = int()
+ self.data = []
+
+class Data_Section():
+ def __init__(self):
+ self.count = []
+ # Data_Segment
+ self.data_segments = []
+
+class Name_Type():
+ Module = 0
+ Function = 1
+ Local = 2
+
+class Name_Section_Entry(object):
+ def __init__(self, name_type, name_payload_len, name_payload_data):
+ self.name_type = name_type
+ self.name_payload_len = name_payload_len
+ self.name_payload_data = name_payload_data
+
+class Name_Section(object):
+ def __init__(self, name_section_entry):
+ self.name_section_entry = []
+ self.name_section_entry = name_section_entry
+
+class Module_Name(object):
+ def __init__(self, name_len, name_str):
+ self.name_len = name_len
+ self.name_str = name_str
+
+class Naming(object):
+ def __init__(self, index, name_len, name_str):
+ self.index = index
+ self.name_len = name_len
+ self.name_str = name_str
+
+class Name_Map(object):
+ def __init__(self, count, naming):
+ self.count = count
+ self.naming = []
+ self.naming = naming
+
+# the module class
+class Module():
+ def __init__(self, type_section, import_section, function_section,
+ table_section, memory_section, global_section, export_section,
+ start_section, element_section, code_section, data_section):
+ self.type_section = type_section
+ self.import_section = import_section
+ self.function_section = function_section
+ self.table_section = table_section
+ self.memory_section = memory_section
+ self.global_section = global_section
+ self.export_section = export_section
+ self.start_section = start_section
+ self.element_section = element_section
+ self.code_section = code_section
+ self.data_section = data_section
+
+'''
+class RT_INS_CELL(object):
+ def __init__(self):
+ label : str
+ mnemonic : str
+ ops : list
+'''