176 return ref_index; 177 } 178 179 int resolved_references_entry_to_pool_index(int ref_index) { 180 int cp_index = _resolved_references_map.at(ref_index); 181 return cp_index; 182 } 183 184 // Access the contents of _cp_cache_map to determine CP cache layout. 185 int cp_cache_entry_pool_index(int cache_index) { 186 int cp_index = _cp_cache_map.at(cache_index); 187 return cp_index; 188 } 189 190 // All the work goes in here: 191 Rewriter(InstanceKlass* klass, const constantPoolHandle& cpool, Array<Method*>* methods, TRAPS); 192 193 void compute_index_maps(); 194 void make_constant_pool_cache(TRAPS); 195 void scan_method(Method* m, bool reverse, bool* invokespecial_error); 196 void rewrite_Object_init(methodHandle m, TRAPS); 197 void rewrite_member_reference(address bcp, int offset, bool reverse); 198 void maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse); 199 void rewrite_invokedynamic(address bcp, int offset, bool reverse); 200 void maybe_rewrite_ldc(address bcp, int offset, bool is_wide, bool reverse); 201 void rewrite_invokespecial(address bcp, int offset, bool reverse, bool* invokespecial_error); 202 203 void patch_invokedynamic_bytecodes(); 204 205 // Do all the work. 206 void rewrite_bytecodes(TRAPS); 207 208 // Revert bytecodes in case of an exception. 209 void restore_bytecodes(); 210 211 static methodHandle rewrite_jsrs(methodHandle m, TRAPS); 212 public: 213 // Driver routine: 214 static void rewrite(InstanceKlass* klass, TRAPS); 215 }; 216 217 #endif // SHARE_VM_INTERPRETER_REWRITER_HPP | 176 return ref_index; 177 } 178 179 int resolved_references_entry_to_pool_index(int ref_index) { 180 int cp_index = _resolved_references_map.at(ref_index); 181 return cp_index; 182 } 183 184 // Access the contents of _cp_cache_map to determine CP cache layout. 185 int cp_cache_entry_pool_index(int cache_index) { 186 int cp_index = _cp_cache_map.at(cache_index); 187 return cp_index; 188 } 189 190 // All the work goes in here: 191 Rewriter(InstanceKlass* klass, const constantPoolHandle& cpool, Array<Method*>* methods, TRAPS); 192 193 void compute_index_maps(); 194 void make_constant_pool_cache(TRAPS); 195 void scan_method(Method* m, bool reverse, bool* invokespecial_error); 196 void rewrite_Object_init(const methodHandle& m, TRAPS); 197 void rewrite_member_reference(address bcp, int offset, bool reverse); 198 void maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse); 199 void rewrite_invokedynamic(address bcp, int offset, bool reverse); 200 void maybe_rewrite_ldc(address bcp, int offset, bool is_wide, bool reverse); 201 void rewrite_invokespecial(address bcp, int offset, bool reverse, bool* invokespecial_error); 202 203 void patch_invokedynamic_bytecodes(); 204 205 // Do all the work. 206 void rewrite_bytecodes(TRAPS); 207 208 // Revert bytecodes in case of an exception. 209 void restore_bytecodes(); 210 211 static methodHandle rewrite_jsrs(const methodHandle& m, TRAPS); 212 public: 213 // Driver routine: 214 static void rewrite(InstanceKlass* klass, TRAPS); 215 }; 216 217 #endif // SHARE_VM_INTERPRETER_REWRITER_HPP |