xeye_ atsu
/
FRDM_RaVem_JVM
JVM test
Embed:
(wiki syntax)
Show/hide line numbers
ravem.h
00001 /* 00002 * RAVEM.h 00003 * 00004 * Created on: 2013/07/18 00005 * Author: lynxeyed 00006 */ 00007 00008 #ifndef RAVEM_H_ 00009 #define RAVEM_H_ 00010 00011 //#include "type.h" 00012 #include "pool.h" 00013 #include "device_depend.h" 00014 #include <stdlib.h> 00015 00016 // constant_pool 00017 //#define Constant_Type Value length (in bytes) 00018 #define CONSTANT_Class 7 // 3 00019 #define CONSTANT_Fieldref 9 // 5 00020 #define CONSTANT_Methodref 10 // 5 00021 #define CONSTANT_InterfaceMethodref 11 // 5 00022 #define CONSTANT_String 8 // 3 00023 #define CONSTANT_Integer 3 // 5 00024 #define CONSTANT_Float 4 // 5 00025 #define CONSTANT_Long 5 // 9 00026 #define CONSTANT_Double 6 // 9 00027 #define CONSTANT_NameAndType 12 // 5 00028 #define CONSTANT_Utf8 1 // 4 or more (see 'length') 00029 #define CONSTANT_MethodHandle 15 // 5 00030 #define CONSTANT_MethodType 16 // 3 00031 #define CONSTANT_InvokeDynamic 18 // 3 00032 00033 //stack type 00034 #define Stack_Nothing 0 00035 #define Stack_CharType 1 00036 #define Stack_IntType 2 00037 #define Stack_DoubleType 3 00038 #define Stack_ConstantPool 4 00039 00040 //Thread State and Command 00041 #define Thread_returned 0 00042 #define Thread_Active 1 00043 #define Thread_getStartMethod 2 00044 #define Thread_getInitMethod 3 00045 #define Thread_getInitMethodWithStack 4 00046 #define Thread_init 5 00047 #define Thread_initIsDone 6 00048 #define Thread_inSleep 7 00049 00050 // instruction code mnemonic code number of arguments(in bytes) 00051 #define JAVA_nop 0x00 // 0 00052 #define JAVA_iconst_0 0x03 // 0 00053 #define JAVA_iconst_1 0x04 // 0 00054 #define JAVA_iconst_2 0x05 // 0 00055 #define JAVA_iconst_3 0x06 // 0 00056 #define JAVA_iconst_4 0x07 // 0 00057 #define JAVA_iconst_5 0x08 // 0 00058 #define JAVA_bipush 0x10 // 1 00059 #define JAVA_sipush 0x11 // 2 00060 #define JAVA_ldc 0x12 // 1 00061 //#define JAVA_ldc_w 0x13 // xxx 00062 #define JAVA_ldc2_w 0x14 // 2 00063 //#define JAVA_iload 0x15 00064 00065 #define JAVA_aload 0x19 // 1 00066 00067 #define JAVA_iload_0 0x1A // 0 00068 #define JAVA_iload_1 0x1B // 0 00069 #define JAVA_iload_2 0x1C // 0 00070 #define JAVA_iload_3 0x1D // 0 00071 00072 #define JAVA_aload_0 0x2a // 0 00073 #define JAVA_aload_1 0x2b // 0 00074 #define JAVA_aload_2 0x2c // 0 00075 #define JAVA_aload_3 0x2d // 0 00076 00077 #define JAVA_astore 0x3A // 1 00078 00079 #define JAVA_istore_0 0x3B // 0 00080 #define JAVA_istore_1 0x3C // 0 00081 #define JAVA_istore_2 0x3D // 0 00082 #define JAVA_istore_3 0x3E // 0 00083 00084 #define JAVA_astore_0 0x4b // 0 00085 #define JAVA_astore_1 0x4c // 0 00086 #define JAVA_astore_2 0x4d // 0 00087 #define JAVA_astore_3 0x4e // 0 00088 00089 #define JAVA_dup 0x59 // 0 00090 00091 #define JAVA_iadd 0x60 // 0 00092 00093 #define JAVA_iinc 0x84 // 2 00094 #define JAVA_i2l 0x85 // 0 00095 #define JAVA_i2c 0x92 // 0 00096 00097 #define JAVA_if_icmplt 0xa1 // 2 00098 #define JAVA_if_icmpge 0xa2 // 2 00099 #define JAVA_if_icmpgt 0xa3 // 2 00100 #define JAVA_if_icmple 0xa4 // 2 00101 00102 #define JAVA_goto 0xa7 // 2 00103 #define JAVA_return 0xb1 // 0 00104 #define JAVA_getstatic 0xb2 // 2 00105 #define JAVA_getfield 0xb4 // 2 00106 #define JAVA_putfield 0xb5 // 2 00107 #define JAVA_invokevirtual 0xb6 // 2 00108 #define JAVA_invokespecial 0xb7 // 2 00109 #define JAVA_invokestatic 0xb8 // 2 00110 00111 #define JAVA_new 0xbb // 2 00112 00113 typedef struct { 00114 int tag; 00115 int index; 00116 int index2; 00117 int bc_num; //pointer of bytecode 00118 void* stack_pt; // stack pointer (int,long,float,double,string) 00119 } const_pool_t; 00120 00121 00122 typedef struct { 00123 int bc_offset; // offset of bytecode (this class starts here = bc_array[bc_offset]) 00124 int code_offset; // offset of code (Now we translate here from bc_offset = bc_array[bc_offset+code_offset] ) 00125 int code_length; // length of code 00126 int stack_num; // number of stacks 00127 int local_num; // number of local registers 00128 int field_num; // number of field length 00129 int myThreadNum; // Number of this thread(you must put #0 "main" method, and do not put #0 any other methods) 00130 int threadCommand; // 00131 int threadArg; 00132 00133 int *local_reg; // local registers(malloc here) 00134 int *op_stack; // operand stack(malloc here) numerics or CP num 00135 int *op_stack_type; // type of each stack,0:nothing 1:int,byte 2:long,float,double 3:See CP 00136 00137 int *field_mem_reg; // Field (getfield and putfield) 00138 int *field_mem_type; // Member variable type (Int or String) 00139 00140 } class_st; 00141 00142 extern int32_t methods_count; 00143 00144 void bc_init(void); 00145 char *bc_seek(int bc_num, int length); 00146 const_pool_t getConstantPoolInfo(int constant_num); 00147 const_pool_t seekConstClassNumString(int const_num); 00148 const_pool_t seekClassIndex(int const_num); 00149 const_pool_t seekNameAndType_name(int const_num); 00150 const_pool_t seekNameAndType_desc(int const_num); 00151 // 00152 int getIntegerFromOperandStack(class_st cl); 00153 char* getStringFromOperandStack(class_st cl); 00154 // 00155 class_st seekCodeArrtibute(class_st cl, char* method_name, int strlen); 00156 class_st setStackFromConstantPool(class_st cl, int cp_num); 00157 class_st setIntegerToStack(class_st cl, int num); 00158 // 00159 class_st getField(class_st cl, int cp_num); 00160 class_st putField(class_st cl, int cp_num); 00161 // 00162 class_st invokevirtual_callFunction(class_st cl, int cp_num); 00163 class_st invokestatic_callFunction(class_st cl, int cp_num); 00164 class_st invokespecial_callFunction(class_st cl, int cp_num); 00165 00166 class_st decodeVM(class_st cl); 00167 00168 #endif /* RAVEM_H_ */ 00169
Generated on Tue Jul 12 2022 21:16:03 by 1.7.2