RFR: 8207345: AArch64: Trampoline generation code reads from uninitialized memory

Aleksey Shipilev shade at redhat.com
Mon Jul 16 17:58:18 UTC 2018


On 07/16/2018 07:48 PM, Andrew Haley wrote:
> LOL!  It's simpler because it's actually wrong!  :-)
> 
> Using the form above, it actually should be
> 
>   // 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();
>     if (task != NULL
>         && ! (is_c2_compile(task->comp_level())
>               && Compile::current()->in_scratch_emit_size())) {
>       address stub = emit_trampoline_stub(offset(), entry.target());
>       if (stub == NULL) {
>         return NULL; // CodeCache is full
>       }
>     }
>   }
> 
> i.e. we want a trampoline if we're using C1 or (we're using C2 and not in scratch emit).

Ah, dang. So this captures the intent better?

   // 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 is_c2 = (task != NULL) && is_c2_compile(task->comp_level());
     if (!in_c2 || !Compile::current()->in_scratch_emit_size()) {
       address stub = emit_trampoline_stub(offset(), entry.target());
       if (stub == NULL) {
         return NULL; // CodeCache is full
       }
     }
   }

But I have no problems with the original patch too.

-Aleksey

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20180716/77fd0f91/signature.asc>


More information about the hotspot-compiler-dev mailing list