< prev index next >

src/hotspot/share/runtime/stubRoutines.cpp

Print this page
@@ -179,33 +179,31 @@
  }
  
  #endif // ASSERT
  
  // Initialization
- //
- // Note: to break cycle with universe initialization, stubs are generated in two phases.
- // The first one generates stubs needed during universe init (e.g., _handle_must_compile_first_entry).
- // The second phase includes all other stubs (which may depend on universe being initialized.)
  
  extern void StubGenerator_generate(CodeBuffer* code, StubGenBlobId blob_id); // only interface to generators
  
  void UnsafeMemoryAccess::create_table(int max_size) {
    UnsafeMemoryAccess::_table = new UnsafeMemoryAccess[max_size];
    UnsafeMemoryAccess::_table_max_length = max_size;
  }
  
  bool UnsafeMemoryAccess::contains_pc(address pc) {
+   assert(UnsafeMemoryAccess::_table != nullptr, "");
    for (int i = 0; i < UnsafeMemoryAccess::_table_length; i++) {
      UnsafeMemoryAccess* entry = &UnsafeMemoryAccess::_table[i];
      if (pc >= entry->start_pc() && pc < entry->end_pc()) {
        return true;
      }
    }
    return false;
  }
  
  address UnsafeMemoryAccess::page_error_continue_pc(address pc) {
+   assert(UnsafeMemoryAccess::_table != nullptr, "");
    for (int i = 0; i < UnsafeMemoryAccess::_table_length; i++) {
      UnsafeMemoryAccess* entry = &UnsafeMemoryAccess::_table[i];
      if (pc >= entry->start_pc() && pc < entry->end_pc()) {
        return entry->error_exit_pc();
      }

@@ -218,10 +216,18 @@
                                      int code_size, int max_aligned_stubs,
                                      const char* timer_msg,
                                      const char* buffer_name,
                                      const char* assert_msg) {
    ResourceMark rm;
+   if (code_size == 0) {
+     LogTarget(Info, stubs) lt;
+     if (lt.is_enabled()) {
+       LogStream ls(lt);
+       ls.print_cr("%s\t not generated", buffer_name);
+       return nullptr;
+     }
+   }
    TraceTime timer(timer_msg, TRACETIME_LOG(Info, startuptime));
    // Add extra space for large CodeEntryAlignment
    int size = code_size + CodeEntryAlignment * max_aligned_stubs;
    BufferBlob* stubs_code = BufferBlob::create(buffer_name, size);
    if (stubs_code == nullptr) {
< prev index next >