changeset 6670:b4d5ee13399f

8207345, PR3614: Trampoline generation code reads from uninitialized memory Reviewed-by: shade
author aph
date Wed, 18 Jul 2018 23:47:37 +0100
parents 7b5dbfab9d89
children e200fdadc487
files src/cpu/aarch64/vm/assembler_aarch64.cpp
diffstat 1 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/assembler_aarch64.cpp	Wed Jul 18 23:40:56 2018 +0100
+++ b/src/cpu/aarch64/vm/assembler_aarch64.cpp	Wed Jul 18 23:47:37 2018 +0100
@@ -2181,8 +2181,17 @@
 
   unsigned int start_offset = offset();
 #ifdef COMPILER2
-  if (far_branches() && !Compile::current()->in_scratch_emit_size()) {
-    emit_trampoline_stub(offset(), entry.target());
+  // We need a trampoline if branches are far.
+  if (far_branches()) {
+    // We don't want to emit a trampoline if C2 is generating dummy
+    // code during its branch shortening phase.
+    CompileTask* task = ciEnv::current()->task();
+    bool in_scratch_emit_size =
+      ((task != NULL) && is_c2_compile(task->comp_level())
+       && Compile::current()->in_scratch_emit_size());
+    if (! in_scratch_emit_size) {
+       emit_trampoline_stub(start_offset, entry.target());
+    }
   }
 #endif