hotspot/src/share/vm/runtime/sharedRuntime.hpp
changeset 37439 e8970711113b
parent 37179 4dbcb3a642d2
child 38133 78b95467b9f1
equal deleted inserted replaced
37438:873c4aea8d1b 37439:e8970711113b
   395   // Adapt a method's signature if it contains 32 bit integers that must
   395   // Adapt a method's signature if it contains 32 bit integers that must
   396   // be converted to longs. Needed if CCallingConventionRequiresIntsAsLongs
   396   // be converted to longs. Needed if CCallingConventionRequiresIntsAsLongs
   397   // is true.
   397   // is true.
   398   static void convert_ints_to_longints(int i2l_argcnt, int& in_args_count,
   398   static void convert_ints_to_longints(int i2l_argcnt, int& in_args_count,
   399                                        BasicType*& in_sig_bt, VMRegPair*& in_regs);
   399                                        BasicType*& in_sig_bt, VMRegPair*& in_regs);
       
   400 
       
   401   static size_t trampoline_size();
       
   402 
       
   403   static void generate_trampoline(MacroAssembler *masm, address destination);
   400 
   404 
   401   // Generate I2C and C2I adapters. These adapters are simple argument marshalling
   405   // Generate I2C and C2I adapters. These adapters are simple argument marshalling
   402   // blobs. Unlike adapters in the tiger and earlier releases the code in these
   406   // blobs. Unlike adapters in the tiger and earlier releases the code in these
   403   // blobs does not create a new frame and are therefore virtually invisible
   407   // blobs does not create a new frame and are therefore virtually invisible
   404   // to the stack walking code. In general these blobs extend the callers stack
   408   // to the stack walking code. In general these blobs extend the callers stack
   678 
   682 
   679   //virtual void print_on(outputStream* st) const;  DO NOT USE
   683   //virtual void print_on(outputStream* st) const;  DO NOT USE
   680   void print_adapter_on(outputStream* st) const;
   684   void print_adapter_on(outputStream* st) const;
   681 };
   685 };
   682 
   686 
       
   687 class CDSAdapterHandlerEntry: public AdapterHandlerEntry {
       
   688   address               _c2i_entry_trampoline;   // allocated from shared spaces "MC" region
       
   689   AdapterHandlerEntry** _adapter_trampoline;     // allocated from shared spaces "MD" region
       
   690 
       
   691 public:
       
   692   address get_c2i_entry_trampoline()             const { return _c2i_entry_trampoline; }
       
   693   AdapterHandlerEntry** get_adapter_trampoline() const { return _adapter_trampoline; }
       
   694   void init() NOT_CDS_RETURN;
       
   695 };
       
   696 
       
   697 
   683 class AdapterHandlerLibrary: public AllStatic {
   698 class AdapterHandlerLibrary: public AllStatic {
   684  private:
   699  private:
   685   static BufferBlob* _buffer; // the temporary code buffer in CodeCache
   700   static BufferBlob* _buffer; // the temporary code buffer in CodeCache
   686   static AdapterHandlerTable* _adapters;
   701   static AdapterHandlerTable* _adapters;
   687   static AdapterHandlerEntry* _abstract_method_handler;
   702   static AdapterHandlerEntry* _abstract_method_handler;
   688   static BufferBlob* buffer_blob();
   703   static BufferBlob* buffer_blob();
   689   static void initialize();
   704   static void initialize();
       
   705   static AdapterHandlerEntry* get_adapter0(const methodHandle& method);
   690 
   706 
   691  public:
   707  public:
   692 
   708 
   693   static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint,
   709   static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint,
   694                                         address i2c_entry, address c2i_entry, address c2i_unverified_entry);
   710                                         address i2c_entry, address c2i_entry, address c2i_unverified_entry);