src/share/vm/prims/jvmtiClassFileReconstituter.hpp

Print this page
rev 2902 : 7064927: retransformClasses() does not pass in LocalVariableTable of a method
Summary: Handle LVT attribute in the class file reconstitutor.
Reviewed-by: phh
Contributed-by: thomaswue <thomas.wuerthinger@oracle.com>


 102 
 103   enum {
 104     // initial size should be power of two
 105     initial_buffer_size = 1024
 106   };
 107 
 108   inline Thread* thread() { return _thread; }
 109 
 110   void write_class_file_format();
 111   void write_field_infos();
 112   void write_method_infos();
 113   void write_method_info(methodHandle method);
 114   void write_code_attribute(methodHandle method);
 115   void write_exceptions_attribute(constMethodHandle const_method);
 116   void write_synthetic_attribute();
 117   void write_class_attributes();
 118   void write_source_file_attribute();
 119   void write_source_debug_extension_attribute();
 120   u2 line_number_table_entries(methodHandle method);
 121   void write_line_number_table_attribute(methodHandle method, u2 num_entries);

 122   void write_stackmap_table_attribute(methodHandle method, int stackmap_table_len);
 123   u2 inner_classes_attribute_length();
 124   void write_inner_classes_attribute(int length);
 125   void write_signature_attribute(u2 generic_signaure_index);
 126   void write_attribute_name_index(const char* name);
 127   void write_annotations_attribute(const char* attr_name, typeArrayHandle annos);
 128 
 129   address writeable_address(size_t size);
 130   void write_u1(u1 x);
 131   void write_u2(u2 x);
 132   void write_u4(u4 x);
 133   void write_u8(u8 x);
 134 
 135  public:
 136   // Calls to this constructor must be proceeded by a ResourceMark
 137   // and a HandleMark
 138   JvmtiClassFileReconstituter(instanceKlassHandle ikh) :
 139                                       JvmtiConstantPoolReconstituter(ikh) {
 140     _buffer_size = initial_buffer_size;
 141     _buffer = _buffer_ptr = NEW_RESOURCE_ARRAY(u1, _buffer_size);


 102 
 103   enum {
 104     // initial size should be power of two
 105     initial_buffer_size = 1024
 106   };
 107 
 108   inline Thread* thread() { return _thread; }
 109 
 110   void write_class_file_format();
 111   void write_field_infos();
 112   void write_method_infos();
 113   void write_method_info(methodHandle method);
 114   void write_code_attribute(methodHandle method);
 115   void write_exceptions_attribute(constMethodHandle const_method);
 116   void write_synthetic_attribute();
 117   void write_class_attributes();
 118   void write_source_file_attribute();
 119   void write_source_debug_extension_attribute();
 120   u2 line_number_table_entries(methodHandle method);
 121   void write_line_number_table_attribute(methodHandle method, u2 num_entries);
 122   void write_local_variable_table_attribute(methodHandle method, u2 num_entries);
 123   void write_stackmap_table_attribute(methodHandle method, int stackmap_table_len);
 124   u2 inner_classes_attribute_length();
 125   void write_inner_classes_attribute(int length);
 126   void write_signature_attribute(u2 generic_signaure_index);
 127   void write_attribute_name_index(const char* name);
 128   void write_annotations_attribute(const char* attr_name, typeArrayHandle annos);
 129 
 130   address writeable_address(size_t size);
 131   void write_u1(u1 x);
 132   void write_u2(u2 x);
 133   void write_u4(u4 x);
 134   void write_u8(u8 x);
 135 
 136  public:
 137   // Calls to this constructor must be proceeded by a ResourceMark
 138   // and a HandleMark
 139   JvmtiClassFileReconstituter(instanceKlassHandle ikh) :
 140                                       JvmtiConstantPoolReconstituter(ikh) {
 141     _buffer_size = initial_buffer_size;
 142     _buffer = _buffer_ptr = NEW_RESOURCE_ARRAY(u1, _buffer_size);