public abstract class com.oracle.svm.core.SubstrateSegfaultHandler
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.oracle.svm.core.SubstrateSegfaultHandler
  super_class: java.lang.Object
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.SubstrateSegfaultHandler this
         0: .line 65
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.svm.core.SubstrateSegfaultHandler this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/SubstrateSegfaultHandler;

  static void startupHook();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=1, args_size=0
         0: .line 73
            getstatic com.oracle.svm.core.SubstrateSegfaultHandler$Options.InstallSegfaultHandler:Lcom/oracle/svm/core/option/RuntimeOptionKey;
            invokevirtual com.oracle.svm.core.option.RuntimeOptionKey.getValue:()Ljava/lang/Object;
            checkcast java.lang.Boolean
            astore 0 /* optionValue */
        start local 0 // java.lang.Boolean optionValue
         1: .line 74
            aload 0 /* optionValue */
            getstatic java.lang.Boolean.TRUE:Ljava/lang/Boolean;
            if_acmpeq 2
            aload 0 /* optionValue */
            ifnonnull 3
            invokestatic org.graalvm.nativeimage.ImageInfo.isExecutable:()Z
            ifeq 3
         2: .line 75
      StackMap locals: java.lang.Boolean
      StackMap stack:
            ldc Lcom/oracle/svm/core/SubstrateSegfaultHandler;
            invokestatic org.graalvm.nativeimage.ImageSingletons.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.svm.core.SubstrateSegfaultHandler
            invokevirtual com.oracle.svm.core.SubstrateSegfaultHandler.install:()V
         3: .line 77
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.Boolean optionValue
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            1    4     0  optionValue  Ljava/lang/Boolean;

  protected abstract void install();
    descriptor: ()V
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  protected static boolean tryEnterIsolate(com.oracle.svm.core.RegisterDumper$Context);
    descriptor: (Lcom/oracle/svm/core/RegisterDumper$Context;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.oracle.svm.core.RegisterDumper$Context context
         0: .line 86
            getstatic com.oracle.svm.core.SubstrateOptions.SpawnIsolates: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 3
         1: .line 87
            invokestatic com.oracle.svm.core.RegisterDumper.singleton:()Lcom/oracle/svm/core/RegisterDumper;
            aload 0 /* context */
            invokeinterface com.oracle.svm.core.RegisterDumper.getHeapBase:(Lcom/oracle/svm/core/RegisterDumper$Context;)Lorg/graalvm/word/PointerBase;
            astore 1 /* heapBase */
        start local 1 // org.graalvm.word.PointerBase heapBase
         2: .line 88
            aload 1 /* heapBase */
            invokestatic com.oracle.svm.core.graal.nodes.WriteHeapBaseNode.writeCurrentVMHeapBase:(Lorg/graalvm/word/PointerBase;)V
        end local 1 // org.graalvm.word.PointerBase heapBase
         3: .line 90
      StackMap locals:
      StackMap stack:
            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 6
         4: .line 91
            invokestatic com.oracle.svm.core.RegisterDumper.singleton:()Lcom/oracle/svm/core/RegisterDumper;
            aload 0 /* context */
            invokeinterface com.oracle.svm.core.RegisterDumper.getThreadPointer:(Lcom/oracle/svm/core/RegisterDumper$Context;)Lorg/graalvm/word/PointerBase;
            astore 1 /* threadPointer */
        start local 1 // org.graalvm.word.PointerBase threadPointer
         5: .line 92
            aload 1 /* threadPointer */
            checkcast org.graalvm.nativeimage.IsolateThread
            invokestatic com.oracle.svm.core.graal.nodes.WriteCurrentVMThreadNode.writeCurrentVMThread:(Lorg/graalvm/nativeimage/IsolateThread;)V
        end local 1 // org.graalvm.word.PointerBase threadPointer
         6: .line 99
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.svm.core.thread.VMThreads.IsolateTL:Lcom/oracle/svm/core/threadlocal/FastThreadLocalWord;
            invokevirtual com.oracle.svm.core.threadlocal.FastThreadLocalWord.get:()Lorg/graalvm/word/WordBase;
            checkcast org.graalvm.nativeimage.Isolate
            astore 1 /* isolate */
        start local 1 // org.graalvm.nativeimage.Isolate isolate
         7: .line 100
            aload 1 /* isolate */
            invokestatic com.oracle.svm.core.Isolates.checkSanity:(Lorg/graalvm/nativeimage/Isolate;)I
            ifne 10
         8: .line 101
            getstatic com.oracle.svm.core.SubstrateOptions.SpawnIsolates: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 9
            aload 1 /* isolate */
            invokestatic com.oracle.svm.core.snippets.KnownIntrinsics.heapBase:()Lorg/graalvm/word/Pointer;
            invokeinterface org.graalvm.nativeimage.Isolate.equal:(Lorg/graalvm/word/ComparableWord;)Z
            ifeq 10
         9: .line 100
      StackMap locals: org.graalvm.nativeimage.Isolate
      StackMap stack:
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
        10: iconst_0
            ireturn
        end local 1 // org.graalvm.nativeimage.Isolate isolate
        end local 0 // com.oracle.svm.core.RegisterDumper$Context context
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   11     0        context  Lcom/oracle/svm/core/RegisterDumper$Context;
            2    3     1       heapBase  Lorg/graalvm/word/PointerBase;
            5    6     1  threadPointer  Lorg/graalvm/word/PointerBase;
            7   11     1        isolate  Lorg/graalvm/nativeimage/Isolate;
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.annotate.Uninterruptible(reason = "Called from uninterruptible code.")
      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 in segfault handler.", overridesCallers = true)
    MethodParameters:
         Name  Flags
      context  

  protected static void dump(com.oracle.svm.core.RegisterDumper$Context);
    descriptor: (Lcom/oracle/svm/core/RegisterDumper$Context;)V
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.RegisterDumper$Context context
         0: .line 108
            invokestatic com.oracle.svm.core.thread.VMThreads$StatusSupport.setStatusIgnoreSafepoints:()V
         1: .line 109
            aload 0 /* context */
            invokestatic com.oracle.svm.core.SubstrateSegfaultHandler.dumpInterruptibly:(Lcom/oracle/svm/core/RegisterDumper$Context;)V
         2: .line 110
            return
        end local 0 // com.oracle.svm.core.RegisterDumper$Context context
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0  context  Lcom/oracle/svm/core/RegisterDumper$Context;
    RuntimeVisibleAnnotations: 
      com.oracle.svm.core.annotate.Uninterruptible(reason = "Must be uninterruptible until we get immune to safepoints.", 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 in segfault handler.", overridesCallers = true)
    MethodParameters:
         Name  Flags
      context  

  private static void dumpInterruptibly(com.oracle.svm.core.RegisterDumper$Context);
    descriptor: (Lcom/oracle/svm/core/RegisterDumper$Context;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=1
        start local 0 // com.oracle.svm.core.RegisterDumper$Context context
         0: .line 113
            invokestatic com.oracle.svm.core.log.Log.log:()Lcom/oracle/svm/core/log/Log;
            astore 1 /* log */
        start local 1 // com.oracle.svm.core.log.Log log
         1: .line 114
            aload 1 /* log */
            iconst_1
            invokevirtual com.oracle.svm.core.log.Log.autoflush:(Z)Lcom/oracle/svm/core/log/Log;
            pop
         2: .line 116
            aload 1 /* log */
            invokevirtual com.oracle.svm.core.log.Log.newline:()Lcom/oracle/svm/core/log/Log;
            pop
         3: .line 117
            aload 1 /* log */
            ldc "[ [ SubstrateSegfaultHandler caught a segfault. ] ]"
            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
         4: .line 119
            invokestatic com.oracle.svm.core.RegisterDumper.singleton:()Lcom/oracle/svm/core/RegisterDumper;
            aload 0 /* context */
            invokeinterface com.oracle.svm.core.RegisterDumper.getSP:(Lcom/oracle/svm/core/RegisterDumper$Context;)Lorg/graalvm/word/PointerBase;
            astore 2 /* sp */
        start local 2 // org.graalvm.word.PointerBase sp
         5: .line 120
            invokestatic com.oracle.svm.core.RegisterDumper.singleton:()Lcom/oracle/svm/core/RegisterDumper;
            aload 0 /* context */
            invokeinterface com.oracle.svm.core.RegisterDumper.getIP:(Lcom/oracle/svm/core/RegisterDumper$Context;)Lorg/graalvm/word/PointerBase;
            astore 3 /* ip */
        start local 3 // org.graalvm.word.PointerBase ip
         6: .line 121
            aload 1 /* log */
            aload 2 /* sp */
            checkcast org.graalvm.word.Pointer
            aload 3 /* ip */
            checkcast org.graalvm.nativeimage.c.function.CodePointer
            aload 0 /* context */
            invokestatic com.oracle.svm.core.SubstrateUtil.printDiagnostics:(Lcom/oracle/svm/core/log/Log;Lorg/graalvm/word/Pointer;Lorg/graalvm/nativeimage/c/function/CodePointer;Lcom/oracle/svm/core/RegisterDumper$Context;)V
         7: .line 123
            aload 1 /* log */
            ldc "Segfault detected, aborting process. Use runtime option -R:-InstallSegfaultHandler if you don't want to use SubstrateSegfaultHandler."
            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
         8: .line 124
            aload 1 /* log */
            invokevirtual com.oracle.svm.core.log.Log.newline:()Lcom/oracle/svm/core/log/Log;
            pop
         9: .line 126
            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
        10: .line 127
            return
        end local 3 // org.graalvm.word.PointerBase ip
        end local 2 // org.graalvm.word.PointerBase sp
        end local 1 // com.oracle.svm.core.log.Log log
        end local 0 // com.oracle.svm.core.RegisterDumper$Context context
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   11     0  context  Lcom/oracle/svm/core/RegisterDumper$Context;
            1   11     1      log  Lcom/oracle/svm/core/log/Log;
            5   11     2       sp  Lorg/graalvm/word/PointerBase;
            6   11     3       ip  Lorg/graalvm/word/PointerBase;
    MethodParameters:
         Name  Flags
      context  
}
SourceFile: "SubstrateSegfaultHandler.java"
NestMembers:
  com.oracle.svm.core.SubstrateSegfaultHandler$Options
InnerClasses:
  public abstract Context = com.oracle.svm.core.RegisterDumper$Context of com.oracle.svm.core.RegisterDumper
  public Options = com.oracle.svm.core.SubstrateSegfaultHandler$Options of com.oracle.svm.core.SubstrateSegfaultHandler
  public final Access = com.oracle.svm.core.annotate.RestrictHeapAccess$Access of com.oracle.svm.core.annotate.RestrictHeapAccess
  public StatusSupport = com.oracle.svm.core.thread.VMThreads$StatusSupport of com.oracle.svm.core.thread.VMThreads