[aarch64-port-dev ] hg: aarch64-port/jdk8/hotspot: Default to DeoptimizeWhenPatching.

Andrew Dinn adinn at redhat.com
Tue Sep 17 09:08:18 PDT 2013


On 13/09/13 18:25, aph at redhat.com wrote:
> Changeset: 423577eb8f6e
> Author:    aph
> Date:      2013-09-13 18:22 +0100
> URL:       http://hg.openjdk.java.net/aarch64-port/jdk8/hotspot/rev/423577eb8f6e
> 
> Default to DeoptimizeWhenPatching.
> 
> ! src/cpu/aarch64/vm/c1_MacroAssembler_aarch64.cpp
> ! src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp
> ! src/cpu/aarch64/vm/globals_aarch64.hpp
> ! src/cpu/aarch64/vm/icBuffer_aarch64.cpp
> ! src/cpu/aarch64/vm/nativeInst_aarch64.cpp
> ! src/cpu/aarch64/vm/nativeInst_aarch64.hpp

This has broken the C2 compiler which is hitting an assert at
nativeInst_aarch64.cpp:232 viz

assert(nativeInstruction_at(verified_entry)->is_jump_or_nop()) failed:
Aarch64 cannot replace non-jump with jump

The error occurs in NativeJump::patch_verified_entry(address entry,
address verified_entry, address dest) which gets called from
nmethod::make_not_entrant_or_zombie(unsigned int state). The relevant
compiled code snippet is:


[Entry Point]
[Verified Entry Point]
[Constants]
  # {method}
 {0x00007ffff5934420} '<clinit>' '()V' in 'sun/launcher/LauncherHelper'
  #           [sp+0x20]  (sp of caller)
  ;; N1: #	B1 <- B1  Freq: 1

  ;; B1: #	N1 <- BLOCK HEAD IS JUNK   Freq: 1

  0x00007fffed17a780: stp	xfp, xlr, [sp,#-16]!
  ;; 0x20

where entry == verified_entry == 0x00007fffed17a780

This is a standard C2 method entry which starts by pushing a stack frame
(the generator calls masm.entry()).

I don't understand . . .

i) why the code is assuming that a C2 method starts with a jump or nop?

ii) what I need to do to fix this?

regards,


Andrew Dinn
-----------
Principal Software Engineer
Red Hat UK Ltd
Registered in UK and Wales under Company Registration No. 3798903
Directors: Michael Cunningham (USA), Mark Hegarty (Ireland), Matt Parson
(USA), Charlie Peters (USA)



More information about the aarch64-port-dev mailing list