public abstract class com.oracle.svm.core.snippets.ExceptionUnwind
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.oracle.svm.core.snippets.ExceptionUnwind
  super_class: java.lang.Object
{
  public static final com.oracle.svm.core.snippets.SnippetRuntime$SubstrateForeignCallDescriptor UNWIND_EXCEPTION_WITHOUT_CALLEE_SAVED_REGISTERS;
    descriptor: Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  public static final com.oracle.svm.core.snippets.SnippetRuntime$SubstrateForeignCallDescriptor UNWIND_EXCEPTION_WITH_CALLEE_SAVED_REGISTERS;
    descriptor: Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  public static final com.oracle.svm.core.snippets.SnippetRuntime$SubstrateForeignCallDescriptor[] FOREIGN_CALLS;
    descriptor: [Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  public static final com.oracle.svm.core.threadlocal.FastThreadLocalObject<java.lang.Throwable> currentException;
    descriptor: Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    Signature: Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject<Ljava/lang/Throwable;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=7, locals=0, args_size=0
         0: .line 61
            ldc Lcom/oracle/svm/core/snippets/ExceptionUnwind;
         1: .line 62
            ldc "unwindExceptionWithoutCalleeSavedRegisters"
            iconst_1
            iconst_1
            anewarray org.graalvm.word.LocationIdentity
            dup
            iconst_0
            invokestatic org.graalvm.word.LocationIdentity.any:()Lorg/graalvm/word/LocationIdentity;
            aastore
         2: .line 61
            invokestatic com.oracle.svm.core.snippets.SnippetRuntime.findForeignCall:(Ljava/lang/Class;Ljava/lang/String;Z[Lorg/graalvm/word/LocationIdentity;)Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
            putstatic com.oracle.svm.core.snippets.ExceptionUnwind.UNWIND_EXCEPTION_WITHOUT_CALLEE_SAVED_REGISTERS:Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
         3: .line 63
            ldc Lcom/oracle/svm/core/snippets/ExceptionUnwind;
            ldc "unwindExceptionWithCalleeSavedRegisters"
         4: .line 64
            iconst_1
            iconst_1
            anewarray org.graalvm.word.LocationIdentity
            dup
            iconst_0
            invokestatic org.graalvm.word.LocationIdentity.any:()Lorg/graalvm/word/LocationIdentity;
            aastore
         5: .line 63
            invokestatic com.oracle.svm.core.snippets.SnippetRuntime.findForeignCall:(Ljava/lang/Class;Ljava/lang/String;Z[Lorg/graalvm/word/LocationIdentity;)Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
            putstatic com.oracle.svm.core.snippets.ExceptionUnwind.UNWIND_EXCEPTION_WITH_CALLEE_SAVED_REGISTERS:Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
         6: .line 66
            iconst_2
            anewarray com.oracle.svm.core.snippets.SnippetRuntime$SubstrateForeignCallDescriptor
            dup
            iconst_0
         7: .line 67
            getstatic com.oracle.svm.core.snippets.ExceptionUnwind.UNWIND_EXCEPTION_WITHOUT_CALLEE_SAVED_REGISTERS:Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
            aastore
            dup
            iconst_1
         8: .line 68
            getstatic com.oracle.svm.core.snippets.ExceptionUnwind.UNWIND_EXCEPTION_WITH_CALLEE_SAVED_REGISTERS:Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
            aastore
         9: .line 66
            putstatic com.oracle.svm.core.snippets.ExceptionUnwind.FOREIGN_CALLS:[Lcom/oracle/svm/core/snippets/SnippetRuntime$SubstrateForeignCallDescriptor;
        10: .line 71
            ldc Ljava/lang/Throwable;
            invokestatic com.oracle.svm.core.threadlocal.FastThreadLocalFactory.createObject:(Ljava/lang/Class;)Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            putstatic com.oracle.svm.core.snippets.ExceptionUnwind.currentException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.snippets.ExceptionUnwind this
         0: .line 59
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.svm.core.snippets.ExceptionUnwind this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/snippets/ExceptionUnwind;

  static boolean exceptionsAreFatal();
    descriptor: ()Z
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 80
            getstatic com.oracle.svm.core.SubstrateOptions.MultiThreaded:Lcom/oracle/svm/core/option/HostedOptionKey;
            invokevirtual com.oracle.svm.core.option.HostedOptionKey.getValue:()Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 1
            invokestatic com.oracle.svm.core.thread.VMThreads$StatusSupport.isStatusJava:()Z
            ifne 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.annotate.Uninterruptible(reason = "Called from uninterruptible callers.", mayBeInlined = true)

  private static void unwindExceptionWithoutCalleeSavedRegisters(java.lang.Throwable, org.graalvm.word.Pointer);
    descriptor: (Ljava/lang/Throwable;Lorg/graalvm/word/Pointer;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.lang.Throwable exception
        start local 1 // org.graalvm.word.Pointer callerSP
         0: .line 93
            invokestatic com.oracle.svm.core.stack.StackOverflowCheck.singleton:()Lcom/oracle/svm/core/stack/StackOverflowCheck;
            invokeinterface com.oracle.svm.core.stack.StackOverflowCheck.makeYellowZoneAvailable:()V
         1: .line 95
            aload 0 /* exception */
            aload 1 /* callerSP */
            iconst_0
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.unwindExceptionInterruptible:(Ljava/lang/Throwable;Lorg/graalvm/word/Pointer;Z)V
         2: .line 96
            return
        end local 1 // org.graalvm.word.Pointer callerSP
        end local 0 // java.lang.Throwable exception
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0  exception  Ljava/lang/Throwable;
            0    3     1   callerSP  Lorg/graalvm/word/Pointer;
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.snippets.SubstrateForeignCallTarget(stubCallingConvention = true)
      com.oracle.svm.core.annotate.Uninterruptible(reason = "Must not execute recurring callbacks or a stack overflow check.", calleeMustBe = false)
      com.oracle.svm.core.annotate.RestrictHeapAccess(access = com.oracle.svm.core.annotate.RestrictHeapAccess$Access.NO_ALLOCATION:Lcom/oracle/svm/core/annotate/RestrictHeapAccess$Access;, reason = "Must not allocate when unwinding the stack.")
    MethodParameters:
           Name  Flags
      exception  
      callerSP   

  private static void unwindExceptionWithCalleeSavedRegisters(java.lang.Throwable, org.graalvm.word.Pointer);
    descriptor: (Ljava/lang/Throwable;Lorg/graalvm/word/Pointer;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.lang.Throwable exception
        start local 1 // org.graalvm.word.Pointer callerSP
         0: .line 103
            invokestatic com.oracle.svm.core.stack.StackOverflowCheck.singleton:()Lcom/oracle/svm/core/stack/StackOverflowCheck;
            invokeinterface com.oracle.svm.core.stack.StackOverflowCheck.makeYellowZoneAvailable:()V
         1: .line 105
            aload 0 /* exception */
            aload 1 /* callerSP */
            iconst_1
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.unwindExceptionInterruptible:(Ljava/lang/Throwable;Lorg/graalvm/word/Pointer;Z)V
         2: .line 106
            return
        end local 1 // org.graalvm.word.Pointer callerSP
        end local 0 // java.lang.Throwable exception
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0  exception  Ljava/lang/Throwable;
            0    3     1   callerSP  Lorg/graalvm/word/Pointer;
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.snippets.SubstrateForeignCallTarget(stubCallingConvention = true)
      com.oracle.svm.core.annotate.Uninterruptible(reason = "Must not execute recurring callbacks or a stack overflow check.", calleeMustBe = false)
      com.oracle.svm.core.annotate.RestrictHeapAccess(access = com.oracle.svm.core.annotate.RestrictHeapAccess$Access.NO_ALLOCATION:Lcom/oracle/svm/core/annotate/RestrictHeapAccess$Access;, reason = "Must not allocate when unwinding the stack.")
    MethodParameters:
           Name  Flags
      exception  
      callerSP   

  private static void unwindExceptionInterruptible(java.lang.Throwable, org.graalvm.word.Pointer, boolean);
    descriptor: (Ljava/lang/Throwable;Lorg/graalvm/word/Pointer;Z)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // java.lang.Throwable exception
        start local 1 // org.graalvm.word.Pointer callerSP
        start local 2 // boolean fromMethodWithCalleeSavedRegisters
         0: .line 114
            getstatic com.oracle.svm.core.snippets.ExceptionUnwind.currentException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalObject.get:()Ljava/lang/Object;
            ifnull 3
         1: .line 115
            aload 0 /* exception */
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.reportRecursiveUnwind:(Ljava/lang/Throwable;)V
         2: .line 116
            return
         3: .line 118
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.svm.core.snippets.ExceptionUnwind.currentException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            aload 0 /* exception */
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalObject.set:(Ljava/lang/Object;)V
         4: .line 120
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.exceptionsAreFatal:()Z
            ifeq 7
         5: .line 121
            aload 0 /* exception */
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.reportFatalUnwind:(Ljava/lang/Throwable;)V
         6: .line 122
            return
         7: .line 125
      StackMap locals:
      StackMap stack:
            ldc Lcom/oracle/svm/core/snippets/ExceptionUnwind;
            invokestatic org.graalvm.nativeimage.ImageSingletons.contains:(Ljava/lang/Class;)Z
            ifeq 10
         8: .line 126
            ldc Lcom/oracle/svm/core/snippets/ExceptionUnwind;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.svm.core.snippets.ExceptionUnwind
            aload 1 /* callerSP */
            invokevirtual com.oracle.svm.core.snippets.ExceptionUnwind.customUnwindException:(Lorg/graalvm/word/Pointer;)V
         9: .line 127
            goto 11
        10: .line 128
      StackMap locals:
      StackMap stack:
            aload 1 /* callerSP */
            iload 2 /* fromMethodWithCalleeSavedRegisters */
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.defaultUnwindException:(Lorg/graalvm/word/Pointer;Z)V
        11: .line 136
      StackMap locals:
      StackMap stack:
            aload 0 /* exception */
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.reportUnhandledException:(Ljava/lang/Throwable;)V
        12: .line 138
            return
        end local 2 // boolean fromMethodWithCalleeSavedRegisters
        end local 1 // org.graalvm.word.Pointer callerSP
        end local 0 // java.lang.Throwable exception
      LocalVariableTable:
        Start  End  Slot                                Name  Signature
            0   13     0                           exception  Ljava/lang/Throwable;
            0   13     1                            callerSP  Lorg/graalvm/word/Pointer;
            0   13     2  fromMethodWithCalleeSavedRegisters  Z
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.annotate.RestrictHeapAccess(access = com.oracle.svm.core.annotate.RestrictHeapAccess$Access.NO_ALLOCATION:Lcom/oracle/svm/core/annotate/RestrictHeapAccess$Access;, reason = "Must not allocate when unwinding the stack.")
    MethodParameters:
                                    Name  Flags
      exception                           
      callerSP                            
      fromMethodWithCalleeSavedRegisters  

  private static void reportRecursiveUnwind(java.lang.Throwable);
    descriptor: (Ljava/lang/Throwable;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Throwable exception
         0: .line 145
            invokestatic com.oracle.svm.core.log.Log.log:()Lcom/oracle/svm/core/log/Log;
            ldc "Fatal error: recursion in exception handling: "
            invokevirtual com.oracle.svm.core.log.Log.string:(Ljava/lang/String;)Lcom/oracle/svm/core/log/Log;
            aload 0 /* exception */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual com.oracle.svm.core.log.Log.string:(Ljava/lang/String;)Lcom/oracle/svm/core/log/Log;
            pop
         1: .line 146
            invokestatic com.oracle.svm.core.log.Log.log:()Lcom/oracle/svm/core/log/Log;
            ldc " thrown while unwinding "
            invokevirtual com.oracle.svm.core.log.Log.string:(Ljava/lang/String;)Lcom/oracle/svm/core/log/Log;
            getstatic com.oracle.svm.core.snippets.ExceptionUnwind.currentException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalObject.get:()Ljava/lang/Object;
            checkcast java.lang.Throwable
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual com.oracle.svm.core.log.Log.string:(Ljava/lang/String;)Lcom/oracle/svm/core/log/Log;
            invokevirtual com.oracle.svm.core.log.Log.newline:()Lcom/oracle/svm/core/log/Log;
            pop
         2: .line 147
            ldc Lorg/graalvm/nativeimage/LogHandler;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast org.graalvm.nativeimage.LogHandler
            invokeinterface org.graalvm.nativeimage.LogHandler.fatalError:()V
         3: .line 148
            return
        end local 0 // java.lang.Throwable exception
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0  exception  Ljava/lang/Throwable;
    MethodParameters:
           Name  Flags
      exception  

  private static void reportFatalUnwind(java.lang.Throwable);
    descriptor: (Ljava/lang/Throwable;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Throwable exception
         0: .line 159
            invokestatic com.oracle.svm.core.log.Log.log:()Lcom/oracle/svm/core/log/Log;
            ldc "Fatal error: exception unwind while thread is not in Java state: "
            invokevirtual com.oracle.svm.core.log.Log.string:(Ljava/lang/String;)Lcom/oracle/svm/core/log/Log;
            pop
         1: .line 160
            invokestatic com.oracle.svm.core.log.Log.log:()Lcom/oracle/svm/core/log/Log;
            aload 0 /* exception */
            invokevirtual com.oracle.svm.core.log.Log.exception:(Ljava/lang/Throwable;)Lcom/oracle/svm/core/log/Log;
            pop
         2: .line 161
            ldc Lorg/graalvm/nativeimage/LogHandler;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast org.graalvm.nativeimage.LogHandler
            invokeinterface org.graalvm.nativeimage.LogHandler.fatalError:()V
         3: .line 162
            return
        end local 0 // java.lang.Throwable exception
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0  exception  Ljava/lang/Throwable;
    MethodParameters:
           Name  Flags
      exception  

  private static void reportUnhandledException(java.lang.Throwable);
    descriptor: (Ljava/lang/Throwable;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Throwable exception
         0: .line 171
            invokestatic com.oracle.svm.core.log.Log.log:()Lcom/oracle/svm/core/log/Log;
            ldc "Fatal error: unhandled exception in isolate "
            invokevirtual com.oracle.svm.core.log.Log.string:(Ljava/lang/String;)Lcom/oracle/svm/core/log/Log;
            invokestatic org.graalvm.nativeimage.CurrentIsolate.getIsolate:()Lorg/graalvm/nativeimage/Isolate;
            invokevirtual com.oracle.svm.core.log.Log.hex:(Lorg/graalvm/word/WordBase;)Lcom/oracle/svm/core/log/Log;
            ldc ": "
            invokevirtual com.oracle.svm.core.log.Log.string:(Ljava/lang/String;)Lcom/oracle/svm/core/log/Log;
            pop
         1: .line 172
            invokestatic com.oracle.svm.core.log.Log.log:()Lcom/oracle/svm/core/log/Log;
            aload 0 /* exception */
            invokevirtual com.oracle.svm.core.log.Log.exception:(Ljava/lang/Throwable;)Lcom/oracle/svm/core/log/Log;
            pop
         2: .line 173
            ldc Lorg/graalvm/nativeimage/LogHandler;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast org.graalvm.nativeimage.LogHandler
            invokeinterface org.graalvm.nativeimage.LogHandler.fatalError:()V
         3: .line 174
            return
        end local 0 // java.lang.Throwable exception
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0  exception  Ljava/lang/Throwable;
    MethodParameters:
           Name  Flags
      exception  

  protected abstract void customUnwindException(org.graalvm.word.Pointer);
    descriptor: (Lorg/graalvm/word/Pointer;)V
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    MethodParameters:
          Name  Flags
      callerSP  

  private static void defaultUnwindException(org.graalvm.word.Pointer, boolean);
    descriptor: (Lorg/graalvm/word/Pointer;Z)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=13, args_size=2
        start local 0 // org.graalvm.word.Pointer startSP
        start local 1 // boolean fromMethodWithCalleeSavedRegisters
         0: .line 181
            iload 1 /* fromMethodWithCalleeSavedRegisters */
            istore 2 /* hasCalleeSavedRegisters */
        start local 2 // boolean hasCalleeSavedRegisters
         1: .line 182
            invokestatic com.oracle.svm.core.FrameAccess.singleton:()Lcom/oracle/svm/core/FrameAccess;
            aload 0 /* startSP */
            invokevirtual com.oracle.svm.core.FrameAccess.readReturnAddress:(Lorg/graalvm/word/Pointer;)Lorg/graalvm/nativeimage/c/function/CodePointer;
            astore 3 /* startIP */
        start local 3 // org.graalvm.nativeimage.c.function.CodePointer startIP
         2: .line 189
            ldc Lcom/oracle/svm/core/stack/JavaStackWalk;
            invokestatic org.graalvm.nativeimage.StackValue.get:(Ljava/lang/Class;)Lorg/graalvm/word/PointerBase;
            checkcast com.oracle.svm.core.stack.JavaStackWalk
            astore 4 /* walk */
        start local 4 // com.oracle.svm.core.stack.JavaStackWalk walk
         3: .line 190
            aload 4 /* walk */
            aload 0 /* startSP */
            aload 3 /* startIP */
            invokestatic com.oracle.svm.core.stack.JavaStackWalker.initWalk:(Lcom/oracle/svm/core/stack/JavaStackWalk;Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/function/CodePointer;)V
         4: .line 193
      StackMap locals: int org.graalvm.nativeimage.c.function.CodePointer com.oracle.svm.core.stack.JavaStackWalk
      StackMap stack:
            ldc Lcom/oracle/svm/core/code/SimpleCodeInfoQueryResult;
            invokestatic org.graalvm.nativeimage.StackValue.get:(Ljava/lang/Class;)Lorg/graalvm/word/PointerBase;
            checkcast com.oracle.svm.core.code.SimpleCodeInfoQueryResult
            astore 5 /* codeInfoQueryResult */
        start local 5 // com.oracle.svm.core.code.SimpleCodeInfoQueryResult codeInfoQueryResult
         5: .line 194
            aload 4 /* walk */
            invokeinterface com.oracle.svm.core.stack.JavaStackWalk.getSP:()Lorg/graalvm/word/Pointer;
            astore 6 /* sp */
        start local 6 // org.graalvm.word.Pointer sp
         6: .line 195
            aload 4 /* walk */
            invokeinterface com.oracle.svm.core.stack.JavaStackWalk.getPossiblyStaleIP:()Lorg/graalvm/nativeimage/c/function/CodePointer;
            astore 7 /* ip */
        start local 7 // org.graalvm.nativeimage.c.function.CodePointer ip
         7: .line 197
            aload 6 /* sp */
            invokestatic com.oracle.svm.core.deopt.Deoptimizer.checkDeoptimized:(Lorg/graalvm/word/Pointer;)Lcom/oracle/svm/core/deopt/DeoptimizedFrame;
            astore 8 /* deoptFrame */
        start local 8 // com.oracle.svm.core.deopt.DeoptimizedFrame deoptFrame
         8: .line 198
            aload 8 /* deoptFrame */
            ifnonnull 22
         9: .line 199
            aload 4 /* walk */
            invokeinterface com.oracle.svm.core.stack.JavaStackWalk.getIPCodeInfo:()Lcom/oracle/svm/core/code/UntetheredCodeInfo;
            astore 9 /* untetheredInfo */
        start local 9 // com.oracle.svm.core.code.UntetheredCodeInfo untetheredInfo
        10: .line 200
            aload 9 /* untetheredInfo */
            invokeinterface com.oracle.svm.core.code.UntetheredCodeInfo.isNull:()Z
            ifeq 13
        11: .line 201
            aload 6 /* sp */
            aload 7 /* ip */
            aload 8 /* deoptFrame */
            invokestatic com.oracle.svm.core.stack.JavaStackWalker.reportUnknownFrameEncountered:(Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/function/CodePointer;Lcom/oracle/svm/core/deopt/DeoptimizedFrame;)Ljava/lang/RuntimeException;
            pop
        12: .line 202
            return
        13: .line 205
      StackMap locals: org.graalvm.word.Pointer int int org.graalvm.nativeimage.c.function.CodePointer com.oracle.svm.core.stack.JavaStackWalk com.oracle.svm.core.code.SimpleCodeInfoQueryResult org.graalvm.word.Pointer org.graalvm.nativeimage.c.function.CodePointer com.oracle.svm.core.deopt.DeoptimizedFrame com.oracle.svm.core.code.UntetheredCodeInfo
      StackMap stack:
            aload 9 /* untetheredInfo */
            invokestatic com.oracle.svm.core.code.CodeInfoAccess.acquireTether:(Lcom/oracle/svm/core/code/UntetheredCodeInfo;)Ljava/lang/Object;
            astore 10 /* tether */
        start local 10 // java.lang.Object tether
        14: .line 207
            aload 9 /* untetheredInfo */
            aload 10 /* tether */
            invokestatic com.oracle.svm.core.code.CodeInfoAccess.convert:(Lcom/oracle/svm/core/code/UntetheredCodeInfo;Ljava/lang/Object;)Lcom/oracle/svm/core/code/CodeInfo;
            astore 11 /* codeInfo */
        start local 11 // com.oracle.svm.core.code.CodeInfo codeInfo
        15: .line 209
            aload 11 /* codeInfo */
            aload 7 /* ip */
            aload 5 /* codeInfoQueryResult */
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.lookupCodeInfoInterruptible:(Lcom/oracle/svm/core/code/CodeInfo;Lorg/graalvm/nativeimage/c/function/CodePointer;Lcom/oracle/svm/core/code/SimpleCodeInfoQueryResult;)V
        16: .line 214
            aload 6 /* sp */
            invokestatic com.oracle.svm.core.deopt.Deoptimizer.checkDeoptimized:(Lorg/graalvm/word/Pointer;)Lcom/oracle/svm/core/deopt/DeoptimizedFrame;
            astore 8 /* deoptFrame */
        end local 11 // com.oracle.svm.core.code.CodeInfo codeInfo
        17: .line 215
            goto 21
      StackMap locals: org.graalvm.word.Pointer int int org.graalvm.nativeimage.c.function.CodePointer com.oracle.svm.core.stack.JavaStackWalk com.oracle.svm.core.code.SimpleCodeInfoQueryResult org.graalvm.word.Pointer org.graalvm.nativeimage.c.function.CodePointer com.oracle.svm.core.deopt.DeoptimizedFrame com.oracle.svm.core.code.UntetheredCodeInfo java.lang.Object
      StackMap stack: java.lang.Throwable
        18: astore 12
        19: .line 216
            aload 9 /* untetheredInfo */
            aload 10 /* tether */
            invokestatic com.oracle.svm.core.code.CodeInfoAccess.releaseTether:(Lcom/oracle/svm/core/code/UntetheredCodeInfo;Ljava/lang/Object;)V
        20: .line 217
            aload 12
            athrow
        21: .line 216
      StackMap locals:
      StackMap stack:
            aload 9 /* untetheredInfo */
            aload 10 /* tether */
            invokestatic com.oracle.svm.core.code.CodeInfoAccess.releaseTether:(Lcom/oracle/svm/core/code/UntetheredCodeInfo;Ljava/lang/Object;)V
        end local 10 // java.lang.Object tether
        end local 9 // com.oracle.svm.core.code.UntetheredCodeInfo untetheredInfo
        22: .line 220
      StackMap locals:
      StackMap stack:
            aload 8 /* deoptFrame */
            ifnull 26
            invokestatic com.oracle.svm.core.deopt.DeoptimizationSupport.enabled:()Z
            ifeq 26
        23: .line 222
            aload 8 /* deoptFrame */
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.deoptTakeExceptionInterruptible:(Lcom/oracle/svm/core/deopt/DeoptimizedFrame;)V
        24: .line 223
            aload 6 /* sp */
            invokestatic com.oracle.svm.core.deopt.DeoptimizationSupport.getDeoptStubPointer:()Lorg/graalvm/nativeimage/c/function/CFunctionPointer;
            iload 2 /* hasCalleeSavedRegisters */
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.jumpToHandler:(Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/function/CodePointer;Z)V
        25: .line 224
            return
        26: .line 227
      StackMap locals:
      StackMap stack:
            aload 5 /* codeInfoQueryResult */
            invokeinterface com.oracle.svm.core.code.SimpleCodeInfoQueryResult.getExceptionOffset:()J
            lstore 9 /* exceptionOffset */
        start local 9 // long exceptionOffset
        27: .line 228
            lload 9 /* exceptionOffset */
            lconst_0
            lcmp
            ifeq 31
        28: .line 229
            aload 7 /* ip */
            checkcast org.graalvm.word.UnsignedWord
            lload 9 /* exceptionOffset */
            invokestatic org.graalvm.word.WordFactory.signed:(J)Lorg/graalvm/word/SignedWord;
            checkcast org.graalvm.word.UnsignedWord
            invokeinterface org.graalvm.word.UnsignedWord.add:(Lorg/graalvm/word/UnsignedWord;)Lorg/graalvm/word/UnsignedWord;
            checkcast org.graalvm.nativeimage.c.function.CodePointer
            astore 11 /* handlerIP */
        start local 11 // org.graalvm.nativeimage.c.function.CodePointer handlerIP
        29: .line 230
            aload 6 /* sp */
            aload 11 /* handlerIP */
            iload 2 /* hasCalleeSavedRegisters */
            invokestatic com.oracle.svm.core.snippets.ExceptionUnwind.jumpToHandler:(Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/function/CodePointer;Z)V
        30: .line 231
            return
        end local 11 // org.graalvm.nativeimage.c.function.CodePointer handlerIP
        31: .line 235
      StackMap locals: long
      StackMap stack:
            aload 5 /* codeInfoQueryResult */
            invokeinterface com.oracle.svm.core.code.SimpleCodeInfoQueryResult.getEncodedFrameSize:()J
            invokestatic com.oracle.svm.core.code.CodeInfoQueryResult.hasCalleeSavedRegisters:(J)Z
            istore 2 /* hasCalleeSavedRegisters */
        32: .line 236
            aload 4 /* walk */
            aload 5 /* codeInfoQueryResult */
            aload 8 /* deoptFrame */
            invokestatic com.oracle.svm.core.stack.JavaStackWalker.continueWalk:(Lcom/oracle/svm/core/stack/JavaStackWalk;Lcom/oracle/svm/core/code/SimpleCodeInfoQueryResult;Lcom/oracle/svm/core/deopt/DeoptimizedFrame;)Z
            ifne 4
        33: .line 238
            return
        end local 9 // long exceptionOffset
        end local 8 // com.oracle.svm.core.deopt.DeoptimizedFrame deoptFrame
        end local 7 // org.graalvm.nativeimage.c.function.CodePointer ip
        end local 6 // org.graalvm.word.Pointer sp
        end local 5 // com.oracle.svm.core.code.SimpleCodeInfoQueryResult codeInfoQueryResult
        end local 4 // com.oracle.svm.core.stack.JavaStackWalk walk
        end local 3 // org.graalvm.nativeimage.c.function.CodePointer startIP
        end local 2 // boolean hasCalleeSavedRegisters
        end local 1 // boolean fromMethodWithCalleeSavedRegisters
        end local 0 // org.graalvm.word.Pointer startSP
      LocalVariableTable:
        Start  End  Slot                                Name  Signature
            0   34     0                             startSP  Lorg/graalvm/word/Pointer;
            0   34     1  fromMethodWithCalleeSavedRegisters  Z
            1   34     2             hasCalleeSavedRegisters  Z
            2   34     3                             startIP  Lorg/graalvm/nativeimage/c/function/CodePointer;
            3   34     4                                walk  Lcom/oracle/svm/core/stack/JavaStackWalk;
            5   34     5                 codeInfoQueryResult  Lcom/oracle/svm/core/code/SimpleCodeInfoQueryResult;
            6   34     6                                  sp  Lorg/graalvm/word/Pointer;
            7   34     7                                  ip  Lorg/graalvm/nativeimage/c/function/CodePointer;
            8   34     8                          deoptFrame  Lcom/oracle/svm/core/deopt/DeoptimizedFrame;
           10   22     9                      untetheredInfo  Lcom/oracle/svm/core/code/UntetheredCodeInfo;
           14   22    10                              tether  Ljava/lang/Object;
           15   17    11                            codeInfo  Lcom/oracle/svm/core/code/CodeInfo;
           27   34     9                     exceptionOffset  J
           29   31    11                           handlerIP  Lorg/graalvm/nativeimage/c/function/CodePointer;
      Exception table:
        from    to  target  type
          14    18      18  any
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.annotate.Uninterruptible(reason = "Prevent deoptimization apart from the few places explicitly considered safe for deoptimization")
    MethodParameters:
                                    Name  Flags
      startSP                             
      fromMethodWithCalleeSavedRegisters  

  private static void jumpToHandler(org.graalvm.word.Pointer, org.graalvm.nativeimage.c.function.CodePointer, boolean);
    descriptor: (Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/function/CodePointer;Z)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.graalvm.word.Pointer sp
        start local 1 // org.graalvm.nativeimage.c.function.CodePointer handlerIP
        start local 2 // boolean hasCalleeSavedRegisters
         0: .line 245
            getstatic com.oracle.svm.core.snippets.ExceptionUnwind.currentException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalObject.get:()Ljava/lang/Object;
            checkcast java.lang.Throwable
            astore 3 /* exception */
        start local 3 // java.lang.Throwable exception
         1: .line 246
            getstatic com.oracle.svm.core.snippets.ExceptionUnwind.currentException:Lcom/oracle/svm/core/threadlocal/FastThreadLocalObject;
            aconst_null
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalObject.set:(Ljava/lang/Object;)V
         2: .line 248
            invokestatic com.oracle.svm.core.stack.StackOverflowCheck.singleton:()Lcom/oracle/svm/core/stack/StackOverflowCheck;
            invokeinterface com.oracle.svm.core.stack.StackOverflowCheck.protectYellowZone:()V
         3: .line 250
            iload 2 /* hasCalleeSavedRegisters */
            ifeq 6
         4: .line 256
            aload 3 /* exception */
            aload 0 /* sp */
            aload 1 /* handlerIP */
            iconst_1
            invokestatic com.oracle.svm.core.snippets.KnownIntrinsics.farReturn:(Ljava/lang/Object;Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/function/CodePointer;Z)V
         5: .line 257
            goto 7
         6: .line 258
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 3 /* exception */
            aload 0 /* sp */
            aload 1 /* handlerIP */
            iconst_0
            invokestatic com.oracle.svm.core.snippets.KnownIntrinsics.farReturn:(Ljava/lang/Object;Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/function/CodePointer;Z)V
         7: .line 261
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.lang.Throwable exception
        end local 2 // boolean hasCalleeSavedRegisters
        end local 1 // org.graalvm.nativeimage.c.function.CodePointer handlerIP
        end local 0 // org.graalvm.word.Pointer sp
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0    8     0                       sp  Lorg/graalvm/word/Pointer;
            0    8     1                handlerIP  Lorg/graalvm/nativeimage/c/function/CodePointer;
            0    8     2  hasCalleeSavedRegisters  Z
            1    8     3                exception  Ljava/lang/Throwable;
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.annotate.Uninterruptible(reason = "Prevent deoptimization while dispatching to exception handler")
    MethodParameters:
                         Name  Flags
      sp                       
      handlerIP                
      hasCalleeSavedRegisters  

  private static void deoptTakeExceptionInterruptible(com.oracle.svm.core.deopt.DeoptimizedFrame);
    descriptor: (Lcom/oracle/svm/core/deopt/DeoptimizedFrame;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.deopt.DeoptimizedFrame deoptFrame
         0: .line 265
            aload 0 /* deoptFrame */
            invokevirtual com.oracle.svm.core.deopt.DeoptimizedFrame.takeException:()V
         1: .line 266
            return
        end local 0 // com.oracle.svm.core.deopt.DeoptimizedFrame deoptFrame
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0  deoptFrame  Lcom/oracle/svm/core/deopt/DeoptimizedFrame;
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.annotate.Uninterruptible(reason = "Wrap call to interruptible code.", calleeMustBe = false)
    MethodParameters:
            Name  Flags
      deoptFrame  

  private static void lookupCodeInfoInterruptible(com.oracle.svm.core.code.CodeInfo, org.graalvm.nativeimage.c.function.CodePointer, com.oracle.svm.core.code.SimpleCodeInfoQueryResult);
    descriptor: (Lcom/oracle/svm/core/code/CodeInfo;Lorg/graalvm/nativeimage/c/function/CodePointer;Lcom/oracle/svm/core/code/SimpleCodeInfoQueryResult;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // com.oracle.svm.core.code.CodeInfo codeInfo
        start local 1 // org.graalvm.nativeimage.c.function.CodePointer ip
        start local 2 // com.oracle.svm.core.code.SimpleCodeInfoQueryResult codeInfoQueryResult
         0: .line 270
            aload 0 /* codeInfo */
            aload 0 /* codeInfo */
            aload 1 /* ip */
            invokestatic com.oracle.svm.core.code.CodeInfoAccess.relativeIP:(Lcom/oracle/svm/core/code/CodeInfo;Lorg/graalvm/nativeimage/c/function/CodePointer;)J
            aload 2 /* codeInfoQueryResult */
            invokestatic com.oracle.svm.core.code.CodeInfoAccess.lookupCodeInfo:(Lcom/oracle/svm/core/code/CodeInfo;JLcom/oracle/svm/core/code/SimpleCodeInfoQueryResult;)V
         1: .line 271
            return
        end local 2 // com.oracle.svm.core.code.SimpleCodeInfoQueryResult codeInfoQueryResult
        end local 1 // org.graalvm.nativeimage.c.function.CodePointer ip
        end local 0 // com.oracle.svm.core.code.CodeInfo codeInfo
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    2     0             codeInfo  Lcom/oracle/svm/core/code/CodeInfo;
            0    2     1                   ip  Lorg/graalvm/nativeimage/c/function/CodePointer;
            0    2     2  codeInfoQueryResult  Lcom/oracle/svm/core/code/SimpleCodeInfoQueryResult;
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.annotate.Uninterruptible(reason = "Wrap call to interruptible code.", calleeMustBe = false)
    MethodParameters:
                     Name  Flags
      codeInfo             
      ip                   
      codeInfoQueryResult  
}
SourceFile: "ExceptionUnwind.java"
InnerClasses:
  public final Access = com.oracle.svm.core.annotate.RestrictHeapAccess$Access of com.oracle.svm.core.annotate.RestrictHeapAccess
  public SubstrateForeignCallDescriptor = com.oracle.svm.core.snippets.SnippetRuntime$SubstrateForeignCallDescriptor of com.oracle.svm.core.snippets.SnippetRuntime
  public StatusSupport = com.oracle.svm.core.thread.VMThreads$StatusSupport of com.oracle.svm.core.thread.VMThreads