266 |
266 |
267 // Write SourceDebugExtension attribute |
267 // Write SourceDebugExtension attribute |
268 // JSR45| SourceDebugExtension_attribute { |
268 // JSR45| SourceDebugExtension_attribute { |
269 // JSR45| u2 attribute_name_index; |
269 // JSR45| u2 attribute_name_index; |
270 // JSR45| u4 attribute_length; |
270 // JSR45| u4 attribute_length; |
271 // JSR45| u2 sourcefile_index; |
271 // JSR45| u1 debug_extension[attribute_length]; |
272 // JSR45| } |
272 // JSR45| } |
273 void JvmtiClassFileReconstituter::write_source_debug_extension_attribute() { |
273 void JvmtiClassFileReconstituter::write_source_debug_extension_attribute() { |
274 assert(ikh()->source_debug_extension() != NULL, "caller must check"); |
274 assert(ikh()->source_debug_extension() != NULL, "caller must check"); |
275 |
275 |
276 write_attribute_name_index("SourceDebugExtension"); |
276 write_attribute_name_index("SourceDebugExtension"); |
277 write_u4(2); // always length 2 |
277 int len = (int)strlen(ikh()->source_debug_extension()); |
278 write_u2(symbol_to_cpool_index(ikh()->source_debug_extension())); |
278 write_u4(len); |
|
279 u1* ext = (u1*)ikh()->source_debug_extension(); |
|
280 for (int i=0; i<len; i++) { |
|
281 write_u1(ext[i]); |
|
282 } |
279 } |
283 } |
280 |
284 |
281 // Write (generic) Signature attribute |
285 // Write (generic) Signature attribute |
282 // JVMSpec| Signature_attribute { |
286 // JVMSpec| Signature_attribute { |
283 // JVMSpec| u2 attribute_name_index; |
287 // JVMSpec| u2 attribute_name_index; |