< prev index next >

src/hotspot/share/cds/aotCacheAccess.hpp

Print this page

  1 /*
  2  * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  *
 23  */
 24 
 25 #ifndef SHARE_CDS_AOTCACHEACCESS_HPP
 26 #define SHARE_CDS_AOTCACHEACCESS_HPP
 27 
 28 #include "cds/archiveBuilder.hpp"
 29 #include "cds/archiveUtils.hpp"
 30 #include "memory/allStatic.hpp"
 31 #include "oops/oopsHierarchy.hpp"
 32 #include "utilities/globalDefinitions.hpp"
 33 



 34 class ReservedSpace;
 35 
 36 // AOT Cache API for AOT compiler
 37 
 38 class AOTCacheAccess : AllStatic {


 39 public:












































 40   static void* allocate_aot_code_region(size_t size) NOT_CDS_RETURN_(nullptr);
 41 
 42   static size_t get_aot_code_region_size() NOT_CDS_RETURN_(0);

 43 
 44   static bool map_aot_code_region(ReservedSpace rs) NOT_CDS_RETURN_(false);








 45 };
 46 
 47 #endif // SHARE_CDS_AOTCACHEACCESS_HPP

  1 /*
  2  * Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  *
 23  */
 24 
 25 #ifndef SHARE_CDS_AOTCACHEACCESS_HPP
 26 #define SHARE_CDS_AOTCACHEACCESS_HPP
 27 
 28 #include "cds/archiveBuilder.hpp"
 29 #include "cds/archiveUtils.hpp"
 30 #include "memory/allStatic.hpp"
 31 #include "oops/oopsHierarchy.hpp"
 32 #include "utilities/globalDefinitions.hpp"
 33 
 34 class InstanceKlass;
 35 class Klass;
 36 class Method;
 37 class ReservedSpace;
 38 


 39 class AOTCacheAccess : AllStatic {
 40 private:
 41   static bool can_generate_aot_code(address addr) NOT_CDS_RETURN_(false);
 42 public:
 43   static bool can_generate_aot_code(Method* m) {
 44     return can_generate_aot_code((address)m);
 45   }
 46   static bool can_generate_aot_code(Klass* k) {
 47     return can_generate_aot_code((address)k);
 48   }
 49   static bool can_generate_aot_code(InstanceKlass* ik) NOT_CDS_RETURN_(false);
 50 
 51   /*
 52    * Used during an assembly run to compute the offset of the metadata object in the AOT Cache.
 53    * The input argument is the "source" address of a metadata object (Method/Klass) loaded by the assembly JVM.
 54    * Computation of the offset requires mapping the supplied metadata object to its "requested" address
 55    * and subtracting that address from the requested base address.
 56    * See ArchiveBuilder.hpp for definition of "source" and "requested" address.
 57    */
 58   static uint delta_from_base_address(address addr);
 59 
 60   /*
 61    * Used during a production run to materialize a pointer to a Klass located in a loaded AOT Cache.
 62    * The offset argument identifies a delta from the AOT Cache's currently mapped base address to the start of the Klass object.
 63    * The offset is normally obtained by reading a value embedded in some other AOT-ed entry, like an AOT compiled code.
 64    */
 65   static Klass* convert_offset_to_klass(uint offset_from_base_addr) {
 66     Metadata* metadata = (Metadata*)((address)SharedBaseAddress + offset_from_base_addr);
 67     assert(metadata->is_klass(), "sanity check");
 68     return (Klass*)metadata;
 69   }
 70 
 71   /*
 72    * Used during a production run to materialize a pointer to a Method located in a loaded AOT Cache.
 73    * The offset argument identifies a delta from the AOT Cache's currently mapped base address to the start of the Method object.
 74    * The offset is normally obtained by reading a value embedded in some other AOT-ed entry, like an AOT compiled code.
 75    */
 76   static Method* convert_offset_to_method(uint offset_from_base_addr) {
 77     Metadata* metadata = (Metadata*)((address)SharedBaseAddress + offset_from_base_addr);
 78     assert(metadata->is_method(), "sanity check");
 79     return (Method*)metadata;
 80   }
 81 
 82   static int get_archived_object_permanent_index(oop obj) NOT_CDS_JAVA_HEAP_RETURN_(-1);
 83   static oop get_archived_object(int permanent_index) NOT_CDS_JAVA_HEAP_RETURN_(nullptr);
 84 
 85   static void test_heap_access_api() NOT_CDS_JAVA_HEAP_RETURN;
 86 
 87   static void* allocate_aot_code_region(size_t size) NOT_CDS_RETURN_(nullptr);
 88 
 89   static size_t get_aot_code_region_size() NOT_CDS_RETURN_(0);
 90   static void set_aot_code_region_size(size_t sz) NOT_CDS_RETURN;
 91 
 92   static bool map_aot_code_region(ReservedSpace rs) NOT_CDS_RETURN_(false);
 93 
 94   static bool is_aot_code_region_empty() NOT_CDS_RETURN_(true);
 95 
 96   template <typename T>
 97   static void set_pointer(T** ptr, T* value) {
 98     set_pointer((address*)ptr, (address)value);
 99   }
100   static void set_pointer(address* ptr, address value);
101 };
102 
103 #endif // SHARE_CDS_AOTCACHEACCESS_HPP
< prev index next >