Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.433.mcz ==================== Summary ==================== Name: Cog-eem.433 Author: eem Time: 7 January 2021, 10:59:26.348948 pm UUID: 8f14ae4e-2c3f-4b02-9aea-bfb0346c0854 Ancestors: Cog-eem.432 Time to bring the ARMv8 work back into Cog/VMMaker under full MIT. =============== Diff against Cog-eem.432 =============== Item was added: + CogProcessorAlien variableByteSubclass: #GdbARMv8Alien + instanceVariableNames: '' + classVariableNames: 'ID_AA64DFR0_EL1 ID_AA64DFR1_EL1 ID_AA64ISAR0_EL1 ID_AA64ISAR1_EL1 ID_AA64MMFR0_EL1 ID_AA64MMFR1_EL1 ID_AA64PFR0_EL1 ID_AA64PFR1_EL1 Level0FailureTable' + poolDictionaries: 'ARMv8A64Opcodes' + category: 'Cog-Processors'! + + !GdbARMv8Alien commentStamp: 'eem 11/19/2019 15:39' prior: 0! + I am a wrapper around the struct sim aarch64 CPU instance and emulator routines and I give access to disassembling using libopcodes.! Item was added: + ----- Method: GdbARMv8Alien class>>dataSize (in category 'instance creation') ----- + dataSize + ^2280! Item was added: + ----- Method: GdbARMv8Alien class>>implementationClass (in category 'instance creation') ----- + implementationClass + ^Smalltalk wordSize = 8 ifTrue: [GdbARMv8Alien64] ifFalse: [self]! Item was added: + ----- Method: GdbARMv8Alien class>>initialize (in category 'class initialization') ----- + initialize + "Initialize the execution failure dispatch table. This is organized around op0 in C4.1 of the Arm ARM. + Each tuple is a type and a failure routine, or nil of not needed to be handled as an execution failure." + "self initialize" + Level0FailureTable := #( + "0" nil nil nil nil + "4" (LDST handleFailingLoadStore:at:in:) + "5" nil + "6" (LDST handleFailingLoadStore:at:in:) + "7" nil nil nil + "a" (BR handleFailingBranch:at:in:) + "b" (BR handleFailingBranch:at:in:) + "c" (LDST handleFailingLoadStore:at:in:) + "d" nil + "e" (LDST handleFailingLoadStore:at:in:) + nil). + + "At least Raspberry Pi 4 running Manjaro allows access to EL1 level system registers... + These values are derived from the program in + https://android.googlesource.com/kernel/common/+/refs/tags/ASB-2019-03-05_4.14-p-release/Documentation/arm64/cpu-feature-registers.txt + run on a raspberry Pi 4 Model B" + + ID_AA64ISAR0_EL1 := 16r00010000. + ID_AA64ISAR1_EL1 := 16r00000000. + ID_AA64MMFR0_EL1 := 16rFF000000. + ID_AA64MMFR1_EL1 := 16r00000000. + ID_AA64PFR0_EL1 := 16r00000011. + ID_AA64PFR1_EL1 := 16r00000000. + ID_AA64DFR0_EL1 := 16r00000006. + ID_AA64DFR1_EL1 := 16r00000000 + ! Item was added: + ----- Method: GdbARMv8Alien class>>primitiveNewCPU (in category 'primitives') ----- + primitiveNewCPU + "Answer the address of a new struct sim_spu instance (see processors/ARM/gdb-8.3.1/sim/aarch64/sim_main.h)." + <primitive: 'primitiveNewCPU' module: 'GdbARMv8Plugin'> + ^self primitiveFailed! Item was added: + ----- Method: GdbARMv8Alien>>abiMarshalArg0:arg1:in: (in category 'accessing-abstract') ----- + abiMarshalArg0: arg0 arg1: arg1 in: memory + "Marshal two integral arguments according to the ABI." + self r0: arg0. + self r1: arg1! Item was added: + ----- Method: GdbARMv8Alien>>abiMarshalArg0:in: (in category 'accessing-abstract') ----- + abiMarshalArg0: arg0 in: memory + "Marshal one integral argument according to the ABI. + Currently used in the COGMTVM to tryLockVMOwner:" + self r0: arg0! Item was added: + ----- Method: GdbARMv8Alien>>abstractInstructionCompilerClass (in category 'Cog API') ----- + abstractInstructionCompilerClass + ^CogARMv8Compiler! Item was added: + ----- Method: GdbARMv8Alien>>b0 (in category 'accessing') ----- + b0 + ^self unsignedByteAt: 1! Item was added: + ----- Method: GdbARMv8Alien>>b0: (in category 'accessing') ----- + b0: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 1 put: 0. + ^self unsignedByteAt: 1 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b1 (in category 'accessing') ----- + b1 + ^self unsignedByteAt: 9! Item was added: + ----- Method: GdbARMv8Alien>>b10 (in category 'accessing') ----- + b10 + ^self unsignedByteAt: 81! Item was added: + ----- Method: GdbARMv8Alien>>b10: (in category 'accessing') ----- + b10: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 81 put: 0. + ^self unsignedByteAt: 81 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b11 (in category 'accessing') ----- + b11 + ^self unsignedByteAt: 89! Item was added: + ----- Method: GdbARMv8Alien>>b11: (in category 'accessing') ----- + b11: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 89 put: 0. + ^self unsignedByteAt: 89 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b12 (in category 'accessing') ----- + b12 + ^self unsignedByteAt: 97! Item was added: + ----- Method: GdbARMv8Alien>>b12: (in category 'accessing') ----- + b12: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 97 put: 0. + ^self unsignedByteAt: 97 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b13 (in category 'accessing') ----- + b13 + ^self unsignedByteAt: 105! Item was added: + ----- Method: GdbARMv8Alien>>b13: (in category 'accessing') ----- + b13: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 105 put: 0. + ^self unsignedByteAt: 105 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b14 (in category 'accessing') ----- + b14 + ^self unsignedByteAt: 113! Item was added: + ----- Method: GdbARMv8Alien>>b14: (in category 'accessing') ----- + b14: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 113 put: 0. + ^self unsignedByteAt: 113 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b15 (in category 'accessing') ----- + b15 + ^self unsignedByteAt: 121! Item was added: + ----- Method: GdbARMv8Alien>>b15: (in category 'accessing') ----- + b15: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 121 put: 0. + ^self unsignedByteAt: 121 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b16 (in category 'accessing') ----- + b16 + ^self unsignedByteAt: 129! Item was added: + ----- Method: GdbARMv8Alien>>b16: (in category 'accessing') ----- + b16: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 129 put: 0. + ^self unsignedByteAt: 129 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b17 (in category 'accessing') ----- + b17 + ^self unsignedByteAt: 137! Item was added: + ----- Method: GdbARMv8Alien>>b17: (in category 'accessing') ----- + b17: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 137 put: 0. + ^self unsignedByteAt: 137 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b18 (in category 'accessing') ----- + b18 + ^self unsignedByteAt: 145! Item was added: + ----- Method: GdbARMv8Alien>>b18: (in category 'accessing') ----- + b18: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 145 put: 0. + ^self unsignedByteAt: 145 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b19 (in category 'accessing') ----- + b19 + ^self unsignedByteAt: 153! Item was added: + ----- Method: GdbARMv8Alien>>b19: (in category 'accessing') ----- + b19: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 153 put: 0. + ^self unsignedByteAt: 153 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b1: (in category 'accessing') ----- + b1: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 9 put: 0. + ^self unsignedByteAt: 9 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b2 (in category 'accessing') ----- + b2 + ^self unsignedByteAt: 17! Item was added: + ----- Method: GdbARMv8Alien>>b20 (in category 'accessing') ----- + b20 + ^self unsignedByteAt: 161! Item was added: + ----- Method: GdbARMv8Alien>>b20: (in category 'accessing') ----- + b20: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 161 put: 0. + ^self unsignedByteAt: 161 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b21 (in category 'accessing') ----- + b21 + ^self unsignedByteAt: 169! Item was added: + ----- Method: GdbARMv8Alien>>b21: (in category 'accessing') ----- + b21: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 169 put: 0. + ^self unsignedByteAt: 169 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b22 (in category 'accessing') ----- + b22 + ^self unsignedByteAt: 177! Item was added: + ----- Method: GdbARMv8Alien>>b22: (in category 'accessing') ----- + b22: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 177 put: 0. + ^self unsignedByteAt: 177 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b23 (in category 'accessing') ----- + b23 + ^self unsignedByteAt: 185! Item was added: + ----- Method: GdbARMv8Alien>>b23: (in category 'accessing') ----- + b23: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 185 put: 0. + ^self unsignedByteAt: 185 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b24 (in category 'accessing') ----- + b24 + ^self unsignedByteAt: 193! Item was added: + ----- Method: GdbARMv8Alien>>b24: (in category 'accessing') ----- + b24: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 193 put: 0. + ^self unsignedByteAt: 193 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b25 (in category 'accessing') ----- + b25 + ^self unsignedByteAt: 201! Item was added: + ----- Method: GdbARMv8Alien>>b25: (in category 'accessing') ----- + b25: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 201 put: 0. + ^self unsignedByteAt: 201 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b26 (in category 'accessing') ----- + b26 + ^self unsignedByteAt: 209! Item was added: + ----- Method: GdbARMv8Alien>>b26: (in category 'accessing') ----- + b26: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 209 put: 0. + ^self unsignedByteAt: 209 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b27 (in category 'accessing') ----- + b27 + ^self unsignedByteAt: 217! Item was added: + ----- Method: GdbARMv8Alien>>b27: (in category 'accessing') ----- + b27: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 217 put: 0. + ^self unsignedByteAt: 217 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b28 (in category 'accessing') ----- + b28 + ^self unsignedByteAt: 225! Item was added: + ----- Method: GdbARMv8Alien>>b28: (in category 'accessing') ----- + b28: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 225 put: 0. + ^self unsignedByteAt: 225 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b2: (in category 'accessing') ----- + b2: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 17 put: 0. + ^self unsignedByteAt: 17 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b3 (in category 'accessing') ----- + b3 + ^self unsignedByteAt: 25! Item was added: + ----- Method: GdbARMv8Alien>>b3: (in category 'accessing') ----- + b3: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 25 put: 0. + ^self unsignedByteAt: 25 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b4 (in category 'accessing') ----- + b4 + ^self unsignedByteAt: 33! Item was added: + ----- Method: GdbARMv8Alien>>b4: (in category 'accessing') ----- + b4: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 33 put: 0. + ^self unsignedByteAt: 33 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b5 (in category 'accessing') ----- + b5 + ^self unsignedByteAt: 41! Item was added: + ----- Method: GdbARMv8Alien>>b5: (in category 'accessing') ----- + b5: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 41 put: 0. + ^self unsignedByteAt: 41 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b6 (in category 'accessing') ----- + b6 + ^self unsignedByteAt: 49! Item was added: + ----- Method: GdbARMv8Alien>>b6: (in category 'accessing') ----- + b6: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 49 put: 0. + ^self unsignedByteAt: 49 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b7 (in category 'accessing') ----- + b7 + ^self unsignedByteAt: 57! Item was added: + ----- Method: GdbARMv8Alien>>b7: (in category 'accessing') ----- + b7: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 57 put: 0. + ^self unsignedByteAt: 57 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b8 (in category 'accessing') ----- + b8 + ^self unsignedByteAt: 65! Item was added: + ----- Method: GdbARMv8Alien>>b8: (in category 'accessing') ----- + b8: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 65 put: 0. + ^self unsignedByteAt: 65 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>b9 (in category 'accessing') ----- + b9 + ^self unsignedByteAt: 73! Item was added: + ----- Method: GdbARMv8Alien>>b9: (in category 'accessing') ----- + b9: anUnsignedByte + "zero extend..." + self unsignedLongLongAt: 73 put: 0. + ^self unsignedByteAt: 73 put: anUnsignedByte! Item was added: + ----- Method: GdbARMv8Alien>>cResultRegister (in category 'accessing-abstract') ----- + cResultRegister + ^self r0! Item was added: + ----- Method: GdbARMv8Alien>>cResultRegister: (in category 'accessing-abstract') ----- + cResultRegister: aValue + self r0: aValue! Item was added: + ----- Method: GdbARMv8Alien>>clrexOpcode (in category 'opcodes') ----- + clrexOpcode + ^2r11010101000000110011111101011111! Item was added: + ----- Method: GdbARMv8Alien>>controlRegisterGetters (in category 'accessing-abstract') ----- + controlRegisterGetters + ^#(pc rawCPSR fpCPSR fpCPCR nextpc)! Item was added: + ----- Method: GdbARMv8Alien>>convertIntegerToInternal: (in category 'tests support') ----- + convertIntegerToInternal: anInteger + "Conversion for 64-bit processors." + ^anInteger signedIntToLong64! Item was added: + ----- Method: GdbARMv8Alien>>d0 (in category 'accessing') ----- + d0 + ^self unsignedLongLongAt: 265! Item was added: + ----- Method: GdbARMv8Alien>>d0: (in category 'accessing') ----- + d0: anUnsignedInteger + ^self unsignedLongLongAt: 265 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d1 (in category 'accessing') ----- + d1 + ^self unsignedLongLongAt: 281! Item was added: + ----- Method: GdbARMv8Alien>>d10 (in category 'accessing') ----- + d10 + ^self unsignedLongLongAt: 425! Item was added: + ----- Method: GdbARMv8Alien>>d10: (in category 'accessing') ----- + d10: anUnsignedInteger + ^self unsignedLongLongAt: 425 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d11 (in category 'accessing') ----- + d11 + ^self unsignedLongLongAt: 441! Item was added: + ----- Method: GdbARMv8Alien>>d11: (in category 'accessing') ----- + d11: anUnsignedInteger + ^self unsignedLongLongAt: 441 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d12 (in category 'accessing') ----- + d12 + ^self unsignedLongLongAt: 457! Item was added: + ----- Method: GdbARMv8Alien>>d12: (in category 'accessing') ----- + d12: anUnsignedInteger + ^self unsignedLongLongAt: 457 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d13 (in category 'accessing') ----- + d13 + ^self unsignedLongLongAt: 473! Item was added: + ----- Method: GdbARMv8Alien>>d13: (in category 'accessing') ----- + d13: anUnsignedInteger + ^self unsignedLongLongAt: 473 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d14 (in category 'accessing') ----- + d14 + ^self unsignedLongLongAt: 489! Item was added: + ----- Method: GdbARMv8Alien>>d14: (in category 'accessing') ----- + d14: anUnsignedInteger + ^self unsignedLongLongAt: 489 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d15 (in category 'accessing') ----- + d15 + ^self unsignedLongLongAt: 505! Item was added: + ----- Method: GdbARMv8Alien>>d15: (in category 'accessing') ----- + d15: anUnsignedInteger + ^self unsignedLongLongAt: 505 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d16 (in category 'accessing') ----- + d16 + ^self unsignedLongLongAt: 521! Item was added: + ----- Method: GdbARMv8Alien>>d16: (in category 'accessing') ----- + d16: anUnsignedInteger + ^self unsignedLongLongAt: 521 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d17 (in category 'accessing') ----- + d17 + ^self unsignedLongLongAt: 537! Item was added: + ----- Method: GdbARMv8Alien>>d17: (in category 'accessing') ----- + d17: anUnsignedInteger + ^self unsignedLongLongAt: 537 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d18 (in category 'accessing') ----- + d18 + ^self unsignedLongLongAt: 553! Item was added: + ----- Method: GdbARMv8Alien>>d18: (in category 'accessing') ----- + d18: anUnsignedInteger + ^self unsignedLongLongAt: 553 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d19 (in category 'accessing') ----- + d19 + ^self unsignedLongLongAt: 569! Item was added: + ----- Method: GdbARMv8Alien>>d19: (in category 'accessing') ----- + d19: anUnsignedInteger + ^self unsignedLongLongAt: 569 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d1: (in category 'accessing') ----- + d1: anUnsignedInteger + ^self unsignedLongLongAt: 281 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d2 (in category 'accessing') ----- + d2 + ^self unsignedLongLongAt: 297! Item was added: + ----- Method: GdbARMv8Alien>>d20 (in category 'accessing') ----- + d20 + ^self unsignedLongLongAt: 585! Item was added: + ----- Method: GdbARMv8Alien>>d20: (in category 'accessing') ----- + d20: anUnsignedInteger + ^self unsignedLongLongAt: 585 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d21 (in category 'accessing') ----- + d21 + ^self unsignedLongLongAt: 601! Item was added: + ----- Method: GdbARMv8Alien>>d21: (in category 'accessing') ----- + d21: anUnsignedInteger + ^self unsignedLongLongAt: 601 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d22 (in category 'accessing') ----- + d22 + ^self unsignedLongLongAt: 617! Item was added: + ----- Method: GdbARMv8Alien>>d22: (in category 'accessing') ----- + d22: anUnsignedInteger + ^self unsignedLongLongAt: 617 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d23 (in category 'accessing') ----- + d23 + ^self unsignedLongLongAt: 633! Item was added: + ----- Method: GdbARMv8Alien>>d23: (in category 'accessing') ----- + d23: anUnsignedInteger + ^self unsignedLongLongAt: 633 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d24 (in category 'accessing') ----- + d24 + ^self unsignedLongLongAt: 649! Item was added: + ----- Method: GdbARMv8Alien>>d24: (in category 'accessing') ----- + d24: anUnsignedInteger + ^self unsignedLongLongAt: 649 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d25 (in category 'accessing') ----- + d25 + ^self unsignedLongLongAt: 665! Item was added: + ----- Method: GdbARMv8Alien>>d25: (in category 'accessing') ----- + d25: anUnsignedInteger + ^self unsignedLongLongAt: 665 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d26 (in category 'accessing') ----- + d26 + ^self unsignedLongLongAt: 681! Item was added: + ----- Method: GdbARMv8Alien>>d26: (in category 'accessing') ----- + d26: anUnsignedInteger + ^self unsignedLongLongAt: 681 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d27 (in category 'accessing') ----- + d27 + ^self unsignedLongLongAt: 697! Item was added: + ----- Method: GdbARMv8Alien>>d27: (in category 'accessing') ----- + d27: anUnsignedInteger + ^self unsignedLongLongAt: 697 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d28 (in category 'accessing') ----- + d28 + ^self unsignedLongLongAt: 713! Item was added: + ----- Method: GdbARMv8Alien>>d28: (in category 'accessing') ----- + d28: anUnsignedInteger + ^self unsignedLongLongAt: 713 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d29 (in category 'accessing') ----- + d29 + ^self unsignedLongLongAt: 729! Item was added: + ----- Method: GdbARMv8Alien>>d29: (in category 'accessing') ----- + d29: anUnsignedInteger + ^self unsignedLongLongAt: 729 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d2: (in category 'accessing') ----- + d2: anUnsignedInteger + ^self unsignedLongLongAt: 297 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d3 (in category 'accessing') ----- + d3 + ^self unsignedLongLongAt: 313! Item was added: + ----- Method: GdbARMv8Alien>>d30 (in category 'accessing') ----- + d30 + ^self unsignedLongLongAt: 745! Item was added: + ----- Method: GdbARMv8Alien>>d30: (in category 'accessing') ----- + d30: anUnsignedInteger + ^self unsignedLongLongAt: 745 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d31 (in category 'accessing') ----- + d31 + ^self unsignedLongLongAt: 761! Item was added: + ----- Method: GdbARMv8Alien>>d31: (in category 'accessing') ----- + d31: anUnsignedInteger + ^self unsignedLongLongAt: 761 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d3: (in category 'accessing') ----- + d3: anUnsignedInteger + ^self unsignedLongLongAt: 313 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d4 (in category 'accessing') ----- + d4 + ^self unsignedLongLongAt: 329! Item was added: + ----- Method: GdbARMv8Alien>>d4: (in category 'accessing') ----- + d4: anUnsignedInteger + ^self unsignedLongLongAt: 329 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d5 (in category 'accessing') ----- + d5 + ^self unsignedLongLongAt: 345! Item was added: + ----- Method: GdbARMv8Alien>>d5: (in category 'accessing') ----- + d5: anUnsignedInteger + ^self unsignedLongLongAt: 345 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d6 (in category 'accessing') ----- + d6 + ^self unsignedLongLongAt: 361! Item was added: + ----- Method: GdbARMv8Alien>>d6: (in category 'accessing') ----- + d6: anUnsignedInteger + ^self unsignedLongLongAt: 361 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d7 (in category 'accessing') ----- + d7 + ^self unsignedLongLongAt: 377! Item was added: + ----- Method: GdbARMv8Alien>>d7: (in category 'accessing') ----- + d7: anUnsignedInteger + ^self unsignedLongLongAt: 377 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d8 (in category 'accessing') ----- + d8 + ^self unsignedLongLongAt: 393! Item was added: + ----- Method: GdbARMv8Alien>>d8: (in category 'accessing') ----- + d8: anUnsignedInteger + ^self unsignedLongLongAt: 393 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>d9 (in category 'accessing') ----- + d9 + ^self unsignedLongLongAt: 409! Item was added: + ----- Method: GdbARMv8Alien>>d9: (in category 'accessing') ----- + d9: anUnsignedInteger + ^self unsignedLongLongAt: 409 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>decorateDisassembly:for:fromAddress: (in category 'disassembly') ----- + decorateDisassembly: anInstructionString for: aSymbolManager fromAddress: address + ^self decorateDisassembly: anInstructionString for: aSymbolManager fromAddress: address labels: nil! Item was added: + ----- Method: GdbARMv8Alien>>decorateDisassembly:for:fromAddress:labels: (in category 'disassembly') ----- + decorateDisassembly: anInstructionString for: aSymbolManager fromAddress: address labels: labelDictionaryOrNil + "Decode what we can of the instruction and decorate it with useful stuff" + | word operand memory theInstructionString mnemonic offsetIdx nonZeroIdx size secondOperand | + word := (memory:= aSymbolManager objectMemory) long32At: address. + "See #twoWordLiteral in the (ARMv8A64Opcodes instructionIsAnyLoadStore: word) arm below. + If a previous pc-relative load has been decorated it will be added to labelDictionaryOrNil, + with valuer #twoWordLiteral, so just try and decode the value." + labelDictionaryOrNil ifNotNil: + [(mnemonic := labelDictionaryOrNil at: address ifAbsent: nil) == #twoWordLiteral ifTrue: + [^(anInstructionString copyReplaceAll: '; undefined' with: '') + , ((address noMask: 7) "Is this the first word of the literal?" + ifTrue: [(aSymbolManager lookupAddress: (memory longAt: address)) ifNotNil: [:label| ' = ', label] ifNil: ['']] + ifFalse: [''])]. + mnemonic = #oneWordLiteral ifTrue: + [^(anInstructionString copyReplaceAll: '; undefined' with: ''), + ((aSymbolManager lookup32BitWordConstant: word) ifNotNil: [:label| ' => ', label] ifNil: [''])]]. + mnemonic := (anInstructionString first isLetter + ifTrue: [anInstructionString copyUpTo: Character tab] + ifFalse: [anInstructionString + copyFrom: (anInstructionString indexOf: $:) + 2 + to: (anInstructionString indexOf: Character tab ifAbsent: [anInstructionString size + 1]) - 1]) + copyUpTo: Character space. + + "Trim long sequences of zeros in address operands" + theInstructionString := + (offsetIdx := (anInstructionString indexOfSubCollection: '0x' startingAt: 12)) > 0 + ifTrue: + [nonZeroIdx := offsetIdx + 2. + size := anInstructionString size. + [nonZeroIdx <= size and: [(anInstructionString at: nonZeroIdx) == $0]] whileTrue: [nonZeroIdx := nonZeroIdx + 1]. + nonZeroIdx < size + ifTrue: [anInstructionString copyReplaceFrom: offsetIdx + 2 to: nonZeroIdx - 1 with: ''] + ifFalse: [anInstructionString]] + ifFalse: [anInstructionString]. + + mnemonic ~= '.inst' ifTrue: "All bets are off for arbitrary literals" + [((mnemonic beginsWith: 'ld') or: [(mnemonic beginsWith: 'st') or: [mnemonic beginsWith: 'cas']]) + ifTrue: [self assert: (ARMv8A64Opcodes instructionIsAnyLoadStore: word)] + ifFalse: [self deny: (ARMv8A64Opcodes instructionIsAnyLoadStore: word)]. + ((mnemonic beginsWith: 'br') or: [(mnemonic beginsWith: 'bl') or: [(mnemonic beginsWith: 'b.') + or: [mnemonic = 'b' or: [mnemonic = 'ret']]]]) + ifTrue: [self assert: (ARMv8A64Opcodes instructionIsAnyB: word)] + ifFalse: [self deny: (ARMv8A64Opcodes instructionIsAnyB: word)]. + "add register names..." + offsetIdx := theInstructionString size + 2. + [(offsetIdx := theInstructionString lastIndexOf: $x startingAt: offsetIdx - 2) > 1] whileTrue: + [| regNum regName stream | + ((theInstructionString at: offsetIdx - 1) isAlphaNumeric not + and: [(theInstructionString at: offsetIdx + 1) isDigit + and: [stream := ReadStream on: theInstructionString from: offsetIdx + 1 to: offsetIdx + 2. + (regName := aSymbolManager lookupRegisterNumber: (regNum := Integer readFrom:stream)) notNil]]) + ifTrue: + [((theInstructionString at: offsetIdx - 1) == $[ + and: [stream position + 4 < theInstructionString size + and: [(theInstructionString at: stream position + 3) == $#]]) ifTrue: "excludes e.g. ldr x29, [x16], #8'" + [| offsetStream | + offsetStream := ReadStream on: theInstructionString from: stream position + 4 to: theInstructionString size. + (regNum = FPReg and: [PrintTempNames]) ifTrue: + [(aSymbolManager lookupFrameOffset: (Integer readFrom: offsetStream)) ifNotNil: + [:varName| + theInstructionString := theInstructionString + copyReplaceFrom: offsetStream position + 1 + to: offsetStream position + with: ':', varName]]. + regNum = ReceiverResultReg ifTrue: + [(aSymbolManager lookupInstVarOffset: (Integer readFrom: offsetStream)) ifNotNil: + [:varName| + theInstructionString := theInstructionString + copyReplaceFrom: offsetStream position + 1 + to: offsetStream position + with: ':', varName]]]. + theInstructionString := theInstructionString + copyReplaceFrom: stream position + 1 + to: stream position + with: '/', regName]]]. + + (ARMv8A64Opcodes instructionIsAnyB: word) + ifTrue: + [(ARMv8A64Opcodes instructionIsBImm26: word) ifTrue: + [operand := ARMv8A64Opcodes extractOffsetFromBImm26: word]. + (ARMv8A64Opcodes instructionIsBImm19: word) ifTrue: + [operand := ARMv8A64Opcodes extractOffsetFromBImm19: word]. + operand ifNotNil: + [operand := (operand bitShift: 2) + address bitAnd: aSymbolManager addressSpaceMask]. + "We can't extract the offset from a BX/BLX instructions register, unless we're at the current pc, + because otherwise its current value has nothing to do with the value when this instruction is executed." + (self pc = address + and: [ARMv8A64Opcodes instructionIsAnyBX: word]) ifTrue: + [operand := (self perform: (self registerStateGetters at: (word >> 5 bitAnd: 31) + 1))]] + ifFalse: + [(ARMv8A64Opcodes instructionIsAnyLoadStore: word) + ifTrue: + [| baseR twoWords addr lit signExtend | + "first see if this is a load via the varBase register" + operand := (baseR := (word >> 5 bitAnd: 31)) = CogARMv8Compiler VarBaseReg ifTrue: + [aSymbolManager varBaseAddress + (ARMv8A64Opcodes extractOffsetFromLoadStore: word)]. + (operand ~~ nil and: [mnemonic = 'ldp' or: [mnemonic = 'stp']]) ifTrue: + [secondOperand := operand + 8]. + "See if this is a pc-relative literal load" + (ARMv8A64Opcodes instructionIsPCRelativeLoad: word) ifTrue: + [twoWords := word >> 30 anyMask: 1. + addr := aSymbolManager backEnd pcRelativeAddressAt: address. + lit := twoWords + ifTrue: [self assert: (addr noMask: 7). + labelDictionaryOrNil ifNotNil: + [labelDictionaryOrNil at: addr put: #twoWordLiteral; at: addr + 4 put: #twoWordLiteral]. + memory longAt: addr] + ifFalse: + ["If the next instruction is a linked send then mark the literal and it'll get mapped to a class index" + labelDictionaryOrNil ifNotNil: + [| nextInst | + nextInst := memory long32At: address + 4. + (ARMv8A64Opcodes instructionIsBImm26: nextInst) ifTrue: + [operand := ARMv8A64Opcodes extractOffsetFromBImm26: word. + operand := (operand bitShift: 2) + address bitAnd: aSymbolManager addressSpaceMask. + operand := aSymbolManager lookupAddress: operand. + (operand isNil "Closed PICs" + or: [operand includes: $@]) "likely linked send" ifTrue: + [labelDictionaryOrNil at: addr put: #oneWordLiteral]]]. + lit := memory long32At: addr. + (signExtend := word >> 31 anyMask: 1) + ifTrue: [lit - (lit >> 31 << 32)] + ifFalse: [lit]]. + ^(aSymbolManager lookupAddress: lit) + ifNotNil: [:label| theInstructionString, ' = ', label] + ifNil: [theInstructionString, ' = ', (lit hex allButFirst: 3)]]] + ifFalse: + [operand := word]]. + + "is there an interesting address for the operand, for this instruction?" + operand ifNotNil: + [labelDictionaryOrNil ifNotNil: + [(labelDictionaryOrNil at: operand ifAbsent: nil) ifNotNil: + [:string| ^theInstructionString, ' = ', string]]. + (aSymbolManager lookupAddress: operand) ifNotNil: + [:string| ^theInstructionString, ' = ', string, (secondOperand ifNil: [''] ifNotNil: [',', (aSymbolManager lookupAddress: secondOperand)])]]. + + ^theInstructionString! Item was added: + ----- Method: GdbARMv8Alien>>floatingPointRegisterStateGetters (in category 'accessing-abstract') ----- + floatingPointRegisterStateGetters + ^#(d0 d1 d2 d3 d4 d5 d6 d7 + d8 d9 d10 d11 d12 d13 d14 d15 + d16 d17 d18 d19 d20 d21 d22 d23 + d24 d25 d26 d27 d28 d29 d30 d31)! Item was added: + ----- Method: GdbARMv8Alien>>fp (in category 'accessing') ----- + fp + ^self unsignedLongLongAt: 233! Item was added: + ----- Method: GdbARMv8Alien>>fp: (in category 'accessing') ----- + fp: anUnsignedInteger + ^self unsignedLongLongAt: 233 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>fpCPCR (in category 'accessing') ----- + fpCPCR + ^self unsignedLongLongAt: 793! Item was added: + ----- Method: GdbARMv8Alien>>fpCPCR: (in category 'accessing') ----- + fpCPCR: anUnsignedInteger + ^self unsignedLongLongAt: 793 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>fpCPSR (in category 'accessing') ----- + fpCPSR + ^self unsignedLongLongAt: 789! Item was added: + ----- Method: GdbARMv8Alien>>fpCPSR: (in category 'accessing') ----- + fpCPSR: anUnsignedInteger + ^self unsignedLongLongAt: 789 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>h0 (in category 'accessing') ----- + h0 + ^self unsignedShortAt: 1! Item was added: + ----- Method: GdbARMv8Alien>>h0: (in category 'accessing') ----- + h0: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 1 put: 0. + ^self unsignedShortAt: 1 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h1 (in category 'accessing') ----- + h1 + ^self unsignedShortAt: 9! Item was added: + ----- Method: GdbARMv8Alien>>h10 (in category 'accessing') ----- + h10 + ^self unsignedShortAt: 81! Item was added: + ----- Method: GdbARMv8Alien>>h10: (in category 'accessing') ----- + h10: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 81 put: 0. + ^self unsignedShortAt: 81 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h11 (in category 'accessing') ----- + h11 + ^self unsignedShortAt: 89! Item was added: + ----- Method: GdbARMv8Alien>>h11: (in category 'accessing') ----- + h11: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 89 put: 0. + ^self unsignedShortAt: 89 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h12 (in category 'accessing') ----- + h12 + ^self unsignedShortAt: 97! Item was added: + ----- Method: GdbARMv8Alien>>h12: (in category 'accessing') ----- + h12: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 97 put: 0. + ^self unsignedShortAt: 97 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h13 (in category 'accessing') ----- + h13 + ^self unsignedShortAt: 105! Item was added: + ----- Method: GdbARMv8Alien>>h13: (in category 'accessing') ----- + h13: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 105 put: 0. + ^self unsignedShortAt: 105 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h14 (in category 'accessing') ----- + h14 + ^self unsignedShortAt: 113! Item was added: + ----- Method: GdbARMv8Alien>>h14: (in category 'accessing') ----- + h14: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 113 put: 0. + ^self unsignedShortAt: 113 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h15 (in category 'accessing') ----- + h15 + ^self unsignedShortAt: 121! Item was added: + ----- Method: GdbARMv8Alien>>h15: (in category 'accessing') ----- + h15: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 121 put: 0. + ^self unsignedShortAt: 121 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h16 (in category 'accessing') ----- + h16 + ^self unsignedShortAt: 129! Item was added: + ----- Method: GdbARMv8Alien>>h16: (in category 'accessing') ----- + h16: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 129 put: 0. + ^self unsignedShortAt: 129 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h17 (in category 'accessing') ----- + h17 + ^self unsignedShortAt: 137! Item was added: + ----- Method: GdbARMv8Alien>>h17: (in category 'accessing') ----- + h17: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 137 put: 0. + ^self unsignedShortAt: 137 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h18 (in category 'accessing') ----- + h18 + ^self unsignedShortAt: 145! Item was added: + ----- Method: GdbARMv8Alien>>h18: (in category 'accessing') ----- + h18: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 145 put: 0. + ^self unsignedShortAt: 145 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h19 (in category 'accessing') ----- + h19 + ^self unsignedShortAt: 153! Item was added: + ----- Method: GdbARMv8Alien>>h19: (in category 'accessing') ----- + h19: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 153 put: 0. + ^self unsignedShortAt: 153 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h1: (in category 'accessing') ----- + h1: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 9 put: 0. + ^self unsignedShortAt: 9 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h2 (in category 'accessing') ----- + h2 + ^self unsignedShortAt: 17! Item was added: + ----- Method: GdbARMv8Alien>>h20 (in category 'accessing') ----- + h20 + ^self unsignedShortAt: 161! Item was added: + ----- Method: GdbARMv8Alien>>h20: (in category 'accessing') ----- + h20: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 161 put: 0. + ^self unsignedShortAt: 161 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h21 (in category 'accessing') ----- + h21 + ^self unsignedShortAt: 169! Item was added: + ----- Method: GdbARMv8Alien>>h21: (in category 'accessing') ----- + h21: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 169 put: 0. + ^self unsignedShortAt: 169 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h22 (in category 'accessing') ----- + h22 + ^self unsignedShortAt: 177! Item was added: + ----- Method: GdbARMv8Alien>>h22: (in category 'accessing') ----- + h22: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 177 put: 0. + ^self unsignedShortAt: 177 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h23 (in category 'accessing') ----- + h23 + ^self unsignedShortAt: 185! Item was added: + ----- Method: GdbARMv8Alien>>h23: (in category 'accessing') ----- + h23: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 185 put: 0. + ^self unsignedShortAt: 185 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h24 (in category 'accessing') ----- + h24 + ^self unsignedShortAt: 193! Item was added: + ----- Method: GdbARMv8Alien>>h24: (in category 'accessing') ----- + h24: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 193 put: 0. + ^self unsignedShortAt: 193 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h25 (in category 'accessing') ----- + h25 + ^self unsignedShortAt: 201! Item was added: + ----- Method: GdbARMv8Alien>>h25: (in category 'accessing') ----- + h25: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 201 put: 0. + ^self unsignedShortAt: 201 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h26 (in category 'accessing') ----- + h26 + ^self unsignedShortAt: 209! Item was added: + ----- Method: GdbARMv8Alien>>h26: (in category 'accessing') ----- + h26: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 209 put: 0. + ^self unsignedShortAt: 209 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h27 (in category 'accessing') ----- + h27 + ^self unsignedShortAt: 217! Item was added: + ----- Method: GdbARMv8Alien>>h27: (in category 'accessing') ----- + h27: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 217 put: 0. + ^self unsignedShortAt: 217 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h28 (in category 'accessing') ----- + h28 + ^self unsignedShortAt: 225! Item was added: + ----- Method: GdbARMv8Alien>>h28: (in category 'accessing') ----- + h28: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 225 put: 0. + ^self unsignedShortAt: 225 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h2: (in category 'accessing') ----- + h2: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 17 put: 0. + ^self unsignedShortAt: 17 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h3 (in category 'accessing') ----- + h3 + ^self unsignedShortAt: 25! Item was added: + ----- Method: GdbARMv8Alien>>h3: (in category 'accessing') ----- + h3: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 25 put: 0. + ^self unsignedShortAt: 25 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h4 (in category 'accessing') ----- + h4 + ^self unsignedShortAt: 33! Item was added: + ----- Method: GdbARMv8Alien>>h4: (in category 'accessing') ----- + h4: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 33 put: 0. + ^self unsignedShortAt: 33 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h5 (in category 'accessing') ----- + h5 + ^self unsignedShortAt: 41! Item was added: + ----- Method: GdbARMv8Alien>>h5: (in category 'accessing') ----- + h5: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 41 put: 0. + ^self unsignedShortAt: 41 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h6 (in category 'accessing') ----- + h6 + ^self unsignedShortAt: 49! Item was added: + ----- Method: GdbARMv8Alien>>h6: (in category 'accessing') ----- + h6: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 49 put: 0. + ^self unsignedShortAt: 49 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h7 (in category 'accessing') ----- + h7 + ^self unsignedShortAt: 57! Item was added: + ----- Method: GdbARMv8Alien>>h7: (in category 'accessing') ----- + h7: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 57 put: 0. + ^self unsignedShortAt: 57 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h8 (in category 'accessing') ----- + h8 + ^self unsignedShortAt: 65! Item was added: + ----- Method: GdbARMv8Alien>>h8: (in category 'accessing') ----- + h8: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 65 put: 0. + ^self unsignedShortAt: 65 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>h9 (in category 'accessing') ----- + h9 + ^self unsignedShortAt: 73! Item was added: + ----- Method: GdbARMv8Alien>>h9: (in category 'accessing') ----- + h9: anUnsignedShort + "zero extend..." + self unsignedLongLongAt: 73 put: 0. + ^self unsignedShortAt: 73 put: anUnsignedShort! Item was added: + ----- Method: GdbARMv8Alien>>hackFixNextPCOfJumpFor:using: (in category 'execution') ----- + hackFixNextPCOfJumpFor: aProcessorSimulationTrap using: objectMemory + "This is a hack fix before we revise the simulators. When a jump call is made, the + next pc is effectively the return address in the link reg, not the instruction following + the jump. So reset it here. All this is because currently the simulators don't execute + a control transfer to a fake address, as would a real processor. Once the processor + simulators correctly emulate such control transfers, we can ditch this hack." + + aProcessorSimulationTrap nextpc: self lr! Item was added: + ----- Method: GdbARMv8Alien>>handleExecutionPrimitiveFailureIn:minimumAddress:code: (in category 'error handling') ----- + handleExecutionPrimitiveFailureIn: memoryArray "<Bitmap|ByteArray>" minimumAddress: minimumAddress "<Integer>" code: errorCode "<Integer>" + "Handle an execution primitive failure. Convert out-of-range call and absolute + memory read into register instructions into ProcessorSimulationTrap signals." + "self disassembleInstructionAt: self pc In: memoryArray" + | instr pc op | + pc := self pc. + instr := self instr. + (pc between: minimumAddress and: memoryArray byteSize - 1) ifTrue: + [self assert: instr = (memoryArray unsignedLongAt: pc + 1 bigEndian: false)]. + op := instr >> 25 bitAnd: 16rF. + (Level0FailureTable at: op + 1) ifNotNil: + [:tuple| + ^self perform: (tuple at: 2) with: instr with: pc with: memoryArray]. + ^self reportPrimitiveFailure! Item was added: + ----- Method: GdbARMv8Alien>>handleFailingBranch:at:in: (in category 'error handling') ----- + handleFailingBranch: instruction at: pc in: memoryArray "<DoubleWordArray|ByteArray>" + "see C4.1.3 Branches, Exception Generating and System instructions in Arm ARM. + Table C4-4 op1 plus the two top bit of op1" + | opcOp2Op3Op4 op1CRnCRmOp2 | + "self disassembleInstructionAt: self pc In: memoryArray" + (instruction bitShift: -25) = 2r1101011 ifTrue: "Unconditional branch (register) on page C4-262" + [opcOp2Op3Op4 := instruction bitAnd: 2r1111111111111110000011111. + opcOp2Op3Op4 = 2r10111110000000000000000 ifTrue: "RET" + [^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: self lr + type: #return) + signal]. + opcOp2Op3Op4 = 2r1111110000000000000000 ifTrue: "BLR" + [^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: (self perform: (self registerStateGetters at: ((instruction >> 5) bitAnd: 31) + 1)) + type: #call) + signal]. + opcOp2Op3Op4 = 2r0111110000000000000000 ifTrue: "BR" + [^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: (self perform: (self registerStateGetters at: ((instruction >> 5) bitAnd: 31) + 1)) + type: #jump) + signal]]. + instruction = self clrexOpcode ifTrue: + [self pc: pc + 4. + ^self]. + (instruction bitShift: -19) = 2r1101010100111 ifTrue: "MRS Op0=3" + [op1CRnCRmOp2 := instruction bitAnd: 2r1111111111111100000. + "At least Raspberry Pi 4 running Manjaro allows access to ID_AA64ISAR0_EL1" + op1CRnCRmOp2 = 2r11000000000 ifTrue: + [self perform: (self registerStateSetters at: (instruction bitAnd: 31) + 1) with: ID_AA64ISAR0_EL1. + self pc: pc + 4. + ^self]]. + self reportPrimitiveFailure! Item was added: + ----- Method: GdbARMv8Alien>>handleFailingLoadStore:at:in: (in category 'error handling') ----- + handleFailingLoadStore: instruction at: pc in: memoryArray "<DoubleWordArray|ByteArray>" + "C4.1.4 Loads and Stores C4-266 + This section describes the encoding of the Loads and Stores group. The encodings in this section are decoded from A64 instruction set encoding on page C4-252. + + Table C4-5 Encoding table for the Loads and Stores group + + op0 31:28 1 op1 26 0 op2 24:23 x op3 21:16 x op4 11:10 + + op0 op2 op3 op4 + xx11 0x 0xxxxx 00 Load/store register (unscaled immediate) on page C4-283 + xx11 0x 0xxxxx 01 Load/store register (immediate post-indexed) on page C4-284 + xx11 0x 0xxxxx 10 Load/store register (unprivileged) on page C4-286 + xx11 0x 0xxxxx 11 Load/store register (immediate pre-indexed) on page C4-286 + xx11 0x 1xxxxx 00 Atomic memory operations on page C4-288 + xx11 0x 1xxxxx 10 Load/store register (register offset) on page C4-295 + xx11 0x 1xxxxx x1 Load/store register (pac) on page C4-297 + xx11 1x 1xxxxx - Load/store register (unsigned immediate) on page C4-297" + + | op0op2 size op4 rm rn rt opc v offsetFromImm addr shift | + "self disassembleInstructionAt: self pc In: memoryArray" + size := instruction bitShift: -30. + opc := (instruction bitShift: -22) bitAnd: 3. + op4 := (instruction bitShift: -10) bitAnd: 3. + rn := (instruction bitShift: -5) bitAnd: 31. + rt := instruction bitAnd: 31. + (rn = 31 and: [self sp anyMask: 15]) ifTrue: + [self reportStackAlignmentVolation]. + "op0 = xx11 op2 = 0x" + (op0op2 := (instruction bitShift: -23) bitAnd: 2r1100010) = 2r1100000 ifFalse: + [offsetFromImm := ARMv8A64Opcodes extractOffsetFromLoadStore: instruction. + (v := instruction >> 26 bitAnd: 1) = 0 ifFalse: [self halt]. + addr := (self perform: (self registerStateGetters at: rn + 1)) + offsetFromImm. + op0op2 = 2r1100010 ifTrue: "Load/store register (unsigned immediate) on page C4-297" + [^(opc = 0 + ifTrue: + [ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + type: #write + accessor: ((self registerStateGettersForSizes: size) at: rt + 1)] + ifFalse: + [ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + type: #read + accessor: ((self registerStateSettersForSizes: size) at: rt + 1)]) + signal]. + op0op2 = 2r1000010 ifTrue: "Load/store register pair (signed immediate) on page C4-282" + [| rt2 | + rt2 := (instruction bitShift: -10) bitAnd: 31. + ^opc = 0 + ifTrue: + [(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + type: #write + accessor: ((self registerStateGettersForSizes: size + 1) at: rt + 1)) + signal. + (ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + 8 + type: #write + accessor: ((self registerStateGettersForSizes: size + 1) at: rt2 + 1)) + signal] + ifFalse: + [(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + type: #read + accessor: ((self registerStateSettersForSizes: size + 1) at: rt + 1)) + signal. + (ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + 8 + type: #read + accessor: ((self registerStateSettersForSizes: size + 1) at: rt2 + 1)) + signal]]. + op0op2 = 0 ifTrue: "LDAXR/STRXR register on page C4-279" + [| result rs | + self assert: size = 3. + opc = 1 ifTrue: + [^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + type: #read + accessor: (self registerStateSetters at: rt + 1)) signal]. + result := (ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + type: #write + accessor: (self registerStateGetters at: rt + 1)) signal. + rs := instruction >> 16 bitAnd: 31. + "For now assume the write succeeded..." + self perform: ((self registerStateSettersForSizes: 2) at: rs + 1) + with: 0. + ^result]. + self halt: 'undecoded failing load/store']. + + ((instruction bitShift: -21) noMask: 1) ifTrue: "op3 = 0xxxxx" + [offsetFromImm := ((instruction bitShift: -12) bitAnd: 16r1FF) bitShift: size. + opc = 0 ifTrue:"C4-286 opc = 0 => store" + [self assert: size = 3. + ^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: (self perform: (self registerStateGetters at: rn + 1)) + offsetFromImm + type: #write + accessor: (self registerStateGetters at: rt + 1)) + signal]. + opc = 1 ifTrue: + [^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: (self perform: (self registerStateGetters at: rn + 1)) + offsetFromImm + type: #read + accessor: ((self registerStateSettersForSizes: size) at: rt + 1)) + signal]. + self halt: 'op3 = 0xxxxx opc > 1']. + + "op0 op2 op3 op4 + xx11 0x 1xxxxx 10 Load/store register (register offset) on page C4-295 (296/297)" + + v := instruction >> 26 bitAnd: 1. + rm := instruction >> 16 bitAnd: 31. + shift := instruction anyMask: 1 << 12. + (size = 3 and: [v = 0]) ifTrue: + [addr := (self perform: (self registerStateGetters at: rn + 1)) + + (shift + ifTrue: [(self perform: (self registerStateGetters at: rm + 1)) << size] + ifFalse: [self perform: (self registerStateGetters at: rm + 1)]). + opc = 0 ifTrue: "STR (register) - 64-bit variant on page C6-1242" + [^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + type: #write + accessor: (self registerStateGetters at: rt + 1)) + signal]. + opc = 1 ifTrue: "LDR (register) - 64-bit variant on page C6-981" + [^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 4 + address: addr + type: #read + accessor: (self registerStateSetters at: rt + 1)) + signal]. + (opc = 3 and: [instruction >> 10 allMask: 63]) ifTrue: "CASAL C4-278/C6-829" + [^(CompareAndSwapSimulationTrap + pc: pc + nextpc: pc + 4 + address: (self perform: (self registerStateGetters at: rn + 1)) + type: #write + accessor: (self registerStateSetters at: rm + 1)) + expectedValue: (self perform: (self registerStateGetters at: rm + 1)); + storedValue: (self perform: (self registerStateGetters at: rt + 1)); + signal]. + self halt: 'op3 = 1xxxxx opc > 1']. + self halt: 'op3 = 1xxxxx size ~= 3'! Item was added: + ----- Method: GdbARMv8Alien>>initializeStackFor: (in category 'processor setup') ----- + initializeStackFor: aCogit + "Different cpus need different stack alignment etc, so handle the details here. + See e.g. https://github.com/ARM-software/software-standards/blob/master/abi/aapcs64/aapcs64.rst#the-stack" + aCogit setStackAlignment: 16 expectedSPOffset: 0 expectedFPOffset: 0. + PostBuildStackDelta := 0! Item was added: + ----- Method: GdbARMv8Alien>>instr (in category 'accessing') ----- + instr + ^self unsignedLongAt: 809! Item was added: + ----- Method: GdbARMv8Alien>>integerRegisterState (in category 'accessing-abstract') ----- + integerRegisterState + "Answer a DoubleWordArray of the integer registers, the pc and the flags. + This primitive is unnecessary; it exists only to speed up single-stepping. + If the primitive fails fall back and yield an Array of the same." + <primitive: 'primitiveIntegerRegisterState' module: 'GdbARMv8Plugin'> + ^{ self r0. self r1. self r2. self r3. self r4. self r5. self r6. self r7. + self r8. self r9. self r10. self r11. self r12. self r13. self r14. self r15. + self r16. self r17. self r18. self r19. self r20. self r21. self r22. self r23. + self r24. self r25. self r26. self r27. self r28. self fp. self lr. self sp. + self pc. self rawCPSR }! Item was added: + ----- Method: GdbARMv8Alien>>leafRetpcIn: (in category 'accessing-abstract') ----- + leafRetpcIn: aMemory + "Answer the retpc assuming that the processor is in a simulated call established + by simulateLeafCallOf:nextpc:memory:" + ^self lr! Item was added: + ----- Method: GdbARMv8Alien>>lr (in category 'accessing') ----- + lr + ^self unsignedLongLongAt: 241! Item was added: + ----- Method: GdbARMv8Alien>>lr: (in category 'accessing') ----- + lr: anUnsignedInteger + ^self unsignedLongLongAt: 241 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>nextpc (in category 'accessing') ----- + nextpc + ^self unsignedLongLongAt: 797! Item was added: + ----- Method: GdbARMv8Alien>>nextpc: (in category 'accessing') ----- + nextpc: anUnsignedInteger + ^self unsignedLongLongAt: 797 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>nopOpcode (in category 'opcodes') ----- + nopOpcode + ^NOP! Item was added: + ----- Method: GdbARMv8Alien>>pc (in category 'accessing') ----- + pc + ^self unsignedLongLongAt: 777! Item was added: + ----- Method: GdbARMv8Alien>>pc: (in category 'accessing') ----- + pc: anUnsignedInteger + ^self unsignedLongLongAt: 777 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>popWordIn: (in category 'execution') ----- + popWordIn: aMemory + | sp word | + word := aMemory long64At: (sp := self sp) + 1. + self sp: sp + 8. + ^word! Item was added: + ----- Method: GdbARMv8Alien>>postCallArgumentsNumArgs:in: (in category 'execution') ----- + postCallArgumentsNumArgs: numArgs "<Integer>" in: memory "<ByteArray|DoubleWordArray>" + "Answer an argument vector of the requested size after a vanilla ABI call. For ARMv8 enough of the Procedure Calling Specification + can be found in http://infocenter.arm.com/help/topic/com.arm.doc.den0028b/ARM_DEN0028B_SMC_Calling_Convention.pdf. + On ARM this typically means accessing r0 through r7 and fetching additional arguments from the stack. + Since we never have arities beyond 4 ish only implement access from register arguments." + | args getters | + args := Array new: numArgs. + getters := self registerStateGetters. + (1 to: numArgs) do: [:i | args at: i put: (self perform: (getters at: i))]. + ^args! Item was added: + ----- Method: GdbARMv8Alien>>primitiveDisassembleAt:inMemory: (in category 'primitives') ----- + primitiveDisassembleAt: address inMemory: memoryArray "<Bitmap|ByteArray>" + "Answer an Array of the size and the disassembled code string for the instruction at the current instruction pointer in memory." + <primitive: 'primitiveDisassembleAtInMemory' module: 'GdbARMv8Plugin'> + ^self primitiveFailed! Item was added: + ----- Method: GdbARMv8Alien>>primitiveErrorAndLog (in category 'primitives') ----- + primitiveErrorAndLog + "Answer an array of the current error code and log contents" + <primitive: 'primitiveErrorAndLog' module: 'GdbARMv8Plugin'> + ^self primitiveFailed! Item was added: + ----- Method: GdbARMv8Alien>>primitiveFlushICacheFrom:To: (in category 'primitives') ----- + primitiveFlushICacheFrom: startAddress "<Integer>" To: endAddress "<Integer>" + "Flush the icache in the requested range" + <primitive: 'primitiveFlushICacheFromTo' module: 'GdbARMv8Plugin'> + ^self primitiveFailed! Item was added: + ----- Method: GdbARMv8Alien>>primitiveResetCPU (in category 'primitives') ----- + primitiveResetCPU + "Reset the receiver to registers all zero, and protected 32-bit mode." + <primitive: 'primitiveResetCPU' module: 'GdbARMv8Plugin'> + ^self reportPrimitiveFailure! Item was added: + ----- Method: GdbARMv8Alien>>primitiveRunInMemory:minimumAddress:readOnlyBelow: (in category 'primitives') ----- + primitiveRunInMemory: memoryArray "<Bitmap|ByteArray>" minimumAddress: minimumAddress "<Integer>" readOnlyBelow: minimumWritableAddress "<Integer>" + "Run the receiver using the argument as the store. Origin the argument at 0. i.e. the first byte of the + memoryArray is address 0. Make addresses below minimumAddress illegal. Convert out-of-range + calls, jumps and memory read/writes into ProcessorSimulationTrap signals. + Note that minWriteMaxExecAddress is both the minimum writeable address AND the maximum executable address" + <primitive: 'primitiveRunInMemoryMinimumAddressReadWrite' module: 'GdbARMv8Plugin' error: ec> + ^ec isPrimitiveError + ifTrue: + [self handleExecutionPrimitiveFailureIn: memoryArray + minimumAddress: minimumAddress + code: ec errorCode] + ifFalse: + [ec == #'inappropriate operation' + ifTrue: [self handleExecutionPrimitiveFailureIn: memoryArray + minimumAddress: minimumAddress] + ifFalse: [self reportPrimitiveFailure]]! Item was added: + ----- Method: GdbARMv8Alien>>primitiveSingleStepInMemory:minimumAddress:readOnlyBelow: (in category 'primitives') ----- + primitiveSingleStepInMemory: memoryArray "<Bitmap|ByteArray>" minimumAddress: minimumAddress "<Integer>" readOnlyBelow: minimumWritableAddress "<Integer>" + "Single-step the receiver using the argument as the store. Origin the argument at 0. i.e. the first byte of the + memoryArray is address 0. Make addresses below minimumAddress illegal. Convert out-of-range + calls, jumps and memory read/writes into ProcessorSimulationTrap signals." + <primitive: 'primitiveSingleStepInMemoryMinimumAddressReadWrite' module: 'GdbARMv8Plugin' error: ec> + ^ec isPrimitiveError + ifTrue: + [self handleExecutionPrimitiveFailureIn: memoryArray + minimumAddress: minimumAddress + code: ec errorCode] + ifFalse: + [ec == #'inappropriate operation' + ifTrue: [self handleExecutionPrimitiveFailureIn: memoryArray + minimumAddress: minimumAddress] + ifFalse: [self reportPrimitiveFailure]]! Item was added: + ----- Method: GdbARMv8Alien>>printFields:inRegisterState:on: (in category 'printing') ----- + printFields: fields inRegisterState: registerStateVector on: aStream + | rsvs | + aStream ensureCr. + rsvs := registerStateVector readStream. + fields withIndexDo: + [:sym :index| | val | + sym = #cr + ifTrue: [aStream cr] + ifFalse: + [(val := rsvs next) isNil ifTrue: [^self]. + aStream nextPutAll: sym; nextPut: $:; space. + val printOn: aStream base: 16 length: 16 padded: true. + #eflags == sym + ifTrue: + [aStream space. + "'FIVCZN'"'--VCZN' withIndexDo: + [:flag :bitIndex| + flag ~= $- ifTrue: + [aStream nextPut: flag; nextPutAll: 'F='; print: (val bitAnd: 1 << (bitIndex - 1)) >> (bitIndex - 1); space]]] + ifFalse: + [val > 16 ifTrue: + [aStream space; nextPut: $(. + val printOn: aStream base: 10 length: 1 padded: false. + aStream nextPut: $)]]. + (fields at: index + 1) ~~ #cr ifTrue: + [aStream tab]]]! Item was added: + ----- Method: GdbARMv8Alien>>printRegisterState:on: (in category 'printing') ----- + printRegisterState: registerStateVector on: aStream + (registerStateVector size >= 64 + ifTrue: + [#( (r0 r1 r2 r3 cr) + (r4 r5 r6 r7 cr) + (r8 r9 r10 r11 cr) + (r12 r13 r14 r15 cr) + (r16 r17 r18 r19 cr) + (r20 r21 r22 r23 cr) + (r24 r25 r26 r27 cr) + (r28 fp lr sp cr) + (d0 d1 d2 d3 cr) + (d4 d5 d6 d7 cr) + (d8 d9 d10 d11 cr) + (d12 d13 d14 d15 cr) + (d16 d17 d18 d19 cr) + (d20 d21 d22 d23 cr) + (d24 d25 d26 d27 cr) + (d28 d29 d30 d31 cr))] + ifFalse: + [#( (r0 r1 r2 r3 cr) + (r4 r5 r6 r7 cr) + (r8 r9 r10 r11 cr) + (r12 r13 r14 r15 cr) + (r16 r17 r18 r19 cr) + (r20 r21 r22 r23 cr) + (r24 r25 r26 r27 cr) + (r28 fp lr sp cr))]) doWithIndex: + [:subset :index| + (subset anySatisfy: [:getter| getter ~~ #cr and: [(self perform: getter) ~= 0]]) ifTrue: + [self printFields: subset + inRegisterState: (registerStateVector copyFrom: index * 4 - 3 to: index * 4) + on: aStream]]. + registerStateVector size = 34 "i.e. imtegerRegisterState" + ifTrue: + [self printFields: #(pc rawCPSR cr) + inRegisterState: (registerStateVector last: 2) + on: aStream] + ifFalse: + [self printFields: #(pc CPSR FPSR FPCR nextpc cr) + inRegisterState: (registerStateVector last: 5) + on: aStream]! Item was added: + ----- Method: GdbARMv8Alien>>printRegisterStateExceptPC:on: (in category 'printing') ----- + printRegisterStateExceptPC: registerStateVector on: aStream + self printFields: #( r0 r1 r2 r3 cr + r4 r5 r6 r7 cr + r8 r9 r10 r11 cr + r12 r13 r14 r15 cr + r16 r17 r18 r19 cr + r20 r21 r22 r23 cr + r24 r25 r26 r27 cr + r28 fp lr sp cr) + inRegisterState: registerStateVector + on: aStream! Item was added: + ----- Method: GdbARMv8Alien>>pushPair:and:in: (in category 'execution') ----- + pushPair: aValue and: bValue in: aMemory + | sp | + sp := self sp. + self assert: (sp noMask: 15). + aMemory + unsignedLong64At: sp - 8 + 1 put: aValue; + unsignedLong64At: sp - 16 + 1 put: bValue. + ^self sp: sp - 16! Item was added: + ----- Method: GdbARMv8Alien>>pushWord:in: (in category 'execution') ----- + pushWord: aValue in: aMemory + self assert: (self sp noMask: 15). + aMemory unsignedLong64At: (self sp: self sp - 8) + 1 put: aValue! Item was added: + ----- Method: GdbARMv8Alien>>r0 (in category 'accessing') ----- + r0 + ^self unsignedLongLongAt: 1! Item was added: + ----- Method: GdbARMv8Alien>>r0: (in category 'accessing') ----- + r0: anUnsignedInteger + ^self unsignedLongLongAt: 1 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r1 (in category 'accessing') ----- + r1 + ^self unsignedLongLongAt: 9! Item was added: + ----- Method: GdbARMv8Alien>>r10 (in category 'accessing') ----- + r10 + ^self unsignedLongLongAt: 81! Item was added: + ----- Method: GdbARMv8Alien>>r10: (in category 'accessing') ----- + r10: anUnsignedInteger + ^self unsignedLongLongAt: 81 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r11 (in category 'accessing') ----- + r11 + ^self unsignedLongLongAt: 89! Item was added: + ----- Method: GdbARMv8Alien>>r11: (in category 'accessing') ----- + r11: anUnsignedInteger + ^self unsignedLongLongAt: 89 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r12 (in category 'accessing') ----- + r12 + ^self unsignedLongLongAt: 97! Item was added: + ----- Method: GdbARMv8Alien>>r12: (in category 'accessing') ----- + r12: anUnsignedInteger + ^self unsignedLongLongAt: 97 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r13 (in category 'accessing') ----- + r13 + ^self unsignedLongLongAt: 105! Item was added: + ----- Method: GdbARMv8Alien>>r13: (in category 'accessing') ----- + r13: anUnsignedInteger + ^self unsignedLongLongAt: 105 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r14 (in category 'accessing') ----- + r14 + ^self unsignedLongLongAt: 113! Item was added: + ----- Method: GdbARMv8Alien>>r14: (in category 'accessing') ----- + r14: anUnsignedInteger + ^self unsignedLongLongAt: 113 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r15 (in category 'accessing') ----- + r15 + ^self unsignedLongLongAt: 121! Item was added: + ----- Method: GdbARMv8Alien>>r15: (in category 'accessing') ----- + r15: anUnsignedInteger + ^self unsignedLongLongAt: 121 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r16 (in category 'accessing') ----- + r16 + ^self unsignedLongLongAt: 129! Item was added: + ----- Method: GdbARMv8Alien>>r16: (in category 'accessing') ----- + r16: anUnsignedInteger + ^self unsignedLongLongAt: 129 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r17 (in category 'accessing') ----- + r17 + ^self unsignedLongLongAt: 137! Item was added: + ----- Method: GdbARMv8Alien>>r17: (in category 'accessing') ----- + r17: anUnsignedInteger + ^self unsignedLongLongAt: 137 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r18 (in category 'accessing') ----- + r18 + ^self unsignedLongLongAt: 145! Item was added: + ----- Method: GdbARMv8Alien>>r18: (in category 'accessing') ----- + r18: anUnsignedInteger + ^self unsignedLongLongAt: 145 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r19 (in category 'accessing') ----- + r19 + ^self unsignedLongLongAt: 153! Item was added: + ----- Method: GdbARMv8Alien>>r19: (in category 'accessing') ----- + r19: anUnsignedInteger + ^self unsignedLongLongAt: 153 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r1: (in category 'accessing') ----- + r1: anUnsignedInteger + ^self unsignedLongLongAt: 9 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r2 (in category 'accessing') ----- + r2 + ^self unsignedLongLongAt: 17! Item was added: + ----- Method: GdbARMv8Alien>>r20 (in category 'accessing') ----- + r20 + ^self unsignedLongLongAt: 161! Item was added: + ----- Method: GdbARMv8Alien>>r20: (in category 'accessing') ----- + r20: anUnsignedInteger + ^self unsignedLongLongAt: 161 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r21 (in category 'accessing') ----- + r21 + ^self unsignedLongLongAt: 169! Item was added: + ----- Method: GdbARMv8Alien>>r21: (in category 'accessing') ----- + r21: anUnsignedInteger + ^self unsignedLongLongAt: 169 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r22 (in category 'accessing') ----- + r22 + ^self unsignedLongLongAt: 177! Item was added: + ----- Method: GdbARMv8Alien>>r22: (in category 'accessing') ----- + r22: anUnsignedInteger + ^self unsignedLongLongAt: 177 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r23 (in category 'accessing') ----- + r23 + ^self unsignedLongLongAt: 185! Item was added: + ----- Method: GdbARMv8Alien>>r23: (in category 'accessing') ----- + r23: anUnsignedInteger + ^self unsignedLongLongAt: 185 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r24 (in category 'accessing') ----- + r24 + ^self unsignedLongLongAt: 193! Item was added: + ----- Method: GdbARMv8Alien>>r24: (in category 'accessing') ----- + r24: anUnsignedInteger + ^self unsignedLongLongAt: 193 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r25 (in category 'accessing') ----- + r25 + ^self unsignedLongLongAt: 201! Item was added: + ----- Method: GdbARMv8Alien>>r25: (in category 'accessing') ----- + r25: anUnsignedInteger + ^self unsignedLongLongAt: 201 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r26 (in category 'accessing') ----- + r26 + ^self unsignedLongLongAt: 209! Item was added: + ----- Method: GdbARMv8Alien>>r26: (in category 'accessing') ----- + r26: anUnsignedInteger + ^self unsignedLongLongAt: 209 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r27 (in category 'accessing') ----- + r27 + ^self unsignedLongLongAt: 217! Item was added: + ----- Method: GdbARMv8Alien>>r27: (in category 'accessing') ----- + r27: anUnsignedInteger + ^self unsignedLongLongAt: 217 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r28 (in category 'accessing') ----- + r28 + ^self unsignedLongLongAt: 225! Item was added: + ----- Method: GdbARMv8Alien>>r28: (in category 'accessing') ----- + r28: anUnsignedInteger + ^self unsignedLongLongAt: 225 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r2: (in category 'accessing') ----- + r2: anUnsignedInteger + ^self unsignedLongLongAt: 17 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r3 (in category 'accessing') ----- + r3 + ^self unsignedLongLongAt: 25! Item was added: + ----- Method: GdbARMv8Alien>>r3: (in category 'accessing') ----- + r3: anUnsignedInteger + ^self unsignedLongLongAt: 25 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r4 (in category 'accessing') ----- + r4 + ^self unsignedLongLongAt: 33! Item was added: + ----- Method: GdbARMv8Alien>>r4: (in category 'accessing') ----- + r4: anUnsignedInteger + ^self unsignedLongLongAt: 33 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r5 (in category 'accessing') ----- + r5 + ^self unsignedLongLongAt: 41! Item was added: + ----- Method: GdbARMv8Alien>>r5: (in category 'accessing') ----- + r5: anUnsignedInteger + ^self unsignedLongLongAt: 41 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r6 (in category 'accessing') ----- + r6 + ^self unsignedLongLongAt: 49! Item was added: + ----- Method: GdbARMv8Alien>>r6: (in category 'accessing') ----- + r6: anUnsignedInteger + ^self unsignedLongLongAt: 49 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r7 (in category 'accessing') ----- + r7 + ^self unsignedLongLongAt: 57! Item was added: + ----- Method: GdbARMv8Alien>>r7: (in category 'accessing') ----- + r7: anUnsignedInteger + ^self unsignedLongLongAt: 57 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r8 (in category 'accessing') ----- + r8 + ^self unsignedLongLongAt: 65! Item was added: + ----- Method: GdbARMv8Alien>>r8: (in category 'accessing') ----- + r8: anUnsignedInteger + ^self unsignedLongLongAt: 65 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>r9 (in category 'accessing') ----- + r9 + ^self unsignedLongLongAt: 73! Item was added: + ----- Method: GdbARMv8Alien>>r9: (in category 'accessing') ----- + r9: anUnsignedInteger + ^self unsignedLongLongAt: 73 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>rawCPSR (in category 'accessing') ----- + rawCPSR + ^self unsignedLongLongAt: 785! Item was added: + ----- Method: GdbARMv8Alien>>rawCPSR: (in category 'accessing') ----- + rawCPSR: anUnsignedInteger + ^self unsignedLongLongAt: 785 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>rawPrimitiveRunInMemory:offsetBy:minimumAddress:readOnlyBelow: (in category 'primitives-simulation') ----- + rawPrimitiveRunInMemory: memoryArray offsetBy: offset minimumAddress: minimumAddress readOnlyBelow: minimumWritableAddress + "A version of primitiveRunInMemory:offsetBy:minimumAddress:readOnlyBelow: for simulation" + <primitive: 'primitiveRunInMemoryOffsetMinimumAddressReadWrite' module: 'GdbARMv8Plugin' error: ec> + ^ec! Item was added: + ----- Method: GdbARMv8Alien>>rawPrimitiveSingleStepInMemory:offsetBy:minimumAddress:readOnlyBelow: (in category 'primitives-simulation') ----- + rawPrimitiveSingleStepInMemory: memoryArray offsetBy: offset minimumAddress: minimumAddress readOnlyBelow: minimumWritableAddress + "A version of primitiveSingleStepInMemory:offsetBy:minimumAddress:readOnlyBelow: for simulation" + <primitive: 'primitiveSingleStepInMemoryOffsetMinimumAddressReadWrite' module: 'GdbARMv8Plugin' error: ec> + ^ec! Item was added: + ----- Method: GdbARMv8Alien>>registerState (in category 'accessing-abstract') ----- + registerState + ^{ self r0. self r1. self r2. self r3. self r4. self r5. self r6. self r7. + self r8. self r9. self r10. self r11. self r12. self r13. self r14. self r15. + self r16. self r17. self r18. self r19. self r20. self r21. self r22. self r23. + self r24. self r25. self r26. self r27. self r28. self fp. self lr. self sp. + self d0. self d1. self d2. self d3. self d4. self d5. self d6. self d7. + self d8. self d9. self d10. self d11. self d12. self d13. self d14. self d15. + self d16. self d17. self d18. self d19. self d20. self d21. self d22. self d23. + self d24. self d25. self d26. self d27. self d28. self d29. self d30. self d31. + self pc. self rawCPSR. self fpCPSR. self fpCPCR. self nextpc }! Item was added: + ----- Method: GdbARMv8Alien>>registerStateGetters (in category 'accessing-abstract') ----- + registerStateGetters + ^#(r0 r1 r2 r3 r4 r5 r6 r7 + r8 r9 r10 r11 r12 r13 r14 r15 + r16 r17 r18 r19 r20 r21 r22 r23 + r24 r25 r26 r27 r28 fp lr sp + d0 d1 d2 d3 d4 d5 d6 d7 + d8 d9 d10 d11 d12 d13 d14 d15 + d16 d17 d18 d19 d20 d21 d22 d23 + d24 d25 d26 d27 d28 d29 d30 d31 + pc rawCPSR fpCPSR fpCPCR nextpc)! Item was added: + ----- Method: GdbARMv8Alien>>registerStateGettersForSizes: (in category 'accessing-abstract') ----- + registerStateGettersForSizes: sizeField + "Answer the array of regular register getters for sizeFieldPlusOne, so + if sizeField is 0, and the getters are byte register getters + if sizeField is 1, and the getters are halfword register getters + if sizeField is 2, and the getters are word register getters + if sizeField is 3, and the getters are the doubleword register getters, the normal getters" + ^#((b0 b1 b2 b3 b4 b5 b6 b7 + b8 b9 b10 b11 b12 b13 b14 b15 + b16 b17 b18 b19 b20 b21 b22 b23 + b24 b25 b26 b27 b28 b29) + (h0 h1 h2 h3 h4 h5 h6 h7 + h8 h9 h10 h11 h12 h13 h14 h15 + h16 h17 h18 h19 h20 h21 h22 h23 + h24 h25 h26 h27 h28 h29) + (w0 w1 w2 w3 w4 w5 w6 w7 + w8 w9 w10 w11 w12 w13 w14 w15 + w16 w17 w18 w19 w20 w21 w22 w23 + w24 w25 w26 w27 w28 w29) + (r0 r1 r2 r3 r4 r5 r6 r7 + r8 r9 r10 r11 r12 r13 r14 r15 + r16 r17 r18 r19 r20 r21 r22 r23 + r24 r25 r26 r27 r28 fp lr sp)) at: sizeField + 1! Item was added: + ----- Method: GdbARMv8Alien>>registerStatePCIndex (in category 'accessing-abstract') ----- + registerStatePCIndex + "Answer the index of the PC register in the Array answered by integerRegisterState" + ^33! Item was added: + ----- Method: GdbARMv8Alien>>registerStateSetters (in category 'accessing-abstract') ----- + registerStateSetters + ^#(r0: r1: r2: r3: r4: r5: r6: r7: + r8: r9: r10: r11: r12: r13: r14: r15: + r16: r17: r18: r19: r20: r21: r22: r23: + r24: r25: r26: r27: r28: fp: lr: sp: + d0: d1: d2: d3: d4: d5: d6: d7: + d8: d9: d10: d11: d12: d13: d14: d15: + d16: d17: d18: d19: d20: d21: d22: d23: + d24: d25: d26: d27: d28: d29: d30: d31: + pc: rawCPSR: fpCPSR: fpCPCR: nextpc:)! Item was added: + ----- Method: GdbARMv8Alien>>registerStateSettersForSizes: (in category 'accessing-abstract') ----- + registerStateSettersForSizes: sizeField + "Answer the array of regular register setters for sizeFieldPlusOne, so + if sizeField is 0, and the setters are byte register setters + if sizeField is 1, and the setters are halfword register setters + if sizeField is 2, and the setters are word register setters + if sizeField is 3, and the setters are the doubleword register setters, the normal setters" + ^#((b0: b1: b2: b3: b4: b5: b6: b7: + b8: b9: b10: b11: b12: b13: b14: b15: + b16: b17: b18: b19: b20: b21: b22: b23: + b24: b25: b26: b27: b28: b29) + (h0: h1: h2: h3: h4: h5: h6: h7: + h8: h9: h10: h11: h12: h13: h14: h15: + h16: h17: h18: h19: h20: h21: h22: h23: + h24: h25: h26: h27: h28: h29) + (w0: w1: w2: w3: w4: w5: w6: w7: + w8: w9: w10: w11: w12: w13: w14: w15: + w16: w17: w18: w19: w20: w21: w22: w23: + w24: w25: w26: w27: w28: w29) + (r0: r1: r2: r3: r4: r5: r6: r7: + r8: r9: r10: r11: r12: r13: r14: r15: + r16: r17: r18: r19: r20: r21: r22: r23: + r24: r25: r26: r27: r28: fp: lr: sp:)) at: sizeField + 1! Item was added: + ----- Method: GdbARMv8Alien>>reset (in category 'processor setup') ----- + reset + self primitiveResetCPU! Item was added: + ----- Method: GdbARMv8Alien>>retpcIn: (in category 'accessing-abstract') ----- + retpcIn: aMemory + "The return address is on the stack, having been pushed by either + simulateCallOf:nextpc:memory: or simulateJumpCallOf:memory:" + ^aMemory long64At: self fp + 9! Item was added: + ----- Method: GdbARMv8Alien>>setFlagsForCompareAndSwap: (in category 'execution') ----- + setFlagsForCompareAndSwap: aBoolean + "ARMv8 does not set flags as part of CASAL et al. That requires a separate compare. So simply ignore."! Item was added: + ----- Method: GdbARMv8Alien>>setFramePointer:stackPointer: (in category 'accessing-abstract') ----- + setFramePointer: framePointer stackPointer: stackPointer + "Initialize the processor's frame and stack pointers" + self fp: framePointer. + self sp: stackPointer! Item was added: + ----- Method: GdbARMv8Alien>>setIntegerRegisterState: (in category 'accessing-abstract') ----- + setIntegerRegisterState: newState + "Set the state reasonably efficiently, for the benefit of the MultiProcessor." + + self r0: (newState at: 1). self r1: (newState at: 2). self r2: (newState at: 3). self r3: (newState at: 4). + self r4: (newState at: 5). self r5: (newState at: 6). self r6: (newState at: 7). self r7: (newState at: 8). + self r8: (newState at: 9). self r9: (newState at: 10). self r10: (newState at: 11). self r11: (newState at: 12). + self r12: (newState at: 13). self r13: (newState at: 14). self r14: (newState at: 15). self r15: (newState at: 16). + self r16: (newState at: 17). self r17: (newState at: 18). self r18: (newState at: 19). self r19: (newState at: 20). + self r20: (newState at: 21). self r21: (newState at: 22). self r22: (newState at: 23). self r23: (newState at: 24). + self r24: (newState at: 25). self r25: (newState at: 26). self r26: (newState at: 27). self r27: (newState at: 28). + self r28: (newState at: 29). self fp: (newState at: 30). self lr: (newState at: 31). self sp: (newState at: 32). + self pc: (newState at: 33). + self rawCPSR: (newState at: 34)! Item was added: + ----- Method: GdbARMv8Alien>>simulateCallOf:nextpc:memory: (in category 'execution') ----- + simulateCallOf: address nextpc: nextpc memory: aMemory + "Simulate a frame-building call of address. Build a frame since + this is used for calls into the run-time which are unlikely to be leaf-calls" + + self fp: (self pushPair: self lr and: self fp in: aMemory). + self pc: address! Item was added: + ----- Method: GdbARMv8Alien>>simulateJumpCallOf:memory: (in category 'execution') ----- + simulateJumpCallOf: address memory: aMemory + "Simulate a frame-building jump call of address. Build a frame since + this is used for calls into the run-time which are unlikely to be leaf-calls" + + self fp: (self pushPair: self lr and: self fp in: aMemory). + self pc: address! Item was added: + ----- Method: GdbARMv8Alien>>simulateLeafCallOf:nextpc:memory: (in category 'execution') ----- + simulateLeafCallOf: address nextpc: nextpc memory: aMemory + self lr: nextpc. + self pc: address! Item was added: + ----- Method: GdbARMv8Alien>>simulateLeafReturnIn: (in category 'execution') ----- + simulateLeafReturnIn: aMemory + self pc: self lr! Item was added: + ----- Method: GdbARMv8Alien>>simulateReturnIn: (in category 'execution') ----- + simulateReturnIn: aMemory + PostBuildStackDelta ~= 0 ifTrue: + [self sp: self sp + PostBuildStackDelta]. + self fp: (self popWordIn: aMemory). + self pc: (self popWordIn: aMemory)! Item was added: + ----- Method: GdbARMv8Alien>>smashCallerSavedRegistersWithValuesFrom:by: (in category 'accessing-abstract') ----- + smashCallerSavedRegistersWithValuesFrom: base by: step + | setters | + setters := self registerStateSetters. + 1 to: 18 do: + [:index| + self perform: (setters at: index) with: index - 1 * step + base]! Item was added: + ----- Method: GdbARMv8Alien>>smashRegisterAccessors (in category 'accessing-abstract') ----- + smashRegisterAccessors + "See Table 3-1 Register Usage in AArch64 SMC32, HVC32, SMC64, and HVC64 calls + in http://infocenter.arm.com/help/topic/com.arm.doc.den0028b/ARM_DEN0028B_SMC_Calling_Convention.pdf" + ^#(r0: r1: r2: r3: r4: r5: r6: r7: r8: r9: r10: r11: r12: r13: r14: r15: r16: r17:)! Item was added: + ----- Method: GdbARMv8Alien>>sp (in category 'accessing') ----- + sp + ^self unsignedLongLongAt: 249! Item was added: + ----- Method: GdbARMv8Alien>>sp: (in category 'accessing') ----- + sp: anUnsignedInteger + ^self unsignedLongLongAt: 249 put: anUnsignedInteger! Item was added: + ----- Method: GdbARMv8Alien>>w0 (in category 'accessing') ----- + w0 + ^self unsignedLongAt: 1! Item was added: + ----- Method: GdbARMv8Alien>>w0: (in category 'accessing') ----- + w0: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 1 put: 0. + ^self unsignedLongAt: 1 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w1 (in category 'accessing') ----- + w1 + ^self unsignedLongAt: 9! Item was added: + ----- Method: GdbARMv8Alien>>w10 (in category 'accessing') ----- + w10 + ^self unsignedLongAt: 81! Item was added: + ----- Method: GdbARMv8Alien>>w10: (in category 'accessing') ----- + w10: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 81 put: 0. + ^self unsignedLongAt: 81 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w11 (in category 'accessing') ----- + w11 + ^self unsignedLongAt: 89! Item was added: + ----- Method: GdbARMv8Alien>>w11: (in category 'accessing') ----- + w11: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 89 put: 0. + ^self unsignedLongAt: 89 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w12 (in category 'accessing') ----- + w12 + ^self unsignedLongAt: 97! Item was added: + ----- Method: GdbARMv8Alien>>w12: (in category 'accessing') ----- + w12: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 97 put: 0. + ^self unsignedLongAt: 97 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w13 (in category 'accessing') ----- + w13 + ^self unsignedLongAt: 105! Item was added: + ----- Method: GdbARMv8Alien>>w13: (in category 'accessing') ----- + w13: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 105 put: 0. + ^self unsignedLongAt: 105 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w14 (in category 'accessing') ----- + w14 + ^self unsignedLongAt: 113! Item was added: + ----- Method: GdbARMv8Alien>>w14: (in category 'accessing') ----- + w14: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 113 put: 0. + ^self unsignedLongAt: 113 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w15 (in category 'accessing') ----- + w15 + ^self unsignedLongAt: 121! Item was added: + ----- Method: GdbARMv8Alien>>w15: (in category 'accessing') ----- + w15: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 121 put: 0. + ^self unsignedLongAt: 121 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w16 (in category 'accessing') ----- + w16 + ^self unsignedLongAt: 129! Item was added: + ----- Method: GdbARMv8Alien>>w16: (in category 'accessing') ----- + w16: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 129 put: 0. + ^self unsignedLongAt: 129 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w17 (in category 'accessing') ----- + w17 + ^self unsignedLongAt: 137! Item was added: + ----- Method: GdbARMv8Alien>>w17: (in category 'accessing') ----- + w17: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 137 put: 0. + ^self unsignedLongAt: 137 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w18 (in category 'accessing') ----- + w18 + ^self unsignedLongAt: 145! Item was added: + ----- Method: GdbARMv8Alien>>w18: (in category 'accessing') ----- + w18: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 145 put: 0. + ^self unsignedLongAt: 145 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w19 (in category 'accessing') ----- + w19 + ^self unsignedLongAt: 153! Item was added: + ----- Method: GdbARMv8Alien>>w19: (in category 'accessing') ----- + w19: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 153 put: 0. + ^self unsignedLongAt: 153 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w1: (in category 'accessing') ----- + w1: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 9 put: 0. + ^self unsignedLongAt: 9 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w2 (in category 'accessing') ----- + w2 + ^self unsignedLongAt: 17! Item was added: + ----- Method: GdbARMv8Alien>>w20 (in category 'accessing') ----- + w20 + ^self unsignedLongAt: 161! Item was added: + ----- Method: GdbARMv8Alien>>w20: (in category 'accessing') ----- + w20: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 161 put: 0. + ^self unsignedLongAt: 161 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w21 (in category 'accessing') ----- + w21 + ^self unsignedLongAt: 169! Item was added: + ----- Method: GdbARMv8Alien>>w21: (in category 'accessing') ----- + w21: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 169 put: 0. + ^self unsignedLongAt: 169 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w22 (in category 'accessing') ----- + w22 + ^self unsignedLongAt: 177! Item was added: + ----- Method: GdbARMv8Alien>>w22: (in category 'accessing') ----- + w22: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 177 put: 0. + ^self unsignedLongAt: 177 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w23 (in category 'accessing') ----- + w23 + ^self unsignedLongAt: 185! Item was added: + ----- Method: GdbARMv8Alien>>w23: (in category 'accessing') ----- + w23: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 185 put: 0. + ^self unsignedLongAt: 185 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w24 (in category 'accessing') ----- + w24 + ^self unsignedLongAt: 193! Item was added: + ----- Method: GdbARMv8Alien>>w24: (in category 'accessing') ----- + w24: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 193 put: 0. + ^self unsignedLongAt: 193 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w25 (in category 'accessing') ----- + w25 + ^self unsignedLongAt: 201! Item was added: + ----- Method: GdbARMv8Alien>>w25: (in category 'accessing') ----- + w25: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 201 put: 0. + ^self unsignedLongAt: 201 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w26 (in category 'accessing') ----- + w26 + ^self unsignedLongAt: 209! Item was added: + ----- Method: GdbARMv8Alien>>w26: (in category 'accessing') ----- + w26: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 209 put: 0. + ^self unsignedLongAt: 209 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w27 (in category 'accessing') ----- + w27 + ^self unsignedLongAt: 217! Item was added: + ----- Method: GdbARMv8Alien>>w27: (in category 'accessing') ----- + w27: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 217 put: 0. + ^self unsignedLongAt: 217 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w28 (in category 'accessing') ----- + w28 + ^self unsignedLongAt: 225! Item was added: + ----- Method: GdbARMv8Alien>>w28: (in category 'accessing') ----- + w28: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 225 put: 0. + ^self unsignedLongAt: 225 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w2: (in category 'accessing') ----- + w2: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 17 put: 0. + ^self unsignedLongAt: 17 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w3 (in category 'accessing') ----- + w3 + ^self unsignedLongAt: 25! Item was added: + ----- Method: GdbARMv8Alien>>w3: (in category 'accessing') ----- + w3: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 25 put: 0. + ^self unsignedLongAt: 25 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w4 (in category 'accessing') ----- + w4 + ^self unsignedLongAt: 33! Item was added: + ----- Method: GdbARMv8Alien>>w4: (in category 'accessing') ----- + w4: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 33 put: 0. + ^self unsignedLongAt: 33 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w5 (in category 'accessing') ----- + w5 + ^self unsignedLongAt: 41! Item was added: + ----- Method: GdbARMv8Alien>>w5: (in category 'accessing') ----- + w5: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 41 put: 0. + ^self unsignedLongAt: 41 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w6 (in category 'accessing') ----- + w6 + ^self unsignedLongAt: 49! Item was added: + ----- Method: GdbARMv8Alien>>w6: (in category 'accessing') ----- + w6: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 49 put: 0. + ^self unsignedLongAt: 49 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w7 (in category 'accessing') ----- + w7 + ^self unsignedLongAt: 57! Item was added: + ----- Method: GdbARMv8Alien>>w7: (in category 'accessing') ----- + w7: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 57 put: 0. + ^self unsignedLongAt: 57 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w8 (in category 'accessing') ----- + w8 + ^self unsignedLongAt: 65! Item was added: + ----- Method: GdbARMv8Alien>>w8: (in category 'accessing') ----- + w8: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 65 put: 0. + ^self unsignedLongAt: 65 put: anUnsignedLong! Item was added: + ----- Method: GdbARMv8Alien>>w9 (in category 'accessing') ----- + w9 + ^self unsignedLongAt: 73! Item was added: + ----- Method: GdbARMv8Alien>>w9: (in category 'accessing') ----- + w9: anUnsignedLong + "zero extend..." + self unsignedLongLongAt: 73 put: 0. + ^self unsignedLongAt: 73 put: anUnsignedLong! Item was added: + GdbARMv8Alien variableByteSubclass: #GdbARMv8Alien64 + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Cog-Processors'! + + !GdbARMv8Alien64 commentStamp: 'eem 11/19/2019 15:39' prior: 0! + I am a wrapper around the struct sim aarch64 CPU instance and emulator routines when compiled for 64-bits. I give access to disassembling using libopcodes.! Item was added: + ----- Method: GdbARMv8Alien64 class>>dataSize (in category 'instance creation') ----- + dataSize + ^2280! Item was added: + ----- Method: GdbARMv8Alien64>>nextpc (in category 'accessing') ----- + nextpc + ^self unsignedLongLongAt: 801! Item was added: + ----- Method: GdbARMv8Alien64>>nextpc: (in category 'accessing') ----- + nextpc: anUnsignedInteger + ^self unsignedLongLongAt: 801 put: anUnsignedInteger! |
Free forum by Nabble | Edit this page |