diff options
| author | Richard Leitner <richard.leitner@skidata.com> | 2020-08-20 12:41:58 +0200 |
|---|---|---|
| committer | Richard Leitner <richard.leitner@skidata.com> | 2020-08-24 08:19:14 +0200 |
| commit | 3b65eea96eddde97169ca5e00be01a9dbd257786 (patch) | |
| tree | 9e6ec626f6e96141ad015ecdfa5d38453160f70e /recipes-core/openjdk/patches-openjdk-8/1010-hotspot-fix-shark-build-common.patch | |
| parent | 00cb61feb07098d55b78237af6eb55fc4b906a0e (diff) | |
| download | meta-java-3b65eea96eddde97169ca5e00be01a9dbd257786.tar.gz | |
openjdk-8: update to latest ga version 265
Patch related changes:
* The hotspot patch 1004 was mainlined in changeset 3a3803a0c789 [1] and
is therfore dropped.
* The jdk patch 2010 was mainlined in changeset c4418d567028 [2] and is
therefore dropped.
* Rename hotspot/aarch64 patches to start with number 1401.
* Rename hotspot/aarch32 patches to start with number 1201.
* Merge aarch32-hotspot-fix-shark-build-pt2.patch and
openjdk8-fix-shark-build-pt2.patch to hotspot patch 1013 as they were
the same.
[1] https://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/rev/3a3803a0c789
[2] https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/c4418d567028
Signed-off-by: Richard Leitner <richard.leitner@skidata.com>
Diffstat (limited to 'recipes-core/openjdk/patches-openjdk-8/1010-hotspot-fix-shark-build-common.patch')
| -rw-r--r-- | recipes-core/openjdk/patches-openjdk-8/1010-hotspot-fix-shark-build-common.patch | 448 |
1 files changed, 448 insertions, 0 deletions
diff --git a/recipes-core/openjdk/patches-openjdk-8/1010-hotspot-fix-shark-build-common.patch b/recipes-core/openjdk/patches-openjdk-8/1010-hotspot-fix-shark-build-common.patch new file mode 100644 index 0000000..da93cbe --- /dev/null +++ b/recipes-core/openjdk/patches-openjdk-8/1010-hotspot-fix-shark-build-common.patch | |||
| @@ -0,0 +1,448 @@ | |||
| 1 | From cfc5c9089f82bc94fca2407aae6b1ffc4b60955f Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Jens Rehsack <rehsack@gmail.com> | ||
| 3 | Date: Thu, 2 Jan 2020 10:22:19 +0100 | ||
| 4 | Subject: [PATCH 1010/1013] hotspot: fix shark build (common) | ||
| 5 | |||
| 6 | Signed-off-by: Richard Leitner <richard.leitner@skidata.com> | ||
| 7 | --- | ||
| 8 | make/Makefile | 2 +- | ||
| 9 | src/cpu/zero/vm/interpreter_zero.cpp | 2 +- | ||
| 10 | src/share/vm/ci/ciTypeFlow.cpp | 4 ++ | ||
| 11 | src/share/vm/classfile/systemDictionary.cpp | 4 ++ | ||
| 12 | src/share/vm/runtime/handles.inline.hpp | 8 +++- | ||
| 13 | src/share/vm/shark/llvmHeaders.hpp | 4 ++ | ||
| 14 | src/share/vm/shark/sharkCompiler.cpp | 39 ++++++++++++++++--- | ||
| 15 | src/share/vm/shark/sharkCompiler.hpp | 2 + | ||
| 16 | src/share/vm/shark/sharkContext.cpp | 9 ++++- | ||
| 17 | src/share/vm/shark/sharkContext.hpp | 43 ++++++++++++++++++++- | ||
| 18 | src/share/vm/shark/sharkEntry.hpp | 1 + | ||
| 19 | src/share/vm/shark/sharkIntrinsics.cpp | 4 ++ | ||
| 20 | src/share/vm/shark/sharkRuntime.cpp | 1 + | ||
| 21 | src/share/vm/shark/sharkTopLevelBlock.cpp | 12 ++++++ | ||
| 22 | 14 files changed, 123 insertions(+), 12 deletions(-) | ||
| 23 | |||
| 24 | diff --git a/hotspot/make/Makefile b/hotspot/make/Makefile | ||
| 25 | index ad195763b..53b5ea046 100644 | ||
| 26 | --- a/hotspot/make/Makefile | ||
| 27 | +++ b/hotspot/make/Makefile | ||
| 28 | @@ -525,7 +525,7 @@ $(EXPORT_INCLUDE_DIR)/%: $(SHARK_BUILD_DIR)/../generated/jvmtifiles/% | ||
| 29 | # Unix | ||
| 30 | $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_BUILD_DIR)/%.$(LIBRARY_SUFFIX) | ||
| 31 | $(install-file) | ||
| 32 | -$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo): $(SHARK_BUILD_DIR)/%.debuginfo | ||
| 33 | +$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo: $(SHARK_BUILD_DIR)/%.debuginfo | ||
| 34 | $(install-file) | ||
| 35 | $(EXPORT_JRE_LIB_ARCH_DIR)/%.diz: $(SHARK_BUILD_DIR)/%.diz | ||
| 36 | $(install-file) | ||
| 37 | diff --git a/hotspot/src/cpu/zero/vm/interpreter_zero.cpp b/hotspot/src/cpu/zero/vm/interpreter_zero.cpp | ||
| 38 | index 7172443db..5a4b4ad56 100644 | ||
| 39 | --- a/hotspot/src/cpu/zero/vm/interpreter_zero.cpp | ||
| 40 | +++ b/hotspot/src/cpu/zero/vm/interpreter_zero.cpp | ||
| 41 | @@ -49,7 +49,7 @@ | ||
| 42 | #ifdef COMPILER1 | ||
| 43 | #include "c1/c1_Runtime1.hpp" | ||
| 44 | #endif | ||
| 45 | -#ifdef CC_INTERP | ||
| 46 | +#if defined(CC_INTERP) || defined(SHARK) | ||
| 47 | #include "interpreter/cppInterpreter.hpp" | ||
| 48 | #endif | ||
| 49 | |||
| 50 | diff --git a/hotspot/src/share/vm/ci/ciTypeFlow.cpp b/hotspot/src/share/vm/ci/ciTypeFlow.cpp | ||
| 51 | index 4707cc96e..a2b297ca0 100644 | ||
| 52 | --- a/hotspot/src/share/vm/ci/ciTypeFlow.cpp | ||
| 53 | +++ b/hotspot/src/share/vm/ci/ciTypeFlow.cpp | ||
| 54 | @@ -35,8 +35,10 @@ | ||
| 55 | #include "interpreter/bytecode.hpp" | ||
| 56 | #include "interpreter/bytecodes.hpp" | ||
| 57 | #include "memory/allocation.inline.hpp" | ||
| 58 | +#ifdef COMPILER2 | ||
| 59 | #include "opto/compile.hpp" | ||
| 60 | #include "opto/node.hpp" | ||
| 61 | +#endif | ||
| 62 | #include "runtime/deoptimization.hpp" | ||
| 63 | #include "utilities/growableArray.hpp" | ||
| 64 | |||
| 65 | @@ -2648,6 +2650,7 @@ void ciTypeFlow::df_flow_types(Block* start, | ||
| 66 | assert (!blk->has_pre_order(), ""); | ||
| 67 | blk->set_next_pre_order(); | ||
| 68 | |||
| 69 | +#ifdef COMPILER2 | ||
| 70 | if (_next_pre_order >= (int)Compile::current()->max_node_limit() / 2) { | ||
| 71 | // Too many basic blocks. Bail out. | ||
| 72 | // This can happen when try/finally constructs are nested to depth N, | ||
| 73 | @@ -2657,6 +2660,7 @@ void ciTypeFlow::df_flow_types(Block* start, | ||
| 74 | record_failure("too many basic blocks"); | ||
| 75 | return; | ||
| 76 | } | ||
| 77 | +#endif | ||
| 78 | if (do_flow) { | ||
| 79 | flow_block(blk, temp_vector, temp_set); | ||
| 80 | if (failing()) return; // Watch for bailouts. | ||
| 81 | diff --git a/hotspot/src/share/vm/classfile/systemDictionary.cpp b/hotspot/src/share/vm/classfile/systemDictionary.cpp | ||
| 82 | index 7f8ab9143..91818bf25 100644 | ||
| 83 | --- a/hotspot/src/share/vm/classfile/systemDictionary.cpp | ||
| 84 | +++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp | ||
| 85 | @@ -2362,6 +2362,7 @@ methodHandle SystemDictionary::find_method_handle_intrinsic(vmIntrinsics::ID iid | ||
| 86 | spe = NULL; | ||
| 87 | // Must create lots of stuff here, but outside of the SystemDictionary lock. | ||
| 88 | m = Method::make_method_handle_intrinsic(iid, signature, CHECK_(empty)); | ||
| 89 | +#ifndef SHARK | ||
| 90 | if (!Arguments::is_interpreter_only()) { | ||
| 91 | // Generate a compiled form of the MH intrinsic. | ||
| 92 | AdapterHandlerLibrary::create_native_wrapper(m); | ||
| 93 | @@ -2371,6 +2372,7 @@ methodHandle SystemDictionary::find_method_handle_intrinsic(vmIntrinsics::ID iid | ||
| 94 | "out of space in CodeCache for method handle intrinsic", empty); | ||
| 95 | } | ||
| 96 | } | ||
| 97 | +#endif | ||
| 98 | // Now grab the lock. We might have to throw away the new method, | ||
| 99 | // if a racing thread has managed to install one at the same time. | ||
| 100 | { | ||
| 101 | @@ -2384,9 +2386,11 @@ methodHandle SystemDictionary::find_method_handle_intrinsic(vmIntrinsics::ID iid | ||
| 102 | } | ||
| 103 | |||
| 104 | assert(spe != NULL && spe->method() != NULL, ""); | ||
| 105 | +#ifndef SHARK | ||
| 106 | assert(Arguments::is_interpreter_only() || (spe->method()->has_compiled_code() && | ||
| 107 | spe->method()->code()->entry_point() == spe->method()->from_compiled_entry()), | ||
| 108 | "MH intrinsic invariant"); | ||
| 109 | +#endif | ||
| 110 | return spe->method(); | ||
| 111 | } | ||
| 112 | |||
| 113 | diff --git a/hotspot/src/share/vm/runtime/handles.inline.hpp b/hotspot/src/share/vm/runtime/handles.inline.hpp | ||
| 114 | index 761596a50..ca950c154 100644 | ||
| 115 | --- a/hotspot/src/share/vm/runtime/handles.inline.hpp | ||
| 116 | +++ b/hotspot/src/share/vm/runtime/handles.inline.hpp | ||
| 117 | @@ -51,6 +51,12 @@ inline Handle::Handle(Thread* thread, oop obj) { | ||
| 118 | } | ||
| 119 | #endif // ASSERT | ||
| 120 | |||
| 121 | +#ifdef SHARK | ||
| 122 | +#define assert_on_stack(expr) (void)(expr) | ||
| 123 | +#else | ||
| 124 | +#define assert_on_stack(expr) assert((expr), "not on stack?") | ||
| 125 | +#endif | ||
| 126 | + | ||
| 127 | // Constructors for metadata handles | ||
| 128 | #define DEF_METADATA_HANDLE_FN(name, type) \ | ||
| 129 | inline name##Handle::name##Handle(type* obj) : _value(obj), _thread(NULL) { \ | ||
| 130 | @@ -79,7 +85,7 @@ inline name##Handle::name##Handle(const name##Handle &h) { \ | ||
| 131 | } else { \ | ||
| 132 | _thread = Thread::current(); \ | ||
| 133 | } \ | ||
| 134 | - assert (_thread->is_in_stack((address)this), "not on stack?"); \ | ||
| 135 | + assert_on_stack (_thread->is_in_stack((address)this)); \ | ||
| 136 | _thread->metadata_handles()->push((Metadata*)_value); \ | ||
| 137 | } else { \ | ||
| 138 | _thread = NULL; \ | ||
| 139 | diff --git a/hotspot/src/share/vm/shark/llvmHeaders.hpp b/hotspot/src/share/vm/shark/llvmHeaders.hpp | ||
| 140 | index 05ef7fea1..4d40ae3dd 100644 | ||
| 141 | --- a/hotspot/src/share/vm/shark/llvmHeaders.hpp | ||
| 142 | +++ b/hotspot/src/share/vm/shark/llvmHeaders.hpp | ||
| 143 | @@ -35,7 +35,11 @@ | ||
| 144 | #undef DEBUG | ||
| 145 | #endif | ||
| 146 | |||
| 147 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 148 | #include <llvm/Analysis/Verifier.h> | ||
| 149 | +#else | ||
| 150 | +#include <llvm-c/Analysis.h> | ||
| 151 | +#endif | ||
| 152 | #include <llvm/ExecutionEngine/ExecutionEngine.h> | ||
| 153 | |||
| 154 | // includes specific to each version | ||
| 155 | diff --git a/hotspot/src/share/vm/shark/sharkCompiler.cpp b/hotspot/src/share/vm/shark/sharkCompiler.cpp | ||
| 156 | index 86c09932a..462eb98a7 100644 | ||
| 157 | --- a/hotspot/src/share/vm/shark/sharkCompiler.cpp | ||
| 158 | +++ b/hotspot/src/share/vm/shark/sharkCompiler.cpp | ||
| 159 | @@ -61,11 +61,25 @@ SharkCompiler::SharkCompiler() | ||
| 160 | : AbstractCompiler() { | ||
| 161 | // Create the lock to protect the memory manager and execution engine | ||
| 162 | _execution_engine_lock = new Monitor(Mutex::leaf, "SharkExecutionEngineLock"); | ||
| 163 | - MutexLocker locker(execution_engine_lock()); | ||
| 164 | + { | ||
| 165 | + MutexLocker locker(execution_engine_lock()); | ||
| 166 | + init_llvm(); | ||
| 167 | + } | ||
| 168 | + // All done | ||
| 169 | + set_state(initialized); | ||
| 170 | +} | ||
| 171 | |||
| 172 | +void SharkCompiler::init_llvm() { | ||
| 173 | + // with llvm 3.5, Multi-threading can only be enabled/disabled with the | ||
| 174 | + // compile time define LLVM_ENABLE_THREADS | ||
| 175 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 176 | // Make LLVM safe for multithreading | ||
| 177 | if (!llvm_start_multithreaded()) | ||
| 178 | fatal("llvm_start_multithreaded() failed"); | ||
| 179 | +#else | ||
| 180 | + if (!llvm_is_multithreaded()) | ||
| 181 | + fatal("llvm_is_multithreaded() tells no multithreading support in llvm"); | ||
| 182 | +#endif | ||
| 183 | |||
| 184 | // Initialize the native target | ||
| 185 | InitializeNativeTarget(); | ||
| 186 | @@ -83,7 +97,7 @@ SharkCompiler::SharkCompiler() | ||
| 187 | // Finetune LLVM for the current host CPU. | ||
| 188 | StringMap<bool> Features; | ||
| 189 | bool gotCpuFeatures = llvm::sys::getHostCPUFeatures(Features); | ||
| 190 | - std::string cpu("-mcpu=" + llvm::sys::getHostCPUName()); | ||
| 191 | + std::string cpu("-mcpu=" + std::string(llvm::sys::getHostCPUName())); | ||
| 192 | |||
| 193 | std::vector<const char*> args; | ||
| 194 | args.push_back(""); // program name | ||
| 195 | @@ -112,6 +126,9 @@ SharkCompiler::SharkCompiler() | ||
| 196 | builder.setMAttrs(MAttrs); | ||
| 197 | builder.setJITMemoryManager(memory_manager()); | ||
| 198 | builder.setEngineKind(EngineKind::JIT); | ||
| 199 | +#if SHARK_LLVM_VERSION > 34 | ||
| 200 | + builder.setUseMCJIT(true); | ||
| 201 | +#endif | ||
| 202 | builder.setErrorStr(&ErrorMsg); | ||
| 203 | if (! fnmatch(SharkOptimizationLevel, "None", 0)) { | ||
| 204 | tty->print_cr("Shark optimization level set to: None"); | ||
| 205 | @@ -133,10 +150,11 @@ SharkCompiler::SharkCompiler() | ||
| 206 | exit(1); | ||
| 207 | } | ||
| 208 | |||
| 209 | +#if SHARK_LLVM_VERSION > 34 | ||
| 210 | + _native_context->execution_engine(_execution_engine); | ||
| 211 | + _normal_context->execution_engine(_execution_engine); | ||
| 212 | +#endif | ||
| 213 | execution_engine()->addModule(_native_context->module()); | ||
| 214 | - | ||
| 215 | - // All done | ||
| 216 | - set_state(initialized); | ||
| 217 | } | ||
| 218 | |||
| 219 | void SharkCompiler::initialize() { | ||
| 220 | @@ -165,7 +183,7 @@ void SharkCompiler::compile_method(ciEnv* env, | ||
| 221 | } | ||
| 222 | |||
| 223 | // Create the recorders | ||
| 224 | - Arena arena; | ||
| 225 | + Arena arena(mtCompiler); | ||
| 226 | env->set_oop_recorder(new OopRecorder(&arena)); | ||
| 227 | OopMapSet oopmaps; | ||
| 228 | env->set_debug_info(new DebugInformationRecorder(env->oop_recorder())); | ||
| 229 | @@ -268,7 +286,12 @@ void SharkCompiler::generate_native_code(SharkEntry* entry, | ||
| 230 | |||
| 231 | if (SharkVerifyFunction != NULL) { | ||
| 232 | if (!fnmatch(SharkVerifyFunction, name, 0)) { | ||
| 233 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 234 | verifyFunction(*function); | ||
| 235 | +#else | ||
| 236 | + LLVMValueRef F = wrap(function); | ||
| 237 | + LLVMVerifyFunction(F, LLVMAbortProcessAction); | ||
| 238 | +#endif | ||
| 239 | } | ||
| 240 | } | ||
| 241 | |||
| 242 | @@ -298,7 +321,11 @@ void SharkCompiler::generate_native_code(SharkEntry* entry, | ||
| 243 | #endif | ||
| 244 | #endif // !NDEBUG | ||
| 245 | memory_manager()->set_entry_for_function(function, entry); | ||
| 246 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 247 | code = (address) execution_engine()->getPointerToFunction(function); | ||
| 248 | +#else | ||
| 249 | + code = (address) execution_engine()->getFunctionAddress(name); | ||
| 250 | +#endif | ||
| 251 | } | ||
| 252 | assert(code != NULL, "code must be != NULL"); | ||
| 253 | entry->set_entry_point(code); | ||
| 254 | diff --git a/hotspot/src/share/vm/shark/sharkCompiler.hpp b/hotspot/src/share/vm/shark/sharkCompiler.hpp | ||
| 255 | index 974002988..36b5b2427 100644 | ||
| 256 | --- a/hotspot/src/share/vm/shark/sharkCompiler.hpp | ||
| 257 | +++ b/hotspot/src/share/vm/shark/sharkCompiler.hpp | ||
| 258 | @@ -40,6 +40,8 @@ class SharkCompiler : public AbstractCompiler { | ||
| 259 | // Creation | ||
| 260 | SharkCompiler(); | ||
| 261 | |||
| 262 | + void init_llvm(); | ||
| 263 | + | ||
| 264 | // Name of this compiler | ||
| 265 | const char *name() { return "shark"; } | ||
| 266 | |||
| 267 | diff --git a/hotspot/src/share/vm/shark/sharkContext.cpp b/hotspot/src/share/vm/shark/sharkContext.cpp | ||
| 268 | index 0fc86f0b1..e16318ccf 100644 | ||
| 269 | --- a/hotspot/src/share/vm/shark/sharkContext.cpp | ||
| 270 | +++ b/hotspot/src/share/vm/shark/sharkContext.cpp | ||
| 271 | @@ -34,8 +34,13 @@ | ||
| 272 | using namespace llvm; | ||
| 273 | |||
| 274 | SharkContext::SharkContext(const char* name) | ||
| 275 | - : LLVMContext(), | ||
| 276 | - _free_queue(NULL) { | ||
| 277 | + : LLVMContext() | ||
| 278 | + , _free_queue(0) | ||
| 279 | +#if SHARK_LLVM_VERSION > 34 | ||
| 280 | + , _ee(0) | ||
| 281 | + , func_mod_map() | ||
| 282 | +#endif | ||
| 283 | +{ | ||
| 284 | // Create a module to build our functions into | ||
| 285 | _module = new Module(name, *this); | ||
| 286 | |||
| 287 | diff --git a/hotspot/src/share/vm/shark/sharkContext.hpp b/hotspot/src/share/vm/shark/sharkContext.hpp | ||
| 288 | index 952cf13b7..85b48e99a 100644 | ||
| 289 | --- a/hotspot/src/share/vm/shark/sharkContext.hpp | ||
| 290 | +++ b/hotspot/src/share/vm/shark/sharkContext.hpp | ||
| 291 | @@ -29,6 +29,8 @@ | ||
| 292 | #include "shark/llvmHeaders.hpp" | ||
| 293 | #include "shark/sharkCompiler.hpp" | ||
| 294 | |||
| 295 | +#include <map> | ||
| 296 | + | ||
| 297 | // The LLVMContext class allows multiple instances of LLVM to operate | ||
| 298 | // independently of each other in a multithreaded context. We extend | ||
| 299 | // this here to store things in Shark that are LLVMContext-specific. | ||
| 300 | @@ -41,12 +43,28 @@ class SharkContext : public llvm::LLVMContext { | ||
| 301 | |||
| 302 | private: | ||
| 303 | llvm::Module* _module; | ||
| 304 | +#if SHARK_LLVM_VERSION > 34 | ||
| 305 | + llvm::ExecutionEngine *_ee; | ||
| 306 | + std::map<std::string, llvm::Module *> func_mod_map; | ||
| 307 | +#endif | ||
| 308 | |||
| 309 | public: | ||
| 310 | llvm::Module* module() const { | ||
| 311 | return _module; | ||
| 312 | } | ||
| 313 | |||
| 314 | +#if SHARK_LLVM_VERSION > 34 | ||
| 315 | + llvm::ExecutionEngine *execution_engine(llvm::ExecutionEngine *ee) { | ||
| 316 | + llvm::ExecutionEngine *oee = _ee; | ||
| 317 | + _ee = ee; | ||
| 318 | + return oee; | ||
| 319 | + } | ||
| 320 | + | ||
| 321 | + llvm::ExecutionEngine *execution_engine() const { | ||
| 322 | + return _ee; | ||
| 323 | + } | ||
| 324 | +#endif | ||
| 325 | + | ||
| 326 | // Get this thread's SharkContext | ||
| 327 | public: | ||
| 328 | static SharkContext& current() { | ||
| 329 | @@ -55,12 +73,35 @@ class SharkContext : public llvm::LLVMContext { | ||
| 330 | |||
| 331 | // Module accessors | ||
| 332 | public: | ||
| 333 | - void add_function(llvm::Function* function) const { | ||
| 334 | + void add_function(llvm::Function* function) { | ||
| 335 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 336 | module()->getFunctionList().push_back(function); | ||
| 337 | +#else | ||
| 338 | + // shark compiles modules, not functions | ||
| 339 | + std::map<std::string, llvm::Module *>::iterator i = func_mod_map.find(function->getName().str()); | ||
| 340 | + if(func_mod_map.end() == i) { | ||
| 341 | + llvm::Module *mod4fun = new llvm::Module(function->getName(), *this); | ||
| 342 | + func_mod_map.insert(std::pair<std::string, llvm::Module *>(function->getName().str(), mod4fun)); | ||
| 343 | + mod4fun->getFunctionList().push_back(function); | ||
| 344 | + _ee->addModule(mod4fun); | ||
| 345 | + } | ||
| 346 | +#endif | ||
| 347 | } | ||
| 348 | llvm::Constant* get_external(const char* name, | ||
| 349 | llvm::FunctionType* sig) { | ||
| 350 | + // XXX see whether we need additional module map, too | ||
| 351 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 352 | return module()->getOrInsertFunction(name, sig); | ||
| 353 | +#else | ||
| 354 | + // shark compiles modules, not functions | ||
| 355 | + std::map<std::string, llvm::Module *>::iterator i = func_mod_map.find(name); | ||
| 356 | + if(func_mod_map.end() == i) { | ||
| 357 | + llvm::Module *mod4fun = new llvm::Module(name, *this); | ||
| 358 | + func_mod_map.insert(std::pair<std::string, llvm::Module *>(name, mod4fun)); | ||
| 359 | + mod4fun->getOrInsertFunction(name, sig); | ||
| 360 | + _ee->addModule(mod4fun); | ||
| 361 | + } | ||
| 362 | +#endif | ||
| 363 | } | ||
| 364 | |||
| 365 | // Basic types | ||
| 366 | diff --git a/hotspot/src/share/vm/shark/sharkEntry.hpp b/hotspot/src/share/vm/shark/sharkEntry.hpp | ||
| 367 | index e0f535c69..c079e255a 100644 | ||
| 368 | --- a/hotspot/src/share/vm/shark/sharkEntry.hpp | ||
| 369 | +++ b/hotspot/src/share/vm/shark/sharkEntry.hpp | ||
| 370 | @@ -27,6 +27,7 @@ | ||
| 371 | #define SHARE_VM_SHARK_SHARKENTRY_HPP | ||
| 372 | |||
| 373 | #include "shark/llvmHeaders.hpp" | ||
| 374 | +#include "entry_zero.hpp" | ||
| 375 | |||
| 376 | class SharkContext; | ||
| 377 | |||
| 378 | diff --git a/hotspot/src/share/vm/shark/sharkIntrinsics.cpp b/hotspot/src/share/vm/shark/sharkIntrinsics.cpp | ||
| 379 | index 9ad91c96d..560bb83f4 100644 | ||
| 380 | --- a/hotspot/src/share/vm/shark/sharkIntrinsics.cpp | ||
| 381 | +++ b/hotspot/src/share/vm/shark/sharkIntrinsics.cpp | ||
| 382 | @@ -265,7 +265,11 @@ void SharkIntrinsics::do_Unsafe_compareAndSwapInt() { | ||
| 383 | "addr"); | ||
| 384 | |||
| 385 | // Perform the operation | ||
| 386 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 387 | Value *result = builder()->CreateAtomicCmpXchg(addr, e, x, llvm::SequentiallyConsistent); | ||
| 388 | +#else | ||
| 389 | + Value *result = builder()->CreateAtomicCmpXchg(addr, e, x, llvm::SequentiallyConsistent, llvm::SequentiallyConsistent); | ||
| 390 | + #endif | ||
| 391 | // Push the result | ||
| 392 | state()->push( | ||
| 393 | SharkValue::create_jint( | ||
| 394 | diff --git a/hotspot/src/share/vm/shark/sharkRuntime.cpp b/hotspot/src/share/vm/shark/sharkRuntime.cpp | ||
| 395 | index fd9916e11..1ae03753e 100644 | ||
| 396 | --- a/hotspot/src/share/vm/shark/sharkRuntime.cpp | ||
| 397 | +++ b/hotspot/src/share/vm/shark/sharkRuntime.cpp | ||
| 398 | @@ -32,6 +32,7 @@ | ||
| 399 | #ifdef TARGET_ARCH_zero | ||
| 400 | # include "stack_zero.inline.hpp" | ||
| 401 | #endif | ||
| 402 | +#include "memory/oopFactory.hpp" | ||
| 403 | |||
| 404 | using namespace llvm; | ||
| 405 | |||
| 406 | diff --git a/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp b/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp | ||
| 407 | index 243183c07..601ca7925 100644 | ||
| 408 | --- a/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp | ||
| 409 | +++ b/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp | ||
| 410 | @@ -1732,7 +1732,11 @@ void SharkTopLevelBlock::do_new() { | ||
| 411 | heap_object = builder()->CreateIntToPtr( | ||
| 412 | old_top, SharkType::oop_type(), "heap_object"); | ||
| 413 | |||
| 414 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 415 | Value *check = builder()->CreateAtomicCmpXchg(top_addr, old_top, new_top, llvm::SequentiallyConsistent); | ||
| 416 | +#else | ||
| 417 | + Value *check = builder()->CreateAtomicCmpXchg(top_addr, old_top, new_top, llvm::SequentiallyConsistent, llvm::SequentiallyConsistent); | ||
| 418 | +#endif | ||
| 419 | builder()->CreateCondBr( | ||
| 420 | builder()->CreateICmpEQ(old_top, check), | ||
| 421 | initialize, retry); | ||
| 422 | @@ -1933,7 +1937,11 @@ void SharkTopLevelBlock::acquire_lock(Value *lockee, int exception_action) { | ||
| 423 | |||
| 424 | Value *lock = builder()->CreatePtrToInt( | ||
| 425 | monitor_header_addr, SharkType::intptr_type()); | ||
| 426 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 427 | Value *check = builder()->CreateAtomicCmpXchg(mark_addr, disp, lock, llvm::Acquire); | ||
| 428 | +#else | ||
| 429 | + Value *check = builder()->CreateAtomicCmpXchg(mark_addr, disp, lock, llvm::Acquire, llvm::Acquire); | ||
| 430 | +#endif | ||
| 431 | builder()->CreateCondBr( | ||
| 432 | builder()->CreateICmpEQ(disp, check), | ||
| 433 | acquired_fast, try_recursive); | ||
| 434 | @@ -2018,7 +2026,11 @@ void SharkTopLevelBlock::release_lock(int exception_action) { | ||
| 435 | PointerType::getUnqual(SharkType::intptr_type()), | ||
| 436 | "mark_addr"); | ||
| 437 | |||
| 438 | +#if SHARK_LLVM_VERSION <= 34 | ||
| 439 | Value *check = builder()->CreateAtomicCmpXchg(mark_addr, lock, disp, llvm::Release); | ||
| 440 | +#else | ||
| 441 | + Value *check = builder()->CreateAtomicCmpXchg(mark_addr, lock, disp, llvm::Release, llvm::Monotonic); | ||
| 442 | +#endif | ||
| 443 | builder()->CreateCondBr( | ||
| 444 | builder()->CreateICmpEQ(lock, check), | ||
| 445 | released_fast, slow_path); | ||
| 446 | -- | ||
| 447 | 2.26.2 | ||
| 448 | |||
