src/share/vm/asm/assembler.hpp

Print this page
rev 4202 : 8008555: Debugging code in compiled method sometimes leaks memory
Summary: support for strings that have same life-time as code that uses them.
Reviewed-by:


 319   void      set_inst_mark()       {        code_section()->set_mark();   }
 320   void    clear_inst_mark()       {        code_section()->clear_mark(); }
 321 
 322   // Constants in code
 323   void relocate(RelocationHolder const& rspec, int format = 0) {
 324     assert(!pd_check_instruction_mark()
 325         || inst_mark() == NULL || inst_mark() == code_section()->end(),
 326         "call relocate() between instructions");
 327     code_section()->relocate(code_section()->end(), rspec, format);
 328   }
 329   void relocate(   relocInfo::relocType rtype, int format = 0) {
 330     code_section()->relocate(code_section()->end(), rtype, format);
 331   }
 332 
 333   static int code_fill_byte();         // used to pad out odd-sized code buffers
 334 
 335   // Associate a comment with the current offset.  It will be printed
 336   // along with the disassembly when printing nmethods.  Currently
 337   // only supported in the instruction section of the code buffer.
 338   void block_comment(const char* comment);


 339 
 340   // Label functions
 341   void bind(Label& L); // binds an unbound label L to the current code position
 342 
 343   // Move to a different section in the same code buffer.
 344   void set_code_section(CodeSection* cs);
 345 
 346   // Inform assembler when generating stub code and relocation info
 347   address    start_a_stub(int required_space);
 348   void       end_a_stub();
 349   // Ditto for constants.
 350   address    start_a_const(int required_space, int required_align = sizeof(double));
 351   void       end_a_const(CodeSection* cs);  // Pass the codesection to continue in (insts or stubs?).
 352 
 353   // constants support
 354   //
 355   // We must remember the code section (insts or stubs) in c1
 356   // so we can reset to the proper section in end_a_const().
 357   address long_constant(jlong c) {
 358     CodeSection* c1 = _code_section;




 319   void      set_inst_mark()       {        code_section()->set_mark();   }
 320   void    clear_inst_mark()       {        code_section()->clear_mark(); }
 321 
 322   // Constants in code
 323   void relocate(RelocationHolder const& rspec, int format = 0) {
 324     assert(!pd_check_instruction_mark()
 325         || inst_mark() == NULL || inst_mark() == code_section()->end(),
 326         "call relocate() between instructions");
 327     code_section()->relocate(code_section()->end(), rspec, format);
 328   }
 329   void relocate(   relocInfo::relocType rtype, int format = 0) {
 330     code_section()->relocate(code_section()->end(), rtype, format);
 331   }
 332 
 333   static int code_fill_byte();         // used to pad out odd-sized code buffers
 334 
 335   // Associate a comment with the current offset.  It will be printed
 336   // along with the disassembly when printing nmethods.  Currently
 337   // only supported in the instruction section of the code buffer.
 338   void block_comment(const char* comment);
 339   // Copy str to a buffer that has the same lifetime as the CodeBuffer
 340   const char* code_string(const char* str);
 341 
 342   // Label functions
 343   void bind(Label& L); // binds an unbound label L to the current code position
 344 
 345   // Move to a different section in the same code buffer.
 346   void set_code_section(CodeSection* cs);
 347 
 348   // Inform assembler when generating stub code and relocation info
 349   address    start_a_stub(int required_space);
 350   void       end_a_stub();
 351   // Ditto for constants.
 352   address    start_a_const(int required_space, int required_align = sizeof(double));
 353   void       end_a_const(CodeSection* cs);  // Pass the codesection to continue in (insts or stubs?).
 354 
 355   // constants support
 356   //
 357   // We must remember the code section (insts or stubs) in c1
 358   // so we can reset to the proper section in end_a_const().
 359   address long_constant(jlong c) {
 360     CodeSection* c1 = _code_section;