Hi Jan,

On Thu, Sep 28, 2023 at 5:26 AM Jan Vrany <jan@vrany.io> wrote:
 
Hi Eliot and others,

I'm trying to build working VMMaker image in order to see what 
machine code Cog generates for some simple methods - without 
success so far. All this is on Linux on AMD64. Detailed report
on what exactly I did and what errors I got is below.

In short:
  (i) does AArch64 sim plugin works on modern linuxes, does anyone
      use it there?

I don't know.  I use macOS almost exclusively for development.  I test and use other platforms occasionally.  But as far as VMMaker development getting attention, I put my energy into making sure macOS supports all the simulators.

  (ii) if so, what's the correct incantation to compile it.

In each platform build you'll find a directory for each of the sims:
     building/*/{bochsx64,bochsx86,gdbarm32,gdbarm64}
and in each directory there is at least a conf.COG and a makeem script.l  Most, but not all makeem scripts invoke conf.COG.  You need to read to make sure.

So for each sim from bochsx64,bochsx86,gdbarm32,gdbarm64 on the platform you want to run VMMaker (in your case linux64x64) cd to the directory, run makeem.  If there are errores report back here, or try and fix and submit a pull request.

This will build the support libraries (the guts of the sims) for the sim plugins src/plugins/{BochsIA32Plugin/BochsIA32Plugin.c,BochsX64Plugin/BochsX64Plugin.c,GdbARMPlugin/GdbARMPlugin.c,GdbARMv8Plugin/GdbARMv8Plugin.c}

The macos and linux VM makefiles make the plugins if the support directories contain teh sim libraries *and* the plugins.ext file in the VM build dir includes the plugin name. This is the case in squeak.cog.spur directories.

e.g.
Aeolus.oscogvm$ head -9 building/linux64x64/squeak.cog.spur/plugins.ext
# Copied, perhaps edited, from ../../../src/examplePlugins.ext
EXTERNAL_PLUGINS = \
MIDIPlugin \
B3DAcceleratorPlugin \
ClipboardExtendedPlugin \
BochsIA32Plugin \
BochsX64Plugin \
GdbARMPlugin \
GdbARMv8Plugin \
Aeolus.oscogvm$

So once the support libs are built build a VM. It should end up with all the relevant plugins in
    products/sqcogspur64linuxht
The destination i defined by the INSTALLDIR var in the mvm file, e.g. building/linux64x64/squeak.cog.spur/build/mvm

Sorry this is so messy.


 (iii) using code in workspace labelled "In-Image Compilation Workspace",
       is it supposed to work for every method and every ISA or is it normal
       that it fails with DNU for some methods? I managed to compile but the 
       trivial ones.

It is hoped that it works for all.  But this isn't regularly tested.  Changes elsewhere sometimes break in-image compilation.  Bug reports and fixes gratefully received here.   It would be great to add in-9mage compilation checks to a CI system near us, but I'm unable to put in that effort.


Thanks! Jan

HTH


==================================================
==== Below details what I did and errors I got ===

I'm using this commit:

commit 330d6779ad2ecbce1f07131f53d75cd168165f0b (HEAD -> Cog, origin/HEAD, origin/Cog)
Author: Christoph Thiede <christoph.thiede@student.hpi.de>
Date:   Thu Aug 17 13:32:52 2023 +0200


Here's what I did:

* IIUC, first I need to build bochs and BOCHS 64 simulator, so

  cd opensmalltalk-vm/building/linux64x64/bochsx64
  ./conf.COG
  ./makeem

  That built just fine.

* Then I built gdbarm64 simulator:

  cd opensmalltalk-vm/building/linux64x64/gdbarm64$
  ./conf.COG
  ./makeem

  Again, no problem so far.

* Then I tried to build the VM:

  cd opensmalltalk-vm/building/linux64x64/squeak.cog.spur/build
  ./mvm

  That failed soon:

.../opensmalltalk-vm/platforms/unix/vm/sqUnixMain.c:1832:10: warning: format string is not a string literal (potentially insecure) [-Wformat-security]
                printf(optionStrings[count]);
                       ^~~~~~~~~~~~~~~~~~~~
.../opensmalltalk-vm/platforms/unix/vm/sqUnixMain.c:1832:10: note: treat the string as an argument to avoid this
                printf(optionStrings[count]);
                       ^
                       "%s",
.../opensmalltalk-vm/platforms/unix/vm/sqUnixMain.c:2324:38: error: incompatible function pointer types assigning to 'void (*)(int, siginfo_t *, void *)' from
'void (int, siginfo_t *, ucontext_t *)' (aka 'void (int, siginfo_t *, struct ucontext_t *)') [-Wincompatible-function-pointer-types]
        sigsegv_handler_action.sa_sigaction = sigsegv;
                                            ^ ~~~~~~~
.../opensmalltalk-vm/platforms/unix/vm/sqUnixMain.c:2331:38: error: incompatible function pointer types assigning to 'void (*)(int, siginfo_t *, void *)' from
'void (int, siginfo_t *, ucontext_t *)' (aka 'void (int, siginfo_t *, struct ucontext_t *)') [-Wincompatible-function-pointer-types]
        sigusr1_handler_action.sa_sigaction = sigusr1;
                                            ^ ~~~~~~~
1 warning and 2 errors generated.

   This is using clang version 16.0.6 (which mvm script enforces on line 20)

This is a PITA. Findimng a declaration that works across all platforms is difficult but required.  That may imply per-platform macros to define the signature. 


* Then I tried to build the VM again, this time with GCC (version 13.2.0 by editing mvm line 20):

  cd opensmalltalk-vm/building/linux64x64/squeak.cog.spur/build
  ./mvm

  This failed to compile too, though with different error:

  libtool: compile:  gcc -Wall -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2 -DCOGMTVM=0 -pthread -DLSB_FIRST=1 -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-
value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -DHAVE_CONFIG_H -I.../opensmalltalk-
vm/building/linux64x64/squeak.cog.spur/build -I.../opensmalltalk-vm/building/linux64x64/squeak.cog.spur/build -I.../opensmalltalk-vm/platforms/unix/vm -
I.../opensmalltalk-vm/platforms/Cross/vm -I.../opensmalltalk-vm/src/spur64.cog -I/usr/local/include -I.../opensmalltalk-
vm/platforms/Cross/plugins/GdbARMv8Plugin -I../../../../processors/ARM/gdb-8.3.1/include -I../../../../processors/ARM/gdb-8.3.1/sim/aarch64 -m64 -Wno-missing-
braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -c .../opensmalltalk-
vm/platforms/Cross/plugins/GdbARMv8Plugin/sqGdbARMv8Plugin.c  -fPIC -DPIC -o .libs/sqGdbARMv8Plugin.o
In file included from .../opensmalltalk-vm/platforms/Cross/vm/sqMemoryAccess.h:23,
                 from .../opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:35,
                 from .../opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16,
                 from .../opensmalltalk-vm/platforms/Cross/plugins/GdbARMv8Plugin/sqGdbARMv8Plugin.c:4:
.../opensmalltalk-vm/building/linux64x64/squeak.cog.spur/build/config.h:40:2: error: #error This file was included too late. Please make sure it is included
earlier
   40 | #error This file was included too late. Please make sure it is included earlier
      |  ^~~~~
.../opensmalltalk-vm/platforms/Cross/plugins/GdbARMv8Plugin/sqGdbARMv8Plugin.c:9:10: fatal error: aarch64/config.h: No such file or directory
    9 | #include <aarch64/config.h>
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:197: sqGdbARMv8Plugin.lo] Error 1
make: *** [Makefile:557: GdbARMv8Plugin.la] Error 2

I got bitten by this recently too.  Someone changed the way we include config.h and that fucked everything up.  It was a house of cards, but there we are.  I'm not sure how to fix this.  It works on macos, and that's my need.


* Then I gave up on AArch64 support and tried only with AMD64 by cleaning
  opensmalltalk-vm/building/linux64x64/gdbarm64. This time VM compiled fine. 

* As a next step, I built VMMaker image:

  cd opensmalltalk-vm/image
  ./buildspurtrunkvmmaker64image.sh -vm ../building/linux64x64/squeak.cog.spur/build/squeak.sh

  This worked just fine, producing Spur64VMMaker.image


* Finally, I tried to see AMD64 (since I could not build AArch64 sim plugin) machine code 
  for some method, so I executed following smalltalk code in a workspace
  (which is just a modification of what is suggested in one of pre-opened workspaces
  I only changed memory manager class and ISA):


  StackToRegisterMappingCogit
        genAndDis: SequenceableCollection>>#indexOf:startingAt:ifAbsent:
        options: #(ObjectMemory Spur64BitCoMemoryManager ISA X64).

You're missing some secret sauce:

StackToRegisterMappingCogit
        genAndDis: SequenceableCollection>>#indexOf:startingAt:ifAbsent:
        options: #(ObjectMemory Spur64BitCoMemoryManager MULTIPLEBYTECODESETS true ISA X64).

Maybe this should be the default for in-image compilation. Sorry.


  This resulted in DNU:


  28 September 2023 1:07:59.435358 pm

VM: unix - Smalltalk
Image: Squeak6.1alpha [latest update: #22775]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /home/jv/Projects/Squeak/opensmalltalk-vm/image
Trusted Dir /home/jv/Projects/Squeak/opensmalltalk-vm/image/secure
Untrusted Dir /home/jv/Projects/Squeak/opensmalltalk-vm/image/My Squeak

UndefinedObject(Object)>>doesNotUnderstand: #isCMBlock
        Receiver: nil
        Arguments and temporary variables:
                aMessage:       isCMBlock
                exception:      MessageNotUnderstood: UndefinedObject>>isCMBlock
                resumeValue:    nil
        Receiver's instance variables:
nil

StackToRegisterMappingCogit(Cogit)>>disassembleMethod:on:
        Receiver: a StackToRegisterMappingCogit
        Arguments and temporary variables:
                surrogateOrAddress:     nil
                aStream:        a TranscriptStream
                cogMethod:      nil
                mapEntries:     nil
                codeRanges:     nil
                i:      nil
                iLimiT:         nil
        Receiver's instance variables:
                coInterpreter:  a CurrentImageCoInterpreterFacadeFor64BitSpurObjectRepresentation...etc...
                objectMemory:   a CurrentImageCoInterpreterFacadeFor64BitSpurObjectRepresentation...etc...
                objectRepresentation:   a CogObjectRepresentationFor64BitSpur
                processor:      a BochsX64Alien64
rax: 00000101 (257)     rbx: 00000000   rcx: 00000000   rdx...etc...
                processorLock:  a Mutex()
                methodZone:     a CogMethodZone
                methodZoneBase:         5784
                codeBase:       1024
                lastNInstructions:      an OrderedCollection(a DoubleWordArray(0 0 0 0 4193216 41932...etc...
                simulatedAddresses:     a Dictionary(#argumentCount->9223372036854775932 #ceActivateFailingPrimitiveMethod:...etc...
                simulatedTrampolines:   a Dictionary(9223372036854775980->MessageSend(#ceSend:super:to:numArgs:...etc...
                simulatedVariableGetters:       a Dictionary()
                simulatedVariableSetters:       a Dictionary()
                printRegisters:         false
                printInstructions:      false
                compilationTrace:       0
                clickConfirm:   false
                clickStepping:  false
                breakPC:        nil
                breakBlock:     nil
                singleStep:     true
                guardPageSize:  1024
                traceFlags:     8
                traceStores:    0
                breakMethod:    nil
                methodObj:      nil
                enumeratingCogMethod:   nil
                methodHeader:   nil
                initialPC:      0
                endPC:  nil
                methodOrBlockNumArgs:   0
                inBlock:        nil
                needsFrame:     nil
                hasYoungReferent:       false
                hasMovableLiteral:      true
                primitiveIndex:         nil
                backEnd:        a CogInLineLiteralsX64Compiler
                literalsManager:        an InLineLiteralsManager
                methodLabel:    a CogInLineLiteralsX64Compiler (Label 0 @1698)
                stackCheckLabel:        nil
                blockEntryLabel:        nil
                blockEntryNoContextSwitch:      nil
                blockNoContextSwitchOffset:     nil
                stackOverflowCall:      a CogInLineLiteralsX64Compiler (MoveCqR 0 ReceiverResultReg ...etc...
                sendMiss:       a CogInLineLiteralsX64Compiler (Call 1680/690 E8 A0 F0 FF FF @15EB)
                missOffset:     48
                entryPointMask:         7
                checkedEntryAlignment:  0
                uncheckedEntryAlignment:        7
                cmEntryOffset:  48
                entry:  a CogInLineLiteralsX64Compiler (Label 1 @16C8)
                cmNoCheckEntryOffset:   71
                noCheckEntry:   a CogInLineLiteralsX64Compiler (Label 3 @1607)
                fullBlockEntry:         nil
                cbEntryOffset:  nil
                fullBlockNoContextSwitchEntry:  nil
                cbNoSwitchEntryOffset:  nil
                picMNUAbort:    a CogInLineLiteralsX64Compiler (MoveCqR 0 ClassReg 48 31 C9 @16C0)...etc...
                picInterpretAbort:      a CogInLineLiteralsX64Compiler (Call 2336/920 E8 58 F2 FF FF...etc...
                endCPICCase0:   a CogInLineLiteralsX64Compiler (Label 3 @1617)
                endCPICCase1:   a CogInLineLiteralsX64Compiler (Label 4 @162D)
                firstCPICCaseOffset:    87
                cPICCaseSize:   22
                cPICEndSize:    12
                closedPICSize:  216
                openPICSize:    360
                fixups:         a CArrayAccessor on: {a CogSSBytecodeFixup ( 0 ix 2) . a CogSSBytecodeFixup...etc...
                abstractOpcodes:        a CArrayAccessor on: {a CogInLineLiteralsX64Compiler (MoveCqR ...etc...
                generatorTable:         a CArrayAccessor on: {a CogBytecodeDescriptor (genPushReceiverVariableBytecode...etc...
                byte0:  nil
                byte1:  nil
                byte2:  nil
                byte3:  nil
                bytecodePC:     nil
                bytecodeSetOffset:      nil
                opcodeIndex:    64
                numAbstractOpcodes:     100
                blockStarts:    nil
                blockCount:     nil
                labelCounter:   5
                cStackAlignment:        32
                expectedSPAlignment:    0
                expectedFPAlignment:    16
                codeModified:   nil
                maxLitIndex:    nil
                ceMethodAbortTrampoline:        nil
                cePICAbortTrampoline:   nil
                ceCheckForInterruptTrampoline:  4648
                ceCPICMissTrampoline:   nil
                ceReturnToInterpreterTrampoline:        4872
                ceBaseFrameReturnTrampoline:    4920
                ceReapAndResetErrorCodeTrampoline:      2768
                ceSendMustBeBooleanAddTrueTrampoline:   4544
                ceSendMustBeBooleanAddFalseTrampoline:  4488
                ceCannotResumeTrampoline:       4800
                ceEnterCogCodePopReceiverReg:   4960
                ceCallCogCodePopReceiverReg:    4984
                ceCallCogCodePopReceiverAndClassRegs:   5008
                cePrimReturnEnterCogCode:       5032
                cePrimReturnEnterCogCodeProfiling:      5120
                ceNonLocalReturnTrampoline:     4600
                ceFetchContextInstVarTrampoline:        4696
                ceStoreContextInstVarTrampoline:        4744
                ceEnclosingObjectTrampoline:    nil
                ceFlushDCache:  nil
                ceFlushICache:  nil
                ceTraceLinkedSendTrampoline:    9223372036854776172
                ceTraceBlockActivationTrampoline:       9223372036854776180
                ceTraceStoreTrampoline:         9223372036854776188
                ceGetFP:        1024
                ceGetSP:        1032
                ceCaptureCStackPointers:        1040
                ceInvokeInterpret:      4840
                ordinarySendTrampolines:        a CArrayAccessor on: #(1144 1208 1280 1352)
                superSendTrampolines:   a CArrayAccessor on: #(1408 1480 1552 1624)
                directedSuperSendTrampolines:   nil
                directedSuperBindingSendTrampolines:    nil
                dynamicSuperSendTrampolines:    nil
                outerSendTrampolines:   nil
                selfSendTrampolines:    nil
                firstSend:      1144
                lastSend:       1624
                realCEEnterCogCodePopReceiverReg:       nil
                realCECallCogCodePopReceiverReg:        nil
                realCECallCogCodePopReceiverAndClassRegs:       nil
                trampolineTableIndex:   124
                trampolineAddresses:    a CArrayAccessor on: #('ceGetFP' 1024 'ceGetSP' 1032 'ceCa...etc...
                objectReferencesInRuntime:      a CArrayAccessor on: #()
                runtimeObjectRefIndex:  0
                cFramePointerInUse:     true
                ceTryLockVMOwner:       nil
                extA:   0
                extB:   0
                numExtB:        0
                tempOop:        nil
                numIRCs:        nil
                indexOfIRC:     nil
                theIRCs:        nil
                receiverTags:   nil
                implicitReceiverSendTrampolines:        nil
                cogMethodSurrogateClass:        CogMethodSurrogate64
                cogBlockMethodSurrogateClass:   CogBlockMethodSurrogate64
                nsSendCacheSurrogateClass:      NSSendCacheSurrogate64
                cPICPrototype:  a CogMethodSurrogate64 @5568/16r15C0
                cPICEndOfCodeOffset:    209
                cPICEndOfCodeLabel:     a CogInLineLiteralsX64Compiler (Label 6 @1691)
                ceMallocTrampoline:     nil
                ceFreeTrampoline:       nil
                ceFFICalloutTrampoline:         nil
                debugBytecodePointers:  a Set()
                debugOpcodeIndices:     a Set()
                disassemblingMethod:    nil
                cogConstituentIndex:    nil
                directedSendUsesBinding:        nil
                processorFrameValid:    false
                codeToDataDelta:        0
                varBaseAddress:         2097160
                codeZoneIsExecutableNotWritable:        false
                debugAPISelector:       nil
                shortCutTrampolineBlocks:       an IdentityDictionary(#ceShortCutTraceBlockActivation:...etc...
                ioHighResClock:         996
                perMethodProfile:       nil
                instructionProfile:     nil
                primitiveGeneratorTable:        a CArrayAccessor on: {a CogPrimitiveDescriptor . a CogPrimitiveDescriptor...etc...
                introspectionDataIndex:         nil
                introspectionData:      nil
                prevBCDescriptor:       nil
                numPushNilsFunction:    #v3:Num:Push:Nils:
                pushNilSizeFunction:    #v3PushNilSize:numInitialNils:
                methodOrBlockNumTemps:  nil
                regArgsHaveBeenPushed:  nil
                simStack:       a CArrayAccessor on: {a CogSimStackEntry . a CogSimStackEntry . a CogSimStackEntry...etc...
                simStackPtr:    nil
                simSpillBase:   nil
                ceCallCogCodePopReceiverArg0Regs:       5248
                ceCallCogCodePopReceiverArg1Arg0Regs:   5272
                methodAbortTrampolines:         a CArrayAccessor on: #(1680 1792 1904 2016)
                picAbortTrampolines:    a CArrayAccessor on: #(2104 2216 2336 2456)
                picMissTrampolines:     a CArrayAccessor on: #(2552 2608 2664 2720)
                ceCall0ArgsPIC:         5296
                ceCall1ArgsPIC:         5328
                ceCall2ArgsPIC:         5360
                debugStackPointers:     nil
                debugFixupBreaks:       a Set()
                realCECallCogCodePopReceiverArg0Regs:   nil
                realCECallCogCodePopReceiverArg1Arg0Regs:       nil
                deadCode:       nil
                useTwoPaths:    nil
                currentCallCleanUpSize:         nil
                simNativeStack:         a CArrayAccessor on: {a CogSimStackNativeEntry . a CogSimStackNativeEntry...etc...
                simNativeStackPtr:      nil
                simNativeSpillBase:     nil
                simNativeStackSize:     nil
                hasNativeFrame:         nil
                compilationPass:        nil

StackToRegisterMappingCogit(Cogit)>>disassembleMethod:
        Receiver: a StackToRegisterMappingCogit
        Arguments and temporary variables:
                surrogateOrAddress:     nil
        Receiver's instance variables:
                coInterpreter:  a CurrentImageCoInterpreterFacadeFor64BitSpurObjectRepresentation...etc...
                objectMemory:   a CurrentImageCoInterpreterFacadeFor64BitSpurObjectRepresentation...etc...
                objectRepresentation:   a CogObjectRepresentationFor64BitSpur
                processor:      a BochsX64Alien64
rax: 00000101 (257)     rbx: 00000000   rcx: 00000000   rdx...etc...
                processorLock:  a Mutex()
                methodZone:     a CogMethodZone
                methodZoneBase:         5784
                codeBase:       1024
                lastNInstructions:      an OrderedCollection(a DoubleWordArray(0 0 0 0 4193216 41932...etc...
                simulatedAddresses:     a Dictionary(#argumentCount->9223372036854775932 #ceActivateFailingPrimitiveMethod:...etc...
                simulatedTrampolines:   a Dictionary(9223372036854775980->MessageSend(#ceSend:super:to:numArgs:...etc...
                simulatedVariableGetters:       a Dictionary()
                simulatedVariableSetters:       a Dictionary()
                printRegisters:         false
                printInstructions:      false
                compilationTrace:       0
                clickConfirm:   false
                clickStepping:  false
                breakPC:        nil
                breakBlock:     nil
                singleStep:     true
                guardPageSize:  1024
                traceFlags:     8
                traceStores:    0
                breakMethod:    nil
                methodObj:      nil
                enumeratingCogMethod:   nil
                methodHeader:   nil
                initialPC:      0
                endPC:  nil
                methodOrBlockNumArgs:   0
                inBlock:        nil
                needsFrame:     nil
                hasYoungReferent:       false
                hasMovableLiteral:      true
                primitiveIndex:         nil
                backEnd:        a CogInLineLiteralsX64Compiler
                literalsManager:        an InLineLiteralsManager
                methodLabel:    a CogInLineLiteralsX64Compiler (Label 0 @1698)
                stackCheckLabel:        nil
                blockEntryLabel:        nil
                blockEntryNoContextSwitch:      nil
                blockNoContextSwitchOffset:     nil
                stackOverflowCall:      a CogInLineLiteralsX64Compiler (MoveCqR 0 ReceiverResultReg ...etc...
                sendMiss:       a CogInLineLiteralsX64Compiler (Call 1680/690 E8 A0 F0 FF FF @15EB)
                missOffset:     48
                entryPointMask:         7
                checkedEntryAlignment:  0
                uncheckedEntryAlignment:        7
                cmEntryOffset:  48
                entry:  a CogInLineLiteralsX64Compiler (Label 1 @16C8)
                cmNoCheckEntryOffset:   71
                noCheckEntry:   a CogInLineLiteralsX64Compiler (Label 3 @1607)
                fullBlockEntry:         nil
                cbEntryOffset:  nil
                fullBlockNoContextSwitchEntry:  nil
                cbNoSwitchEntryOffset:  nil
                picMNUAbort:    a CogInLineLiteralsX64Compiler (MoveCqR 0 ClassReg 48 31 C9 @16C0)...etc...
                picInterpretAbort:      a CogInLineLiteralsX64Compiler (Call 2336/920 E8 58 F2 FF FF...etc...
                endCPICCase0:   a CogInLineLiteralsX64Compiler (Label 3 @1617)
                endCPICCase1:   a CogInLineLiteralsX64Compiler (Label 4 @162D)
                firstCPICCaseOffset:    87
                cPICCaseSize:   22
                cPICEndSize:    12
                closedPICSize:  216
                openPICSize:    360
                fixups:         a CArrayAccessor on: {a CogSSBytecodeFixup ( 0 ix 2) . a CogSSBytecodeFixup...etc...
                abstractOpcodes:        a CArrayAccessor on: {a CogInLineLiteralsX64Compiler (MoveCqR ...etc...
                generatorTable:         a CArrayAccessor on: {a CogBytecodeDescriptor (genPushReceiverVariableBytecode...etc...
                byte0:  nil
                byte1:  nil
                byte2:  nil
                byte3:  nil
                bytecodePC:     nil
                bytecodeSetOffset:      nil
                opcodeIndex:    64
                numAbstractOpcodes:     100
                blockStarts:    nil
                blockCount:     nil
                labelCounter:   5
                cStackAlignment:        32
                expectedSPAlignment:    0
                expectedFPAlignment:    16
                codeModified:   nil
                maxLitIndex:    nil
                ceMethodAbortTrampoline:        nil
                cePICAbortTrampoline:   nil
                ceCheckForInterruptTrampoline:  4648
                ceCPICMissTrampoline:   nil
                ceReturnToInterpreterTrampoline:        4872
                ceBaseFrameReturnTrampoline:    4920
                ceReapAndResetErrorCodeTrampoline:      2768
                ceSendMustBeBooleanAddTrueTrampoline:   4544
                ceSendMustBeBooleanAddFalseTrampoline:  4488
                ceCannotResumeTrampoline:       4800
                ceEnterCogCodePopReceiverReg:   4960
                ceCallCogCodePopReceiverReg:    4984
                ceCallCogCodePopReceiverAndClassRegs:   5008
                cePrimReturnEnterCogCode:       5032
                cePrimReturnEnterCogCodeProfiling:      5120
                ceNonLocalReturnTrampoline:     4600
                ceFetchContextInstVarTrampoline:        4696
                ceStoreContextInstVarTrampoline:        4744
                ceEnclosingObjectTrampoline:    nil
                ceFlushDCache:  nil
                ceFlushICache:  nil
                ceTraceLinkedSendTrampoline:    9223372036854776172
                ceTraceBlockActivationTrampoline:       9223372036854776180
                ceTraceStoreTrampoline:         9223372036854776188
                ceGetFP:        1024
                ceGetSP:        1032
                ceCaptureCStackPointers:        1040
                ceInvokeInterpret:      4840
                ordinarySendTrampolines:        a CArrayAccessor on: #(1144 1208 1280 1352)
                superSendTrampolines:   a CArrayAccessor on: #(1408 1480 1552 1624)
                directedSuperSendTrampolines:   nil
                directedSuperBindingSendTrampolines:    nil
                dynamicSuperSendTrampolines:    nil
                outerSendTrampolines:   nil
                selfSendTrampolines:    nil
                firstSend:      1144
                lastSend:       1624
                realCEEnterCogCodePopReceiverReg:       nil
                realCECallCogCodePopReceiverReg:        nil
                realCECallCogCodePopReceiverAndClassRegs:       nil
                trampolineTableIndex:   124
                trampolineAddresses:    a CArrayAccessor on: #('ceGetFP' 1024 'ceGetSP' 1032 'ceCa...etc...
                objectReferencesInRuntime:      a CArrayAccessor on: #()
                runtimeObjectRefIndex:  0
                cFramePointerInUse:     true
                ceTryLockVMOwner:       nil
                extA:   0
                extB:   0
                numExtB:        0
                tempOop:        nil
                numIRCs:        nil
                indexOfIRC:     nil
                theIRCs:        nil
                receiverTags:   nil
                implicitReceiverSendTrampolines:        nil
                cogMethodSurrogateClass:        CogMethodSurrogate64
                cogBlockMethodSurrogateClass:   CogBlockMethodSurrogate64
                nsSendCacheSurrogateClass:      NSSendCacheSurrogate64
                cPICPrototype:  a CogMethodSurrogate64 @5568/16r15C0
                cPICEndOfCodeOffset:    209
                cPICEndOfCodeLabel:     a CogInLineLiteralsX64Compiler (Label 6 @1691)
                ceMallocTrampoline:     nil
                ceFreeTrampoline:       nil
                ceFFICalloutTrampoline:         nil
                debugBytecodePointers:  a Set()
                debugOpcodeIndices:     a Set()
                disassemblingMethod:    nil
                cogConstituentIndex:    nil
                directedSendUsesBinding:        nil
                processorFrameValid:    false
                codeToDataDelta:        0
                varBaseAddress:         2097160
                codeZoneIsExecutableNotWritable:        false
                debugAPISelector:       nil
                shortCutTrampolineBlocks:       an IdentityDictionary(#ceShortCutTraceBlockActivation:...etc...
                ioHighResClock:         996
                perMethodProfile:       nil
                instructionProfile:     nil
                primitiveGeneratorTable:        a CArrayAccessor on: {a CogPrimitiveDescriptor . a CogPrimitiveDescriptor...etc...
                introspectionDataIndex:         nil
                introspectionData:      nil
                prevBCDescriptor:       nil
                numPushNilsFunction:    #v3:Num:Push:Nils:
                pushNilSizeFunction:    #v3PushNilSize:numInitialNils:
                methodOrBlockNumTemps:  nil
                regArgsHaveBeenPushed:  nil
                simStack:       a CArrayAccessor on: {a CogSimStackEntry . a CogSimStackEntry . a CogSimStackEntry...etc...
                simStackPtr:    nil
                simSpillBase:   nil
                ceCallCogCodePopReceiverArg0Regs:       5248
                ceCallCogCodePopReceiverArg1Arg0Regs:   5272
                methodAbortTrampolines:         a CArrayAccessor on: #(1680 1792 1904 2016)
                picAbortTrampolines:    a CArrayAccessor on: #(2104 2216 2336 2456)
                picMissTrampolines:     a CArrayAccessor on: #(2552 2608 2664 2720)
                ceCall0ArgsPIC:         5296
                ceCall1ArgsPIC:         5328
                ceCall2ArgsPIC:         5360
                debugStackPointers:     nil
                debugFixupBreaks:       a Set()
                realCECallCogCodePopReceiverArg0Regs:   nil
                realCECallCogCodePopReceiverArg1Arg0Regs:       nil
                deadCode:       nil
                useTwoPaths:    nil
                currentCallCleanUpSize:         nil
                simNativeStack:         a CArrayAccessor on: {a CogSimStackNativeEntry . a CogSimStackNativeEntry...etc...
                simNativeStackPtr:      nil
                simNativeSpillBase:     nil
                simNativeStackSize:     nil
                hasNativeFrame:         nil
                compilationPass:        nil

StackToRegisterMappingCogit class(Cogit class)>>genAndDis:options:
        Receiver: StackToRegisterMappingCogit
        Arguments and temporary variables:
                methodOrDoitString:     (SequenceableCollection>>#indexOf:startingAt:ifAbsent: "a CompiledMethod...etc...
                optionsDictionaryOrArray:       #(#ObjectMemory #Spur64BitCoMemoryManager #ISA #X64)
                tuple:  {a CurrentImageCoInterpreterFacadeFor64BitSpurObjectRepresentation . a StackToRegisterMappingCogit...etc...
        Receiver's instance variables:
                superclass:     SimpleStackBasedCogit
                methodDict:     a MethodDictionary(size 607)
                format:         65731
                instanceVariables:      #('prevBCDescriptor' 'numPushNilsFunction' 'pushNilSizeFunct...etc...
                organization:   ('accessing' simSelf)
('bytecode generator stores' genGenericStorePop:MaybeContextSlotIndex:needsStoreCheck:needsRestoreRcvr:needsImmutabilityCheck:...etc...
                subclasses:     {RegisterAllocatingCogit . SistaCogit . StackToRegisterMappingCogitChecker...etc...
                name:   #StackToRegisterMappingCogit
                classPool:      a Dictionary(#NeedsMergeFixupFlag->nil #NeedsNonMergeFixupFlag->nil ...etc...
                sharedPools:    an OrderedCollection(CogCompilationConstants VMMethodCacheConstants...etc...
                environment:    Smalltalk
                category:       #'VMMaker-JIT'
                timeStamp:      3873358619
                generatorTable:         a CArrayAccessor on: {a CogBytecodeDescriptor (genPushReceiverVariableBytecode...etc...
                primitiveTable:         a CArrayAccessor on: {a CogPrimitiveDescriptor . a CogPrimitiveDescriptor...etc...
                numPushNilsFunction:    #v3:Num:Push:Nils:
                pushNilSizeFunction:    #v3PushNilSize:numInitialNils:

UndefinedObject>>DoIt
        Receiver: nil
        Arguments and temporary variables:

        Receiver's instance variables:
nil

Compiler>>evaluateCue:ifFail:
        Receiver: a Compiler
        Arguments and temporary variables:
                aCue:   a CompilationCue
                failBlock:      [closure] in Compiler>>evaluateCue:ifFail:logged:
                methodNode:     DoIt
        ^ StackToRegisterMappingCogit genAndDis: SequenceableCollecti...etc...
                method:         (UndefinedObject>>#DoIt "a CompiledMethod(4121528)")
                value:  nil
        Receiver's instance variables:
                parser:         a Parser
                cue:    a CompilationCue

Compiler>>evaluateCue:ifFail:logged:
        Receiver: a Compiler
        Arguments and temporary variables:
                aCue:   a CompilationCue
                failBlock:      [closure] in [] in SmalltalkEditor(TextEditor)>>evaluateSelectionAndDo:...etc...
                logFlag:        true
                value:  nil
        Receiver's instance variables:
                parser:         a Parser
                cue:    a CompilationCue

Compiler>>evaluate:in:to:environment:notifying:ifFail:logged:
        Receiver: a Compiler
        Arguments and temporary variables:
                textOrStream:   a ReadStream
                aContext:       nil
                receiver:       nil
                anEnvironment:  Smalltalk
                aRequestor:     a SmalltalkEditor
                failBlock:      [closure] in [] in SmalltalkEditor(TextEditor)>>evaluateSelectionAndDo:...etc...
                logFlag:        true
        Receiver's instance variables:
                parser:         a Parser
                cue:    a CompilationCue

[] in SmalltalkEditor(TextEditor)>>evaluateSelectionAndDo:
        Receiver: a SmalltalkEditor
        Arguments and temporary variables:
                aBlock:         [closure] in SmalltalkEditor(TextEditor)>>evaluateSelection
                result:         nil
                rcvr:   nil
                ctxt:   nil
        Receiver's instance variables:
                morph:  a TextMorphForEditView(216877)
                model:  a Workspace
                paragraph:      a NewParagraph
                markBlock:      a CharacterBlock with index 613 and character Character return and r...etc...
                pointBlock:     a CharacterBlock with index 767 and rectangle 422@290 corner: 422@3...etc...
                beginTypeInIndex:       nil
                emphasisHere:   {a TextColor code: Color black}
                lastParenLocation:      nil
                otherInterval:  (613 to: 766)
                oldInterval:    (627 to: 626)
                typeAhead:      a WriteStream
                history:        a TextEditorCommandHistory

FullBlockClosure(BlockClosure)>>on:do:
        Receiver: [closure] in SmalltalkEditor(TextEditor)>>evaluateSelectionAndDo:
        Arguments and temporary variables:
                exceptionOrExceptionSet:        OutOfScopeNotification
                handlerAction:  [closure] in SmalltalkEditor(TextEditor)>>evaluateSelectionAndDo:...etc...
                handlerActive:  true
                handlerRearmed:         false
        Receiver's instance variables:
                outerContext:   SmalltalkEditor(TextEditor)>>evaluateSelectionAndDo:
                startpcOrMethod:        ([] in TextEditor>>#evaluateSelectionAndDo: "a CompiledBlock(3...etc...
                numArgs:        0
                receiver:       a SmalltalkEditor

SmalltalkEditor(TextEditor)>>evaluateSelectionAndDo:
        Receiver: a SmalltalkEditor
        Arguments and temporary variables:
                aBlock:         [closure] in SmalltalkEditor(TextEditor)>>evaluateSelection
                result:         nil
                rcvr:   nil
                ctxt:   nil
        Receiver's instance variables:
                morph:  a TextMorphForEditView(216877)
                model:  a Workspace
                paragraph:      a NewParagraph
                markBlock:      a CharacterBlock with index 613 and character Character return and r...etc...
                pointBlock:     a CharacterBlock with index 767 and rectangle 422@290 corner: 422@3...etc...
                beginTypeInIndex:       nil
                emphasisHere:   {a TextColor code: Color black}
                lastParenLocation:      nil
                otherInterval:  (613 to: 766)
                oldInterval:    (627 to: 626)
                typeAhead:      a WriteStream
                history:        a TextEditorCommandHistory

SmalltalkEditor(TextEditor)>>evaluateSelection
        Receiver: a SmalltalkEditor
        Arguments and temporary variables:

        Receiver's instance variables:
                morph:  a TextMorphForEditView(216877)
                model:  a Workspace
                paragraph:      a NewParagraph
                markBlock:      a CharacterBlock with index 613 and character Character return and r...etc...
                pointBlock:     a CharacterBlock with index 767 and rectangle 422@290 corner: 422@3...etc...
                beginTypeInIndex:       nil
                emphasisHere:   {a TextColor code: Color black}
                lastParenLocation:      nil
                otherInterval:  (613 to: 766)
                oldInterval:    (627 to: 626)
                typeAhead:      a WriteStream
                history:        a TextEditorCommandHistory

SmalltalkEditor(TextEditor)>>doIt
        Receiver: a SmalltalkEditor
        Arguments and temporary variables:

        Receiver's instance variables:
                morph:  a TextMorphForEditView(216877)
                model:  a Workspace
                paragraph:      a NewParagraph
                markBlock:      a CharacterBlock with index 613 and character Character return and r...etc...
                pointBlock:     a CharacterBlock with index 767 and rectangle 422@290 corner: 422@3...etc...
                beginTypeInIndex:       nil
                emphasisHere:   {a TextColor code: Color black}
                lastParenLocation:      nil
                otherInterval:  (613 to: 766)
                oldInterval:    (627 to: 626)
                typeAhead:      a WriteStream
                history:        a TextEditorCommandHistory

SmalltalkEditor(TextEditor)>>doIt:
        Receiver: a SmalltalkEditor
        Arguments and temporary variables:
                aKeyboardEvent:         [104@339 keystroke '<Ctrl-Cmd-d>' (100) 3090]
        Receiver's instance variables:
                morph:  a TextMorphForEditView(216877)
                model:  a Workspace
                paragraph:      a NewParagraph
                markBlock:      a CharacterBlock with index 613 and character Character return and r...etc...
                pointBlock:     a CharacterBlock with index 767 and rectangle 422@290 corner: 422@3...etc...
                beginTypeInIndex:       nil
                emphasisHere:   {a TextColor code: Color black}
                lastParenLocation:      nil
                otherInterval:  (613 to: 766)
                oldInterval:    (627 to: 626)
                typeAhead:      a WriteStream
                history:        a TextEditorCommandHistory

SmalltalkEditor(TextEditor)>>dispatchOnKeyboardEvent:
        Receiver: a SmalltalkEditor
        Arguments and temporary variables:
                aKeyboardEvent:         [104@339 keystroke '<Ctrl-Cmd-d>' (100) 3090]
                honorCommandKeys:       true
                typedChar:      $d
        Receiver's instance variables:
                morph:  a TextMorphForEditView(216877)
                model:  a Workspace
                paragraph:      a NewParagraph
                markBlock:      a CharacterBlock with index 613 and character Character return and r...etc...
                pointBlock:     a CharacterBlock with index 767 and rectangle 422@290 corner: 422@3...etc...
                beginTypeInIndex:       nil
                emphasisHere:   {a TextColor code: Color black}
                lastParenLocation:      nil
                otherInterval:  (613 to: 766)
                oldInterval:    (627 to: 626)
                typeAhead:      a WriteStream
                history:        a TextEditorCommandHistory

SmalltalkEditor(TextEditor)>>keyStroke:
        Receiver: a SmalltalkEditor
        Arguments and temporary variables:
                anEvent:        [104@339 keystroke '<Ctrl-Cmd-d>' (100) 3090]
        Receiver's instance variables:
                morph:  a TextMorphForEditView(216877)
                model:  a Workspace
                paragraph:      a NewParagraph
                markBlock:      a CharacterBlock with index 613 and character Character return and r...etc...
                pointBlock:     a CharacterBlock with index 767 and rectangle 422@290 corner: 422@3...etc...
                beginTypeInIndex:       nil
                emphasisHere:   {a TextColor code: Color black}
                lastParenLocation:      nil
                otherInterval:  (613 to: 766)
                oldInterval:    (627 to: 626)
                typeAhead:      a WriteStream
                history:        a TextEditorCommandHistory

[] in [] in TextMorphForEditView(TextMorph)>>keyStroke:
        Receiver: a TextMorphForEditView(216877)
        Arguments and temporary variables:
                evt:    [104@339 keystroke '<Ctrl-Cmd-d>' (100) 3090]
                action:         nil
        Receiver's instance variables:
                bounds:         0@0 corner: 753@308
                owner:  a TransformMorph(217319)
                submorphs:      #()
                fullBounds:     0@0 corner: 753@308
                color:  Color black
                extension:      a MorphExtension (1612197) [other:  (unfocusedSelectionColor -> (Col...etc...
                borderWidth:    0
                borderColor:    Color black
                textStyle:      a TextStyle(6) Bitmap DejaVu Sans 10.5pt 96ppi 14px Normal
                text:   a Text for '"See what code the JIT generates for as method in the current...etc...
                wrapFlag:       true
                paragraph:      a NewParagraph
                editor:         a SmalltalkEditor
                container:      nil
                predecessor:    nil
                successor:      nil
                backgroundColor:        nil
                margins:        3@2 corner: 3@2
                readOnly:       false
                autoFit:        true
                plainTextOnly:  false
                numCharactersPerLine:   nil
                editView:       a PluggableTextMorphPlus(1615011)
                acceptOnCR:     false

TextMorphForEditView(TextMorph)>>handleInteraction:fromEvent:
        Receiver: a TextMorphForEditView(216877)
        Arguments and temporary variables:
                interactionBlock:       [closure] in [] in TextMorphForEditView(TextMorph)>>keyStroke:...etc...
                evt:    [104@339 keystroke '<Ctrl-Cmd-d>' (100) 3090]
                oldEditor:      a SmalltalkEditor
                oldParagraph:   a NewParagraph
                oldText:        a Text for '"See what code the JIT generates for as method in the curr...etc...
                oldSelection:   an OrderedCollection(3@242 corner: 750@290 3@290 corner: 422@306)...etc...
        Receiver's instance variables:
                bounds:         0@0 corner: 753@308
                owner:  a TransformMorph(217319)
                submorphs:      #()
                fullBounds:     0@0 corner: 753@308
                color:  Color black
                extension:      a MorphExtension (1612197) [other:  (unfocusedSelectionColor -> (Col...etc...
                borderWidth:    0
                borderColor:    Color black
                textStyle:      a TextStyle(6) Bitmap DejaVu Sans 10.5pt 96ppi 14px Normal
                text:   a Text for '"See what code the JIT generates for as method in the current...etc...
                wrapFlag:       true
                paragraph:      a NewParagraph
                editor:         a SmalltalkEditor
                container:      nil
                predecessor:    nil
                successor:      nil
                backgroundColor:        nil
                margins:        3@2 corner: 3@2
                readOnly:       false
                autoFit:        true
                plainTextOnly:  false
                numCharactersPerLine:   nil
                editView:       a PluggableTextMorphPlus(1615011)
                acceptOnCR:     false

TextMorphForEditView>>handleInteraction:fromEvent:
        Receiver: a TextMorphForEditView(216877)
        Arguments and temporary variables:
                interActionBlock:       [closure] in [] in TextMorphForEditView(TextMorph)>>keyStroke:...etc...
                evt:    [104@339 keystroke '<Ctrl-Cmd-d>' (100) 3090]
        Receiver's instance variables:
                bounds:         0@0 corner: 753@308
                owner:  a TransformMorph(217319)
                submorphs:      #()
                fullBounds:     0@0 corner: 753@308
                color:  Color black
                extension:      a MorphExtension (1612197) [other:  (unfocusedSelectionColor -> (Col...etc...
                borderWidth:    0
                borderColor:    Color black
                textStyle:      a TextStyle(6) Bitmap DejaVu Sans 10.5pt 96ppi 14px Normal
                text:   a Text for '"See what code the JIT generates for as method in the current...etc...
                wrapFlag:       true
                paragraph:      a NewParagraph
                editor:         a SmalltalkEditor
                container:      nil
                predecessor:    nil
                successor:      nil
                backgroundColor:        nil
                margins:        3@2 corner: 3@2
                readOnly:       false
                autoFit:        true
                plainTextOnly:  false
                numCharactersPerLine:   nil
                editView:       a PluggableTextMorphPlus(1615011)
                acceptOnCR:     false


--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #isCMBlock
StackToRegisterMappingCogit(Cogit)>>disassembleMethod:on:
StackToRegisterMappingCogit(Cogit)>>disassembleMethod:
StackToRegisterMappingCogit class(Cogit class)>>genAndDis:options:
UndefinedObject>>DoIt
Compiler>>evaluateCue:ifFail:
Compiler>>evaluateCue:ifFail:logged:
Compiler>>evaluate:in:to:environment:notifying:ifFail:logged:
[] in SmalltalkEditor(TextEditor)>>evaluateSelectionAndDo:
FullBlockClosure(BlockClosure)>>on:do:
SmalltalkEditor(TextEditor)>>evaluateSelectionAndDo:
SmalltalkEditor(TextEditor)>>evaluateSelection
SmalltalkEditor(TextEditor)>>doIt
SmalltalkEditor(TextEditor)>>doIt:
SmalltalkEditor(TextEditor)>>dispatchOnKeyboardEvent:
SmalltalkEditor(TextEditor)>>keyStroke:
[] in [] in TextMorphForEditView(TextMorph)>>keyStroke:
TextMorphForEditView(TextMorph)>>handleInteraction:fromEvent:
TextMorphForEditView>>handleInteraction:fromEvent:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[] in TextMorphForEditView(TextMorph)>>keyStroke:
StandardToolSet class>>codeCompletionAround:textMorph:keyStroke:
ToolSet class>>codeCompletionAround:textMorph:keyStroke:
TextMorphForEditView(TextMorph)>>keyStroke:
TextMorphForEditView>>keyStroke:
TextMorphForEditView(Morph)>>handleKeystroke:
TextMorphForEditView(TextMorph)>>handleKeystroke:
KeyboardEvent>>sentTo:
TextMorphForEditView(Morph)>>handleEvent:
TextMorphForEditView(Morph)>>handleFocusEvent:
MorphicEventDispatcher>>doHandlingForFocusEvent:with:
MorphicEventDispatcher>>dispatchFocusEvent:with:
TextMorphForEditView(Morph)>>processFocusEvent:using:
TextMorphForEditView(Morph)>>processFocusEvent:
[] in [] in [] in HandMorph>>sendFocusEvent:to:clear:
[] in ActiveEventVariable class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveEventVariable class(DynamicVariable class)>>value:during:
[] in ActiveEventVariable class>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveEventVariable class>>value:during:
KeyboardEvent(MorphicEvent)>>becomeActiveDuring:
[] in [] in HandMorph>>sendFocusEvent:to:clear:
[] in ActiveHandVariable class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveHandVariable class(DynamicVariable class)>>value:during:
[] in ActiveHandVariable class>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveHandVariable class>>value:during:
HandMorph>>becomeActiveDuring:
[] in HandMorph>>sendFocusEvent:to:clear:
[] in ActiveWorldVariable class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveWorldVariable class(DynamicVariable class)>>value:during:
[] in ActiveWorldVariable class>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveWorldVariable class>>value:during:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendKeyboardEvent:
HandMorph>>handleEvent:
-- and more not shown --

















--
_,,,^..^,,,_
best, Eliot