From commits at source.squeak.org Thu Oct 1 03:11:52 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 1 Oct 2020 03:11:52 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2832.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2832.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2832 Author: eem Time: 30 September 2020, 8:11:43.302713 pm UUID: bc601167-a7f8-41d3-8621-eb8313bbc4ad Ancestors: VMMaker.oscog-eem.2831 Comment an interesting policy choice in externalInstVar:ofContext:. Fix a slip in the new IA32ABI copy into primitive =============== Diff against VMMaker.oscog-eem.2831 =============== Item was changed: ----- Method: CoInterpreter>>externalInstVar:ofContext: (in category 'frame access') ----- externalInstVar: offset ofContext: aContext "Fetch an instance variable from a maybe married context. If the context is still married compute the value of the relevant inst var from the spouse frame's state. If the context is single but has a negative instruction pointer recognise that the instruction pointer is actually into machine code and convert it to the corresponding bytecode pc." | value | self assert: (objectMemory isContext: aContext). self assert: offset <= (ReceiverIndex + (self checkStackPointerForMaybeMarriedContext: aContext)). "method, closureOrNil & receiver need no special handling; only sender, pc & stackp have to be computed for married contexts." (self isReadMediatedContextInstVarIndex: offset) ifFalse: [^objectMemory fetchPointer: offset ofObject: aContext]. self externalWriteBackHeadFramePointers. (self isStillMarriedContext: aContext) ifTrue: [^self fetchPointer: offset ofMarriedContext: aContext]. value := objectMemory fetchPointer: offset ofObject: aContext. + "Why not update the slot to refer to the mapped pc? We're damned if we do, and damned if + we don't. If it is and the context is live and is returned to, then the pc will be mapped back + to machine code. If we don't then the mapping will be repeated on every access. What we + need are stats that show whether or not a read here predicts one or other outcome with any + certainty. For now, we keep it as it has been for a long time and do not update the slot." (offset = InstructionPointerIndex and: [(objectMemory isIntegerObject: value) and: [value signedIntFromLong < 0]]) ifTrue: [^self mustMapMachineCodePC: (objectMemory integerValueOf: value) context: aContext]. ^value! Item was changed: ----- Method: IA32ABIPlugin>>primAlienCopyInto (in category 'primitives-accessing') ----- primAlienCopyInto "Copy some number of bytes from the receiver starting at the first index into some destination object starting at the second index. The destination may be an Aliens or a bit-indexable object. The primitive will have the following signature: primCopyFrom: start to: stop into: destination startingAt: destStart ^ " | alien start stop dest destStart src totalLength destAddr myLength | alien := interpreterProxy stackValue: 4. "Unchecked!!" start := interpreterProxy stackIntegerValue: 3. stop := interpreterProxy stackIntegerValue: 2. dest := interpreterProxy stackValue: 1. destStart := interpreterProxy stackIntegerValue: 0. (interpreterProxy failed or: [(interpreterProxy isWordsOrBytes: dest) not]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. myLength := self sizeField: alien. src := (self startOfData: alien withSize: myLength) + start - 1. (self isAlien: dest) ifTrue: [totalLength := self sizeField: dest. + destAddr := (self startOfData: dest withSize: totalLength) + destStart - 1. - destAddr := (self startOfData: dest withSize: totalLength) + start - 1. totalLength = 0 "no bounds checks for zero-sized (pointer) Aliens" ifTrue: [totalLength := stop] ifFalse: [totalLength := totalLength abs]] ifFalse: [totalLength := interpreterProxy byteSizeOf: dest. + destAddr := (self startOfByteData: dest) + destStart - 1]. - destAddr := (self startOfByteData: dest) + start - 1]. ((start >= 1 and: [start - 1 <= stop and: [stop <= myLength abs]]) and: [stop - start + 1 <= totalLength]) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: dest) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. "Use memmove to allow source and desition to overlap" self memmove: destAddr asVoidPointer _: src asVoidPointer _: stop - start + 1. interpreterProxy methodReturnReceiver! From noreply at github.com Thu Oct 1 03:15:22 2020 From: noreply at github.com (Eliot Miranda) Date: Wed, 30 Sep 2020 20:15:22 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] b7c90f: CogVM source as per VMMaker.oscog-eem.2832 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: b7c90f4f1790fd76c1e3014495bb75ced936a33f https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/b7c90f4f1790fd76c1e3014495bb75ced936a33f Author: Eliot Miranda Date: 2020-09-30 (Wed, 30 Sep 2020) Changed paths: M src/plugins/IA32ABI/IA32ABI.c Log Message: ----------- CogVM source as per VMMaker.oscog-eem.2832 Fix a slip in the new IA32ABI copy into primitive. From no-reply at appveyor.com Thu Oct 1 03:54:50 2020 From: no-reply at appveyor.com (AppVeyor) Date: Thu, 01 Oct 2020 03:54:50 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2220 Message-ID: <20201001035450.1.8A1636CE4892920C@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Thu Oct 1 04:35:19 2020 From: builds at travis-ci.org (Travis CI) Date: Thu, 01 Oct 2020 04:35:19 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2219 (Cog - b7c90f4) In-Reply-To: Message-ID: <5f755c86c43fc_13fb4060dd03c49692@travis-tasks-6f7f446777-hzktx.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2219 Status: Still Failing Duration: 1 hr, 19 mins, and 34 secs Commit: b7c90f4 (Cog) Author: Eliot Miranda Message: CogVM source as per VMMaker.oscog-eem.2832 Fix a slip in the new IA32ABI copy into primitive. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/ab8ac9c9cf84...b7c90f4f1790 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/731806476?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Thu Oct 1 07:30:07 2020 From: noreply at github.com (Nicolas Cellier) Date: Thu, 01 Oct 2020 00:30:07 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] f67977: Rescue Win64 cygwin/mingw build and fix issue #498 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: f679770b318090f0abdddeabc59568a6520ed7f2 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f679770b318090f0abdddeabc59568a6520ed7f2 Author: Nicolas Cellier Date: 2020-10-01 (Thu, 01 Oct 2020) Changed paths: M build.win64x64/common/Makefile.tools Log Message: ----------- Rescue Win64 cygwin/mingw build and fix issue #498 I (Nicolas Cellier) guess that this only affect cygwin build since there is a parallel Makefile.msvc.tools `-mno-stack-arg-probe` prevents stack overflow detection when trying to allocate more than a page size on stack, see: https://archive.is/J01oT This option makes the VM crash at startup when built for mingw target via cygwin cross-platform toolchain. Removing the option let the VM start, and the image can at least run some essential SUnit TestCase Note sure however whether the VM is fully operational or not because I do not know if `-mno-stack-arg-probe` is really required or just an optimization... `-mno-stack-arg-probe` could eventually work if we would be able to allocate a big enough stack at startup. That's what we do when using MSVC tool chain: > ../common/Makefile.msvc.tools:# the default stack size to 2Mb to avoid crashes in the JIT's alloca. > ../common/Makefile.msvc.tools:DEFAULT_STACK_SIZE:=2097152 > ../common/Makefile.msvc.tools:STACK_LD_FLAG=/STACK:$(DEFAULT_STACK_SIZE),$(DEFAULT_STACK_SIZE) > ../common/Makefile.msvc.tools:BASELDFLAGS:= $(STACK_LD_FLAG) /DYNAMICBASE /LARGEADDRESSAWARE /NXCOMPAT /DEBUG:FULL This is supposed to have a solution in mingw too, see: https://stackoverflow.com/questions/52406183/mingw-stack-size-reserved-or-committed That's exactly what we are trying to do here: > ../common/Makefile.tools:BASELDFLAGS:=-m64 -mthreads -Wl,--stack -Xlinker 2097152,2097152 -Wl,$(EXPORT) Unfortunately, this option is apparently ignored (or overriden?)... From notifications at github.com Thu Oct 1 07:53:27 2020 From: notifications at github.com (Nicolas Cellier) Date: Thu, 01 Oct 2020 00:53:27 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Rescue Win64 cygwin/mingw build and fix issue #498 (f679770) In-Reply-To: References: Message-ID: Err, case of blindness! I see it know: we pass `--stack -Xlinker 2097152,2097152` where it should have been `-Xlinker --stack=2097152,2097152` I will check if we can restore `-mno-stack-arg-probe` with above invocation... -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f679770b318090f0abdddeabc59568a6520ed7f2#commitcomment-42875483 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Thu Oct 1 08:08:23 2020 From: no-reply at appveyor.com (AppVeyor) Date: Thu, 01 Oct 2020 08:08:23 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2221 Message-ID: <20201001080823.1.366930738A61854C@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Thu Oct 1 08:34:01 2020 From: notifications at github.com (Nicolas Cellier) Date: Thu, 01 Oct 2020 01:34:01 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Rescue Win64 cygwin/mingw build and fix issue #498 (f679770) In-Reply-To: References: Message-ID: Nope, wrong guess, the incantation was correct... It should not be `--stack=reserved,committed` but `--stack reserved,committed` We cannot pass an argument containing a coma (,) via `-Wl,--stack,reserved,committed` because it would transform the command into `--stack reserved committed` So there was a mixture of `-Wl,` and `-Xlinker`, which was misleading but correct... See https://stackoverflow.com/questions/7221141/any-difference-between-wl-option-and-xlinker-option-syntax-for-gcc -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f679770b318090f0abdddeabc59568a6520ed7f2#commitcomment-42876577 -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Thu Oct 1 08:49:13 2020 From: builds at travis-ci.org (Travis CI) Date: Thu, 01 Oct 2020 08:49:13 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2220 (Cog - f679770) In-Reply-To: Message-ID: <5f759808c1d96_13f8bc4409b58361fa@travis-tasks-7c5687df54-n99j7.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2220 Status: Still Failing Duration: 1 hr, 18 mins, and 45 secs Commit: f679770 (Cog) Author: Nicolas Cellier Message: Rescue Win64 cygwin/mingw build and fix issue #498 I (Nicolas Cellier) guess that this only affect cygwin build since there is a parallel Makefile.msvc.tools `-mno-stack-arg-probe` prevents stack overflow detection when trying to allocate more than a page size on stack, see: https://archive.is/J01oT This option makes the VM crash at startup when built for mingw target via cygwin cross-platform toolchain. Removing the option let the VM start, and the image can at least run some essential SUnit TestCase Note sure however whether the VM is fully operational or not because I do not know if `-mno-stack-arg-probe` is really required or just an optimization... `-mno-stack-arg-probe` could eventually work if we would be able to allocate a big enough stack at startup. That's what we do when using MSVC tool chain: > ../common/Makefile.msvc.tools:# the default stack size to 2Mb to avoid crashes in the JIT's alloca. > ../common/Makefile.msvc.tools:DEFAULT_STACK_SIZE:=2097152 > ../common/Makefile.msvc.tools:STACK_LD_FLAG=/STACK:$(DEFAULT_STACK_SIZE),$(DEFAULT_STACK_SIZE) > ../common/Makefile.msvc.tools:BASELDFLAGS:= $(STACK_LD_FLAG) /DYNAMICBASE /LARGEADDRESSAWARE /NXCOMPAT /DEBUG:FULL This is supposed to have a solution in mingw too, see: https://stackoverflow.com/questions/52406183/mingw-stack-size-reserved-or-committed That's exactly what we are trying to do here: > ../common/Makefile.tools:BASELDFLAGS:=-m64 -mthreads -Wl,--stack -Xlinker 2097152,2097152 -Wl,$(EXPORT) Unfortunately, this option is apparently ignored (or overriden?)... View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/b7c90f4f1790...f679770b3180 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/731849628?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Thu Oct 1 13:28:38 2020 From: notifications at github.com (Nicolas Cellier) Date: Thu, 01 Oct 2020 06:28:38 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] jpeg plugin crashes in win64 cygwin/mingw builds (#526) Message-ID: Easy to reproduce: `JPEGReadWriter2Test suite run` with a VM compiled with cygwin (mingw cross platform) toolchain. This might be related to this commit or not: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7e0018d2bda239f11f6b30748de6ac78ca0111d9 The commit tells that assert VM crashes even when built with MSVC toolchain (w or w/o clang-cl.exe). -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/526 -------------- next part -------------- An HTML attachment was scrubbed... URL: From stes at telenet.be Fri Oct 2 17:22:33 2020 From: stes at telenet.be (stes@PANDORA.BE) Date: Fri, 2 Oct 2020 19:22:33 +0200 (CEST) Subject: [Vm-dev] __builtin_return_address Message-ID: <207286963.33016518.1601659353687.JavaMail.zimbra@telenet.be> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Hi, Perhaps good to give some feedback after the fix a while ago, of the "__builtin_return_address" fix from a while ago. Here's a screenshot of the Cog VM on Solaris 11.4 (for Intel/AMD) : https://sourceforge.net/projects/solaris-squeak/ This seems to be working fine, runs the internal 'Tests' mostly ok. Also special thanks for the 'configure' fixes, the software configures OK, for the moment on Solaris. Regards, David Stes -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAEBCAAGBQJfd2GrAAoJEAwpOKXMq1MaxDQIAJKzQCISznpwvB1Fps4E1gmF cj+SWBlIDkYrUZZH4xK0r8YjyH3UWT1M22eWu3CBdK7oxbKVLZGNH6oDWj00TSYl EQM6BqlXWotmdaXjM84q1G8U7K+XDauD11BuZC2/da94kxjH+Z8paNMOsF/FlgUX W0Ttq7xEEmORT+G8yRTFf6hvbJs1qdRDMh0sLabTtUfB2zcAo018TU+HbpLmjr2t HW+12avs4nCo+PkjlRJV7RK9rj/nhcxeYqlqc5ROyGwNF5i6tGixFc7uc9O8nJdg zfW9cJ24gBafK4AOO29QlJE4Lp5PkY29t+TqK+Q4E5+tokrntmhl/yCk1KZavAE= =XAsw -----END PGP SIGNATURE----- From eliot.miranda at gmail.com Fri Oct 2 20:00:18 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri, 2 Oct 2020 13:00:18 -0700 Subject: [Vm-dev] __builtin_return_address In-Reply-To: <207286963.33016518.1601659353687.JavaMail.zimbra@telenet.be> References: <207286963.33016518.1601659353687.JavaMail.zimbra@telenet.be> Message-ID: <47296384-7B45-4CF6-BFFE-1FA45B38B792@gmail.com> > On Oct 2, 2020, at 10:22 AM, stes at PANDORA.BE wrote: > >  > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA256 > > > Hi, > > Perhaps good to give some feedback after the fix a while ago, > of the "__builtin_return_address" fix from a while ago. > > Here's a screenshot of the Cog VM on Solaris 11.4 (for Intel/AMD) : > > https://sourceforge.net/projects/solaris-squeak/ > > This seems to be working fine, runs the internal 'Tests' mostly ok. > > Also special thanks for the 'configure' fixes, the software configures OK, > for the moment on Solaris Cool, good to hear! Thank you. > > Regards, > David Stes > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2 > > iQEcBAEBCAAGBQJfd2GrAAoJEAwpOKXMq1MaxDQIAJKzQCISznpwvB1Fps4E1gmF > cj+SWBlIDkYrUZZH4xK0r8YjyH3UWT1M22eWu3CBdK7oxbKVLZGNH6oDWj00TSYl > EQM6BqlXWotmdaXjM84q1G8U7K+XDauD11BuZC2/da94kxjH+Z8paNMOsF/FlgUX > W0Ttq7xEEmORT+G8yRTFf6hvbJs1qdRDMh0sLabTtUfB2zcAo018TU+HbpLmjr2t > HW+12avs4nCo+PkjlRJV7RK9rj/nhcxeYqlqc5ROyGwNF5i6tGixFc7uc9O8nJdg > zfW9cJ24gBafK4AOO29QlJE4Lp5PkY29t+TqK+Q4E5+tokrntmhl/yCk1KZavAE= > =XAsw > -----END PGP SIGNATURE----- From noreply at github.com Sun Oct 4 22:45:44 2020 From: noreply at github.com (Eliot Miranda) Date: Sun, 04 Oct 2020 15:45:44 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 222999: Minor cleanups before attempting the iOS HostWindo... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 222999facd182d2b8acd37c7f9f4b1d269393eca https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/222999facd182d2b8acd37c7f9f4b1d269393eca Author: Eliot Miranda Date: 2020-10-04 (Sun, 04 Oct 2020) Changed paths: M platforms/Cross/vm/sqVirtualMachine.c M platforms/Mac OS/vm/sqMacWindow.c M platforms/iOS/plugins/HostWindowPlugin/sqMacHostWindow.h M platforms/iOS/plugins/HostWindowPlugin/sqMacHostWindow.m M platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m M platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.m M platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m M platforms/win32/plugins/HostWindowPlugin/sqWin32HostWindowPlugin.c Log Message: ----------- Minor cleanups before attempting the iOS HostWindowPlugin. [ci skip] From commits at source.squeak.org Mon Oct 5 02:39:26 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Mon, 5 Oct 2020 02:39:26 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2833.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2833.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2833 Author: eem Time: 4 October 2020, 7:39:18.675104 pm UUID: 0bd7ec4f-f422-47e5-a5ab-fdb25246de8a Ancestors: VMMaker.oscog-eem.2832 Spur: Start commenting the shim/slimbridge scheme to provide > 8 byte alignment. =============== Diff against VMMaker.oscog-eem.2832 =============== Item was changed: CogClass subclass: #SpurMemoryManager (excessive size, no diff calculated) Item was added: + ----- Method: SpurMemoryManager>>extraAlignedBitShift (in category 'header format') ----- + extraAlignedBitShift + + "bit 2 of 2-bit field above classIndex (little endian)" + ^24! Item was changed: ----- Method: SpurMemoryManager>>headerForSlots:format:classIndex: (in category 'header format') ----- headerForSlots: numSlots format: formatField classIndex: classIndex "The header format in LSB is MSB: | 8: numSlots | (on a byte boundary) | 2 bits | (msb,lsb = {isMarked,?}) | 22: identityHash | (on a word boundary) | 3 bits | (msb <-> lsb = {isGrey,isPinned,isRemembered} | 5: format | (on a byte boundary) + | 2 bits | (msb,lsb = {isImmutable,isExtraAligned}) - | 2 bits | (msb,lsb = {isImmutable,?}) | 22: classIndex | (on a word boundary) : LSB The remaining bits (7) are used for isImmutable (bit 23) isRemembered (bit 29) isPinned (bit 30) isGrey (bit 31) isMarked (bit 55) leaving 2 unused bits, each next to a 22-bit field, allowing those fields to be expanded to 23 bits.. The three bit field { isGrey, isPinned, isRemembered } is for bits that are never set in young objects. This allows the remembered table to be pruned when full by using these bits as a reference count of newSpace objects from the remembered table. Objects with a high count should be tenured to prune the remembered table." ^ ((self cCoerceSimple: numSlots to: #usqLong) << self numSlotsFullShift) + (formatField << self formatShift) + classIndex! Item was added: + ----- Method: SpurMemoryManager>>isExtraAligned: (in category 'header access') ----- + isExtraAligned: objOop + "An object that has greater than 8 byte alignment has the isExtraAligned but set and is (must be) preceded + by a slimbridge. The actual alignment the object has is held in the slimbridge. Hence an object already + aligned on an N word boundary, for N > 1, must be preceded by an N word slimbridge. We support + alignment slimbridges by noting that an overflow size word must have a slot count of at least 255. Any value + less than 128 indicates a slim bridge, which gives us 7 bits, organized as a 3-bit alignment field (in bits 4 to 6), + and a 4-bit bridge size field (in bIts 0 to 3). The bridge size field gives the size minus one in words of the + slimbridge. A size of zero specifies an 8-byte, one word slimbridge, a size of 15 implies an 128 byte, 16 word + slimbridge. The two bit alignment field gives the power of two minus three in bytes. An alignment field of 0 + imples 8 byte alignment (and hence is only used with single word slimbridges). An alignment field of 1 imples + 16 byte alignment (and hence may be used with one or two word slimbridges). An alignment field of 2 imples + 32 byte alignment (and hence may be used with one to four word slimbridges). An alignment field of 3 imples + 64 byte alignment (and hence may be used with one to eight word slimbridges). An alignment field of 4 imples + 128 byte alignment (and hence may be used with one to sixteed word slimbridges). Alignments of 256, 512, + and 1024 bytes are representable, but require a larger size field than can fit in four bits, and so are not used. + + So to align an object on a 16, 32, or 128 byte boundary, at allocation time a slimbridge of the size required + to pad to the required alignment is written into memory, and immediatrly following it the object is allocated, + with its isExtraAligned bit set. The required/actual alignment is written into the slimbridge's alignment field, + and the entire field (saturated size count and slot count < 128) replicated in all words of the slimbridge. + When the object is moved, either during scavenging or compaction, when it is written into its new location, + a new slimbridge is synthesized to align it in the new location on the same boundary. But the size of slimbridge + may be entirely different in the new location. Only the alignment field and the object's actual alignment is + guaranteed not to change. Note also that objects with an overflow size field require one word less padding in + the slimbridge, because it is the word following the normal header word that is aligned, not the header word + and not the overflow header word." + ^((self longAt: objOop) >> self extraAlignedBitShift bitAnd: 1) ~= 0! From commits at source.squeak.org Mon Oct 5 02:46:58 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Mon, 5 Oct 2020 02:46:58 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2834.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2834.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2834 Author: eem Time: 4 October 2020, 7:46:49.720371 pm UUID: 6e752d78-e255-4b30-92b6-440c93abd885 Ancestors: VMMaker.oscog-eem.2833 Primitives: Implement some simulation support for the HostWindowPlugin, mainly to test the subset used by Terf. Make curasor warping generally available. Remove cCode from primitiveSetDisplayMode =============== Diff against VMMaker.oscog-eem.2833 =============== Item was changed: ----- Method: HostWindowPlugin>>primitiveSetCursorPositionX:Y: (in category 'system primitives') ----- primitiveSetCursorPositionX: x Y: y + "Set the position of the cursor to the specified position on the desktop (*not* the display). - - "Set the position of the cursor to the specified position on the desktop. Fail if the platform routine returns -1 to indicate failure." | result | self primitive: 'primitiveSetCursorPosition' parameters: #(SmallInteger SmallInteger). result := self ioSetCursorPositionX: x Y: y. result = -1 ifTrue: [^interpreterProxy primitiveFail]! Item was added: + HostWindowPlugin subclass: #HostWindowPluginSimulator + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'VMMaker-InterpreterSimulation'! Item was added: + ----- Method: HostWindowPluginSimulator>>ioPositionOfWindow: (in category 'primitive simulation') ----- + ioPositionOfWindow: windowIndex + + ^-1 + + "self basicNew ioPositionOfWindow: 1"! Item was added: + ----- Method: HostWindowPluginSimulator>>ioPositionOfWindowSet:x:y: (in category 'primitive simulation') ----- + ioPositionOfWindowSet: windowIndex x: x y: y + + ^-1 + + "self basicNew ioPositionOfWindowSet: 1 x: 500 y: 500" + "self basicNew ioPositionOfWindowSet: 1 x: 64 y: 64"! Item was added: + ----- Method: HostWindowPluginSimulator>>ioSetCursorPositionX:Y: (in category 'primitive simulation') ----- + ioSetCursorPositionX: x Y: y + + ^-1 + + "self basicNew ioSetCursorPositionX: Display width // 2 Y: Display height // 2"! Item was added: + ----- Method: HostWindowPluginSimulator>>ioSizeOfWindow: (in category 'primitive simulation') ----- + ioSizeOfWindow: windowIndex + + ^-1 + + "self basicNew ioSizeOfWindow: 1"! Item was added: + ----- Method: HostWindowPluginSimulator>>ioSizeOfWindowSet:x:y: (in category 'primitive simulation') ----- + ioSizeOfWindowSet: windowIndex x: x y: y + + ^-1 + + "self basicNew ioSizeOfWindowSet: 1 x: 500 y: 500" + "self basicNew ioSizeOfWindowSet: 1 x: 64 y: 64"! Item was added: + ----- Method: HostWindowPluginSimulator>>pointFromCompactPointEncoding: (in category 'support') ----- + pointFromCompactPointEncoding: encodedPoint + "For simplicity in the simulation invoking primitives that may or may not answer a point..." + + encodedPoint isPoint ifTrue: + [^interpreterProxy + makePointwithxValue: encodedPoint x + yValue: encodedPoint y]. + ^super pointFromCompactPointEncoding: encodedPoint! Item was changed: ----- Method: InterpreterPrimitives>>primitiveSetDisplayMode (in category 'I/O primitives') ----- primitiveSetDisplayMode + "Ask trhe GUI to set the requested display mode. + See DisplayScreen class depth:width:height:fullscreen:" - "Set to OS to the requested display mode. - See also DisplayScreen setDisplayDepth:extent:fullscreen:" | fsFlag h w d okay | + fsFlag := self booleanValueOf: self stackTop. - fsFlag := self booleanValueOf: (self stackTop). h := self stackIntegerValue: 1. w := self stackIntegerValue: 2. d := self stackIntegerValue: 3. + self successful ifFalse: + [^self primitiveFailFor: PrimErrBadArgument]. + okay := self ioSetDisplayMode: w _: h _: d _: fsFlag. + self successful ifFalse: + [^self primitiveFailFor: PrimErrOperationFailed]. + self methodReturnBool: okay! - self successful ifTrue: [okay := self cCode:'ioSetDisplayMode(w, h, d, fsFlag)']. - self successful ifTrue: [self pop: 5 thenPushBool: okay "Pop args+rcvr"]! From noreply at github.com Mon Oct 5 18:42:22 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 05 Oct 2020 11:42:22 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 5aa957: HostWindowPlugin as per VMMaker.oscog-eem.2834 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 5aa95748fb84e0b98e0676326fb04b4b4b22bd30 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/5aa95748fb84e0b98e0676326fb04b4b4b22bd30 Author: Eliot Miranda Date: 2020-10-05 (Mon, 05 Oct 2020) Changed paths: M platforms/Cross/plugins/HostWindowPlugin/HostWindowPlugin.h M platforms/iOS/plugins/HostWindowPlugin/sqMacHostWindow.m M platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m M platforms/win32/plugins/HostWindowPlugin/sqWin32HostWindowPlugin.c M src/plugins/HostWindowPlugin/HostWindowPlugin.c Log Message: ----------- HostWindowPlugin as per VMMaker.oscog-eem.2834 Implement the position/size part of the plugin on Mac. And allow the cursor warp primitive to be accessible in Squeak (on Windows and Mac). From noreply at github.com Mon Oct 5 18:45:45 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 05 Oct 2020 11:45:45 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 2f9736: And don't forget unix (after having forgotten abou... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 2f9736093002f6e15aeb07232494da228cb8f69a https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/2f9736093002f6e15aeb07232494da228cb8f69a Author: Eliot Miranda Date: 2020-10-05 (Mon, 05 Oct 2020) Changed paths: M platforms/unix/plugins/HostWindowPlugin/sqUnixHostWindowPlugin.c Log Message: ----------- And don't forget unix (after having forgotten about unix). From noreply at github.com Mon Oct 5 18:47:53 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 05 Oct 2020 11:47:53 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 59dac6: And we need the Mac HostWindowPlugin Makefile Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 59dac6b1ef13cb9708d33cb6ec519c1589e8733d https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/59dac6b1ef13cb9708d33cb6ec519c1589e8733d Author: Eliot Miranda Date: 2020-10-05 (Mon, 05 Oct 2020) Changed paths: A platforms/iOS/plugins/HostWindowPlugin/Makefile Log Message: ----------- And we need the Mac HostWindowPlugin Makefile From builds at travis-ci.org Mon Oct 5 18:51:46 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 05 Oct 2020 18:51:46 +0000 Subject: [Vm-dev] Errored: OpenSmalltalk/opensmalltalk-vm#2221 (Cog - 5aa9574) In-Reply-To: Message-ID: <5f7b6b42804d0_13fe6c2bb21f82108ea@travis-tasks-7dfd985f76-2l2nk.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2221 Status: Errored Duration: 7 mins and 50 secs Commit: 5aa9574 (Cog) Author: Eliot Miranda Message: HostWindowPlugin as per VMMaker.oscog-eem.2834 Implement the position/size part of the plugin on Mac. And allow the cursor warp primitive to be accessible in Squeak (on Windows and Mac). View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/222999facd18...5aa95748fb84 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/733067925?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 5 19:18:08 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 05 Oct 2020 19:18:08 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2222 Message-ID: <20201005191808.1.F0EAEFAF84A2CF1F@appveyor.com> An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 5 19:53:48 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 05 Oct 2020 19:53:48 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2223 Message-ID: <20201005195348.1.E7EB2C6EB62B0110@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 5 20:24:14 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 05 Oct 2020 20:24:14 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2223 (Cog - 59dac6b) In-Reply-To: Message-ID: <5f7b80edaf8a5_13fe6c44332543206c5@travis-tasks-7dfd985f76-2l2nk.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2223 Status: Still Failing Duration: 1 hr, 34 mins, and 11 secs Commit: 59dac6b (Cog) Author: Eliot Miranda Message: And we need the Mac HostWindowPlugin Makefile View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/2f9736093002...59dac6b1ef13 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/733069386?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 5 20:27:51 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 05 Oct 2020 20:27:51 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2224 Message-ID: <20201005202751.1.A079EE2CC8F01B88@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Tue Oct 6 21:59:54 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 06 Oct 2020 14:59:54 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 534375: Tab sqUnixSocket.c at 4 spaces per tab. Add HAVE_I... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 53437506e134fddff421d6d3f683984bdd328f9b https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/53437506e134fddff421d6d3f683984bdd328f9b Author: Eliot Miranda Date: 2020-10-06 (Tue, 06 Oct 2020) Changed paths: M platforms/iOS/vm/OSX/config.h M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c Log Message: ----------- Tab sqUnixSocket.c at 4 spaces per tab. Add HAVE_IFADDRS_H to iOS OSX config.h. From no-reply at appveyor.com Tue Oct 6 22:33:38 2020 From: no-reply at appveyor.com (AppVeyor) Date: Tue, 06 Oct 2020 22:33:38 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2225 Message-ID: <20201006223338.1.21A2EE249F27D2CA@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Tue Oct 6 23:20:57 2020 From: builds at travis-ci.org (Travis CI) Date: Tue, 06 Oct 2020 23:20:57 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2224 (Cog - 5343750) In-Reply-To: Message-ID: <5f7cfbd93346d_13fbf49c2d6f02581b3@travis-tasks-5dc65f78d6-rnsg8.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2224 Status: Still Failing Duration: 1 hr, 20 mins, and 45 secs Commit: 5343750 (Cog) Author: Eliot Miranda Message: Tab sqUnixSocket.c at 4 spaces per tab. Add HAVE_IFADDRS_H to iOS OSX config.h. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/59dac6b1ef13...53437506e134 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/733481754?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Tue Oct 6 23:33:38 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 06 Oct 2020 16:33:38 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] a717c6: Enable AIO_DEBUG by default on the Mac debug VMs. ... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: a717c667aac0c019bbf2cc076c8b2933cea16a7c https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/a717c667aac0c019bbf2cc076c8b2933cea16a7c Author: Eliot Miranda Date: 2020-10-06 (Tue, 06 Oct 2020) Changed paths: M build.macos32x86/common/Makefile.plugin M build.macos32x86/common/Makefile.vm M build.macos64ARMv8/common/Makefile.plugin M build.macos64ARMv8/common/Makefile.vm M build.macos64x64/common/Makefile.plugin M build.macos64x64/common/Makefile.vm M platforms/iOS/plugins/SqueakSSL/sqMacSSL.c M platforms/iOS/vm/OSX/sqSqueakOSXApplication.m M platforms/unix/vm/aio.c M platforms/unix/vm/sqUnixMain.c M platforms/unix/vm/sqaio.h Log Message: ----------- Enable AIO_DEBUG by default on the Mac debug VMs. Add a -aiolog switch to mac & unix VMs when AIO_DEBUG is defined. If -DAIO_DEBUG=1 turn on logging by default (otherwise use the -aiolog switch). Fix a glitch in SSL debug printing which will crash the VM if SSL is not yet intialized (e.g. state left over from a snapshot). [ci skip] From noreply at github.com Wed Oct 7 00:51:34 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 06 Oct 2020 17:51:34 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 5e747d: Implement a slightly mor eprincipled approach to p... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 5e747d6bdb3f6079d181dcca5799ddf28204b557 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/5e747d6bdb3f6079d181dcca5799ddf28204b557 Author: Eliot Miranda Date: 2020-10-06 (Tue, 06 Oct 2020) Changed paths: M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/unix/vm/aio.c M platforms/unix/vm/sqaio.h Log Message: ----------- Implement a slightly mor eprincipled approach to printing the names of socket aioHandler functions. [ci skip] From noreply at github.com Wed Oct 7 02:03:08 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 06 Oct 2020 19:03:08 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 9b4d95: Have aioPoll check that our SIGIO handler is in pl... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 9b4d957335cefc5b34754a4f940d2710e6645ad5 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/9b4d957335cefc5b34754a4f940d2710e6645ad5 Author: Eliot Miranda Date: 2020-10-06 (Tue, 06 Oct 2020) Changed paths: M build.macos32x86/common/Makefile.plugin M build.macos32x86/common/Makefile.vm M build.macos64ARMv8/common/Makefile.plugin M build.macos64ARMv8/common/Makefile.vm M build.macos64x64/common/Makefile.plugin M build.macos64x64/common/Makefile.vm M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/unix/vm/aio.c Log Message: ----------- Have aioPoll check that our SIGIO handler is in place. Add HAVE_CONFIG_H to the Mac build files. Have all the functions in platforms/unix/plugins/SocketPlugin/sqUnixSocket.c start on a new line. (rebuilding because of the HAVE_CONFIG_H change). From builds at travis-ci.org Wed Oct 7 02:10:08 2020 From: builds at travis-ci.org (Travis CI) Date: Wed, 07 Oct 2020 02:10:08 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2225 (Cog - 9b4d957) In-Reply-To: Message-ID: <5f7d237fa032d_13ffbb29b2d808978f@travis-tasks-7856d8c8b6-f7c94.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2225 Status: Still Failing Duration: 6 mins and 30 secs Commit: 9b4d957 (Cog) Author: Eliot Miranda Message: Have aioPoll check that our SIGIO handler is in place. Add HAVE_CONFIG_H to the Mac build files. Have all the functions in platforms/unix/plugins/SocketPlugin/sqUnixSocket.c start on a new line. (rebuilding because of the HAVE_CONFIG_H change). View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/5e747d6bdb3f...9b4d957335ce View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/733525406?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Wed Oct 7 02:37:54 2020 From: no-reply at appveyor.com (AppVeyor) Date: Wed, 07 Oct 2020 02:37:54 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2226 Message-ID: <20201007023754.1.8B90CBB104C06C0F@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Wed Oct 7 04:03:25 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 06 Oct 2020 21:03:25 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] d418c9: Fix an old bug with pollpip outputting nulls. Don... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: d418c9c36233e03ff18cce45cd76fae2c42e6104 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/d418c9c36233e03ff18cce45cd76fae2c42e6104 Author: Eliot Miranda Date: 2020-10-06 (Tue, 06 Oct 2020) Changed paths: M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/unix/vm/aio.c M platforms/unix/vm/sqaio.h Log Message: ----------- Fix an old bug with pollpip outputting nulls. Don't output carriage returns if outputting to a file. Arrange that FPRINTF will pre4pend a newline if following pollpip output. Add logging for turning on SIGIO and for setsockopt via the primitive. From builds at travis-ci.org Wed Oct 7 04:10:34 2020 From: builds at travis-ci.org (Travis CI) Date: Wed, 07 Oct 2020 04:10:34 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2226 (Cog - d418c9c) In-Reply-To: Message-ID: <5f7d3fb9ea75_13ffbb29b204c177779@travis-tasks-7856d8c8b6-f7c94.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2226 Status: Still Failing Duration: 6 mins and 33 secs Commit: d418c9c (Cog) Author: Eliot Miranda Message: Fix an old bug with pollpip outputting nulls. Don't output carriage returns if outputting to a file. Arrange that FPRINTF will pre4pend a newline if following pollpip output. Add logging for turning on SIGIO and for setsockopt via the primitive. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/9b4d957335ce...d418c9c36233 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/733542561?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Wed Oct 7 04:41:30 2020 From: no-reply at appveyor.com (AppVeyor) Date: Wed, 07 Oct 2020 04:41:30 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2227 Message-ID: <20201007044130.1.671E4F1D1BA18328@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Wed Oct 7 22:30:45 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 7 Oct 2020 22:30:45 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2835.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2835.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2835 Author: eem Time: 7 October 2020, 3:30:37.335531 pm UUID: 026231bb-5f37-4ea7-8aa1-88114061ee43 Ancestors: VMMaker.oscog-eem.2834 CameraPlugin: extend the interface to allow interrupt-driven frame receipt. =============== Diff against VMMaker.oscog-eem.2834 =============== Item was changed: ----- Method: CameraPlugin>>primCameraName (in category 'primitives') ----- primCameraName + "Answer the name for the camera with the given number. + Fail if the camera number is less than one or greater than the number of available cameras." - "Get the name for the camera with the given number. Fail if the camera number is greater than the number of available cameras." - | cameraNum nameStr count resultOop dst | + | cameraNum | - - - cameraNum := interpreterProxy stackIntegerValue: 0. + interpreterProxy failed ifFalse: + [interpreterProxy methodReturnString: (self CameraName: cameraNum)]! - interpreterProxy failed ifTrue: [^ 0]. - - nameStr := self cCode: 'CameraName(cameraNum)'. - nameStr = nil ifTrue: [ - interpreterProxy success: false. - ^ 0]. - - count := self cCode: '(int) strlen(nameStr)'. - resultOop := interpreterProxy instantiateClass: interpreterProxy classString indexableSize: count. - dst := self cCoerce: (interpreterProxy firstIndexableField: resultOop) to: 'char *'. - 0 to: count - 1 do: [:i | dst at: i put: (nameStr at: i)]. - - interpreterProxy pop: 2 thenPush: resultOop. "pop arg and rcvr, push result" - ^ 0 - ! Item was changed: ----- Method: CameraPlugin>>primCloseCamera (in category 'primitives') ----- primCloseCamera "Close the camera. Do nothing if it was not open." - | cameraNum | + | cameraNum | cameraNum := interpreterProxy stackIntegerValue: 0. interpreterProxy failed ifTrue: [^ 0]. + self CameraClose: cameraNum. - self cCode: 'CameraClose(cameraNum)'. + interpreterProxy methodReturnReceiver! - interpreterProxy pop: 1. "pop arg, leave rcvr on stack" - ^ 0 - ! Item was changed: ----- Method: CameraPlugin>>primOpenCamera (in category 'primitives') ----- primOpenCamera "Open a camera. Takes one argument, the index of the device to open." - | cameraNum desiredFrameWidth desiredFrameHeight ok | + | cameraNum desiredFrameWidth desiredFrameHeight ok | cameraNum := interpreterProxy stackIntegerValue: 2. desiredFrameWidth := interpreterProxy stackIntegerValue: 1. desiredFrameHeight := interpreterProxy stackIntegerValue: 0. + interpreterProxy failed ifTrue: [^0]. - interpreterProxy failed ifTrue: [^ 0]. + ok := self CameraOpen: cameraNum _: desiredFrameWidth _: desiredFrameHeight. + ok <= 0 ifTrue: + [interpreterProxy success: false. + ^0]. - ok := self cCode: 'CameraOpen(cameraNum, desiredFrameWidth, desiredFrameHeight)'. - ok = 0 ifTrue: [ - interpreterProxy success: false. - ^ 0]. + interpreterProxy methodReturnReceiver! - interpreterProxy pop: 3. "pop args, leave rcvr on stack" - ^ 0 - ! Item was added: + ----- Method: CameraPlugin>>primSetCameraSemaphore (in category 'primitives') ----- + primSetCameraSemaphore + "Supplies a semaphoreIndex through which to signal a semaphore when a frame is available from a camera. + Fails if the platform does not provide an interrupt-driven camera interface." + + + | cameraNum failCode semaphoreIndex | + + cameraNum := interpreterProxy stackIntegerValue: 1. + semaphoreIndex := interpreterProxy stackIntegerValue: 0. + interpreterProxy failed ifTrue: [^0]. + + failCode := self Camera: cameraNum SetSemaphore: semaphoreIndex. + failCode ~= 0 ifTrue: [^interpreterProxy primitiveFailFor: failCode]. + + interpreterProxy methodReturnReceiver! Item was changed: ----- Method: HostWindowPluginSimulator>>ioSizeOfWindowSet:x:y: (in category 'primitive simulation') ----- ioSizeOfWindowSet: windowIndex x: x y: y ^-1 + "self basicNew ioSizeOfWindowSet: 1 x: Display width - 32 y: Display height - 32" + "self basicNew ioSizeOfWindowSet: 1 x: Display width + 32 y: Display height + 32"! - "self basicNew ioSizeOfWindowSet: 1 x: 500 y: 500" - "self basicNew ioSizeOfWindowSet: 1 x: 64 y: 64"! From noreply at github.com Thu Oct 8 00:09:55 2020 From: noreply at github.com (Eliot Miranda) Date: Wed, 07 Oct 2020 17:09:55 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 87afa4: CameraPlugin as per VMMaker.oscog-eem.2835 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 87afa4d0f847217cbface064c8a76c5365c85a2e https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/87afa4d0f847217cbface064c8a76c5365c85a2e Author: Eliot Miranda Date: 2020-10-07 (Wed, 07 Oct 2020) Changed paths: M platforms/Cross/plugins/CameraPlugin/CameraPlugin.h M platforms/iOS/plugins/CameraPlugin/AVFoundationVideoGrabber.m M platforms/unix/plugins/CameraPlugin/sqCamera-linux.c M platforms/win32/plugins/CameraPlugin/winCameraOps.cpp M src/plugins/CameraPlugin/CameraPlugin.c Log Message: ----------- CameraPlugin as per VMMaker.oscog-eem.2835 CameraPlugin: extend the interface to allow interrupt-driven frame receipt. Implement the interface on Mac. Write teh code for Windows (but it is yet to be compiled, let alone tested). Stub out the code on unix. [ci skip] (until windows works too) From no-reply at appveyor.com Thu Oct 8 00:20:35 2020 From: no-reply at appveyor.com (AppVeyor) Date: Thu, 08 Oct 2020 00:20:35 +0000 Subject: [Vm-dev] Build completed: opensmalltalk-vm 1.0.2228 Message-ID: <20201008002035.1.28E142070DCF2FA8@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Thu Oct 8 02:04:33 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 8 Oct 2020 02:04:33 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2836.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2836.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2836 Author: eem Time: 7 October 2020, 7:04:24.98048 pm UUID: 9203f225-3af0-4c06-b652-99c13e86694a Ancestors: VMMaker.oscog-eem.2835 Cogoit: Fix an occasional initialization crash due to address space randomization. Don't enforce the range check in rewriteCallAt:target: et al until the Cogit is initializaed hence avoiding crashes during expectedClosedPICPrototype:'s validation. =============== Diff against VMMaker.oscog-eem.2835 =============== Item was changed: ----- Method: CogARMCompiler>>rewriteTransferAt:target: (in category 'inline cacheing') ----- rewriteTransferAt: callSiteReturnAddress target: callTargetAddress "Rewrite a call/jump instruction to call a different target. This variant is used to link PICs in ceSendMiss et al, and to rewrite call/jumps in CPICs. Answer the extent of the code change which is used to compute the range of the icache to flush." | callDistance instr | "for debug - [cogit disassembleFrom: callSiteReturnAddress - 10 to: callSiteReturnAddress - 1]." + (cogit initialized and: [callTargetAddress < cogit minCallAddress]) ifTrue: + [self error: 'linking callsite to invalid address']. - false - ifTrue: [self assert: callTargetAddress >= cogit minCallAddress] - ifFalse: [callTargetAddress >= cogit minCallAddress ifFalse: - [self error: 'linking callsite to invalid address']]. callDistance := (callTargetAddress - (callSiteReturnAddress + 8 "pc offset"- 4 "return offset")) signedIntToLong. self assert: (self isInImmediateJumpRange: callDistance). "we don't support long call updates, yet" instr := self instructionBeforeAddress: callSiteReturnAddress. self assert: ((self instructionIsB: instr) or: [self instructionIsBL: instr]). objectMemory longAt: (self instructionAddressBefore: callSiteReturnAddress) put: ((instr bitAnd: 16rFF000000) bitOr: (callDistance // 4 bitAnd: 16rFFFFFF)). self assert: (self callTargetFromReturnAddress: callSiteReturnAddress) = callTargetAddress. ^4! Item was changed: ----- Method: CogIA32Compiler>>rewriteCallAt:target: (in category 'inline cacheing') ----- rewriteCallAt: callSiteReturnAddress target: callTargetAddress "Rewrite a call instruction to call a different target. This variant is used to link PICs in ceSendMiss et al, and to rewrite cached primitive calls. Answer the extent of the code change which is used to compute the range of the icache to flush." | callDistance | "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 10 to: callSiteReturnAddress - 1]." + (cogit initialized and: [callTargetAddress < cogit minCallAddress]) ifTrue: + [self error: 'linking callsite to invalid address']. - false - ifTrue: [self assert: callTargetAddress >= cogit minCallAddress] - ifFalse: [callTargetAddress >= cogit minCallAddress ifFalse: - [self error: 'linking callsite to invalid address']]. callDistance := (callTargetAddress - callSiteReturnAddress) signedIntToLong. objectMemory byteAt: callSiteReturnAddress - 1 put: (callDistance >> 24 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 2 put: (callDistance >> 16 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 3 put: (callDistance >> 8 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 4 put: (callDistance bitAnd: 16rFF). self assert: (self callTargetFromReturnAddress: callSiteReturnAddress) = callTargetAddress. "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 10 to: callSiteReturnAddress - 1]." ^5! Item was changed: ----- Method: CogIA32Compiler>>rewriteInlineCacheAt:tag:target: (in category 'inline cacheing') ----- rewriteInlineCacheAt: callSiteReturnAddress tag: cacheTag target: callTargetAddress "Rewrite an inline cache to call a different target for a new tag. This variant is used to link unlinked sends in ceSend:to:numArgs: et al. Answer the extent of the code change which is used to compute the range of the icache to flush." | callDistance | "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 10 to: callSiteReturnAddress - 1]." + (cogit initialized and: [callTargetAddress < cogit minCallAddress]) ifTrue: + [self error: 'linking callsite to invalid address']. - false - ifTrue: [self assert: callTargetAddress >= cogit minCallAddress] - ifFalse: [callTargetAddress >= cogit minCallAddress ifFalse: - [self error: 'linking callsite to invalid address']]. callDistance := (callTargetAddress - callSiteReturnAddress) signedIntToLong. objectMemory byteAt: callSiteReturnAddress - 1 put: (callDistance >> 24 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 2 put: (callDistance >> 16 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 3 put: (callDistance >> 8 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 4 put: (callDistance bitAnd: 16rFF); byteAt: callSiteReturnAddress - 6 put: (cacheTag >> 24 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 7 put: (cacheTag >> 16 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 8 put: (cacheTag >> 8 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 9 put: (cacheTag bitAnd: 16rFF). self assert: (self callTargetFromReturnAddress: callSiteReturnAddress) = callTargetAddress. "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 10 to: callSiteReturnAddress - 1]." ^10! Item was changed: ----- Method: CogInLineLiteralsARMCompiler>>rewriteInlineCacheAt:tag:target: (in category 'inline cacheing') ----- rewriteInlineCacheAt: callSiteReturnAddress tag: cacheTag target: callTargetAddress "Rewrite an inline cache to call a different target for a new tag. This variant is used to link unlinked sends in ceSend:to:numArgs: et al. Answer the extent of the code change which is used to compute the range of the icache to flush." | call callDistance | + (cogit initialized and: [callTargetAddress < cogit minCallAddress]) ifTrue: + [self error: 'linking callsite to invalid address']. - false - ifTrue: [self assert: callTargetAddress >= cogit minCallAddress] - ifFalse: [callTargetAddress >= cogit minCallAddress ifFalse: - [self error: 'linking callsite to invalid address']]. callDistance := (callTargetAddress - (callSiteReturnAddress + 8 "pc offset"- 4 "return offset")) signedIntToLong. self assert: (self isInImmediateJumpRange: callDistance). "we don't support long call updates here" call := self bl: callDistance. objectMemory longAt: (self instructionAddressBefore: callSiteReturnAddress ) put: call. self insert32BitOperand: cacheTag into4InstructionsPreceding: (self instructionAddressBefore: callSiteReturnAddress ). self assert: (self callTargetFromReturnAddress: callSiteReturnAddress) = callTargetAddress. self assert: (self extract32BitOperandFrom4InstructionsPreceding: (self instructionAddressBefore: callSiteReturnAddress )) = cacheTag. "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 20 to: callSiteReturnAddress - 1]." ^20! Item was changed: ----- Method: CogOutOfLineLiteralsARMCompiler>>rewriteInlineCacheAt:tag:target: (in category 'inline cacheing') ----- rewriteInlineCacheAt: callSiteReturnAddress tag: cacheTag target: callTargetAddress "Rewrite an inline cache to call a different target for a new tag. This variant is used to link unlinked sends in ceSend:to:numArgs: et al. Answer the extent of the code change which is used to compute the range of the icache to flush." | call callDistance | + (cogit initialized and: [callTargetAddress < cogit minCallAddress]) ifTrue: - callTargetAddress >= cogit minCallAddress ifFalse: [self error: 'linking callsite to invalid address']. callDistance := (callTargetAddress - (callSiteReturnAddress + 8 "pc offset"- 4 "return offset")) signedIntToLong. self assert: (self isInImmediateJumpRange: callDistance). "we don't support long call updates here" call := self bl: callDistance. objectMemory longAt: (self instructionAddressBefore: callSiteReturnAddress ) put: call; longAt: (self pcRelativeAddressAt: callSiteReturnAddress - 8) put: cacheTag. self assert: (self inlineCacheTagAt: callSiteReturnAddress) = cacheTag. "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 8 to: (self pcRelativeAddressAt: callSiteReturnAddress - 8)]." ^4! Item was changed: ----- Method: CogX64Compiler>>rewriteCallAt:target: (in category 'inline cacheing') ----- rewriteCallAt: callSiteReturnAddress target: callTargetAddress "Rewrite a call instruction to call a different target. This variant is used to link PICs in ceSendMiss et al, and to rewrite cached primitive calls. Answer the extent of the code change which is used to compute the range of the icache to flush." | callDistance | "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 10 to: callSiteReturnAddress - 1]." + (cogit initialized and: [callTargetAddress < cogit minCallAddress]) ifTrue: + [self error: 'linking callsite to invalid address']. - false - ifTrue: [self assert: callTargetAddress >= cogit minCallAddress] - ifFalse: [callTargetAddress >= cogit minCallAddress ifFalse: - [self error: 'linking callsite to invalid address']]. callDistance := (callTargetAddress - callSiteReturnAddress) signedIntToLong. objectMemory byteAt: callSiteReturnAddress - 1 put: (callDistance >> 24 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 2 put: (callDistance >> 16 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 3 put: (callDistance >> 8 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 4 put: (callDistance bitAnd: 16rFF). self assert: (self callTargetFromReturnAddress: callSiteReturnAddress) = callTargetAddress. "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 10 to: callSiteReturnAddress - 1]." ^5! Item was changed: ----- Method: CogX64Compiler>>rewriteInlineCacheAt:tag:target: (in category 'inline cacheing') ----- rewriteInlineCacheAt: callSiteReturnAddress tag: cacheTag target: callTargetAddress "Rewrite an inline cache to call a different target for a new tag. This variant is used to link unlinked sends in ceSend:to:numArgs: et al. Answer the extent of the code change which is used to compute the range of the icache to flush. N.B. On 64-bit platforms the inline cache tag is only 32-bits wide, hence this code is identical to that for the IA32." | callDistance | "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 12 to: callSiteReturnAddress - 1]." + (cogit initialized and: [callTargetAddress < cogit minCallAddress]) ifTrue: + [self error: 'linking callsite to invalid address']. - false - ifTrue: [self assert: callTargetAddress >= cogit minCallAddress] - ifFalse: [callTargetAddress >= cogit minCallAddress ifFalse: - [self error: 'linking callsite to invalid address']]. callDistance := (callTargetAddress - callSiteReturnAddress) signedIntToLong. objectMemory byteAt: callSiteReturnAddress - 1 put: (callDistance >> 24 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 2 put: (callDistance >> 16 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 3 put: (callDistance >> 8 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 4 put: (callDistance bitAnd: 16rFF); byteAt: callSiteReturnAddress - 6 put: (cacheTag >> 24 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 7 put: (cacheTag >> 16 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 8 put: (cacheTag >> 8 bitAnd: 16rFF); byteAt: callSiteReturnAddress - 9 put: (cacheTag bitAnd: 16rFF). self assert: (self callTargetFromReturnAddress: callSiteReturnAddress) = callTargetAddress. "self cCode: '' inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 12 to: callSiteReturnAddress - 1]." ^12! Item was changed: ----- Method: Cogit>>initialized (in category 'testing') ----- initialized + "Answerr if the code generator has been initialized (all trampolines and prtotypes + have been generated and the code generator is ready to start compiling methods. + Since the last thing is the generation of the open PIC prototype, its size is the marker." + + ^self cCode: [openPICSize] inSmalltalk: [openPICSize isInteger]! - - ^openPICSize isInteger! Item was changed: ----- Method: InterpreterPrimitives>>primitiveSetDisplayMode (in category 'I/O primitives') ----- primitiveSetDisplayMode + "Ask the GUI to set the requested display mode. - "Ask trhe GUI to set the requested display mode. See DisplayScreen class depth:width:height:fullscreen:" | fsFlag h w d okay | fsFlag := self booleanValueOf: self stackTop. h := self stackIntegerValue: 1. w := self stackIntegerValue: 2. d := self stackIntegerValue: 3. self successful ifFalse: [^self primitiveFailFor: PrimErrBadArgument]. okay := self ioSetDisplayMode: w _: h _: d _: fsFlag. self successful ifFalse: [^self primitiveFailFor: PrimErrOperationFailed]. self methodReturnBool: okay! Item was changed: ----- Method: VMClass class>>openCogitMultiWindowBrowser (in category 'utilities') ----- openCogitMultiWindowBrowser "Answer a new multi-window browser on the ObjectMemory classes, the Cog Interpreter classes, and the main JIT classes" "self openCogitMultiWindowBrowser" | b | b := Browser open. + {CogRTLOpcodes. CogAbstractRegisters. CogAbstractInstruction }, - {CogRTLOpcodes. CogAbstractRegisters }, self sortedAbstractInstructionClasses, Cogit withAllSubclasses, {CogMethodZone }, CogObjectRepresentation withAllSubclasses, CogBytecodeFixup withAllSubclasses, CogSimStackEntry withAllSubclasses, {VMStructType. VMMaker. CCodeGenerator. TMethod} do: [:class| b selectCategoryForClass: class; selectClass: class] separatedBy: [b multiWindowState addNewWindow]. b multiWindowState selectWindowIndex: 1! From noreply at github.com Thu Oct 8 03:27:48 2020 From: noreply at github.com (Eliot Miranda) Date: Wed, 07 Oct 2020 20:27:48 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 268e45: CogVm source as per VMMaker.oscog-eem.2836 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 268e45d74b1c2bc24376f2e64276e8d0b9c46031 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/268e45d74b1c2bc24376f2e64276e8d0b9c46031 Author: Eliot Miranda Date: 2020-10-07 (Wed, 07 Oct 2020) Changed paths: M nsspur64src/vm/cogit.h M nsspur64src/vm/cogitARMv8.c M nsspur64src/vm/cogitX64SysV.c M nsspur64src/vm/cogitX64WIN64.c M nsspur64src/vm/cointerp.c M nsspur64src/vm/cointerp.h M nsspur64src/vm/gcc3x-cointerp.c M nsspursrc/vm/cogit.h M nsspursrc/vm/cogitARMv5.c M nsspursrc/vm/cogitIA32.c M nsspursrc/vm/cogitMIPSEL.c M nsspursrc/vm/cointerp.c M nsspursrc/vm/cointerp.h M nsspursrc/vm/gcc3x-cointerp.c M nsspurstack64src/vm/gcc3x-interp.c M nsspurstack64src/vm/interp.c M nsspurstacksrc/vm/gcc3x-interp.c M nsspurstacksrc/vm/interp.c M platforms/win32/plugins/AsynchFilePlugin/sqWin32AsyncFilePrims.c M platforms/win32/plugins/B3DAcceleratorPlugin/sqWin32D3D.c M platforms/win32/plugins/B3DAcceleratorPlugin/sqWin32OpenGL.c M platforms/win32/plugins/CameraPlugin/winCameraOps.cpp M platforms/win32/plugins/CroquetPlugin/sqWin32CroquetPlugin.c M platforms/win32/plugins/DropPlugin/sqWin32Drop.c M platforms/win32/plugins/FileAttributesPlugin/faSupport.h M platforms/win32/plugins/FilePlugin/sqWin32FilePrims.c M platforms/win32/plugins/FontPlugin/sqWin32FontPlugin.c M platforms/win32/plugins/HostWindowPlugin/sqWin32HostWindowPlugin.c M platforms/win32/plugins/JoystickTabletPlugin/sqWin32Joystick.c M platforms/win32/plugins/LocalePlugin/sqWin32Locale.c M platforms/win32/plugins/MIDIPlugin/sqWin32MIDI.c M platforms/win32/plugins/RomePlugin/sqWin32RomePlugin.c M platforms/win32/plugins/SecurityPlugin/sqWin32Security.c M platforms/win32/plugins/SerialPlugin/sqWin32SerialPort.c M platforms/win32/plugins/SocketPlugin/sqWin32NewNet.c M platforms/win32/plugins/SoundPlugin/sqWin32Sound.c M platforms/win32/plugins/SqueakFFIPrims/sqWin32FFI.c M platforms/win32/plugins/SqueakSSL/sqWin32SSL.c M platforms/win32/plugins/UUIDPlugin/sqWin32UUID.c M spur64src/vm/cogit.h M spur64src/vm/cogitARMv8.c M spur64src/vm/cogitX64SysV.c M spur64src/vm/cogitX64WIN64.c M spur64src/vm/cointerp.c M spur64src/vm/cointerp.h M spur64src/vm/cointerpmt.c M spur64src/vm/cointerpmt.h M spur64src/vm/gcc3x-cointerp.c M spur64src/vm/gcc3x-cointerpmt.c M spurlowcode64src/vm/cogit.h M spurlowcode64src/vm/cogitARMv8.c M spurlowcode64src/vm/cogitX64SysV.c M spurlowcode64src/vm/cogitX64WIN64.c M spurlowcode64src/vm/cointerp.c M spurlowcode64src/vm/cointerp.h M spurlowcode64src/vm/gcc3x-cointerp.c M spurlowcodesrc/vm/cogit.h M spurlowcodesrc/vm/cogitARMv5.c M spurlowcodesrc/vm/cogitIA32.c M spurlowcodesrc/vm/cogitMIPSEL.c M spurlowcodesrc/vm/cointerp.c M spurlowcodesrc/vm/cointerp.h M spurlowcodesrc/vm/gcc3x-cointerp.c M spurlowcodestack64src/vm/gcc3x-interp.c M spurlowcodestack64src/vm/interp.c M spurlowcodestacksrc/vm/gcc3x-interp.c M spurlowcodestacksrc/vm/interp.c M spursista64src/vm/cogit.h M spursista64src/vm/cogitARMv8.c M spursista64src/vm/cogitX64SysV.c M spursista64src/vm/cogitX64WIN64.c M spursista64src/vm/cointerp.c M spursista64src/vm/cointerp.h M spursista64src/vm/gcc3x-cointerp.c M spursistasrc/vm/cogit.h M spursistasrc/vm/cogitARMv5.c M spursistasrc/vm/cogitIA32.c M spursistasrc/vm/cogitMIPSEL.c M spursistasrc/vm/cointerp.c M spursistasrc/vm/cointerp.h M spursistasrc/vm/gcc3x-cointerp.c M spursrc/vm/cogit.h M spursrc/vm/cogitARMv5.c M spursrc/vm/cogitIA32.c M spursrc/vm/cogitMIPSEL.c M spursrc/vm/cointerp.c M spursrc/vm/cointerp.h M spursrc/vm/cointerpmt.c M spursrc/vm/cointerpmt.h M spursrc/vm/gcc3x-cointerp.c M spursrc/vm/gcc3x-cointerpmt.c M spurstack64src/vm/gcc3x-interp.c M spurstack64src/vm/interp.c M spurstack64src/vm/validImage.c M spurstacksrc/vm/gcc3x-interp.c M spurstacksrc/vm/interp.c M spurstacksrc/vm/validImage.c M src/vm/cogit.h M src/vm/cogitARMv5.c M src/vm/cogitIA32.c M src/vm/cogitMIPSEL.c M src/vm/cointerp.c M src/vm/cointerp.h M src/vm/cointerpmt.c M src/vm/cointerpmt.h M src/vm/gcc3x-cointerp.c M src/vm/gcc3x-cointerpmt.c M stacksrc/vm/gcc3x-interp.c M stacksrc/vm/interp.c Log Message: ----------- CogVm source as per VMMaker.oscog-eem.2836 Cogit: Fix an occasional initialization crash due to address space randomization. Don't enforce the range check in rewriteCallAt:target: et al until the Cogit is initializaed hence avoiding crashes during expectedClosedPICPrototype:'s validation. Eliminate the warning by making them all . CameraPlugin: implement the interrupt-driven interface on Windows. From builds at travis-ci.org Thu Oct 8 03:34:27 2020 From: builds at travis-ci.org (Travis CI) Date: Thu, 08 Oct 2020 03:34:27 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2227 (Cog - 268e45d) In-Reply-To: Message-ID: <5f7e88c2ecc47_13fe864fb6418170950@travis-tasks-dd5c8c597-m5xg5.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2227 Status: Still Failing Duration: 6 mins and 7 secs Commit: 268e45d (Cog) Author: Eliot Miranda Message: CogVm source as per VMMaker.oscog-eem.2836 Cogit: Fix an occasional initialization crash due to address space randomization. Don't enforce the range check in rewriteCallAt:target: et al until the Cogit is initializaed hence avoiding crashes during expectedClosedPICPrototype:'s validation. Eliminate the warning by making them all . CameraPlugin: implement the interrupt-driven interface on Windows. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/87afa4d0f847...268e45d74b1c View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/733861283?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Thu Oct 8 04:02:40 2020 From: no-reply at appveyor.com (AppVeyor) Date: Thu, 08 Oct 2020 04:02:40 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2229 Message-ID: <20201008040240.1.8B3E236102272525@appveyor.com> An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Thu Oct 8 17:58:59 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu, 8 Oct 2020 10:58:59 -0700 Subject: [Vm-dev] Installing high dpi support and backwards compatibility of the VM Message-ID: Hi All, ideally adding the high dpi support to the VM will not break backwards-compatibility. But that implies that the VM is informed before it creates the display of whether to create a high dpi display or not. Off-list Tobias asked me where the VM sets up the display on Mac and I was surprised by the answer. I thought it would be as part of beDisplay. But it's actually as a side-effect of DisplayScreen class>>actualScreenSize, primitive 106, which calls the ioScreenSize function. It is this functions' responsibility to actually create the display, deriving the size from the savedWindowSize info in the image header (which can or could be overridden on the VM command line, and is when -headless is supplied). So any new primitive added to allow DisplayScreen to inform the VM of whether to use high dpi or not would have to be invoked before primitive 106. So one way to implement this is to modify the chain of invocations leading up to primitive 106. For this route I'd like to propose the following refactoring: DisplayScreen class>>actualScreenSize ^ 640 at 480 becomes DisplayScreen class>>actualScreenSize self primitiveUseHighDPI: self useHighDPI. "where this is a preference" ^self primitiveScreenSize primitiveScreenSize ^ 640 at 480 Another route is to make the useHighDPI flag part of the image header state alongside the saved window size. This would mean it was added to the flags accessed via vmParameterAt: 48. There could be a command-line argument to override. Finally I note that the beDisplay primitive simply stores the display object in the specialObjectsArray and assigns the interpreter variables that track the display, displayBits, displayWidth, displayHeight & displayDepth. It then invokes ioNoteDisplayChangedwidthheightdepth, but *all* the implementations of this function are empty. I propose that we should eliminate 5this call and its implementation. It is confusing to follow it and find it does nothing. The argument could be that a platform might require it. But if that's so we can always put it back. We have an existence proof in all our platforms that this is unlikely. Thoughts? _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Thu Oct 8 18:26:39 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 8 Oct 2020 18:26:39 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2837.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2837.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2837 Author: eem Time: 8 October 2020, 11:26:31.348674 am UUID: 1585531f-f2b9-4ddc-b11c-668c69eca442 Ancestors: VMMaker.oscog-eem.2836 Rename CogVMFlags to ImageHeaderFlags. =============== Diff against VMMaker.oscog-eem.2836 =============== Item was removed: - ----- Method: CoInterpreter>>getCogVMFlags (in category 'internal interpreter access') ----- - getCogVMFlags - "Answer an array of flags indicating various properties of the Cog VM. - These are the same as the image header flags shifted right two bits (excluding float order and full screen flags). - Bit 0: specific to CoInterpreterMT - Bit 1: if set, methods that are interpreted will have the flag bit set in their header - Bit 2: if set, implies preempting a process does not put it to the back of its run queue - Bit 3: specific to CoInterpreterMT - Bit 4: if set, implies the new finalization scheme where WeakArrays are queued - Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events - Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" - ^objectMemory integerObjectOf: (flagInterpretedMethods ifTrue: [2] ifFalse: [0]) - + (preemptionYields ifTrue: [0] ifFalse: [4]) - + (newFinalization ifTrue: [16] ifFalse: [0]) - + (sendWheelEvents ifTrue: [32] ifFalse: [0]) - + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [64]) - + (imageHeaderFlags >> 2 bitClear: 2 + 4 + 16 + 32 + 64)! Item was changed: + ----- Method: CoInterpreter>>getImageHeaderFlags (in category 'internal interpreter access') ----- - ----- Method: CoInterpreter>>getImageHeaderFlags (in category 'image save/restore') ----- getImageHeaderFlags + "Answer an array of flags indicating various properties of the Cog VM. + These are the same as the image header flags shifted right two bits (excluding float order and full screen flags). + Bit 0: specific to CoInterpreterMT + Bit 1: if set, methods that are interpreted will have the flag bit set in their header + Bit 2: if set, implies preempting a process does not put it to the back of its run queue + Bit 3: specific to CoInterpreterMT + Bit 4: if set, implies the new finalization scheme where WeakArrays are queued + Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events + Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" + ^objectMemory integerObjectOf: (flagInterpretedMethods ifTrue: [2] ifFalse: [0]) + + (preemptionYields ifTrue: [0] ifFalse: [4]) + + (newFinalization ifTrue: [16] ifFalse: [0]) + + (sendWheelEvents ifTrue: [32] ifFalse: [0]) + + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [64]) + + (imageHeaderFlags >> 2 bitClear: 2 + 4 + 16 + 32 + 64)! - "Answer the flags that are contained in the 7th long of the image header." - ^fullScreenFlag "0 or 1" - + (VMBIGENDIAN ifTrue: [0] ifFalse: [2]) "this is the imageFloatsLittleEndian flag" - + (flagInterpretedMethods ifTrue: [8] ifFalse: [0]) - + (preemptionYields ifTrue: [0] ifFalse: [16r10]) - + (newFinalization ifTrue: [16r40] ifFalse: [0]) - + (sendWheelEvents ifTrue: [16r80] ifFalse: [0]) - + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [16r100]) - + (imageHeaderFlags bitClear: 16r1DB) "these are any flags we do not recognize"! Item was removed: - ----- Method: CoInterpreter>>setCogVMFlags: (in category 'internal interpreter access') ----- - setCogVMFlags: flags - "Set an array of flags indicating various properties of the Cog VM. - Bit 0: if set, implies the image's Process class has threadId as its 3rd inst var (zero relative) - Bit 1: if set, methods that are interpreted will have the flag bit set in their header - Bit 2: if set, implies preempting a process does not put it to the back of its run queue - Bit 3: if set, implies a threaded VM will not dosown the VM if owned by the GUI thread - Bit 4: if set, implies the new finalization scheme where WeakArrays are queued - Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events - Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" - flags asUnsignedInteger > 127 ifTrue: - [^self primitiveFailFor: PrimErrUnsupported]. - "processHasThreadId := flags anyMask: 1. specific to CoInterpreterMT" - flagInterpretedMethods := flags anyMask: 2. - preemptionYields := flags noMask: 4. - "noThreadingOfGUIThread := flags anyMask: 8.. specific to CoInterpreterMT" - newFinalization := flags anyMask: 16. - sendWheelEvents := flags anyMask: 32. - primitiveDoMixedArithmetic := flags noMask: 64! Item was added: + ----- Method: CoInterpreter>>setImageHeaderFlags: (in category 'internal interpreter access') ----- + setImageHeaderFlags: flags + "Set an array of flags indicating various properties of the Cog VM. + Bit 0: if set, implies the image's Process class has threadId as its 3rd inst var (zero relative) + Bit 1: if set, methods that are interpreted will have the flag bit set in their header + Bit 2: if set, implies preempting a process does not put it to the back of its run queue + Bit 3: if set, implies a threaded VM will not dosown the VM if owned by the GUI thread + Bit 4: if set, implies the new finalization scheme where WeakArrays are queued + Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events + Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" + flags asUnsignedInteger > 127 ifTrue: + [^self primitiveFailFor: PrimErrUnsupported]. + "processHasThreadId := flags anyMask: 1. specific to CoInterpreterMT" + flagInterpretedMethods := flags anyMask: 2. + preemptionYields := flags noMask: 4. + "noThreadingOfGUIThread := flags anyMask: 8.. specific to CoInterpreterMT" + newFinalization := flags anyMask: 16. + sendWheelEvents := flags anyMask: 32. + primitiveDoMixedArithmetic := flags noMask: 64! Item was removed: - ----- Method: CoInterpreterMT>>getCogVMFlags (in category 'internal interpreter access') ----- - getCogVMFlags - "Answer an array of flags indicating various properties of the Cog VM. - These are the same as the image header flags shifted right two bits (excluding float order and full screen flags). - Bit 0: implies the image's Process class has threadId as its 3rd inst var (zero relative) - Bit 1: if set, methods that are interpreted will have the flag bit set in their header - Bit 2: if set, implies preempting a process does not put it to the back of its run queue - Bit 3: if set, implies the GUI will run on the first thread and event queues will not be accessed from other threads - Bit 4: if set, implies the new finalization scheme where WeakArrays are queued - Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events - Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" - ^objectMemory integerObjectOf: (processHasThreadId ifTrue: [1] ifFalse: [0]) - + (flagInterpretedMethods ifTrue: [2] ifFalse: [0]) - + (preemptionYields ifTrue: [0] ifFalse: [4]) - + (noThreadingOfGUIThread ifTrue: [8] ifFalse: [0]) - + (newFinalization ifTrue: [16] ifFalse: [0]) - + (sendWheelEvents ifTrue: [32] ifFalse: [0]) - + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [64]) - + (imageHeaderFlags >> 2 bitClear: 1 + 2 + 4 + 8 + 16 + 32 + 64)! Item was changed: + ----- Method: CoInterpreterMT>>getImageHeaderFlags (in category 'internal interpreter access') ----- - ----- Method: CoInterpreterMT>>getImageHeaderFlags (in category 'image save/restore') ----- getImageHeaderFlags + "Answer an array of flags indicating various properties of the Cog VM. + These are the same as the image header flags shifted right two bits (excluding float order and full screen flags). + Bit 0: implies the image's Process class has threadId as its 3rd inst var (zero relative) + Bit 1: if set, methods that are interpreted will have the flag bit set in their header + Bit 2: if set, implies preempting a process does not put it to the back of its run queue + Bit 3: if set, implies the GUI will run on the first thread and event queues will not be accessed from other threads + Bit 4: if set, implies the new finalization scheme where WeakArrays are queued + Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events + Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" + ^objectMemory integerObjectOf: (processHasThreadId ifTrue: [1] ifFalse: [0]) + + (flagInterpretedMethods ifTrue: [2] ifFalse: [0]) + + (preemptionYields ifTrue: [0] ifFalse: [4]) + + (noThreadingOfGUIThread ifTrue: [8] ifFalse: [0]) + + (newFinalization ifTrue: [16] ifFalse: [0]) + + (sendWheelEvents ifTrue: [32] ifFalse: [0]) + + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [64]) + + (imageHeaderFlags >> 2 bitClear: 1 + 2 + 4 + 8 + 16 + 32 + 64)! - "Answer the flags that are contained in the 7th long of the image header." - ^fullScreenFlag "0 or 1" - + (VMBIGENDIAN ifTrue: [0] ifFalse: [2]) "this is the imageFloatsLittleEndian flag" - + (processHasThreadId ifTrue: [4] ifFalse: [0]) - + (flagInterpretedMethods ifTrue: [8] ifFalse: [0]) - + (preemptionYields ifTrue: [0] ifFalse: [16r10]) - + (noThreadingOfGUIThread ifTrue: [16r20] ifFalse: [0]) - + (newFinalization ifTrue: [16r40] ifFalse: [0]) - + (sendWheelEvents ifTrue: [16r80] ifFalse: [0]) - + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [16r100]) - + (imageHeaderFlags bitClear: 16r1FF) "these are any flags we do not recognize"! Item was removed: - ----- Method: CoInterpreterMT>>setCogVMFlags: (in category 'internal interpreter access') ----- - setCogVMFlags: flags - "Set an array of flags indicating various properties of the Cog VM. - Bit 0: if set, implies the image's Process class has threadId as its 3rd inst var (zero relative) - Bit 1: if set, methods that are interpreted will have the flag bit set in their header - Bit 2: if set, implies preempting a process does not put it to the back of its run queue - Bit 3: if set, implies a threaded VM will not dosown the VM if owned by the GUI thread - Bit 4: if set, implies the new finalization scheme where WeakArrays are queued - Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events - Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" - flags asUnsignedInteger > 127 ifTrue: - [^self primitiveFailFor: PrimErrUnsupported]. - processHasThreadId := flags anyMask: 1. - flagInterpretedMethods := flags anyMask: 2. - preemptionYields := flags noMask: 4. - noThreadingOfGUIThread := flags anyMask: 8. - newFinalization := flags anyMask: 16. - sendWheelEvents := flags anyMask: 32. - primitiveDoMixedArithmetic := flags noMask: 64! Item was added: + ----- Method: CoInterpreterMT>>setImageHeaderFlags: (in category 'internal interpreter access') ----- + setImageHeaderFlags: flags + "Set an array of flags indicating various properties of the Cog VM. + Bit 0: if set, implies the image's Process class has threadId as its 3rd inst var (zero relative) + Bit 1: if set, methods that are interpreted will have the flag bit set in their header + Bit 2: if set, implies preempting a process does not put it to the back of its run queue + Bit 3: if set, implies a threaded VM will not dosown the VM if owned by the GUI thread + Bit 4: if set, implies the new finalization scheme where WeakArrays are queued + Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events + Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" + flags asUnsignedInteger > 127 ifTrue: + [^self primitiveFailFor: PrimErrUnsupported]. + processHasThreadId := flags anyMask: 1. + flagInterpretedMethods := flags anyMask: 2. + preemptionYields := flags noMask: 4. + noThreadingOfGUIThread := flags anyMask: 8. + newFinalization := flags anyMask: 16. + sendWheelEvents := flags anyMask: 32. + primitiveDoMixedArithmetic := flags noMask: 64! Item was removed: - ----- Method: CogVMSimulator>>getCogVMFlags (in category 'multi-threading simulation switch') ----- - getCogVMFlags - "This method includes or excludes CoInterpreterMT methods as required. - Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate" - - ^self perform: #getCogVMFlags - withArguments: {} - inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was changed: ----- Method: CogVMSimulator>>getImageHeaderFlags (in category 'multi-threading simulation switch') ----- getImageHeaderFlags "This method includes or excludes CoInterpreterMT methods as required. Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate" ^self perform: #getImageHeaderFlags withArguments: {} inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was removed: - ----- Method: CogVMSimulator>>setCogVMFlags: (in category 'multi-threading simulation switch') ----- - setCogVMFlags: flags - "This method includes or excludes CoInterpreterMT methods as required. - Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate" - - ^self perform: #setCogVMFlags: - withArguments: {flags} - inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was added: + ----- Method: CogVMSimulator>>setImageHeaderFlags: (in category 'multi-threading simulation switch') ----- + setImageHeaderFlags: flags + "This method includes or excludes CoInterpreterMT methods as required. + Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate" + + ^self perform: #setImageHeaderFlags: + withArguments: {flags} + inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was removed: - ----- Method: StackInterpreter>>getCogVMFlags (in category 'internal interpreter access') ----- - getCogVMFlags - "Answer an array of flags indicating various properties of the Cog VM. - These are the same as the image header flags shifted right two bits (excluding float order and full screen flags). - Bit 0: specific to CoInterpreterMT - Bit 1: specific to CoInterpreter - Bit 2: if set, implies preempting a process does not put it to the back of its run queue - Bit 3: specific to CoInterpreterMT - Bit 4: if set, implies the new finalization scheme where WeakArrays are queued - Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events - Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" - ^objectMemory integerObjectOf: (preemptionYields ifTrue: [0] ifFalse: [4]) - + (newFinalization ifTrue: [16] ifFalse: [0]) - + (sendWheelEvents ifTrue: [32] ifFalse: [0]) - + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [64]) - + (imageHeaderFlags >> 2 bitClear: 4 + 16 + 32 + 64)! Item was changed: + ----- Method: StackInterpreter>>getImageHeaderFlags (in category 'internal interpreter access') ----- - ----- Method: StackInterpreter>>getImageHeaderFlags (in category 'image save/restore') ----- getImageHeaderFlags + "Answer an array of flags indicating various properties of the Cog VM. + These are the same as the image header flags shifted right two bits (excluding float order and full screen flags). + Bit 0: specific to CoInterpreterMT + Bit 1: specific to CoInterpreter + Bit 2: if set, implies preempting a process does not put it to the back of its run queue + Bit 3: specific to CoInterpreterMT + Bit 4: if set, implies the new finalization scheme where WeakArrays are queued + Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events + Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" + ^objectMemory integerObjectOf: (preemptionYields ifTrue: [0] ifFalse: [4]) + + (newFinalization ifTrue: [16] ifFalse: [0]) + + (sendWheelEvents ifTrue: [32] ifFalse: [0]) + + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [64]) + + (imageHeaderFlags >> 2 bitClear: 4 + 16 + 32 + 64)! - "Answer the flags that are contained in the 7th long of the image header." - ^fullScreenFlag "0 or 1" - + (VMBIGENDIAN ifTrue: [0] ifFalse: [2]) "this is the imageFloatsLittleEndian flag" - + (preemptionYields ifTrue: [0] ifFalse: [16r10]) - + (newFinalization ifTrue: [16r40] ifFalse: [0]) - + (sendWheelEvents ifTrue: [16r80] ifFalse: [0]) - + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [16r100]) - + (imageHeaderFlags bitClear: 16r1D3) "these are any flags we do not recognize"! Item was removed: - ----- Method: StackInterpreter>>setCogVMFlags: (in category 'internal interpreter access') ----- - setCogVMFlags: flags - "Set an array of flags indicating various properties of the Cog VM. - Bit 2: if set, implies preempting a process does not put it to the back of its run queue - Bit 4: if set, implies the new finalization scheme where WeakArrays are queued - Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events - Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" - flags asUnsignedInteger > 127 ifTrue: - [^self primitiveFailFor: PrimErrUnsupported]. - "processHasThreadId := flags anyMask: 1. specific to CoInterpreterMT" - "flagInterpretedMethods := flags anyMask: 2. specific to CoInterpreter" - preemptionYields := flags noMask: 4. - "noThreadingOfGUIThread := flags anyMask: 8.. specific to CoInterpreterMT" - newFinalization := flags anyMask: 16. - sendWheelEvents := flags anyMask: 32. - primitiveDoMixedArithmetic := flags noMask: 64! Item was added: + ----- Method: StackInterpreter>>setImageHeaderFlags: (in category 'internal interpreter access') ----- + setImageHeaderFlags: flags + "Set an array of flags indicating various properties of the Cog VM. + Bit 2: if set, implies preempting a process does not put it to the back of its run queue + Bit 4: if set, implies the new finalization scheme where WeakArrays are queued + Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events + Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" + flags asUnsignedInteger > 127 ifTrue: + [^self primitiveFailFor: PrimErrUnsupported]. + "processHasThreadId := flags anyMask: 1. specific to CoInterpreterMT" + "flagInterpretedMethods := flags anyMask: 2. specific to CoInterpreter" + preemptionYields := flags noMask: 4. + "noThreadingOfGUIThread := flags anyMask: 8.. specific to CoInterpreterMT" + newFinalization := flags anyMask: 16. + sendWheelEvents := flags anyMask: 32. + primitiveDoMixedArithmetic := flags noMask: 64! Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveAllVMParameters: (in category 'system control primitives') ----- (excessive size, no diff calculated) Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveGetVMParameter: (in category 'system control primitives') ----- primitiveGetVMParameter: arg "See primitiveVMParameter method comment. N.B. written as a returning case to avoid branch limits in the V3 bytecode set." arg caseOf: { [1] -> [^self positiveMachineIntegerFor: objectMemory oldSpaceSize]. [2] -> [^objectMemory integerObjectOf: objectMemory newSpaceSize]. [3] -> [^self positiveMachineIntegerFor: objectMemory totalMemorySize]. [6] -> [^objectMemory integerObjectOf: objectMemory tenuringThreshold]. [7] -> [^objectMemory integerObjectOf: objectMemory statFullGCs]. [8] -> [^objectMemory integerObjectOf: objectMemory statFullGCUsecs + 500 // 1000]. [9] -> [^objectMemory integerObjectOf: (objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory statScavenges] ifFalse: [objectMemory statIncrGCs])]. [10] -> [^objectMemory integerObjectOf: (objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory statScavengeGCUsecs] ifFalse: [objectMemory statIncrGCUsecs]) + 500 // 1000]. [11] -> [^objectMemory integerObjectOf: objectMemory statTenures]. [12] -> [^ConstZero]. "Was JITTER VM info" [13] -> [^self getVMTickerStartUSecs]. [14] -> [^self getVMTickerCount]. [15] -> [^self getVMTickeeCallCount]. [16] -> [^self positive64BitIntegerFor: statIdleUsecs]. [17] -> [^(SistaVM and: [self isCog]) ifTrue: [objectMemory floatObjectOf: self getCogCodeZoneThreshold] ifFalse: [ConstZero]]. [18] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory statCompactionUsecs + 500 // 1000] ifFalse: [ConstZero]]. [19] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory scavengeThresholdAsExtent] ifFalse: [ConstZero]]. [20] -> [^objectMemory positive64BitIntegerFor: self ioUTCStartMicroseconds]. [21] -> [^objectMemory integerObjectOf: objectMemory rootTableCount]. [22] -> [^objectMemory integerObjectOf: objectMemory statRootTableOverflows]. [23] -> [^objectMemory integerObjectOf: extraVMMemory]. [24] -> [^objectMemory integerObjectOf: objectMemory shrinkThreshold]. [25] -> [^objectMemory integerObjectOf: objectMemory growHeadroom]. [26] -> [^objectMemory integerObjectOf: self ioHeartbeatMilliseconds]. [27] -> [^objectMemory integerObjectOf: objectMemory statMarkCount]. [28] -> [^objectMemory integerObjectOf: objectMemory statSweepCount]. [29] -> [^objectMemory integerObjectOf: objectMemory statMkFwdCount]. [30] -> [^objectMemory integerObjectOf: objectMemory statCompMoveCount]. [31] -> [^objectMemory integerObjectOf: objectMemory statGrowMemory]. [32] -> [^objectMemory integerObjectOf: objectMemory statShrinkMemory]. [33] -> [^objectMemory integerObjectOf: objectMemory statRootTableCount]. [34] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue:"was statAllocationCount" [objectMemory positive64BitIntegerFor: objectMemory currentAllocatedBytes]]. [35] -> [^objectMemory integerObjectOf: objectMemory statSurvivorCount]. [36] -> [^objectMemory integerObjectOf: (self microsecondsToMilliseconds: objectMemory statGCEndUsecs)]. [37] -> [^objectMemory integerObjectOf: objectMemory statSpecialMarkCount]. [38] -> [^objectMemory integerObjectOf: objectMemory statIGCDeltaUsecs + 500 // 1000]. [39] -> [^objectMemory integerObjectOf: statPendingFinalizationSignals]. [40] -> [^objectMemory integerObjectOf: objectMemory wordSize]. [41] -> [^objectMemory integerObjectOf: self imageFormatVersion]. [42] -> [^objectMemory integerObjectOf: numStackPages]. [43] -> [^objectMemory integerObjectOf: desiredNumStackPages]. [44] -> [^objectMemory integerObjectOf: objectMemory edenBytes]. [45] -> [^objectMemory integerObjectOf: desiredEdenBytes]. [46] -> [^self getCogCodeSize]. [47] -> [^self getDesiredCogCodeSize]. + [48] -> [^self getImageHeaderFlags]. - [48] -> [^self getCogVMFlags]. [49] -> [^objectMemory integerObjectOf: self ioGetMaxExtSemTableSize]. [52] -> [^objectMemory integerObjectOf: objectMemory rootTableCapacity]. [53] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory numSegments]]. [54] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory freeSize]]. [55] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory floatObjectOf: objectMemory getHeapGrowthToSizeGCRatio]]. [56] -> [^self positive64BitIntegerFor: statProcessSwitch]. [57] -> [^self positive64BitIntegerFor: statIOProcessEvents]. [58] -> [^self positive64BitIntegerFor: statForceInterruptCheck]. [59] -> [^self positive64BitIntegerFor: statCheckForEvents]. [60] -> [^self positive64BitIntegerFor: statStackOverflow]. [61] -> [^self positive64BitIntegerFor: statStackPageDivorce]. [62] -> [^self getCodeCompactionCount]. [63] -> [^self getCodeCompactionMSecs]. [64] -> [^self getCogMethodCount]. [65] -> [^self getCogVMFeatureFlags]. [66] -> [^objectMemory integerObjectOf: self stackPageByteSize]. [67] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [self positiveMachineIntegerFor: objectMemory maxOldSpaceSize]]. [68] -> [^objectMemory floatObjectOf: stackPages statAverageLivePagesWhenMapping]. [69] -> [^objectMemory integerObjectOf: stackPages statMaxPageCountWhenMapping]. [70] -> [^objectMemory integerObjectOf: self vmProxyMajorVersion]. [71] -> [^objectMemory integerObjectOf: self vmProxyMinorVersion]. [72] -> [^objectMemory integerObjectOf: objectMemory statMarkUsecs + 500 // 1000]. [73] -> [^objectMemory integerObjectOf: objectMemory statSweepUsecs + 500 // 1000]. [74] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory statMaxAllocSegmentTime + 500 // 1000]]. [75] -> [^objectMemory booleanObjectOf: self primitiveDoMixedArithmetic] } otherwise: [^nil]! Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveSetVMParameter:arg: (in category 'system control primitives') ----- primitiveSetVMParameter: index arg: argOop "See primitiveVMParameter method comment" | arg result | "argOop read & checks; in most cases this is an integer parameter. Handle the exceptions." index caseOf: { [17] -> [((objectMemory isFloatInstance: argOop) or: [objectMemory isIntegerObject: argOop]) ifFalse: [primFailCode := PrimErrBadArgument]]. [55] -> [((objectMemory isFloatInstance: argOop) or: [objectMemory isIntegerObject: argOop]) ifFalse: [primFailCode := PrimErrBadArgument]]. [68] -> [((objectMemory isFloatInstance: argOop) or: [objectMemory isIntegerObject: argOop]) ifFalse: [primFailCode := PrimErrBadArgument]]. [67] -> [arg := self positiveMachineIntegerValueOf: argOop]. [75] -> [arg := objectMemory booleanValueOf: argOop] } otherwise: [arg := objectMemory integerValueOf: argOop]. self failed ifTrue: [^self primitiveFailFor: PrimErrBadArgument]. "assume failure, then set success for handled indices" self primitiveFailFor: PrimErrBadArgument. index caseOf: { [5] -> [objectMemory hasSpurMemoryManagerAPI ifFalse: ["Was: result := allocationsBetweenGCs. allocationsBetweenGCs := arg." "Ignore for now, because old images won't start up otherwise. See 45 for eden size setting." result := objectMemory nilObject. self initPrimCall]]. [6] -> [result := objectMemory integerObjectOf: objectMemory tenuringThreshold. primFailCode := objectMemory tenuringThreshold: arg]. [11] -> [arg >= 0 ifTrue: [result := objectMemory integerObjectOf: objectMemory statTenures. objectMemory statTenures: arg. self initPrimCall]]. [17] -> [(SistaVM and: [self isCog]) ifTrue: [result := objectMemory floatObjectOf: self getCogCodeZoneThreshold. primFailCode := self setCogCodeZoneThreshold: (self noInlineLoadFloatOrIntFrom: argOop)]]. [23] -> [result := objectMemory integerObjectOf: extraVMMemory. extraVMMemory := arg. self initPrimCall]. [24] -> [arg > 0 ifTrue: [result := objectMemory integerObjectOf: objectMemory shrinkThreshold. objectMemory shrinkThreshold: arg. self initPrimCall]]. [25] -> [arg > 0 ifTrue: [result := objectMemory integerObjectOf: objectMemory growHeadroom. objectMemory growHeadroom: arg. self initPrimCall]]. [26] -> [arg >= 0 ifTrue: "0 turns off the heartbeat" [result := objectMemory integerObjectOf: self ioHeartbeatMilliseconds. self ioSetHeartbeatMilliseconds: arg. self initPrimCall]]. [34] -> [(objectMemory hasSpurMemoryManagerAPI "was statAllocationCount; now statAllocatedBytes" and: [arg >= 0]) ifTrue: [result := objectMemory positive64BitIntegerFor: objectMemory currentAllocatedBytes. objectMemory setCurrentAllocatedBytesTo: arg. self initPrimCall]]. [43] -> [(arg between: 0 and: 65535) ifTrue: [result := objectMemory integerObjectOf: desiredNumStackPages. desiredNumStackPages := arg. self initPrimCall]]. [45] -> [arg >= 0 ifTrue: [result := objectMemory integerObjectOf: desiredEdenBytes. desiredEdenBytes := arg. self initPrimCall]]. [47] -> [(self isCog and: [arg between: 0 and: self maxCogCodeSize]) ifTrue: [result := objectMemory integerObjectOf: self getDesiredCogCodeSize. self setDesiredCogCodeSize: arg. self initPrimCall]]. [48] -> [arg >= 0 ifTrue: [| oldPrimitiveDoMixedArithmetic | oldPrimitiveDoMixedArithmetic := primitiveDoMixedArithmetic. + result := objectMemory integerObjectOf: self getImageHeaderFlags. + self initPrimCall. "i.e. setImageHeaderFlags: can fail" + self setImageHeaderFlags: arg. - result := objectMemory integerObjectOf: self getCogVMFlags. - self initPrimCall. "i.e. setCogVMFlags: can fail" - self setCogVMFlags: arg. (primFailCode = 0 and: [oldPrimitiveDoMixedArithmetic ~= primitiveDoMixedArithmetic]) ifTrue: [self flushMethodCache. self flushMethodsWithMachineCodePrimitivesAndContinueAnswering: result "NOT REACHED (in CoInterpreter)"]]]. [49] -> [(arg between: 0 and: 65535) ifTrue: [result := objectMemory integerObjectOf: self ioGetMaxExtSemTableSize. self initPrimCall. "i.e. ioSetMaxExtSemTableSize: is allowed to fail" self setMaxExtSemSizeTo: arg]]. [55] -> [objectMemory hasSpurMemoryManagerAPI ifTrue: [result := objectMemory floatObjectOf: objectMemory getHeapGrowthToSizeGCRatio. primFailCode := objectMemory setHeapGrowthToSizeGCRatio: (self noInlineLoadFloatOrIntFrom: argOop)]]. [67] -> [(arg >= 0 and: [objectMemory hasSpurMemoryManagerAPI]) ifTrue: [result := self positiveMachineIntegerFor: objectMemory maxOldSpaceSize. primFailCode := objectMemory setMaxOldSpaceSize: arg]]. [68] -> [result := objectMemory floatObjectOf: stackPages statAverageLivePagesWhenMapping. self initPrimCall. "i.e. statAverageLivePagesWhenMapping: is allowed to fail" stackPages statAverageLivePagesWhenMapping: (self noInlineLoadFloatOrIntFrom: argOop)]. [69] -> [arg >= 0 ifTrue: [result := objectMemory integerObjectOf: stackPages statMaxPageCountWhenMapping. stackPages statMaxPageCountWhenMapping: arg. self initPrimCall]]. [74] -> [(arg >= 0 and: [objectMemory hasSpurMemoryManagerAPI]) ifTrue: [result := objectMemory integerObjectOf: objectMemory statMaxAllocSegmentTime + 500 // 1000. stackPages statMaxAllocSegmentTime: arg. "usually 0" self initPrimCall]]. [75] -> [| mustFlush | result := objectMemory booleanObjectOf: self primitiveDoMixedArithmetic. self initPrimCall. mustFlush := primitiveDoMixedArithmetic ~= arg. primitiveDoMixedArithmetic := arg. mustFlush ifTrue: [self flushMethodCache. self flushMethodsWithMachineCodePrimitivesAndContinueAnswering: result "NOT REACHED (in CoInterpreter)"]] } otherwise: []. self successful ifTrue: [self methodReturnValue: result] "return old value" ifFalse: [self primitiveFailFor: PrimErrInappropriate] "attempting to write a read-only or non-existent parameter"! Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveVMParameter (in category 'system control primitives') ----- primitiveVMParameter "Behaviour depends on argument count: 0 args: return an Array of VM parameter values; 1 arg: return the indicated VM parameter; 2 args: set the VM indicated parameter. VM parameters are numbered as follows: 1 end (v3)/size(Spur) of old-space (0-based, read-only) 2 end (v3)/size(Spur) of young/new-space (read-only) 3 end (v3)/size(Spur) of heap (read-only) 4 nil (was allocationCount (read-only)) 5 nil (was allocations between GCs (read-write) 6 survivor count tenuring threshold (read-write) 7 full GCs since startup (read-only) 8 total milliseconds in full GCs since startup (read-only) 9 incremental GCs (SqueakV3) or scavenges (Spur) since startup (read-only) 10 total milliseconds in incremental GCs (SqueakV3) or scavenges (Spur) since startup (read-only) 11 tenures of surving objects since startup or reset (read-write) 12-20 were specific to ikp's JITTER VM, now 12 16 open for use 13 if started, the start time in utc microseconds of the high-priority ticker 14 if started, the number of checkHighPriorityTickees calls 15 if started, the number of tickee calls from checkHighPriorityTickees 16 total microseconds at idle since start-up (if non-zero) 17 fraction of the code zone to use (Sista only; used to control code zone use to preserve sendAndBranchData on counter tripped callback) 18 total milliseconds in compaction phase of full GC since start-up (Spur only) 19 scavenge threshold, the effective size of eden. When eden fills to the threshold a scavenge is scheduled. Newer Spur VMs only. 20 utc microseconds at VM start-up (actually at time initialization, which precedes image load). 21 root/remembered table size (occupancy) (read-only) 22 root table overflows since startup (read-only) 23 bytes of extra memory to reserve for VM buffers, plugins, etc (stored in image file header). 24 memory threshold above which shrinking object memory (rw) 25 memory headroom when growing object memory (rw) 26 interruptChecksEveryNms - force an ioProcessEvents every N milliseconds (rw) 27 number of times mark loop iterated for current IGC/FGC (read-only) includes ALL marking 28 number of times sweep loop iterated for current IGC/FGC (read-only) 29 number of times make forward loop iterated for current IGC/FGC (read-only) 30 number of times compact move loop iterated for current IGC/FGC (read-only) 31 number of grow memory requests (read-only) 32 number of shrink memory requests (read-only) 33 number of root table entries used for current IGC/FGC (read-only) 34 Spur: bytes allocated in total since start-up or reset (read-write) (Used to be number of allocations done before current IGC/FGC (read-only)) 35 number of survivor objects after current IGC/FGC (read-only) 36 millisecond clock when current IGC/FGC completed (read-only) 37 number of marked objects for Roots of the world, not including Root Table entries for current IGC/FGC (read-only) 38 milliseconds taken by current IGC (read-only) 39 Number of finalization signals for Weak Objects pending when current IGC/FGC completed (read-only) 40 BytesPerOop for this image 41 imageFormatVersion for the VM 42 number of stack pages in use 43 desired number of stack pages (stored in image file header, max 65535) 44 size of eden, in bytes 45 desired size of eden, in bytes (stored in image file header) 46 machine code zone size, in bytes (Cog only; otherwise nil) 47 desired machine code zone size (stored in image file header; Cog only; otherwise nil) + 48 various header flags. See getImageHeaderFlags. - 48 various header flags. See getCogVMFlags. 49 max size the image promises to grow the external semaphore table to (0 sets to default, which is 256 as of writing) 50-51 nil; reserved for VM parameters that persist in the image (such as eden above) 52 root/remembered table capacity 53 number of segments (Spur only; otherwise nil) 54 total size of free old space (Spur only, otherwise nil) 55 ratio of growth and image size at or above which a GC will be performed post scavenge 56 number of process switches since startup (read-only) 57 number of ioProcessEvents calls since startup (read-only) 58 number of ForceInterruptCheck calls since startup (read-only) 59 number of check event calls since startup (read-only) 60 number of stack page overflows since startup (read-only) 61 number of stack page divorces since startup (read-only) 62 compiled code compactions since startup (read-only; Cog only; otherwise nil) 63 total milliseconds in compiled code compactions since startup (read-only; Cog only; otherwise nil) 64 the number of methods that currently have jitted machine-code + 65 various VM feature flags; see getCogVMFeatureFlags - 65 whether the VM supports a certain feature, MULTIPLE_BYTECODE_SETS is bit 0, IMMUTABILITY is bit 1 66 the byte size of a stack page 67 the max allowed size of old space (Spur only; nil otherwise; 0 implies no limit except that of the underlying platform) 68 the average number of live stack pages when scanned by GC (at scavenge/gc/become et al) (read-write) 69 the maximum number of live stack pages when scanned by GC (at scavenge/gc/become et al) (read-write) 70 the vmProxyMajorVersion (the interpreterProxy VM_MAJOR_VERSION) 71 the vmProxyMinorVersion (the interpreterProxy VM_MINOR_VERSION) 72 total milliseconds in full GCs Mark phase since startup (read-only) 73 total milliseconds in full GCs Sweep phase since startup (read-only, can be 0 depending on compactors) 74 maximum pause time due to segment allocation 75 whether the arithmetic primitives perform conversion in case of mixed SmallInteger/Float (true) or fail (false) Note: Thanks to Ian Piumarta for this primitive." | paramsArraySize index | paramsArraySize := 75. argumentCount = 0 ifTrue: [^self primitiveAllVMParameters: paramsArraySize]. argumentCount > 2 ifTrue: [^self primitiveFailFor: PrimErrBadNumArgs]. "index read & checks" index := self stackValue: (argumentCount = 1 ifTrue: [0] ifFalse: [1]). (objectMemory isIntegerObject: index) ifFalse: [^self primitiveFailFor: PrimErrBadArgument]. index := objectMemory integerValueOf: index. (index < 1 or: [index > paramsArraySize]) ifTrue: [^self primitiveFailFor: PrimErrBadIndex]. argumentCount = 1 ifTrue: "read VM parameter; written this way to avoid branch limits in V3 bytecode set" [| result | result := self primitiveGetVMParameter: index. ^self methodReturnValue: (result ifNil: [objectMemory nilObject])]. "write a VM parameter" self primitiveSetVMParameter: index arg: self stackTop! From noreply at github.com Thu Oct 8 20:46:19 2020 From: noreply at github.com (Eliot Miranda) Date: Thu, 08 Oct 2020 13:46:19 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] d0e03c: Unix/macOS SocketPlugin: improve connection status... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: d0e03cd5f5feffac60545907d4f0de5a446c747a https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/d0e03cd5f5feffac60545907d4f0de5a446c747a Author: Eliot Miranda Date: 2020-10-08 (Thu, 08 Oct 2020) Changed paths: M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/unix/vm/aio.c M platforms/unix/vm/sqaio.h Log Message: ----------- Unix/macOS SocketPlugin: improve connection status printing. [ci skip] From noreply at github.com Thu Oct 8 23:19:32 2020 From: noreply at github.com (Eliot Miranda) Date: Thu, 08 Oct 2020 16:19:32 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 3f129f: Improve the socket logging even more on unix. Avo... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 3f129f28147b828a83ca03ac32b384ce4d0acd1e https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/3f129f28147b828a83ca03ac32b384ce4d0acd1e Author: Eliot Miranda Date: 2020-10-08 (Thu, 08 Oct 2020) Changed paths: M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/unix/vm/aio.c M platforms/unix/vm/sqaio.h M platforms/win32/plugins/SocketPlugin/sqWin32NewNet.c Log Message: ----------- Improve the socket logging even more on unix. Avoid copying option names in setsockopt/getsockopt operations. Tab sqWin32NewNet.c to 4 spaces per tab. From builds at travis-ci.org Thu Oct 8 23:30:57 2020 From: builds at travis-ci.org (Travis CI) Date: Thu, 08 Oct 2020 23:30:57 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2228 (Cog - 3f129f2) In-Reply-To: Message-ID: <5f7fa130974aa_13fcc3eda3820111170@travis-tasks-55b7f6d7fd-57q48.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2228 Status: Still Failing Duration: 10 mins and 53 secs Commit: 3f129f2 (Cog) Author: Eliot Miranda Message: Improve the socket logging even more on unix. Avoid copying option names in setsockopt/getsockopt operations. Tab sqWin32NewNet.c to 4 spaces per tab. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/d0e03cd5f5fe...3f129f28147b View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/734136637?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Thu Oct 8 23:53:53 2020 From: no-reply at appveyor.com (AppVeyor) Date: Thu, 08 Oct 2020 23:53:53 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2230 Message-ID: <20201008235353.1.FEE20A7E5280CA49@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Fri Oct 9 00:53:03 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 9 Oct 2020 00:53:03 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2838.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2838.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2838 Author: eem Time: 8 October 2020, 5:52:53.321836 pm UUID: 0289dd2b-8f24-49bc-9361-4a38d4993acd Ancestors: VMMaker.oscog-eem.2837 Make in-ime compilation smart enough to choose the bytecode set for the chosen VM when given a string to compile. Also make it robust enough to deal with omissions in the clusteredVariableNames in facades that don't implement certain selevtors (specialObjectsArrayAddress in other than Spur64). =============== Diff against VMMaker.oscog-eem.2837 =============== Item was added: + ----- Method: Cogit class>>compileMethodSource:options: (in category 'in-image compilation support') ----- + compileMethodSource: source options: optionsArray + "The key thing here is to work out what bytecode set to use for the options..." + | encoderClass encoderClassName methodNode | + StackInterpreter initializeWithOptions: (self asOptionsDictionary: optionsArray). + encoderClassName := StackInterpreter classPool at: #BytecodeEncoderClassName. + (encoderClass := Smalltalk classNamed: encoderClassName) ifNil: + [self error: 'no available compiler backend for this bytecode set']. + methodNode := Parser new + encoderClass: encoderClass; + parse: '| temp | temp class' class: nil class noPattern: true notifying: nil ifFail: [self error: 'bad doit']. + ^methodNode generate! Item was changed: ----- Method: Cogit class>>genAndDis:options: (in category 'in-image compilation') ----- genAndDis: methodOrDoitString options: optionsDictionaryOrArray | tuple | methodOrDoitString isCompiledCode ifFalse: [^self + genAndDis: (self compileMethodSource: methodOrDoitString options: optionsDictionaryOrArray) - genAndDis: (Compiler new - compiledMethodFor: methodOrDoitString - in: nil - to: nil - notifying: nil - ifFail: nil - logged: false) options: optionsDictionaryOrArray]. tuple := self cog: methodOrDoitString selectorOrNumCopied: (methodOrDoitString isCompiledBlock ifTrue: [methodOrDoitString numCopiedValues] ifFalse: [methodOrDoitString selector]) options: optionsDictionaryOrArray. tuple second disassembleMethod: tuple last. ^tuple! Item was changed: ----- Method: CurrentImageCoInterpreterFacade>>cogit: (in category 'initialize-release') ----- cogit: aCogit | accessors | cogit := aCogit. cogit objectMemory ifNil: [cogit instVarNamed: 'objectMemory' put: objectMemory]. coInterpreter cogit: aCogit. (objectMemory respondsTo: #cogit:) ifTrue: [objectMemory cogit: aCogit]. (objectMemory respondsTo: #coInterpreter:) ifTrue: [objectMemory coInterpreter: coInterpreter]. coInterpreter setUpForUseByFacade: self. objectMemory setUpForUseByFacade: self. accessors := CurrentImageCoInterpreterFacade organization listAtCategoryNamed: #accessing. coInterpreter class clusteredVariableNames do: [:var| (Symbol lookup: (var first = $C ifTrue: ['c', var allButFirst] ifFalse: [var]), 'Address') ifNotNil: [:accessor| (accessors includes: accessor) ifTrue: + [[self perform: accessor] + on: SubclassResponsibility + do: [:ex| ex return]]]]. - [self perform: accessor]]]. self initializeObjectMap! From noreply at github.com Fri Oct 9 04:27:11 2020 From: noreply at github.com (Eliot Miranda) Date: Thu, 08 Oct 2020 21:27:11 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 7deac0: Unix(macOS) SocketPlugin: Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 7deac028aeeb769c8782242fc23bebdfaaa58e3d https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d Author: Eliot Miranda Date: 2020-10-08 (Thu, 08 Oct 2020) Changed paths: M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/win32/plugins/SocketPlugin/sqWin32NewNet.c Log Message: ----------- Unix(macOS) SocketPlugin: Fix sendDone/primtiveSocketSendDone/sqSocketSendDone on macOS. The select in socketWritable does not answer true for writable sockets, presumably because the select in aioPoll already has done. So have dataHandler (which is called from aioPoll when the socket *is* writable) set a flag in privateSocketStruct notifiedOfWritability and use this to avoid the wrongly unsuccessful call of select in sqSocketSendDone. Clear notifiedOfWritability before any and all send/ write system calls. Have sqWin32NewNet.c process the select result in its socketWritable in exactly the same way as sqUnixSocket.c's. I WELCOME ANY REVIEW OF THIS COMMIT!! Levente, Tobias, you might take a close look at this one. From builds at travis-ci.org Fri Oct 9 04:38:05 2020 From: builds at travis-ci.org (Travis CI) Date: Fri, 09 Oct 2020 04:38:05 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2229 (Cog - 7deac02) In-Reply-To: Message-ID: <5f7fe92d40c0e_13f999d81e89c465e7@travis-tasks-686c69676-jzpgl.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2229 Status: Still Failing Duration: 10 mins and 25 secs Commit: 7deac02 (Cog) Author: Eliot Miranda Message: Unix(macOS) SocketPlugin: Fix sendDone/primtiveSocketSendDone/sqSocketSendDone on macOS. The select in socketWritable does not answer true for writable sockets, presumably because the select in aioPoll already has done. So have dataHandler (which is called from aioPoll when the socket *is* writable) set a flag in privateSocketStruct notifiedOfWritability and use this to avoid the wrongly unsuccessful call of select in sqSocketSendDone. Clear notifiedOfWritability before any and all send/ write system calls. Have sqWin32NewNet.c process the select result in its socketWritable in exactly the same way as sqUnixSocket.c's. I WELCOME ANY REVIEW OF THIS COMMIT!! Levente, Tobias, you might take a close look at this one. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/3f129f28147b...7deac028aeeb View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/734179980?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Fri Oct 9 05:02:17 2020 From: no-reply at appveyor.com (AppVeyor) Date: Fri, 09 Oct 2020 05:02:17 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2231 Message-ID: <20201009050217.1.2773B482691A2482@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 9 06:20:23 2020 From: notifications at github.com (Tobias Pape) Date: Thu, 08 Oct 2020 23:20:23 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: Manpage says otherwise: > If the time limit expires, `select()` returns 0 And some tutorial says: >On success, `select()` and `pselect()` return the number of file descriptors contained in the three returned descriptor sets (that is, the total number of bits that are set in `readfds`, `writefds`, `exceptfds`) which *may be zero if the timeout expires before anything interesting happens*. I don't see how `select` should ever return `0` for a writable `fd` -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43096552 -------------- next part -------------- An HTML attachment was scrubbed... URL: From magik.mountain at gmail.com Fri Oct 9 06:25:42 2020 From: magik.mountain at gmail.com (Janko Korelc) Date: Fri, 9 Oct 2020 08:25:42 +0200 Subject: [Vm-dev] Vm-dev Digest, Vol 172, Issue 12 In-Reply-To: References: Message-ID: Many months ago had deja vu about 4 found elements where as far as my beleif goes are names od four created colour superclasses bugged two misplaced two trown out.. V pet., 9. okt. 2020 08:20 je oseba < vm-dev-request at lists.squeakfoundation.org> napisala: > Send Vm-dev mailing list submissions to > vm-dev at lists.squeakfoundation.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://lists.squeakfoundation.org/mailman/listinfo/vm-dev > or, via email, send a message with subject or body 'help' to > vm-dev-request at lists.squeakfoundation.org > > You can reach the person managing the list at > vm-dev-owner at lists.squeakfoundation.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Vm-dev digest..." > > > Today's Topics: > > 1. [OpenSmalltalk/opensmalltalk-vm] 7deac0: Unix(macOS) > SocketPlugin: (Eliot Miranda) > 2. Still Failing: OpenSmalltalk/opensmalltalk-vm#2229 (Cog - > 7deac02) (Travis CI) > 3. Build failed: opensmalltalk-vm 1.0.2231 (AppVeyor) > 4. Re: [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) > SocketPlugin: (7deac02) (Tobias Pape) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Thu, 08 Oct 2020 21:27:11 -0700 > From: Eliot Miranda > To: vm-dev at lists.squeakfoundation.org > Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 7deac0: Unix(macOS) > SocketPlugin: > Message-ID: > 3f129f-7deac0 at github.com> > > Content-Type: text/plain; charset=UTF-8 > > Branch: refs/heads/Cog > Home: https://github.com/OpenSmalltalk/opensmalltalk-vm > Commit: 7deac028aeeb769c8782242fc23bebdfaaa58e3d > > https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d > Author: Eliot Miranda > Date: 2020-10-08 (Thu, 08 Oct 2020) > > Changed paths: > M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c > M platforms/win32/plugins/SocketPlugin/sqWin32NewNet.c > > Log Message: > ----------- > Unix(macOS) SocketPlugin: > Fix sendDone/primtiveSocketSendDone/sqSocketSendDone on macOS. The select > in > socketWritable does not answer true for writable sockets, presumably > because > the select in aioPoll already has done. So have dataHandler (which is > called > from aioPoll when the socket *is* writable) set a flag in > privateSocketStruct > notifiedOfWritability and use this to avoid the wrongly unsuccessful call > of > select in sqSocketSendDone. Clear notifiedOfWritability before any and all > send/ > write system calls. > Have sqWin32NewNet.c process the select result in its socketWritable in > exactly > the same way as sqUnixSocket.c's. > > I WELCOME ANY REVIEW OF THIS COMMIT!! Levente, Tobias, you might take a > close > look at this one. > > > > > ------------------------------ > > Message: 2 > Date: Fri, 09 Oct 2020 04:38:05 +0000 > From: Travis CI > To: vm-dev at lists.squeakfoundation.org > Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2229 > (Cog - 7deac02) > Message-ID: > <5f7fe92d40c0e_13f999d81e89c465e7 at travis-tasks-686c69676-jzpgl.mail > > > Content-Type: text/plain; charset="utf-8" > > Build Update for OpenSmalltalk/opensmalltalk-vm > ------------------------------------- > > Build: #2229 > Status: Still Failing > > Duration: 10 mins and 25 secs > Commit: 7deac02 (Cog) > Author: Eliot Miranda > Message: Unix(macOS) SocketPlugin: > Fix sendDone/primtiveSocketSendDone/sqSocketSendDone on macOS. The select > in > socketWritable does not answer true for writable sockets, presumably > because > the select in aioPoll already has done. So have dataHandler (which is > called > from aioPoll when the socket *is* writable) set a flag in > privateSocketStruct > notifiedOfWritability and use this to avoid the wrongly unsuccessful call > of > select in sqSocketSendDone. Clear notifiedOfWritability before any and all > send/ > write system calls. > Have sqWin32NewNet.c process the select result in its socketWritable in > exactly > the same way as sqUnixSocket.c's. > > I WELCOME ANY REVIEW OF THIS COMMIT!! Levente, Tobias, you might take a > close > look at this one. > > View the changeset: > https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/3f129f28147b...7deac028aeeb > > View the full build log and details: > https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/734179980?utm_medium=notification&utm_source=email > > > -- > > You can unsubscribe from build emails from the > OpenSmalltalk/opensmalltalk-vm repository going to > https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email > . > Or unsubscribe from *all* email updating your settings at > https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email > . > Or configure specific recipients for build notifications in your > .travis.yml file. See https://docs.travis-ci.com/user/notifications. > > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: < > http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20201009/01001847/attachment-0001.html > > > > ------------------------------ > > Message: 3 > Date: Fri, 09 Oct 2020 05:02:17 +0000 > From: AppVeyor > To: vm-dev at lists.squeakfoundation.org > Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2231 > Message-ID: <20201009050217.1.2773B482691A2482 at appveyor.com> > Content-Type: text/plain; charset="utf-8" > > An HTML attachment was scrubbed... > URL: < > http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20201009/e00d88b5/attachment-0001.html > > > > ------------------------------ > > Message: 4 > Date: Thu, 08 Oct 2020 23:20:23 -0700 > From: Tobias Pape > To: OpenSmalltalk/opensmalltalk-vm > > Cc: Subscribed > Subject: Re: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) > SocketPlugin: (7deac02) > Message-ID: > > 43096552 at github.com> > > Content-Type: text/plain; charset="utf-8" > > Manpage says otherwise: > > If the time limit expires, `select()` returns 0 > > And some tutorial says: > >On success, `select()` and `pselect()` return the number of file > descriptors contained in the three returned descriptor sets (that is, the > total number of bits that are set in `readfds`, `writefds`, `exceptfds`) > which *may be zero if the timeout expires before anything interesting > happens*. > > I don't see how `select` should ever return `0` for a writable `fd` > > > -- > You are receiving this because you are subscribed to this thread. > Reply to this email directly or view it on GitHub: > > https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43096552 > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: < > http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20201008/faa334a1/attachment.html > > > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > Vm-dev mailing list > Vm-dev at lists.squeakfoundation.org > http://lists.squeakfoundation.org/mailman/listinfo/vm-dev > > > ------------------------------ > > End of Vm-dev Digest, Vol 172, Issue 12 > *************************************** > -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 9 06:28:37 2020 From: notifications at github.com (Tobias Pape) Date: Thu, 08 Oct 2020 23:28:37 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: That said, if this is actually a race between `aioPoll` and `select` we probably shoud ditch one? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43096723 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 9 07:28:52 2020 From: notifications at github.com (Eliot Miranda) Date: Fri, 09 Oct 2020 00:28:52 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: Tobias, you need to read the code to see why we can't ditch aioPoll. Perhaps we could ditch the select call in socketWritable, but we would need to test on all platforms. However, here's how you can see that select does indeed answer 0 for a writable socket on macOS (I'm using 10.13.6). 1. compile a debug VM using the version immediately before this commit, making sure the build supplies -DAIO_DEBUG. 2. run with logging turned on, e.g. $ ../build.macos64x64/squeak.cog.spur/SqueakDebug.app/Contents/MacOS/Squeak -aiolog trunk6-64.image 3. run the following in a workspace ``` | tcpSend tcpRecv sendProc recvProc | [ | address port opt send1 recv2 sent | address := NetNameResolver addressForName: '127.0.0.1' timeout: 20. port := 31259. tcpSend := Socket newTCP. tcpSend setOption: 'SO_REUSEADDR' value: 1. self assert: 0 = tcpSend socketError description: 'Error occured while setting SO_REUSEADDR'. opt := tcpSend getOption: 'SO_REUSEADDR'. self assert: opt first isZero & opt last isZero not description: 'SO_REUSEADDR couldn''t be set'. tcpSend setOption: 'SO_REUSEPORT' value: 1. self assert: 0 = tcpSend socketError description: 'Error occured while setting SO_REUSEPORT'. opt := tcpSend getOption: 'SO_REUSEPORT'. self assert: opt first isZero & opt last isZero not description: 'SO_REUSEPORT couldn''t be set'. "tcpSend setOption: 'TCP_NODELAY' value: 1." send1 := UUID new. tcpRecv := Socket newTCP. tcpRecv setOption: 'SO_REUSEADDR' value: 1. self assert: 0 = tcpRecv socketError. tcpRecv setOption: 'SO_REUSEPORT' value: 1. self assert: 0 = tcpRecv socketError. tcpRecv setPort: port. self assert: port = tcpRecv localPort. recv2 := UUID new. recvProc := [| received | received := 0. tcpRecv waitForConnectionFor: 200000. [received < 16] whileTrue: [received := received + (tcpRecv receiveDataInto: recv2 startingAt: received + 1) "No need to yield here, because #receiveDataInto:startingAt: will either wait on the readSemaphore of the socket or signal an error." ] ] newProcess. sendProc := [tcpSend connectTo: address port: port. sent := tcpSend sendData: send1] newProcess. recvProc resume. sendProc resume. (Delay forMilliseconds: 200) wait. self assert: sendProc isTerminated description: 'sendProc hasn''t terminated till the deadline'; assert: recvProc isTerminated description: 'recvProc hasn''t terminated till the deadline'; assert: 16 = sent description: ('{1} bytes were sent instead of 16' format: { sent }); assert: send1 = recv2 description: 'sent and received bytes differ'] ensure: [tcpSend ifNotNil: [ tcpSend destroy ]. tcpRecv ifNotNil: [ tcpRecv destroy ]. sendProc ifNotNil: [ sendProc terminate ]. recvProc ifNotNil: [ recvProc terminate ]]``` 4. notice how in the log you see ``` 32032 0 sqUnixSocket.c:1141 sqSocketSendDone(16) !socketWritable 32032 0 aio.c:521 aioHandle(16, dataHandler, 5/AIO_WX) 32032 0 sqUnixSocket.c:749 socketStatus 16: Connected O_ASYNC|O_NONBLOCK 32032 0 sqUnixSocket.c:480 dataHandler(16=16, 0x7ff901521f30, 4/AIO_W) 32032 0 sqUnixSocket.c:499 notify 16 write 32032 0 sqUnixSocket.c:1141 sqSocketSendDone(16) !socketWritable 32032 0 aio.c:521 aioHandle(16, dataHandler, 5/AIO_WX) 32032 0 sqUnixSocket.c:749 socketStatus 16: Connected O_ASYNC|O_NONBLOCK 32032 0 sqUnixSocket.c:480 dataHandler(16=16, 0x7ff901521f30, 4/AIO_W) 32032 0 sqUnixSocket.c:499 notify 16 write 32032 0 sqUnixSocket.c:1141 sqSocketSendDone(16) !socketWritable 32032 0 aio.c:521 aioHandle(16, dataHandler, 5/AIO_WX) 32032 0 sqUnixSocket.c:749 socketStatus 16: Connected O_ASYNC|O_NONBLOCK 32032 0 sqUnixSocket.c:480 dataHandler(16=16, 0x7ff901521f30, 4/AIO_W) 32032 0 sqUnixSocket.c:499 notify 16 write 32032 0 sqUnixSocket.c:1141 sqSocketSendDone(16) !socketWritable 32032 0 aio.c:521 aioHandle(16, dataHandler, 5/AIO_WX)...``` and each line that says ```sqUnixSocket.c:1141 sqSocketSendDone(16) !socketWritable``` is proof that select is returning 0. It comes form this: ```static int socketWritable(int s) { struct timeval tv = { 0, 0 }; // i.e. poll fd_set fds; FD_ZERO(&fds); FD_SET(s, &fds); #ifdef AIO_DEBUG { int r = select(1, 0, &fds, 0, &tv); if (r < 0) perror("socketWritable: select(1,0,&fd,0,&poll)"); return r > 0; } #else return select(1, 0, &fds, 0, &tv) > 0; #endif }``` i.e. ```r > 0``` is always false, and since there is no output from the perror we can conclude that select must be answering 0. Now compile a VM from this commit and see that the example now works and that the log looks healthy: ``` 413959 0 sqUnixSocket.c:788 listenOnPortBacklogSize(18, 1) 413959 0 aio.c:452 aioEnable(18): Elicit SIGIO via O_ASYNC/fcntl 413959 0 aio.c:521 aioHandle(18, acceptHandler, 3/AIO_RX) 413959 0 sqUnixSocket.c:757 socketStatus 18: WaitingForConnection O_ASYNC|O_NONBLOCK 413959 0 sqUnixSocket.c:757 socketStatus 18: WaitingForConnection O_ASYNC|O_NONBLOCK 413959 0 sqUnixSocket.c:757 socketStatus 16: Unconnected !fcntl(fd,F_GETFL,0) !! 413959 0 sqUnixSocket.c:2226 connectToAddressSize(16) 413959 0 aio.c:452 aioEnable(16): Elicit SIGIO via O_ASYNC/fcntl 413959 0 sqUnixSocket.c:2245 connect() => -1 413959 0 aio.c:521 aioHandle(16, connectHandler, 5/AIO_WX) 413961 2 sqUnixSocket.c:757 socketStatus 16: WaitingForConnection O_ASYNC|O_NONBLOCK 413961 0 sqUnixSocket.c:445 connectHandler(16, 0x7fd0b34e2b90, 4) 413961 0 sqUnixSocket.c:470 notify 16 conn 413961 0 sqUnixSocket.c:388 acceptHandler(18, 0x7fd0b34e2ca0 ,2) 413961 0 aio.c:565 aioDisable(18) 413961 0 aio.c:545 aioSuspend(18) 413961 0 aio.c:452 aioEnable(19): Elicit SIGIO via O_ASYNC/fcntl 413961 0 sqUnixSocket.c:435 notify 19 conn 413961 0 sqUnixSocket.c:757 socketStatus 19: Connected O_ASYNC|O_NONBLOCK 413961 0 aio.c:521 aioHandle(19, dataHandler, 3/AIO_RX) 413961 0 sqUnixSocket.c:1134 receiveDataAvailable(19) -> false [aioHandle is set] 413961 0 sqUnixSocket.c:757 socketStatus 19: Connected O_ASYNC|O_NONBLOCK 413961 0 sqUnixSocket.c:757 socketStatus 16: Connected O_ASYNC|O_NONBLOCK 413961 0 sqUnixSocket.c:1151 sqSocketSendDone(16) !socketWritable 413961 0 aio.c:521 aioHandle(16, dataHandler, 5/AIO_WX) 413961 0 sqUnixSocket.c:757 socketStatus 16: Connected O_ASYNC|O_NONBLOCK 413961 0 sqUnixSocket.c:481 dataHandler(16=16, 0x7fd0b34e2b90, 4/AIO_W) 413961 0 sqUnixSocket.c:501 notify 16 write 413961 0 sqUnixSocket.c:1242 TCP sendData(16, 16) 413961 0 sqUnixSocket.c:1262 sendData(16) done = 16 413961 0 sqUnixSocket.c:481 dataHandler(19=19, 0x7fd0b34e2ca0, 2/AIO_R) 413961 0 sqUnixSocket.c:498 notify 19 read 413961 0 sqUnixSocket.c:1120 receiveDataAvailable(19) -> true 413961 0 sqUnixSocket.c:1208 receiveData(19) done = 16 414163 202 sqUnixSocket.c:757 socketStatus 16: Connected O_ASYNC|O_NONBLOCK 414163 0 sqUnixSocket.c:1000 destroy(16) 414163 0 sqUnixSocket.c:983 abortConnection(16) 414163 0 sqUnixSocket.c:945 closeConnection(16) 414163 0 aio.c:565 aioDisable(16) 414163 0 aio.c:545 aioSuspend(16) 414163 0 sqUnixSocket.c:965 closeConnection: disconnected 414163 0 sqUnixSocket.c:757 socketStatus 19: Connected O_ASYNC|O_NONBLOCK 414163 0 sqUnixSocket.c:1000 destroy(19) 414163 0 sqUnixSocket.c:983 abortConnection(19) 414163 0 sqUnixSocket.c:945 closeConnection(19) 414163 0 aio.c:565 aioDisable(19) 414163 0 aio.c:545 aioSuspend(19) 414163 0 sqUnixSocket.c:965 closeConnection: disconnected``` -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43098105 -------------- next part -------------- An HTML attachment was scrubbed... URL: From lists at fniephaus.com Fri Oct 9 07:30:59 2020 From: lists at fniephaus.com (Fabio Niephaus) Date: Fri, 9 Oct 2020 09:30:59 +0200 Subject: [Vm-dev] Installing high dpi support and backwards compatibility of the VM In-Reply-To: References: Message-ID: Hi Eliot, What would be the consequences of moving the display creation logic from DisplayScreen class>>actualScreenSize to beDisplay? If beDisplay is called afterwards, it at least should be feasible, right? Cheers, Fabio On Thu, Oct 8, 2020 at 7:59 PM Eliot Miranda wrote: > > > Hi All, > > ideally adding the high dpi support to the VM will not break backwards-compatibility. But that implies that the VM is informed before it creates the display of whether to create a high dpi display or not. Off-list Tobias asked me where the VM sets up the display on Mac and I was surprised by the answer. > > I thought it would be as part of beDisplay. But it's actually as a side-effect of DisplayScreen class>>actualScreenSize, primitive 106, which calls the ioScreenSize function. It is this functions' responsibility to actually create the display, deriving the size from the savedWindowSize info in the image header (which can or could be overridden on the VM command line, and is when -headless is supplied). > > So any new primitive added to allow DisplayScreen to inform the VM of whether to use high dpi or not would have to be invoked before primitive 106. So one way to implement this is to modify the chain of invocations leading up to primitive 106. For this route I'd like to propose the following refactoring: > > DisplayScreen class>>actualScreenSize > > ^ 640 at 480 > > becomes > > DisplayScreen class>>actualScreenSize > self primitiveUseHighDPI: self useHighDPI. "where this is a preference" > ^self primitiveScreenSize > > primitiveScreenSize > > ^ 640 at 480 > > > Another route is to make the useHighDPI flag part of the image header state alongside the saved window size. This would mean it was added to the flags accessed via vmParameterAt: 48. There could be a command-line argument to override. > > > Finally I note that the beDisplay primitive simply stores the display object in the specialObjectsArray and assigns the interpreter variables that track the display, displayBits, displayWidth, displayHeight & displayDepth. It then invokes ioNoteDisplayChangedwidthheightdepth, but *all* the implementations of this function are empty. I propose that we should eliminate 5this call and its implementation. It is confusing to follow it and find it does nothing. The argument could be that a platform might require it. But if that's so we can always put it back. We have an existence proof in all our platforms that this is unlikely. Thoughts? > _,,,^..^,,,_ > best, Eliot From eliot.miranda at gmail.com Fri Oct 9 07:52:33 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri, 9 Oct 2020 00:52:33 -0700 Subject: [Vm-dev] Installing high dpi support and backwards compatibility of the VM In-Reply-To: References: Message-ID: On Fri, Oct 9, 2020 at 12:31 AM Fabio Niephaus wrote: > > Hi Eliot, > > What would be the consequences of moving the display creation logic > from DisplayScreen class>>actualScreenSize to beDisplay? If beDisplay > is called afterwards, it at least should be feasible, right? > I don't know. There would need to be a design where the semantics of beDisplay were "Make me the display but set my size to whatever you think best". But that's not how the interface is designed. The interface is designed as 1. tell Display how big the actual GUI's screen is => at this point the actual GUI's screen must be opened to find out how big it is 2. Display adjusts itself accordingly 3. beDisplay simply records the state that was actually started in 1. I don't know how to change this order without breaking backward-compatibility, which is where we came in. Also, a deBisplay primitive which reached in and changed the inst vars in Display would be a really bad thing (IMO). So it seems to me that we're stuck with the actual GUI's screen being opened in DisplayScreen class>>actualScreenSize > Cheers, > Fabio > > On Thu, Oct 8, 2020 at 7:59 PM Eliot Miranda > wrote: > > > > > > Hi All, > > > > ideally adding the high dpi support to the VM will not break > backwards-compatibility. But that implies that the VM is informed before > it creates the display of whether to create a high dpi display or not. > Off-list Tobias asked me where the VM sets up the display on Mac and I was > surprised by the answer. > > > > I thought it would be as part of beDisplay. But it's actually as a > side-effect of DisplayScreen class>>actualScreenSize, primitive 106, which > calls the ioScreenSize function. It is this functions' responsibility to > actually create the display, deriving the size from the savedWindowSize > info in the image header (which can or could be overridden on the VM > command line, and is when -headless is supplied). > > > > So any new primitive added to allow DisplayScreen to inform the VM of > whether to use high dpi or not would have to be invoked before primitive > 106. So one way to implement this is to modify the chain of invocations > leading up to primitive 106. For this route I'd like to propose the > following refactoring: > > > > DisplayScreen class>>actualScreenSize > > > > ^ 640 at 480 > > > > becomes > > > > DisplayScreen class>>actualScreenSize > > self primitiveUseHighDPI: self useHighDPI. "where this is a preference" > > ^self primitiveScreenSize > > > > primitiveScreenSize > > > > ^ 640 at 480 > > > > > > Another route is to make the useHighDPI flag part of the image header > state alongside the saved window size. This would mean it was added to the > flags accessed via vmParameterAt: 48. There could be a command-line > argument to override. > > > > > > Finally I note that the beDisplay primitive simply stores the display > object in the specialObjectsArray and assigns the interpreter variables > that track the display, displayBits, displayWidth, displayHeight & > displayDepth. It then invokes ioNoteDisplayChangedwidthheightdepth, but > *all* the implementations of this function are empty. I propose that we > should eliminate 5this call and its implementation. It is confusing to > follow it and find it does nothing. The argument could be that a platform > might require it. But if that's so we can always put it back. We have an > existence proof in all our platforms that this is unlikely. Thoughts? > > _,,,^..^,,,_ > > best, Eliot > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Fri Oct 9 07:58:24 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri, 9 Oct 2020 00:58:24 -0700 Subject: [Vm-dev] [squeak-dev] Installing high dpi support and backwards compatibility of the VM In-Reply-To: References: Message-ID: Hi Tobias, On Thu, Oct 8, 2020 at 11:57 PM Tobias Pape wrote: > Hi > > > On 08.10.2020, at 19:58, Eliot Miranda wrote: > > > > Hi All, > > > > ideally adding the high dpi support to the VM will not break > backwards-compatibility. But that implies that the VM is informed before > it creates the display of whether to create a high dpi display or not. > Off-list Tobias asked me where the VM sets up the display on Mac and I was > surprised by the answer. > > > > I thought it would be as part of beDisplay. But it's actually as a > side-effect of DisplayScreen class>>actualScreenSize, primitive 106, which > calls the ioScreenSize function. It is this functions' responsibility to > actually create the display, deriving the size from the savedWindowSize > info in the image header (which can or could be overridden on the VM > command line, and is when -headless is supplied). > > > > So any new primitive added to allow DisplayScreen to inform the VM of > whether to use high dpi or not would have to be invoked before primitive > 106. So one way to implement this is to modify the chain of invocations > leading up to primitive 106. For this route I'd like to propose the > following refactoring: > > > > DisplayScreen class>>actualScreenSize > > > > ^ 640 at 480 > > > > becomes > > > > DisplayScreen class>>actualScreenSize > > self primitiveUseHighDPI: self useHighDPI. "where this is a > preference" > > ^self primitiveScreenSize > > > > primitiveScreenSize > > > > ^ 640 at 480 > > > > > Here's another idea: > We already have > > DisplayScreen class>>actualScreenScaleFactor > > ^ 1.0 > > And if we change DisplayScreen class>>startUp to > > DisplayScreen class>>startUp "DisplayScreen startUp" > Display setScaleFactor: self actualScreenScaleFactor. > Display setExtent: self actualScreenSize depth: Display > nativeDepth. > Display beDisplay > Very nice. Let's go with this. > > Then the contract could be: > > "Iff you call primitiveScreenScaleFactor before any call to primitive 106, > then you opt in to possibly high dpi" > > That way, we do not have to change any image at all, cause older images > just don't call that primitive. > Yep, works for me. > > > > > > Another route is to make the useHighDPI flag part of the image header > state alongside the saved window size. This would mean it was added to the > flags accessed via vmParameterAt: 48. There could be a command-line > argument to override. > > Maybe a cmd-line parameter in any case… > +1 > > > > > > > Finally I note that the beDisplay primitive simply stores the display > object in the specialObjectsArray and assigns the interpreter variables > that track the display, displayBits, displayWidth, displayHeight & > displayDepth. It then invokes ioNoteDisplayChangedwidthheightdepth, but > *all* the implementations of this function are empty. I propose that we > should eliminate 5this call and its implementation. It is confusing to > follow it and find it does nothing. The argument could be that a platform > might require it. But if that's so we can always put it back. We have an > existence proof in all our platforms that this is unlikely. Thoughts? > > > Funny. The mac vm says "/* This is invoked when the GC moves the display > bitmap. For now do nothing. */" Does the GC ever do that actually? > Not now. It used to. One would see the pixels in the display become nonsense noise as the GC moved the display underneath the screen refresh. But now in Spur the beDisplay primitive pins the display bits. > It's also fairly recent: > > 78c402ea71ebcc9db12496f81021fdb9b57deb5f (Fri May 12 19:29:45 2017) > > StackInterpreter: > Simplify and make robust display bitmap access for display update. > The old code > required platforms that needed to redraw at arbitrary times to have to > access > the display bits through interpreterProxy->displayObject, decoding it > each time. > There exists a small window during compaction, etc, during whiuch such > access > will fail and cause a VM crash. The new code provides four variables > to > reference the display, displayBits, displayWidth, displayHeight and > displayDepth, which are assigned appropriately in the > primitiveBeDisplay > primitive. After a GC the interpreter checks if the displayBits have > changed > location and if so calls ioNoteDisplayChanged:width:height:depth: > (ioNoteDisplayChangedwidthheightdepth) to inform the platform of the > change > (currently all platforms implement this as a null function). > > > So, old (<2017) code cannot depend on it, new code does not. If the GC > issue is moot, we can ditch it. > Even if the GC does move the display, ioNoteDisplayChangedwidthheightdepth can't be called until after GC, which means that from the time the GC moves the display to the time the GC finishes, the display image is corrupted. That's fixed in Spur but in V3 you'll see that happen, especially if you resize the display (which allocates a new bitmap). At least on Mac I would see it regularly. > > > Best regards > -Tobias > > > > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From lists at fniephaus.com Fri Oct 9 08:16:43 2020 From: lists at fniephaus.com (Fabio Niephaus) Date: Fri, 9 Oct 2020 10:16:43 +0200 Subject: [Vm-dev] Installing high dpi support and backwards compatibility of the VM In-Reply-To: References: Message-ID: On Fri, Oct 9, 2020 at 9:52 AM Eliot Miranda wrote: > > > > > On Fri, Oct 9, 2020 at 12:31 AM Fabio Niephaus wrote: >> >> >> Hi Eliot, >> >> What would be the consequences of moving the display creation logic >> from DisplayScreen class>>actualScreenSize to beDisplay? If beDisplay >> is called afterwards, it at least should be feasible, right? > > > I don't know. There would need to be a design where the semantics of beDisplay were "Make me the display but set my size to whatever you think best". But that's not how the interface is designed. The interface is designed as > > 1. tell Display how big the actual GUI's screen is > => at this point the actual GUI's screen must be opened to find out how big it is > 2. Display adjusts itself accordingly > 3. beDisplay simply records the state that was actually started in 1. > > I don't know how to change this order without breaking backward-compatibility, which is where we came in. Also, a deBisplay primitive which reached in and changed the inst vars in Display would be a really bad thing (IMO). Interesting...in TruffleSqueak, the display is created as part of beDisplay: https://github.com/hpi-swa/trufflesqueak/blob/5547e981b063b89d767a132862db514efdaaf171/src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/primitives/impl/IOPrimitives.java#L241 Fabio > > So it seems to me that we're stuck with the actual GUI's screen being opened in DisplayScreen class>>actualScreenSize > >> >> Cheers, >> Fabio >> >> On Thu, Oct 8, 2020 at 7:59 PM Eliot Miranda wrote: >> > >> > >> > Hi All, >> > >> > ideally adding the high dpi support to the VM will not break backwards-compatibility. But that implies that the VM is informed before it creates the display of whether to create a high dpi display or not. Off-list Tobias asked me where the VM sets up the display on Mac and I was surprised by the answer. >> > >> > I thought it would be as part of beDisplay. But it's actually as a side-effect of DisplayScreen class>>actualScreenSize, primitive 106, which calls the ioScreenSize function. It is this functions' responsibility to actually create the display, deriving the size from the savedWindowSize info in the image header (which can or could be overridden on the VM command line, and is when -headless is supplied). >> > >> > So any new primitive added to allow DisplayScreen to inform the VM of whether to use high dpi or not would have to be invoked before primitive 106. So one way to implement this is to modify the chain of invocations leading up to primitive 106. For this route I'd like to propose the following refactoring: >> > >> > DisplayScreen class>>actualScreenSize >> > >> > ^ 640 at 480 >> > >> > becomes >> > >> > DisplayScreen class>>actualScreenSize >> > self primitiveUseHighDPI: self useHighDPI. "where this is a preference" >> > ^self primitiveScreenSize >> > >> > primitiveScreenSize >> > >> > ^ 640 at 480 >> > >> > >> > Another route is to make the useHighDPI flag part of the image header state alongside the saved window size. This would mean it was added to the flags accessed via vmParameterAt: 48. There could be a command-line argument to override. >> > >> > >> > Finally I note that the beDisplay primitive simply stores the display object in the specialObjectsArray and assigns the interpreter variables that track the display, displayBits, displayWidth, displayHeight & displayDepth. It then invokes ioNoteDisplayChangedwidthheightdepth, but *all* the implementations of this function are empty. I propose that we should eliminate 5this call and its implementation. It is confusing to follow it and find it does nothing. The argument could be that a platform might require it. But if that's so we can always put it back. We have an existence proof in all our platforms that this is unlikely. Thoughts? >> > _,,,^..^,,,_ >> > best, Eliot > > > > -- > _,,,^..^,,,_ > best, Eliot From notifications at github.com Fri Oct 9 08:22:05 2020 From: notifications at github.com (Tobias Pape) Date: Fri, 09 Oct 2020 01:22:05 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: (I looked into it per your request :)) I figured that ditching `aioPoll` might not work; that said, I am not deep enough in this to understand why a writable socket might return 0. My brain start putting up "race condition?!?" warning signs, so there's that, but, ultimately, thats where my knowledge ends here -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43099489 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 9 17:38:41 2020 From: notifications at github.com (Holger Freyther) Date: Fri, 09 Oct 2020 10:38:41 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: It's late but why do you hardcode the first parameter of select to 1? While I see your fd seems to be higher than 0? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43114203 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 9 23:43:26 2020 From: notifications at github.com (Eliot Miranda) Date: Fri, 09 Oct 2020 16:43:26 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: Hi Holger, first I don’t do anything. This code is historical. I’m simply trying to understand it and fix it. Second, the reason it’s 1 is that it’s testing for writability of a single file descriptor which happens to be that of a socket. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43121931 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 9 23:52:33 2020 From: notifications at github.com (smalltalking) Date: Fri, 09 Oct 2020 16:52:33 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: The first parameter of select should be the largest file descriptor in the set + 1, so s + 1 in this case. The original code had s + 1. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43122036 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 00:01:13 2020 From: notifications at github.com (smalltalking) Date: Fri, 09 Oct 2020 17:01:13 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: The set has exactly one element, so this change is unnecessary. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43122146 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 01:27:38 2020 From: notifications at github.com (Eliot Miranda) Date: Fri, 09 Oct 2020 18:27:38 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: Hi shaping. That’s a misreading. The first argument is the number of file descriptors in the various fds arguments: The nfds argument specifies the range of descriptors to be tested. The first nfds descriptors shall be checked in each set; that is, the descriptors from zero through nfds-1 in the descriptor sets shall be examined. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43123128 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 01:50:32 2020 From: notifications at github.com (smalltalking) Date: Fri, 09 Oct 2020 18:50:32 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: Hi Eliot, it's me Levente. My comment was about the comparison of select's return value with 1 instead of checking whether it's greater than 0. If there is a file descriptor available for write in the set, the returned value always will be 1 since there's only one file descriptor in the set. So, == 1 is the same as > 0. The first argument of select is ignored on windows: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-select#parameters But on other systems (e.g. in sqUnixSocket.c), it should be set to > the highest-numbered file descriptor in any of the three sets, plus 1. The indicated file descriptors in each set are checked, up to this limit (but see BUGS). See https://www.man7.org/linux/man-pages/man2/select.2.html. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43123372 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 02:55:02 2020 From: notifications at github.com (Eliot Miranda) Date: Fri, 09 Oct 2020 19:55:02 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: Hi Levente, oops, too many messages :-). I just wanted to make the Windows and Unix versions read the same. If you think == 1 is better than > 0 then I shall change both. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43124006 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Sat Oct 10 03:17:39 2020 From: noreply at github.com (Eliot Miranda) Date: Fri, 09 Oct 2020 20:17:39 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 7d1a55: Correct my misreading of the select man page. Tha... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 7d1a55bcb22912ab6eec0d12d92441997e086deb https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7d1a55bcb22912ab6eec0d12d92441997e086deb Author: Eliot Miranda Date: 2020-10-09 (Fri, 09 Oct 2020) Changed paths: M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/win32/plugins/SocketPlugin/sqWin32NewNet.c Log Message: ----------- Correct my misreading of the select man page. Thanks Levente. From builds at travis-ci.org Sat Oct 10 03:28:48 2020 From: builds at travis-ci.org (Travis CI) Date: Sat, 10 Oct 2020 03:28:48 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2230 (Cog - 7d1a55b) In-Reply-To: Message-ID: <5f812a702b30c_13ff01e9ae97817007c@travis-tasks-bf77c78bd-j77gh.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2230 Status: Still Failing Duration: 10 mins and 38 secs Commit: 7d1a55b (Cog) Author: Eliot Miranda Message: Correct my misreading of the select man page. Thanks Levente. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/7deac028aeeb...7d1a55bcb229 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/734478642?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sat Oct 10 03:54:20 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sat, 10 Oct 2020 03:54:20 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2232 Message-ID: <20201010035420.1.B686DB238C52E1E9@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 04:25:58 2020 From: notifications at github.com (Holger Freyther) Date: Fri, 09 Oct 2020 21:25:58 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: > Hi Holger, first I don’t do anything. This code is historical. I’m simply trying to understand it and fix it. Second, the reason it’s 1 is that it’s testing for writability of a single file descriptor which happens to be that of a socket. The commit that replaced `select(s+1,` with `select(1` seemed to have your name associated with it. I am sorry if I wrongly attributed this change to you. Calling the parameter "nfds" in the manpage is misleading and I wanted to probe if it was intentional that we set the "highest fd set in the fdset" to 0 (e.g. stdin) while the debug output showed fd numbers such as 18, 19. But great that we resolved that. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43124918 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 10:32:55 2020 From: notifications at github.com (smalltalking) Date: Sat, 10 Oct 2020 03:32:55 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: Okay, it makes sense to have the same code, but then the first argument should be s + 1. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43128984 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 13:15:59 2020 From: notifications at github.com (Eliot Miranda) Date: Sat, 10 Oct 2020 06:15:59 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: You’re quite right. I had misread. An improvement to socketWritable would be to use poll on Unix. And if would be very nice to have an aio.c alternative that used epoll. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43130976 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 13:31:59 2020 From: notifications at github.com (smalltalking) Date: Sat, 10 Oct 2020 06:31:59 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: epoll wouldn't be a good choice, because many unix systems don't have it. I think libevent would be a much better choice, covering all currently supported operating systems (perhaps barring acorn. is that supported?), including windows: https://libevent.org/ -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43131161 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 13:57:04 2020 From: notifications at github.com (Eliot Miranda) Date: Sat, 10 Oct 2020 06:57:04 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: Well platforms/Unix/vm/aio.c is only used on Unixes (Linux/Solaris/MacOS). I would be very happy to see a contribution using either epoll or libevent. Most conveniently if would be a replacement for all of aio.c in a different file name because this will be easier to read, and then we can rename aio,c to be say aioViaSelect.c, aioViaLibevent.c etc which can void their contents using an ifdef controlled by config.h -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43131447 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 14:02:13 2020 From: notifications at github.com (Eliot Miranda) Date: Sat, 10 Oct 2020 07:02:13 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: BTW, who am I talking to, smalltalking? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43131510 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat Oct 10 16:53:42 2020 From: notifications at github.com (smalltalking) Date: Sat, 10 Oct 2020 09:53:42 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: It's still me, Levente. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7deac028aeeb769c8782242fc23bebdfaaa58e3d#commitcomment-43133736 -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Sat Oct 10 17:16:34 2020 From: tim at rowledge.org (tim Rowledge) Date: Sat, 10 Oct 2020 10:16:34 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unix(macOS) SocketPlugin: (7deac02) In-Reply-To: References: Message-ID: <1B31A4C1-829D-4C07-9E0B-B43F857AD670@rowledge.org> The RISC OS stuff does still work (non-cog, sadly) but claiming it is 'supported' would be a bit grandiose. I do have some RSIC OS Pi still but time to do anything with them is pretty much non-existent. And of course, it's not like RISC OS is going to suddenly become the world leading OS again. > On 2020-10-10, at 6:31 AM, smalltalking wrote: > > > epoll wouldn't be a good choice, because many unix systems don't have it. I think libevent would be a much better choice, covering all currently supported operating systems (perhaps barring acorn. is that supported?), including windows: https://libevent.org/ > > — > You are receiving this because you are subscribed to this thread. > Reply to this email directly, view it on GitHub, or unsubscribe. > tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Strange OpCodes: FR: Flip Record From stes at telenet.be Sat Oct 10 17:35:00 2020 From: stes at telenet.be (stes@PANDORA.BE) Date: Sat, 10 Oct 2020 19:35:00 +0200 (CEST) Subject: [Vm-dev] missing #endif in sqUnixMain.c ? Message-ID: <1911332260.64895872.1602351300617.JavaMail.zimbra@telenet.be> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Hi, Platform: Solaris 11.3 with SunPro C compiler 12.6. In order to compile the latest sources, I have to patch platforms/unix/vm/sqUnixMain.c #if defined(AIO_DEBUG) printf(" "VMOPTION("aiolog")" output async io logging info\n"); #endif /* missing endif ?? */ I normally compile without -DAIO_DEBUG but with the above #endif, it seems to compile both with and without -DAIO_DEBUG. Also I ran squeak with the -aiolog info to check and I get aio messages ... 11541 101 aio.c:521 aioHandle(3, ***unknownHandler***, 3/AIO_RX) 11740 199 aio.c:565 aioDisable(3) 11742 2 aio.c:545 aioSuspend(3) Regards, David Stes -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAEBCAAGBQJfgfCAAAoJEAwpOKXMq1MaKNEH/1lcrfOAqCWLODLOKkO3Nko2 1Mj3Pq1gZQFYh4HPBwlfPlJ4ZwgciXIcWL27jQtnW6uKA/PT1x4nVf21Ugne83/q f4VEc789i1FyakGkrfsihvVmLyVEwPvR54zfn8oVvh+oD2rDlWAhizpi9PWL2g9V aUOxfNcu2cMdMmollrUmh4Kv+tWT6MVLQ8NyX/m36wtpQ+SU9mXcXZy4uSfdVy3w HFku8r4/dEZUOMhTHL4qBbP5tPXcZMka7LblE5M4DESZh49o0Hqt2B5dlSfMbr/R JlS7RH1Rj0blnQfEQbv+x8noHJqYmTupON99dnoefSdi9SkHh82ql1DBgxLLkOM= =Qhcw -----END PGP SIGNATURE----- From leves at caesar.elte.hu Sat Oct 10 19:29:14 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sat, 10 Oct 2020 21:29:14 +0200 (CEST) Subject: [Vm-dev] missing #endif in sqUnixMain.c ? In-Reply-To: <1911332260.64895872.1602351300617.JavaMail.zimbra@telenet.be> References: <1911332260.64895872.1602351300617.JavaMail.zimbra@telenet.be> Message-ID: Yes, I had to patch it after checkout as well (on linux). Levente On Sat, 10 Oct 2020, stes at PANDORA.BE wrote: > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA256 > > > Hi, > > Platform: Solaris 11.3 with SunPro C compiler 12.6. > > In order to compile the latest sources, I have to patch > > platforms/unix/vm/sqUnixMain.c > > #if defined(AIO_DEBUG) > printf(" "VMOPTION("aiolog")" output async io logging info\n"); > #endif /* missing endif ?? */ > > I normally compile without -DAIO_DEBUG but with the above #endif, > it seems to compile both with and without -DAIO_DEBUG. > > Also I ran squeak with the -aiolog info to check and I get aio messages > > ... > 11541 101 aio.c:521 aioHandle(3, ***unknownHandler***, 3/AIO_RX) > 11740 199 aio.c:565 aioDisable(3) > 11742 2 aio.c:545 aioSuspend(3) > > Regards, > David Stes > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2 > > iQEcBAEBCAAGBQJfgfCAAAoJEAwpOKXMq1MaKNEH/1lcrfOAqCWLODLOKkO3Nko2 > 1Mj3Pq1gZQFYh4HPBwlfPlJ4ZwgciXIcWL27jQtnW6uKA/PT1x4nVf21Ugne83/q > f4VEc789i1FyakGkrfsihvVmLyVEwPvR54zfn8oVvh+oD2rDlWAhizpi9PWL2g9V > aUOxfNcu2cMdMmollrUmh4Kv+tWT6MVLQ8NyX/m36wtpQ+SU9mXcXZy4uSfdVy3w > HFku8r4/dEZUOMhTHL4qBbP5tPXcZMka7LblE5M4DESZh49o0Hqt2B5dlSfMbr/R > JlS7RH1Rj0blnQfEQbv+x8noHJqYmTupON99dnoefSdi9SkHh82ql1DBgxLLkOM= > =Qhcw > -----END PGP SIGNATURE----- From noreply at github.com Sat Oct 10 20:52:24 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 10 Oct 2020 13:52:24 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 0523bf: Unix socket plugin: Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 0523bff5d630ab6d221700a44a4fffee6bb6405b https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0523bff5d630ab6d221700a44a4fffee6bb6405b Author: Eliot Miranda Date: 2020-10-10 (Sat, 10 Oct 2020) Changed paths: M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c Log Message: ----------- Unix socket plugin: Fix two failures and one error for socket tests on macOS. sendto(2) may fail with EISCONN if the socket is already connected and a perr address is supplied. So if sendto errors with EISCONN retry using send. Use poll(2) instead of select for determining writability of a single socket. From builds at travis-ci.org Sat Oct 10 21:03:40 2020 From: builds at travis-ci.org (Travis CI) Date: Sat, 10 Oct 2020 21:03:40 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2231 (Cog - 0523bff) In-Reply-To: Message-ID: <5f8221abe0002_13fea35922b8893366@travis-tasks-6799d4c486-pxjh4.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2231 Status: Still Failing Duration: 10 mins and 41 secs Commit: 0523bff (Cog) Author: Eliot Miranda Message: Unix socket plugin: Fix two failures and one error for socket tests on macOS. sendto(2) may fail with EISCONN if the socket is already connected and a perr address is supplied. So if sendto errors with EISCONN retry using send. Use poll(2) instead of select for determining writability of a single socket. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/7d1a55bcb229...0523bff5d630 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/734628315?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sat Oct 10 21:26:17 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sat, 10 Oct 2020 21:26:17 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2233 Message-ID: <20201010212617.1.4DF140E854CF9B27@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Sat Oct 10 22:28:08 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 10 Oct 2020 15:28:08 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 3f34f5: Unix socket plugin: Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 3f34f58f00bb492aa0064c32b1b5b3d78fa753e9 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/3f34f58f00bb492aa0064c32b1b5b3d78fa753e9 Author: Eliot Miranda Date: 2020-10-10 (Sat, 10 Oct 2020) Changed paths: M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c Log Message: ----------- Unix socket plugin: Don't read errno unless read et al answer < 0 in sqSocketReceiveDataAvailable at al. From builds at travis-ci.org Sat Oct 10 22:39:04 2020 From: builds at travis-ci.org (Travis CI) Date: Sat, 10 Oct 2020 22:39:04 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2232 (Cog - 3f34f58) In-Reply-To: Message-ID: <5f82380828848_13f8b56da529810846@travis-tasks-6799d4c486-cj782.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2232 Status: Still Failing Duration: 10 mins and 24 secs Commit: 3f34f58 (Cog) Author: Eliot Miranda Message: Unix socket plugin: Don't read errno unless read et al answer < 0 in sqSocketReceiveDataAvailable at al. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/0523bff5d630...3f34f58f00bb View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/734642385?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sat Oct 10 23:02:54 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sat, 10 Oct 2020 23:02:54 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2234 Message-ID: <20201010230254.1.D71036BEA23796CB@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Sun Oct 11 00:57:21 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 10 Oct 2020 17:57:21 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 161310: Fix sqUnixMain.c after adding AIO_DEBUG command li... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 161310338813e55e041b7d3820a1021b287b5ff6 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/161310338813e55e041b7d3820a1021b287b5ff6 Author: Eliot Miranda Date: 2020-10-10 (Sat, 10 Oct 2020) Changed paths: M platforms/unix/vm/sqUnixMain.c Log Message: ----------- Fix sqUnixMain.c after adding AIO_DEBUG command line switch. From builds at travis-ci.org Sun Oct 11 01:11:16 2020 From: builds at travis-ci.org (Travis CI) Date: Sun, 11 Oct 2020 01:11:16 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2233 (Cog - 1613103) In-Reply-To: Message-ID: <5f825bb478a26_13f90460cfda8249d2@travis-tasks-9c75fc465-mkdqj.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2233 Status: Still Failing Duration: 13 mins and 23 secs Commit: 1613103 (Cog) Author: Eliot Miranda Message: Fix sqUnixMain.c after adding AIO_DEBUG command line switch. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/3f34f58f00bb...161310338813 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/734659383?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sun Oct 11 01:33:08 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sun, 11 Oct 2020 01:33:08 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2235 Message-ID: <20201011013308.1.F501FF8E5972FF53@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Sun Oct 11 03:25:39 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 10 Oct 2020 20:25:39 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] eb406b: macOS Cocoa/iOS: Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: eb406b72e9c1800729c4108586109b3607bf357d https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/eb406b72e9c1800729c4108586109b3607bf357d Author: Eliot Miranda Date: 2020-10-10 (Sat, 10 Oct 2020) Changed paths: M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.h M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.m M platforms/iOS/vm/OSX/sqSqueakOSXCGView.m M platforms/iOS/vm/OSX/sqSqueakOSXMetalView.m M platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m Log Message: ----------- macOS Cocoa/iOS: implement double clicks for mouse events. Split recordMouseEvent: into recordMouseEvent: & recordMouseButtonEvent:, calling the relevant one from the handlers in the platforms/iOS/vm/OSX/sqSqueakOSXFooView.m files. Have recordMouseButtonEvent: initialize the nrClicks field in the event. From builds at travis-ci.org Sun Oct 11 03:34:04 2020 From: builds at travis-ci.org (Travis CI) Date: Sun, 11 Oct 2020 03:34:04 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2234 (Cog - eb406b7) In-Reply-To: Message-ID: <5f827d2c27a2e_13fba882b89dc1429d3@travis-tasks-9c75fc465-xkj52.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2234 Status: Still Failing Duration: 7 mins and 53 secs Commit: eb406b7 (Cog) Author: Eliot Miranda Message: macOS Cocoa/iOS: implement double clicks for mouse events. Split recordMouseEvent: into recordMouseEvent: & recordMouseButtonEvent:, calling the relevant one from the handlers in the platforms/iOS/vm/OSX/sqSqueakOSXFooView.m files. Have recordMouseButtonEvent: initialize the nrClicks field in the event. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/161310338813...eb406b72e9c1 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/734674427?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sun Oct 11 04:01:26 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sun, 11 Oct 2020 04:01:26 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2236 Message-ID: <20201011040126.1.806A1A28EB76D581@appveyor.com> An HTML attachment was scrubbed... URL: From stes at telenet.be Sun Oct 11 14:28:08 2020 From: stes at telenet.be (stes@PANDORA.BE) Date: Sun, 11 Oct 2020 16:28:08 +0200 (CEST) Subject: [Vm-dev] missing #endif in sqUnixMain.c ? In-Reply-To: <1911332260.64895872.1602351300617.JavaMail.zimbra@telenet.be> References: <1911332260.64895872.1602351300617.JavaMail.zimbra@telenet.be> Message-ID: <1324039578.67796227.1602426488574.JavaMail.zimbra@telenet.be> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 It's compiling again after the fix yesterday. Thanks ... David -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAEBCAAGBQJfgxYuAAoJEAwpOKXMq1MaZ34H/Rr+H4xVwTNoOsxv/6oDgMk+ IUR7ozPjUC2L7euz9lZL8db337aNaHUP3rj6UeEEXgxAGvHKx0vGrqnbgS3sMsig fGkT+QFwOEta7vN5DdC8rQRLQgvu1RHFfam5rBmEif1xCjh/zsAXlRAmlgtTr8/l tqAlgKYTedM1nlE/nb7YC+FdIqC7by7stuNW9nRZ6nSdN0a/ImN9HI6xeRsBQJMN VPnn4v+dFR1eR9I92SwX5rnee44FChURyGevPs2vIv3QVQ8FMHybEyD2JpO/EEPQ 9wHkn7J+lw+ozafhNmCH4lj19QxouDEYVLMBWJL/iFjT2iAxAJOOPDM5iR43zDU= =ZTyB -----END PGP SIGNATURE----- From eliot.miranda at gmail.com Sun Oct 11 18:15:09 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun, 11 Oct 2020 11:15:09 -0700 Subject: [Vm-dev] Pool for sysconf constants? Message-ID: Hi All, I want to implement a number of processors query on MacOS & other unices to complement the info provided by GetSystemInfo on Windows. The natural way to do this on unices is to use sysconf (3), and of course this points to the issue for which FFI pools are needed, the constant names for sysconf such as _SC_NPROCESSORS_ONLN are defined, but their values are implementation dependent. But before I go amd implement an FFI pool for this I thought I'd ask a) anyone already done this? Is it published anywhere? b) how are we going to organize such pools so that people don't have to reinvent the wheel? c) should there be a pool to cover sysconf or to cover unistd.h? (the point here is that while the pool might start off small, it could grow and grow and maybe unistd.h is too much surface to cover) thoughts, suggestions? _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 12 12:07:23 2020 From: notifications at github.com (dcstes) Date: Mon, 12 Oct 2020 05:07:23 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add -DAIO_DEBUG to mvm files for SunOS (#527) Message-ID: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Hi, The following patch adds -DAIO_DEBUG to the SunOS mvm scripts. It should be safe as this only impacts the build.sunos* directories. Note on the other hand that I think the -aiolog option is interesting, because probably the UNIX AT&T derived kernel specifics are different in a subtle way from BSD UNIX or Linux derived kernels. Remember that a few months ago I actually submitted a patch platforms/unix/vm/aio.c: # include <sys/file.h> /* FASYNC or ioctl FIOASYNC will be issued */ I suspect this is a very complicated matter ... (unfortunately). But it may help to have the -aiolog. Regards, David Stes -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAEBCAAGBQJfhEZkAAoJEAwpOKXMq1MaOhwIAJco0jGEz7qR1mOliCcFuMaw hx94K/xZdFZ/VITM6Za2ZINq+sfDOnBiFyOYkRd3ZpCbdp3s0/TzhVmRLRGk+Das qeevFJ4Oa/R6boyrwCx1OK02Ps8WHCHMN+YWpzXU1lyJmARgGy4bUHkZes4I1wtd yQGRWLSRjyQCCyl1PPiCazwtKUH6Vd/Kax79yVU51zPwTtKnz4Y0uX2Z7yOwqZ3x K+YRXdUaKkTqsldfj37oAjAdHW1bCUSbMP2UUfFZyS533Q7UYkzcwxnsbXC5uAl4 Xl7MXlhtnFnlQwA4lYf7fcz+s6J9hBWzQY6aBQTM4Mq8rcXA8WKf+YIwTCEaA6s= =K1T7 -----END PGP SIGNATURE----- You can view, comment on, or merge this pull request online at: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/527 -- Commit Summary -- * SunOS change: change /usr/bin/gmake to gmake in mvm * SunOS change: add -DAIO_DEBUG to mvm files -- File Changes -- M build.sunos32x86/squeak.cog.spur/build/mvm (4) M build.sunos32x86/squeak.stack.spur/build/mvm (4) M build.sunos64x64/squeak.cog.spur/build/mvm (4) M build.sunos64x64/squeak.stack.spur/build/mvm (4) -- Patch Links -- https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/527.patch https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/527.diff -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/527 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 12 12:40:16 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 12 Oct 2020 12:40:16 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2237 Message-ID: <20201012124016.1.8178B45544D7B541@appveyor.com> An HTML attachment was scrubbed... URL: From ken.dickey at whidbey.com Mon Oct 12 21:20:51 2020 From: ken.dickey at whidbey.com (ken.dickey at whidbey.com) Date: Mon, 12 Oct 2020 14:20:51 -0700 Subject: [Vm-dev] Multicore Musings Message-ID: <1f7726b8f390f5e0939b7c2e4349c6e1@whidbey.com> Greetings, Nothing big here. I was updating my view of multicore GC strategies and happened on a paper with an interesting conclusion: "Our evaluation suggests that today, there is no conceptual reason to believe that the pause time of a stop-the-world GC will increase with the increasing number of cores and memory size of multicore hardware." https://hal.inria.fr/file/index/docid/868012/filename/gidra13asplos-naps.pdf The description in the paper sounds a lot less complicated than a number of multicore gc strategies I have been looking at. Also of note, http://concurrencykit.org with a library of cross-platform lock-free code, which might make playing with the above strategy a bit simpler. I really don't have time to chase this, but just in case someone out there has a grad student looking for a project.. ;^) FYI, -KenD From noreply at github.com Tue Oct 13 04:58:46 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 12 Oct 2020 21:58:46 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 0361fc: Add WindowEventMetricChange support for macOS (iOS... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 0361fc33d5f72b153b098f6400bad9b664a2625f https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0361fc33d5f72b153b098f6400bad9b664a2625f Author: Eliot Miranda Date: 2020-10-12 (Mon, 12 Oct 2020) Changed paths: M platforms/Cross/vm/sq.h M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.h M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.m M platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m Log Message: ----------- Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (NSWIndow was used in a few places instead of NSWindow). Replace the charming WindowEventStinks with the more utilitarian WindowEventScreenChange. Update and add commentary in sq.h for major features/flavours. From builds at travis-ci.org Tue Oct 13 05:10:31 2020 From: builds at travis-ci.org (Travis CI) Date: Tue, 13 Oct 2020 05:10:31 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2236 (Cog - 0361fc3) In-Reply-To: Message-ID: <5f8536c717123_13fcdbef9d7801168c7@travis-tasks-598d6c64d9-5vzxq.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2236 Status: Still Failing Duration: 11 mins and 13 secs Commit: 0361fc3 (Cog) Author: Eliot Miranda Message: Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (NSWIndow was used in a few places instead of NSWindow). Replace the charming WindowEventStinks with the more utilitarian WindowEventScreenChange. Update and add commentary in sq.h for major features/flavours. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/eb406b72e9c1...0361fc33d5f7 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/735255488?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Tue Oct 13 05:35:58 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 12 Oct 2020 22:35:58 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 2806de: Add cameraPlugin to linux ARMv8 builds. [ci skip] Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 2806de127582c35b34d01de9db7f5e48c5f06b00 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/2806de127582c35b34d01de9db7f5e48c5f06b00 Author: Eliot Miranda Date: 2020-10-12 (Mon, 12 Oct 2020) Changed paths: R build.linux64ARMv8/squeak.cog.spur/makeallclean R build.linux64ARMv8/squeak.cog.spur/makealldirty A build.linux64ARMv8/squeak.cog.spur/makeclean A build.linux64ARMv8/squeak.cog.spur/makedirty M build.linux64ARMv8/squeak.cog.spur/plugins.ext Log Message: ----------- Add cameraPlugin to linux ARMv8 builds. [ci skip] From no-reply at appveyor.com Tue Oct 13 05:32:18 2020 From: no-reply at appveyor.com (AppVeyor) Date: Tue, 13 Oct 2020 05:32:18 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2238 Message-ID: <20201013053218.1.681D24C52A24AC33@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 13 08:08:21 2020 From: notifications at github.com (Tobias Pape) Date: Tue, 13 Oct 2020 01:08:21 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (0361fc3) In-Reply-To: References: Message-ID: What is being switched here? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0361fc33d5f72b153b098f6400bad9b664a2625f#commitcomment-43194402 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 13 08:27:17 2020 From: notifications at github.com (Eliot Miranda) Date: Tue, 13 Oct 2020 01:27:17 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (0361fc3) In-Reply-To: References: Message-ID: A frivolous name WindowEventWindowStinks for a useful one WindowEventScreenChange -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0361fc33d5f72b153b098f6400bad9b664a2625f#commitcomment-43195040 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 13 08:29:50 2020 From: notifications at github.com (Tobias Pape) Date: Tue, 13 Oct 2020 01:29:50 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (0361fc3) In-Reply-To: References: Message-ID: I love that sentence,but the swithc is missing a `case`, it only has a default, does it? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0361fc33d5f72b153b098f6400bad9b664a2625f#commitcomment-43195124 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 13 10:12:37 2020 From: notifications at github.com (=?UTF-8?B?TWFyZWsgTmllcGlla8WCbw==?=) Date: Tue, 13 Oct 2020 03:12:37 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (0361fc3) In-Reply-To: References: Message-ID: I noticed the missing `case`, too. An experiment in VS 2019 shows that part after `switch()` is skipped (in C++). Does OjbC handle it differently? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0361fc33d5f72b153b098f6400bad9b664a2625f#commitcomment-43197994 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 13 15:17:25 2020 From: notifications at github.com (Eliot Miranda) Date: Tue, 13 Oct 2020 08:17:25 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (0361fc3) In-Reply-To: References: Message-ID: I *think* you're being misled by git diffs. here's the actual switch in the source ``` switch (windowType) { NSRect frame = [window frame]; NSRect screen = [[window screen] frame]; evt.value1 = frame.origin.x; evt.value2 = screen.size.height - (frame.size.height + frame.origin.y); evt.value3 = frame.size.width; evt.value4 = frame.size.height; break; default: evt.value1 = 0; evt.value2 = 0; evt.value3 = 0; evt.value4 = 0; }``` That's quite regular, right? It's wrong, because the image wants left/top/right/bottom, not left/top/width/height, but... :-) -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0361fc33d5f72b153b098f6400bad9b664a2625f#commitcomment-43207067 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 13 15:30:40 2020 From: notifications at github.com (Tobias Pape) Date: Tue, 13 Oct 2020 08:30:40 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (0361fc3) In-Reply-To: References: Message-ID: The `case ... : ` is missing. I would have expected: ```C switch (windowType) { case SOMETHING: NSRect frame = [window frame]; NSRect screen = [[window screen] frame]; evt.value1 = frame.origin.x; evt.value2 = screen.size.height - (frame.size.height + frame.origin.y); evt.value3 = frame.size.width; evt.value4 = frame.size.height; break; default: evt.value1 = 0; evt.value2 = 0; evt.value3 = 0; evt.value4 = 0; } ``` but there is no `case` _me puzzled_ -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0361fc33d5f72b153b098f6400bad9b664a2625f#commitcomment-43207555 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 13 15:42:00 2020 From: notifications at github.com (=?UTF-8?B?TWFyZWsgTmllcGlla8WCbw==?=) Date: Tue, 13 Oct 2020 08:42:00 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (0361fc3) In-Reply-To: References: Message-ID: Clearly, some case of ```windowType``` is expected. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0361fc33d5f72b153b098f6400bad9b664a2625f#commitcomment-43207978 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 13 16:13:40 2020 From: notifications at github.com (Eliot Miranda) Date: Tue, 13 Oct 2020 09:13:40 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add WindowEventMetricChange support for macOS (iOS). Fix a nasty typo in iOS (0361fc3) In-Reply-To: References: Message-ID: Doh! Thanks both. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0361fc33d5f72b153b098f6400bad9b664a2625f#commitcomment-43209054 -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Tue Oct 13 16:34:25 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Tue, 13 Oct 2020 16:34:25 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2839.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2839.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2839 Author: eem Time: 13 October 2020, 9:34:17.903415 am UUID: 5eedee46-0fa4-447e-9120-9aebf820f065 Ancestors: VMMaker.oscog-eem.2838 Correct the coercion code. - no longer have a catch-all in Object, requiring the relevant classes to coerce themselves explicitly. - have Integer do its best to properly interpret C integer casts, including signed values, so that e.g. (self cCoerce: 65535 to: #short) = -1. So far Float only deals with #float. Have HostWindowPlugin use cCoerce:to:, not cCoerceSimple:to: =============== Diff against VMMaker.oscog-eem.2838 =============== Item was changed: ----- Method: Cogit>>cCoerce:to: (in category 'simulation only') ----- cCoerce: value to: cTypeString "Type coercion. For translation a cast will be emmitted. When running in Smalltalk answer a suitable wrapper for correct indexing." + ^value coerceTo: cTypeString sim: objectMemory! - ^value - ifNil: [value] - ifNotNil: [value coerceTo: cTypeString sim: objectMemory]! Item was added: + ----- Method: Float>>coerceTo:sim: (in category '*VMMaker-interpreter simulator') ----- + coerceTo: cTypeString sim: interpreter + + cTypeString = #'float' ifTrue: + [^self]. + self halt! Item was changed: ----- Method: HostWindowPlugin>>pointFromCompactPointEncoding: (in category 'support') ----- pointFromCompactPointEncoding: encodedPoint "Answer a point from one of the funky encoded x,y position/size values the VM uses. The issue here is that the values can be negative, each value being in the range -32768 to 32767" ^interpreterProxy makePointwithxValue: (self cCoerceSimple: encodedPoint >> 16 to: #short) + yValue: (self cCoerce: (encodedPoint bitAnd: 16rFFFF) to: #short)! - yValue: (self cCoerceSimple: (encodedPoint bitAnd: 16rFFFF) to: #short)! Item was changed: ----- Method: Integer>>coerceTo:sim: (in category '*VMMaker-interpreter simulator') ----- coerceTo: cTypeString sim: interpreter + | bits unitSize | - | unitSize | cTypeString last == $* ifTrue: "C pointer" [unitSize := cTypeString caseOf: { [#'char *'] -> [1]. [#'short *'] -> [2]. [#'int *'] -> [4]. [#'long long *'] -> [8]. [#'float *'] -> [^CFloatArray basicNew interpreter: interpreter address: self unitSize: 4; yourself]. [#'double *'] -> [^CFloatArray basicNew interpreter: interpreter address: self unitSize: 8; yourself]. [#'unsigned *'] -> [4]. [#'unsigned int *'] -> [4]. [#'unsigned char *'] -> [1]. [#'signed char *'] -> [1]. [#'unsigned short *'] -> [2]. [#'unsigned long long *'] -> [8]. [#'oop *'] -> [interpreter objectMemory bytesPerOop]. } otherwise: [interpreter objectMemory wordSize]. ^CArray basicNew interpreter: interpreter address: self unitSize: unitSize; yourself]. cTypeString first == $u ifTrue: + [bits := cTypeString caseOf: { + [#usqInt] -> [interpreter objectMemory wordSize * 8]. + [#usqLong] -> [64]. + [#unsigned] -> [32]. + [#'unsigned char'] -> [8]. + [#'unsigned int'] -> [8]. + [#'unsigned long'] -> [48]. "LLP64 on Windows :-(" + [#'unsigned long long'] -> [64]. + [#'unsigned short'] -> [16]. - [unitSize := cTypeString caseOf: { - [#usqInt] -> [interpreter objectMemory wordSize]. - [#usqLong] -> [8]. - [#unsigned] -> [4]. - [#'unsigned int'] -> [4]. - [#'unsigned char'] -> [1]. - [#'unsigned long'] -> [6]. - [#'unsigned short'] -> [2]. - [#'unsigned long long'] -> [8]. } + otherwise: [self error: 'unknown unsigned integer type name']. + ^self bitAnd: 1 << bits - 1]. + bits := cTypeString caseOf: { + [#'sqIntptr_t'] -> [interpreter objectMemory wordSize * 8]. + [#sqLong] -> [64]. + [#char] -> [^self bitAnd: 255]. "char may be signed, may be unsigned; interpret as unsigned by default" + [#'signed char'] -> [8]. + [#'short'] -> [16]. + [#int] -> [32]. + [#long] -> [48]. "LLP64 on Windows :-(" + [#'long long'] -> [64]. + } + otherwise: [self error: 'unknown signed integer type name']. + ^(self bitAnd: (1 bitShift: bits) - 1) - ((self bitAnd: (1 bitShift: bits - 1)) bitShift: 1)! - otherwise: [self error: 'unknown unsigned type name']. - ^self bitAnd: 1 << (8 * unitSize) - 1]. - ^self "C number (int, char, etc)"! Item was changed: ----- Method: InterpreterPlugin>>cCoerce:to: (in category 'simulation') ----- cCoerce: value to: cTypeString + ^value coerceTo: cTypeString sim: interpreterProxy! - "Type coercion for translation only; just return the value when running in Smalltalk. - This overrides the generic coercion method in VMClass. For some reason we are the exception. - If we want that style of coercion we can send cCoerce:to: to interpreterProxy, not self." - - ^value isCArray - ifTrue: [value coerceTo: cTypeString sim: interpreterProxy] - ifFalse: [value]! Item was changed: ----- Method: InterpreterProxy>>cCoerce:to: (in category 'simulation only') ----- cCoerce: value to: cTypeString "Type coercion. For translation a cast will be emitted. When running in Smalltalk answer a suitable wrapper for correct indexing." + ^value coerceTo: cTypeString sim: self! - ^value - ifNil: [value] - ifNotNil: [value coerceTo: cTypeString sim: self]! Item was removed: - ----- Method: Object>>cCoerce:to: (in category '*VMMaker-translation support') ----- - cCoerce: value to: cType - "Type coercion for translation only; just return the value when running in Smalltalk." - - ^ value! Item was changed: ----- Method: SocketPluginSimulator>>cCoerce:to: (in category 'simulation') ----- cCoerce: value to: cTypeString "Type coercion for translation only; just return the value when running in Smalltalk. This overrides the generic coercion method in VMClass. For some reason we are the exception. If we want that style of coercion we can send cCoerce:to: to interpreterProxy, not self." + ^value + coerceTo: (cTypeString = #SocketPtr ifTrue: [#'char *'] ifFalse: [cTypeString]) + sim: interpreterProxy! - ^cTypeString = #SocketPtr - ifTrue: [value coerceTo: #'char *' sim: interpreterProxy] - ifFalse: [super cCoerce: value to: cTypeString]! Item was added: + ----- Method: UndefinedObject>>coerceTo:sim: (in category '*VMMaker-interpreter simulator') ----- + coerceTo: cTypeString sim: interpreterSimulator + ^self! Item was changed: ----- Method: VMClass>>cCoerce:to: (in category 'memory access') ----- cCoerce: value to: cTypeString "Type coercion. For translation a cast will be emitted. When running in Smalltalk answer a suitable wrapper for correct indexing." + ^value coerceTo: cTypeString sim: self! - ^value - ifNil: [value] - ifNotNil: [value coerceTo: cTypeString sim: self]! From commits at source.squeak.org Tue Oct 13 16:41:03 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Tue, 13 Oct 2020 16:41:03 0000 Subject: [Vm-dev] VM Maker: VMMakerUI-eem.28.mcz Message-ID: Eliot Miranda uploaded a new version of VMMakerUI to project VM Maker: http://source.squeak.org/VMMaker/VMMakerUI-eem.28.mcz ==================== Summary ==================== Name: VMMakerUI-eem.28 Author: eem Time: 13 October 2020, 9:41:02.540423 am UUID: 25c587b1-1972-41a3-ab3e-94e2b2d9cdb3 Ancestors: VMMakerUI-eem.27 Add click count to mouse e4vents and do a better job at collapsing mouse moves. But the collapse code is still wrong; a much better way would be to peek in teh event queue and update the last event in teh queue to the curreent position if it is also a mouse move. Also a UI indication that the event queue was not empty could help in not generating too many evennts. =============== Diff against VMMakerUI-eem.27 =============== Item was changed: ----- Method: SimulatorEventTransformer>>degenerateMouseEvent: (in category 'event transformation') ----- degenerateMouseEvent: aMorphicEvent "see HandMorph>>generateMouseEvent" modifiers := aMorphicEvent buttons >> 3. "Sad, but modifiers come in on mouse move events..." aMorphicEvent type == #mouseMove ifTrue: [buttons = 0 ifTrue: [^nil]] "filter-out mouse moves unless buttons are pressed, so simulation doersn't get window leave events when we leave its window" ifFalse: [buttons := aMorphicEvent buttons]. ^{ 1. aMorphicEvent timeStamp. aMorphicEvent position x. aMorphicEvent position y. buttons bitAnd: 7. "thanks Ron T." buttons >> 3. "Thanks dtl" + aMorphicEvent class == MouseButtonEvent ifTrue: [aMorphicEvent nClicks] ifFalse: [0]. + 0 "this is windowIndex" }! - 0. - 0 }! Item was changed: ----- Method: SimulatorEventTransformer>>degenerateMouseEvent:for: (in category 'event transformation') ----- degenerateMouseEvent: aMorphicEvent for: aClient "Convert the mouse event into low-level events for the VM simulator (aClient). Filter-out mouse moves, and generate a fake mouse move before each button press. See HandMorph>>generateMouseEvent" | translated | modifiers := aMorphicEvent buttons >> 3. "Sad, but modifiers come in on mouse move events..." "filter-out mouse moves unless buttons are pressed, so simulation doesn't get window leave events when we leave its window" aMorphicEvent type == #mouseMove ifTrue: [(aClient displayView bounds containsPoint: aMorphicEvent position) ifFalse: [^self]. "If buttons (which includes modifiers) change, or are pressed, communicate the event, otherwise (at least potentially) filter it out." + aMorphicEvent buttons = 0 ifTrue: + [lastMouseMoveEvent := aMorphicEvent copy. + lastMouseMoveEvent timeStamp: (aClient ioUTCMicroseconds // 1000). + lastMouseMoveEvent position: lastMouseMoveEvent position - aClient displayView bounds origin. + ^self]]. + "Now output the last move event, and synthesize an event near to the current position" - (aMorphicEvent buttons = 0 - and: [lastMouseMoveEvent notNil - and: [lastMouseMoveEvent buttons = 0]]) ifTrue: - [lastMouseMoveEvent := aMorphicEvent copy. - lastMouseMoveEvent timeStamp: (aClient ioUTCMicroseconds // 1000). - lastMouseMoveEvent position: lastMouseMoveEvent position - aClient displayView bounds origin. - ^self]]. lastMouseMoveEvent ifNotNil: + [:lastMouseMove| + aClient + queueForwardedEvent: - [aClient queueForwardedEvent: { EventTypeMouse. + lastMouseMove timeStamp. + lastMouseMove position x. + lastMouseMove position y. + lastMouseMove buttons bitAnd: 7. + lastMouseMove buttons >> 3. - lastMouseMoveEvent timeStamp. - lastMouseMoveEvent position x. - lastMouseMoveEvent position y. - lastMouseMoveEvent buttons bitAnd: 7. - lastMouseMoveEvent buttons >> 3. 0. + self windowIndex }; + queueForwardedEvent: + { EventTypeMouse. + aClient ioUTCMicroseconds // 1000 + lastMouseMove timeStamp // 2. + aMorphicEvent position x * 9 + lastMouseMove position x // 10. + aMorphicEvent position y * 9 + lastMouseMove position y // 10. + lastMouseMove buttons bitAnd: 7. + lastMouseMove buttons >> 3. + 0. self windowIndex }. lastMouseMoveEvent := nil]. buttons := aMorphicEvent buttons. translated := aMorphicEvent position - aClient displayView bounds origin. aClient queueForwardedEvent: { EventTypeMouse. aClient ioUTCMicroseconds // 1000. translated x. translated y. buttons bitAnd: 7. "thanks Ron T." buttons >> 3. "Thanks dtl" + aMorphicEvent class == MouseButtonEvent ifTrue: [aMorphicEvent nClicks] ifFalse: [0]. - 0. self windowIndex }! From eliot.miranda at gmail.com Tue Oct 13 19:50:18 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue, 13 Oct 2020 12:50:18 -0700 Subject: [Vm-dev] Screen coordinates for the main Squeak window/host windows Message-ID: Hi John, Hi Vanessa, Hi HostWindowPlugin folks, I've managed to compute window rectangles for WindowEventMetricChange events correctly on macOS/Cocoa. But I'm not sure whether the origin of a window includes its menu bar or not. So should the origin of the Squeak Window be reported as the position relative to the top left of the Mac's main display of... - the origin of the host window containing the Squeak window ? - the origin of the Squeak display (which is menuBarHeight screen coordinates further down than the window origin) ? Similarly should the HostWindowPlugin report window origins and sizes for the actual host window, or form the content of the window, offsetting downwards by the menu bar height? _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From vanessa at codefrau.net Tue Oct 13 20:39:14 2020 From: vanessa at codefrau.net (Vanessa Freudenberg) Date: Tue, 13 Oct 2020 13:39:14 -0700 Subject: [Vm-dev] Screen coordinates for the main Squeak window/host windows In-Reply-To: References: Message-ID: Maybe check Chrome's "Multi-Screen Window Placement API" docs? https://www.chromestatus.com/feature/5252960583942144 Another idea would be to check what X11 window managers do - I think they do respect app's placement wishes. No time to get into this atm unfortunately. - Vanessa - On Tue, Oct 13, 2020 at 12:50 PM Eliot Miranda wrote: > Hi John, Hi Vanessa, Hi HostWindowPlugin folks, > > I've managed to compute window rectangles for WindowEventMetricChange > events correctly on macOS/Cocoa. But I'm not sure whether the origin of a > window includes its menu bar or not. > > So should the origin of the Squeak Window be reported as the position > relative to the top left of the Mac's main display of... > - the origin of the host window containing the Squeak window ? > - the origin of the Squeak display (which is menuBarHeight screen > coordinates further down than the window origin) ? > > Similarly should the HostWindowPlugin report window origins and sizes for > the actual host window, or form the content of the window, offsetting > downwards by the menu bar height? > _,,,^..^,,,_ > best, Eliot > -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Tue Oct 13 21:52:49 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 13 Oct 2020 14:52:49 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 2739b1: Implement the WindowEventMetricChanged and WindowE... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 2739b1b7c72b6c7c8ca37f17e0393ac00752fc63 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/2739b1b7c72b6c7c8ca37f17e0393ac00752fc63 Author: Eliot Miranda Date: 2020-10-13 (Tue, 13 Oct 2020) Changed paths: M platforms/Cross/plugins/HostWindowPlugin/HostWindowPlugin.h M platforms/iOS/plugins/HostWindowPlugin/sqMacHostWindow.h M platforms/iOS/plugins/HostWindowPlugin/sqMacHostWindow.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.m M platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m Log Message: ----------- Implement the WindowEventMetricChanged and WindowEventChangeScreen events for macOS. There's still some glitches; positioning a window via the HWP offsets downwards by either the window title height or the screen menu bar height. From builds at travis-ci.org Tue Oct 13 22:04:37 2020 From: builds at travis-ci.org (Travis CI) Date: Tue, 13 Oct 2020 22:04:37 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2237 (Cog - 2739b1b) In-Reply-To: Message-ID: <5f862474cf1c3_13ffbd9ae11a81519c7@travis-tasks-84c9f794d6-vxnpl.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2237 Status: Still Failing Duration: 11 mins and 16 secs Commit: 2739b1b (Cog) Author: Eliot Miranda Message: Implement the WindowEventMetricChanged and WindowEventChangeScreen events for macOS. There's still some glitches; positioning a window via the HWP offsets downwards by either the window title height or the screen menu bar height. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/2806de127582...2739b1b7c72b View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/735546316?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Tue Oct 13 22:28:06 2020 From: no-reply at appveyor.com (AppVeyor) Date: Tue, 13 Oct 2020 22:28:06 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2239 Message-ID: <20201013222806.1.59376AEB830FC357@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Wed Oct 14 18:01:15 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 14 Oct 2020 18:01:15 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2840.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2840.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2840 Author: eem Time: 14 October 2020, 11:01:06.097256 am UUID: e2709af7-a070-4ba8-afa4-84d4061bbe73 Ancestors: VMMaker.oscog-eem.2839 Add a primCameraUID primitive, to equal facilities in teh Qwaq QWebcam plugin (even thoguh this appears inoperative on Windows). Add module start-up and shutdown operaitonsd, useful for cleanup. =============== Diff against VMMaker.oscog-eem.2839 =============== Item was added: + ----- Method: CameraPlugin>>initialiseModule (in category 'initialize-release') ----- + initialiseModule + + ^self cameraInit! Item was changed: ----- Method: CameraPlugin>>primCameraName (in category 'primitives') ----- primCameraName "Answer the name for the camera with the given number. Fail if the camera number is less than one or greater than the number of available cameras." | cameraNum | cameraNum := interpreterProxy stackIntegerValue: 0. interpreterProxy failed ifFalse: + [interpreterProxy methodReturnString: (self CameraName: cameraNum)] "fails for a NULL string..."! - [interpreterProxy methodReturnString: (self CameraName: cameraNum)]! Item was added: + ----- Method: CameraPlugin>>primCameraUID (in category 'primitives') ----- + primCameraUID + "Answer a UID for the camera with the given number. + Fail if the camera number is less than one or greater than the number of available cameras." + + + | cameraNum | + cameraNum := interpreterProxy stackIntegerValue: 0. + interpreterProxy failed ifFalse: + [interpreterProxy methodReturnString: (self CameraUID: cameraNum)] "fails for a NULL string..."! Item was added: + ----- Method: CameraPlugin>>shutdownModule (in category 'initialize-release') ----- + shutdownModule + + ^self cameraShutdown! From noreply at github.com Wed Oct 14 18:16:00 2020 From: noreply at github.com (Eliot Miranda) Date: Wed, 14 Oct 2020 11:16:00 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] bb4e0c: CameraPlugin source as per VMMaker.oscog-eem.2840 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: bb4e0cbedcae9d125e44b2e057f8b44debd9906c https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/bb4e0cbedcae9d125e44b2e057f8b44debd9906c Author: Eliot Miranda Date: 2020-10-14 (Wed, 14 Oct 2020) Changed paths: M build.linux64ARMv8/squeak.cog.spur/build.debug/mvm M build.linux64ARMv8/squeak.cog.spur/plugins.ext M platforms/Cross/plugins/CameraPlugin/CameraPlugin.h M platforms/iOS/plugins/CameraPlugin/AVFoundationVideoGrabber.m M platforms/unix/plugins/CameraPlugin/sqCamera-linux.c M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/unix/vm/aio.c M platforms/win32/plugins/CameraPlugin/winCameraOps.cpp M src/plugins/CameraPlugin/CameraPlugin.c Log Message: ----------- CameraPlugin source as per VMMaker.oscog-eem.2840 Add a primCameraUID primitive, to equal facilities in the Qwaq QWebcam plugin (even though this appears inoperative on Windows). Add module start-up and shutdown operations, useful for cleanup. On Windows fix a storage leak with enumerating names. On Linux implement the plumbing for CameraSetSemaphore and check the necessary capability, but at least on 5.x kernels and earliuer there is no SIGIO notifi- cation, and hence the asynchronous interface is currently unavailable. We could work around this by spawning a thread to do blocking reads, but I don't have the time right now. Make a function static in sqUnixSocket.c. Correct the ioctl code (unused on current platforms) to use the TIOCSPGRP arg to ioctl (SIOCSPGRP is socket-specific). This may be wrong, but if it is it will require the aioEnable interface to be extended to allow clients to state whether they are sockets or not. Enable the CameraPlugin on build.linux64ARMv8. From builds at travis-ci.org Wed Oct 14 18:32:24 2020 From: builds at travis-ci.org (Travis CI) Date: Wed, 14 Oct 2020 18:32:24 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2238 (Cog - bb4e0cb) In-Reply-To: Message-ID: <5f8744382b721_13f8e7c8b631c178588@travis-tasks-84df76db48-dr62s.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2238 Status: Still Failing Duration: 15 mins and 16 secs Commit: bb4e0cb (Cog) Author: Eliot Miranda Message: CameraPlugin source as per VMMaker.oscog-eem.2840 Add a primCameraUID primitive, to equal facilities in the Qwaq QWebcam plugin (even though this appears inoperative on Windows). Add module start-up and shutdown operations, useful for cleanup. On Windows fix a storage leak with enumerating names. On Linux implement the plumbing for CameraSetSemaphore and check the necessary capability, but at least on 5.x kernels and earliuer there is no SIGIO notifi- cation, and hence the asynchronous interface is currently unavailable. We could work around this by spawning a thread to do blocking reads, but I don't have the time right now. Make a function static in sqUnixSocket.c. Correct the ioctl code (unused on current platforms) to use the TIOCSPGRP arg to ioctl (SIOCSPGRP is socket-specific). This may be wrong, but if it is it will require the aioEnable interface to be extended to allow clients to state whether they are sockets or not. Enable the CameraPlugin on build.linux64ARMv8. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/2739b1b7c72b...bb4e0cbedcae View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/735810514?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Wed Oct 14 18:50:23 2020 From: no-reply at appveyor.com (AppVeyor) Date: Wed, 14 Oct 2020 18:50:23 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2240 Message-ID: <20201014185023.1.C82CB04E0A2192AD@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Thu Oct 15 22:28:15 2020 From: noreply at github.com (Eliot Miranda) Date: Thu, 15 Oct 2020 15:28:15 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] eb2d9e: SocketPlugin: Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: eb2d9e2d1e2ef377857ca1b60c5d228b1f60b30a https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/eb2d9e2d1e2ef377857ca1b60c5d228b1f60b30a Author: Eliot Miranda Date: 2020-10-15 (Thu, 15 Oct 2020) Changed paths: M platforms/Cross/plugins/SocketPlugin/SocketPlugin.h M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/win32/plugins/SocketPlugin/sqWin32NewNet.c Log Message: ----------- SocketPlugin: Move common defines from the platform-specific support code into SocketPlugin.h. Support SQ_SOCKET_FAMILY_UNSPECIFIED in primitiveResolverGetAddressInfo/ primitiveResolverGetAddressInfoHost:service:flags:family:type:protocol:/ sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol. Change the win32 code so that if( => if ( & while( => while (. These are not function calls. From builds at travis-ci.org Thu Oct 15 22:40:03 2020 From: builds at travis-ci.org (Travis CI) Date: Thu, 15 Oct 2020 22:40:03 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2239 (Cog - eb2d9e2) In-Reply-To: Message-ID: <5f88cfc3cb87_13f9ed2db66f8181951@travis-tasks-7c455996f5-tm6gp.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2239 Status: Still Failing Duration: 11 mins and 19 secs Commit: eb2d9e2 (Cog) Author: Eliot Miranda Message: SocketPlugin: Move common defines from the platform-specific support code into SocketPlugin.h. Support SQ_SOCKET_FAMILY_UNSPECIFIED in primitiveResolverGetAddressInfo/ primitiveResolverGetAddressInfoHost:service:flags:family:type:protocol:/ sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol. Change the win32 code so that if( => if ( & while( => while (. These are not function calls. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/bb4e0cbedcae...eb2d9e2d1e2e View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736197269?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Thu Oct 15 23:03:00 2020 From: no-reply at appveyor.com (AppVeyor) Date: Thu, 15 Oct 2020 23:03:00 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2241 Message-ID: <20201015230300.1.B921D58625AA4260@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Fri Oct 16 02:32:21 2020 From: noreply at github.com (Eliot Miranda) Date: Thu, 15 Oct 2020 19:32:21 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] ed4ce2: Windows plugins: Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: ed4ce29b63faa26c7e8632eb68084c4dd5496adf https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/ed4ce29b63faa26c7e8632eb68084c4dd5496adf Author: Eliot Miranda Date: 2020-10-15 (Thu, 15 Oct 2020) Changed paths: M build.win32x86/squeak.cog.spur.lowcode/plugins.ext M build.win32x86/squeak.cog.spur/plugins.ext M build.win32x86/squeak.cog.v3/plugins.ext M build.win32x86/squeak.sista.spur/plugins.ext M build.win32x86/squeak.stack.spur/plugins.ext M build.win32x86/squeak.stack.v3/plugins.ext M build.win64x64/common/SETPATH.BAT M build.win64x64/squeak.cog.spur/plugins.ext M build.win64x64/squeak.stack.spur/plugins.ext M platforms/Cross/plugins/B3DAcceleratorPlugin/B3DAcceleratorPlugin.h M platforms/Cross/plugins/B3DAcceleratorPlugin/sqOpenGLRenderer.c M platforms/Cross/vm/sq.h M platforms/win32/plugins/CameraPlugin/winCameraOps.cpp M platforms/win32/vm/sqWin32Window.c Log Message: ----------- Windows plugins: Fix device enumeration in the CameraPlugin and hence derive a valid cameraUID. Hack around a shutdown issue in the production VM's CameraPlugin; certain pointers in the Camera structure seem to get overwritten, so puttin range checks to avoid calling bogus pointers. Ths s an awful hack, but I don't have time to diagnose now. Fx the B3DAcceleratorPlugin's include of getWindowName in the debug variant's debug printing. Include the CameraPlugin in all squeak VM builds. Add the CLang bin directory to the path set in SETPATH.BAT. From builds at travis-ci.org Fri Oct 16 02:44:09 2020 From: builds at travis-ci.org (Travis CI) Date: Fri, 16 Oct 2020 02:44:09 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2240 (Cog - ed4ce29) In-Reply-To: Message-ID: <5f8908f97fa60_13fb653f9d7a899870@travis-tasks-5d7587c8cc-7rnhx.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2240 Status: Still Failing Duration: 11 mins and 20 secs Commit: ed4ce29 (Cog) Author: Eliot Miranda Message: Windows plugins: Fix device enumeration in the CameraPlugin and hence derive a valid cameraUID. Hack around a shutdown issue in the production VM's CameraPlugin; certain pointers in the Camera structure seem to get overwritten, so puttin range checks to avoid calling bogus pointers. Ths s an awful hack, but I don't have time to diagnose now. Fx the B3DAcceleratorPlugin's include of getWindowName in the debug variant's debug printing. Include the CameraPlugin in all squeak VM builds. Add the CLang bin directory to the path set in SETPATH.BAT. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/eb2d9e2d1e2e...ed4ce29b63fa View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736238509?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Fri Oct 16 02:44:44 2020 From: no-reply at appveyor.com (AppVeyor) Date: Fri, 16 Oct 2020 02:44:44 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2242 Message-ID: <20201016024444.1.F70047706FE172CC@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Fri Oct 16 16:15:30 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 16 Oct 2020 16:15:30 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2841.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2841.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2841 Author: eem Time: 16 October 2020, 9:15:22.163779 am UUID: 31227c27-4474-4ae9-b408-3887c8387b7f Ancestors: VMMaker.oscog-eem.2840 CameraPlugin: Answer a getter for the semaphoreIndex to allow for a convenient interrupt-driven waitForCameraStart: interface. =============== Diff against VMMaker.oscog-eem.2840 =============== Item was added: + ----- Method: CameraPlugin>>primGetCameraSemaphore (in category 'primitives') ----- + primGetCameraSemaphore + "Answers the semaphoreIndex set through primSetCameraSemaphore. + Fails if no semaphore has been set." + + + | cameraNum | + cameraNum := interpreterProxy stackIntegerValue: 0. + interpreterProxy failed ifFalse: + [(self CameraGetSemaphore: cameraNum) + ifNil: [interpreterProxy primitiveFail] + ifNotNil: [:index| interpreterProxy methodReturnInteger: index]]! From noreply at github.com Fri Oct 16 17:17:01 2020 From: noreply at github.com (Eliot Miranda) Date: Fri, 16 Oct 2020 10:17:01 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 12bf6b: CameraPlugin as per Name: VMMaker.oscog-eem.2841 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 12bf6b0a884ebeb5c5bc31527467ef95d348f6d9 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/12bf6b0a884ebeb5c5bc31527467ef95d348f6d9 Author: Eliot Miranda Date: 2020-10-16 (Fri, 16 Oct 2020) Changed paths: M platforms/Cross/plugins/CameraPlugin/CameraPlugin.h M platforms/iOS/plugins/CameraPlugin/AVFoundationVideoGrabber.m M platforms/unix/plugins/CameraPlugin/sqCamera-linux.c M platforms/win32/plugins/CameraPlugin/winCameraOps.cpp M src/plugins/CameraPlugin/CameraPlugin.c Log Message: ----------- CameraPlugin as per Name: VMMaker.oscog-eem.2841 CameraPlugin: Answer a getter for the semaphoreIndex to allow for a convenient interrupt-driven waitForCameraStart: interface. Check the cameraNum argument is in range in the Unix primitives. Fix a failure to set the semaphore on windows when attempting to set teh semaphore before the arrival of the first frame. From no-reply at appveyor.com Fri Oct 16 17:29:20 2020 From: no-reply at appveyor.com (AppVeyor) Date: Fri, 16 Oct 2020 17:29:20 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2243 Message-ID: <20201016172920.1.F8612B11716D03B9@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Fri Oct 16 17:34:23 2020 From: builds at travis-ci.org (Travis CI) Date: Fri, 16 Oct 2020 17:34:23 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2241 (Cog - 12bf6b0) In-Reply-To: Message-ID: <5f89d99e97546_13f989dcdd5f01718d5@travis-tasks-7fc656f954-zrnbd.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2241 Status: Still Failing Duration: 16 mins and 3 secs Commit: 12bf6b0 (Cog) Author: Eliot Miranda Message: CameraPlugin as per Name: VMMaker.oscog-eem.2841 CameraPlugin: Answer a getter for the semaphoreIndex to allow for a convenient interrupt-driven waitForCameraStart: interface. Check the cameraNum argument is in range in the Unix primitives. Fix a failure to set the semaphore on windows when attempting to set teh semaphore before the arrival of the first frame. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/ed4ce29b63fa...12bf6b0a884e View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736440575?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Fri Oct 16 19:40:14 2020 From: noreply at github.com (Eliot Miranda) Date: Fri, 16 Oct 2020 12:40:14 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 9dfb80: Unix CameraPlugin: Have CameraGetParam check if ca... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 9dfb802ae89a6ff175f4362d56c4fab62d88ca6d https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/9dfb802ae89a6ff175f4362d56c4fab62d88ca6d Author: Eliot Miranda Date: 2020-10-16 (Fri, 16 Oct 2020) Changed paths: M platforms/unix/plugins/CameraPlugin/sqCamera-linux.c Log Message: ----------- Unix CameraPlugin: Have CameraGetParam check if camera is readable if frameCount is zero. This allows the simple interface to work at a good framerate. From no-reply at appveyor.com Fri Oct 16 19:52:10 2020 From: no-reply at appveyor.com (AppVeyor) Date: Fri, 16 Oct 2020 19:52:10 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2244 Message-ID: <20201016195210.1.DDA0523A0CFDC729@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Fri Oct 16 19:53:12 2020 From: builds at travis-ci.org (Travis CI) Date: Fri, 16 Oct 2020 19:53:12 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2242 (Cog - 9dfb802) In-Reply-To: Message-ID: <5f89fa28257ce_13fdb98daad8c1680c4@travis-tasks-6954f6c7db-qdtf5.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2242 Status: Still Failing Duration: 11 mins and 40 secs Commit: 9dfb802 (Cog) Author: Eliot Miranda Message: Unix CameraPlugin: Have CameraGetParam check if camera is readable if frameCount is zero. This allows the simple interface to work at a good framerate. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/12bf6b0a884e...9dfb802ae89a View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736481447?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From lewis at mail.msen.com Fri Oct 16 21:47:31 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Fri, 16 Oct 2020 17:47:31 -0400 Subject: [Vm-dev] [squeak-dev] Pool for sysconf constants? In-Reply-To: References: <20201013032817.GA78602@shell.msen.com> Message-ID: <20201016214731.GA70979@shell.msen.com> Hi Eliot, Replying back on vm-dev. Indeed I see the problem now, thanks. The closest that I can come to a useful suggestion is to write a little C program to print out the index values of interest for a given platform, then read that into the image to build the pool. The index values are supposed to be opaque but I doubt that they would change much in practice. I am looking only at a Linux system as I write this, and the only way I can find to discover the available parameter names is to look in /usr/include/bits/confname.h to see what is defined. I can't spot any other way to get at the information, and I can't find any runtime utility that provides a listing. But a little utility program that could be used to update the pool might be good enough. Attaching an example C program, I'm not sure if it helps. Dave On Tue, Oct 13, 2020 at 01:49:00PM -0700, Eliot Miranda wrote: > Hi David, > > On Mon, Oct 12, 2020 at 8:28 PM David T. Lewis wrote: > > > On Sun, Oct 11, 2020 at 11:15:09AM -0700, Eliot Miranda wrote: > > > Hi All, > > > > > > I want to implement a number of processors query on MacOS & other > > > unices to complement the info provided by GetSystemInfo on Windows. The > > > natural way to do this on unices is to use sysconf (3), and of course > > this > > > points to the issue for which FFI pools are needed, the constant names > > for > > > sysconf such as _SC_NPROCESSORS_ONLN are defined, but their values are > > > implementation dependent. > > > > > > But before I go amd implement an FFI pool for this I thought I'd ask > > > a) anyone already done this? Is it published anywhere? > > > b) how are we going to organize such pools so that people don't have to > > > reinvent the wheel? > > > c) should there be a pool to cover sysconf or to cover unistd.h? (the > > > point here is that while the pool might start off small, it could grow > > and > > > grow and maybe unistd.h is too much surface to cover) > > > > > > thoughts, suggestions? > > > > Hi Eliot, > > > > At first glance, it looks to me like the hard part of the problem is to > > know what sysconf names are available to be queried on any given platform > > at runtime. If you know that, or if you are only interested in a limited > > number of well-known parameters (which seems likely), then it might be > > simplest to just implement the sysconf(3) call either as an FFI call or > > a call through the OSProcess plugin. > > > > Well, I *am* implementing it as an FFI call in Terf. The issue is deriving > the right integer values for the particular symbolic names, because these > vary across implementations. And that's what FFIPools are designed to > manage. > Right now I don't have the FFIPool so I've hard-wired the constant: > > !CMacOSXPlatform methodsFor: 'accessing' stamp: 'eem 10/11/2020 17:53' > prior: 47990341! > numberOfCPUs > "Warning, warning, Will Robertson!!!! The sysconf method bakes in a > decidedly implementation-specific name for the support library *and* bakes > in a value for a symbolic constant. Both of these are implementation > dependent and subject to change. That said..." > ^self sysconf: 58 > > "CPlatform current numberOfCPUs"! ! > !CMacOSXPlatform methodsFor: 'private' stamp: 'eem 10/11/2020 17:51'! > sysconf: systemInfo > "Answer a value from sysconf(3)." > '/usr/lib/system/libsystem_c.dylib'> > ^self externalCallFailed > > " | scnprocsonline | > scnprocsonline := 58. > self current sysconf: scnprocsonline"! ! > > There's much to be unhappy about in this code: libSystem.dylib is the > abstract name, but one can't use it because the search facilities can't > chain through the libraries that libSystem.B.dylib (ibSystem.dylib is a > symbolic link) refers to. So this could break in some future MacOS, > whereas if libSystem.dylib did work, or if there was a symbolic name we > could use that meant "the C library goddamnit", then it could be relied > upon. 58 is meaningful only on MacOS, and presumably only since a > particular version. That's why we need an FFIPool to manage the > cross-platform variations. The type is longlong, which means we're not > using a syntax that matches the declaration, and this will work only on > 64-bits. We can fix the FFI to interpret C names accoding to the > playtform, but we have a serious backwards-compatibility problem in that > all of the FFI definitions up til now have been written under this > assumption. > > But I suspect that I am not answering the right question here. If I am > > off base, can you give an example of some of the parameters that you > > would want to be able to query? > > > > First off Terf needs _SC_NUM_PROCESSORS_ONLN, which is notionally the > number of processors online, but now answers the number of cores, which > shows you how fast these ideas go stale (_SC_NUM_PROCESSORS_CONF is the > number of processors configured ;-) ). Other ones that could be meaningful > for applications include _SC_ARG_MAX (The maximum bytes of argument to > execve(2)) _SC_CHILD_MAX (The maximum number of simultaneous processes per > user id), _SC_OPEN_MAX (The maximum number of open files per user id), > _SC_STREAM_MAX (The minimum maximum number of streams that a process may > have open at any one time), _SC_PHYS_PAGES (The number of pages of physical > memory). > > There are many others, quite a few I can't imagine ever being compelling. > > Now yes, one can imagine implementing a cross-platform abstraction for > these but it's a lot of effort for little gain. It;s easier just to suck > it up and implement the FFI call. > > But I'm imagining these things will get used by the community and I don't > want people to have to reinvent the wheel. This kind of stuff doesn't > belong in trunk, but it does belong somewhere where we can share and > coevolve the facilities. > > > > Thanks, > > Dave > > > > > > > > -- > _,,,^..^,,,_ > best, Eliot > -------------- next part -------------- A non-text attachment was scrubbed... Name: scparams.c Type: text/x-csrc Size: 845 bytes Desc: not available URL: From eliot.miranda at gmail.com Fri Oct 16 22:23:48 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri, 16 Oct 2020 15:23:48 -0700 Subject: [Vm-dev] [squeak-dev] Pool for sysconf constants? In-Reply-To: <20201016214731.GA70979@shell.msen.com> References: <20201013032817.GA78602@shell.msen.com> <20201016214731.GA70979@shell.msen.com> Message-ID: Hi David, > On Oct 16, 2020, at 2:47 PM, David T. Lewis wrote: > > Hi Eliot, > > Replying back on vm-dev. > > Indeed I see the problem now, thanks. > > The closest that I can come to a useful suggestion is to write a > little C program to print out the index values of interest for a > given platform, then read that into the image to build the pool. > The index values are supposed to be opaque but I doubt that they > would change much in practice. This is what an ExternalPool does *automatically*. One creates a pool containing a set of named variables, adds metadata to the pool, and then when the pool needs to initialize or change, it generates the C program automatically, runs it, reaps the values, and updates class side code to initialize the constants for specific platforms. When it is run on a different platform it generates the program for that platform, etc. The management problem therefore is how to manage the executable programs because these are needed if one wants to deploy on a specific platform. I came up with the idea many years ago at ParcPlace when the problem first surfaced (that different platforms, though they may use the same names for symbolic constants, abstract types, etc, but don't use the same values, concrete types, etc). Monty write the implementation. Marcel has shepherded it into source.squeak.org/FFI. Marcel has written an excellent and comprehensive class comment for ExternalPool. I urge that everyone interested in deployment using FFIs read it ASAP. That goes for me too, because things have moved on with the implementation. There's no need to manage external C programs; there's a need to merge the definition code that is automatically generated when run on different platforms. I should push thoguh and sdo a sysconf pool to learn how the current system really works :-) > > I am looking only at a Linux system as I write this, and the only > way I can find to discover the available parameter names is to look > in /usr/include/bits/confname.h to see what is defined. I can't > spot any other way to get at the information, and I can't find any > runtime utility that provides a listing. > > But a little utility program that could be used to update the > pool might be good enough. Attaching an example C program, I'm > not sure if it helps. > > Dave > > >> On Tue, Oct 13, 2020 at 01:49:00PM -0700, Eliot Miranda wrote: >> Hi David, >> >>> On Mon, Oct 12, 2020 at 8:28 PM David T. Lewis wrote: >>> >>> On Sun, Oct 11, 2020 at 11:15:09AM -0700, Eliot Miranda wrote: >>>> Hi All, >>>> >>>> I want to implement a number of processors query on MacOS & other >>>> unices to complement the info provided by GetSystemInfo on Windows. The >>>> natural way to do this on unices is to use sysconf (3), and of course >>> this >>>> points to the issue for which FFI pools are needed, the constant names >>> for >>>> sysconf such as _SC_NPROCESSORS_ONLN are defined, but their values are >>>> implementation dependent. >>>> >>>> But before I go amd implement an FFI pool for this I thought I'd ask >>>> a) anyone already done this? Is it published anywhere? >>>> b) how are we going to organize such pools so that people don't have to >>>> reinvent the wheel? >>>> c) should there be a pool to cover sysconf or to cover unistd.h? (the >>>> point here is that while the pool might start off small, it could grow >>> and >>>> grow and maybe unistd.h is too much surface to cover) >>>> >>>> thoughts, suggestions? >>> >>> Hi Eliot, >>> >>> At first glance, it looks to me like the hard part of the problem is to >>> know what sysconf names are available to be queried on any given platform >>> at runtime. If you know that, or if you are only interested in a limited >>> number of well-known parameters (which seems likely), then it might be >>> simplest to just implement the sysconf(3) call either as an FFI call or >>> a call through the OSProcess plugin. >>> >> >> Well, I *am* implementing it as an FFI call in Terf. The issue is deriving >> the right integer values for the particular symbolic names, because these >> vary across implementations. And that's what FFIPools are designed to >> manage. >> Right now I don't have the FFIPool so I've hard-wired the constant: >> >> !CMacOSXPlatform methodsFor: 'accessing' stamp: 'eem 10/11/2020 17:53' >> prior: 47990341! >> numberOfCPUs >> "Warning, warning, Will Robertson!!!! The sysconf method bakes in a >> decidedly implementation-specific name for the support library *and* bakes >> in a value for a symbolic constant. Both of these are implementation >> dependent and subject to change. That said..." >> ^self sysconf: 58 >> >> "CPlatform current numberOfCPUs"! ! >> !CMacOSXPlatform methodsFor: 'private' stamp: 'eem 10/11/2020 17:51'! >> sysconf: systemInfo >> "Answer a value from sysconf(3)." >> > '/usr/lib/system/libsystem_c.dylib'> >> ^self externalCallFailed >> >> " | scnprocsonline | >> scnprocsonline := 58. >> self current sysconf: scnprocsonline"! ! >> >> There's much to be unhappy about in this code: libSystem.dylib is the >> abstract name, but one can't use it because the search facilities can't >> chain through the libraries that libSystem.B.dylib (ibSystem.dylib is a >> symbolic link) refers to. So this could break in some future MacOS, >> whereas if libSystem.dylib did work, or if there was a symbolic name we >> could use that meant "the C library goddamnit", then it could be relied >> upon. 58 is meaningful only on MacOS, and presumably only since a >> particular version. That's why we need an FFIPool to manage the >> cross-platform variations. The type is longlong, which means we're not >> using a syntax that matches the declaration, and this will work only on >> 64-bits. We can fix the FFI to interpret C names accoding to the >> playtform, but we have a serious backwards-compatibility problem in that >> all of the FFI definitions up til now have been written under this >> assumption. >> >> But I suspect that I am not answering the right question here. If I am >>> off base, can you give an example of some of the parameters that you >>> would want to be able to query? >>> >> >> First off Terf needs _SC_NUM_PROCESSORS_ONLN, which is notionally the >> number of processors online, but now answers the number of cores, which >> shows you how fast these ideas go stale (_SC_NUM_PROCESSORS_CONF is the >> number of processors configured ;-) ). Other ones that could be meaningful >> for applications include _SC_ARG_MAX (The maximum bytes of argument to >> execve(2)) _SC_CHILD_MAX (The maximum number of simultaneous processes per >> user id), _SC_OPEN_MAX (The maximum number of open files per user id), >> _SC_STREAM_MAX (The minimum maximum number of streams that a process may >> have open at any one time), _SC_PHYS_PAGES (The number of pages of physical >> memory). >> >> There are many others, quite a few I can't imagine ever being compelling. >> >> Now yes, one can imagine implementing a cross-platform abstraction for >> these but it's a lot of effort for little gain. It;s easier just to suck >> it up and implement the FFI call. >> >> But I'm imagining these things will get used by the community and I don't >> want people to have to reinvent the wheel. This kind of stuff doesn't >> belong in trunk, but it does belong somewhere where we can share and >> coevolve the facilities. >> >> >>> Thanks, >>> Dave >>> >>> >>> >> >> -- >> _,,,^..^,,,_ >> best, Eliot > >> > > From lewis at mail.msen.com Sat Oct 17 03:43:11 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Fri, 16 Oct 2020 23:43:11 -0400 Subject: [Vm-dev] [squeak-dev] Pool for sysconf constants? In-Reply-To: References: <20201013032817.GA78602@shell.msen.com> <20201016214731.GA70979@shell.msen.com> Message-ID: <20201017034311.GA20987@shell.msen.com> Hi Eliot, Here's another idea just to stir the pot. I addad a primitive to UnixOSProcessPlugin and evaluated this in Squeak on Linux: | include names entries sysconf | include := '/usr/include/bits/confname.h'. names := ( OSProcess outputOf: 'grep _SC_ ', include, ' | grep #define | cut -f 2' ) findTokens: String lf. entries := names withIndexCollect: [ :e :i | e asSymbol -> ( OSProcess accessor primSysconf: i - 1 ) ]. sysconf := Dictionary withAll: entries. I'm attaching a picture of the resulting dictionary. $0.02, Dave On Fri, Oct 16, 2020 at 03:23:48PM -0700, Eliot Miranda wrote: > Hi David, > > > > On Oct 16, 2020, at 2:47 PM, David T. Lewis wrote: > > > > ???Hi Eliot, > > > > Replying back on vm-dev. > > > > Indeed I see the problem now, thanks. > > > > The closest that I can come to a useful suggestion is to write a > > little C program to print out the index values of interest for a > > given platform, then read that into the image to build the pool. > > The index values are supposed to be opaque but I doubt that they > > would change much in practice. > > This is what an ExternalPool does *automatically*. One creates a pool > containing a set of named variables, adds metadata to the pool, and > then when the pool needs to initialize or change, it generates the C > program automatically, runs it, reaps the values, and updates class > side code to initialize the constants for specific platforms. When it > is run on a different platform it generates the program for that > platform, etc. The management problem therefore is how to manage the > executable programs because these are needed if one wants to deploy on > a specific platform. > > I came up with the idea many years ago at ParcPlace when the problem > first surfaced (that different platforms, though they may use the same > names for symbolic constants, abstract types, etc, but don't use the > same values, concrete types, etc). Monty write the implementation. > Marcel has shepherded it into source.squeak.org/FFI. Marcel has > written an excellent and comprehensive class comment for ExternalPool. > I urge that everyone interested in deployment using FFIs read it ASAP. > That goes for me too, because things have moved on with the > implementation. There's no need to manage external C programs; > there's a need to merge the definition code that is automatically > generated when run on different platforms. > > I should push thoguh and sdo a sysconf pool to learn how the current > system really works :-) > > > > > I am looking only at a Linux system as I write this, and the only > > way I can find to discover the available parameter names is to look > > in /usr/include/bits/confname.h to see what is defined. I can't > > spot any other way to get at the information, and I can't find any > > runtime utility that provides a listing. > > > > But a little utility program that could be used to update the > > pool might be good enough. Attaching an example C program, I'm > > not sure if it helps. > > > > Dave > > > > > >> On Tue, Oct 13, 2020 at 01:49:00PM -0700, Eliot Miranda wrote: > >> Hi David, > >> > >>> On Mon, Oct 12, 2020 at 8:28 PM David T. Lewis wrote: > >>> > >>> On Sun, Oct 11, 2020 at 11:15:09AM -0700, Eliot Miranda wrote: > >>>> Hi All, > >>>> > >>>> I want to implement a number of processors query on MacOS & other > >>>> unices to complement the info provided by GetSystemInfo on Windows. The > >>>> natural way to do this on unices is to use sysconf (3), and of course > >>> this > >>>> points to the issue for which FFI pools are needed, the constant names > >>> for > >>>> sysconf such as _SC_NPROCESSORS_ONLN are defined, but their values are > >>>> implementation dependent. > >>>> > >>>> But before I go amd implement an FFI pool for this I thought I'd ask > >>>> a) anyone already done this? Is it published anywhere? > >>>> b) how are we going to organize such pools so that people don't have to > >>>> reinvent the wheel? > >>>> c) should there be a pool to cover sysconf or to cover unistd.h? (the > >>>> point here is that while the pool might start off small, it could grow > >>> and > >>>> grow and maybe unistd.h is too much surface to cover) > >>>> > >>>> thoughts, suggestions? > >>> > >>> Hi Eliot, > >>> > >>> At first glance, it looks to me like the hard part of the problem is to > >>> know what sysconf names are available to be queried on any given platform > >>> at runtime. If you know that, or if you are only interested in a limited > >>> number of well-known parameters (which seems likely), then it might be > >>> simplest to just implement the sysconf(3) call either as an FFI call or > >>> a call through the OSProcess plugin. > >>> > >> > >> Well, I *am* implementing it as an FFI call in Terf. The issue is deriving > >> the right integer values for the particular symbolic names, because these > >> vary across implementations. And that's what FFIPools are designed to > >> manage. > >> Right now I don't have the FFIPool so I've hard-wired the constant: > >> > >> !CMacOSXPlatform methodsFor: 'accessing' stamp: 'eem 10/11/2020 17:53' > >> prior: 47990341! > >> numberOfCPUs > >> "Warning, warning, Will Robertson!!!! The sysconf method bakes in a > >> decidedly implementation-specific name for the support library *and* bakes > >> in a value for a symbolic constant. Both of these are implementation > >> dependent and subject to change. That said..." > >> ^self sysconf: 58 > >> > >> "CPlatform current numberOfCPUs"! ! > >> !CMacOSXPlatform methodsFor: 'private' stamp: 'eem 10/11/2020 17:51'! > >> sysconf: systemInfo > >> "Answer a value from sysconf(3)." > >> >> '/usr/lib/system/libsystem_c.dylib'> > >> ^self externalCallFailed > >> > >> " | scnprocsonline | > >> scnprocsonline := 58. > >> self current sysconf: scnprocsonline"! ! > >> > >> There's much to be unhappy about in this code: libSystem.dylib is the > >> abstract name, but one can't use it because the search facilities can't > >> chain through the libraries that libSystem.B.dylib (ibSystem.dylib is a > >> symbolic link) refers to. So this could break in some future MacOS, > >> whereas if libSystem.dylib did work, or if there was a symbolic name we > >> could use that meant "the C library goddamnit", then it could be relied > >> upon. 58 is meaningful only on MacOS, and presumably only since a > >> particular version. That's why we need an FFIPool to manage the > >> cross-platform variations. The type is longlong, which means we're not > >> using a syntax that matches the declaration, and this will work only on > >> 64-bits. We can fix the FFI to interpret C names accoding to the > >> playtform, but we have a serious backwards-compatibility problem in that > >> all of the FFI definitions up til now have been written under this > >> assumption. > >> > >> But I suspect that I am not answering the right question here. If I am > >>> off base, can you give an example of some of the parameters that you > >>> would want to be able to query? > >>> > >> > >> First off Terf needs _SC_NUM_PROCESSORS_ONLN, which is notionally the > >> number of processors online, but now answers the number of cores, which > >> shows you how fast these ideas go stale (_SC_NUM_PROCESSORS_CONF is the > >> number of processors configured ;-) ). Other ones that could be meaningful > >> for applications include _SC_ARG_MAX (The maximum bytes of argument to > >> execve(2)) _SC_CHILD_MAX (The maximum number of simultaneous processes per > >> user id), _SC_OPEN_MAX (The maximum number of open files per user id), > >> _SC_STREAM_MAX (The minimum maximum number of streams that a process may > >> have open at any one time), _SC_PHYS_PAGES (The number of pages of physical > >> memory). > >> > >> There are many others, quite a few I can't imagine ever being compelling. > >> > >> Now yes, one can imagine implementing a cross-platform abstraction for > >> these but it's a lot of effort for little gain. It;s easier just to suck > >> it up and implement the FFI call. > >> > >> But I'm imagining these things will get used by the community and I don't > >> want people to have to reinvent the wheel. This kind of stuff doesn't > >> belong in trunk, but it does belong somewhere where we can share and > >> coevolve the facilities. > >> > >> > >>> Thanks, > >>> Dave > >>> > >>> > >>> > >> > >> -- > >> _,,,^..^,,,_ > >> best, Eliot > > > >> > > > > > -------------- next part -------------- A non-text attachment was scrubbed... Name: a Dictionary(size 120).png Type: image/png Size: 46885 bytes Desc: not available URL: From noreply at github.com Sat Oct 17 06:58:04 2020 From: noreply at github.com (Eliot Miranda) Date: Fri, 16 Oct 2020 23:58:04 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] d990bf: Fix some serious misunderstandings and a bad slip ... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: d990bfd62542194ccc86b9687c7c1d9636a66403 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/d990bfd62542194ccc86b9687c7c1d9636a66403 Author: Eliot Miranda Date: 2020-10-16 (Fri, 16 Oct 2020) Changed paths: M platforms/iOS/plugins/HostWindowPlugin/sqMacHostWindow.m Log Message: ----------- Fix some serious misunderstandings and a bad slip in the mac HostWindowsPlugin. NativeDisplay revers to the client rectangle, not the screen. NativeDisplaySize was answering position (!!). From commits at source.squeak.org Sat Oct 17 07:06:34 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 17 Oct 2020 07:06:34 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2842.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2842.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2842 Author: eem Time: 17 October 2020, 12:06:25.436796 am UUID: 37749ea0-48e5-4271-91bc-02fde88a2f0d Ancestors: VMMaker.oscog-eem.2841 Simulate the TerfVM extensions to the HostWIndowsPlugin =============== Diff against VMMaker.oscog-eem.2841 =============== Item was added: + ----- Method: HostWindowPluginSimulator>>ioGetWindowHandle (in category 'primitive simulation') ----- + ioGetWindowHandle + + self primitiveFailed + + "self basicNew ioGetWindowHandle hex"! Item was added: + ----- Method: HostWindowPluginSimulator>>ioPositionOfNativeDisplay: (in category 'primitive simulation') ----- + ioPositionOfNativeDisplay: windowHandle + + self primitiveFailed + + "self basicNew ioPositionOfNativeDisplay: self basicNew ioGetWindowHandle" + "self basicNew ioPositionOfNativeWindow: self basicNew ioGetWindowHandle"! Item was added: + ----- Method: HostWindowPluginSimulator>>ioPositionOfNativeWindow: (in category 'primitive simulation') ----- + ioPositionOfNativeWindow: windowHandle + + self primitiveFailed + + "self basicNew ioPositionOfNativeWindow: self basicNew ioGetWindowHandle" + "self basicNew ioPositionOfNativeDisplay: self basicNew ioGetWindowHandle"! Item was added: + ----- Method: HostWindowPluginSimulator>>ioSizeOfNativeDisplay: (in category 'primitive simulation') ----- + ioSizeOfNativeDisplay: windowHandle + + self primitiveFailed + + "self basicNew ioSizeOfNativeDisplay: self basicNew ioGetWindowHandle" + "self basicNew ioSizeOfNativeWindow: self basicNew ioGetWindowHandle"! Item was added: + ----- Method: HostWindowPluginSimulator>>ioSizeOfNativeWindow: (in category 'primitive simulation') ----- + ioSizeOfNativeWindow: windowHandle + + self primitiveFailed + + "self basicNew ioSizeOfNativeWindow: self basicNew ioGetWindowHandle" + "self basicNew ioSizeOfNativeDisplay: self basicNew ioGetWindowHandle"! From builds at travis-ci.org Sat Oct 17 07:10:31 2020 From: builds at travis-ci.org (Travis CI) Date: Sat, 17 Oct 2020 07:10:31 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2243 (Cog - d990bfd) In-Reply-To: Message-ID: <5f8a98e77494_13fa5ef35cc7414374f@travis-tasks-79b98f6db7-rbzcq.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2243 Status: Still Failing Duration: 11 mins and 44 secs Commit: d990bfd (Cog) Author: Eliot Miranda Message: Fix some serious misunderstandings and a bad slip in the mac HostWindowsPlugin. NativeDisplay revers to the client rectangle, not the screen. NativeDisplaySize was answering position (!!). View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/9dfb802ae89a...d990bfd62542 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736576431?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sat Oct 17 07:10:02 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sat, 17 Oct 2020 07:10:02 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2245 Message-ID: <20201017071002.1.654DCAA31AF3E757@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Sat Oct 17 08:26:48 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 17 Oct 2020 01:26:48 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] c852d3: Fix a bad slip in Windows' CameraUID which crashes... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: c852d362256d436c7e1bc32b8b7938428848699f https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/c852d362256d436c7e1bc32b8b7938428848699f Author: Eliot Miranda Date: 2020-10-17 (Sat, 17 Oct 2020) Changed paths: M platforms/win32/plugins/CameraPlugin/winCameraOps.cpp Log Message: ----------- Fix a bad slip in Windows' CameraUID which crashes the system when the fnciton is used on an unused camera index. From builds at travis-ci.org Sat Oct 17 08:38:40 2020 From: builds at travis-ci.org (Travis CI) Date: Sat, 17 Oct 2020 08:38:40 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2244 (Cog - c852d36) In-Reply-To: Message-ID: <5f8aad9025e74_13ffd612c906867416@travis-tasks-6866df4cfd-zmqtv.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2244 Status: Still Failing Duration: 11 mins and 19 secs Commit: c852d36 (Cog) Author: Eliot Miranda Message: Fix a bad slip in Windows' CameraUID which crashes the system when the fnciton is used on an unused camera index. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/d990bfd62542...c852d362256d View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736585460?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sat Oct 17 08:40:22 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sat, 17 Oct 2020 08:40:22 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2246 Message-ID: <20201017084022.1.9817131415F16C81@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Sat Oct 17 21:22:32 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 17 Oct 2020 21:22:32 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2843.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2843.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2843 Author: eem Time: 17 October 2020, 2:22:17.0514 pm UUID: b90f1ac6-1848-431f-8f42-467012ff6595 Ancestors: VMMaker.oscog-eem.2842 Alien plugin: Add an introspection primtive answering the most recent VMCallbackContext address. =============== Diff against VMMaker.oscog-eem.2842 =============== Item was added: + ----- Method: IA32ABIPlugin>>primMostRecentCallbackContext (in category 'primitives-callbacks') ----- + primMostRecentCallbackContext + "This is here only for debugging; it is really useful in predicting the behaviour of primReturnAsFromContextThrough." + interpreterProxy methodReturnValue: (self positiveMachineIntegerValueOf: self getMostRecentCallbackContext)! From noreply at github.com Sat Oct 17 21:25:27 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 17 Oct 2020 14:25:27 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 46a232: IA32ABI (Alien plugin) as per VMMaker.oscog-eem.2843 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 46a232ba74eb1f2e798d24fe8bc4fcdf2e357717 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/46a232ba74eb1f2e798d24fe8bc4fcdf2e357717 Author: Eliot Miranda Date: 2020-10-17 (Sat, 17 Oct 2020) Changed paths: M src/plugins/IA32ABI/IA32ABI.c Log Message: ----------- IA32ABI (Alien plugin) as per VMMaker.oscog-eem.2843 Add introspection primtive answering the most recent VMCallbackContext address. From noreply at github.com Sat Oct 17 21:35:50 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 17 Oct 2020 14:35:50 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] fc6af2: ELiminate a few win32 warnings for windows.h vs Wi... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: fc6af2d27d99e1901280e5cf415051330fdd5cb8 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/fc6af2d27d99e1901280e5cf415051330fdd5cb8 Author: Eliot Miranda Date: 2020-10-17 (Sat, 17 Oct 2020) Changed paths: M platforms/Cross/plugins/IA32ABI/ia32abicc.c M platforms/Cross/plugins/IA32ABI/x64sysvabicc.c M platforms/Cross/plugins/IA32ABI/x64win64abicc.c M platforms/win32/misc/qedit.h Log Message: ----------- ELiminate a few win32 warnings for windows.h vs Windows.h. [ci skip] From builds at travis-ci.org Sat Oct 17 21:37:22 2020 From: builds at travis-ci.org (Travis CI) Date: Sat, 17 Oct 2020 21:37:22 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2245 (Cog - 46a232b) In-Reply-To: Message-ID: <5f8b64123988a_13f7f804ae8b0932fc@travis-tasks-576bb78d9d-lswh8.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2245 Status: Still Failing Duration: 11 mins and 24 secs Commit: 46a232b (Cog) Author: Eliot Miranda Message: IA32ABI (Alien plugin) as per VMMaker.oscog-eem.2843 Add introspection primtive answering the most recent VMCallbackContext address. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/c852d362256d...46a232ba74eb View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736703761?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sat Oct 17 21:38:17 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sat, 17 Oct 2020 21:38:17 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2247 Message-ID: <20201017213817.1.C0435FF40D90BCE4@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Sat Oct 17 21:41:56 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 17 Oct 2020 14:41:56 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] e8a829: And another one bites the dust [ci skip] Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: e8a8292c3fdf06eea63c6ae34fd870a820d8bc8e https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/e8a8292c3fdf06eea63c6ae34fd870a820d8bc8e Author: Eliot Miranda Date: 2020-10-17 (Sat, 17 Oct 2020) Changed paths: M platforms/Cross/plugins/IA32ABI/x64win64stub.c Log Message: ----------- And another one bites the dust [ci skip] From commits at source.squeak.org Sat Oct 17 22:03:49 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 17 Oct 2020 22:03:49 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2844.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2844.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2844 Author: eem Time: 17 October 2020, 3:03:40.71844 pm UUID: ac4dc785-a21a-4cb6-8788-0a1df33cde1a Ancestors: VMMaker.oscog-eem.2843 I'm in the import/export business... =============== Diff against VMMaker.oscog-eem.2843 =============== Item was changed: ----- Method: IA32ABIPlugin>>primMostRecentCallbackContext (in category 'primitives-callbacks') ----- primMostRecentCallbackContext "This is here only for debugging; it is really useful in predicting the behaviour of primReturnAsFromContextThrough." + interpreterProxy methodReturnValue: (self positiveMachineIntegerValueOf: self getMostRecentCallbackContext)! From noreply at github.com Sat Oct 17 22:22:06 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 17 Oct 2020 15:22:06 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 4a29cd: Actually export the primitive added in the previou... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 4a29cd651c3f6cd4d7be23356facb6757e4bfe91 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/4a29cd651c3f6cd4d7be23356facb6757e4bfe91 Author: Eliot Miranda Date: 2020-10-17 (Sat, 17 Oct 2020) Changed paths: M src/plugins/IA32ABI/IA32ABI.c Log Message: ----------- Actually export the primitive added in the previous commit. From commits at source.squeak.org Sat Oct 17 22:25:29 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 17 Oct 2020 22:25:29 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2845.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2845.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2845 Author: eem Time: 17 October 2020, 3:25:20.147723 pm UUID: dc495ecd-2d7e-4ad3-82fb-82f2aeacbb24 Ancestors: VMMaker.oscog-eem.2844 And use the converter from integer to object, not the other way around. =============== Diff against VMMaker.oscog-eem.2844 =============== Item was changed: ----- Method: IA32ABIPlugin>>primMostRecentCallbackContext (in category 'primitives-callbacks') ----- primMostRecentCallbackContext "This is here only for debugging; it is really useful in predicting the behaviour of primReturnAsFromContextThrough." + interpreterProxy methodReturnValue: (self positiveMachineIntegerFor: self getMostRecentCallbackContext)! - interpreterProxy methodReturnValue: (self positiveMachineIntegerValueOf: self getMostRecentCallbackContext)! From no-reply at appveyor.com Sat Oct 17 22:33:52 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sat, 17 Oct 2020 22:33:52 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2248 Message-ID: <20201017223352.1.B32732E179E29CC8@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Sat Oct 17 22:34:03 2020 From: builds at travis-ci.org (Travis CI) Date: Sat, 17 Oct 2020 22:34:03 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2246 (Cog - 4a29cd6) In-Reply-To: Message-ID: <5f8b715ab5fc0_13f7f81bc6f981178e9@travis-tasks-576bb78d9d-lswh8.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2246 Status: Still Failing Duration: 11 mins and 23 secs Commit: 4a29cd6 (Cog) Author: Eliot Miranda Message: Actually export the primitive added in the previous commit. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/e8a8292c3fdf...4a29cd651c3f View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736712132?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Sat Oct 17 22:42:27 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 17 Oct 2020 22:42:27 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2846.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2846.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2846 Author: eem Time: 17 October 2020, 3:42:17.887067 pm UUID: e8cdd50a-a54c-4552-8787-6aa1e9441f9c Ancestors: VMMaker.oscog-eem.2845 Slang: ix a regression in inlinability that broke users of InterpreterPlugin>>#positiveMachineIntegerFor: (marked ). =============== Diff against VMMaker.oscog-eem.2845 =============== Item was changed: ----- Method: IA32ABIPlugin>>primStrlenThroughPointerAtIndex (in category 'primitives-accessing') ----- primStrlenThroughPointerAtIndex "Answer the number of non-null bytes starting at the byte addressed by the 4-byte pointer at index." " strlenThroughPointerAt: index ^ " | byteOffset rcvr addr | - byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: interpreterProxy bytesPerOop inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. addr := (self startOfData: rcvr) + byteOffset. ^interpreterProxy methodReturnInteger: (self strlen: (self cCoerce: (self longAt: addr) to: #'char *'))! Item was changed: ----- Method: TMethod>>isSubstitutableNode:intoMethod:in: (in category 'inlining') ----- isSubstitutableNode: aNode intoMethod: targetMeth in: aCodeGen "Answer true if the given parameter node is either a constant, a local variable, or a formal parameter of the receiver. Such parameter nodes may be substituted directly into the body of the method during inlining. Note that global variables cannot be subsituted into methods with possible side effects (i.e., methods that may assign to global variables) because the inlined method might depend on having the value of the global variable captured when it is passed in as an argument." | var | aNode isConstant ifTrue: [ ^ true ]. aNode isVariable ifTrue: [ var := aNode name. ((locals includes: var) or: [args includes: var]) ifTrue: [ ^ true ]. (#(self true false nil) includes: var) ifTrue: [ ^ true ]. (targetMeth maySubstituteGlobal: var in: aCodeGen) ifTrue: [ ^ true ]. ]. "For now allow literal blocks to be substituted. They better be accessed only with value[:value:*] messages though!!" aNode isStmtList ifTrue: [^true]. + "Allow inlining of struct accesses and external functions; + an external function won't appear in the code gen's set of methods." (aNode isSend and: [aNode numArgs = 0 + and: [(aCodeGen isStructSend: aNode) + or: [(aCodeGen methodNamed: aNode selector) isNil]]]) ifTrue: - and: [aCodeGen isStructSend: aNode]]) ifTrue: [^true]. "scan expression tree; must contain only constants, builtin ops, and inlineable vars" aNode nodesDo: [ :node | node isSend ifTrue: [ (node isBuiltinOperator or: [node numArgs = 0 and: [aCodeGen isStructSend: node]]) ifFalse: [ ^false ]. ]. node isVariable ifTrue: [ var := node name. ((locals includes: var) or: [(args includes: var) or: [(#(self true false nil) includes: var) or: [targetMeth maySubstituteGlobal: var in: aCodeGen]]]) ifFalse: [ ^ false ]. ]. (node isConstant or: [node isVariable or: [node isSend]]) ifFalse: [ ^false ]. ]. ^ true! From noreply at github.com Sat Oct 17 22:44:58 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 17 Oct 2020 15:44:58 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] e5f17d: IA32ABI (Alien plugin) as per VMMaker.oscog-eem.2846 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: e5f17dbca4e74be40c5db244a61f7f24eda21639 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/e5f17dbca4e74be40c5db244a61f7f24eda21639 Author: Eliot Miranda Date: 2020-10-17 (Sat, 17 Oct 2020) Changed paths: M src/plugins/IA32ABI/IA32ABI.c Log Message: ----------- IA32ABI (Alien plugin) as per VMMaker.oscog-eem.2846 Add introspection primtive answering the most recent VMCallbackContext address. From builds at travis-ci.org Sat Oct 17 22:56:53 2020 From: builds at travis-ci.org (Travis CI) Date: Sat, 17 Oct 2020 22:56:53 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2247 (Cog - e5f17db) In-Reply-To: Message-ID: <5f8b76b54218_13f8dbe1bf4b41502dd@travis-tasks-576bb78d9d-x9bfs.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2247 Status: Still Failing Duration: 11 mins and 12 secs Commit: e5f17db (Cog) Author: Eliot Miranda Message: IA32ABI (Alien plugin) as per VMMaker.oscog-eem.2846 Add introspection primtive answering the most recent VMCallbackContext address. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/4a29cd651c3f...e5f17dbca4e7 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736715222?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sat Oct 17 22:57:55 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sat, 17 Oct 2020 22:57:55 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2249 Message-ID: <20201017225755.1.CD93BAD6439025B4@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Sun Oct 18 01:48:51 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sun, 18 Oct 2020 01:48:51 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2847.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2847.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2847 Author: eem Time: 17 October 2020, 6:48:41.841393 pm UUID: 7737c3b2-b284-4437-8070-d692253551e5 Ancestors: VMMaker.oscog-eem.2846 Fix a bad bug in IA32ABIPlugin>>#primReturnAsFromContextThrough, which must always signal the semaphore whether it returns to C oir not, because if more than one callback is waiting to retuern and one that fails to return doesn't signal the semaphore to give anothe rwaiitng callback the chance to return the system will deadlock. Add savedMostRecentCallbackContext to VMCallbackContext so we can get the entire list from the image to debug deadlocks. Consign IA32ABIPlugin>>#primReturnFromContextThrough to history. =============== Diff against VMMaker.oscog-eem.2846 =============== Item was changed: ----- Method: IA32ABIPlugin>>primReturnAsFromContextThrough (in category 'primitives-callbacks') ----- primReturnAsFromContextThrough "Return a result from a callback to the callback's callee. The primitive has a signature of either of the forms: result primReturnAs: returnTypeCode FromContext: callbackContext result primSignal: aSemaphore andReturnAs: returnTypeCode FromContext: callbackContext . + If of the second form answer false if this is not the most recent callback, and in any case + signal aSemaphore (Alien's lifoCallbackSemaphore), releasing all processes waiting on it, + so as to implement LIFO ordering of callbacks." - If of the second form answer false if this is not the most recent callback, and signal aSemaphore - if it is, so as to implement LIFO ordering of callbacks." + | argCount vmCallbackContext isMostRecentCallback lifoCallbackSemaphore | + argCount := interpreterProxy methodArgumentCount. + self assert: (interpreterProxy isWordsOrBytes: (interpreterProxy stackValue: argCount)). "Receiver, a VMCallbackContext32/64 Alien ..." + vmCallbackContext := self cCoerceSimple: (self startOfData: (interpreterProxy stackValue: argCount)) + to: #'VMCallbackContext *'. + isMostRecentCallback := vmCallbackContext = self getMostRecentCallbackContext. + argCount = 3 + ifTrue: "More error checking is done in StackInterpreter>>#returnAs:ThroughCallback:Context: below..." + [lifoCallbackSemaphore := interpreterProxy stackValue: 2. + (interpreterProxy fetchClassOf: lifoCallbackSemaphore) = interpreterProxy classSemaphore ifFalse: - | vmCallbackContext isMostRecent | - - interpreterProxy methodArgumentCount = 3 - ifTrue: - [self assert: (interpreterProxy isNonImmediate: (interpreterProxy stackValue: 3)). - self assert: (interpreterProxy fetchClassOf: (interpreterProxy stackValue: 2)) = interpreterProxy classSemaphore. - self assert: (interpreterProxy isIntegerObject: (interpreterProxy stackValue: 1)). - self assert: (interpreterProxy isNonImmediate: (interpreterProxy stackValue: 0)). - vmCallbackContext := self cCoerceSimple: (self startOfData: (interpreterProxy stackValue: 3)) - to: #'VMCallbackContext *'. - isMostRecent := vmCallbackContext = self getMostRecentCallbackContext. - isMostRecent ifFalse: - [^interpreterProxy methodReturnValue: interpreterProxy falseObject]. - (interpreterProxy fetchClassOf: (interpreterProxy stackValue: 2)) = interpreterProxy classSemaphore ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. + "Allow the next waiting callback to attempt to return..." + interpreterProxy signalNoResume: lifoCallbackSemaphore. + "If this is not the most recent, return false, and proceed to wait..." + isMostRecentCallback ifFalse: + [^interpreterProxy methodReturnValue: interpreterProxy falseObject]] - [interpreterProxy signalNoResume: (interpreterProxy stackValue: 2)] whileFalse] ifFalse: [self assert: interpreterProxy methodArgumentCount = 2. + isMostRecentCallback ifFalse: + [^interpreterProxy primitiveFailFor: PrimErrInappropriate]]. - self assert: (interpreterProxy isNonImmediate: (interpreterProxy stackValue: 2)). - self assert: (interpreterProxy isIntegerObject: (interpreterProxy stackValue: 1)). - self assert: (interpreterProxy isNonImmediate: (interpreterProxy stackValue: 0)). - vmCallbackContext := self cCoerceSimple: (self startOfData: (interpreterProxy stackValue: 2)) - to: #'VMCallbackContext *']. (interpreterProxy returnAs: (interpreterProxy stackValue: 1) ThroughCallback: vmCallbackContext Context: (interpreterProxy stackValue: 0)) ifFalse: + [^interpreterProxy primitiveFailFor: PrimErrBadArgument] - [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. "NOTREACHED"! Item was changed: ----- Method: IA32ABIPlugin>>primReturnFromContextThrough (in category 'primitives-callbacks') ----- primReturnFromContextThrough "Return a result from a callback to the callback's callee. The primitive has a signature of either of the forms: result primReturnFromContext: callbackContext through: jmpBuf result primSignal: aSemaphore andReturnFromContext: callbackContext through: jmpBuf . If of the second form answer true if this is not the most recent callback, and signal aSemaphore if it is, so as to implement LIFO ordering of callbacks." + | mac vmCallbackContext vmCallbackReturnValue isMostRecent | vmCallbackContext := self cCoerceSimple: (interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 0)) to: #'VMCallbackContext *'. (interpreterProxy failed or: [vmCallbackContext = 0]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (mac := interpreterProxy methodArgumentCount) = 3 ifTrue: [isMostRecent := vmCallbackContext = self getMostRecentCallbackContext. isMostRecent ifFalse: [interpreterProxy methodReturnValue: interpreterProxy trueObject. ^nil]. (interpreterProxy fetchClassOf: (interpreterProxy stackValue: 2)) = interpreterProxy classSemaphore ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. [interpreterProxy signalNoResume: (interpreterProxy stackValue: 2)] whileFalse]. vmCallbackReturnValue := self cCoerceSimple: (self startOfData: (interpreterProxy stackValue: mac)) to: #'VMCallbackReturnValue *'. self cCode: "C needs a typedef for structs to be assigned, but that implies a struct class for just one assignment." [self memcpy: (self addressOf: vmCallbackContext rvs) _: (self addressOf: vmCallbackReturnValue crvrvs) _: (self sizeof: vmCallbackContext rvs)] inSmalltalk: [vmCallbackContext rvs: vmCallbackReturnValue crvrvs]. (interpreterProxy returnAs: (interpreterProxy integerObjectOf: vmCallbackReturnValue type + 1) ThroughCallback: vmCallbackContext Context: (interpreterProxy stackValue: 1)) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. "NOTREACHED"! Item was changed: ----- Method: VMBasicConstants class>>namesDefinedAtCompileTime (in category 'C translation') ----- namesDefinedAtCompileTime "Answer the set of names for variables that should be defined at compile time. Some of these get default values during simulation, and hence get defaulted in the various initializeMiscConstants methods. But that they have values should /not/ cause the code generator to do dead code elimination based on their default values. In particular, methods marked with will be emitted within #if defined(ANameDefinedAtCompileTime)...#endif. And of course this is backwards. We'd like to define names that are defined at translation time." ^#(VMBIGENDIAN IMMUTABILITY STACKVM COGVM COGMTVM SPURVM PharoVM "Pharo vs Squeak" TerfVM VM_TICKER "Terf vs Squeak & Qwaq/Teleplace/Terf high-priority thread support" EnforceAccessControl "Newspeak" CheckRememberedInTrampoline "IMMUTABILITY" BIT_IDENTICAL_FLOATING_POINT PLATFORM_SPECIFIC_FLOATING_POINT "Alternatives for using fdlibm for floating-point" + OBSOLETE_ALIEN_PRIMITIVES "Ancient crap in the IA32ABI plugin" LLDB "As of lldb-370.0.42 Swift-3.1, passing function parameters to printOopsSuchThat fails with Internal error [IRForTarget]: Couldn't rewrite one of the arguments of a function call. Turning off link time optimization with -fno-lto has no effect. hence we define some debugging functions as being " "processor related" __ARM_ARCH__ __arm__ __arm32__ ARM32 __arm64__ ARM64 _M_I386 _X86_ i386 i486 i586 i686 __i386__ __386__ X86 I386 x86_64 __amd64 __x86_64 __amd64__ __x86_64__ _M_AMD64 _M_X64 __mips__ __mips __powerpc __powerpc__ __powerpc64__ __POWERPC__ __ppc__ __ppc64__ __PPC__ __PPC64__ __sparc__ __sparc __sparc_v8__ __sparc_v9__ __sparcv8 __sparcv9 "Compiler brand related" __ACK__ __CC_ARM __clang__ __GNUC__ _MSC_VER __ICC __SUNPRO_C "os related" ACORN _AIX __ANDROID__ __BEOS__ __linux__ __MINGW32__ __FreeBSD__ __NetBSD__ __OpenBSD__ __osf__ EPLAN9 __unix__ __unix UNIX WIN32 _WIN32 _WIN32_WCE WIN64 _WIN64 _WIN64_WCE)! Item was changed: VMStructType subclass: #VMCallbackContext + instanceVariableNames: 'thunkp stackp intregargsp floatregargsp savedCStackPointer savedCFramePointer rvs savedPrimFunctionPointer savedMostRecentCallbackContext trampoline savedReenterInterpreter' - instanceVariableNames: 'thunkp stackp intregargsp floatregargsp savedCStackPointer savedCFramePointer rvs savedPrimFunctionPointer trampoline savedReenterInterpreter' classVariableNames: '' poolDictionaries: '' category: 'VMMaker-Support'! Item was added: + ----- Method: VMCallbackContext>>savedMostRecentCallbackContext (in category 'accessing') ----- + savedMostRecentCallbackContext + "Answer the value of savedMostRecentCallbackContext" + + ^ savedMostRecentCallbackContext! Item was added: + ----- Method: VMCallbackContext>>savedMostRecentCallbackContext: (in category 'accessing') ----- + savedMostRecentCallbackContext: anObject + "Set the value of savedMostRecentCallbackContext" + + ^savedMostRecentCallbackContext := anObject! From noreply at github.com Sun Oct 18 02:28:55 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 17 Oct 2020 19:28:55 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 883fab: CogVM/IA32API plugin source as per VMMaker.oscog-e... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 883fab5c30cff36aeb93129030e8f7bfa692a697 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/883fab5c30cff36aeb93129030e8f7bfa692a697 Author: Eliot Miranda Date: 2020-10-17 (Sat, 17 Oct 2020) Changed paths: M nsspur64src/vm/cogit.h M nsspur64src/vm/cogitARMv8.c M nsspur64src/vm/cogitX64SysV.c M nsspur64src/vm/cogitX64WIN64.c M nsspur64src/vm/cointerp.c M nsspur64src/vm/cointerp.h M nsspur64src/vm/gcc3x-cointerp.c M nsspur64src/vm/vmCallback.h M nsspursrc/vm/cogit.h M nsspursrc/vm/cogitARMv5.c M nsspursrc/vm/cogitIA32.c M nsspursrc/vm/cogitMIPSEL.c M nsspursrc/vm/cointerp.c M nsspursrc/vm/cointerp.h M nsspursrc/vm/gcc3x-cointerp.c M nsspursrc/vm/vmCallback.h M nsspurstack64src/vm/gcc3x-interp.c M nsspurstack64src/vm/interp.c M nsspurstack64src/vm/vmCallback.h M nsspurstacksrc/vm/gcc3x-interp.c M nsspurstacksrc/vm/interp.c M nsspurstacksrc/vm/vmCallback.h M platforms/Cross/plugins/IA32ABI/arm32abicc.c M platforms/Cross/plugins/IA32ABI/arm64abicc.c M platforms/Cross/plugins/IA32ABI/ia32abicc.c M platforms/Cross/plugins/IA32ABI/ppc32abicc.c M platforms/Cross/plugins/IA32ABI/x64sysvabicc.c M platforms/Cross/plugins/IA32ABI/x64win64abicc.c M platforms/win32/vm/sqWin32Main.c M spur64src/vm/cogit.h M spur64src/vm/cogitARMv8.c M spur64src/vm/cogitX64SysV.c M spur64src/vm/cogitX64WIN64.c M spur64src/vm/cointerp.c M spur64src/vm/cointerp.h M spur64src/vm/cointerpmt.c M spur64src/vm/cointerpmt.h M spur64src/vm/gcc3x-cointerp.c M spur64src/vm/gcc3x-cointerpmt.c M spur64src/vm/vmCallback.h M spurlowcode64src/vm/cogit.h M spurlowcode64src/vm/cogitARMv8.c M spurlowcode64src/vm/cogitX64SysV.c M spurlowcode64src/vm/cogitX64WIN64.c M spurlowcode64src/vm/cointerp.c M spurlowcode64src/vm/cointerp.h M spurlowcode64src/vm/gcc3x-cointerp.c M spurlowcode64src/vm/vmCallback.h M spurlowcodesrc/vm/cogit.h M spurlowcodesrc/vm/cogitARMv5.c M spurlowcodesrc/vm/cogitIA32.c M spurlowcodesrc/vm/cogitMIPSEL.c M spurlowcodesrc/vm/cointerp.c M spurlowcodesrc/vm/cointerp.h M spurlowcodesrc/vm/gcc3x-cointerp.c M spurlowcodesrc/vm/vmCallback.h M spurlowcodestack64src/vm/gcc3x-interp.c M spurlowcodestack64src/vm/interp.c M spurlowcodestack64src/vm/vmCallback.h M spurlowcodestacksrc/vm/gcc3x-interp.c M spurlowcodestacksrc/vm/interp.c M spurlowcodestacksrc/vm/vmCallback.h M spursista64src/vm/cogit.h M spursista64src/vm/cogitARMv8.c M spursista64src/vm/cogitX64SysV.c M spursista64src/vm/cogitX64WIN64.c M spursista64src/vm/cointerp.c M spursista64src/vm/cointerp.h M spursista64src/vm/gcc3x-cointerp.c M spursista64src/vm/vmCallback.h M spursistasrc/vm/cogit.h M spursistasrc/vm/cogitARMv5.c M spursistasrc/vm/cogitIA32.c M spursistasrc/vm/cogitMIPSEL.c M spursistasrc/vm/cointerp.c M spursistasrc/vm/cointerp.h M spursistasrc/vm/gcc3x-cointerp.c M spursistasrc/vm/vmCallback.h M spursrc/vm/cogit.h M spursrc/vm/cogitARMv5.c M spursrc/vm/cogitIA32.c M spursrc/vm/cogitMIPSEL.c M spursrc/vm/cointerp.c M spursrc/vm/cointerp.h M spursrc/vm/cointerpmt.c M spursrc/vm/cointerpmt.h M spursrc/vm/gcc3x-cointerp.c M spursrc/vm/gcc3x-cointerpmt.c M spursrc/vm/vmCallback.h M spurstack64src/vm/gcc3x-interp.c M spurstack64src/vm/interp.c M spurstack64src/vm/validImage.c M spurstack64src/vm/vmCallback.h M spurstacksrc/vm/gcc3x-interp.c M spurstacksrc/vm/interp.c M spurstacksrc/vm/validImage.c M spurstacksrc/vm/vmCallback.h M src/plugins/ClipboardExtendedPlugin/ClipboardExtendedPlugin.c M src/plugins/IA32ABI/IA32ABI.c M src/vm/cogit.h M src/vm/cogitARMv5.c M src/vm/cogitIA32.c M src/vm/cogitMIPSEL.c M src/vm/cointerp.c M src/vm/cointerp.h M src/vm/cointerpmt.c M src/vm/cointerpmt.h M src/vm/gcc3x-cointerp.c M src/vm/gcc3x-cointerpmt.c M src/vm/vmCallback.h M stacksrc/vm/gcc3x-interp.c M stacksrc/vm/interp.c M stacksrc/vm/vmCallback.h Log Message: ----------- CogVM/IA32API plugin source as per VMMaker.oscog-eem.2847 Fix a bad bug in IA32ABIPlugin>>#primReturnAsFromContextThrough, which must always signal the semaphore whether it returns to C oir not, because if more than one callback is waiting to retuern and one that fails to return doesn't signal the semaphore to give anothe rwaiitng callback the chance to return the system will deadlock. Add savedMostRecentCallbackContext to VMCallbackContext so we can get the entire list from the image to debug deadlocks. Consign IA32ABIPlugin>>#primReturnFromContextThrough to history. From no-reply at appveyor.com Sun Oct 18 02:42:45 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sun, 18 Oct 2020 02:42:45 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2250 Message-ID: <20201018024245.1.139F84EC4D781C23@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Sun Oct 18 02:43:34 2020 From: builds at travis-ci.org (Travis CI) Date: Sun, 18 Oct 2020 02:43:34 +0000 Subject: [Vm-dev] Errored: OpenSmalltalk/opensmalltalk-vm#2248 (Cog - 883fab5) In-Reply-To: Message-ID: <5f8babd5a22e5_13f83a3cbf49c10161e@travis-tasks-799ccfdbfd-lhc7z.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2248 Status: Errored Duration: 28 mins and 45 secs Commit: 883fab5 (Cog) Author: Eliot Miranda Message: CogVM/IA32API plugin source as per VMMaker.oscog-eem.2847 Fix a bad bug in IA32ABIPlugin>>#primReturnAsFromContextThrough, which must always signal the semaphore whether it returns to C oir not, because if more than one callback is waiting to retuern and one that fails to return doesn't signal the semaphore to give anothe rwaiitng callback the chance to return the system will deadlock. Add savedMostRecentCallbackContext to VMCallbackContext so we can get the entire list from the image to debug deadlocks. Consign IA32ABIPlugin>>#primReturnFromContextThrough to history. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/e5f17dbca4e7...883fab5c30cf View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736742564?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Sun Oct 18 03:59:05 2020 From: noreply at github.com (Eliot Miranda) Date: Sat, 17 Oct 2020 20:59:05 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 712cfe: Windows: Allow an image supplied on the command li... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 712cfe6c3e29667b56e668d7641daced18efb666 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/712cfe6c3e29667b56e668d7641daced18efb666 Author: Eliot Miranda Date: 2020-10-17 (Sat, 17 Oct 2020) Changed paths: M platforms/win32/vm/sqWin32Main.c Log Message: ----------- Windows: Allow an image supplied on the command line to override an imge in the .ini file. It's an irritating bug to do otherwise. From no-reply at appveyor.com Sun Oct 18 04:12:25 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sun, 18 Oct 2020 04:12:25 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2251 Message-ID: <20201018041225.1.79BF2804E06475E1@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Sun Oct 18 04:13:51 2020 From: builds at travis-ci.org (Travis CI) Date: Sun, 18 Oct 2020 04:13:51 +0000 Subject: [Vm-dev] Errored: OpenSmalltalk/opensmalltalk-vm#2249 (Cog - 712cfe6) In-Reply-To: Message-ID: <5f8bc0ff2b0cb_13f83a3cae1ec13027c@travis-tasks-799ccfdbfd-lhc7z.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2249 Status: Errored Duration: 21 mins and 19 secs Commit: 712cfe6 (Cog) Author: Eliot Miranda Message: Windows: Allow an image supplied on the command line to override an imge in the .ini file. It's an irritating bug to do otherwise. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/883fab5c30cf...712cfe6c3e29 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736751528?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Sun Oct 18 18:36:42 2020 From: noreply at github.com (Eliot Miranda) Date: Sun, 18 Oct 2020 11:36:42 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] fae0d3: Win32/64 VM: update the system time basis to use t... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: fae0d31cd52341977d37d150d8d2c9272f9864bf https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/fae0d31cd52341977d37d150d8d2c9272f9864bf Author: Eliot Miranda Date: 2020-10-18 (Sun, 18 Oct 2020) Changed paths: M platforms/Cross/vm/sq.h M platforms/win32/vm/sqWin32Heartbeat.c M platforms/win32/vm/sqWin32Main.c Log Message: ----------- Win32/64 VM: update the system time basis to use the Windows 8 API GetSystemTimePreciseAsFileTime. Retain the old code if compiling on an earlier system, moot, but what the hell. Declare ioInitTime in sq.h. From no-reply at appveyor.com Sun Oct 18 18:41:14 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sun, 18 Oct 2020 18:41:14 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2252 Message-ID: <20201018184114.1.740084019E99B91C@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Sun Oct 18 18:50:46 2020 From: builds at travis-ci.org (Travis CI) Date: Sun, 18 Oct 2020 18:50:46 +0000 Subject: [Vm-dev] Errored: OpenSmalltalk/opensmalltalk-vm#2250 (Cog - fae0d31) In-Reply-To: Message-ID: <5f8c8e85a128d_13f8ad8dc9bbc15552f@travis-tasks-5945dc898b-mn672.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2250 Status: Errored Duration: 13 mins and 35 secs Commit: fae0d31 (Cog) Author: Eliot Miranda Message: Win32/64 VM: update the system time basis to use the Windows 8 API GetSystemTimePreciseAsFileTime. Retain the old code if compiling on an earlier system, moot, but what the hell. Declare ioInitTime in sq.h. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/712cfe6c3e29...fae0d31cd523 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736871261?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From squeak-dev-noreply at lists.squeakfoundation.org Sun Oct 18 20:42:37 2020 From: squeak-dev-noreply at lists.squeakfoundation.org (squeak-dev-noreply at lists.squeakfoundation.org) Date: Sun, 18 Oct 2020 20:42:37 0000 Subject: [Vm-dev] OSProcessPlugin: VMConstruction-Plugins-OSProcessPlugin-dtl.53.mcz Message-ID: Dave Lewis uploaded a new version of VMConstruction-Plugins-OSProcessPlugin to project OSProcessPlugin: http://www.squeaksource.com/OSProcessPlugin/VMConstruction-Plugins-OSProcessPlugin-dtl.53.mcz ==================== Summary ==================== Name: VMConstruction-Plugins-OSProcessPlugin-dtl.53 Author: dtl Time: 18 October 2020, 4:42:36.371 pm UUID: 4e220e08-4742-4139-8b9f-bbf8008c0865 Ancestors: VMConstruction-Plugins-OSProcessPlugin-dtl.51 OSProcessPlugin 4.6.7 Add new primitives for posix system configuration access via sysconf(3), confstr(3), pathconf(3), and fpathconf(3). For example usage, see OSProcess class>>gnuLinuxConf. From notifications at github.com Sun Oct 18 23:59:03 2020 From: notifications at github.com (smalltalking) Date: Sun, 18 Oct 2020 16:59:03 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Added epoll support for aio.c on unix (#528) Message-ID: When HAVE_CONFIG_H and HAVE_EPOLL is true (the former is pretty much always true), the select-based aio implementation is replaced with an epoll-based one. The epoll variant has a few advantages: - it is free of the lost readSemaphore signals bug (see the comments of Socket's various #waitFor* methods which wait on readSemaphore). - idle CPU usage is down from ~10% to ~2% - faster Socket operations Known issue: - when the VM quits, an error message appears from aioDisable() because the file descriptor about to be removed from the epoll set has already been closed, therefore it's not in the set. It can be worked around by supressing error messages when aioDisable() is called by aioFini() You can view, comment on, or merge this pull request online at: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528 -- Commit Summary -- * Added epoll support for aio.c on unix -- File Changes -- M platforms/unix/vm/aio.c (356) -- Patch Links -- https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528.patch https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528.diff -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528 -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Sun Oct 18 23:58:53 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sun, 18 Oct 2020 23:58:53 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2848.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2848.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2848 Author: eem Time: 18 October 2020, 4:58:43.76798 pm UUID: 4da3724d-ce00-461d-9420-2944dcbfd71a Ancestors: VMMaker.oscog-eem.2847 Fix an awful regression introduced in VMMaker.oscog-eem.2837. Have the setFullScreen fag also set the flag that is stored in the image header, hecne having the image start up as it was saved. =============== Diff against VMMaker.oscog-eem.2847 =============== Item was changed: + ----- Method: CoInterpreter>>getImageHeaderFlags (in category 'image save/restore') ----- - ----- Method: CoInterpreter>>getImageHeaderFlags (in category 'internal interpreter access') ----- getImageHeaderFlags + "Answer the flags that are contained in the 7th long of the image header." + ^fullScreenFlag "0 or 1" + + (VMBIGENDIAN ifTrue: [0] ifFalse: [2]) "this is the imageFloatsLittleEndian flag" + + (flagInterpretedMethods ifTrue: [8] ifFalse: [0]) + + (preemptionYields ifTrue: [0] ifFalse: [16r10]) + + (newFinalization ifTrue: [16r40] ifFalse: [0]) + + (sendWheelEvents ifTrue: [16r80] ifFalse: [0]) + + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [16r100]) + + (imageHeaderFlags bitClear: 16r1DB) "these are any flags we do not recognize"! - "Answer an array of flags indicating various properties of the Cog VM. - These are the same as the image header flags shifted right two bits (excluding float order and full screen flags). - Bit 0: specific to CoInterpreterMT - Bit 1: if set, methods that are interpreted will have the flag bit set in their header - Bit 2: if set, implies preempting a process does not put it to the back of its run queue - Bit 3: specific to CoInterpreterMT - Bit 4: if set, implies the new finalization scheme where WeakArrays are queued - Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events - Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" - ^objectMemory integerObjectOf: (flagInterpretedMethods ifTrue: [2] ifFalse: [0]) - + (preemptionYields ifTrue: [0] ifFalse: [4]) - + (newFinalization ifTrue: [16] ifFalse: [0]) - + (sendWheelEvents ifTrue: [32] ifFalse: [0]) - + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [64]) - + (imageHeaderFlags >> 2 bitClear: 2 + 4 + 16 + 32 + 64)! Item was changed: + ----- Method: CoInterpreterMT>>getImageHeaderFlags (in category 'image save/restore') ----- - ----- Method: CoInterpreterMT>>getImageHeaderFlags (in category 'internal interpreter access') ----- getImageHeaderFlags + "Answer the flags that are contained in the 7th long of the image header." + ^fullScreenFlag "0 or 1" + + (VMBIGENDIAN ifTrue: [0] ifFalse: [2]) "this is the imageFloatsLittleEndian flag" + + (processHasThreadId ifTrue: [4] ifFalse: [0]) + + (flagInterpretedMethods ifTrue: [8] ifFalse: [0]) + + (preemptionYields ifTrue: [0] ifFalse: [16r10]) + + (noThreadingOfGUIThread ifTrue: [16r20] ifFalse: [0]) + + (newFinalization ifTrue: [16r40] ifFalse: [0]) + + (sendWheelEvents ifTrue: [16r80] ifFalse: [0]) + + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [16r100]) + + (imageHeaderFlags bitClear: 16r1FF) "these are any flags we do not recognize"! - "Answer an array of flags indicating various properties of the Cog VM. - These are the same as the image header flags shifted right two bits (excluding float order and full screen flags). - Bit 0: implies the image's Process class has threadId as its 3rd inst var (zero relative) - Bit 1: if set, methods that are interpreted will have the flag bit set in their header - Bit 2: if set, implies preempting a process does not put it to the back of its run queue - Bit 3: if set, implies the GUI will run on the first thread and event queues will not be accessed from other threads - Bit 4: if set, implies the new finalization scheme where WeakArrays are queued - Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events - Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" - ^objectMemory integerObjectOf: (processHasThreadId ifTrue: [1] ifFalse: [0]) - + (flagInterpretedMethods ifTrue: [2] ifFalse: [0]) - + (preemptionYields ifTrue: [0] ifFalse: [4]) - + (noThreadingOfGUIThread ifTrue: [8] ifFalse: [0]) - + (newFinalization ifTrue: [16] ifFalse: [0]) - + (sendWheelEvents ifTrue: [32] ifFalse: [0]) - + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [64]) - + (imageHeaderFlags >> 2 bitClear: 1 + 2 + 4 + 8 + 16 + 32 + 64)! Item was changed: ----- Method: InterpreterPrimitives>>primitiveSetFullScreen (in category 'I/O primitives') ----- primitiveSetFullScreen "On platforms that support it, set full-screen mode to the value of the boolean argument." | argOop | argOop := self stackTop. argOop = objectMemory trueObject + ifTrue: + [self ioSetFullScreen: true] + ifFalse: + [argOop = objectMemory falseObject - ifTrue: [self ioSetFullScreen: true] - ifFalse: [ argOop = objectMemory falseObject ifTrue: [self ioSetFullScreen: false] ifFalse: [self primitiveFail]]. + self successful ifTrue: + [self setFullScreenFlag: argOop = objectMemory trueObject. + self methodReturnReceiver]! - self successful ifTrue: [self pop: 1]! Item was added: + ----- Method: InterpreterPrimitives>>setFullScreenFlag: (in category 'plugin primitive support') ----- + setFullScreenFlag: value + "stub for overriding by the interpeter"! Item was changed: + ----- Method: StackInterpreter>>getImageHeaderFlags (in category 'image save/restore') ----- - ----- Method: StackInterpreter>>getImageHeaderFlags (in category 'internal interpreter access') ----- getImageHeaderFlags + "Answer the flags that are contained in the 7th long of the image header." + ^fullScreenFlag "0 or 1" + + (VMBIGENDIAN ifTrue: [0] ifFalse: [2]) "this is the imageFloatsLittleEndian flag" + + (preemptionYields ifTrue: [0] ifFalse: [16r10]) + + (newFinalization ifTrue: [16r40] ifFalse: [0]) + + (sendWheelEvents ifTrue: [16r80] ifFalse: [0]) + + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [16r100]) + + (imageHeaderFlags bitClear: 16r1D3) "these are any flags we do not recognize"! - "Answer an array of flags indicating various properties of the Cog VM. - These are the same as the image header flags shifted right two bits (excluding float order and full screen flags). - Bit 0: specific to CoInterpreterMT - Bit 1: specific to CoInterpreter - Bit 2: if set, implies preempting a process does not put it to the back of its run queue - Bit 3: specific to CoInterpreterMT - Bit 4: if set, implies the new finalization scheme where WeakArrays are queued - Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events - Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" - ^objectMemory integerObjectOf: (preemptionYields ifTrue: [0] ifFalse: [4]) - + (newFinalization ifTrue: [16] ifFalse: [0]) - + (sendWheelEvents ifTrue: [32] ifFalse: [0]) - + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [64]) - + (imageHeaderFlags >> 2 bitClear: 4 + 16 + 32 + 64)! Item was added: + ----- Method: StackInterpreter>>getImageHeaderFlagsParameterObject (in category 'image save/restore') ----- + getImageHeaderFlagsParameterObject + "Answer the flags that are contained in the 7th long of the image header + as reported to the image through the vm parameter primitives." + ^objectMemory integerObjectOf: self getImageHeaderFlags >> 2! Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveAllVMParameters: (in category 'system control primitives') ----- (excessive size, no diff calculated) Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveGetVMParameter: (in category 'system control primitives') ----- primitiveGetVMParameter: arg "See primitiveVMParameter method comment. N.B. written as a returning case to avoid branch limits in the V3 bytecode set." arg caseOf: { [1] -> [^self positiveMachineIntegerFor: objectMemory oldSpaceSize]. [2] -> [^objectMemory integerObjectOf: objectMemory newSpaceSize]. [3] -> [^self positiveMachineIntegerFor: objectMemory totalMemorySize]. [6] -> [^objectMemory integerObjectOf: objectMemory tenuringThreshold]. [7] -> [^objectMemory integerObjectOf: objectMemory statFullGCs]. [8] -> [^objectMemory integerObjectOf: objectMemory statFullGCUsecs + 500 // 1000]. [9] -> [^objectMemory integerObjectOf: (objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory statScavenges] ifFalse: [objectMemory statIncrGCs])]. [10] -> [^objectMemory integerObjectOf: (objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory statScavengeGCUsecs] ifFalse: [objectMemory statIncrGCUsecs]) + 500 // 1000]. [11] -> [^objectMemory integerObjectOf: objectMemory statTenures]. [12] -> [^ConstZero]. "Was JITTER VM info" [13] -> [^self getVMTickerStartUSecs]. [14] -> [^self getVMTickerCount]. [15] -> [^self getVMTickeeCallCount]. [16] -> [^self positive64BitIntegerFor: statIdleUsecs]. [17] -> [^(SistaVM and: [self isCog]) ifTrue: [objectMemory floatObjectOf: self getCogCodeZoneThreshold] ifFalse: [ConstZero]]. [18] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory statCompactionUsecs + 500 // 1000] ifFalse: [ConstZero]]. [19] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory scavengeThresholdAsExtent] ifFalse: [ConstZero]]. [20] -> [^objectMemory positive64BitIntegerFor: self ioUTCStartMicroseconds]. [21] -> [^objectMemory integerObjectOf: objectMemory rootTableCount]. [22] -> [^objectMemory integerObjectOf: objectMemory statRootTableOverflows]. [23] -> [^objectMemory integerObjectOf: extraVMMemory]. [24] -> [^objectMemory integerObjectOf: objectMemory shrinkThreshold]. [25] -> [^objectMemory integerObjectOf: objectMemory growHeadroom]. [26] -> [^objectMemory integerObjectOf: self ioHeartbeatMilliseconds]. [27] -> [^objectMemory integerObjectOf: objectMemory statMarkCount]. [28] -> [^objectMemory integerObjectOf: objectMemory statSweepCount]. [29] -> [^objectMemory integerObjectOf: objectMemory statMkFwdCount]. [30] -> [^objectMemory integerObjectOf: objectMemory statCompMoveCount]. [31] -> [^objectMemory integerObjectOf: objectMemory statGrowMemory]. [32] -> [^objectMemory integerObjectOf: objectMemory statShrinkMemory]. [33] -> [^objectMemory integerObjectOf: objectMemory statRootTableCount]. [34] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue:"was statAllocationCount" [objectMemory positive64BitIntegerFor: objectMemory currentAllocatedBytes]]. [35] -> [^objectMemory integerObjectOf: objectMemory statSurvivorCount]. [36] -> [^objectMemory integerObjectOf: (self microsecondsToMilliseconds: objectMemory statGCEndUsecs)]. [37] -> [^objectMemory integerObjectOf: objectMemory statSpecialMarkCount]. [38] -> [^objectMemory integerObjectOf: objectMemory statIGCDeltaUsecs + 500 // 1000]. [39] -> [^objectMemory integerObjectOf: statPendingFinalizationSignals]. [40] -> [^objectMemory integerObjectOf: objectMemory wordSize]. [41] -> [^objectMemory integerObjectOf: self imageFormatVersion]. [42] -> [^objectMemory integerObjectOf: numStackPages]. [43] -> [^objectMemory integerObjectOf: desiredNumStackPages]. [44] -> [^objectMemory integerObjectOf: objectMemory edenBytes]. [45] -> [^objectMemory integerObjectOf: desiredEdenBytes]. [46] -> [^self getCogCodeSize]. [47] -> [^self getDesiredCogCodeSize]. + [48] -> [^self getImageHeaderFlagsParameterObject]. - [48] -> [^self getImageHeaderFlags]. [49] -> [^objectMemory integerObjectOf: self ioGetMaxExtSemTableSize]. [52] -> [^objectMemory integerObjectOf: objectMemory rootTableCapacity]. [53] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory numSegments]]. [54] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory freeSize]]. [55] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory floatObjectOf: objectMemory getHeapGrowthToSizeGCRatio]]. [56] -> [^self positive64BitIntegerFor: statProcessSwitch]. [57] -> [^self positive64BitIntegerFor: statIOProcessEvents]. [58] -> [^self positive64BitIntegerFor: statForceInterruptCheck]. [59] -> [^self positive64BitIntegerFor: statCheckForEvents]. [60] -> [^self positive64BitIntegerFor: statStackOverflow]. [61] -> [^self positive64BitIntegerFor: statStackPageDivorce]. [62] -> [^self getCodeCompactionCount]. [63] -> [^self getCodeCompactionMSecs]. [64] -> [^self getCogMethodCount]. [65] -> [^self getCogVMFeatureFlags]. [66] -> [^objectMemory integerObjectOf: self stackPageByteSize]. [67] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [self positiveMachineIntegerFor: objectMemory maxOldSpaceSize]]. [68] -> [^objectMemory floatObjectOf: stackPages statAverageLivePagesWhenMapping]. [69] -> [^objectMemory integerObjectOf: stackPages statMaxPageCountWhenMapping]. [70] -> [^objectMemory integerObjectOf: self vmProxyMajorVersion]. [71] -> [^objectMemory integerObjectOf: self vmProxyMinorVersion]. [72] -> [^objectMemory integerObjectOf: objectMemory statMarkUsecs + 500 // 1000]. [73] -> [^objectMemory integerObjectOf: objectMemory statSweepUsecs + 500 // 1000]. [74] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory statMaxAllocSegmentTime + 500 // 1000]]. [75] -> [^objectMemory booleanObjectOf: self primitiveDoMixedArithmetic] } otherwise: [^nil]! Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveSetVMParameter:arg: (in category 'system control primitives') ----- primitiveSetVMParameter: index arg: argOop "See primitiveVMParameter method comment" | arg result | "argOop read & checks; in most cases this is an integer parameter. Handle the exceptions." index caseOf: { [17] -> [((objectMemory isFloatInstance: argOop) or: [objectMemory isIntegerObject: argOop]) ifFalse: [primFailCode := PrimErrBadArgument]]. [55] -> [((objectMemory isFloatInstance: argOop) or: [objectMemory isIntegerObject: argOop]) ifFalse: [primFailCode := PrimErrBadArgument]]. [68] -> [((objectMemory isFloatInstance: argOop) or: [objectMemory isIntegerObject: argOop]) ifFalse: [primFailCode := PrimErrBadArgument]]. [67] -> [arg := self positiveMachineIntegerValueOf: argOop]. [75] -> [arg := objectMemory booleanValueOf: argOop] } otherwise: [arg := objectMemory integerValueOf: argOop]. self failed ifTrue: [^self primitiveFailFor: PrimErrBadArgument]. "assume failure, then set success for handled indices" self primitiveFailFor: PrimErrBadArgument. index caseOf: { [5] -> [objectMemory hasSpurMemoryManagerAPI ifFalse: ["Was: result := allocationsBetweenGCs. allocationsBetweenGCs := arg." "Ignore for now, because old images won't start up otherwise. See 45 for eden size setting." result := objectMemory nilObject. self initPrimCall]]. [6] -> [result := objectMemory integerObjectOf: objectMemory tenuringThreshold. primFailCode := objectMemory tenuringThreshold: arg]. [11] -> [arg >= 0 ifTrue: [result := objectMemory integerObjectOf: objectMemory statTenures. objectMemory statTenures: arg. self initPrimCall]]. [17] -> [(SistaVM and: [self isCog]) ifTrue: [result := objectMemory floatObjectOf: self getCogCodeZoneThreshold. primFailCode := self setCogCodeZoneThreshold: (self noInlineLoadFloatOrIntFrom: argOop)]]. [23] -> [result := objectMemory integerObjectOf: extraVMMemory. extraVMMemory := arg. self initPrimCall]. [24] -> [arg > 0 ifTrue: [result := objectMemory integerObjectOf: objectMemory shrinkThreshold. objectMemory shrinkThreshold: arg. self initPrimCall]]. [25] -> [arg > 0 ifTrue: [result := objectMemory integerObjectOf: objectMemory growHeadroom. objectMemory growHeadroom: arg. self initPrimCall]]. [26] -> [arg >= 0 ifTrue: "0 turns off the heartbeat" [result := objectMemory integerObjectOf: self ioHeartbeatMilliseconds. self ioSetHeartbeatMilliseconds: arg. self initPrimCall]]. [34] -> [(objectMemory hasSpurMemoryManagerAPI "was statAllocationCount; now statAllocatedBytes" and: [arg >= 0]) ifTrue: [result := objectMemory positive64BitIntegerFor: objectMemory currentAllocatedBytes. objectMemory setCurrentAllocatedBytesTo: arg. self initPrimCall]]. [43] -> [(arg between: 0 and: 65535) ifTrue: [result := objectMemory integerObjectOf: desiredNumStackPages. desiredNumStackPages := arg. self initPrimCall]]. [45] -> [arg >= 0 ifTrue: [result := objectMemory integerObjectOf: desiredEdenBytes. desiredEdenBytes := arg. self initPrimCall]]. [47] -> [(self isCog and: [arg between: 0 and: self maxCogCodeSize]) ifTrue: [result := objectMemory integerObjectOf: self getDesiredCogCodeSize. self setDesiredCogCodeSize: arg. self initPrimCall]]. [48] -> [arg >= 0 ifTrue: [| oldPrimitiveDoMixedArithmetic | oldPrimitiveDoMixedArithmetic := primitiveDoMixedArithmetic. + result := self getImageHeaderFlagsParameterObject. - result := objectMemory integerObjectOf: self getImageHeaderFlags. self initPrimCall. "i.e. setImageHeaderFlags: can fail" self setImageHeaderFlags: arg. (primFailCode = 0 and: [oldPrimitiveDoMixedArithmetic ~= primitiveDoMixedArithmetic]) ifTrue: [self flushMethodCache. self flushMethodsWithMachineCodePrimitivesAndContinueAnswering: result "NOT REACHED (in CoInterpreter)"]]]. [49] -> [(arg between: 0 and: 65535) ifTrue: [result := objectMemory integerObjectOf: self ioGetMaxExtSemTableSize. self initPrimCall. "i.e. ioSetMaxExtSemTableSize: is allowed to fail" self setMaxExtSemSizeTo: arg]]. [55] -> [objectMemory hasSpurMemoryManagerAPI ifTrue: [result := objectMemory floatObjectOf: objectMemory getHeapGrowthToSizeGCRatio. primFailCode := objectMemory setHeapGrowthToSizeGCRatio: (self noInlineLoadFloatOrIntFrom: argOop)]]. [67] -> [(arg >= 0 and: [objectMemory hasSpurMemoryManagerAPI]) ifTrue: [result := self positiveMachineIntegerFor: objectMemory maxOldSpaceSize. primFailCode := objectMemory setMaxOldSpaceSize: arg]]. [68] -> [result := objectMemory floatObjectOf: stackPages statAverageLivePagesWhenMapping. self initPrimCall. "i.e. statAverageLivePagesWhenMapping: is allowed to fail" stackPages statAverageLivePagesWhenMapping: (self noInlineLoadFloatOrIntFrom: argOop)]. [69] -> [arg >= 0 ifTrue: [result := objectMemory integerObjectOf: stackPages statMaxPageCountWhenMapping. stackPages statMaxPageCountWhenMapping: arg. self initPrimCall]]. [74] -> [(arg >= 0 and: [objectMemory hasSpurMemoryManagerAPI]) ifTrue: [result := objectMemory integerObjectOf: objectMemory statMaxAllocSegmentTime + 500 // 1000. stackPages statMaxAllocSegmentTime: arg. "usually 0" self initPrimCall]]. [75] -> [| mustFlush | result := objectMemory booleanObjectOf: self primitiveDoMixedArithmetic. self initPrimCall. mustFlush := primitiveDoMixedArithmetic ~= arg. primitiveDoMixedArithmetic := arg. mustFlush ifTrue: [self flushMethodCache. self flushMethodsWithMachineCodePrimitivesAndContinueAnswering: result "NOT REACHED (in CoInterpreter)"]] } otherwise: []. self successful ifTrue: [self methodReturnValue: result] "return old value" ifFalse: [self primitiveFailFor: PrimErrInappropriate] "attempting to write a read-only or non-existent parameter"! From no-reply at appveyor.com Mon Oct 19 00:07:42 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 00:07:42 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2253 Message-ID: <20201019000742.1.3F8EADCE73CAAD35@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Mon Oct 19 00:32:55 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Mon, 19 Oct 2020 00:32:55 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2849.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2849.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2849 Author: eem Time: 18 October 2020, 5:32:46.306263 pm UUID: e029d24d-607b-4d1f-a117-14d381a9dcb3 Ancestors: VMMaker.oscog-eem.2848 And have the flags not recognised by a specific VM still get recorded in imageHeaderFlags, so set parameters will get set in the image header. =============== Diff against VMMaker.oscog-eem.2848 =============== Item was changed: ----- Method: CoInterpreter>>getImageHeaderFlags (in category 'image save/restore') ----- getImageHeaderFlags "Answer the flags that are contained in the 7th long of the image header." ^fullScreenFlag "0 or 1" + (VMBIGENDIAN ifTrue: [0] ifFalse: [2]) "this is the imageFloatsLittleEndian flag" + (flagInterpretedMethods ifTrue: [8] ifFalse: [0]) + (preemptionYields ifTrue: [0] ifFalse: [16r10]) + (newFinalization ifTrue: [16r40] ifFalse: [0]) + (sendWheelEvents ifTrue: [16r80] ifFalse: [0]) + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [16r100]) + + (imageHeaderFlags bitClear: 1+2+8+16r10+16r40+16r80+16r100) "these are any flags we do not recognize"! - + (imageHeaderFlags bitClear: 16r1DB) "these are any flags we do not recognize"! Item was changed: ----- Method: CoInterpreter>>setImageHeaderFlags: (in category 'internal interpreter access') ----- setImageHeaderFlags: flags + "Set an array of flags indicating various properties of the saved image, responded to on image load. + These are the same as the image header flags shifted right two bits, omitting the fullScreenFlag and float byte order flag. + Bit 0: if set, implies the image's Process class has threadId as its 3rd inst var (zero relative) (meaningful to the MT VM only) - "Set an array of flags indicating various properties of the Cog VM. - Bit 0: if set, implies the image's Process class has threadId as its 3rd inst var (zero relative) Bit 1: if set, methods that are interpreted will have the flag bit set in their header Bit 2: if set, implies preempting a process does not put it to the back of its run queue + Bit 3: if set, implies a threaded VM will not disown the VM if owned by the GUI thread (meaningful to the MT VM only) - Bit 3: if set, implies a threaded VM will not dosown the VM if owned by the GUI thread Bit 4: if set, implies the new finalization scheme where WeakArrays are queued Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" flags asUnsignedInteger > 127 ifTrue: [^self primitiveFailFor: PrimErrUnsupported]. "processHasThreadId := flags anyMask: 1. specific to CoInterpreterMT" + imageHeaderFlags := (flags anyMask: 1) + ifTrue: [imageHeaderFlags bitOr: 4] + ifFalse: [imageHeaderFlags bitClear: 4]. flagInterpretedMethods := flags anyMask: 2. preemptionYields := flags noMask: 4. "noThreadingOfGUIThread := flags anyMask: 8.. specific to CoInterpreterMT" + imageHeaderFlags := (flags anyMask: 8) + ifTrue: [imageHeaderFlags bitOr: 32] + ifFalse: [imageHeaderFlags bitClear: 32]. newFinalization := flags anyMask: 16. sendWheelEvents := flags anyMask: 32. primitiveDoMixedArithmetic := flags noMask: 64! Item was changed: ----- Method: CoInterpreterMT>>setImageHeaderFlags: (in category 'internal interpreter access') ----- setImageHeaderFlags: flags + "Set an array of flags indicating various properties of the saved image, responded to on image load. + These are the same as the image header flags shifted right two bits, omitting the fullScreenFlag and float byte order flag. - "Set an array of flags indicating various properties of the Cog VM. Bit 0: if set, implies the image's Process class has threadId as its 3rd inst var (zero relative) Bit 1: if set, methods that are interpreted will have the flag bit set in their header Bit 2: if set, implies preempting a process does not put it to the back of its run queue + Bit 3: if set, implies a threaded VM will not disown the VM if owned by the GUI thread - Bit 3: if set, implies a threaded VM will not dosown the VM if owned by the GUI thread Bit 4: if set, implies the new finalization scheme where WeakArrays are queued Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" flags asUnsignedInteger > 127 ifTrue: [^self primitiveFailFor: PrimErrUnsupported]. processHasThreadId := flags anyMask: 1. flagInterpretedMethods := flags anyMask: 2. preemptionYields := flags noMask: 4. noThreadingOfGUIThread := flags anyMask: 8. newFinalization := flags anyMask: 16. sendWheelEvents := flags anyMask: 32. primitiveDoMixedArithmetic := flags noMask: 64! Item was changed: ----- Method: StackInterpreter>>getImageHeaderFlags (in category 'image save/restore') ----- getImageHeaderFlags "Answer the flags that are contained in the 7th long of the image header." ^fullScreenFlag "0 or 1" + (VMBIGENDIAN ifTrue: [0] ifFalse: [2]) "this is the imageFloatsLittleEndian flag" + (preemptionYields ifTrue: [0] ifFalse: [16r10]) + (newFinalization ifTrue: [16r40] ifFalse: [0]) + (sendWheelEvents ifTrue: [16r80] ifFalse: [0]) + (primitiveDoMixedArithmetic ifTrue: [0] ifFalse: [16r100]) + + (imageHeaderFlags bitClear: 1+2+16r10+16r40+16r80+16r100) "these are any flags we do not recognize"! - + (imageHeaderFlags bitClear: 16r1D3) "these are any flags we do not recognize"! Item was added: + ----- Method: StackInterpreter>>getImageHeaderFlagsParameter (in category 'image save/restore') ----- + getImageHeaderFlagsParameter + "Answer the flags that are contained in the 7th long of the image header + as reported to the image through the vm parameter primitives # 48." + ^objectMemory integerObjectOf: self getImageHeaderFlags >> 2! Item was removed: - ----- Method: StackInterpreter>>getImageHeaderFlagsParameterObject (in category 'image save/restore') ----- - getImageHeaderFlagsParameterObject - "Answer the flags that are contained in the 7th long of the image header - as reported to the image through the vm parameter primitives." - ^objectMemory integerObjectOf: self getImageHeaderFlags >> 2! Item was changed: ----- Method: StackInterpreter>>setImageHeaderFlags: (in category 'internal interpreter access') ----- setImageHeaderFlags: flags + "Set an array of flags indicating various properties of the saved image, responded to on image load. + These are the same as the image header flags shifted right two bits, omitting the fullScreenFlag and float byte order flag. + Bit 0: if set, implies the image's Process class has threadId as its 3rd inst var (zero relative) (meaningful to the MT VM only) + Bit 1: if set, methods that are interpreted will have the flag bit set in their header (meaningful to the Cog VM only) - "Set an array of flags indicating various properties of the Cog VM. Bit 2: if set, implies preempting a process does not put it to the back of its run queue + Bit 3: if set, implies a threaded VM will not disown the VM if owned by the GUI thread (meaningful to the MT VM only) Bit 4: if set, implies the new finalization scheme where WeakArrays are queued Bit 5: if set, implies wheel events will be delivered as such and not mapped to arrow key events Bit 6: if set, implies arithmetic primitives will fail if given arguments of different types (float vs int)" flags asUnsignedInteger > 127 ifTrue: [^self primitiveFailFor: PrimErrUnsupported]. "processHasThreadId := flags anyMask: 1. specific to CoInterpreterMT" + imageHeaderFlags := (flags anyMask: 1) + ifTrue: [imageHeaderFlags bitOr: 4] + ifFalse: [imageHeaderFlags bitClear: 4]. "flagInterpretedMethods := flags anyMask: 2. specific to CoInterpreter" + imageHeaderFlags := (flags anyMask: 2) + ifTrue: [imageHeaderFlags bitOr: 8] + ifFalse: [imageHeaderFlags bitClear: 8]. preemptionYields := flags noMask: 4. "noThreadingOfGUIThread := flags anyMask: 8.. specific to CoInterpreterMT" + imageHeaderFlags := (flags anyMask: 8) + ifTrue: [imageHeaderFlags bitOr: 32] + ifFalse: [imageHeaderFlags bitClear: 32]. newFinalization := flags anyMask: 16. sendWheelEvents := flags anyMask: 32. primitiveDoMixedArithmetic := flags noMask: 64! Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveAllVMParameters: (in category 'system control primitives') ----- (excessive size, no diff calculated) Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveGetVMParameter: (in category 'system control primitives') ----- primitiveGetVMParameter: arg "See primitiveVMParameter method comment. N.B. written as a returning case to avoid branch limits in the V3 bytecode set." arg caseOf: { [1] -> [^self positiveMachineIntegerFor: objectMemory oldSpaceSize]. [2] -> [^objectMemory integerObjectOf: objectMemory newSpaceSize]. [3] -> [^self positiveMachineIntegerFor: objectMemory totalMemorySize]. [6] -> [^objectMemory integerObjectOf: objectMemory tenuringThreshold]. [7] -> [^objectMemory integerObjectOf: objectMemory statFullGCs]. [8] -> [^objectMemory integerObjectOf: objectMemory statFullGCUsecs + 500 // 1000]. [9] -> [^objectMemory integerObjectOf: (objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory statScavenges] ifFalse: [objectMemory statIncrGCs])]. [10] -> [^objectMemory integerObjectOf: (objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory statScavengeGCUsecs] ifFalse: [objectMemory statIncrGCUsecs]) + 500 // 1000]. [11] -> [^objectMemory integerObjectOf: objectMemory statTenures]. [12] -> [^ConstZero]. "Was JITTER VM info" [13] -> [^self getVMTickerStartUSecs]. [14] -> [^self getVMTickerCount]. [15] -> [^self getVMTickeeCallCount]. [16] -> [^self positive64BitIntegerFor: statIdleUsecs]. [17] -> [^(SistaVM and: [self isCog]) ifTrue: [objectMemory floatObjectOf: self getCogCodeZoneThreshold] ifFalse: [ConstZero]]. [18] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory statCompactionUsecs + 500 // 1000] ifFalse: [ConstZero]]. [19] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory scavengeThresholdAsExtent] ifFalse: [ConstZero]]. [20] -> [^objectMemory positive64BitIntegerFor: self ioUTCStartMicroseconds]. [21] -> [^objectMemory integerObjectOf: objectMemory rootTableCount]. [22] -> [^objectMemory integerObjectOf: objectMemory statRootTableOverflows]. [23] -> [^objectMemory integerObjectOf: extraVMMemory]. [24] -> [^objectMemory integerObjectOf: objectMemory shrinkThreshold]. [25] -> [^objectMemory integerObjectOf: objectMemory growHeadroom]. [26] -> [^objectMemory integerObjectOf: self ioHeartbeatMilliseconds]. [27] -> [^objectMemory integerObjectOf: objectMemory statMarkCount]. [28] -> [^objectMemory integerObjectOf: objectMemory statSweepCount]. [29] -> [^objectMemory integerObjectOf: objectMemory statMkFwdCount]. [30] -> [^objectMemory integerObjectOf: objectMemory statCompMoveCount]. [31] -> [^objectMemory integerObjectOf: objectMemory statGrowMemory]. [32] -> [^objectMemory integerObjectOf: objectMemory statShrinkMemory]. [33] -> [^objectMemory integerObjectOf: objectMemory statRootTableCount]. [34] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue:"was statAllocationCount" [objectMemory positive64BitIntegerFor: objectMemory currentAllocatedBytes]]. [35] -> [^objectMemory integerObjectOf: objectMemory statSurvivorCount]. [36] -> [^objectMemory integerObjectOf: (self microsecondsToMilliseconds: objectMemory statGCEndUsecs)]. [37] -> [^objectMemory integerObjectOf: objectMemory statSpecialMarkCount]. [38] -> [^objectMemory integerObjectOf: objectMemory statIGCDeltaUsecs + 500 // 1000]. [39] -> [^objectMemory integerObjectOf: statPendingFinalizationSignals]. [40] -> [^objectMemory integerObjectOf: objectMemory wordSize]. [41] -> [^objectMemory integerObjectOf: self imageFormatVersion]. [42] -> [^objectMemory integerObjectOf: numStackPages]. [43] -> [^objectMemory integerObjectOf: desiredNumStackPages]. [44] -> [^objectMemory integerObjectOf: objectMemory edenBytes]. [45] -> [^objectMemory integerObjectOf: desiredEdenBytes]. [46] -> [^self getCogCodeSize]. [47] -> [^self getDesiredCogCodeSize]. + [48] -> [^self getImageHeaderFlagsParameter]. - [48] -> [^self getImageHeaderFlagsParameterObject]. [49] -> [^objectMemory integerObjectOf: self ioGetMaxExtSemTableSize]. [52] -> [^objectMemory integerObjectOf: objectMemory rootTableCapacity]. [53] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory numSegments]]. [54] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory freeSize]]. [55] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory floatObjectOf: objectMemory getHeapGrowthToSizeGCRatio]]. [56] -> [^self positive64BitIntegerFor: statProcessSwitch]. [57] -> [^self positive64BitIntegerFor: statIOProcessEvents]. [58] -> [^self positive64BitIntegerFor: statForceInterruptCheck]. [59] -> [^self positive64BitIntegerFor: statCheckForEvents]. [60] -> [^self positive64BitIntegerFor: statStackOverflow]. [61] -> [^self positive64BitIntegerFor: statStackPageDivorce]. [62] -> [^self getCodeCompactionCount]. [63] -> [^self getCodeCompactionMSecs]. [64] -> [^self getCogMethodCount]. [65] -> [^self getCogVMFeatureFlags]. [66] -> [^objectMemory integerObjectOf: self stackPageByteSize]. [67] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [self positiveMachineIntegerFor: objectMemory maxOldSpaceSize]]. [68] -> [^objectMemory floatObjectOf: stackPages statAverageLivePagesWhenMapping]. [69] -> [^objectMemory integerObjectOf: stackPages statMaxPageCountWhenMapping]. [70] -> [^objectMemory integerObjectOf: self vmProxyMajorVersion]. [71] -> [^objectMemory integerObjectOf: self vmProxyMinorVersion]. [72] -> [^objectMemory integerObjectOf: objectMemory statMarkUsecs + 500 // 1000]. [73] -> [^objectMemory integerObjectOf: objectMemory statSweepUsecs + 500 // 1000]. [74] -> [^objectMemory hasSpurMemoryManagerAPI ifTrue: [objectMemory integerObjectOf: objectMemory statMaxAllocSegmentTime + 500 // 1000]]. [75] -> [^objectMemory booleanObjectOf: self primitiveDoMixedArithmetic] } otherwise: [^nil]! Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveSetVMParameter:arg: (in category 'system control primitives') ----- primitiveSetVMParameter: index arg: argOop "See primitiveVMParameter method comment" | arg result | "argOop read & checks; in most cases this is an integer parameter. Handle the exceptions." index caseOf: { [17] -> [((objectMemory isFloatInstance: argOop) or: [objectMemory isIntegerObject: argOop]) ifFalse: [primFailCode := PrimErrBadArgument]]. [55] -> [((objectMemory isFloatInstance: argOop) or: [objectMemory isIntegerObject: argOop]) ifFalse: [primFailCode := PrimErrBadArgument]]. [68] -> [((objectMemory isFloatInstance: argOop) or: [objectMemory isIntegerObject: argOop]) ifFalse: [primFailCode := PrimErrBadArgument]]. [67] -> [arg := self positiveMachineIntegerValueOf: argOop]. [75] -> [arg := objectMemory booleanValueOf: argOop] } otherwise: [arg := objectMemory integerValueOf: argOop]. self failed ifTrue: [^self primitiveFailFor: PrimErrBadArgument]. "assume failure, then set success for handled indices" self primitiveFailFor: PrimErrBadArgument. index caseOf: { [5] -> [objectMemory hasSpurMemoryManagerAPI ifFalse: ["Was: result := allocationsBetweenGCs. allocationsBetweenGCs := arg." "Ignore for now, because old images won't start up otherwise. See 45 for eden size setting." result := objectMemory nilObject. self initPrimCall]]. [6] -> [result := objectMemory integerObjectOf: objectMemory tenuringThreshold. primFailCode := objectMemory tenuringThreshold: arg]. [11] -> [arg >= 0 ifTrue: [result := objectMemory integerObjectOf: objectMemory statTenures. objectMemory statTenures: arg. self initPrimCall]]. [17] -> [(SistaVM and: [self isCog]) ifTrue: [result := objectMemory floatObjectOf: self getCogCodeZoneThreshold. primFailCode := self setCogCodeZoneThreshold: (self noInlineLoadFloatOrIntFrom: argOop)]]. [23] -> [result := objectMemory integerObjectOf: extraVMMemory. extraVMMemory := arg. self initPrimCall]. [24] -> [arg > 0 ifTrue: [result := objectMemory integerObjectOf: objectMemory shrinkThreshold. objectMemory shrinkThreshold: arg. self initPrimCall]]. [25] -> [arg > 0 ifTrue: [result := objectMemory integerObjectOf: objectMemory growHeadroom. objectMemory growHeadroom: arg. self initPrimCall]]. [26] -> [arg >= 0 ifTrue: "0 turns off the heartbeat" [result := objectMemory integerObjectOf: self ioHeartbeatMilliseconds. self ioSetHeartbeatMilliseconds: arg. self initPrimCall]]. [34] -> [(objectMemory hasSpurMemoryManagerAPI "was statAllocationCount; now statAllocatedBytes" and: [arg >= 0]) ifTrue: [result := objectMemory positive64BitIntegerFor: objectMemory currentAllocatedBytes. objectMemory setCurrentAllocatedBytesTo: arg. self initPrimCall]]. [43] -> [(arg between: 0 and: 65535) ifTrue: [result := objectMemory integerObjectOf: desiredNumStackPages. desiredNumStackPages := arg. self initPrimCall]]. [45] -> [arg >= 0 ifTrue: [result := objectMemory integerObjectOf: desiredEdenBytes. desiredEdenBytes := arg. self initPrimCall]]. [47] -> [(self isCog and: [arg between: 0 and: self maxCogCodeSize]) ifTrue: [result := objectMemory integerObjectOf: self getDesiredCogCodeSize. self setDesiredCogCodeSize: arg. self initPrimCall]]. [48] -> [arg >= 0 ifTrue: [| oldPrimitiveDoMixedArithmetic | oldPrimitiveDoMixedArithmetic := primitiveDoMixedArithmetic. + result := self getImageHeaderFlagsParameter. - result := self getImageHeaderFlagsParameterObject. self initPrimCall. "i.e. setImageHeaderFlags: can fail" self setImageHeaderFlags: arg. (primFailCode = 0 and: [oldPrimitiveDoMixedArithmetic ~= primitiveDoMixedArithmetic]) ifTrue: [self flushMethodCache. self flushMethodsWithMachineCodePrimitivesAndContinueAnswering: result "NOT REACHED (in CoInterpreter)"]]]. [49] -> [(arg between: 0 and: 65535) ifTrue: [result := objectMemory integerObjectOf: self ioGetMaxExtSemTableSize. self initPrimCall. "i.e. ioSetMaxExtSemTableSize: is allowed to fail" self setMaxExtSemSizeTo: arg]]. [55] -> [objectMemory hasSpurMemoryManagerAPI ifTrue: [result := objectMemory floatObjectOf: objectMemory getHeapGrowthToSizeGCRatio. primFailCode := objectMemory setHeapGrowthToSizeGCRatio: (self noInlineLoadFloatOrIntFrom: argOop)]]. [67] -> [(arg >= 0 and: [objectMemory hasSpurMemoryManagerAPI]) ifTrue: [result := self positiveMachineIntegerFor: objectMemory maxOldSpaceSize. primFailCode := objectMemory setMaxOldSpaceSize: arg]]. [68] -> [result := objectMemory floatObjectOf: stackPages statAverageLivePagesWhenMapping. self initPrimCall. "i.e. statAverageLivePagesWhenMapping: is allowed to fail" stackPages statAverageLivePagesWhenMapping: (self noInlineLoadFloatOrIntFrom: argOop)]. [69] -> [arg >= 0 ifTrue: [result := objectMemory integerObjectOf: stackPages statMaxPageCountWhenMapping. stackPages statMaxPageCountWhenMapping: arg. self initPrimCall]]. [74] -> [(arg >= 0 and: [objectMemory hasSpurMemoryManagerAPI]) ifTrue: [result := objectMemory integerObjectOf: objectMemory statMaxAllocSegmentTime + 500 // 1000. stackPages statMaxAllocSegmentTime: arg. "usually 0" self initPrimCall]]. [75] -> [| mustFlush | result := objectMemory booleanObjectOf: self primitiveDoMixedArithmetic. self initPrimCall. mustFlush := primitiveDoMixedArithmetic ~= arg. primitiveDoMixedArithmetic := arg. mustFlush ifTrue: [self flushMethodCache. self flushMethodsWithMachineCodePrimitivesAndContinueAnswering: result "NOT REACHED (in CoInterpreter)"]] } otherwise: []. self successful ifTrue: [self methodReturnValue: result] "return old value" ifFalse: [self primitiveFailFor: PrimErrInappropriate] "attempting to write a read-only or non-existent parameter"! From noreply at github.com Mon Oct 19 00:47:54 2020 From: noreply at github.com (Eliot Miranda) Date: Sun, 18 Oct 2020 17:47:54 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] da7954: CogVM source as per VMMaker.oscog-eem.2849 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: da7954d2e48d1471401ad85865b5f9a4af95cd12 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/da7954d2e48d1471401ad85865b5f9a4af95cd12 Author: Eliot Miranda Date: 2020-10-18 (Sun, 18 Oct 2020) Changed paths: M nsspur64src/vm/cogit.h M nsspur64src/vm/cointerp.c M nsspur64src/vm/cointerp.h M nsspur64src/vm/gcc3x-cointerp.c M nsspursrc/vm/cogit.h M nsspursrc/vm/cointerp.c M nsspursrc/vm/cointerp.h M nsspursrc/vm/gcc3x-cointerp.c M nsspurstack64src/vm/gcc3x-interp.c M nsspurstack64src/vm/interp.c M nsspurstacksrc/vm/gcc3x-interp.c M nsspurstacksrc/vm/interp.c M spur64src/vm/cogit.h M spur64src/vm/cointerp.c M spur64src/vm/cointerp.h M spur64src/vm/cointerpmt.c M spur64src/vm/cointerpmt.h M spur64src/vm/gcc3x-cointerp.c M spur64src/vm/gcc3x-cointerpmt.c M spurlowcode64src/vm/cogit.h M spurlowcode64src/vm/cointerp.c M spurlowcode64src/vm/cointerp.h M spurlowcode64src/vm/gcc3x-cointerp.c M spurlowcodesrc/vm/cogit.h M spurlowcodesrc/vm/cointerp.c M spurlowcodesrc/vm/cointerp.h M spurlowcodesrc/vm/gcc3x-cointerp.c M spurlowcodestack64src/vm/gcc3x-interp.c M spurlowcodestack64src/vm/interp.c M spurlowcodestacksrc/vm/gcc3x-interp.c M spurlowcodestacksrc/vm/interp.c M spursista64src/vm/cogit.h M spursista64src/vm/cointerp.c M spursista64src/vm/cointerp.h M spursista64src/vm/gcc3x-cointerp.c M spursistasrc/vm/cogit.h M spursistasrc/vm/cointerp.c M spursistasrc/vm/cointerp.h M spursistasrc/vm/gcc3x-cointerp.c M spursrc/vm/cogit.h M spursrc/vm/cointerp.c M spursrc/vm/cointerp.h M spursrc/vm/cointerpmt.c M spursrc/vm/cointerpmt.h M spursrc/vm/gcc3x-cointerp.c M spursrc/vm/gcc3x-cointerpmt.c M spurstack64src/vm/gcc3x-interp.c M spurstack64src/vm/interp.c M spurstack64src/vm/validImage.c M spurstacksrc/vm/gcc3x-interp.c M spurstacksrc/vm/interp.c M spurstacksrc/vm/validImage.c M src/vm/cogit.h M src/vm/cointerp.c M src/vm/cointerp.h M src/vm/cointerpmt.c M src/vm/cointerpmt.h M src/vm/gcc3x-cointerp.c M src/vm/gcc3x-cointerpmt.c M stacksrc/vm/gcc3x-interp.c M stacksrc/vm/interp.c Log Message: ----------- CogVM source as per VMMaker.oscog-eem.2849 Fix an awful regression introduced in VMMaker.oscog-eem.2837. Have the setFullScreen fag also set the flag that is stored in the image header, hence having the image start up as it was saved. And have the flags not recognised by a specific VM still get recorded in imageHeaderFlags, so set parameters will get set in the image header. From no-reply at appveyor.com Mon Oct 19 00:47:56 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 00:47:56 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2254 Message-ID: <20201019004756.1.E8BBD354B119BDDF@appveyor.com> An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 00:52:11 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 00:52:11 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2255 Message-ID: <20201019005211.1.9D18D0AAD09E5F82@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 00:59:47 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 00:59:47 +0000 Subject: [Vm-dev] Failed: OpenSmalltalk/opensmalltalk-vm#2253 (Cog - da7954d) In-Reply-To: Message-ID: <5f8ce502ab52a_13ff0fe0d490c79157@travis-tasks-7f9854676b-qqbsx.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2253 Status: Failed Duration: 11 mins and 25 secs Commit: da7954d (Cog) Author: Eliot Miranda Message: CogVM source as per VMMaker.oscog-eem.2849 Fix an awful regression introduced in VMMaker.oscog-eem.2837. Have the setFullScreen fag also set the flag that is stored in the image header, hence having the image start up as it was saved. And have the flags not recognised by a specific VM still get recorded in imageHeaderFlags, so set parameters will get set in the image header. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/fae0d31cd523...da7954d2e48d View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736922314?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From jecel at merlintec.com Mon Oct 19 01:04:31 2020 From: jecel at merlintec.com (Jecel Assumpcao Jr) Date: Sun, 18 Oct 2020 22:04:31 -0300 Subject: [Vm-dev] processor emulation Message-ID: <20201019011906.50B27540C45@proxy.email-ssl.com.br> I just found out about this project: https://github.com/guillep/pharo-unicorn It seems to offer similar functionality as Bochs but can simulate other processors such as ARM or MIPS. Could this be an alternative for Cog? -- Jecel From notifications at github.com Mon Oct 19 01:20:28 2020 From: notifications at github.com (Eliot Miranda) Date: Sun, 18 Oct 2020 18:20:28 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Added epoll support for aio.c on unix (#528) In-Reply-To: References: Message-ID: Wow Levente, thank you!!!! _,,,^..^,,,_ (phone) > On Oct 18, 2020, at 4:59 PM, smalltalking wrote: > >  > When HAVE_CONFIG_H and HAVE_EPOLL is true (the former is pretty much always > true), the select-based aio implementation is replaced with an epoll-based one. > The epoll variant has a few advantages: > > it is free of the lost readSemaphore signals bug (see the comments of > Socket's various #waitFor* methods which wait on readSemaphore). > idle CPU usage is down from ~10% to ~2% > faster Socket operations > Known issue: > > when the VM quits, an error message appears from aioDisable() because > the file descriptor about to be removed from the epoll set has already > been closed, therefore it's not in the set. It can be worked around > by supressing error messages when aioDisable() is called by aioFini() > You can view, comment on, or merge this pull request online at: > > https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528 > > Commit Summary > > Added epoll support for aio.c on unix > File Changes > > M platforms/unix/vm/aio.c (356) > Patch Links: > > https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528.patch > https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528.diff > — > You are receiving this because you are subscribed to this thread. > Reply to this email directly, view it on GitHub, or unsubscribe. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528#issuecomment-711458845 -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Mon Oct 19 01:23:05 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun, 18 Oct 2020 18:23:05 -0700 Subject: [Vm-dev] processor emulation In-Reply-To: <20201019011906.50B27540C45@proxy.email-ssl.com.br> References: <20201019011906.50B27540C45@proxy.email-ssl.com.br> Message-ID: On Sun, Oct 18, 2020 at 6:19 PM Jecel Assumpcao Jr wrote: > > I just found out about this project: > > https://github.com/guillep/pharo-unicorn > > It seems to offer similar functionality as Bochs but can simulate other > processors such as ARM or MIPS. Could this be an alternative for Cog? > This looks much more like Pharo trying to strike out on its own. > > -- Jecel > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 01:56:29 2020 From: notifications at github.com (Eliot Miranda) Date: Sun, 18 Oct 2020 18:56:29 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Added epoll support for aio.c on unix (#528) In-Reply-To: References: Message-ID: @eliotmiranda approved this pull request. This is fabulous and long desired. While the builds are failing they're doing so because of an hack for image file access in sq.h that has to go. So I'm going to approve and move the file access macro crap to a set of platform-specific files included by the interpreter. i.e. we're going to break things until we fix them. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528#pullrequestreview-511367695 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 01:56:44 2020 From: noreply at github.com (Eliot Miranda) Date: Sun, 18 Oct 2020 18:56:44 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 171c23: Added epoll support for aio.c on unix Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 171c235451dd16fe6bb29329c3562b2c741f4b1d https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/171c235451dd16fe6bb29329c3562b2c741f4b1d Author: Levente Uzonyi Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/unix/vm/aio.c Log Message: ----------- Added epoll support for aio.c on unix When HAVE_CONFIG_H and HAVE_EPOLL is true (the former is pretty much always true), the select-based aio implementation is replaced with an epoll-based one. The epoll variant has a few advantages: - it is free of the lost readSemaphore signals bug (see the comments of Socket's various #waitFor* methods which wait on readSemaphore). - idle CPU usage is down from ~10% to ~2% - faster Socket operations Known issue: - when the VM quits, an error message appears from aioDisable() because the file descriptor about to be removed from the epoll set has already been closed, therefore it's not in the set. It can be worked around by supressing error messages when aioDisable() is called by aioFini() Commit: 5fea0e35d24cbda5d31e3b0faaf2c6223c030a26 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/5fea0e35d24cbda5d31e3b0faaf2c6223c030a26 Author: Eliot Miranda Date: 2020-10-18 (Sun, 18 Oct 2020) Changed paths: M platforms/unix/vm/aio.c Log Message: ----------- Merge pull request #528 from smalltalking/Cog Added epoll support for aio.c on unix Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/da7954d2e48d...5fea0e35d24c From notifications at github.com Mon Oct 19 01:56:45 2020 From: notifications at github.com (Eliot Miranda) Date: Sun, 18 Oct 2020 18:56:45 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Added epoll support for aio.c on unix (#528) In-Reply-To: References: Message-ID: Merged #528 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528#event-3890983009 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 02:01:22 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 02:01:22 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2256 Message-ID: <20201019020122.1.A07E22F6AE2A8E7C@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 02:09:34 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 02:09:34 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2254 (Cog - 5fea0e3) In-Reply-To: Message-ID: <5f8cf55e7f877_13fec72bb2ff8107085@travis-tasks-7f9854676b-fqcqc.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2254 Status: Still Failing Duration: 12 mins and 18 secs Commit: 5fea0e3 (Cog) Author: Eliot Miranda Message: Merge pull request #528 from smalltalking/Cog Added epoll support for aio.c on unix View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/da7954d2e48d...5fea0e35d24c View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736931279?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From jecel at merlintec.com Mon Oct 19 02:09:46 2020 From: jecel at merlintec.com (Jecel Assumpcao Jr) Date: Sun, 18 Oct 2020 23:09:46 -0300 Subject: [Vm-dev] processor emulation In-Reply-To: References: <20201019011906.50B27540C45@proxy.email-ssl.com.br> Message-ID: <20201019020953.DE7248C0186@proxy.email-ssl.com.br> Eliot, > This looks much more like Pharo trying to strike out on its own. I was talking more about the Unicorn project itself, which borrows code from Qemu but as a usable library for just the CPU. I noticed Pharo in the list of languages with Unicorn bindings and found the link with an example of what it would look like in Smalltalk. The issue is that now we have 3 very different solutions for x86, ARM and MIPS. So I was wondering if a single solution wouldn't be better? -- Jecel From ron at usmedrec.com Mon Oct 19 02:43:14 2020 From: ron at usmedrec.com (Ron Teitelbaum) Date: Sun, 18 Oct 2020 22:43:14 -0400 Subject: [Vm-dev] processor emulation In-Reply-To: <20201019020953.DE7248C0186@proxy.email-ssl.com.br> References: <20201019011906.50B27540C45@proxy.email-ssl.com.br> <20201019020953.DE7248C0186@proxy.email-ssl.com.br> Message-ID: GPL All the best, Ron On Sun, Oct 18, 2020 at 10:09 PM Jecel Assumpcao Jr wrote: > > Eliot, > > > This looks much more like Pharo trying to strike out on its own. > > I was talking more about the Unicorn project itself, which borrows code > from Qemu but as a usable library for just the CPU. I noticed Pharo in > the list of languages with Unicorn bindings and found the link with an > example of what it would look like in Smalltalk. > > The issue is that now we have 3 very different solutions for x86, ARM > and MIPS. So I was wondering if a single solution wouldn't be better? > > -- Jecel > -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Mon Oct 19 03:49:01 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun, 18 Oct 2020 20:49:01 -0700 Subject: [Vm-dev] processor emulation In-Reply-To: <20201019020953.DE7248C0186@proxy.email-ssl.com.br> References: <20201019020953.DE7248C0186@proxy.email-ssl.com.br> Message-ID: Hi Jecel, > On Oct 18, 2020, at 7:10 PM, Jecel Assumpcao Jr wrote: > >  > Eliot, > >> This looks much more like Pharo trying to strike out on its own. > > I was talking more about the Unicorn project itself, which borrows code > from Qemu but as a usable library for just the CPU. I noticed Pharo in > the list of languages with Unicorn bindings and found the link with an > example of what it would look like in Smalltalk. > > The issue is that now we have 3 very different solutions for x86, ARM > and MIPS. So I was wondering if a single solution wouldn't be better? Well given that two of the solutions work fine and that Boris Shingarov is investigating using the Gem5 simulators, trying to unify has no point. It’s just work. But if it excites you, go for it. I don’t have spare cycles :-) > > -- Jecel From jecel at merlintec.com Mon Oct 19 04:29:03 2020 From: jecel at merlintec.com (Jecel Assumpcao Jr) Date: Mon, 19 Oct 2020 01:29:03 -0300 Subject: [Vm-dev] processor emulation In-Reply-To: References: <20201019020953.DE7248C0186@proxy.email-ssl.com.br> Message-ID: <20201019042907.99CB91B00924@proxy.email-ssl.com.br> Eliot > Well given that two of the solutions work fine and > that Boris Shingarov is investigating using the Gem5 > simulators, trying to unify has no point. Gem5 would indeed be a better solution given that we don't need real time emulation for debugging the compilers. I had forgotten about that project in this context. > It?s just work. But if it excites you, go for it. I don?t > have spare cycles :-) I am going in a slightly different direction. -- Jecel From noreply at github.com Mon Oct 19 05:02:55 2020 From: noreply at github.com (Eliot Miranda) Date: Sun, 18 Oct 2020 22:02:55 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 68a156: Image read/write. Refactor the implementation, eli... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 68a156fbe33a0792cd18ceffddb63baf01933c4a https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/68a156fbe33a0792cd18ceffddb63baf01933c4a Author: Eliot Miranda Date: 2020-10-18 (Sun, 18 Oct 2020) Changed paths: M platforms/Cross/vm/sq.h A platforms/Cross/vm/sqImageFileAccessViaStdio.h A platforms/iOS/vm/OSX/sqImageFileAccess.h M platforms/iOS/vm/OSX/sqPlatformSpecific.h A platforms/unix/vm/sqImageFileAccess.h A platforms/win32/vm/sqImageFileAccess.h M platforms/win32/vm/sqPlatformSpecific.h Log Message: ----------- Image read/write. Refactor the implementation, eliminating the default macros in sq.h, and taking definitions out to various sqImageFileAccess.h files, leaving sqImageFileAccessViaStdio.h as a fall back. On unix/macos, implement the API above the open/read/write/lseek/close system calls. From no-reply at appveyor.com Mon Oct 19 05:06:57 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 05:06:57 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2257 Message-ID: <20201019050657.1.7177EFA99D975F6B@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 05:14:55 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 05:14:55 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2255 (Cog - 68a156f) In-Reply-To: Message-ID: <5f8d20d331dea_13fbe4f9ae80c6729@travis-tasks-75f9f6c7c5-qd7gb.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2255 Status: Still Failing Duration: 11 mins and 30 secs Commit: 68a156f (Cog) Author: Eliot Miranda Message: Image read/write. Refactor the implementation, eliminating the default macros in sq.h, and taking definitions out to various sqImageFileAccess.h files, leaving sqImageFileAccessViaStdio.h as a fall back. On unix/macos, implement the API above the open/read/write/lseek/close system calls. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/5fea0e35d24c...68a156fbe33a View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736956063?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 05:20:58 2020 From: noreply at github.com (Eliot Miranda) Date: Sun, 18 Oct 2020 22:20:58 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 180764: SOme way through the image file i/o refactoring fo... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 1807647250bdf8e30521040286bdfd456a5f0593 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/1807647250bdf8e30521040286bdfd456a5f0593 Author: Eliot Miranda Date: 2020-10-18 (Sun, 18 Oct 2020) Changed paths: M platforms/win32/plugins/FilePlugin/sqWin32FilePrims.c M platforms/win32/vm/sqImageFileAccess.h M platforms/win32/vm/sqPlatformSpecific.h Log Message: ----------- SOme way through the image file i/o refactoring for win32. Committing partial work in case one of the Potsdam folks wants to have a go. From no-reply at appveyor.com Mon Oct 19 05:24:18 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 05:24:18 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2258 Message-ID: <20201019052418.1.85B08180924ED5B9@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 05:32:26 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 05:32:26 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2256 (Cog - 1807647) In-Reply-To: Message-ID: <5f8d24ea3e36d_13fe5cebbb2c038464@travis-tasks-75f9f6c7c5-jsdxd.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2256 Status: Still Failing Duration: 10 mins and 56 secs Commit: 1807647 (Cog) Author: Eliot Miranda Message: SOme way through the image file i/o refactoring for win32. Committing partial work in case one of the Potsdam folks wants to have a go. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/68a156fbe33a...1807647250bd View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/736960053?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 08:34:16 2020 From: notifications at github.com (dcstes) Date: Mon, 19 Oct 2020 01:34:16 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add -DAIO_DEBUG to mvm files for SunOS (#527) In-Reply-To: References: Message-ID: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Hi, Any news on this pull request please ? The patch adds -DAIO_DEBUG to the SunOS mvm scripts. It should be safe as this only impacts the build.sunos* directories. Regards, David Stes -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAEBCAAGBQJfjU6IAAoJEAwpOKXMq1MaUG8IAJFr0tNM2XahTPIjG5k450VU 9wZzjO48UBfQJWPmSYyyn9XbguQulLjt8iOvU1RKeAVn5JtyFcpGeUJ7molihb5f Z8Vck5wL4Vq46r9E+v/0YCp413LLg4MdE6j1O41buPZkrQeVsAqNqseHe/LG9ss0 LjIKKP69PqWCshDOw2+5kUk3/j385jhEUGTxvcqdi4+NKIWtbdR5NSFB8O13l7ck 8+zIZhPd58sDLnzZYJXyiFCFLX6lmCG4YizosSQvriPvmHHKLPCJGFJWpQBxcQcF S/z4YV4skOcOxBsTLLm/Tr3KewzVyUM7b2kiF18AGmsKdaqBz0xNmLk9O7kNXyI= =ezU7 -----END PGP SIGNATURE----- -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/527#issuecomment-711847606 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 13:47:19 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 06:47:19 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 3e69f5: SunOS change: change /usr/bin/gmake to gmake in mvm Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 3e69f58d53f53462de08533ce0489658242045e6 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/3e69f58d53f53462de08533ce0489658242045e6 Author: stes Date: 2020-10-12 (Mon, 12 Oct 2020) Changed paths: M build.sunos32x86/squeak.cog.spur/build/mvm M build.sunos32x86/squeak.stack.spur/build/mvm M build.sunos64x64/squeak.cog.spur/build/mvm M build.sunos64x64/squeak.stack.spur/build/mvm Log Message: ----------- SunOS change: change /usr/bin/gmake to gmake in mvm Commit: f32ae53b30646499f88af790df57d46affa44d44 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f32ae53b30646499f88af790df57d46affa44d44 Author: stes Date: 2020-10-12 (Mon, 12 Oct 2020) Changed paths: M build.sunos32x86/squeak.cog.spur/build/mvm M build.sunos32x86/squeak.stack.spur/build/mvm M build.sunos64x64/squeak.cog.spur/build/mvm M build.sunos64x64/squeak.stack.spur/build/mvm Log Message: ----------- SunOS change: add -DAIO_DEBUG to mvm files Commit: 00070a8776c57c7bc69aa7a9cdce43785842d093 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/00070a8776c57c7bc69aa7a9cdce43785842d093 Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M build.sunos32x86/squeak.cog.spur/build/mvm M build.sunos32x86/squeak.stack.spur/build/mvm M build.sunos64x64/squeak.cog.spur/build/mvm M build.sunos64x64/squeak.stack.spur/build/mvm Log Message: ----------- Merge pull request #527 from dcstes/sunosaiodebug Add -DAIO_DEBUG to mvm files for SunOS Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/1807647250bd...00070a8776c5 From notifications at github.com Mon Oct 19 13:47:20 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 06:47:20 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Add -DAIO_DEBUG to mvm files for SunOS (#527) In-Reply-To: References: Message-ID: Merged #527 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/527#event-3893524244 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 13:51:08 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 13:51:08 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2259 Message-ID: <20201019135108.1.B88D8F80EEAC1B0D@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 13:59:35 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 13:59:35 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2257 (Cog - 00070a8) In-Reply-To: Message-ID: <5f8d9bc76ed55_13fd5c09aa4b817507a@travis-tasks-865556f6c6-tzzxf.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2257 Status: Still Failing Duration: 11 mins and 30 secs Commit: 00070a8 (Cog) Author: Eliot Miranda Message: Merge pull request #527 from dcstes/sunosaiodebug Add -DAIO_DEBUG to mvm files for SunOS View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/1807647250bd...00070a8776c5 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737074914?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 17:07:27 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 10:07:27 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] d89b4a: Win32 file access: Make WIN32_FILE_SUPPORT the imp... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: d89b4a6d8c8c26dc712d5ec325417bd78d2458e2 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/d89b4a6d8c8c26dc712d5ec325417bd78d2458e2 Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M build.win32x86/common/Makefile.msvc.flags M build.win32x86/common/Makefile.msvc.tools M build.win32x86/common/Makefile.plugin M build.win32x86/common/Makefile.tools M build.win64x64/common/Makefile.msvc.tools M build.win64x64/common/Makefile.plugin M build.win64x64/common/Makefile.tools M platforms/minheadless/windows/sqPlatformSpecific-Win32.h M platforms/win32/plugins/FilePlugin/sqWin32FilePrims.c M platforms/win32/vm/sqImageFileAccess.h M platforms/win32/vm/sqPlatformSpecific.h M platforms/win32/vm/sqWin32.h A scripts/bothmodified A scripts/cpmodified M scripts/gitrevert M scripts/modified A scripts/new M scripts/untracked Log Message: ----------- Win32 file access: Make WIN32_FILE_SUPPORT the implicit default. Move the define of NO_STD_FILE_SUPPORT into platforms/win32/vm/sqPlatformSpecific.h. Define PATH_MAX so the file plugin can compile. Fix a few scripts so that e.g. scripts/modified works after modified files are staged. Add some of the scripts I've had laying sbout for a while. From no-reply at appveyor.com Mon Oct 19 17:11:06 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 17:11:06 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2260 Message-ID: <20201019171106.1.CD8B2BBE2EB1DA03@appveyor.com> An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Mon Oct 19 17:17:12 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon, 19 Oct 2020 10:17:12 -0700 Subject: [Vm-dev] it's amazing to me... Message-ID: to be able to evaluate ByteArray new: 8 * 1024 * 1024 * 1024 and all it takes is a few seconds. No drama. Now to see if I can save and restore an 8Gb image with the new non-stdio unix file support. _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 17:25:49 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 17:25:49 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2258 (Cog - d89b4a6) In-Reply-To: Message-ID: <5f8dcc1d7628_13fdc269d40d012575c@travis-tasks-68c946b868-nnvlx.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2258 Status: Still Failing Duration: 16 mins and 59 secs Commit: d89b4a6 (Cog) Author: Eliot Miranda Message: Win32 file access: Make WIN32_FILE_SUPPORT the implicit default. Move the define of NO_STD_FILE_SUPPORT into platforms/win32/vm/sqPlatformSpecific.h. Define PATH_MAX so the file plugin can compile. Fix a few scripts so that e.g. scripts/modified works after modified files are staged. Add some of the scripts I've had laying sbout for a while. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/00070a8776c5...d89b4a6d8c8c View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737144705?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Mon Oct 19 17:28:34 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Mon, 19 Oct 2020 17:28:34 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2850.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2850.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2850 Author: eem Time: 19 October 2020, 10:28:25.094321 am UUID: 4d7fc8a4-2c7d-4bad-8aeb-5f8c5766e12a Ancestors: VMMaker.oscog-eem.2849 Have the interpreters include sqImageFileAccess.h directly so that sq.h doesn't have to, and hence the entire VM isn't recompiled whenever sqImageFileAccess.h does. Fix some C compiler warnings around invalidCompactClassError:. =============== Diff against VMMaker.oscog-eem.2849 =============== Item was changed: ----- Method: CoInterpreter>>interpret (in category 'interpreter shell') ----- interpret "This is the main interpreter loop. In a pure interpreter it loops forever, fetching and executing bytecodes. With the Cogit JIT executing code as well, the interpreter is reentered from machine code whenever the machine code wants to interpret a method instead of executing its machine code. Entry into the interpreter is done via a ''jump call'' in machine code that uses CFramePointer and CStackPointer to find the base of the C stack (set in CoInterpreter>> enterSmalltalkExecutiveImplementation) and substitutes CReturnAddress as the return address in the code so it always appears that interpret has been called from CoInterpreter>>enterSmalltalkExecutiveImplementation, which may be important to, for example, C exception handling inside the VM. When running in the context of a browser plugin VM the interpreter must return control to the browser periodically. This should done only when the state of the currently running Squeak thread is safely stored in the object heap. Since this is the case at the moment that a check for interrupts is performed, that is when we return to the browser if it is time to do so. Interrupt checks happen quite frequently." "If stacklimit is zero then the stack pages have not been initialized." stackLimit = 0 ifTrue: [^self initStackPagesAndInterpret]. "An unchecked write is probably faster, so instead of CReturnAddress ifNil: [CReturnAddress := self cCoerceSimple: self getReturnAddress to: #usqIntptr_t] we have simply" + self assert: (CReturnAddress isNil or: [CReturnAddress = (self cCoerceSimple: self getReturnAddress to: #usqIntptr_t)]). - self assert: (CReturnAddress isNil or: [CReturnAddress = self getReturnAddress]). CReturnAddress := self cCoerceSimple: self getReturnAddress to: #usqIntptr_t. "record entry time when running as a browser plug-in" self browserPluginInitialiseIfNeeded. self internalizeIPandSP. self initExtensions. self fetchNextBytecode. [true] whileTrue: [self dispatchOn: currentBytecode in: BytecodeTable]. localIP := localIP - 1. "undo the pre-increment of IP before returning" self externalizeIPandSP. ^nil! Item was changed: ----- Method: ObjectMemory>>invalidCompactClassError: (in category 'initialization') ----- invalidCompactClassError: className + self cCode: ['\nClass %s does not have the required compact class index\n' printf: className. self exit: -1] inSmalltalk: [self error: 'Class ', className, ' does not have the required compact class index']! Item was changed: ----- Method: SpurMemoryManager>>invalidCompactClassError: (in category 'initialization') ----- invalidCompactClassError: className + self cCode: ['\nClass %s does not have the required class index\n' printf: className. self exit: -1] inSmalltalk: [self error: 'Class ', className, ' does not have the required class index']! Item was changed: ----- Method: StackInterpreter class>>declareCVarsIn: (in category 'translation') ----- declareCVarsIn: aCCodeGenerator | vmClass | self class == thisContext methodClass ifFalse: [^self]. "Don't duplicate decls in subclasses" vmClass := aCCodeGenerator vmClass. "Generate primitiveTable etc based on vmClass, not just StackInterpreter" aCCodeGenerator addHeaderFile: ' /* for printf */'; addHeaderFile: ' /* for e.g. alloca */'; addHeaderFile: ''; addHeaderFile: ' /* for wint_t */'; addHeaderFile: '"vmCallback.h"'; addHeaderFile: '"sqMemoryFence.h"'; + addHeaderFile: '"sqImageFileAccess.h"'; addHeaderFile: '"sqSetjmpShim.h"'; addHeaderFile: '"dispdbg.h"'. LowcodeVM ifTrue: [aCCodeGenerator addHeaderFile: '"sqLowcodeFFI.h"']. vmClass declareInterpreterVersionIn: aCCodeGenerator defaultName: 'Stack'. aCCodeGenerator var: #interpreterProxy type: #'struct VirtualMachine*'. aCCodeGenerator declareVar: #sendTrace type: 'volatile int'; declareVar: #byteCount type: #usqLong. "see dispdbg.h" "These need to be pointers or unsigned." self declareC: #(instructionPointer method newMethod) as: #usqInt in: aCCodeGenerator. "These are all pointers; char * because Slang has no support for C pointer arithmetic." self declareC: #(localIP localSP localFP stackPointer framePointer stackLimit breakSelector) as: #'char *' in: aCCodeGenerator. aCCodeGenerator var: #breakSelectorLength declareC: 'sqInt breakSelectorLength = MinSmallInteger'. self declareC: #(stackPage overflowedPage) as: #'StackPage *' in: aCCodeGenerator. aCCodeGenerator removeVariable: 'stackPages'. "this is an implicit receiver in the translated code." "This defines bytecodeSetSelector as 0 if MULTIPLEBYTECODESETS is not defined, for the benefit of the interpreter on slow machines." aCCodeGenerator addConstantForBinding: (self bindingOf: #MULTIPLEBYTECODESETS). MULTIPLEBYTECODESETS == false ifTrue: [aCCodeGenerator removeVariable: 'bytecodeSetSelector']. BytecodeSetHasExtensions == false ifTrue: [aCCodeGenerator removeVariable: 'extA'; removeVariable: 'extB']. aCCodeGenerator var: #methodCache declareC: 'sqIntptr_t methodCache[MethodCacheSize + 1 /* ', (MethodCacheSize + 1) printString, ' */]'. NewspeakVM ifTrue: [aCCodeGenerator var: #nsMethodCache declareC: 'sqIntptr_t nsMethodCache[NSMethodCacheSize + 1 /* ', (NSMethodCacheSize + 1) printString, ' */]'] ifFalse: [aCCodeGenerator removeVariable: #nsMethodCache; removeVariable: 'localAbsentReceiver'; removeVariable: 'localAbsentReceiverOrZero']. AtCacheTotalSize isInteger ifTrue: [aCCodeGenerator var: #atCache declareC: 'sqInt atCache[AtCacheTotalSize + 1 /* ', (AtCacheTotalSize + 1) printString, ' */]']. aCCodeGenerator var: #primitiveTable declareC: 'void (*primitiveTable[MaxPrimitiveIndex + 2 /* ', (MaxPrimitiveIndex + 2) printString, ' */])(void) = ', vmClass primitiveTableString. vmClass primitiveTable do: [:symbolOrNot| (symbolOrNot isSymbol and: [symbolOrNot ~~ #primitiveFail]) ifTrue: [(aCCodeGenerator methodNamed: symbolOrNot) ifNotNil: [:tMethod| tMethod returnType: #void]]]. vmClass objectMemoryClass hasSpurMemoryManagerAPI ifTrue: [aCCodeGenerator var: #primitiveAccessorDepthTable type: 'signed char' sizeString: 'MaxPrimitiveIndex + 2 /* ', (MaxPrimitiveIndex + 2) printString, ' */' array: vmClass primitiveAccessorDepthTable] ifFalse: [aCCodeGenerator removeVariable: #primitiveAccessorDepthTable]. aCCodeGenerator var: #displayBits type: #'void *'. self declareC: #(displayWidth displayHeight displayDepth) as: #int in: aCCodeGenerator. aCCodeGenerator var: #primitiveFunctionPointer declareC: 'void (*primitiveFunctionPointer)()'; var: #externalPrimitiveTable declareC: 'void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* ', (MaxExternalPrimitiveTableSize + 1) printString, ' */])(void)'; var: #interruptCheckChain declareC: 'void (*interruptCheckChain)(void) = 0'; var: #showSurfaceFn declareC: 'int (*showSurfaceFn)(sqIntptr_t, int, int, int, int)'; var: #jmpBuf declareC: 'jmp_buf jmpBuf[MaxJumpBuf + 1 /* ', (MaxJumpBuf + 1) printString, ' */]'; var: #suspendedCallbacks declareC: 'usqInt suspendedCallbacks[MaxJumpBuf + 1 /* ', (MaxJumpBuf + 1) printString, ' */]'; var: #suspendedMethods declareC: 'usqInt suspendedMethods[MaxJumpBuf + 1 /* ', (MaxJumpBuf + 1) printString, ' */]'. self declareCAsUSqLong: #(nextPollUsecs nextWakeupUsecs longRunningPrimitiveGCUsecs longRunningPrimitiveStartUsecs longRunningPrimitiveStopUsecs "these are high-frequency enough that they're overflowing quite quickly on modern hardware" statProcessSwitch statIOProcessEvents statForceInterruptCheck statCheckForEvents statStackOverflow statStackPageDivorce statIdleUsecs) in: aCCodeGenerator. aCCodeGenerator var: #nextProfileTick type: #sqLong. aCCodeGenerator var: #reenterInterpreter type: 'jmp_buf'. LowcodeVM ifTrue: [aCCodeGenerator var: #lowcodeCalloutState type: #'sqLowcodeCalloutState*'. self declareC: #(nativeSP nativeStackPointer shadowCallStackPointer) as: #'char *' in: aCCodeGenerator] ifFalse: [#(lowcodeCalloutState nativeSP nativeStackPointer shadowCallStackPointer) do: [:var| aCCodeGenerator removeVariable: var]]. aCCodeGenerator var: #primitiveDoMixedArithmetic declareC: 'char primitiveDoMixedArithmetic = 1'.! From noreply at github.com Mon Oct 19 17:53:07 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 10:53:07 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 1a7312: CogVM source as per VMMaker.oscog-eem.2850 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 1a7312f18af327d214347ec87dca86d223269880 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/1a7312f18af327d214347ec87dca86d223269880 Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M nsspur64src/vm/cointerp.c M nsspur64src/vm/cointerp.h M nsspur64src/vm/gcc3x-cointerp.c M nsspursrc/vm/cointerp.c M nsspursrc/vm/cointerp.h M nsspursrc/vm/gcc3x-cointerp.c M nsspurstack64src/vm/gcc3x-interp.c M nsspurstack64src/vm/interp.c M nsspurstacksrc/vm/gcc3x-interp.c M nsspurstacksrc/vm/interp.c M platforms/Cross/vm/sq.h M platforms/Mac OS/vm/sqMacMain.c M platforms/iOS/vm/Common/Classes/sqSqueakMainApplication+imageReadWrite.m M platforms/unix/vm/sqImageFileAccess.h M platforms/unix/vm/sqUnixMain.c M platforms/win32/vm/sqWin32Main.c M spur64src/vm/cointerp.c M spur64src/vm/cointerp.h M spur64src/vm/cointerpmt.c M spur64src/vm/cointerpmt.h M spur64src/vm/gcc3x-cointerp.c M spur64src/vm/gcc3x-cointerpmt.c M spurlowcode64src/vm/cointerp.c M spurlowcode64src/vm/cointerp.h M spurlowcode64src/vm/gcc3x-cointerp.c M spurlowcodesrc/vm/cointerp.c M spurlowcodesrc/vm/cointerp.h M spurlowcodesrc/vm/gcc3x-cointerp.c M spurlowcodestack64src/vm/gcc3x-interp.c M spurlowcodestack64src/vm/interp.c M spurlowcodestacksrc/vm/gcc3x-interp.c M spurlowcodestacksrc/vm/interp.c M spursista64src/vm/cointerp.c M spursista64src/vm/cointerp.h M spursista64src/vm/gcc3x-cointerp.c M spursistasrc/vm/cointerp.c M spursistasrc/vm/cointerp.h M spursistasrc/vm/gcc3x-cointerp.c M spursrc/vm/cointerp.c M spursrc/vm/cointerp.h M spursrc/vm/cointerpmt.c M spursrc/vm/cointerpmt.h M spursrc/vm/gcc3x-cointerp.c M spursrc/vm/gcc3x-cointerpmt.c M spurstack64src/vm/gcc3x-interp.c M spurstack64src/vm/interp.c M spurstack64src/vm/validImage.c M spurstacksrc/vm/gcc3x-interp.c M spurstacksrc/vm/interp.c M spurstacksrc/vm/validImage.c M src/vm/cointerp.c M src/vm/cointerp.h M src/vm/cointerpmt.c M src/vm/cointerpmt.h M src/vm/gcc3x-cointerp.c M src/vm/gcc3x-cointerpmt.c M stacksrc/vm/gcc3x-interp.c M stacksrc/vm/interp.c Log Message: ----------- CogVM source as per VMMaker.oscog-eem.2850 Author: eem Have the interpreters include sqImageFileAccess.h directly so that sq.h doesn't have to, and hence the entire VM isn't recompiled whenever sqImageFileAccess.h does. Fix some C compiler warnings around invalidCompactClassError:. From no-reply at appveyor.com Mon Oct 19 17:57:46 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 17:57:46 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2261 Message-ID: <20201019175746.1.D861B8241FF7F1E8@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 18:01:27 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 11:01:27 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] a82e81: And rescue a straggler. Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: a82e81aa57d979a4fbd6906592583d8616bb4bbb https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/a82e81aa57d979a4fbd6906592583d8616bb4bbb Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/iOS/vm/Common/sqMacV2Memory.c Log Message: ----------- And rescue a straggler. From no-reply at appveyor.com Mon Oct 19 18:05:49 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 18:05:49 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2262 Message-ID: <20201019180549.1.0353B7318EE377AB@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 18:08:50 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 18:08:50 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2259 (Cog - 1a7312f) In-Reply-To: Message-ID: <5f8dd6324f2f9_13fdc269d40d015157a@travis-tasks-68c946b868-nnvlx.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2259 Status: Still Failing Duration: 14 mins and 42 secs Commit: 1a7312f (Cog) Author: Eliot Miranda Message: CogVM source as per VMMaker.oscog-eem.2850 Author: eem Have the interpreters include sqImageFileAccess.h directly so that sq.h doesn't have to, and hence the entire VM isn't recompiled whenever sqImageFileAccess.h does. Fix some C compiler warnings around invalidCompactClassError:. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/d89b4a6d8c8c...1a7312f18af3 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737157422?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 18:15:38 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 11:15:38 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] c6a51e: FIx a slip in the change over from the old win32 t... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: c6a51e1e4a85b5ae0b67d2d376a641890f262e56 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/c6a51e1e4a85b5ae0b67d2d376a641890f262e56 Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/win32/vm/sqWin32Heartbeat.c Log Message: ----------- FIx a slip in the change over from the old win32 time interface, which is for the moment still used by the cygwin/mingw build (this needs to be fixed). From builds at travis-ci.org Mon Oct 19 18:19:13 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 18:19:13 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2260 (Cog - a82e81a) In-Reply-To: Message-ID: <5f8dd8a123205_13fc2a7e915fc15554a@travis-tasks-68c946b868-rfskv.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2260 Status: Still Failing Duration: 16 mins and 30 secs Commit: a82e81a (Cog) Author: Eliot Miranda Message: And rescue a straggler. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/1a7312f18af3...a82e81aa57d9 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737160180?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 18:28:24 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 18:28:24 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2263 Message-ID: <20201019182824.1.8B51BE46445F1111@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 18:30:38 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 18:30:38 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2261 (Cog - c6a51e1) In-Reply-To: Message-ID: <5f8ddb4de4269_13fc2a7ecf1b8166911@travis-tasks-68c946b868-rfskv.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2261 Status: Still Failing Duration: 13 mins and 37 secs Commit: c6a51e1 (Cog) Author: Eliot Miranda Message: FIx a slip in the change over from the old win32 time interface, which is for the moment still used by the cygwin/mingw build (this needs to be fixed). View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/a82e81aa57d9...c6a51e1e4a85 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737163520?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From lewis at mail.msen.com Mon Oct 19 19:14:01 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Mon, 19 Oct 2020 15:14:01 -0400 Subject: [Vm-dev] it's amazing to me... In-Reply-To: References: Message-ID: <20201019191401.GA75105@shell.msen.com> On Mon, Oct 19, 2020 at 10:17:12AM -0700, Eliot Miranda wrote: > > to be able to evaluate > ByteArray new: 8 * 1024 * 1024 * 1024 > and all it takes is a few seconds. No drama. > > Now to see if I can save and restore an 8Gb image with the new non-stdio > unix file support. I might have missed something, but does this mean that you have implemented file I/O at the file descriptor level as opposed to the FILE* level for Unix? I have always wondered which approach would give the best real-world performance, and my guess was that the approach that Andreas used for the Windows VM (HANDLE aka file descriptor level) is probably better overall. Dave From eliot.miranda at gmail.com Mon Oct 19 19:26:00 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon, 19 Oct 2020 12:26:00 -0700 Subject: [Vm-dev] it's amazing to me... In-Reply-To: <20201019191401.GA75105@shell.msen.com> References: <20201019191401.GA75105@shell.msen.com> Message-ID: Hi Dave, On Mon, Oct 19, 2020 at 12:14 PM David T. Lewis wrote: > > On Mon, Oct 19, 2020 at 10:17:12AM -0700, Eliot Miranda wrote: > > > > to be able to evaluate > > ByteArray new: 8 * 1024 * 1024 * 1024 > > and all it takes is a few seconds. No drama. > > > > Now to see if I can save and restore an 8Gb image with the new non-stdio > > unix file support. > > I might have missed something, but does this mean that you have implemented > file I/O at the file descriptor level as opposed to the FILE* level for > Unix? Only for image read/write, not for general file i/o. Though that shouldn't be difficult and I may get to soon. But I take Tim's suggestion of grouping the file pointer and the read/write data in one as a good one, and so would like to use pread/pwrite which provide this functionality. > I have always wondered which approach would give the best real-world > performance, and my guess was that the approach that Andreas used for the > Windows VM (HANDLE aka file descriptor level) is probably better overall. > Yes, it appears to be faster. The only complication is having to chunk reads/writes (as happens on Win32 for the same reason) because read/write don't like > 2Gb-1 (the max positive signed 32-bit value). > Dave > _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 20:31:00 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:31:00 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 9cc4a5: Removes support for NO_VIRTUAL_MEMORY on win32 pla... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 9cc4a51b217c752814e5d69ac6a51673760b3bb5 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/9cc4a51b217c752814e5d69ac6a51673760b3bb5 Author: Marcel Taeumel Date: 2020-05-17 (Sun, 17 May 2020) Changed paths: M platforms/win32/vm/sqWin32.h M platforms/win32/vm/sqWin32Alloc.c M platforms/win32/vm/sqWin32Alloc.h M platforms/win32/vm/sqWin32Main.c Log Message: ----------- Removes support for NO_VIRTUAL_MEMORY on win32 platform Commit: 93e1582ff3573d67390b7b7e35f30725049ec88e https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/93e1582ff3573d67390b7b7e35f30725049ec88e Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/win32/vm/sqWin32.h M platforms/win32/vm/sqWin32Alloc.c M platforms/win32/vm/sqWin32Alloc.h M platforms/win32/vm/sqWin32Main.c Log Message: ----------- Merge pull request #504 from marceltaeumel/marceltaeumel/patch-4 Removes support for NO_VIRTUAL_MEMORY on win32 platform Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/c6a51e1e4a85...93e1582ff357 From notifications at github.com Mon Oct 19 20:30:59 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:30:59 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Removes support for NO_VIRTUAL_MEMORY on win32 platform (#504) In-Reply-To: References: Message-ID: Merged #504 into Cog. -- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/504#event-3895395344 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 20:32:08 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:32:08 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Customization for Pharo & About Dialog (#524) In-Reply-To: References: Message-ID: @eliotmiranda approved this pull request. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/524#pullrequestreview-512136241 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 20:32:14 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:32:14 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Customization for Pharo & About Dialog (#524) In-Reply-To: References: Message-ID: Closed #524. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/524#event-3895399893 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 20:33:58 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:33:58 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Customization for Pharo & About Dialog (#524) In-Reply-To: References: Message-ID: Merged #524 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/524#event-3895406213 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 20:34:03 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:34:03 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] c0897d: Adding a custom Menu for Pharo VMs Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: c0897d84743f64caa98d17dc22999ef1d566358d https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/c0897d84743f64caa98d17dc22999ef1d566358d Author: Pablo Tesone Date: 2019-03-29 (Fri, 29 Mar 2019) Changed paths: M build.macos32x86/common/Makefile.app M build.macos32x86/pharo.cog.spur.lowcode/Makefile M build.macos32x86/pharo.cog.spur.minheadless/Makefile M build.macos32x86/pharo.cog.spur/Makefile M build.macos32x86/pharo.cog.spur/plugins.ext M build.macos32x86/pharo.cog.v3/Makefile M build.macos32x86/pharo.sista.spur/Makefile M build.macos32x86/pharo.stack.spur.lowcode/Makefile M build.macos32x86/pharo.stack.spur/Makefile M build.macos64x64/common/Makefile.app M build.macos64x64/pharo.cog.spur.lowcode/Makefile M build.macos64x64/pharo.cog.spur/Makefile M build.macos64x64/pharo.sista.spur/Makefile M build.macos64x64/pharo.stack.spur.lowcode/Makefile M build.macos64x64/pharo.stack.spur/Makefile A platforms/iOS/vm/English.lproj/Pharo-MainMenu-opengl.xib A platforms/iOS/vm/English.lproj/Pharo-MainMenu.xib Log Message: ----------- Adding a custom Menu for Pharo VMs Commit: f908305a5b1cf938efcfd2e162b3eefde6574608 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f908305a5b1cf938efcfd2e162b3eefde6574608 Author: Pablo Tesone Date: 2019-03-29 (Fri, 29 Mar 2019) Changed paths: M platforms/iOS/vm/OSX/Pharo-Info.plist M platforms/iOS/vm/OSX/SqueakOSXApplication.m Log Message: ----------- Adding a optional URL for the help, only fr Pharo Commit: fa1d55e98cc0f146e3f0769b95873ff22f205eb1 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/fa1d55e98cc0f146e3f0769b95873ff22f205eb1 Author: Pablo Tesone Date: 2019-03-29 (Fri, 29 Mar 2019) Changed paths: M platforms/iOS/vm/OSX/SqueakOSXApplication.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication.h M platforms/iOS/vm/OSX/sqSqueakOSXApplication.m Log Message: ----------- Handling correctly the events of the about window Commit: b1c5be068429dd6840602464afe7b71537f4fcea https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/b1c5be068429dd6840602464afe7b71537f4fcea Author: Pablo Tesone Date: 2019-03-29 (Fri, 29 Mar 2019) Changed paths: M platforms/iOS/vm/OSX/sqSqueakOSXApplication.h Log Message: ----------- Making the about window property as weak. Commit: 49e997fb57866b046fffe699aef236df77385480 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/49e997fb57866b046fffe699aef236df77385480 Author: Pablo Tesone Date: 2019-04-01 (Mon, 01 Apr 2019) Changed paths: M build.macos32x86/pharo.cog.spur/plugins.ext Log Message: ----------- Reverting a change I needed to compile in my machine Commit: c30c66231a0796a3a028284f051071cf9914c403 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/c30c66231a0796a3a028284f051071cf9914c403 Author: Christophe Demarey Date: 2020-09-11 (Fri, 11 Sep 2020) Changed paths: M build.macos32x86/common/Makefile.app M build.macos32x86/pharo.cog.spur.lowcode/Makefile M build.macos32x86/pharo.cog.spur.minheadless/Makefile M build.macos32x86/pharo.cog.spur/Makefile M build.macos32x86/pharo.cog.v3/Makefile M build.macos32x86/pharo.sista.spur/Makefile M build.macos32x86/pharo.stack.spur.lowcode/Makefile M build.macos32x86/pharo.stack.spur/Makefile M build.macos64x64/common/Makefile.app M build.macos64x64/pharo.cog.spur.lowcode/Makefile M build.macos64x64/pharo.cog.spur/Makefile M build.macos64x64/pharo.sista.spur/Makefile M build.macos64x64/pharo.stack.spur.lowcode/Makefile M build.macos64x64/pharo.stack.spur/Makefile R platforms/iOS/vm/English.lproj/MainMenu-cg.xib R platforms/iOS/vm/English.lproj/MainMenu-opengl.xib R platforms/iOS/vm/English.lproj/MainMenu.xib A platforms/iOS/vm/English.lproj/Newspeak-MainMenu-cg.xib A platforms/iOS/vm/English.lproj/Newspeak-MainMenu-opengl.xib A platforms/iOS/vm/English.lproj/Newspeak-MainMenu.xib A platforms/iOS/vm/English.lproj/Squeak-MainMenu-cg.xib A platforms/iOS/vm/English.lproj/Squeak-MainMenu-opengl.xib A platforms/iOS/vm/English.lproj/Squeak-MainMenu.xib Log Message: ----------- Use $(SYSTEM)-MainMenu.xib to determine which xib file to use Commit: 75b9999dad53f7754506372a77970d79674692e8 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/75b9999dad53f7754506372a77970d79674692e8 Author: Christophe Demarey Date: 2020-09-25 (Fri, 25 Sep 2020) Changed paths: M .appveyor.yml A .editorconfig M .git_filters/RevDateURL.clean M .git_filters/RevDateURL.smudge M .gitattributes M .gitignore M .travis.yml M CMakeLists.txt M build.linux32ARMv6/HowToBuild M build.linux32ARMv6/newspeak.cog.spur/build.assert/mvm M build.linux32ARMv6/newspeak.cog.spur/build.debug/mvm M build.linux32ARMv6/newspeak.cog.spur/build/mvm M build.linux32ARMv6/newspeak.cog.spur/plugins.int M build.linux32ARMv6/newspeak.stack.spur/build.assert/mvm M build.linux32ARMv6/newspeak.stack.spur/build.debug/mvm M build.linux32ARMv6/newspeak.stack.spur/build/mvm M build.linux32ARMv6/newspeak.stack.spur/plugins.int M build.linux32ARMv6/pharo.cog.spur/build.assert/mvm M build.linux32ARMv6/pharo.cog.spur/build.debug/mvm M build.linux32ARMv6/pharo.cog.spur/build/mvm M build.linux32ARMv6/pharo.cog.spur/plugins.ext M build.linux32ARMv6/pharo.cog.spur/plugins.int M build.linux32ARMv6/squeak.cog.spur/build.assert/mvm M build.linux32ARMv6/squeak.cog.spur/build.debug/mvm M build.linux32ARMv6/squeak.cog.spur/build/mvm M build.linux32ARMv6/squeak.cog.spur/plugins.ext M build.linux32ARMv6/squeak.cog.spur/plugins.int M build.linux32ARMv6/squeak.stack.spur/build.assert/mvm M build.linux32ARMv6/squeak.stack.spur/build.debug/mvm M build.linux32ARMv6/squeak.stack.spur/build/mvm M build.linux32ARMv6/squeak.stack.spur/plugins.ext M build.linux32ARMv6/squeak.stack.spur/plugins.int M build.linux32ARMv6/squeak.stack.v3/build.assert/mvm M build.linux32ARMv6/squeak.stack.v3/build.debug/mvm M build.linux32ARMv6/squeak.stack.v3/build/mvm M build.linux32ARMv6/squeak.stack.v3/plugins.ext M build.linux32ARMv6/squeak.stack.v3/plugins.int M build.linux32ARMv6/third-party/Makefile.libgit2 M build.linux32ARMv7/newspeak.cog.spur/build.assert/mvm M build.linux32ARMv7/newspeak.cog.spur/build.debug/mvm M build.linux32ARMv7/newspeak.cog.spur/build/mvm M build.linux32ARMv7/newspeak.stack.spur/build.assert/mvm M build.linux32ARMv7/newspeak.stack.spur/build.debug/mvm M build.linux32ARMv7/newspeak.stack.spur/build/mvm M build.linux32x86/gdbarm32/conf.COG M build.linux32x86/gdbarm32/makeem M build.linux32x86/newspeak.cog.spur/build.assert.itimerheartbeat/mvm M build.linux32x86/newspeak.cog.spur/build.assert/mvm M build.linux32x86/newspeak.cog.spur/build.debug.itimerheartbeat/mvm M build.linux32x86/newspeak.cog.spur/build.debug/mvm M build.linux32x86/newspeak.cog.spur/build.itimerheartbeat/mvm M build.linux32x86/newspeak.cog.spur/build/mvm M build.linux32x86/newspeak.cog.spur/plugins.int M build.linux32x86/newspeak.sista.spur/plugins.int M build.linux32x86/newspeak.stack.spur/build.assert/mvm M build.linux32x86/newspeak.stack.spur/build.debug/mvm M build.linux32x86/newspeak.stack.spur/build/mvm M build.linux32x86/newspeak.stack.spur/plugins.int M build.linux32x86/nsnac.cog.spur/build.assert.itimerheartbeat/mvm M build.linux32x86/nsnac.cog.spur/build.assert/mvm M build.linux32x86/nsnac.cog.spur/build.debug.itimerheartbeat/mvm M build.linux32x86/nsnac.cog.spur/build.debug/mvm M build.linux32x86/nsnac.cog.spur/build.itimerheartbeat/mvm M build.linux32x86/nsnac.cog.spur/build/mvm M build.linux32x86/nsnac.cog.spur/plugins.int M build.linux32x86/pharo.cog.spur.lowcode/build.assert.itimerheartbeat/mvm M build.linux32x86/pharo.cog.spur.lowcode/build.assert/mvm M build.linux32x86/pharo.cog.spur.lowcode/build.debug.itimerheartbeat/mvm M build.linux32x86/pharo.cog.spur.lowcode/build.debug/mvm M build.linux32x86/pharo.cog.spur.lowcode/build.itimerheartbeat/mvm M build.linux32x86/pharo.cog.spur.lowcode/build/mvm M build.linux32x86/pharo.cog.spur.lowcode/plugins.ext M build.linux32x86/pharo.cog.spur.lowcode/plugins.int M build.linux32x86/pharo.cog.spur.minheadless/build.assert.itimerheartbeat/mvm M build.linux32x86/pharo.cog.spur.minheadless/build.assert/mvm M build.linux32x86/pharo.cog.spur.minheadless/build.debug.itimerheartbeat/mvm M build.linux32x86/pharo.cog.spur.minheadless/build.itimerheartbeat/mvm M build.linux32x86/pharo.cog.spur.minheadless/build/mvm M build.linux32x86/pharo.cog.spur/build.assert.itimerheartbeat/mvm M build.linux32x86/pharo.cog.spur/build.assert/mvm M build.linux32x86/pharo.cog.spur/build.debug.itimerheartbeat/mvm M build.linux32x86/pharo.cog.spur/build.debug/mvm M build.linux32x86/pharo.cog.spur/build.itimerheartbeat/mvm M build.linux32x86/pharo.cog.spur/build/mvm M build.linux32x86/pharo.cog.spur/plugins.ext M build.linux32x86/pharo.cog.spur/plugins.int M build.linux32x86/pharo.sista.spur/build.assert.itimerheartbeat/mvm M build.linux32x86/pharo.sista.spur/build.assert/mvm M build.linux32x86/pharo.sista.spur/build.debug.itimerheartbeat/mvm M build.linux32x86/pharo.sista.spur/build.debug/mvm M build.linux32x86/pharo.sista.spur/build.itimerheartbeat/mvm M build.linux32x86/pharo.sista.spur/build/mvm M build.linux32x86/pharo.sista.spur/plugins.ext M build.linux32x86/pharo.sista.spur/plugins.int M build.linux32x86/pharo.stack.spur.lowcode/build.assert.itimerheartbeat/mvm M build.linux32x86/pharo.stack.spur.lowcode/build.assert/mvm M build.linux32x86/pharo.stack.spur.lowcode/build.debug.itimerheartbeat/mvm M build.linux32x86/pharo.stack.spur.lowcode/build.debug/mvm M build.linux32x86/pharo.stack.spur.lowcode/build.itimerheartbeat/mvm M build.linux32x86/pharo.stack.spur.lowcode/build/mvm M build.linux32x86/pharo.stack.spur.lowcode/plugins.ext M build.linux32x86/pharo.stack.spur.lowcode/plugins.int R build.linux32x86/squeak.cog.spur.immutability/build.assert/mvm R build.linux32x86/squeak.cog.spur.immutability/build.debug/mvm R build.linux32x86/squeak.cog.spur.immutability/build/mvm R build.linux32x86/squeak.cog.spur.immutability/makeallclean R build.linux32x86/squeak.cog.spur.immutability/makealldirty R build.linux32x86/squeak.cog.spur.immutability/plugins.ext R build.linux32x86/squeak.cog.spur.immutability/plugins.int M build.linux32x86/squeak.cog.spur/build.assert.itimerheartbeat/mvm M build.linux32x86/squeak.cog.spur/build.assert/mvm M build.linux32x86/squeak.cog.spur/build.debug.itimerheartbeat/mvm M build.linux32x86/squeak.cog.spur/build.debug/mvm M build.linux32x86/squeak.cog.spur/build.itimerheartbeat/mvm M build.linux32x86/squeak.cog.spur/build/mvm M build.linux32x86/squeak.cog.spur/plugins.ext M build.linux32x86/squeak.cog.spur/plugins.int M build.linux32x86/squeak.cog.v3/build.assert.itimerheartbeat/mvm M build.linux32x86/squeak.cog.v3/build.assert/mvm M build.linux32x86/squeak.cog.v3/build.debug.itimerheartbeat/mvm M build.linux32x86/squeak.cog.v3/build.debug/mvm M build.linux32x86/squeak.cog.v3/build.itimerheartbeat/mvm M build.linux32x86/squeak.cog.v3/build.multithreaded.assert/mvm M build.linux32x86/squeak.cog.v3/build.multithreaded.debug/mvm M build.linux32x86/squeak.cog.v3/build.multithreaded/mvm M build.linux32x86/squeak.cog.v3/build/mvm M build.linux32x86/squeak.cog.v3/plugins.ext M build.linux32x86/squeak.cog.v3/plugins.int M build.linux32x86/squeak.sista.spur/build.assert.itimerheartbeat/mvm M build.linux32x86/squeak.sista.spur/build.assert/mvm M build.linux32x86/squeak.sista.spur/build.debug.itimerheartbeat/mvm M build.linux32x86/squeak.sista.spur/build.debug/mvm M build.linux32x86/squeak.sista.spur/build.itimerheartbeat/mvm M build.linux32x86/squeak.sista.spur/build/mvm M build.linux32x86/squeak.sista.spur/plugins.ext M build.linux32x86/squeak.sista.spur/plugins.int M build.linux32x86/squeak.stack.spur/build.assert/mvm M build.linux32x86/squeak.stack.spur/build.debug/mvm M build.linux32x86/squeak.stack.spur/build/mvm M build.linux32x86/squeak.stack.spur/plugins.ext M build.linux32x86/squeak.stack.spur/plugins.int M build.linux32x86/squeak.stack.v3/build.assert/mvm M build.linux32x86/squeak.stack.v3/build.debug/mvm M build.linux32x86/squeak.stack.v3/build/mvm M build.linux32x86/squeak.stack.v3/plugins.ext M build.linux32x86/squeak.stack.v3/plugins.int M build.linux32x86/third-party/Makefile.libgit2 A build.linux64ARMv8/HowToBuild A build.linux64ARMv8/makeall A build.linux64ARMv8/makeallclean A build.linux64ARMv8/makeallmakefiles A build.linux64ARMv8/makeallsqueak R build.linux64ARMv8/pharo.cog.spur/apt-get-libs.sh R build.linux64ARMv8/pharo.cog.spur/build/mvm R build.linux64ARMv8/pharo.cog.spur/plugins.ext R build.linux64ARMv8/pharo.cog.spur/plugins.ext.all R build.linux64ARMv8/pharo.cog.spur/plugins.int M build.linux64ARMv8/pharo.stack.spur/build.debug/mvm M build.linux64ARMv8/pharo.stack.spur/build/mvm M build.linux64ARMv8/pharo.stack.spur/plugins.ext M build.linux64ARMv8/pharo.stack.spur/plugins.int A build.linux64ARMv8/squeak.cog.spur/build.assert/mvm A build.linux64ARMv8/squeak.cog.spur/build.debug/mvm A build.linux64ARMv8/squeak.cog.spur/build/mvm A build.linux64ARMv8/squeak.cog.spur/makeallclean A build.linux64ARMv8/squeak.cog.spur/makealldirty A build.linux64ARMv8/squeak.cog.spur/plugins.ext A build.linux64ARMv8/squeak.cog.spur/plugins.int M build.linux64ARMv8/squeak.stack.spur/build.assert/mvm M build.linux64ARMv8/squeak.stack.spur/build.debug/mvm M build.linux64ARMv8/squeak.stack.spur/build/mvm M build.linux64ARMv8/squeak.stack.spur/plugins.ext M build.linux64ARMv8/squeak.stack.spur/plugins.int M build.linux64ARMv8/third-party/Makefile.libgit2 M build.linux64x64/gdbarm32/conf.COG M build.linux64x64/gdbarm32/makeem A build.linux64x64/gdbarm64/conf.COG A build.linux64x64/gdbarm64/makeem M build.linux64x64/makeallsqueak M build.linux64x64/newspeak.cog.spur/build.assert.itimerheartbeat/mvm M build.linux64x64/newspeak.cog.spur/build.assert/mvm M build.linux64x64/newspeak.cog.spur/build.debug.itimerheartbeat/mvm M build.linux64x64/newspeak.cog.spur/build.debug/mvm M build.linux64x64/newspeak.cog.spur/build.itimerheartbeat/mvm M build.linux64x64/newspeak.cog.spur/build/mvm M build.linux64x64/newspeak.cog.spur/plugins.int M build.linux64x64/newspeak.sista.spur/plugins.int M build.linux64x64/newspeak.stack.spur/build.assert/mvm M build.linux64x64/newspeak.stack.spur/build.debug/mvm M build.linux64x64/newspeak.stack.spur/build/mvm M build.linux64x64/newspeak.stack.spur/plugins.int M build.linux64x64/nsnac.cog.spur/build.assert.itimerheartbeat/mvm M build.linux64x64/nsnac.cog.spur/build.assert/mvm M build.linux64x64/nsnac.cog.spur/build.debug.itimerheartbeat/mvm M build.linux64x64/nsnac.cog.spur/build.debug/mvm M build.linux64x64/nsnac.cog.spur/build.itimerheartbeat/mvm M build.linux64x64/nsnac.cog.spur/build/mvm M build.linux64x64/nsnac.cog.spur/plugins.int M build.linux64x64/pharo.cog.spur.minheadless/build.assert.itimerheartbeat/mvm M build.linux64x64/pharo.cog.spur.minheadless/build.assert/mvm M build.linux64x64/pharo.cog.spur.minheadless/build.debug.itimerheartbeat/mvm M build.linux64x64/pharo.cog.spur.minheadless/build.debug/mvm M build.linux64x64/pharo.cog.spur.minheadless/build.itimerheartbeat/mvm M build.linux64x64/pharo.cog.spur.minheadless/build/mvm M build.linux64x64/pharo.cog.spur/build.assert.itimerheartbeat/mvm M build.linux64x64/pharo.cog.spur/build.assert/mvm M build.linux64x64/pharo.cog.spur/build.debug.itimerheartbeat/mvm M build.linux64x64/pharo.cog.spur/build.debug/mvm M build.linux64x64/pharo.cog.spur/build.itimerheartbeat/mvm M build.linux64x64/pharo.cog.spur/build/mvm M build.linux64x64/pharo.cog.spur/plugins.ext M build.linux64x64/pharo.cog.spur/plugins.int R build.linux64x64/squeak.cog.spur.immutability/build.assert/mvm R build.linux64x64/squeak.cog.spur.immutability/build.debug/mvm R build.linux64x64/squeak.cog.spur.immutability/build/mvm R build.linux64x64/squeak.cog.spur.immutability/makeallclean R build.linux64x64/squeak.cog.spur.immutability/makealldirty R build.linux64x64/squeak.cog.spur.immutability/plugins.ext R build.linux64x64/squeak.cog.spur.immutability/plugins.int M build.linux64x64/squeak.cog.spur/build.assert.itimerheartbeat/mvm M build.linux64x64/squeak.cog.spur/build.assert/mvm M build.linux64x64/squeak.cog.spur/build.debug.itimerheartbeat/mvm M build.linux64x64/squeak.cog.spur/build.debug/mvm M build.linux64x64/squeak.cog.spur/build.itimerheartbeat/mvm M build.linux64x64/squeak.cog.spur/build/mvm M build.linux64x64/squeak.cog.spur/plugins.ext M build.linux64x64/squeak.cog.spur/plugins.int M build.linux64x64/squeak.stack.spur/build.assert/mvm M build.linux64x64/squeak.stack.spur/build.debug/mvm M build.linux64x64/squeak.stack.spur/build/mvm M build.linux64x64/squeak.stack.spur/plugins.ext M build.linux64x64/squeak.stack.spur/plugins.int M build.linux64x64/third-party/Makefile.libgit2 M build.linux64x64/third-party/Makefile.libssh2 M build.macos32x86/common/Makefile.app M build.macos32x86/common/Makefile.flags M build.macos32x86/common/Makefile.lib.extra M build.macos32x86/common/Makefile.plugin M build.macos32x86/common/Makefile.rules M build.macos32x86/common/Makefile.vm R build.macos32x86/common/mkNamedPrims.sh M build.macos32x86/gdbarm32/conf.COG M build.macos32x86/gdbarm32/makeem A build.macos32x86/gdbarm64/conf.COG A build.macos32x86/gdbarm64/makeem M build.macos32x86/makeproduct M build.macos32x86/makeproductclean M build.macos32x86/newspeak.cog.spur/plugins.int M build.macos32x86/newspeak.stack.spur/plugins.int M build.macos32x86/pharo.cog.spur.lowcode/plugins.int M build.macos32x86/pharo.cog.spur.minheadless/plugins.int M build.macos32x86/pharo.cog.spur/plugins.ext M build.macos32x86/pharo.cog.spur/plugins.int M build.macos32x86/pharo.sista.spur/plugins.int M build.macos32x86/pharo.stack.spur.lowcode/plugins.int M build.macos32x86/pharo.stack.spur/plugins.int R build.macos32x86/squeak.cog.spur+immutability/Makefile R build.macos32x86/squeak.cog.spur+immutability/mvm R build.macos32x86/squeak.cog.spur+immutability/plugins.ext R build.macos32x86/squeak.cog.spur+immutability/plugins.int M build.macos32x86/squeak.cog.spur/plugins.ext M build.macos32x86/squeak.cog.spur/plugins.int M build.macos32x86/squeak.cog.v3/plugins.ext M build.macos32x86/squeak.sista.spur/plugins.ext M build.macos32x86/squeak.sista.spur/plugins.int M build.macos32x86/squeak.stack.spur/plugins.ext M build.macos32x86/squeak.stack.spur/plugins.int M build.macos32x86/squeak.stack.v3/plugins.ext M build.macos32x86/third-party/Makefile.libgit2 A build.macos64ARMv8/HowToBuild A build.macos64ARMv8/bochsx64/conf.COG A build.macos64ARMv8/bochsx64/conf.COG.dbg A build.macos64ARMv8/bochsx64/exploration/Makefile A build.macos64ARMv8/bochsx64/makeclean A build.macos64ARMv8/bochsx64/makeem A build.macos64ARMv8/bochsx86/conf.COG A build.macos64ARMv8/bochsx86/conf.COG.dbg A build.macos64ARMv8/bochsx86/exploration/Makefile A build.macos64ARMv8/bochsx86/makeclean A build.macos64ARMv8/bochsx86/makeem A build.macos64ARMv8/common/Makefile.app A build.macos64ARMv8/common/Makefile.app.newspeak A build.macos64ARMv8/common/Makefile.app.squeak A build.macos64ARMv8/common/Makefile.flags A build.macos64ARMv8/common/Makefile.lib.extra A build.macos64ARMv8/common/Makefile.plugin A build.macos64ARMv8/common/Makefile.rules A build.macos64ARMv8/common/Makefile.sources A build.macos64ARMv8/common/Makefile.vm A build.macos64ARMv8/common/entitlements.plist A build.macos64ARMv8/gdbarm32/clean A build.macos64ARMv8/gdbarm32/conf.COG A build.macos64ARMv8/gdbarm32/makeem A build.macos64ARMv8/gdbarm64/clean A build.macos64ARMv8/gdbarm64/conf.COG A build.macos64ARMv8/gdbarm64/makeem A build.macos64ARMv8/makeall A build.macos64ARMv8/makeallinstall A build.macos64ARMv8/makeproduct A build.macos64ARMv8/makeproductinstall A build.macos64ARMv8/makesista A build.macos64ARMv8/makespur A build.macos64ARMv8/pharo.stack.spur.lowcode/Makefile A build.macos64ARMv8/pharo.stack.spur.lowcode/mvm A build.macos64ARMv8/pharo.stack.spur.lowcode/plugins.ext A build.macos64ARMv8/pharo.stack.spur.lowcode/plugins.int A build.macos64ARMv8/pharo.stack.spur/Makefile A build.macos64ARMv8/pharo.stack.spur/mvm A build.macos64ARMv8/pharo.stack.spur/plugins.ext A build.macos64ARMv8/pharo.stack.spur/plugins.int A build.macos64ARMv8/squeak.cog.spur/Makefile A build.macos64ARMv8/squeak.cog.spur/mvm A build.macos64ARMv8/squeak.cog.spur/plugins.ext A build.macos64ARMv8/squeak.cog.spur/plugins.int A build.macos64ARMv8/squeak.sista.spur/Makefile A build.macos64ARMv8/squeak.sista.spur/mvm A build.macos64ARMv8/squeak.sista.spur/plugins.ext A build.macos64ARMv8/squeak.sista.spur/plugins.int A build.macos64ARMv8/squeak.stack.spur/Makefile A build.macos64ARMv8/squeak.stack.spur/mvm A build.macos64ARMv8/squeak.stack.spur/plugins.ext A build.macos64ARMv8/squeak.stack.spur/plugins.int M build.macos64x64/bochsx64/conf.COG M build.macos64x64/bochsx64/conf.COG.dbg M build.macos64x64/bochsx86/conf.COG M build.macos64x64/bochsx86/conf.COG.dbg M build.macos64x64/common/Makefile.app M build.macos64x64/common/Makefile.app.squeak M build.macos64x64/common/Makefile.flags M build.macos64x64/common/Makefile.lib.extra M build.macos64x64/common/Makefile.plugin M build.macos64x64/common/Makefile.rules M build.macos64x64/common/Makefile.vm R build.macos64x64/common/mkNamedPrims.sh A build.macos64x64/gdbarm32/clean M build.macos64x64/gdbarm32/conf.COG M build.macos64x64/gdbarm32/makeem A build.macos64x64/gdbarm64/clean A build.macos64x64/gdbarm64/conf.COG A build.macos64x64/gdbarm64/makeem M build.macos64x64/newspeak.cog.spur/plugins.int M build.macos64x64/newspeak.stack.spur/plugins.int M build.macos64x64/pharo.cog.spur.lowcode/plugins.int M build.macos64x64/pharo.cog.spur/plugins.int M build.macos64x64/pharo.sista.spur/plugins.int M build.macos64x64/pharo.stack.spur.lowcode/plugins.int M build.macos64x64/pharo.stack.spur/Makefile M build.macos64x64/pharo.stack.spur/plugins.int R build.macos64x64/squeak.cog.spur.immutability/Makefile R build.macos64x64/squeak.cog.spur.immutability/mvm R build.macos64x64/squeak.cog.spur.immutability/plugins.ext R build.macos64x64/squeak.cog.spur.immutability/plugins.int M build.macos64x64/squeak.cog.spur/Makefile M build.macos64x64/squeak.cog.spur/plugins.ext M build.macos64x64/squeak.cog.spur/plugins.int M build.macos64x64/squeak.sista.spur/plugins.ext M build.macos64x64/squeak.sista.spur/plugins.int M build.macos64x64/squeak.stack.spur/plugins.ext M build.macos64x64/squeak.stack.spur/plugins.int M build.macos64x64/third-party/Makefile.libgit2 A build.minheadless.cmake/x64/common/Toolchain-mingw32-cygwin-clang.cmake A build.minheadless.cmake/x64/common/Toolchain-mingw32-cygwin-gcc.cmake R build.minheadless.cmake/x64/common/Toolchain-mingw32-cygwin.cmake M build.minheadless.cmake/x64/common/configure_variant.sh A build.minheadless.cmake/x64/pharo.cog.spur+sdl2/Makefile A build.minheadless.cmake/x64/pharo.cog.spur+sdl2/mvm A build.minheadless.cmake/x64/pharo.cog.spur+sdl2/mvm_configure A build.minheadless.cmake/x64/pharo.cog.spur+sdl2/mvm_configure_variant M build.minheadless.cmake/x64/pharo.cog.spur/Makefile M build.minheadless.cmake/x64/pharo.cog.spur/mvm M build.minheadless.cmake/x64/pharo.cog.spur/mvm_configure_variant M build.minheadless.cmake/x64/pharo.stack.spur/Makefile M build.minheadless.cmake/x64/pharo.stack.spur/mvm M build.minheadless.cmake/x64/pharo.stack.spur/mvm_configure_variant A build.minheadless.cmake/x64/squeak.cog.spur+sdl2/Makefile A build.minheadless.cmake/x64/squeak.cog.spur+sdl2/mvm A build.minheadless.cmake/x64/squeak.cog.spur+sdl2/mvm_configure A build.minheadless.cmake/x64/squeak.cog.spur+sdl2/mvm_configure_variant M build.minheadless.cmake/x64/squeak.cog.spur/Makefile M build.minheadless.cmake/x64/squeak.cog.spur/mvm M build.minheadless.cmake/x64/squeak.cog.spur/mvm_configure_variant M build.minheadless.cmake/x64/squeak.stack.spur/Makefile M build.minheadless.cmake/x64/squeak.stack.spur/mvm M build.minheadless.cmake/x64/squeak.stack.spur/mvm_configure_variant A build.minheadless.cmake/x86/common/Toolchain-mingw32-cygwin-clang.cmake A build.minheadless.cmake/x86/common/Toolchain-mingw32-cygwin-gcc.cmake R build.minheadless.cmake/x86/common/Toolchain-mingw32-cygwin.cmake M build.minheadless.cmake/x86/common/configure_variant.sh A build.minheadless.cmake/x86/pharo.cog.spur+sdl2/Makefile A build.minheadless.cmake/x86/pharo.cog.spur+sdl2/mvm A build.minheadless.cmake/x86/pharo.cog.spur+sdl2/mvm_configure A build.minheadless.cmake/x86/pharo.cog.spur+sdl2/mvm_configure_variant M build.minheadless.cmake/x86/pharo.cog.spur/Makefile M build.minheadless.cmake/x86/pharo.cog.spur/mvm M build.minheadless.cmake/x86/pharo.cog.spur/mvm_configure_variant M build.minheadless.cmake/x86/pharo.stack.spur/Makefile M build.minheadless.cmake/x86/pharo.stack.spur/mvm M build.minheadless.cmake/x86/pharo.stack.spur/mvm_configure_variant A build.minheadless.cmake/x86/squeak.cog.spur+sdl2/Makefile A build.minheadless.cmake/x86/squeak.cog.spur+sdl2/mvm A build.minheadless.cmake/x86/squeak.cog.spur+sdl2/mvm_configure A build.minheadless.cmake/x86/squeak.cog.spur+sdl2/mvm_configure_variant M build.minheadless.cmake/x86/squeak.cog.spur/Makefile M build.minheadless.cmake/x86/squeak.cog.spur/mvm M build.minheadless.cmake/x86/squeak.cog.spur/mvm_configure_variant M build.minheadless.cmake/x86/squeak.stack.spur/Makefile M build.minheadless.cmake/x86/squeak.stack.spur/mvm M build.minheadless.cmake/x86/squeak.stack.spur/mvm_configure_variant A build.sunos32x86/HowToBuild A build.sunos32x86/squeak.cog.spur/build/mvm A build.sunos32x86/squeak.cog.spur/plugins.ext A build.sunos32x86/squeak.cog.spur/plugins.int A build.sunos32x86/squeak.stack.spur/build/mvm A build.sunos32x86/squeak.stack.spur/plugins.ext A build.sunos32x86/squeak.stack.spur/plugins.int A build.sunos64x64/HowToBuild A build.sunos64x64/squeak.cog.spur/build/mvm A build.sunos64x64/squeak.cog.spur/plugins.ext A build.sunos64x64/squeak.cog.spur/plugins.int A build.sunos64x64/squeak.stack.spur/build/mvm A build.sunos64x64/squeak.stack.spur/plugins.ext A build.sunos64x64/squeak.stack.spur/plugins.int M build.win32x86/HowToBuild A build.win32x86/common/MAKEALL.BAT A build.win32x86/common/MAKEASSERT.BAT A build.win32x86/common/MAKEDEBUG.BAT A build.win32x86/common/MAKEFAST.BAT M build.win32x86/common/Makefile A build.win32x86/common/Makefile.msvc A build.win32x86/common/Makefile.msvc.clang.rules A build.win32x86/common/Makefile.msvc.flags A build.win32x86/common/Makefile.msvc.msvc.rules A build.win32x86/common/Makefile.msvc.plugin A build.win32x86/common/Makefile.msvc.rules A build.win32x86/common/Makefile.msvc.tools M build.win32x86/common/Makefile.plugin M build.win32x86/common/Makefile.tools A build.win32x86/common/SETPATH.BAT M build.win32x86/newspeak.cog.spur/Makefile M build.win32x86/newspeak.cog.spur/plugins.int M build.win32x86/newspeak.stack.spur/Makefile M build.win32x86/newspeak.stack.spur/plugins.int M build.win32x86/pharo.cog.spur.lowcode/mvm M build.win32x86/pharo.cog.spur.lowcode/plugins.ext M build.win32x86/pharo.cog.spur.lowcode/plugins.int M build.win32x86/pharo.cog.spur/Makefile M build.win32x86/pharo.cog.spur/plugins.ext M build.win32x86/pharo.cog.spur/plugins.int M build.win32x86/pharo.sista.spur/Makefile M build.win32x86/pharo.sista.spur/plugins.ext M build.win32x86/pharo.sista.spur/plugins.int M build.win32x86/pharo.stack.spur/Makefile M build.win32x86/pharo.stack.spur/plugins.ext M build.win32x86/pharo.stack.spur/plugins.int M build.win32x86/squeak.cog.spur.lowcode/Makefile M build.win32x86/squeak.cog.spur.lowcode/mvm M build.win32x86/squeak.cog.spur.lowcode/plugins.ext M build.win32x86/squeak.cog.spur.lowcode/plugins.int M build.win32x86/squeak.cog.spur/Makefile M build.win32x86/squeak.cog.spur/plugins.ext M build.win32x86/squeak.cog.spur/plugins.int M build.win32x86/squeak.cog.v3/Makefile M build.win32x86/squeak.cog.v3/plugins.ext M build.win32x86/squeak.cog.v3/plugins.int M build.win32x86/squeak.sista.spur/Makefile M build.win32x86/squeak.sista.spur/plugins.ext M build.win32x86/squeak.sista.spur/plugins.int M build.win32x86/squeak.stack.spur/Makefile M build.win32x86/squeak.stack.spur/plugins.ext M build.win32x86/squeak.stack.spur/plugins.int M build.win32x86/squeak.stack.v3/Makefile M build.win32x86/squeak.stack.v3/plugins.ext M build.win32x86/squeak.stack.v3/plugins.int M build.win32x86/third-party/Makefile.libgit2 M build.win32x86/third-party/Makefile.openssl M build.win64x64/HowToBuild A build.win64x64/common/MAKEALL.BAT A build.win64x64/common/MAKEASSERT.BAT A build.win64x64/common/MAKEDEBUG.BAT A build.win64x64/common/MAKEFAST.BAT M build.win64x64/common/Makefile A build.win64x64/common/Makefile.msvc A build.win64x64/common/Makefile.msvc.clang.rules A build.win64x64/common/Makefile.msvc.flags A build.win64x64/common/Makefile.msvc.plugin A build.win64x64/common/Makefile.msvc.rules A build.win64x64/common/Makefile.msvc.tools M build.win64x64/common/Makefile.plugin M build.win64x64/common/Makefile.tools A build.win64x64/common/SETPATH.BAT M build.win64x64/newspeak.cog.spur/Makefile M build.win64x64/newspeak.cog.spur/mvm M build.win64x64/newspeak.cog.spur/plugins.int M build.win64x64/newspeak.stack.spur/Makefile M build.win64x64/newspeak.stack.spur/mvm M build.win64x64/newspeak.stack.spur/plugins.int M build.win64x64/pharo.cog.spur/mvm M build.win64x64/pharo.cog.spur/plugins.ext M build.win64x64/pharo.cog.spur/plugins.int M build.win64x64/pharo.stack.spur/Makefile M build.win64x64/pharo.stack.spur/mvm M build.win64x64/pharo.stack.spur/plugins.ext M build.win64x64/pharo.stack.spur/plugins.int M build.win64x64/squeak.cog.spur/Makefile M build.win64x64/squeak.cog.spur/mvm M build.win64x64/squeak.cog.spur/plugins.ext M build.win64x64/squeak.cog.spur/plugins.int M build.win64x64/squeak.stack.spur/Makefile M build.win64x64/squeak.stack.spur/mvm M build.win64x64/squeak.stack.spur/plugins.ext M build.win64x64/squeak.stack.spur/plugins.int M build.win64x64/third-party/Makefile.openssl A cmake/Cairo.cmake A cmake/CompleteBundle.cmake.in A cmake/CreateBundle.sh.in A cmake/FT2Plugin.cmake A cmake/FixCygwinInstallPermissions.cmake.in A cmake/FixCygwinInstallPermissions.sh.in A cmake/FreeType2.cmake A cmake/LibGit2.cmake A cmake/LibPNG.cmake A cmake/LibSSH2.cmake M cmake/Mpeg3Plugin.cmake A cmake/OpenSSL.cmake A cmake/OpenSSL.mac-install.sh.in A cmake/Pixman.cmake A cmake/PkgConfig.cmake M cmake/Plugins.cmake A cmake/PluginsCommon.cmake A cmake/PluginsMacros.cmake M cmake/PluginsPharo.cmake A cmake/PluginsSqueak.cmake A cmake/SDL2.cmake A cmake/ThirdPartyDependencies.cmake A cmake/ThirdPartyDependenciesCommon.cmake A cmake/ThirdPartyDependenciesMacros.cmake A cmake/ThirdPartyDependenciesPharo.cmake A cmake/ThirdPartyDependenciesSqueak.cmake A cmake/ThirdPartyDependencyInstallScript.cmake.in A cmake/WindowsRuntimeLibraries.cmake A cmake/Zlib.cmake M deploy/filter-exec.sh M deploy/pack-vm.sh M deploy/pharo/filter-exec.sh M image/BuildPharo6VMMakerImage.st M image/BuildSqueakSpurTrunkVMMakerImage.st M image/LoadFFI.st M image/LoadReader.st M image/LoadSistaSupport.st A image/SaveAsSista.st M image/VM Simulation Workspace.text A image/buildsistareader64image.sh M image/buildspurtrunkreader64image.sh M image/envvars.sh M image/getGoodSpur64VM.sh M image/getGoodSpurVM.sh M image/getlatesttrunk64image.sh M image/getlatesttrunkimage.sh A image/updatespur64SistaV1image.sh M include/OpenSmalltalkVM.h M nsspur64src/vm/cogit.c M nsspur64src/vm/cogit.h A nsspur64src/vm/cogitARMv8.c M nsspur64src/vm/cogitX64SysV.c M nsspur64src/vm/cogitX64WIN64.c M nsspur64src/vm/cogmethod.h M nsspur64src/vm/cointerp.c M nsspur64src/vm/cointerp.h M nsspur64src/vm/gcc3x-cointerp.c M nsspur64src/vm/interp.h M nsspursrc/vm/cogit.c M nsspursrc/vm/cogit.h M nsspursrc/vm/cogitARMv5.c M nsspursrc/vm/cogitIA32.c M nsspursrc/vm/cogitMIPSEL.c M nsspursrc/vm/cogmethod.h M nsspursrc/vm/cointerp.c M nsspursrc/vm/cointerp.h M nsspursrc/vm/gcc3x-cointerp.c M nsspursrc/vm/interp.h M nsspurstack64src/vm/gcc3x-interp.c M nsspurstack64src/vm/interp.c M nsspurstack64src/vm/interp.h M nsspurstacksrc/vm/gcc3x-interp.c M nsspurstacksrc/vm/interp.c M nsspurstacksrc/vm/interp.h M platforms/Cross/plugins/BochsIA32Plugin/BochsIA32Plugin.h M platforms/Cross/plugins/BochsIA32Plugin/sqBochsIA32Plugin.cpp M platforms/Cross/plugins/BochsX64Plugin/BochsX64Plugin.h M platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp M platforms/Cross/plugins/CroquetPlugin/CroquetPlugin.h M platforms/Cross/plugins/FloatMathPlugin/FloatMathPlugin.h R platforms/Cross/plugins/FloatMathPlugin/FloatMathPlugin.st M platforms/Cross/plugins/FloatMathPlugin/acos.c M platforms/Cross/plugins/FloatMathPlugin/acosh.c M platforms/Cross/plugins/FloatMathPlugin/asin.c M platforms/Cross/plugins/FloatMathPlugin/asinh.c M platforms/Cross/plugins/FloatMathPlugin/atan.c M platforms/Cross/plugins/FloatMathPlugin/atan2.c M platforms/Cross/plugins/FloatMathPlugin/atanh.c M platforms/Cross/plugins/FloatMathPlugin/copysign.c M platforms/Cross/plugins/FloatMathPlugin/cos.c M platforms/Cross/plugins/FloatMathPlugin/cosh.c M platforms/Cross/plugins/FloatMathPlugin/exp.c M platforms/Cross/plugins/FloatMathPlugin/expm1.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/MD5 R platforms/Cross/plugins/FloatMathPlugin/fdlibm/changes R platforms/Cross/plugins/FloatMathPlugin/fdlibm/configure R platforms/Cross/plugins/FloatMathPlugin/fdlibm/configure.in R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_acos.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_acosh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_asin.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_atan2.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_atanh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_cosh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_exp.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_fmod.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_gamma.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_gamma_r.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_hypot.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_j0.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_j1.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_jn.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_lgamma.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_lgamma_r.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_log.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_log10.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_pow.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_rem_pio2.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_remainder.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_scalb.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_sinh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/e_sqrt.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/fdlibm.h R platforms/Cross/plugins/FloatMathPlugin/fdlibm/index R platforms/Cross/plugins/FloatMathPlugin/fdlibm/index.html R platforms/Cross/plugins/FloatMathPlugin/fdlibm/k_cos.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/k_rem_pio2.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/k_sin.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/k_standard.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/k_tan.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/makefile R platforms/Cross/plugins/FloatMathPlugin/fdlibm/makefile.in R platforms/Cross/plugins/FloatMathPlugin/fdlibm/readme R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_asinh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_atan.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_cbrt.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_ceil.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_copysign.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_cos.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_erf.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_expm1.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_fabs.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_finite.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_floor.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_frexp.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_ilogb.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_isnan.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_ldexp.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_lib_version.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_log1p.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_logb.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_matherr.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_modf.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_nextafter.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_rint.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_scalbn.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_signgam.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_significand.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_sin.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_tan.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/s_tanh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_acos.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_acosh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_asin.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_atan2.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_atanh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_cosh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_exp.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_fmod.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_gamma.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_gamma_r.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_hypot.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_j0.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_j1.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_jn.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_lgamma.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_lgamma_r.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_log.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_log10.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_pow.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_remainder.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_scalb.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_sinh.c R platforms/Cross/plugins/FloatMathPlugin/fdlibm/w_sqrt.c M platforms/Cross/plugins/FloatMathPlugin/finite.c M platforms/Cross/plugins/FloatMathPlugin/fmod.c M platforms/Cross/plugins/FloatMathPlugin/hypot.c M platforms/Cross/plugins/FloatMathPlugin/ieee754names.h M platforms/Cross/plugins/FloatMathPlugin/isnan.c M platforms/Cross/plugins/FloatMathPlugin/k_cos.c M platforms/Cross/plugins/FloatMathPlugin/k_rem_pio2.c M platforms/Cross/plugins/FloatMathPlugin/k_sin.c M platforms/Cross/plugins/FloatMathPlugin/k_tan.c M platforms/Cross/plugins/FloatMathPlugin/ldexp.c M platforms/Cross/plugins/FloatMathPlugin/log.c M platforms/Cross/plugins/FloatMathPlugin/log10.c M platforms/Cross/plugins/FloatMathPlugin/log1p.c M platforms/Cross/plugins/FloatMathPlugin/modf.c M platforms/Cross/plugins/FloatMathPlugin/pow.c M platforms/Cross/plugins/FloatMathPlugin/rem_pio2.c M platforms/Cross/plugins/FloatMathPlugin/rint.c M platforms/Cross/plugins/FloatMathPlugin/scalb.c M platforms/Cross/plugins/FloatMathPlugin/scalbn.c M platforms/Cross/plugins/FloatMathPlugin/sin.c M platforms/Cross/plugins/FloatMathPlugin/sinh.c M platforms/Cross/plugins/FloatMathPlugin/sqrt.c M platforms/Cross/plugins/FloatMathPlugin/tan.c M platforms/Cross/plugins/FloatMathPlugin/tanh.c M platforms/Cross/plugins/GdbARMPlugin/GdbARMPlugin.h M platforms/Cross/plugins/GdbARMPlugin/HowToBuild R platforms/Cross/plugins/GdbARMPlugin/Makefile R platforms/Cross/plugins/GdbARMPlugin/Makefile.unix R platforms/Cross/plugins/GdbARMPlugin/Makefile.win32 R platforms/Cross/plugins/GdbARMPlugin/README M platforms/Cross/plugins/GdbARMPlugin/sqGdbARMPlugin.c A platforms/Cross/plugins/GdbARMv8Plugin/GdbARMv8Plugin.h A platforms/Cross/plugins/GdbARMv8Plugin/HowToBuild A platforms/Cross/plugins/GdbARMv8Plugin/sqGdbARMv8Plugin.c M platforms/Cross/plugins/HostWindowPlugin/HostWindowPlugin.h M platforms/Cross/plugins/IA32ABI/arm32abicc.c M platforms/Cross/plugins/IA32ABI/arm64abicc.c M platforms/Cross/plugins/IA32ABI/dabusiness.h M platforms/Cross/plugins/IA32ABI/dabusinessARM.h M platforms/Cross/plugins/IA32ABI/dabusinessARM32.h M platforms/Cross/plugins/IA32ABI/dabusinessARM64.h M platforms/Cross/plugins/IA32ABI/dabusinessPostLogic.h M platforms/Cross/plugins/IA32ABI/dabusinessppc.h M platforms/Cross/plugins/IA32ABI/dabusinessppcPostLogicDouble.h M platforms/Cross/plugins/IA32ABI/dabusinessppcPostLogicFloat.h M platforms/Cross/plugins/IA32ABI/dabusinessppcPostLogicInteger.h M platforms/Cross/plugins/IA32ABI/ia32abi.h M platforms/Cross/plugins/IA32ABI/ia32abicc.c M platforms/Cross/plugins/IA32ABI/ppc32abicc.c M platforms/Cross/plugins/IA32ABI/x64sysvabicc.c M platforms/Cross/plugins/IA32ABI/x64win64abicc.c M platforms/Cross/plugins/IA32ABI/xabicc.c R platforms/Cross/plugins/JPEGReadWriter2Plugin/Error.c M platforms/Cross/plugins/JPEGReadWriter2Plugin/JPEGReadWriter2Plugin.h M platforms/Cross/plugins/JPEGReadWriter2Plugin/README.6b2 R platforms/Cross/plugins/JPEGReadWriter2Plugin/ReadMe.txt M platforms/Cross/plugins/JPEGReadWriter2Plugin/jdphuff.c M platforms/Cross/plugins/JPEGReadWriter2Plugin/jmorecfg.h M platforms/Cross/plugins/JPEGReadWriter2Plugin/sqJPEGReadWriter2Plugin.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/audio/header.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/audio/layer1.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/audio/layer3.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/audio/mpeg3audio.h M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/audio/pcm.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/bitstream.h M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/changesForSqueak.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/libmpeg3.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3atrack.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3atrack.h M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3demux.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3io.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3io.h M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3private.h M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3protos.h M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3title.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3vtrack.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3vtrack.h M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/getpicture.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/headers.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/macroblocks.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/motion.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/mpeg3video.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/mpeg3videoprotos.h M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/output.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/reconstruct.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/seek.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video/slice.h M platforms/Cross/plugins/SerialPlugin/SerialPlugin.h M platforms/Cross/plugins/SerialPlugin/sqNullSerialPort.c M platforms/Cross/plugins/Squeak3D/b3d.h M platforms/Cross/plugins/Squeak3D/b3dAlloc.c M platforms/Cross/plugins/Squeak3D/b3dDraw.c M platforms/Cross/plugins/Squeak3D/b3dInit.c M platforms/Cross/plugins/Squeak3D/b3dMain.c M platforms/Cross/plugins/SqueakFFIPrims/sqFFITestFuncs.c A platforms/Cross/third-party/fdlibm/Makefile A platforms/Cross/third-party/fdlibm/Makefile.in A platforms/Cross/third-party/fdlibm/Makefile.remote A platforms/Cross/third-party/fdlibm/README A platforms/Cross/third-party/fdlibm/README.md A platforms/Cross/third-party/fdlibm/configure A platforms/Cross/third-party/fdlibm/configure.in A platforms/Cross/third-party/fdlibm/e_acos.c A platforms/Cross/third-party/fdlibm/e_acosh.c A platforms/Cross/third-party/fdlibm/e_asin.c A platforms/Cross/third-party/fdlibm/e_atan2.c A platforms/Cross/third-party/fdlibm/e_atanh.c A platforms/Cross/third-party/fdlibm/e_cosh.c A platforms/Cross/third-party/fdlibm/e_exp.c A platforms/Cross/third-party/fdlibm/e_fmod.c A platforms/Cross/third-party/fdlibm/e_gamma.c A platforms/Cross/third-party/fdlibm/e_gamma_r.c A platforms/Cross/third-party/fdlibm/e_hypot.c A platforms/Cross/third-party/fdlibm/e_j0.c A platforms/Cross/third-party/fdlibm/e_j1.c A platforms/Cross/third-party/fdlibm/e_jn.c A platforms/Cross/third-party/fdlibm/e_lgamma.c A platforms/Cross/third-party/fdlibm/e_lgamma_r.c A platforms/Cross/third-party/fdlibm/e_log.c A platforms/Cross/third-party/fdlibm/e_log10.c A platforms/Cross/third-party/fdlibm/e_pow.c A platforms/Cross/third-party/fdlibm/e_rem_pio2.c A platforms/Cross/third-party/fdlibm/e_remainder.c A platforms/Cross/third-party/fdlibm/e_scalb.c A platforms/Cross/third-party/fdlibm/e_sinh.c A platforms/Cross/third-party/fdlibm/e_sqrt.c A platforms/Cross/third-party/fdlibm/fdlibm.h A platforms/Cross/third-party/fdlibm/generate_defines A platforms/Cross/third-party/fdlibm/k_cos.c A platforms/Cross/third-party/fdlibm/k_rem_pio2.c A platforms/Cross/third-party/fdlibm/k_sin.c A platforms/Cross/third-party/fdlibm/k_standard.c A platforms/Cross/third-party/fdlibm/k_tan.c A platforms/Cross/third-party/fdlibm/s_asinh.c A platforms/Cross/third-party/fdlibm/s_atan.c A platforms/Cross/third-party/fdlibm/s_cbrt.c A platforms/Cross/third-party/fdlibm/s_ceil.c A platforms/Cross/third-party/fdlibm/s_copysign.c A platforms/Cross/third-party/fdlibm/s_cos.c A platforms/Cross/third-party/fdlibm/s_erf.c A platforms/Cross/third-party/fdlibm/s_expm1.c A platforms/Cross/third-party/fdlibm/s_fabs.c A platforms/Cross/third-party/fdlibm/s_finite.c A platforms/Cross/third-party/fdlibm/s_floor.c A platforms/Cross/third-party/fdlibm/s_frexp.c A platforms/Cross/third-party/fdlibm/s_ilogb.c A platforms/Cross/third-party/fdlibm/s_isnan.c A platforms/Cross/third-party/fdlibm/s_ldexp.c A platforms/Cross/third-party/fdlibm/s_lib_version.c A platforms/Cross/third-party/fdlibm/s_log1p.c A platforms/Cross/third-party/fdlibm/s_logb.c A platforms/Cross/third-party/fdlibm/s_matherr.c A platforms/Cross/third-party/fdlibm/s_modf.c A platforms/Cross/third-party/fdlibm/s_nextafter.c A platforms/Cross/third-party/fdlibm/s_rint.c A platforms/Cross/third-party/fdlibm/s_scalbn.c A platforms/Cross/third-party/fdlibm/s_signgam.c A platforms/Cross/third-party/fdlibm/s_significand.c A platforms/Cross/third-party/fdlibm/s_sin.c A platforms/Cross/third-party/fdlibm/s_tan.c A platforms/Cross/third-party/fdlibm/s_tanh.c A platforms/Cross/third-party/fdlibm/w_acos.c A platforms/Cross/third-party/fdlibm/w_acosh.c A platforms/Cross/third-party/fdlibm/w_asin.c A platforms/Cross/third-party/fdlibm/w_atan2.c A platforms/Cross/third-party/fdlibm/w_atanh.c A platforms/Cross/third-party/fdlibm/w_cosh.c A platforms/Cross/third-party/fdlibm/w_exp.c A platforms/Cross/third-party/fdlibm/w_fmod.c A platforms/Cross/third-party/fdlibm/w_gamma.c A platforms/Cross/third-party/fdlibm/w_gamma_r.c A platforms/Cross/third-party/fdlibm/w_hypot.c A platforms/Cross/third-party/fdlibm/w_j0.c A platforms/Cross/third-party/fdlibm/w_j1.c A platforms/Cross/third-party/fdlibm/w_jn.c A platforms/Cross/third-party/fdlibm/w_lgamma.c A platforms/Cross/third-party/fdlibm/w_lgamma_r.c A platforms/Cross/third-party/fdlibm/w_log.c A platforms/Cross/third-party/fdlibm/w_log10.c A platforms/Cross/third-party/fdlibm/w_pow.c A platforms/Cross/third-party/fdlibm/w_remainder.c A platforms/Cross/third-party/fdlibm/w_scalb.c A platforms/Cross/third-party/fdlibm/w_sinh.c A platforms/Cross/third-party/fdlibm/w_sqrt.c A platforms/Cross/util/mkIntPluginIndices.sh A platforms/Cross/util/mkNamedPrims.sh M platforms/Cross/vm/dispdbg.h M platforms/Cross/vm/sq.h M platforms/Cross/vm/sqAssert.h M platforms/Cross/vm/sqAtomicOps.h M platforms/Cross/vm/sqCogStackAlignment.h A platforms/Cross/vm/sqMathShim.h M platforms/Cross/vm/sqMemoryAccess.h M platforms/Cross/vm/sqMemoryFence.h M platforms/Cross/vm/sqNamedPrims.c M platforms/Cross/vm/sqPath.c A platforms/Cross/vm/sqSetjmpShim.h M platforms/Cross/vm/sqTextEncoding.c M platforms/Cross/vm/sqTextEncoding.h M platforms/Cross/vm/sqTicker.c M platforms/Cross/vm/sqVirtualMachine.c M platforms/Cross/vm/sqVirtualMachine.h M platforms/Mac OS/plugins/HostWindowPlugin/sqMacHostWindow.c M platforms/Mac OS/plugins/HostWindowPlugin/sqMacHostWindow.h M platforms/Mac OS/vm/Developer/sqMacMinimal.c M platforms/Mac OS/vm/osExports.c M platforms/Mac OS/vm/sqMacMain.c M platforms/Mac OS/vm/sqMacMain.h M platforms/Mac OS/vm/sqMacMemory.c M platforms/Mac OS/vm/sqMacTime.c M platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c M platforms/Mac OS/vm/sqPlatformSpecific.h M platforms/Plan9/vm/config.h M platforms/Plan9/vm/sqPlatformSpecific.h R platforms/RiscOS/plugins/JPEGReadWriter2Plugin/stub M platforms/RiscOS/vm/sqPlatformSpecific.h M platforms/RiscOS/vm/sqRPCMain.c M platforms/iOS/plugins/B3DAcceleratorPlugin/Makefile A platforms/iOS/plugins/B3DAcceleratorPlugin32/Makefile A platforms/iOS/plugins/B3DAcceleratorPlugin32/sqMacOpenGL.h A platforms/iOS/plugins/B3DAcceleratorPlugin32/sqMacOpenGL.m A platforms/iOS/plugins/B3DAcceleratorPlugin32/zzz/sqMacOpenGL.c A platforms/iOS/plugins/B3DAcceleratorPlugin32/zzz/sqMacOpenGL.h A platforms/iOS/plugins/B3DAcceleratorPlugin32/zzz/sqMacOpenGLInfo.c A platforms/iOS/plugins/B3DAcceleratorPlugin32/zzz/sqMacUIConstants.h M platforms/iOS/plugins/BochsIA32Plugin/Makefile M platforms/iOS/plugins/BochsX64Plugin/Makefile M platforms/iOS/plugins/CameraPlugin/AVFoundationVideoGrabber.m M platforms/iOS/plugins/GdbARMPlugin/Makefile A platforms/iOS/plugins/GdbARMv8Plugin/Makefile M platforms/iOS/plugins/HostWindowPlugin/sqMacHostWindow.h M platforms/iOS/plugins/HostWindowPlugin/sqMacHostWindow.m M platforms/iOS/plugins/SoundPlugin/sqSqueakSoundCoreAudio.h M platforms/iOS/plugins/SoundPlugin/sqSqueakSoundCoreAudio.m M platforms/iOS/plugins/SoundPlugin/sqSqueakSoundCoreAudioAPI.m M platforms/iOS/vm/Common/Classes/sqMacV2Time.c M platforms/iOS/vm/Common/Classes/sqSqueakAppDelegate.h M platforms/iOS/vm/Common/Classes/sqSqueakAppDelegate.m M platforms/iOS/vm/Common/Classes/sqSqueakFileDirectoryInterface.m M platforms/iOS/vm/Common/Classes/sqSqueakMainApp.m M platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m M platforms/iOS/vm/Common/sqDummyaio.h M platforms/iOS/vm/Common/sqMacV2Memory.c M platforms/iOS/vm/English.lproj/Newspeak-MainMenu-cg.xib M platforms/iOS/vm/English.lproj/Newspeak-MainMenu-opengl.xib M platforms/iOS/vm/English.lproj/Newspeak-MainMenu.xib M platforms/iOS/vm/OSX/SqViewClut.m.inc M platforms/iOS/vm/OSX/Squeak-Info.plist M platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m M platforms/iOS/vm/OSX/config.h M platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m M platforms/iOS/vm/OSX/sqPlatformSpecific.h M platforms/iOS/vm/OSX/sqSqueakOSXApplication+attributes.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication.m M platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m M platforms/iOS/vm/OSX/sqSqueakOSXMetalView.m M platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m M platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m M platforms/iOS/vm/SqueakPureObjc_Prefix.pch M platforms/iOS/vm/iPhone/Classes/SqueakUIView.m M platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication+attributes.m M platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication.m M platforms/iOS/vm/iPhone/config.h M platforms/iOS/vm/iPhone/sqDummyaio.c M platforms/iOS/vm/iPhone/sqPlatformSpecific.h A platforms/minheadless/common/sqGnu.h M platforms/minheadless/common/sqPlatformSpecificCommon.h M platforms/minheadless/common/sqPrinting.c M platforms/minheadless/common/sqVirtualMachineInterface.c M platforms/minheadless/common/sqWindow-Dispatch.c M platforms/minheadless/common/sqaio.h M platforms/minheadless/config.h.in M platforms/minheadless/generic/sqPlatformSpecific-Generic.c A platforms/minheadless/mac/sqMain.m M platforms/minheadless/sdl2-window/sqWindow-SDL2.c A platforms/minheadless/startup.sh.in M platforms/minheadless/unix/sqPlatformSpecific-Unix.c M platforms/minheadless/unix/sqPlatformSpecific-Unix.h M platforms/minheadless/unix/sqUnixHeartbeat.c M platforms/minheadless/unix/sqUnixMemory.c M platforms/minheadless/unix/sqUnixSpurMemory.c A platforms/minheadless/windows/resources/Pharo/Pharo.exe.manifest.in A platforms/minheadless/windows/resources/Pharo/Pharo.ico A platforms/minheadless/windows/resources/Pharo/Pharo.rc.in A platforms/minheadless/windows/resources/Squeak/GreenCogSqueak.ico A platforms/minheadless/windows/resources/Squeak/Squeak.exe.manifest.in A platforms/minheadless/windows/resources/Squeak/Squeak.rc.in A platforms/minheadless/windows/resources/Squeak/squeak2.ico A platforms/minheadless/windows/resources/Squeak/squeak3.ico M platforms/minheadless/windows/sqPlatformSpecific-Win32.c M platforms/minheadless/windows/sqPlatformSpecific-Win32.h M platforms/minheadless/windows/sqWin32Alloc.c M platforms/minheadless/windows/sqWin32Directory.c M platforms/minheadless/windows/sqWin32Heartbeat.c M platforms/minheadless/windows/sqWin32Main.c M platforms/minheadless/windows/sqWin32SpurAlloc.c M platforms/minheadless/windows/sqWin32Time.c M platforms/unix/config/Makefile.in M platforms/unix/config/acinclude.m4 M platforms/unix/config/aclocal.m4 M platforms/unix/config/ax_append_flag.m4 M platforms/unix/config/ax_cflags_warn_all.m4 A platforms/unix/config/ax_compiler_vendor.m4 M platforms/unix/config/ax_have_epoll.m4 A platforms/unix/config/ax_prepend_flag.m4 M platforms/unix/config/ax_pthread.m4 M platforms/unix/config/config.guess M platforms/unix/config/config.h.in M platforms/unix/config/config.sub M platforms/unix/config/configure M platforms/unix/config/configure.ac M platforms/unix/config/ltmain.sh M platforms/unix/config/make.cfg.in M platforms/unix/config/mkmf M platforms/unix/misc/threadValidate/sqUnixHeartbeat.c M platforms/unix/plugins/B3DAcceleratorPlugin/sqUnixOpenGL.c M platforms/unix/plugins/FileCopyPlugin/sqUnixFileCopyPlugin.c M platforms/unix/plugins/GdbARMPlugin/HowToBuild M platforms/unix/plugins/GdbARMPlugin/Makefile.inc A platforms/unix/plugins/GdbARMv8Plugin/HowToBuild A platforms/unix/plugins/GdbARMv8Plugin/Makefile.inc A platforms/unix/plugins/GdbARMv8Plugin/acinclude.m4 M platforms/unix/plugins/HostWindowPlugin/sqUnixHostWindowPlugin.c R platforms/unix/plugins/MIDIPlugin/Makefile.inc M platforms/unix/plugins/MIDIPlugin/acinclude.m4 M platforms/unix/plugins/MIDIPlugin/sqUnixMIDI.c M platforms/unix/plugins/SecurityPlugin/sqUnixSecurity.c M platforms/unix/plugins/SerialPlugin/Makefile.inc M platforms/unix/plugins/SerialPlugin/sqUnixSerial.c M platforms/unix/plugins/SocketPlugin/sqUnixSocket.c M platforms/unix/plugins/SqueakSSL/acinclude.m4 M platforms/unix/plugins/SqueakSSL/openssl_overlay.h M platforms/unix/plugins/SqueakSSL/sqUnixOpenSSL.inc M platforms/unix/plugins/UUIDPlugin/acinclude.m4 M platforms/unix/plugins/UUIDPlugin/sqUnixUUID.c M platforms/unix/vm-display-Quartz/zzz/sqUnixQuartz.m M platforms/unix/vm-display-X11/acinclude.m4 M platforms/unix/vm-display-X11/sqUnixMozilla.c M platforms/unix/vm-display-X11/sqUnixX11.c M platforms/unix/vm-display-X11/sqUnixXdnd.c M platforms/unix/vm-display-fbdev/00_README.fbdev A platforms/unix/vm-display-fbdev/AlpineLinux-Notes.txt A platforms/unix/vm-display-fbdev/Armbian-Notes.txt A platforms/unix/vm-display-fbdev/Balloon.h A platforms/unix/vm-display-fbdev/sqUnixEvdevKeyMouse.c A platforms/unix/vm-display-fbdev/sqUnixEvdevKeycodeMap.c M platforms/unix/vm-display-fbdev/sqUnixFBDev.c M platforms/unix/vm-display-fbdev/sqUnixFBDevFramebuffer.c M platforms/unix/vm-display-null/sqUnixDisplayNull.c R platforms/unix/vm-sound-NAS/Makefile.inc M platforms/unix/vm-sound-NAS/acinclude.m4 M platforms/unix/vm-sound-pulse/acinclude.m4 M platforms/unix/vm-sound-pulse/sqUnixSoundPulseAudio.c A platforms/unix/vm-sound-sndio/acinclude.m4 A platforms/unix/vm-sound-sndio/sqUnixSndioSound.c M platforms/unix/vm/Makefile.in M platforms/unix/vm/SqDisplay.h M platforms/unix/vm/aio.c M platforms/unix/vm/debug.h M platforms/unix/vm/include_ucontext.h M platforms/unix/vm/osExports.c M platforms/unix/vm/sqConfig.h M platforms/unix/vm/sqPlatformSpecific.h M platforms/unix/vm/sqUnixCharConv.c M platforms/unix/vm/sqUnixEvent.c M platforms/unix/vm/sqUnixExternalPrims.c M platforms/unix/vm/sqUnixHeartbeat.c M platforms/unix/vm/sqUnixITimerHeartbeat.c M platforms/unix/vm/sqUnixITimerTickerHeartbeat.c M platforms/unix/vm/sqUnixMain.c M platforms/unix/vm/sqUnixMemory.c M platforms/unix/vm/sqUnixSpurMemory.c M platforms/unix/vm/sqaio.h A platforms/win32/.editorconfig M platforms/win32/misc/Makefile.mingw32 A platforms/win32/misc/_setjmp-x64.asm A platforms/win32/misc/_setjmp-x86.asm A platforms/win32/misc/qedit.h A platforms/win32/plugins/B3DAcceleratorPlugin/Makefile.msvc A platforms/win32/plugins/B3DAcceleratorPlugin/Makefile.plugin A platforms/win32/plugins/BitBltPlugin/Makefile.msvc R platforms/win32/plugins/CameraPlugin/Building Windows CameraPlugin.txt A platforms/win32/plugins/CameraPlugin/Building Windows CameraPlugini Using Visual Studio.txt R platforms/win32/plugins/CameraPlugin/CameraPlugin.cpp R platforms/win32/plugins/CameraPlugin/CameraPlugin.dll A platforms/win32/plugins/CameraPlugin/Makefile.msvc R platforms/win32/plugins/CameraPlugin/STRMBASE.lib M platforms/win32/plugins/CameraPlugin/winCameraOps.cpp R platforms/win32/plugins/CroquetPlugin/Makefile.msvc M platforms/win32/plugins/CroquetPlugin/sqWin32CroquetPlugin.c M platforms/win32/plugins/DropPlugin/sqWin32Drop.c M platforms/win32/plugins/FT2Plugin/ft2build.h A platforms/win32/plugins/FileAttributesPlugin/Makefile.msvc M platforms/win32/plugins/FileAttributesPlugin/faSupport.c M platforms/win32/plugins/FileAttributesPlugin/faSupport.h M platforms/win32/plugins/FilePlugin/sqWin32File.h M platforms/win32/plugins/FilePlugin/sqWin32FilePrims.c M platforms/win32/plugins/FloatMathPlugin/Makefile M platforms/win32/plugins/FloatMathPlugin/Makefile.msvc M platforms/win32/plugins/FloatMathPlugin/Makefile.plugin M platforms/win32/plugins/FloatMathPlugin/Makefile.win32 M platforms/win32/plugins/FontPlugin/sqWin32FontPlugin.c M platforms/win32/plugins/HostWindowPlugin/sqWin32HostWindowPlugin.c A platforms/win32/plugins/IA32ABI/Makefile.msvc R platforms/win32/plugins/JPEGReadWriter2Plugin/stub M platforms/win32/plugins/LocalePlugin/sqWin32Locale.c M platforms/win32/plugins/Mpeg3Plugin/Makefile.msvc A platforms/win32/plugins/SerialPlugin/Makefile.msvc M platforms/win32/plugins/SerialPlugin/sqWin32SerialPort.c M platforms/win32/plugins/SoundPlugin/sqWin32Sound.c A platforms/win32/plugins/SqueakFFIPrims/Makefile.msvc A platforms/win32/plugins/SqueakSSL/Makefile.msvc M platforms/win32/plugins/SqueakSSL/sqWin32SSL.c M platforms/win32/plugins/Win32OSProcessPlugin/Makefile.msvc R platforms/win32/release/stub R platforms/win32/third-party/dx9sdk/Include/Amvideo.h R platforms/win32/third-party/dx9sdk/Include/Bdatif.h R platforms/win32/third-party/dx9sdk/Include/DShow.h R platforms/win32/third-party/dx9sdk/Include/DShowIDL/Bdatif.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/Mpeg2Data.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/Mpeg2Structs.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/Mstvca.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/Mstvgs.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/Msvidctl.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/Segment.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/Videoacc.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/Vmrender.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/amstream.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/austream.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/axcore.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/axextend.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/bdaiface.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/control.odl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/ddstream.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/devenum.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/dmodshow.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/dshowasf.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/dvdif.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/dxtrans.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/dyngraph.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/mediaobj.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/medparam.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/mixerocx.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/mmstream.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/mstve.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/qedit.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/regbag.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/sbe.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/strmif.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/tuner.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/tvratings.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/vidcap.idl R platforms/win32/third-party/dx9sdk/Include/DShowIDL/vmr9.idl R platforms/win32/third-party/dx9sdk/Include/DxDiag.h R platforms/win32/third-party/dx9sdk/Include/Iwstdec.h R platforms/win32/third-party/dx9sdk/Include/Mpeg2Bits.h R platforms/win32/third-party/dx9sdk/Include/Mpeg2Error.h R platforms/win32/third-party/dx9sdk/Include/Mstvca.h R platforms/win32/third-party/dx9sdk/Include/Mstve.h R platforms/win32/third-party/dx9sdk/Include/Msvidctl.h R platforms/win32/third-party/dx9sdk/Include/Msvidctl.tlb R platforms/win32/third-party/dx9sdk/Include/PixPlugin.h R platforms/win32/third-party/dx9sdk/Include/Segment.h R platforms/win32/third-party/dx9sdk/Include/Tuner.tlb R platforms/win32/third-party/dx9sdk/Include/activecf.h R platforms/win32/third-party/dx9sdk/Include/amaudio.h R platforms/win32/third-party/dx9sdk/Include/amparse.h R platforms/win32/third-party/dx9sdk/Include/amstream.h R platforms/win32/third-party/dx9sdk/Include/amva.h R platforms/win32/third-party/dx9sdk/Include/atsmedia.h R platforms/win32/third-party/dx9sdk/Include/audevcod.h R platforms/win32/third-party/dx9sdk/Include/austream.h R platforms/win32/third-party/dx9sdk/Include/aviriff.h R platforms/win32/third-party/dx9sdk/Include/bdaiface.h R platforms/win32/third-party/dx9sdk/Include/bdamedia.h R platforms/win32/third-party/dx9sdk/Include/bdatypes.h R platforms/win32/third-party/dx9sdk/Include/comlite.h R platforms/win32/third-party/dx9sdk/Include/control.h R platforms/win32/third-party/dx9sdk/Include/d3d.h R platforms/win32/third-party/dx9sdk/Include/d3d8.h R platforms/win32/third-party/dx9sdk/Include/d3d8caps.h R platforms/win32/third-party/dx9sdk/Include/d3d8types.h R platforms/win32/third-party/dx9sdk/Include/d3d9.h R platforms/win32/third-party/dx9sdk/Include/d3d9caps.h R platforms/win32/third-party/dx9sdk/Include/d3d9types.h R platforms/win32/third-party/dx9sdk/Include/d3dcaps.h R platforms/win32/third-party/dx9sdk/Include/d3drm.h R platforms/win32/third-party/dx9sdk/Include/d3drmdef.h R platforms/win32/third-party/dx9sdk/Include/d3drmobj.h R platforms/win32/third-party/dx9sdk/Include/d3drmwin.h R platforms/win32/third-party/dx9sdk/Include/d3dtypes.h R platforms/win32/third-party/dx9sdk/Include/d3dvec.inl R platforms/win32/third-party/dx9sdk/Include/d3dx.h R platforms/win32/third-party/dx9sdk/Include/d3dx8.h R platforms/win32/third-party/dx9sdk/Include/d3dx8core.h R platforms/win32/third-party/dx9sdk/Include/d3dx8effect.h R platforms/win32/third-party/dx9sdk/Include/d3dx8math.h R platforms/win32/third-party/dx9sdk/Include/d3dx8math.inl R platforms/win32/third-party/dx9sdk/Include/d3dx8mesh.h R platforms/win32/third-party/dx9sdk/Include/d3dx8shape.h R platforms/win32/third-party/dx9sdk/Include/d3dx8tex.h R platforms/win32/third-party/dx9sdk/Include/d3dx9.h R platforms/win32/third-party/dx9sdk/Include/d3dx9anim.h R platforms/win32/third-party/dx9sdk/Include/d3dx9core.h R platforms/win32/third-party/dx9sdk/Include/d3dx9effect.h R platforms/win32/third-party/dx9sdk/Include/d3dx9math.h R platforms/win32/third-party/dx9sdk/Include/d3dx9math.inl R platforms/win32/third-party/dx9sdk/Include/d3dx9mesh.h R platforms/win32/third-party/dx9sdk/Include/d3dx9shader.h R platforms/win32/third-party/dx9sdk/Include/d3dx9shape.h R platforms/win32/third-party/dx9sdk/Include/d3dx9tex.h R platforms/win32/third-party/dx9sdk/Include/d3dx9xof.h R platforms/win32/third-party/dx9sdk/Include/d3dxcore.h R platforms/win32/third-party/dx9sdk/Include/d3dxerr.h R platforms/win32/third-party/dx9sdk/Include/d3dxmath.h R platforms/win32/third-party/dx9sdk/Include/d3dxmath.inl R platforms/win32/third-party/dx9sdk/Include/d3dxshapes.h R platforms/win32/third-party/dx9sdk/Include/d3dxsprite.h R platforms/win32/third-party/dx9sdk/Include/ddraw.h R platforms/win32/third-party/dx9sdk/Include/ddstream.h R platforms/win32/third-party/dx9sdk/Include/dinput.h R platforms/win32/third-party/dx9sdk/Include/dinputd.h R platforms/win32/third-party/dx9sdk/Include/dls1.h R platforms/win32/third-party/dx9sdk/Include/dls2.h R platforms/win32/third-party/dx9sdk/Include/dmdls.h R platforms/win32/third-party/dx9sdk/Include/dmerror.h R platforms/win32/third-party/dx9sdk/Include/dmksctrl.h R platforms/win32/third-party/dx9sdk/Include/dmo.h R platforms/win32/third-party/dx9sdk/Include/dmodshow.h R platforms/win32/third-party/dx9sdk/Include/dmoimpl.h R platforms/win32/third-party/dx9sdk/Include/dmoreg.h R platforms/win32/third-party/dx9sdk/Include/dmort.h R platforms/win32/third-party/dx9sdk/Include/dmplugin.h R platforms/win32/third-party/dx9sdk/Include/dmusbuff.h R platforms/win32/third-party/dx9sdk/Include/dmusicc.h R platforms/win32/third-party/dx9sdk/Include/dmusicf.h R platforms/win32/third-party/dx9sdk/Include/dmusici.h R platforms/win32/third-party/dx9sdk/Include/dmusics.h R platforms/win32/third-party/dx9sdk/Include/dpaddr.h R platforms/win32/third-party/dx9sdk/Include/dplay.h R platforms/win32/third-party/dx9sdk/Include/dplay8.h R platforms/win32/third-party/dx9sdk/Include/dplobby.h R platforms/win32/third-party/dx9sdk/Include/dplobby8.h R platforms/win32/third-party/dx9sdk/Include/dpnathlp.h R platforms/win32/third-party/dx9sdk/Include/dsconf.h R platforms/win32/third-party/dx9sdk/Include/dsetup.h R platforms/win32/third-party/dx9sdk/Include/dshowasf.h R platforms/win32/third-party/dx9sdk/Include/dsound.h R platforms/win32/third-party/dx9sdk/Include/dv.h R platforms/win32/third-party/dx9sdk/Include/dvdevcod.h R platforms/win32/third-party/dx9sdk/Include/dvdmedia.h R platforms/win32/third-party/dx9sdk/Include/dvoice.h R platforms/win32/third-party/dx9sdk/Include/dvp.h R platforms/win32/third-party/dx9sdk/Include/dx7todx8.h R platforms/win32/third-party/dx9sdk/Include/dxerr8.h R platforms/win32/third-party/dx9sdk/Include/dxerr9.h R platforms/win32/third-party/dx9sdk/Include/dxfile.h R platforms/win32/third-party/dx9sdk/Include/dxtrans.h R platforms/win32/third-party/dx9sdk/Include/dxva.h R platforms/win32/third-party/dx9sdk/Include/edevctrl.h R platforms/win32/third-party/dx9sdk/Include/edevdefs.h R platforms/win32/third-party/dx9sdk/Include/errors.h R platforms/win32/third-party/dx9sdk/Include/evcode.h R platforms/win32/third-party/dx9sdk/Include/il21dec.h R platforms/win32/third-party/dx9sdk/Include/ks.h R platforms/win32/third-party/dx9sdk/Include/ksguid.h R platforms/win32/third-party/dx9sdk/Include/ksmedia.h R platforms/win32/third-party/dx9sdk/Include/ksproxy.h R platforms/win32/third-party/dx9sdk/Include/ksuuids.h R platforms/win32/third-party/dx9sdk/Include/mediaerr.h R platforms/win32/third-party/dx9sdk/Include/mediaobj.h R platforms/win32/third-party/dx9sdk/Include/medparam.h R platforms/win32/third-party/dx9sdk/Include/mixerocx.h R platforms/win32/third-party/dx9sdk/Include/mmstream.h R platforms/win32/third-party/dx9sdk/Include/mpconfig.h R platforms/win32/third-party/dx9sdk/Include/mpeg2data.h R platforms/win32/third-party/dx9sdk/Include/mpegtype.h R platforms/win32/third-party/dx9sdk/Include/multimon.h R platforms/win32/third-party/dx9sdk/Include/playlist.h R platforms/win32/third-party/dx9sdk/Include/qedit.h R platforms/win32/third-party/dx9sdk/Include/qnetwork.h R platforms/win32/third-party/dx9sdk/Include/regbag.h R platforms/win32/third-party/dx9sdk/Include/rmxfguid.h R platforms/win32/third-party/dx9sdk/Include/rmxftmpl.h R platforms/win32/third-party/dx9sdk/Include/sbe.h R platforms/win32/third-party/dx9sdk/Include/strmif.h R platforms/win32/third-party/dx9sdk/Include/strsafe.h R platforms/win32/third-party/dx9sdk/Include/tune.h R platforms/win32/third-party/dx9sdk/Include/tuner.h R platforms/win32/third-party/dx9sdk/Include/tvratings.h R platforms/win32/third-party/dx9sdk/Include/uuids.h R platforms/win32/third-party/dx9sdk/Include/vfwmsgs.h R platforms/win32/third-party/dx9sdk/Include/vidcap.h R platforms/win32/third-party/dx9sdk/Include/videoacc.h R platforms/win32/third-party/dx9sdk/Include/vmr9.h R platforms/win32/third-party/dx9sdk/Include/vpconfig.h R platforms/win32/third-party/dx9sdk/Include/vpnotify.h R platforms/win32/third-party/dx9sdk/Include/vptype.h R platforms/win32/third-party/dx9sdk/Include/xprtdefs.h R platforms/win32/third-party/dx9sdk/Lib/DxErr8.lib R platforms/win32/third-party/dx9sdk/Lib/DxErr9.lib R platforms/win32/third-party/dx9sdk/Lib/amstrmid.lib R platforms/win32/third-party/dx9sdk/Lib/d3d8.lib R platforms/win32/third-party/dx9sdk/Lib/d3d9.lib R platforms/win32/third-party/dx9sdk/Lib/d3dx.lib R platforms/win32/third-party/dx9sdk/Lib/d3dx8.lib R platforms/win32/third-party/dx9sdk/Lib/d3dx8d.lib R platforms/win32/third-party/dx9sdk/Lib/d3dx8dt.lib R platforms/win32/third-party/dx9sdk/Lib/d3dx9.lib R platforms/win32/third-party/dx9sdk/Lib/d3dx9d.lib R platforms/win32/third-party/dx9sdk/Lib/d3dx9dt.lib R platforms/win32/third-party/dx9sdk/Lib/d3dxd.lib R platforms/win32/third-party/dx9sdk/Lib/d3dxof.lib R platforms/win32/third-party/dx9sdk/Lib/ddraw.lib R platforms/win32/third-party/dx9sdk/Lib/dinput.lib R platforms/win32/third-party/dx9sdk/Lib/dinput8.lib R platforms/win32/third-party/dx9sdk/Lib/dmoguids.lib R platforms/win32/third-party/dx9sdk/Lib/dplayx.lib R platforms/win32/third-party/dx9sdk/Lib/dsetup.lib R platforms/win32/third-party/dx9sdk/Lib/dsound.lib R platforms/win32/third-party/dx9sdk/Lib/dxguid.lib R platforms/win32/third-party/dx9sdk/Lib/dxtrans.lib R platforms/win32/third-party/dx9sdk/Lib/encapi.lib R platforms/win32/third-party/dx9sdk/Lib/ksproxy.lib R platforms/win32/third-party/dx9sdk/Lib/ksuser.lib R platforms/win32/third-party/dx9sdk/Lib/msdmo.lib R platforms/win32/third-party/dx9sdk/Lib/quartz.lib R platforms/win32/third-party/dx9sdk/Lib/strmiids.lib R platforms/win32/third-party/dx9sdk/README-TELEPLACE.txt M platforms/win32/vm/config.h M platforms/win32/vm/sqConfig.h M platforms/win32/vm/sqPlatformSpecific.h M platforms/win32/vm/sqWin32.h M platforms/win32/vm/sqWin32Alloc.c M platforms/win32/vm/sqWin32Backtrace.c M platforms/win32/vm/sqWin32DirectInput.c M platforms/win32/vm/sqWin32Directory.c M platforms/win32/vm/sqWin32DnsInfo.c M platforms/win32/vm/sqWin32Exports.c M platforms/win32/vm/sqWin32ExternalPrims.c M platforms/win32/vm/sqWin32GUID.c M platforms/win32/vm/sqWin32HandleTable.h M platforms/win32/vm/sqWin32Heartbeat.c M platforms/win32/vm/sqWin32Main.c M platforms/win32/vm/sqWin32PluginSupport.c M platforms/win32/vm/sqWin32Prefs.c M platforms/win32/vm/sqWin32Service.c M platforms/win32/vm/sqWin32SpurAlloc.c M platforms/win32/vm/sqWin32Threads.c M platforms/win32/vm/sqWin32Time.c M platforms/win32/vm/sqWin32Utils.c M platforms/win32/vm/sqWin32VMProfile.c M platforms/win32/vm/sqWin32Window.c M platforms/win32/vm/version.c R processors/ARM/TODO M processors/ARM/exploration/Makefile M processors/ARM/exploration/Makefile64 M processors/ARM/exploration/printcpuctrl.c A processors/ARM/exploration64/Makefile A processors/ARM/exploration64/Makefile64 A processors/ARM/exploration64/printcpu.c A processors/ARM/exploration64/printcpuctrl.c A processors/ARM/exploration64/printcpuvfp.c R processors/ARM/gdb-7.10/COPYING.LIB R processors/ARM/gdb-7.10/COPYING3.LIB R processors/ARM/gdb-7.10/ChangeLog R processors/ARM/gdb-7.10/MAINTAINERS R processors/ARM/gdb-7.10/Makefile.def R processors/ARM/gdb-7.10/Makefile.in R processors/ARM/gdb-7.10/Makefile.tpl R processors/ARM/gdb-7.10/README R processors/ARM/gdb-7.10/README-maintainer-mode R processors/ARM/gdb-7.10/bfd/ChangeLog R processors/ARM/gdb-7.10/bfd/ChangeLog-0001 R processors/ARM/gdb-7.10/bfd/ChangeLog-0203 R processors/ARM/gdb-7.10/bfd/ChangeLog-2004 R processors/ARM/gdb-7.10/bfd/ChangeLog-2005 R processors/ARM/gdb-7.10/bfd/ChangeLog-2006 R processors/ARM/gdb-7.10/bfd/ChangeLog-2007 R processors/ARM/gdb-7.10/bfd/ChangeLog-2008 R processors/ARM/gdb-7.10/bfd/ChangeLog-2009 R processors/ARM/gdb-7.10/bfd/ChangeLog-2010 R processors/ARM/gdb-7.10/bfd/ChangeLog-2011 R processors/ARM/gdb-7.10/bfd/ChangeLog-2012 R processors/ARM/gdb-7.10/bfd/ChangeLog-2013 R processors/ARM/gdb-7.10/bfd/ChangeLog-2014 R processors/ARM/gdb-7.10/bfd/ChangeLog-9193 R processors/ARM/gdb-7.10/bfd/ChangeLog-9495 R processors/ARM/gdb-7.10/bfd/ChangeLog-9697 R processors/ARM/gdb-7.10/bfd/ChangeLog-9899 R processors/ARM/gdb-7.10/bfd/MAINTAINERS R processors/ARM/gdb-7.10/bfd/Makefile.am R processors/ARM/gdb-7.10/bfd/Makefile.in R processors/ARM/gdb-7.10/bfd/PORTING R processors/ARM/gdb-7.10/bfd/README R processors/ARM/gdb-7.10/bfd/TODO R processors/ARM/gdb-7.10/bfd/acinclude.m4 R processors/ARM/gdb-7.10/bfd/aclocal.m4 R processors/ARM/gdb-7.10/bfd/aix386-core.c R processors/ARM/gdb-7.10/bfd/aix5ppc-core.c R processors/ARM/gdb-7.10/bfd/aout-adobe.c R processors/ARM/gdb-7.10/bfd/aout-arm.c R processors/ARM/gdb-7.10/bfd/aout-cris.c R processors/ARM/gdb-7.10/bfd/aout-ns32k.c R processors/ARM/gdb-7.10/bfd/aout-sparcle.c R processors/ARM/gdb-7.10/bfd/aout-target.h R processors/ARM/gdb-7.10/bfd/aout-tic30.c R processors/ARM/gdb-7.10/bfd/aout0.c R processors/ARM/gdb-7.10/bfd/aout32.c R processors/ARM/gdb-7.10/bfd/aout64.c R processors/ARM/gdb-7.10/bfd/aoutf1.h R processors/ARM/gdb-7.10/bfd/aoutx.h R processors/ARM/gdb-7.10/bfd/archive.c R processors/ARM/gdb-7.10/bfd/archive64.c R processors/ARM/gdb-7.10/bfd/archures.c R processors/ARM/gdb-7.10/bfd/armnetbsd.c R processors/ARM/gdb-7.10/bfd/bfd-in.h R processors/ARM/gdb-7.10/bfd/bfd-in2.h R processors/ARM/gdb-7.10/bfd/bfd.c R processors/ARM/gdb-7.10/bfd/bfd.m4 R processors/ARM/gdb-7.10/bfd/bfdio.c R processors/ARM/gdb-7.10/bfd/bfdwin.c R processors/ARM/gdb-7.10/bfd/binary.c R processors/ARM/gdb-7.10/bfd/bout.c R processors/ARM/gdb-7.10/bfd/cache.c R processors/ARM/gdb-7.10/bfd/cf-i386lynx.c R processors/ARM/gdb-7.10/bfd/cf-sparclynx.c R processors/ARM/gdb-7.10/bfd/cisco-core.c R processors/ARM/gdb-7.10/bfd/coff-alpha.c R processors/ARM/gdb-7.10/bfd/coff-apollo.c R processors/ARM/gdb-7.10/bfd/coff-arm.c R processors/ARM/gdb-7.10/bfd/coff-aux.c R processors/ARM/gdb-7.10/bfd/coff-bfd.c R processors/ARM/gdb-7.10/bfd/coff-bfd.h R processors/ARM/gdb-7.10/bfd/coff-go32.c R processors/ARM/gdb-7.10/bfd/coff-h8300.c R processors/ARM/gdb-7.10/bfd/coff-h8500.c R processors/ARM/gdb-7.10/bfd/coff-i386.c R processors/ARM/gdb-7.10/bfd/coff-i860.c R processors/ARM/gdb-7.10/bfd/coff-i960.c R processors/ARM/gdb-7.10/bfd/coff-ia64.c R processors/ARM/gdb-7.10/bfd/coff-m68k.c R processors/ARM/gdb-7.10/bfd/coff-m88k.c R processors/ARM/gdb-7.10/bfd/coff-mcore.c R processors/ARM/gdb-7.10/bfd/coff-mips.c R processors/ARM/gdb-7.10/bfd/coff-ppc.c R processors/ARM/gdb-7.10/bfd/coff-rs6000.c R processors/ARM/gdb-7.10/bfd/coff-sh.c R processors/ARM/gdb-7.10/bfd/coff-sparc.c R processors/ARM/gdb-7.10/bfd/coff-stgo32.c R processors/ARM/gdb-7.10/bfd/coff-svm68k.c R processors/ARM/gdb-7.10/bfd/coff-tic30.c R processors/ARM/gdb-7.10/bfd/coff-tic4x.c R processors/ARM/gdb-7.10/bfd/coff-tic54x.c R processors/ARM/gdb-7.10/bfd/coff-tic80.c R processors/ARM/gdb-7.10/bfd/coff-u68k.c R processors/ARM/gdb-7.10/bfd/coff-w65.c R processors/ARM/gdb-7.10/bfd/coff-we32k.c R processors/ARM/gdb-7.10/bfd/coff-x86_64.c R processors/ARM/gdb-7.10/bfd/coff-z80.c R processors/ARM/gdb-7.10/bfd/coff-z8k.c R processors/ARM/gdb-7.10/bfd/coff64-rs6000.c R processors/ARM/gdb-7.10/bfd/coffcode.h R processors/ARM/gdb-7.10/bfd/coffgen.c R processors/ARM/gdb-7.10/bfd/cofflink.c R processors/ARM/gdb-7.10/bfd/coffswap.h R processors/ARM/gdb-7.10/bfd/compress.c R processors/ARM/gdb-7.10/bfd/config.bfd R processors/ARM/gdb-7.10/bfd/config.in R processors/ARM/gdb-7.10/bfd/configure R processors/ARM/gdb-7.10/bfd/configure.ac R processors/ARM/gdb-7.10/bfd/configure.com R processors/ARM/gdb-7.10/bfd/configure.host R processors/ARM/gdb-7.10/bfd/corefile.c R processors/ARM/gdb-7.10/bfd/cpu-aarch64.c R processors/ARM/gdb-7.10/bfd/cpu-alpha.c R processors/ARM/gdb-7.10/bfd/cpu-arc.c R processors/ARM/gdb-7.10/bfd/cpu-arm.c R processors/ARM/gdb-7.10/bfd/cpu-avr.c R processors/ARM/gdb-7.10/bfd/cpu-bfin.c R processors/ARM/gdb-7.10/bfd/cpu-cr16.c R processors/ARM/gdb-7.10/bfd/cpu-cr16c.c R processors/ARM/gdb-7.10/bfd/cpu-cris.c R processors/ARM/gdb-7.10/bfd/cpu-crx.c R processors/ARM/gdb-7.10/bfd/cpu-d10v.c R processors/ARM/gdb-7.10/bfd/cpu-d30v.c R processors/ARM/gdb-7.10/bfd/cpu-dlx.c R processors/ARM/gdb-7.10/bfd/cpu-epiphany.c R processors/ARM/gdb-7.10/bfd/cpu-fr30.c R processors/ARM/gdb-7.10/bfd/cpu-frv.c R processors/ARM/gdb-7.10/bfd/cpu-ft32.c R processors/ARM/gdb-7.10/bfd/cpu-h8300.c R processors/ARM/gdb-7.10/bfd/cpu-h8500.c R processors/ARM/gdb-7.10/bfd/cpu-hppa.c R processors/ARM/gdb-7.10/bfd/cpu-i370.c R processors/ARM/gdb-7.10/bfd/cpu-i386.c R processors/ARM/gdb-7.10/bfd/cpu-i860.c R processors/ARM/gdb-7.10/bfd/cpu-i960.c R processors/ARM/gdb-7.10/bfd/cpu-ia64-opc.c R processors/ARM/gdb-7.10/bfd/cpu-ia64.c R processors/ARM/gdb-7.10/bfd/cpu-iamcu.c R processors/ARM/gdb-7.10/bfd/cpu-ip2k.c R processors/ARM/gdb-7.10/bfd/cpu-iq2000.c R processors/ARM/gdb-7.10/bfd/cpu-k1om.c R processors/ARM/gdb-7.10/bfd/cpu-l1om.c R processors/ARM/gdb-7.10/bfd/cpu-lm32.c R processors/ARM/gdb-7.10/bfd/cpu-m10200.c R processors/ARM/gdb-7.10/bfd/cpu-m10300.c R processors/ARM/gdb-7.10/bfd/cpu-m32c.c R processors/ARM/gdb-7.10/bfd/cpu-m32r.c R processors/ARM/gdb-7.10/bfd/cpu-m68hc11.c R processors/ARM/gdb-7.10/bfd/cpu-m68hc12.c R processors/ARM/gdb-7.10/bfd/cpu-m68k.c R processors/ARM/gdb-7.10/bfd/cpu-m88k.c R processors/ARM/gdb-7.10/bfd/cpu-m9s12x.c R processors/ARM/gdb-7.10/bfd/cpu-m9s12xg.c R processors/ARM/gdb-7.10/bfd/cpu-mcore.c R processors/ARM/gdb-7.10/bfd/cpu-mep.c R processors/ARM/gdb-7.10/bfd/cpu-metag.c R processors/ARM/gdb-7.10/bfd/cpu-microblaze.c R processors/ARM/gdb-7.10/bfd/cpu-mips.c R processors/ARM/gdb-7.10/bfd/cpu-mmix.c R processors/ARM/gdb-7.10/bfd/cpu-moxie.c R processors/ARM/gdb-7.10/bfd/cpu-msp430.c R processors/ARM/gdb-7.10/bfd/cpu-mt.c R processors/ARM/gdb-7.10/bfd/cpu-nds32.c R processors/ARM/gdb-7.10/bfd/cpu-nios2.c R processors/ARM/gdb-7.10/bfd/cpu-ns32k.c R processors/ARM/gdb-7.10/bfd/cpu-or1k.c R processors/ARM/gdb-7.10/bfd/cpu-pdp11.c R processors/ARM/gdb-7.10/bfd/cpu-pj.c R processors/ARM/gdb-7.10/bfd/cpu-plugin.c R processors/ARM/gdb-7.10/bfd/cpu-powerpc.c R processors/ARM/gdb-7.10/bfd/cpu-rl78.c R processors/ARM/gdb-7.10/bfd/cpu-rs6000.c R processors/ARM/gdb-7.10/bfd/cpu-rx.c R processors/ARM/gdb-7.10/bfd/cpu-s390.c R processors/ARM/gdb-7.10/bfd/cpu-score.c R processors/ARM/gdb-7.10/bfd/cpu-sh.c R processors/ARM/gdb-7.10/bfd/cpu-sparc.c R processors/ARM/gdb-7.10/bfd/cpu-spu.c R processors/ARM/gdb-7.10/bfd/cpu-tic30.c R processors/ARM/gdb-7.10/bfd/cpu-tic4x.c R processors/ARM/gdb-7.10/bfd/cpu-tic54x.c R processors/ARM/gdb-7.10/bfd/cpu-tic6x.c R processors/ARM/gdb-7.10/bfd/cpu-tic80.c R processors/ARM/gdb-7.10/bfd/cpu-tilegx.c R processors/ARM/gdb-7.10/bfd/cpu-tilepro.c R processors/ARM/gdb-7.10/bfd/cpu-v850.c R processors/ARM/gdb-7.10/bfd/cpu-v850_rh850.c R processors/ARM/gdb-7.10/bfd/cpu-vax.c R processors/ARM/gdb-7.10/bfd/cpu-visium.c R processors/ARM/gdb-7.10/bfd/cpu-w65.c R processors/ARM/gdb-7.10/bfd/cpu-we32k.c R processors/ARM/gdb-7.10/bfd/cpu-xc16x.c R processors/ARM/gdb-7.10/bfd/cpu-xgate.c R processors/ARM/gdb-7.10/bfd/cpu-xstormy16.c R processors/ARM/gdb-7.10/bfd/cpu-xtensa.c R processors/ARM/gdb-7.10/bfd/cpu-z80.c R processors/ARM/gdb-7.10/bfd/cpu-z8k.c R processors/ARM/gdb-7.10/bfd/demo64.c R processors/ARM/gdb-7.10/bfd/development.sh R processors/ARM/gdb-7.10/bfd/doc/Makefile.am R processors/ARM/gdb-7.10/bfd/doc/Makefile.in R processors/ARM/gdb-7.10/bfd/doc/aoutx.texi R processors/ARM/gdb-7.10/bfd/doc/archive.texi R processors/ARM/gdb-7.10/bfd/doc/archures.texi R processors/ARM/gdb-7.10/bfd/doc/bfd.info R processors/ARM/gdb-7.10/bfd/doc/bfd.texinfo R processors/ARM/gdb-7.10/bfd/doc/bfdint.texi R processors/ARM/gdb-7.10/bfd/doc/bfdio.texi R processors/ARM/gdb-7.10/bfd/doc/bfdsumm.texi R processors/ARM/gdb-7.10/bfd/doc/bfdt.texi R processors/ARM/gdb-7.10/bfd/doc/bfdver.texi R processors/ARM/gdb-7.10/bfd/doc/bfdwin.texi R processors/ARM/gdb-7.10/bfd/doc/cache.texi R processors/ARM/gdb-7.10/bfd/doc/chew.c R processors/ARM/gdb-7.10/bfd/doc/chw8494 R processors/ARM/gdb-7.10/bfd/doc/coffcode.texi R processors/ARM/gdb-7.10/bfd/doc/core.texi R processors/ARM/gdb-7.10/bfd/doc/elf.texi R processors/ARM/gdb-7.10/bfd/doc/elfcode.texi R processors/ARM/gdb-7.10/bfd/doc/format.texi R processors/ARM/gdb-7.10/bfd/doc/hash.texi R processors/ARM/gdb-7.10/bfd/doc/header.sed R processors/ARM/gdb-7.10/bfd/doc/init.texi R processors/ARM/gdb-7.10/bfd/doc/libbfd.texi R processors/ARM/gdb-7.10/bfd/doc/linker.texi R processors/ARM/gdb-7.10/bfd/doc/makefile.vms R processors/ARM/gdb-7.10/bfd/doc/mmo.texi R processors/ARM/gdb-7.10/bfd/doc/opncls.texi R processors/ARM/gdb-7.10/bfd/doc/reloc.texi R processors/ARM/gdb-7.10/bfd/doc/section.texi R processors/ARM/gdb-7.10/bfd/doc/syms.texi R processors/ARM/gdb-7.10/bfd/doc/targets.texi R processors/ARM/gdb-7.10/bfd/dwarf1.c R processors/ARM/gdb-7.10/bfd/dwarf2.c R processors/ARM/gdb-7.10/bfd/ecoff.c R processors/ARM/gdb-7.10/bfd/ecofflink.c R processors/ARM/gdb-7.10/bfd/ecoffswap.h R processors/ARM/gdb-7.10/bfd/elf-attrs.c R processors/ARM/gdb-7.10/bfd/elf-bfd.h R processors/ARM/gdb-7.10/bfd/elf-eh-frame.c R processors/ARM/gdb-7.10/bfd/elf-hppa.h R processors/ARM/gdb-7.10/bfd/elf-ifunc.c R processors/ARM/gdb-7.10/bfd/elf-linux-psinfo.h R processors/ARM/gdb-7.10/bfd/elf-m10200.c R processors/ARM/gdb-7.10/bfd/elf-m10300.c R processors/ARM/gdb-7.10/bfd/elf-nacl.c R processors/ARM/gdb-7.10/bfd/elf-nacl.h R processors/ARM/gdb-7.10/bfd/elf-s390-common.c R processors/ARM/gdb-7.10/bfd/elf-strtab.c R processors/ARM/gdb-7.10/bfd/elf-vxworks.c R processors/ARM/gdb-7.10/bfd/elf-vxworks.h R processors/ARM/gdb-7.10/bfd/elf.c R processors/ARM/gdb-7.10/bfd/elf32-am33lin.c R processors/ARM/gdb-7.10/bfd/elf32-arc.c R processors/ARM/gdb-7.10/bfd/elf32-arm.c R processors/ARM/gdb-7.10/bfd/elf32-avr.c R processors/ARM/gdb-7.10/bfd/elf32-avr.h R processors/ARM/gdb-7.10/bfd/elf32-bfin.c R processors/ARM/gdb-7.10/bfd/elf32-cr16.c R processors/ARM/gdb-7.10/bfd/elf32-cr16c.c R processors/ARM/gdb-7.10/bfd/elf32-cris.c R processors/ARM/gdb-7.10/bfd/elf32-crx.c R processors/ARM/gdb-7.10/bfd/elf32-d10v.c R processors/ARM/gdb-7.10/bfd/elf32-d30v.c R processors/ARM/gdb-7.10/bfd/elf32-dlx.c R processors/ARM/gdb-7.10/bfd/elf32-epiphany.c R processors/ARM/gdb-7.10/bfd/elf32-fr30.c R processors/ARM/gdb-7.10/bfd/elf32-frv.c R processors/ARM/gdb-7.10/bfd/elf32-ft32.c R processors/ARM/gdb-7.10/bfd/elf32-gen.c R processors/ARM/gdb-7.10/bfd/elf32-h8300.c R processors/ARM/gdb-7.10/bfd/elf32-hppa.c R processors/ARM/gdb-7.10/bfd/elf32-hppa.h R processors/ARM/gdb-7.10/bfd/elf32-i370.c R processors/ARM/gdb-7.10/bfd/elf32-i386.c R processors/ARM/gdb-7.10/bfd/elf32-i860.c R processors/ARM/gdb-7.10/bfd/elf32-i960.c R processors/ARM/gdb-7.10/bfd/elf32-ip2k.c R processors/ARM/gdb-7.10/bfd/elf32-iq2000.c R processors/ARM/gdb-7.10/bfd/elf32-lm32.c R processors/ARM/gdb-7.10/bfd/elf32-m32c.c R processors/ARM/gdb-7.10/bfd/elf32-m32r.c R processors/ARM/gdb-7.10/bfd/elf32-m68hc11.c R processors/ARM/gdb-7.10/bfd/elf32-m68hc12.c R processors/ARM/gdb-7.10/bfd/elf32-m68hc1x.c R processors/ARM/gdb-7.10/bfd/elf32-m68hc1x.h R processors/ARM/gdb-7.10/bfd/elf32-m68k.c R processors/ARM/gdb-7.10/bfd/elf32-m88k.c R processors/ARM/gdb-7.10/bfd/elf32-mcore.c R processors/ARM/gdb-7.10/bfd/elf32-mep.c R processors/ARM/gdb-7.10/bfd/elf32-metag.c R processors/ARM/gdb-7.10/bfd/elf32-metag.h R processors/ARM/gdb-7.10/bfd/elf32-microblaze.c R processors/ARM/gdb-7.10/bfd/elf32-mips.c R processors/ARM/gdb-7.10/bfd/elf32-moxie.c R processors/ARM/gdb-7.10/bfd/elf32-msp430.c R processors/ARM/gdb-7.10/bfd/elf32-mt.c R processors/ARM/gdb-7.10/bfd/elf32-nds32.c R processors/ARM/gdb-7.10/bfd/elf32-nds32.h R processors/ARM/gdb-7.10/bfd/elf32-nios2.c R processors/ARM/gdb-7.10/bfd/elf32-nios2.h R processors/ARM/gdb-7.10/bfd/elf32-or1k.c R processors/ARM/gdb-7.10/bfd/elf32-pj.c R processors/ARM/gdb-7.10/bfd/elf32-ppc.c R processors/ARM/gdb-7.10/bfd/elf32-ppc.h R processors/ARM/gdb-7.10/bfd/elf32-rl78.c R processors/ARM/gdb-7.10/bfd/elf32-rx.c R processors/ARM/gdb-7.10/bfd/elf32-rx.h R processors/ARM/gdb-7.10/bfd/elf32-s390.c R processors/ARM/gdb-7.10/bfd/elf32-score.c R processors/ARM/gdb-7.10/bfd/elf32-score.h R processors/ARM/gdb-7.10/bfd/elf32-score7.c R processors/ARM/gdb-7.10/bfd/elf32-sh-relocs.h R processors/ARM/gdb-7.10/bfd/elf32-sh-symbian.c R processors/ARM/gdb-7.10/bfd/elf32-sh.c R processors/ARM/gdb-7.10/bfd/elf32-sh64-com.c R processors/ARM/gdb-7.10/bfd/elf32-sh64.c R processors/ARM/gdb-7.10/bfd/elf32-sh64.h R processors/ARM/gdb-7.10/bfd/elf32-sparc.c R processors/ARM/gdb-7.10/bfd/elf32-spu.c R processors/ARM/gdb-7.10/bfd/elf32-spu.h R processors/ARM/gdb-7.10/bfd/elf32-tic6x.c R processors/ARM/gdb-7.10/bfd/elf32-tic6x.h R processors/ARM/gdb-7.10/bfd/elf32-tilegx.c R processors/ARM/gdb-7.10/bfd/elf32-tilegx.h R processors/ARM/gdb-7.10/bfd/elf32-tilepro.c R processors/ARM/gdb-7.10/bfd/elf32-tilepro.h R processors/ARM/gdb-7.10/bfd/elf32-v850.c R processors/ARM/gdb-7.10/bfd/elf32-vax.c R processors/ARM/gdb-7.10/bfd/elf32-visium.c R processors/ARM/gdb-7.10/bfd/elf32-xc16x.c R processors/ARM/gdb-7.10/bfd/elf32-xgate.c R processors/ARM/gdb-7.10/bfd/elf32-xgate.h R processors/ARM/gdb-7.10/bfd/elf32-xstormy16.c R processors/ARM/gdb-7.10/bfd/elf32-xtensa.c R processors/ARM/gdb-7.10/bfd/elf32.c R processors/ARM/gdb-7.10/bfd/elf64-alpha.c R processors/ARM/gdb-7.10/bfd/elf64-gen.c R processors/ARM/gdb-7.10/bfd/elf64-hppa.c R processors/ARM/gdb-7.10/bfd/elf64-hppa.h R processors/ARM/gdb-7.10/bfd/elf64-ia64-vms.c R processors/ARM/gdb-7.10/bfd/elf64-mips.c R processors/ARM/gdb-7.10/bfd/elf64-mmix.c R processors/ARM/gdb-7.10/bfd/elf64-ppc.c R processors/ARM/gdb-7.10/bfd/elf64-ppc.h R processors/ARM/gdb-7.10/bfd/elf64-s390.c R processors/ARM/gdb-7.10/bfd/elf64-sh64.c R processors/ARM/gdb-7.10/bfd/elf64-sparc.c R processors/ARM/gdb-7.10/bfd/elf64-tilegx.c R processors/ARM/gdb-7.10/bfd/elf64-tilegx.h R processors/ARM/gdb-7.10/bfd/elf64-x86-64.c R processors/ARM/gdb-7.10/bfd/elf64.c R processors/ARM/gdb-7.10/bfd/elfcode.h R processors/ARM/gdb-7.10/bfd/elfcore.h R processors/ARM/gdb-7.10/bfd/elflink.c R processors/ARM/gdb-7.10/bfd/elfn32-mips.c R processors/ARM/gdb-7.10/bfd/elfnn-aarch64.c R processors/ARM/gdb-7.10/bfd/elfnn-ia64.c R processors/ARM/gdb-7.10/bfd/elfxx-aarch64.c R processors/ARM/gdb-7.10/bfd/elfxx-aarch64.h R processors/ARM/gdb-7.10/bfd/elfxx-ia64.c R processors/ARM/gdb-7.10/bfd/elfxx-ia64.h R processors/ARM/gdb-7.10/bfd/elfxx-mips.c R processors/ARM/gdb-7.10/bfd/elfxx-mips.h R processors/ARM/gdb-7.10/bfd/elfxx-sparc.c R processors/ARM/gdb-7.10/bfd/elfxx-sparc.h R processors/ARM/gdb-7.10/bfd/elfxx-target.h R processors/ARM/gdb-7.10/bfd/elfxx-tilegx.c R processors/ARM/gdb-7.10/bfd/elfxx-tilegx.h R processors/ARM/gdb-7.10/bfd/epoc-pe-arm.c R processors/ARM/gdb-7.10/bfd/epoc-pei-arm.c R processors/ARM/gdb-7.10/bfd/format.c R processors/ARM/gdb-7.10/bfd/freebsd.h R processors/ARM/gdb-7.10/bfd/gen-aout.c R processors/ARM/gdb-7.10/bfd/genlink.h R processors/ARM/gdb-7.10/bfd/hash.c R processors/ARM/gdb-7.10/bfd/host-aout.c R processors/ARM/gdb-7.10/bfd/hosts/alphalinux.h R processors/ARM/gdb-7.10/bfd/hosts/alphavms.h R processors/ARM/gdb-7.10/bfd/hosts/decstation.h R processors/ARM/gdb-7.10/bfd/hosts/delta68.h R processors/ARM/gdb-7.10/bfd/hosts/dpx2.h R processors/ARM/gdb-7.10/bfd/hosts/hp300bsd.h R processors/ARM/gdb-7.10/bfd/hosts/i386bsd.h R processors/ARM/gdb-7.10/bfd/hosts/i386linux.h R processors/ARM/gdb-7.10/bfd/hosts/i386mach3.h R processors/ARM/gdb-7.10/bfd/hosts/i386sco.h R processors/ARM/gdb-7.10/bfd/hosts/i860mach3.h R processors/ARM/gdb-7.10/bfd/hosts/m68kaux.h R processors/ARM/gdb-7.10/bfd/hosts/m68klinux.h R processors/ARM/gdb-7.10/bfd/hosts/m88kmach3.h R processors/ARM/gdb-7.10/bfd/hosts/mipsbsd.h R processors/ARM/gdb-7.10/bfd/hosts/mipsmach3.h R processors/ARM/gdb-7.10/bfd/hosts/news-mips.h R processors/ARM/gdb-7.10/bfd/hosts/news.h R processors/ARM/gdb-7.10/bfd/hosts/pc532mach.h R processors/ARM/gdb-7.10/bfd/hosts/riscos.h R processors/ARM/gdb-7.10/bfd/hosts/symmetry.h R processors/ARM/gdb-7.10/bfd/hosts/tahoe.h R processors/ARM/gdb-7.10/bfd/hosts/vaxbsd.h R processors/ARM/gdb-7.10/bfd/hosts/vaxlinux.h R processors/ARM/gdb-7.10/bfd/hosts/vaxult.h R processors/ARM/gdb-7.10/bfd/hosts/vaxult2.h R processors/ARM/gdb-7.10/bfd/hosts/x86-64linux.h R processors/ARM/gdb-7.10/bfd/hp300bsd.c R processors/ARM/gdb-7.10/bfd/hp300hpux.c R processors/ARM/gdb-7.10/bfd/hppabsd-core.c R processors/ARM/gdb-7.10/bfd/hpux-core.c R processors/ARM/gdb-7.10/bfd/i386aout.c R processors/ARM/gdb-7.10/bfd/i386bsd.c R processors/ARM/gdb-7.10/bfd/i386dynix.c R processors/ARM/gdb-7.10/bfd/i386freebsd.c R processors/ARM/gdb-7.10/bfd/i386linux.c R processors/ARM/gdb-7.10/bfd/i386lynx.c R processors/ARM/gdb-7.10/bfd/i386mach3.c R processors/ARM/gdb-7.10/bfd/i386msdos.c R processors/ARM/gdb-7.10/bfd/i386netbsd.c R processors/ARM/gdb-7.10/bfd/i386os9k.c R processors/ARM/gdb-7.10/bfd/ieee.c R processors/ARM/gdb-7.10/bfd/ihex.c R processors/ARM/gdb-7.10/bfd/init.c R processors/ARM/gdb-7.10/bfd/irix-core.c R processors/ARM/gdb-7.10/bfd/libaout.h R processors/ARM/gdb-7.10/bfd/libbfd-in.h R processors/ARM/gdb-7.10/bfd/libbfd.c R processors/ARM/gdb-7.10/bfd/libbfd.h R processors/ARM/gdb-7.10/bfd/libcoff-in.h R processors/ARM/gdb-7.10/bfd/libcoff.h R processors/ARM/gdb-7.10/bfd/libecoff.h R processors/ARM/gdb-7.10/bfd/libhppa.h R processors/ARM/gdb-7.10/bfd/libieee.h R processors/ARM/gdb-7.10/bfd/libnlm.h R processors/ARM/gdb-7.10/bfd/liboasys.h R processors/ARM/gdb-7.10/bfd/libpei.h R processors/ARM/gdb-7.10/bfd/libxcoff.h R processors/ARM/gdb-7.10/bfd/linker.c R processors/ARM/gdb-7.10/bfd/lynx-core.c R processors/ARM/gdb-7.10/bfd/m68k4knetbsd.c R processors/ARM/gdb-7.10/bfd/m68klinux.c R processors/ARM/gdb-7.10/bfd/m68knetbsd.c R processors/ARM/gdb-7.10/bfd/m88kmach3.c R processors/ARM/gdb-7.10/bfd/m88kopenbsd.c R processors/ARM/gdb-7.10/bfd/mach-o-i386.c R processors/ARM/gdb-7.10/bfd/mach-o-target.c R processors/ARM/gdb-7.10/bfd/mach-o-x86-64.c R processors/ARM/gdb-7.10/bfd/mach-o.c R processors/ARM/gdb-7.10/bfd/mach-o.h R processors/ARM/gdb-7.10/bfd/makefile.vms R processors/ARM/gdb-7.10/bfd/mep-relocs.pl R processors/ARM/gdb-7.10/bfd/merge.c R processors/ARM/gdb-7.10/bfd/mipsbsd.c R processors/ARM/gdb-7.10/bfd/mmo.c R processors/ARM/gdb-7.10/bfd/netbsd-core.c R processors/ARM/gdb-7.10/bfd/netbsd.h R processors/ARM/gdb-7.10/bfd/newsos3.c R processors/ARM/gdb-7.10/bfd/nlm-target.h R processors/ARM/gdb-7.10/bfd/nlm.c R processors/ARM/gdb-7.10/bfd/nlm32-alpha.c R processors/ARM/gdb-7.10/bfd/nlm32-i386.c R processors/ARM/gdb-7.10/bfd/nlm32-ppc.c R processors/ARM/gdb-7.10/bfd/nlm32-sparc.c R processors/ARM/gdb-7.10/bfd/nlm32.c R processors/ARM/gdb-7.10/bfd/nlm64.c R processors/ARM/gdb-7.10/bfd/nlmcode.h R processors/ARM/gdb-7.10/bfd/nlmswap.h R processors/ARM/gdb-7.10/bfd/ns32k.h R processors/ARM/gdb-7.10/bfd/ns32knetbsd.c R processors/ARM/gdb-7.10/bfd/oasys.c R processors/ARM/gdb-7.10/bfd/opncls.c R processors/ARM/gdb-7.10/bfd/osf-core.c R processors/ARM/gdb-7.10/bfd/pc532-mach.c R processors/ARM/gdb-7.10/bfd/pdp11.c R processors/ARM/gdb-7.10/bfd/pe-arm-wince.c R processors/ARM/gdb-7.10/bfd/pe-arm.c R processors/ARM/gdb-7.10/bfd/pe-i386.c R processors/ARM/gdb-7.10/bfd/pe-mcore.c R processors/ARM/gdb-7.10/bfd/pe-mips.c R processors/ARM/gdb-7.10/bfd/pe-ppc.c R processors/ARM/gdb-7.10/bfd/pe-sh.c R processors/ARM/gdb-7.10/bfd/pe-x86_64.c R processors/ARM/gdb-7.10/bfd/peXXigen.c R processors/ARM/gdb-7.10/bfd/pef-traceback.h R processors/ARM/gdb-7.10/bfd/pef.c R processors/ARM/gdb-7.10/bfd/pef.h R processors/ARM/gdb-7.10/bfd/pei-arm-wince.c R processors/ARM/gdb-7.10/bfd/pei-arm.c R processors/ARM/gdb-7.10/bfd/pei-i386.c R processors/ARM/gdb-7.10/bfd/pei-ia64.c R processors/ARM/gdb-7.10/bfd/pei-mcore.c R processors/ARM/gdb-7.10/bfd/pei-mips.c R processors/ARM/gdb-7.10/bfd/pei-ppc.c R processors/ARM/gdb-7.10/bfd/pei-sh.c R processors/ARM/gdb-7.10/bfd/pei-x86_64.c R processors/ARM/gdb-7.10/bfd/peicode.h R processors/ARM/gdb-7.10/bfd/plugin.c R processors/ARM/gdb-7.10/bfd/plugin.h R processors/ARM/gdb-7.10/bfd/po/BLD-POTFILES.in R processors/ARM/gdb-7.10/bfd/po/Make-in R processors/ARM/gdb-7.10/bfd/po/SRC-POTFILES.in R processors/ARM/gdb-7.10/bfd/po/bfd.pot R processors/ARM/gdb-7.10/bfd/po/da.gmo R processors/ARM/gdb-7.10/bfd/po/da.po R processors/ARM/gdb-7.10/bfd/po/es.gmo R processors/ARM/gdb-7.10/bfd/po/es.po R processors/ARM/gdb-7.10/bfd/po/fi.gmo R processors/ARM/gdb-7.10/bfd/po/fi.po R processors/ARM/gdb-7.10/bfd/po/fr.gmo R processors/ARM/gdb-7.10/bfd/po/fr.po R processors/ARM/gdb-7.10/bfd/po/id.gmo R processors/ARM/gdb-7.10/bfd/po/id.po R processors/ARM/gdb-7.10/bfd/po/ja.gmo R processors/ARM/gdb-7.10/bfd/po/ja.po R processors/ARM/gdb-7.10/bfd/po/ro.gmo R processors/ARM/gdb-7.10/bfd/po/ro.po R processors/ARM/gdb-7.10/bfd/po/ru.gmo R processors/ARM/gdb-7.10/bfd/po/ru.po R processors/ARM/gdb-7.10/bfd/po/rw.gmo R processors/ARM/gdb-7.10/bfd/po/sv.gmo R processors/ARM/gdb-7.10/bfd/po/sv.po R processors/ARM/gdb-7.10/bfd/po/tr.gmo R processors/ARM/gdb-7.10/bfd/po/tr.po R processors/ARM/gdb-7.10/bfd/po/uk.gmo R processors/ARM/gdb-7.10/bfd/po/uk.po R processors/ARM/gdb-7.10/bfd/po/vi.gmo R processors/ARM/gdb-7.10/bfd/po/vi.po R processors/ARM/gdb-7.10/bfd/po/zh_CN.gmo R processors/ARM/gdb-7.10/bfd/po/zh_CN.po R processors/ARM/gdb-7.10/bfd/ppcboot.c R processors/ARM/gdb-7.10/bfd/ptrace-core.c R processors/ARM/gdb-7.10/bfd/reloc.c R processors/ARM/gdb-7.10/bfd/reloc16.c R processors/ARM/gdb-7.10/bfd/riscix.c R processors/ARM/gdb-7.10/bfd/rs6000-core.c R processors/ARM/gdb-7.10/bfd/sco5-core.c R processors/ARM/gdb-7.10/bfd/section.c R processors/ARM/gdb-7.10/bfd/simple.c R processors/ARM/gdb-7.10/bfd/som.c R processors/ARM/gdb-7.10/bfd/som.h R processors/ARM/gdb-7.10/bfd/sparclinux.c R processors/ARM/gdb-7.10/bfd/sparclynx.c R processors/ARM/gdb-7.10/bfd/sparcnetbsd.c R processors/ARM/gdb-7.10/bfd/srec.c R processors/ARM/gdb-7.10/bfd/stab-syms.c R processors/ARM/gdb-7.10/bfd/stabs.c R processors/ARM/gdb-7.10/bfd/sunos.c R processors/ARM/gdb-7.10/bfd/syms.c R processors/ARM/gdb-7.10/bfd/sysdep.h R processors/ARM/gdb-7.10/bfd/targets.c R processors/ARM/gdb-7.10/bfd/tekhex.c R processors/ARM/gdb-7.10/bfd/trad-core.c R processors/ARM/gdb-7.10/bfd/vax1knetbsd.c R processors/ARM/gdb-7.10/bfd/vaxbsd.c R processors/ARM/gdb-7.10/bfd/vaxnetbsd.c R processors/ARM/gdb-7.10/bfd/verilog.c R processors/ARM/gdb-7.10/bfd/versados.c R processors/ARM/gdb-7.10/bfd/version.h R processors/ARM/gdb-7.10/bfd/version.m4 R processors/ARM/gdb-7.10/bfd/vms-alpha.c R processors/ARM/gdb-7.10/bfd/vms-lib.c R processors/ARM/gdb-7.10/bfd/vms-misc.c R processors/ARM/gdb-7.10/bfd/vms.h R processors/ARM/gdb-7.10/bfd/warning.m4 R processors/ARM/gdb-7.10/bfd/xcofflink.c R processors/ARM/gdb-7.10/bfd/xsym.c R processors/ARM/gdb-7.10/bfd/xsym.h R processors/ARM/gdb-7.10/bfd/xtensa-isa.c R processors/ARM/gdb-7.10/bfd/xtensa-modules.c R processors/ARM/gdb-7.10/compile R processors/ARM/gdb-7.10/config-ml.in R processors/ARM/gdb-7.10/config.guess R processors/ARM/gdb-7.10/config.sub R processors/ARM/gdb-7.10/config/ChangeLog R processors/ARM/gdb-7.10/config/acx.m4 R processors/ARM/gdb-7.10/config/bootstrap-asan.mk R processors/ARM/gdb-7.10/config/bootstrap-debug-lean.mk R processors/ARM/gdb-7.10/config/bootstrap-lto.mk R processors/ARM/gdb-7.10/config/bootstrap-ubsan.mk R processors/ARM/gdb-7.10/config/dfp.m4 R processors/ARM/gdb-7.10/config/gettext.m4 R processors/ARM/gdb-7.10/config/iconv.m4 R processors/ARM/gdb-7.10/config/isl.m4 R processors/ARM/gdb-7.10/config/math.m4 R processors/ARM/gdb-7.10/config/multi.m4 R processors/ARM/gdb-7.10/config/override.m4 R processors/ARM/gdb-7.10/config/picflag.m4 R processors/ARM/gdb-7.10/config/plugins.m4 R processors/ARM/gdb-7.10/config/po.m4 R processors/ARM/gdb-7.10/config/stdint.m4 R processors/ARM/gdb-7.10/config/tcl.m4 R processors/ARM/gdb-7.10/config/tls.m4 R processors/ARM/gdb-7.10/config/warnings.m4 R processors/ARM/gdb-7.10/configure R processors/ARM/gdb-7.10/configure.ac R processors/ARM/gdb-7.10/include/COPYING R processors/ARM/gdb-7.10/include/COPYING3 R processors/ARM/gdb-7.10/include/ChangeLog R processors/ARM/gdb-7.10/include/ChangeLog-9103 R processors/ARM/gdb-7.10/include/MAINTAINERS R processors/ARM/gdb-7.10/include/alloca-conf.h R processors/ARM/gdb-7.10/include/ansidecl.h R processors/ARM/gdb-7.10/include/aout/ChangeLog R processors/ARM/gdb-7.10/include/aout/adobe.h R processors/ARM/gdb-7.10/include/aout/aout64.h R processors/ARM/gdb-7.10/include/aout/ar.h R processors/ARM/gdb-7.10/include/aout/dynix3.h R processors/ARM/gdb-7.10/include/aout/encap.h R processors/ARM/gdb-7.10/include/aout/host.h R processors/ARM/gdb-7.10/include/aout/hp.h R processors/ARM/gdb-7.10/include/aout/hp300hpux.h R processors/ARM/gdb-7.10/include/aout/hppa.h R processors/ARM/gdb-7.10/include/aout/ranlib.h R processors/ARM/gdb-7.10/include/aout/reloc.h R processors/ARM/gdb-7.10/include/aout/stab.def R processors/ARM/gdb-7.10/include/aout/stab_gnu.h R processors/ARM/gdb-7.10/include/aout/sun4.h R processors/ARM/gdb-7.10/include/bfdlink.h R processors/ARM/gdb-7.10/include/binary-io.h R processors/ARM/gdb-7.10/include/bout.h R processors/ARM/gdb-7.10/include/cgen/basic-modes.h R processors/ARM/gdb-7.10/include/cgen/basic-ops.h R processors/ARM/gdb-7.10/include/cgen/bitset.h R processors/ARM/gdb-7.10/include/coff/alpha.h R processors/ARM/gdb-7.10/include/coff/apollo.h R processors/ARM/gdb-7.10/include/coff/arm.h R processors/ARM/gdb-7.10/include/coff/aux-coff.h R processors/ARM/gdb-7.10/include/coff/ecoff.h R processors/ARM/gdb-7.10/include/coff/external.h R processors/ARM/gdb-7.10/include/coff/go32exe.h R processors/ARM/gdb-7.10/include/coff/h8300.h R processors/ARM/gdb-7.10/include/coff/h8500.h R processors/ARM/gdb-7.10/include/coff/i386.h R processors/ARM/gdb-7.10/include/coff/i860.h R processors/ARM/gdb-7.10/include/coff/i960.h R processors/ARM/gdb-7.10/include/coff/ia64.h R processors/ARM/gdb-7.10/include/coff/internal.h R processors/ARM/gdb-7.10/include/coff/m68k.h R processors/ARM/gdb-7.10/include/coff/m88k.h R processors/ARM/gdb-7.10/include/coff/mcore.h R processors/ARM/gdb-7.10/include/coff/mips.h R processors/ARM/gdb-7.10/include/coff/mipspe.h R processors/ARM/gdb-7.10/include/coff/pe.h R processors/ARM/gdb-7.10/include/coff/powerpc.h R processors/ARM/gdb-7.10/include/coff/rs6000.h R processors/ARM/gdb-7.10/include/coff/rs6k64.h R processors/ARM/gdb-7.10/include/coff/sh.h R processors/ARM/gdb-7.10/include/coff/sparc.h R processors/ARM/gdb-7.10/include/coff/ti.h R processors/ARM/gdb-7.10/include/coff/tic30.h R processors/ARM/gdb-7.10/include/coff/tic4x.h R processors/ARM/gdb-7.10/include/coff/tic54x.h R processors/ARM/gdb-7.10/include/coff/tic80.h R processors/ARM/gdb-7.10/include/coff/w65.h R processors/ARM/gdb-7.10/include/coff/we32k.h R processors/ARM/gdb-7.10/include/coff/x86_64.h R processors/ARM/gdb-7.10/include/coff/xcoff.h R processors/ARM/gdb-7.10/include/coff/z80.h R processors/ARM/gdb-7.10/include/coff/z8k.h R processors/ARM/gdb-7.10/include/demangle.h R processors/ARM/gdb-7.10/include/dis-asm.h R processors/ARM/gdb-7.10/include/dwarf2.def R processors/ARM/gdb-7.10/include/dwarf2.h R processors/ARM/gdb-7.10/include/dyn-string.h R processors/ARM/gdb-7.10/include/elf/ChangeLog R processors/ARM/gdb-7.10/include/elf/aarch64.h R processors/ARM/gdb-7.10/include/elf/alpha.h R processors/ARM/gdb-7.10/include/elf/arc.h R processors/ARM/gdb-7.10/include/elf/arm.h R processors/ARM/gdb-7.10/include/elf/avr.h R processors/ARM/gdb-7.10/include/elf/bfin.h R processors/ARM/gdb-7.10/include/elf/common.h R processors/ARM/gdb-7.10/include/elf/cr16.h R processors/ARM/gdb-7.10/include/elf/cr16c.h R processors/ARM/gdb-7.10/include/elf/cris.h R processors/ARM/gdb-7.10/include/elf/crx.h R processors/ARM/gdb-7.10/include/elf/d10v.h R processors/ARM/gdb-7.10/include/elf/d30v.h R processors/ARM/gdb-7.10/include/elf/dlx.h R processors/ARM/gdb-7.10/include/elf/dwarf.h R processors/ARM/gdb-7.10/include/elf/epiphany.h R processors/ARM/gdb-7.10/include/elf/external.h R processors/ARM/gdb-7.10/include/elf/fr30.h R processors/ARM/gdb-7.10/include/elf/frv.h R processors/ARM/gdb-7.10/include/elf/ft32.h R processors/ARM/gdb-7.10/include/elf/h8.h R processors/ARM/gdb-7.10/include/elf/hppa.h R processors/ARM/gdb-7.10/include/elf/i370.h R processors/ARM/gdb-7.10/include/elf/i386.h R processors/ARM/gdb-7.10/include/elf/i860.h R processors/ARM/gdb-7.10/include/elf/i960.h R processors/ARM/gdb-7.10/include/elf/ia64.h R processors/ARM/gdb-7.10/include/elf/internal.h R processors/ARM/gdb-7.10/include/elf/ip2k.h R processors/ARM/gdb-7.10/include/elf/iq2000.h R processors/ARM/gdb-7.10/include/elf/lm32.h R processors/ARM/gdb-7.10/include/elf/m32c.h R processors/ARM/gdb-7.10/include/elf/m32r.h R processors/ARM/gdb-7.10/include/elf/m68hc11.h R processors/ARM/gdb-7.10/include/elf/m68k.h R processors/ARM/gdb-7.10/include/elf/mcore.h R processors/ARM/gdb-7.10/include/elf/mep.h R processors/ARM/gdb-7.10/include/elf/metag.h R processors/ARM/gdb-7.10/include/elf/microblaze.h R processors/ARM/gdb-7.10/include/elf/mips.h R processors/ARM/gdb-7.10/include/elf/mmix.h R processors/ARM/gdb-7.10/include/elf/mn10200.h R processors/ARM/gdb-7.10/include/elf/mn10300.h R processors/ARM/gdb-7.10/include/elf/moxie.h R processors/ARM/gdb-7.10/include/elf/msp430.h R processors/ARM/gdb-7.10/include/elf/mt.h R processors/ARM/gdb-7.10/include/elf/nds32.h R processors/ARM/gdb-7.10/include/elf/nios2.h R processors/ARM/gdb-7.10/include/elf/or1k.h R processors/ARM/gdb-7.10/include/elf/pj.h R processors/ARM/gdb-7.10/include/elf/ppc.h R processors/ARM/gdb-7.10/include/elf/ppc64.h R processors/ARM/gdb-7.10/include/elf/reloc-macros.h R processors/ARM/gdb-7.10/include/elf/rl78.h R processors/ARM/gdb-7.10/include/elf/rx.h R processors/ARM/gdb-7.10/include/elf/s390.h R processors/ARM/gdb-7.10/include/elf/score.h R processors/ARM/gdb-7.10/include/elf/sh.h R processors/ARM/gdb-7.10/include/elf/sparc.h R processors/ARM/gdb-7.10/include/elf/spu.h R processors/ARM/gdb-7.10/include/elf/tic6x-attrs.h R processors/ARM/gdb-7.10/include/elf/tic6x.h R processors/ARM/gdb-7.10/include/elf/tilegx.h R processors/ARM/gdb-7.10/include/elf/tilepro.h R processors/ARM/gdb-7.10/include/elf/v850.h R processors/ARM/gdb-7.10/include/elf/vax.h R processors/ARM/gdb-7.10/include/elf/visium.h R processors/ARM/gdb-7.10/include/elf/vxworks.h R processors/ARM/gdb-7.10/include/elf/x86-64.h R processors/ARM/gdb-7.10/include/elf/xc16x.h R processors/ARM/gdb-7.10/include/elf/xgate.h R processors/ARM/gdb-7.10/include/elf/xstormy16.h R processors/ARM/gdb-7.10/include/elf/xtensa.h R processors/ARM/gdb-7.10/include/fibheap.h R processors/ARM/gdb-7.10/include/filenames.h R processors/ARM/gdb-7.10/include/floatformat.h R processors/ARM/gdb-7.10/include/fnmatch.h R processors/ARM/gdb-7.10/include/fopen-bin.h R processors/ARM/gdb-7.10/include/fopen-same.h R processors/ARM/gdb-7.10/include/fopen-vms.h R processors/ARM/gdb-7.10/include/gcc-c-fe.def R processors/ARM/gdb-7.10/include/gcc-c-interface.h R processors/ARM/gdb-7.10/include/gcc-interface.h R processors/ARM/gdb-7.10/include/gdb/ChangeLog R processors/ARM/gdb-7.10/include/gdb/callback.h R processors/ARM/gdb-7.10/include/gdb/fileio.h R processors/ARM/gdb-7.10/include/gdb/gdb-index.h R processors/ARM/gdb-7.10/include/gdb/remote-sim.h R processors/ARM/gdb-7.10/include/gdb/section-scripts.h R processors/ARM/gdb-7.10/include/gdb/signals.def R processors/ARM/gdb-7.10/include/gdb/signals.h R processors/ARM/gdb-7.10/include/gdb/sim-arm.h R processors/ARM/gdb-7.10/include/gdb/sim-bfin.h R processors/ARM/gdb-7.10/include/gdb/sim-cr16.h R processors/ARM/gdb-7.10/include/gdb/sim-d10v.h R processors/ARM/gdb-7.10/include/gdb/sim-frv.h R processors/ARM/gdb-7.10/include/gdb/sim-ft32.h R processors/ARM/gdb-7.10/include/gdb/sim-h8300.h R processors/ARM/gdb-7.10/include/gdb/sim-lm32.h R processors/ARM/gdb-7.10/include/gdb/sim-m32c.h R processors/ARM/gdb-7.10/include/gdb/sim-ppc.h R processors/ARM/gdb-7.10/include/gdb/sim-rl78.h R processors/ARM/gdb-7.10/include/gdb/sim-rx.h R processors/ARM/gdb-7.10/include/gdb/sim-sh.h R processors/ARM/gdb-7.10/include/getopt.h R processors/ARM/gdb-7.10/include/hashtab.h R processors/ARM/gdb-7.10/include/hp-symtab.h R processors/ARM/gdb-7.10/include/ieee.h R processors/ARM/gdb-7.10/include/leb128.h R processors/ARM/gdb-7.10/include/libiberty.h R processors/ARM/gdb-7.10/include/longlong.h R processors/ARM/gdb-7.10/include/lto-symtab.h R processors/ARM/gdb-7.10/include/mach-o/ChangeLog R processors/ARM/gdb-7.10/include/mach-o/arm.h R processors/ARM/gdb-7.10/include/mach-o/codesign.h R processors/ARM/gdb-7.10/include/mach-o/external.h R processors/ARM/gdb-7.10/include/mach-o/loader.h R processors/ARM/gdb-7.10/include/mach-o/reloc.h R processors/ARM/gdb-7.10/include/mach-o/unwind.h R processors/ARM/gdb-7.10/include/mach-o/x86-64.h R processors/ARM/gdb-7.10/include/md5.h R processors/ARM/gdb-7.10/include/nlm/ChangeLog R processors/ARM/gdb-7.10/include/nlm/alpha-ext.h R processors/ARM/gdb-7.10/include/nlm/common.h R processors/ARM/gdb-7.10/include/nlm/external.h R processors/ARM/gdb-7.10/include/nlm/i386-ext.h R processors/ARM/gdb-7.10/include/nlm/internal.h R processors/ARM/gdb-7.10/include/nlm/ppc-ext.h R processors/ARM/gdb-7.10/include/nlm/sparc32-ext.h R processors/ARM/gdb-7.10/include/oasys.h R processors/ARM/gdb-7.10/include/objalloc.h R processors/ARM/gdb-7.10/include/obstack.h R processors/ARM/gdb-7.10/include/opcode/ChangeLog R processors/ARM/gdb-7.10/include/opcode/aarch64.h R processors/ARM/gdb-7.10/include/opcode/alpha.h R processors/ARM/gdb-7.10/include/opcode/arc.h R processors/ARM/gdb-7.10/include/opcode/arm.h R processors/ARM/gdb-7.10/include/opcode/avr.h R processors/ARM/gdb-7.10/include/opcode/bfin.h R processors/ARM/gdb-7.10/include/opcode/cgen.h R processors/ARM/gdb-7.10/include/opcode/convex.h R processors/ARM/gdb-7.10/include/opcode/cr16.h R processors/ARM/gdb-7.10/include/opcode/cris.h R processors/ARM/gdb-7.10/include/opcode/crx.h R processors/ARM/gdb-7.10/include/opcode/d10v.h R processors/ARM/gdb-7.10/include/opcode/d30v.h R processors/ARM/gdb-7.10/include/opcode/dlx.h R processors/ARM/gdb-7.10/include/opcode/ft32.h R processors/ARM/gdb-7.10/include/opcode/h8300.h R processors/ARM/gdb-7.10/include/opcode/hppa.h R processors/ARM/gdb-7.10/include/opcode/i370.h R processors/ARM/gdb-7.10/include/opcode/i386.h R processors/ARM/gdb-7.10/include/opcode/i860.h R processors/ARM/gdb-7.10/include/opcode/i960.h R processors/ARM/gdb-7.10/include/opcode/ia64.h R processors/ARM/gdb-7.10/include/opcode/m68hc11.h R processors/ARM/gdb-7.10/include/opcode/m68k.h R processors/ARM/gdb-7.10/include/opcode/m88k.h R processors/ARM/gdb-7.10/include/opcode/metag.h R processors/ARM/gdb-7.10/include/opcode/mips.h R processors/ARM/gdb-7.10/include/opcode/mmix.h R processors/ARM/gdb-7.10/include/opcode/mn10200.h R processors/ARM/gdb-7.10/include/opcode/mn10300.h R processors/ARM/gdb-7.10/include/opcode/moxie.h R processors/ARM/gdb-7.10/include/opcode/msp430-decode.h R processors/ARM/gdb-7.10/include/opcode/msp430.h R processors/ARM/gdb-7.10/include/opcode/nds32.h R processors/ARM/gdb-7.10/include/opcode/nios2.h R processors/ARM/gdb-7.10/include/opcode/nios2r1.h R processors/ARM/gdb-7.10/include/opcode/nios2r2.h R processors/ARM/gdb-7.10/include/opcode/np1.h R processors/ARM/gdb-7.10/include/opcode/ns32k.h R processors/ARM/gdb-7.10/include/opcode/pdp11.h R processors/ARM/gdb-7.10/include/opcode/pj.h R processors/ARM/gdb-7.10/include/opcode/pn.h R processors/ARM/gdb-7.10/include/opcode/ppc.h R processors/ARM/gdb-7.10/include/opcode/pyr.h R processors/ARM/gdb-7.10/include/opcode/rl78.h R processors/ARM/gdb-7.10/include/opcode/rx.h R processors/ARM/gdb-7.10/include/opcode/s390.h R processors/ARM/gdb-7.10/include/opcode/score-datadep.h R processors/ARM/gdb-7.10/include/opcode/score-inst.h R processors/ARM/gdb-7.10/include/opcode/sparc.h R processors/ARM/gdb-7.10/include/opcode/spu-insns.h R processors/ARM/gdb-7.10/include/opcode/spu.h R processors/ARM/gdb-7.10/include/opcode/tahoe.h R processors/ARM/gdb-7.10/include/opcode/tic30.h R processors/ARM/gdb-7.10/include/opcode/tic4x.h R processors/ARM/gdb-7.10/include/opcode/tic54x.h R processors/ARM/gdb-7.10/include/opcode/tic6x-control-registers.h R processors/ARM/gdb-7.10/include/opcode/tic6x-insn-formats.h R processors/ARM/gdb-7.10/include/opcode/tic6x-opcode-table.h R processors/ARM/gdb-7.10/include/opcode/tic6x.h R processors/ARM/gdb-7.10/include/opcode/tic80.h R processors/ARM/gdb-7.10/include/opcode/tilegx.h R processors/ARM/gdb-7.10/include/opcode/tilepro.h R processors/ARM/gdb-7.10/include/opcode/v850.h R processors/ARM/gdb-7.10/include/opcode/vax.h R processors/ARM/gdb-7.10/include/opcode/visium.h R processors/ARM/gdb-7.10/include/opcode/xgate.h R processors/ARM/gdb-7.10/include/os9k.h R processors/ARM/gdb-7.10/include/partition.h R processors/ARM/gdb-7.10/include/plugin-api.h R processors/ARM/gdb-7.10/include/progress.h R processors/ARM/gdb-7.10/include/safe-ctype.h R processors/ARM/gdb-7.10/include/sha1.h R processors/ARM/gdb-7.10/include/simple-object.h R processors/ARM/gdb-7.10/include/som/aout.h R processors/ARM/gdb-7.10/include/som/clock.h R processors/ARM/gdb-7.10/include/som/internal.h R processors/ARM/gdb-7.10/include/som/lst.h R processors/ARM/gdb-7.10/include/som/reloc.h R processors/ARM/gdb-7.10/include/sort.h R processors/ARM/gdb-7.10/include/splay-tree.h R processors/ARM/gdb-7.10/include/symcat.h R processors/ARM/gdb-7.10/include/timeval-utils.h R processors/ARM/gdb-7.10/include/vms/dcx.h R processors/ARM/gdb-7.10/include/vms/dmt.h R processors/ARM/gdb-7.10/include/vms/dsc.h R processors/ARM/gdb-7.10/include/vms/dst.h R processors/ARM/gdb-7.10/include/vms/eeom.h R processors/ARM/gdb-7.10/include/vms/egps.h R processors/ARM/gdb-7.10/include/vms/egsd.h R processors/ARM/gdb-7.10/include/vms/egst.h R processors/ARM/gdb-7.10/include/vms/egsy.h R processors/ARM/gdb-7.10/include/vms/eiaf.h R processors/ARM/gdb-7.10/include/vms/eicp.h R processors/ARM/gdb-7.10/include/vms/eidc.h R processors/ARM/gdb-7.10/include/vms/eiha.h R processors/ARM/gdb-7.10/include/vms/eihd.h R processors/ARM/gdb-7.10/include/vms/eihi.h R processors/ARM/gdb-7.10/include/vms/eihs.h R processors/ARM/gdb-7.10/include/vms/eihvn.h R processors/ARM/gdb-7.10/include/vms/eisd.h R processors/ARM/gdb-7.10/include/vms/emh.h R processors/ARM/gdb-7.10/include/vms/eobjrec.h R processors/ARM/gdb-7.10/include/vms/esdf.h R processors/ARM/gdb-7.10/include/vms/esdfm.h R processors/ARM/gdb-7.10/include/vms/esdfv.h R processors/ARM/gdb-7.10/include/vms/esgps.h R processors/ARM/gdb-7.10/include/vms/esrf.h R processors/ARM/gdb-7.10/include/vms/etir.h R processors/ARM/gdb-7.10/include/vms/internal.h R processors/ARM/gdb-7.10/include/vms/lbr.h R processors/ARM/gdb-7.10/include/vms/prt.h R processors/ARM/gdb-7.10/include/vms/shl.h R processors/ARM/gdb-7.10/include/vtv-change-permission.h R processors/ARM/gdb-7.10/include/xregex2.h R processors/ARM/gdb-7.10/include/xtensa-config.h R processors/ARM/gdb-7.10/include/xtensa-isa-internal.h R processors/ARM/gdb-7.10/include/xtensa-isa.h R processors/ARM/gdb-7.10/libiberty/ChangeLog R processors/ARM/gdb-7.10/libiberty/Makefile.in R processors/ARM/gdb-7.10/libiberty/_doprnt.c R processors/ARM/gdb-7.10/libiberty/argv.c R processors/ARM/gdb-7.10/libiberty/asprintf.c R processors/ARM/gdb-7.10/libiberty/choose-temp.c R processors/ARM/gdb-7.10/libiberty/clock.c R processors/ARM/gdb-7.10/libiberty/concat.c R processors/ARM/gdb-7.10/libiberty/config.in R processors/ARM/gdb-7.10/libiberty/configure R processors/ARM/gdb-7.10/libiberty/configure.ac R processors/ARM/gdb-7.10/libiberty/copying-lib.texi R processors/ARM/gdb-7.10/libiberty/cp-demangle.c R processors/ARM/gdb-7.10/libiberty/cp-demangle.h R processors/ARM/gdb-7.10/libiberty/cp-demint.c R processors/ARM/gdb-7.10/libiberty/cplus-dem.c R processors/ARM/gdb-7.10/libiberty/crc32.c R processors/ARM/gdb-7.10/libiberty/d-demangle.c R processors/ARM/gdb-7.10/libiberty/dwarfnames.c R processors/ARM/gdb-7.10/libiberty/dyn-string.c R processors/ARM/gdb-7.10/libiberty/fdmatch.c R processors/ARM/gdb-7.10/libiberty/fibheap.c R processors/ARM/gdb-7.10/libiberty/filename_cmp.c R processors/ARM/gdb-7.10/libiberty/floatformat.c R processors/ARM/gdb-7.10/libiberty/fnmatch.c R processors/ARM/gdb-7.10/libiberty/fopen_unlocked.c R processors/ARM/gdb-7.10/libiberty/functions.texi R processors/ARM/gdb-7.10/libiberty/gather-docs R processors/ARM/gdb-7.10/libiberty/getopt.c R processors/ARM/gdb-7.10/libiberty/getopt1.c R processors/ARM/gdb-7.10/libiberty/getruntime.c R processors/ARM/gdb-7.10/libiberty/hashtab.c R processors/ARM/gdb-7.10/libiberty/hex.c R processors/ARM/gdb-7.10/libiberty/lbasename.c R processors/ARM/gdb-7.10/libiberty/libiberty.texi R processors/ARM/gdb-7.10/libiberty/lrealpath.c R processors/ARM/gdb-7.10/libiberty/maint-tool R processors/ARM/gdb-7.10/libiberty/make-relative-prefix.c R processors/ARM/gdb-7.10/libiberty/make-temp-file.c R processors/ARM/gdb-7.10/libiberty/md5.c R processors/ARM/gdb-7.10/libiberty/memmem.c R processors/ARM/gdb-7.10/libiberty/mempcpy.c R processors/ARM/gdb-7.10/libiberty/mkstemps.c R processors/ARM/gdb-7.10/libiberty/objalloc.c R processors/ARM/gdb-7.10/libiberty/obstack.c R processors/ARM/gdb-7.10/libiberty/obstacks.texi R processors/ARM/gdb-7.10/libiberty/partition.c R processors/ARM/gdb-7.10/libiberty/pex-common.c R processors/ARM/gdb-7.10/libiberty/pex-common.h R processors/ARM/gdb-7.10/libiberty/pex-djgpp.c R processors/ARM/gdb-7.10/libiberty/pex-msdos.c R processors/ARM/gdb-7.10/libiberty/pex-one.c R processors/ARM/gdb-7.10/libiberty/pex-unix.c R processors/ARM/gdb-7.10/libiberty/pex-win32.c R processors/ARM/gdb-7.10/libiberty/pexecute.c R processors/ARM/gdb-7.10/libiberty/physmem.c R processors/ARM/gdb-7.10/libiberty/putenv.c R processors/ARM/gdb-7.10/libiberty/regex.c R processors/ARM/gdb-7.10/libiberty/safe-ctype.c R processors/ARM/gdb-7.10/libiberty/setenv.c R processors/ARM/gdb-7.10/libiberty/setproctitle.c R processors/ARM/gdb-7.10/libiberty/sha1.c R processors/ARM/gdb-7.10/libiberty/simple-object-coff.c R processors/ARM/gdb-7.10/libiberty/simple-object-common.h R processors/ARM/gdb-7.10/libiberty/simple-object-elf.c R processors/ARM/gdb-7.10/libiberty/simple-object-mach-o.c R processors/ARM/gdb-7.10/libiberty/simple-object-xcoff.c R processors/ARM/gdb-7.10/libiberty/simple-object.c R processors/ARM/gdb-7.10/libiberty/snprintf.c R processors/ARM/gdb-7.10/libiberty/sort.c R processors/ARM/gdb-7.10/libiberty/spaces.c R processors/ARM/gdb-7.10/libiberty/splay-tree.c R processors/ARM/gdb-7.10/libiberty/stack-limit.c R processors/ARM/gdb-7.10/libiberty/stpcpy.c R processors/ARM/gdb-7.10/libiberty/stpncpy.c R processors/ARM/gdb-7.10/libiberty/strndup.c R processors/ARM/gdb-7.10/libiberty/strtod.c R processors/ARM/gdb-7.10/libiberty/strverscmp.c R processors/ARM/gdb-7.10/libiberty/testsuite/Makefile.in R processors/ARM/gdb-7.10/libiberty/testsuite/d-demangle-expected R processors/ARM/gdb-7.10/libiberty/testsuite/demangle-expected R processors/ARM/gdb-7.10/libiberty/testsuite/demangler-fuzzer.c R processors/ARM/gdb-7.10/libiberty/testsuite/test-demangle.c R processors/ARM/gdb-7.10/libiberty/testsuite/test-expandargv.c R processors/ARM/gdb-7.10/libiberty/testsuite/test-pexecute.c R processors/ARM/gdb-7.10/libiberty/testsuite/test-strtol.c R processors/ARM/gdb-7.10/libiberty/timeval-utils.c R processors/ARM/gdb-7.10/libiberty/unlink-if-ordinary.c R processors/ARM/gdb-7.10/libiberty/vasprintf.c R processors/ARM/gdb-7.10/libiberty/vfprintf.c R processors/ARM/gdb-7.10/libiberty/vprintf-support.c R processors/ARM/gdb-7.10/libiberty/vprintf-support.h R processors/ARM/gdb-7.10/libiberty/vsnprintf.c R processors/ARM/gdb-7.10/libiberty/vsprintf.c R processors/ARM/gdb-7.10/libiberty/waitpid.c R processors/ARM/gdb-7.10/libiberty/xasprintf.c R processors/ARM/gdb-7.10/libiberty/xexit.c R processors/ARM/gdb-7.10/libiberty/xmalloc.c R processors/ARM/gdb-7.10/libiberty/xmemdup.c R processors/ARM/gdb-7.10/libiberty/xstrndup.c R processors/ARM/gdb-7.10/libiberty/xvasprintf.c R processors/ARM/gdb-7.10/md5.sum R processors/ARM/gdb-7.10/missing R processors/ARM/gdb-7.10/mkdep R processors/ARM/gdb-7.10/opcodes/ChangeLog R processors/ARM/gdb-7.10/opcodes/ChangeLog-0001 R processors/ARM/gdb-7.10/opcodes/ChangeLog-0203 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2004 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2005 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2006 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2007 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2008 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2009 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2010 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2011 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2012 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2013 R processors/ARM/gdb-7.10/opcodes/ChangeLog-2014 R processors/ARM/gdb-7.10/opcodes/ChangeLog-9297 R processors/ARM/gdb-7.10/opcodes/ChangeLog-9899 R processors/ARM/gdb-7.10/opcodes/MAINTAINERS R processors/ARM/gdb-7.10/opcodes/Makefile.am R processors/ARM/gdb-7.10/opcodes/Makefile.in R processors/ARM/gdb-7.10/opcodes/aarch64-asm-2.c R processors/ARM/gdb-7.10/opcodes/aarch64-asm.c R processors/ARM/gdb-7.10/opcodes/aarch64-asm.h R processors/ARM/gdb-7.10/opcodes/aarch64-dis-2.c R processors/ARM/gdb-7.10/opcodes/aarch64-dis.c R processors/ARM/gdb-7.10/opcodes/aarch64-dis.h R processors/ARM/gdb-7.10/opcodes/aarch64-gen.c R processors/ARM/gdb-7.10/opcodes/aarch64-opc-2.c R processors/ARM/gdb-7.10/opcodes/aarch64-opc.c R processors/ARM/gdb-7.10/opcodes/aarch64-opc.h R processors/ARM/gdb-7.10/opcodes/aarch64-tbl.h R processors/ARM/gdb-7.10/opcodes/aclocal.m4 R processors/ARM/gdb-7.10/opcodes/alpha-dis.c R processors/ARM/gdb-7.10/opcodes/alpha-opc.c R processors/ARM/gdb-7.10/opcodes/arc-dis.c R processors/ARM/gdb-7.10/opcodes/arc-dis.h R processors/ARM/gdb-7.10/opcodes/arc-ext.c R processors/ARM/gdb-7.10/opcodes/arc-ext.h R processors/ARM/gdb-7.10/opcodes/arc-opc.c R processors/ARM/gdb-7.10/opcodes/arm-dis.c R processors/ARM/gdb-7.10/opcodes/avr-dis.c R processors/ARM/gdb-7.10/opcodes/bfin-dis.c R processors/ARM/gdb-7.10/opcodes/cgen-asm.c R processors/ARM/gdb-7.10/opcodes/cgen-asm.in R processors/ARM/gdb-7.10/opcodes/cgen-bitset.c R processors/ARM/gdb-7.10/opcodes/cgen-dis.c R processors/ARM/gdb-7.10/opcodes/cgen-dis.in R processors/ARM/gdb-7.10/opcodes/cgen-ibld.in R processors/ARM/gdb-7.10/opcodes/cgen-opc.c R processors/ARM/gdb-7.10/opcodes/cgen.sh R processors/ARM/gdb-7.10/opcodes/configure R processors/ARM/gdb-7.10/opcodes/configure.ac R processors/ARM/gdb-7.10/opcodes/configure.com R processors/ARM/gdb-7.10/opcodes/cr16-dis.c R processors/ARM/gdb-7.10/opcodes/cr16-opc.c R processors/ARM/gdb-7.10/opcodes/cris-dis.c R processors/ARM/gdb-7.10/opcodes/cris-opc.c R processors/ARM/gdb-7.10/opcodes/crx-dis.c R processors/ARM/gdb-7.10/opcodes/crx-opc.c R processors/ARM/gdb-7.10/opcodes/d10v-dis.c R processors/ARM/gdb-7.10/opcodes/d10v-opc.c R processors/ARM/gdb-7.10/opcodes/d30v-dis.c R processors/ARM/gdb-7.10/opcodes/d30v-opc.c R processors/ARM/gdb-7.10/opcodes/dis-buf.c R processors/ARM/gdb-7.10/opcodes/dis-init.c R processors/ARM/gdb-7.10/opcodes/disassemble.c R processors/ARM/gdb-7.10/opcodes/dlx-dis.c R processors/ARM/gdb-7.10/opcodes/epiphany-asm.c R processors/ARM/gdb-7.10/opcodes/epiphany-desc.c R processors/ARM/gdb-7.10/opcodes/epiphany-desc.h R processors/ARM/gdb-7.10/opcodes/epiphany-dis.c R processors/ARM/gdb-7.10/opcodes/epiphany-ibld.c R processors/ARM/gdb-7.10/opcodes/epiphany-opc.c R processors/ARM/gdb-7.10/opcodes/epiphany-opc.h R processors/ARM/gdb-7.10/opcodes/fr30-asm.c R processors/ARM/gdb-7.10/opcodes/fr30-desc.c R processors/ARM/gdb-7.10/opcodes/fr30-desc.h R processors/ARM/gdb-7.10/opcodes/fr30-dis.c R processors/ARM/gdb-7.10/opcodes/fr30-ibld.c R processors/ARM/gdb-7.10/opcodes/fr30-opc.c R processors/ARM/gdb-7.10/opcodes/fr30-opc.h R processors/ARM/gdb-7.10/opcodes/frv-asm.c R processors/ARM/gdb-7.10/opcodes/frv-desc.c R processors/ARM/gdb-7.10/opcodes/frv-desc.h R processors/ARM/gdb-7.10/opcodes/frv-dis.c R processors/ARM/gdb-7.10/opcodes/frv-ibld.c R processors/ARM/gdb-7.10/opcodes/frv-opc.c R processors/ARM/gdb-7.10/opcodes/frv-opc.h R processors/ARM/gdb-7.10/opcodes/ft32-dis.c R processors/ARM/gdb-7.10/opcodes/ft32-opc.c R processors/ARM/gdb-7.10/opcodes/h8300-dis.c R processors/ARM/gdb-7.10/opcodes/h8500-dis.c R processors/ARM/gdb-7.10/opcodes/h8500-opc.h R processors/ARM/gdb-7.10/opcodes/hppa-dis.c R processors/ARM/gdb-7.10/opcodes/i370-dis.c R processors/ARM/gdb-7.10/opcodes/i370-opc.c R processors/ARM/gdb-7.10/opcodes/i386-dis-evex.h R processors/ARM/gdb-7.10/opcodes/i386-dis.c R processors/ARM/gdb-7.10/opcodes/i386-gen.c R processors/ARM/gdb-7.10/opcodes/i386-init.h R processors/ARM/gdb-7.10/opcodes/i386-opc.c R processors/ARM/gdb-7.10/opcodes/i386-opc.h R processors/ARM/gdb-7.10/opcodes/i386-opc.tbl R processors/ARM/gdb-7.10/opcodes/i386-reg.tbl R processors/ARM/gdb-7.10/opcodes/i386-tbl.h R processors/ARM/gdb-7.10/opcodes/i860-dis.c R processors/ARM/gdb-7.10/opcodes/i960-dis.c R processors/ARM/gdb-7.10/opcodes/ia64-asmtab.c R processors/ARM/gdb-7.10/opcodes/ia64-asmtab.h R processors/ARM/gdb-7.10/opcodes/ia64-dis.c R processors/ARM/gdb-7.10/opcodes/ia64-gen.c R processors/ARM/gdb-7.10/opcodes/ia64-opc-a.c R processors/ARM/gdb-7.10/opcodes/ia64-opc-b.c R processors/ARM/gdb-7.10/opcodes/ia64-opc-d.c R processors/ARM/gdb-7.10/opcodes/ia64-opc-f.c R processors/ARM/gdb-7.10/opcodes/ia64-opc-i.c R processors/ARM/gdb-7.10/opcodes/ia64-opc-m.c R processors/ARM/gdb-7.10/opcodes/ia64-opc-x.c R processors/ARM/gdb-7.10/opcodes/ia64-opc.c R processors/ARM/gdb-7.10/opcodes/ia64-opc.h R processors/ARM/gdb-7.10/opcodes/ip2k-asm.c R processors/ARM/gdb-7.10/opcodes/ip2k-desc.c R processors/ARM/gdb-7.10/opcodes/ip2k-desc.h R processors/ARM/gdb-7.10/opcodes/ip2k-dis.c R processors/ARM/gdb-7.10/opcodes/ip2k-ibld.c R processors/ARM/gdb-7.10/opcodes/ip2k-opc.c R processors/ARM/gdb-7.10/opcodes/ip2k-opc.h R processors/ARM/gdb-7.10/opcodes/iq2000-asm.c R processors/ARM/gdb-7.10/opcodes/iq2000-desc.c R processors/ARM/gdb-7.10/opcodes/iq2000-desc.h R processors/ARM/gdb-7.10/opcodes/iq2000-dis.c R processors/ARM/gdb-7.10/opcodes/iq2000-ibld.c R processors/ARM/gdb-7.10/opcodes/iq2000-opc.c R processors/ARM/gdb-7.10/opcodes/iq2000-opc.h R processors/ARM/gdb-7.10/opcodes/lm32-asm.c R processors/ARM/gdb-7.10/opcodes/lm32-desc.c R processors/ARM/gdb-7.10/opcodes/lm32-desc.h R processors/ARM/gdb-7.10/opcodes/lm32-dis.c R processors/ARM/gdb-7.10/opcodes/lm32-ibld.c R processors/ARM/gdb-7.10/opcodes/lm32-opc.c R processors/ARM/gdb-7.10/opcodes/lm32-opc.h R processors/ARM/gdb-7.10/opcodes/lm32-opinst.c R processors/ARM/gdb-7.10/opcodes/m10200-dis.c R processors/ARM/gdb-7.10/opcodes/m10200-opc.c R processors/ARM/gdb-7.10/opcodes/m10300-dis.c R processors/ARM/gdb-7.10/opcodes/m10300-opc.c R processors/ARM/gdb-7.10/opcodes/m32c-asm.c R processors/ARM/gdb-7.10/opcodes/m32c-desc.c R processors/ARM/gdb-7.10/opcodes/m32c-desc.h R processors/ARM/gdb-7.10/opcodes/m32c-dis.c R processors/ARM/gdb-7.10/opcodes/m32c-ibld.c R processors/ARM/gdb-7.10/opcodes/m32c-opc.c R processors/ARM/gdb-7.10/opcodes/m32c-opc.h R processors/ARM/gdb-7.10/opcodes/m32r-asm.c R processors/ARM/gdb-7.10/opcodes/m32r-desc.c R processors/ARM/gdb-7.10/opcodes/m32r-desc.h R processors/ARM/gdb-7.10/opcodes/m32r-dis.c R processors/ARM/gdb-7.10/opcodes/m32r-ibld.c R processors/ARM/gdb-7.10/opcodes/m32r-opc.c R processors/ARM/gdb-7.10/opcodes/m32r-opc.h R processors/ARM/gdb-7.10/opcodes/m32r-opinst.c R processors/ARM/gdb-7.10/opcodes/m68hc11-dis.c R processors/ARM/gdb-7.10/opcodes/m68hc11-opc.c R processors/ARM/gdb-7.10/opcodes/m68k-dis.c R processors/ARM/gdb-7.10/opcodes/m68k-opc.c R processors/ARM/gdb-7.10/opcodes/m88k-dis.c R processors/ARM/gdb-7.10/opcodes/makefile.vms R processors/ARM/gdb-7.10/opcodes/mcore-dis.c R processors/ARM/gdb-7.10/opcodes/mcore-opc.h R processors/ARM/gdb-7.10/opcodes/mep-asm.c R processors/ARM/gdb-7.10/opcodes/mep-desc.c R processors/ARM/gdb-7.10/opcodes/mep-desc.h R processors/ARM/gdb-7.10/opcodes/mep-dis.c R processors/ARM/gdb-7.10/opcodes/mep-ibld.c R processors/ARM/gdb-7.10/opcodes/mep-opc.c R processors/ARM/gdb-7.10/opcodes/mep-opc.h R processors/ARM/gdb-7.10/opcodes/metag-dis.c R processors/ARM/gdb-7.10/opcodes/microblaze-dis.c R processors/ARM/gdb-7.10/opcodes/microblaze-dis.h R processors/ARM/gdb-7.10/opcodes/microblaze-opc.h R processors/ARM/gdb-7.10/opcodes/microblaze-opcm.h R processors/ARM/gdb-7.10/opcodes/micromips-opc.c R processors/ARM/gdb-7.10/opcodes/mips-dis.c R processors/ARM/gdb-7.10/opcodes/mips-formats.h R processors/ARM/gdb-7.10/opcodes/mips-opc.c R processors/ARM/gdb-7.10/opcodes/mips16-opc.c R processors/ARM/gdb-7.10/opcodes/mmix-dis.c R processors/ARM/gdb-7.10/opcodes/mmix-opc.c R processors/ARM/gdb-7.10/opcodes/moxie-dis.c R processors/ARM/gdb-7.10/opcodes/moxie-opc.c R processors/ARM/gdb-7.10/opcodes/msp430-decode.c R processors/ARM/gdb-7.10/opcodes/msp430-decode.opc R processors/ARM/gdb-7.10/opcodes/msp430-dis.c R processors/ARM/gdb-7.10/opcodes/mt-asm.c R processors/ARM/gdb-7.10/opcodes/mt-desc.c R processors/ARM/gdb-7.10/opcodes/mt-desc.h R processors/ARM/gdb-7.10/opcodes/mt-dis.c R processors/ARM/gdb-7.10/opcodes/mt-ibld.c R processors/ARM/gdb-7.10/opcodes/mt-opc.c R processors/ARM/gdb-7.10/opcodes/mt-opc.h R processors/ARM/gdb-7.10/opcodes/nds32-asm.c R processors/ARM/gdb-7.10/opcodes/nds32-asm.h R processors/ARM/gdb-7.10/opcodes/nds32-dis.c R processors/ARM/gdb-7.10/opcodes/nds32-opc.h R processors/ARM/gdb-7.10/opcodes/nios2-dis.c R processors/ARM/gdb-7.10/opcodes/nios2-opc.c R processors/ARM/gdb-7.10/opcodes/ns32k-dis.c R processors/ARM/gdb-7.10/opcodes/opc2c.c R processors/ARM/gdb-7.10/opcodes/opintl.h R processors/ARM/gdb-7.10/opcodes/or1k-asm.c R processors/ARM/gdb-7.10/opcodes/or1k-desc.c R processors/ARM/gdb-7.10/opcodes/or1k-desc.h R processors/ARM/gdb-7.10/opcodes/or1k-dis.c R processors/ARM/gdb-7.10/opcodes/or1k-ibld.c R processors/ARM/gdb-7.10/opcodes/or1k-opc.c R processors/ARM/gdb-7.10/opcodes/or1k-opc.h R processors/ARM/gdb-7.10/opcodes/or1k-opinst.c R processors/ARM/gdb-7.10/opcodes/pdp11-dis.c R processors/ARM/gdb-7.10/opcodes/pdp11-opc.c R processors/ARM/gdb-7.10/opcodes/pj-dis.c R processors/ARM/gdb-7.10/opcodes/pj-opc.c R processors/ARM/gdb-7.10/opcodes/po/Make-in R processors/ARM/gdb-7.10/opcodes/po/POTFILES.in R processors/ARM/gdb-7.10/opcodes/po/da.gmo R processors/ARM/gdb-7.10/opcodes/po/da.po R processors/ARM/gdb-7.10/opcodes/po/de.gmo R processors/ARM/gdb-7.10/opcodes/po/de.po R processors/ARM/gdb-7.10/opcodes/po/es.gmo R processors/ARM/gdb-7.10/opcodes/po/es.po R processors/ARM/gdb-7.10/opcodes/po/fi.gmo R processors/ARM/gdb-7.10/opcodes/po/fi.po R processors/ARM/gdb-7.10/opcodes/po/fr.gmo R processors/ARM/gdb-7.10/opcodes/po/fr.po R processors/ARM/gdb-7.10/opcodes/po/ga.gmo R processors/ARM/gdb-7.10/opcodes/po/ga.po R processors/ARM/gdb-7.10/opcodes/po/id.gmo R processors/ARM/gdb-7.10/opcodes/po/id.po R processors/ARM/gdb-7.10/opcodes/po/it.gmo R processors/ARM/gdb-7.10/opcodes/po/it.po R processors/ARM/gdb-7.10/opcodes/po/nl.gmo R processors/ARM/gdb-7.10/opcodes/po/nl.po R processors/ARM/gdb-7.10/opcodes/po/opcodes.pot R processors/ARM/gdb-7.10/opcodes/po/pt_BR.gmo R processors/ARM/gdb-7.10/opcodes/po/pt_BR.po R processors/ARM/gdb-7.10/opcodes/po/ro.gmo R processors/ARM/gdb-7.10/opcodes/po/ro.po R processors/ARM/gdb-7.10/opcodes/po/sv.gmo R processors/ARM/gdb-7.10/opcodes/po/sv.po R processors/ARM/gdb-7.10/opcodes/po/tr.gmo R processors/ARM/gdb-7.10/opcodes/po/tr.po R processors/ARM/gdb-7.10/opcodes/po/uk.gmo R processors/ARM/gdb-7.10/opcodes/po/uk.po R processors/ARM/gdb-7.10/opcodes/po/vi.gmo R processors/ARM/gdb-7.10/opcodes/po/vi.po R processors/ARM/gdb-7.10/opcodes/po/zh_CN.gmo R processors/ARM/gdb-7.10/opcodes/po/zh_CN.po R processors/ARM/gdb-7.10/opcodes/ppc-dis.c R processors/ARM/gdb-7.10/opcodes/ppc-opc.c R processors/ARM/gdb-7.10/opcodes/rl78-decode.c R processors/ARM/gdb-7.10/opcodes/rl78-decode.opc R processors/ARM/gdb-7.10/opcodes/rl78-dis.c R processors/ARM/gdb-7.10/opcodes/rx-decode.c R processors/ARM/gdb-7.10/opcodes/rx-decode.opc R processors/ARM/gdb-7.10/opcodes/rx-dis.c R processors/ARM/gdb-7.10/opcodes/s390-dis.c R processors/ARM/gdb-7.10/opcodes/s390-mkopc.c R processors/ARM/gdb-7.10/opcodes/s390-opc.c R processors/ARM/gdb-7.10/opcodes/s390-opc.txt R processors/ARM/gdb-7.10/opcodes/score-dis.c R processors/ARM/gdb-7.10/opcodes/score-opc.h R processors/ARM/gdb-7.10/opcodes/score7-dis.c R processors/ARM/gdb-7.10/opcodes/sh-dis.c R processors/ARM/gdb-7.10/opcodes/sh-opc.h R processors/ARM/gdb-7.10/opcodes/sh64-dis.c R processors/ARM/gdb-7.10/opcodes/sh64-opc.c R processors/ARM/gdb-7.10/opcodes/sh64-opc.h R processors/ARM/gdb-7.10/opcodes/sparc-dis.c R processors/ARM/gdb-7.10/opcodes/sparc-opc.c R processors/ARM/gdb-7.10/opcodes/spu-dis.c R processors/ARM/gdb-7.10/opcodes/spu-opc.c R processors/ARM/gdb-7.10/opcodes/sysdep.h R processors/ARM/gdb-7.10/opcodes/tic30-dis.c R processors/ARM/gdb-7.10/opcodes/tic4x-dis.c R processors/ARM/gdb-7.10/opcodes/tic54x-dis.c R processors/ARM/gdb-7.10/opcodes/tic54x-opc.c R processors/ARM/gdb-7.10/opcodes/tic6x-dis.c R processors/ARM/gdb-7.10/opcodes/tic80-dis.c R processors/ARM/gdb-7.10/opcodes/tic80-opc.c R processors/ARM/gdb-7.10/opcodes/tilegx-dis.c R processors/ARM/gdb-7.10/opcodes/tilegx-opc.c R processors/ARM/gdb-7.10/opcodes/tilepro-dis.c R processors/ARM/gdb-7.10/opcodes/tilepro-opc.c R processors/ARM/gdb-7.10/opcodes/v850-dis.c R processors/ARM/gdb-7.10/opcodes/v850-opc.c R processors/ARM/gdb-7.10/opcodes/vax-dis.c R processors/ARM/gdb-7.10/opcodes/visium-dis.c R processors/ARM/gdb-7.10/opcodes/visium-opc.c R processors/ARM/gdb-7.10/opcodes/w65-dis.c R processors/ARM/gdb-7.10/opcodes/w65-opc.h R processors/ARM/gdb-7.10/opcodes/xc16x-asm.c R processors/ARM/gdb-7.10/opcodes/xc16x-desc.c R processors/ARM/gdb-7.10/opcodes/xc16x-desc.h R processors/ARM/gdb-7.10/opcodes/xc16x-dis.c R processors/ARM/gdb-7.10/opcodes/xc16x-ibld.c R processors/ARM/gdb-7.10/opcodes/xc16x-opc.c R processors/ARM/gdb-7.10/opcodes/xc16x-opc.h R processors/ARM/gdb-7.10/opcodes/xgate-dis.c R processors/ARM/gdb-7.10/opcodes/xgate-opc.c R processors/ARM/gdb-7.10/opcodes/xstormy16-asm.c R processors/ARM/gdb-7.10/opcodes/xstormy16-desc.c R processors/ARM/gdb-7.10/opcodes/xstormy16-desc.h R processors/ARM/gdb-7.10/opcodes/xstormy16-dis.c R processors/ARM/gdb-7.10/opcodes/xstormy16-ibld.c R processors/ARM/gdb-7.10/opcodes/xstormy16-opc.c R processors/ARM/gdb-7.10/opcodes/xstormy16-opc.h R processors/ARM/gdb-7.10/opcodes/xtensa-dis.c R processors/ARM/gdb-7.10/opcodes/z80-dis.c R processors/ARM/gdb-7.10/opcodes/z8k-dis.c R processors/ARM/gdb-7.10/opcodes/z8k-opc.h R processors/ARM/gdb-7.10/opcodes/z8kgen.c R processors/ARM/gdb-7.10/sim/.gitignore R processors/ARM/gdb-7.10/sim/ChangeLog R processors/ARM/gdb-7.10/sim/MAINTAINERS R processors/ARM/gdb-7.10/sim/Makefile.in R processors/ARM/gdb-7.10/sim/README-HACKING R processors/ARM/gdb-7.10/sim/arm/ChangeLog R processors/ARM/gdb-7.10/sim/arm/GdbARMPlugin.h R processors/ARM/gdb-7.10/sim/arm/Makefile.in R processors/ARM/gdb-7.10/sim/arm/aclocal.m4 R processors/ARM/gdb-7.10/sim/arm/armcopro.c R processors/ARM/gdb-7.10/sim/arm/armdefs.h R processors/ARM/gdb-7.10/sim/arm/armemu.c R processors/ARM/gdb-7.10/sim/arm/armfpe.h R processors/ARM/gdb-7.10/sim/arm/arminit.c R processors/ARM/gdb-7.10/sim/arm/armopts.h R processors/ARM/gdb-7.10/sim/arm/armos.c R processors/ARM/gdb-7.10/sim/arm/armos.h R processors/ARM/gdb-7.10/sim/arm/armrdi.c R processors/ARM/gdb-7.10/sim/arm/armsupp.c R processors/ARM/gdb-7.10/sim/arm/armulmem.c R processors/ARM/gdb-7.10/sim/arm/armvirt.c R processors/ARM/gdb-7.10/sim/arm/bag.c R processors/ARM/gdb-7.10/sim/arm/bag.h R processors/ARM/gdb-7.10/sim/arm/communicate.c R processors/ARM/gdb-7.10/sim/arm/communicate.h R processors/ARM/gdb-7.10/sim/arm/config.in R processors/ARM/gdb-7.10/sim/arm/configure R processors/ARM/gdb-7.10/sim/arm/configure.ac R processors/ARM/gdb-7.10/sim/arm/dbg_conf.h R processors/ARM/gdb-7.10/sim/arm/dbg_cp.h R processors/ARM/gdb-7.10/sim/arm/dbg_hif.h R processors/ARM/gdb-7.10/sim/arm/dbg_rdi.h R processors/ARM/gdb-7.10/sim/arm/gdbhost.c R processors/ARM/gdb-7.10/sim/arm/gdbhost.h R processors/ARM/gdb-7.10/sim/arm/hw-config.h R processors/ARM/gdb-7.10/sim/arm/iwmmxt.c R processors/ARM/gdb-7.10/sim/arm/iwmmxt.h R processors/ARM/gdb-7.10/sim/arm/kid.c R processors/ARM/gdb-7.10/sim/arm/libtool R processors/ARM/gdb-7.10/sim/arm/main.c R processors/ARM/gdb-7.10/sim/arm/maverick.c R processors/ARM/gdb-7.10/sim/arm/parent.c R processors/ARM/gdb-7.10/sim/arm/sim-main.h R processors/ARM/gdb-7.10/sim/arm/thumbemu.c R processors/ARM/gdb-7.10/sim/arm/version.c R processors/ARM/gdb-7.10/sim/arm/wrapper.c R processors/ARM/gdb-7.10/sim/avr/ChangeLog R processors/ARM/gdb-7.10/sim/avr/Makefile.in R processors/ARM/gdb-7.10/sim/avr/aclocal.m4 R processors/ARM/gdb-7.10/sim/avr/config.in R processors/ARM/gdb-7.10/sim/avr/configure R processors/ARM/gdb-7.10/sim/avr/configure.ac R processors/ARM/gdb-7.10/sim/avr/interp.c R processors/ARM/gdb-7.10/sim/avr/sim-main.h R processors/ARM/gdb-7.10/sim/bfin/ChangeLog R processors/ARM/gdb-7.10/sim/bfin/Makefile.in R processors/ARM/gdb-7.10/sim/bfin/TODO R processors/ARM/gdb-7.10/sim/bfin/aclocal.m4 R processors/ARM/gdb-7.10/sim/bfin/bfin-sim.c R processors/ARM/gdb-7.10/sim/bfin/bfin-sim.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/all.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf50x-0.0.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf51x-0.0.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf51x-0.1.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf51x-0.2.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf526-0.0.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf526-0.1.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf526-0.2.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf527-0.0.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf527-0.1.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf527-0.2.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf533-0.1.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf533-0.2.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf533-0.3.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf537-0.0.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf537-0.1.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf537-0.3.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf538-0.0.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf54x-0.0.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf54x-0.1.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf54x-0.2.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf54x-0.4.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf54x_l1-0.0.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf54x_l1-0.1.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf54x_l1-0.2.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf54x_l1-0.4.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf561-0.5.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf59x-0.0.h R processors/ARM/gdb-7.10/sim/bfin/bfroms/bf59x_l1-0.1.h R processors/ARM/gdb-7.10/sim/bfin/config.in R processors/ARM/gdb-7.10/sim/bfin/configure R processors/ARM/gdb-7.10/sim/bfin/configure.ac R processors/ARM/gdb-7.10/sim/bfin/devices.c R processors/ARM/gdb-7.10/sim/bfin/devices.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_cec.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_cec.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ctimer.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ctimer.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_dma.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_dma.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_dmac.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_dmac.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ebiu_amc.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ebiu_amc.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ebiu_ddrc.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ebiu_ddrc.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ebiu_sdc.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ebiu_sdc.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_emac.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_emac.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_eppi.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_eppi.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_evt.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_evt.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_gpio.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_gpio.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_gpio2.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_gpio2.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_gptimer.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_gptimer.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_jtag.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_jtag.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_mmu.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_mmu.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_nfc.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_nfc.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_otp.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_otp.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_pfmon.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_pfmon.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_pint.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_pint.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_pll.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_pll.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ppi.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_ppi.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_rtc.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_rtc.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_sic.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_sic.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_spi.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_spi.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_trace.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_trace.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_twi.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_twi.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_uart.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_uart.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_uart2.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_uart2.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_wdog.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_wdog.h R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_wp.c R processors/ARM/gdb-7.10/sim/bfin/dv-bfin_wp.h R processors/ARM/gdb-7.10/sim/bfin/dv-eth_phy.c R processors/ARM/gdb-7.10/sim/bfin/gui.c R processors/ARM/gdb-7.10/sim/bfin/gui.h R processors/ARM/gdb-7.10/sim/bfin/insn_list.def R processors/ARM/gdb-7.10/sim/bfin/interp.c R processors/ARM/gdb-7.10/sim/bfin/linux-fixed-code.h R processors/ARM/gdb-7.10/sim/bfin/linux-fixed-code.s R processors/ARM/gdb-7.10/sim/bfin/linux-targ-map.h R processors/ARM/gdb-7.10/sim/bfin/machs.c R processors/ARM/gdb-7.10/sim/bfin/machs.h R processors/ARM/gdb-7.10/sim/bfin/proc_list.def R processors/ARM/gdb-7.10/sim/bfin/sim-main.h R processors/ARM/gdb-7.10/sim/bfin/tconfig.h R processors/ARM/gdb-7.10/sim/common/ChangeLog R processors/ARM/gdb-7.10/sim/common/Make-common.in R processors/ARM/gdb-7.10/sim/common/Makefile.in R processors/ARM/gdb-7.10/sim/common/acinclude.m4 R processors/ARM/gdb-7.10/sim/common/aclocal.m4 R processors/ARM/gdb-7.10/sim/common/callback.c R processors/ARM/gdb-7.10/sim/common/cgen-accfp.c R processors/ARM/gdb-7.10/sim/common/cgen-cpu.h R processors/ARM/gdb-7.10/sim/common/cgen-defs.h R processors/ARM/gdb-7.10/sim/common/cgen-engine.h R processors/ARM/gdb-7.10/sim/common/cgen-fpu.h R processors/ARM/gdb-7.10/sim/common/cgen-mem.h R processors/ARM/gdb-7.10/sim/common/cgen-ops.h R processors/ARM/gdb-7.10/sim/common/cgen-par.c R processors/ARM/gdb-7.10/sim/common/cgen-par.h R processors/ARM/gdb-7.10/sim/common/cgen-run.c R processors/ARM/gdb-7.10/sim/common/cgen-scache.c R processors/ARM/gdb-7.10/sim/common/cgen-scache.h R processors/ARM/gdb-7.10/sim/common/cgen-sim.h R processors/ARM/gdb-7.10/sim/common/cgen-trace.c R processors/ARM/gdb-7.10/sim/common/cgen-trace.h R processors/ARM/gdb-7.10/sim/common/cgen-types.h R processors/ARM/gdb-7.10/sim/common/cgen-utils.c R processors/ARM/gdb-7.10/sim/common/config.in R processors/ARM/gdb-7.10/sim/common/configure R processors/ARM/gdb-7.10/sim/common/configure.ac R processors/ARM/gdb-7.10/sim/common/dv-cfi.c R processors/ARM/gdb-7.10/sim/common/dv-cfi.h R processors/ARM/gdb-7.10/sim/common/dv-core.c R processors/ARM/gdb-7.10/sim/common/dv-glue.c R processors/ARM/gdb-7.10/sim/common/dv-pal.c R processors/ARM/gdb-7.10/sim/common/dv-sockser.c R processors/ARM/gdb-7.10/sim/common/dv-sockser.h R processors/ARM/gdb-7.10/sim/common/genmloop.sh R processors/ARM/gdb-7.10/sim/common/gentmap.c R processors/ARM/gdb-7.10/sim/common/hw-alloc.c R processors/ARM/gdb-7.10/sim/common/hw-alloc.h R processors/ARM/gdb-7.10/sim/common/hw-base.c R processors/ARM/gdb-7.10/sim/common/hw-base.h R processors/ARM/gdb-7.10/sim/common/hw-device.c R processors/ARM/gdb-7.10/sim/common/hw-device.h R processors/ARM/gdb-7.10/sim/common/hw-events.c R processors/ARM/gdb-7.10/sim/common/hw-events.h R processors/ARM/gdb-7.10/sim/common/hw-handles.c R processors/ARM/gdb-7.10/sim/common/hw-handles.h R processors/ARM/gdb-7.10/sim/common/hw-instances.c R processors/ARM/gdb-7.10/sim/common/hw-instances.h R processors/ARM/gdb-7.10/sim/common/hw-main.h R processors/ARM/gdb-7.10/sim/common/hw-ports.c R processors/ARM/gdb-7.10/sim/common/hw-ports.h R processors/ARM/gdb-7.10/sim/common/hw-properties.c R processors/ARM/gdb-7.10/sim/common/hw-properties.h R processors/ARM/gdb-7.10/sim/common/hw-tree.c R processors/ARM/gdb-7.10/sim/common/hw-tree.h R processors/ARM/gdb-7.10/sim/common/libtool R processors/ARM/gdb-7.10/sim/common/nrun.c R processors/ARM/gdb-7.10/sim/common/run.1 R processors/ARM/gdb-7.10/sim/common/sim-abort.c R processors/ARM/gdb-7.10/sim/common/sim-alu.h R processors/ARM/gdb-7.10/sim/common/sim-arange.c R processors/ARM/gdb-7.10/sim/common/sim-arange.h R processors/ARM/gdb-7.10/sim/common/sim-assert.h R processors/ARM/gdb-7.10/sim/common/sim-base.h R processors/ARM/gdb-7.10/sim/common/sim-basics.h R processors/ARM/gdb-7.10/sim/common/sim-bits.c R processors/ARM/gdb-7.10/sim/common/sim-bits.h R processors/ARM/gdb-7.10/sim/common/sim-command.c R processors/ARM/gdb-7.10/sim/common/sim-config.c R processors/ARM/gdb-7.10/sim/common/sim-config.h R processors/ARM/gdb-7.10/sim/common/sim-core.c R processors/ARM/gdb-7.10/sim/common/sim-core.h R processors/ARM/gdb-7.10/sim/common/sim-cpu.c R processors/ARM/gdb-7.10/sim/common/sim-cpu.h R processors/ARM/gdb-7.10/sim/common/sim-endian.c R processors/ARM/gdb-7.10/sim/common/sim-endian.h R processors/ARM/gdb-7.10/sim/common/sim-engine.c R processors/ARM/gdb-7.10/sim/common/sim-engine.h R processors/ARM/gdb-7.10/sim/common/sim-events.c R processors/ARM/gdb-7.10/sim/common/sim-events.h R processors/ARM/gdb-7.10/sim/common/sim-fpu.c R processors/ARM/gdb-7.10/sim/common/sim-fpu.h R processors/ARM/gdb-7.10/sim/common/sim-hload.c R processors/ARM/gdb-7.10/sim/common/sim-hrw.c R processors/ARM/gdb-7.10/sim/common/sim-hw.c R processors/ARM/gdb-7.10/sim/common/sim-hw.h R processors/ARM/gdb-7.10/sim/common/sim-info.c R processors/ARM/gdb-7.10/sim/common/sim-inline.c R processors/ARM/gdb-7.10/sim/common/sim-inline.h R processors/ARM/gdb-7.10/sim/common/sim-io.c R processors/ARM/gdb-7.10/sim/common/sim-io.h R processors/ARM/gdb-7.10/sim/common/sim-load.c R processors/ARM/gdb-7.10/sim/common/sim-memopt.c R processors/ARM/gdb-7.10/sim/common/sim-memopt.h R processors/ARM/gdb-7.10/sim/common/sim-model.c R processors/ARM/gdb-7.10/sim/common/sim-model.h R processors/ARM/gdb-7.10/sim/common/sim-module.c R processors/ARM/gdb-7.10/sim/common/sim-module.h R processors/ARM/gdb-7.10/sim/common/sim-n-bits.h R processors/ARM/gdb-7.10/sim/common/sim-n-core.h R processors/ARM/gdb-7.10/sim/common/sim-n-endian.h R processors/ARM/gdb-7.10/sim/common/sim-options.c R processors/ARM/gdb-7.10/sim/common/sim-options.h R processors/ARM/gdb-7.10/sim/common/sim-profile.c R processors/ARM/gdb-7.10/sim/common/sim-profile.h R processors/ARM/gdb-7.10/sim/common/sim-reason.c R processors/ARM/gdb-7.10/sim/common/sim-reg.c R processors/ARM/gdb-7.10/sim/common/sim-resume.c R processors/ARM/gdb-7.10/sim/common/sim-run.c R processors/ARM/gdb-7.10/sim/common/sim-signal.c R processors/ARM/gdb-7.10/sim/common/sim-signal.h R processors/ARM/gdb-7.10/sim/common/sim-stop.c R processors/ARM/gdb-7.10/sim/common/sim-syscall.c R processors/ARM/gdb-7.10/sim/common/sim-syscall.h R processors/ARM/gdb-7.10/sim/common/sim-trace.c R processors/ARM/gdb-7.10/sim/common/sim-trace.h R processors/ARM/gdb-7.10/sim/common/sim-types.h R processors/ARM/gdb-7.10/sim/common/sim-utils.c R processors/ARM/gdb-7.10/sim/common/sim-utils.h R processors/ARM/gdb-7.10/sim/common/sim-watch.c R processors/ARM/gdb-7.10/sim/common/sim-watch.h R processors/ARM/gdb-7.10/sim/common/syscall.c R processors/ARM/gdb-7.10/sim/common/tconfig.h R processors/ARM/gdb-7.10/sim/common/version.h R processors/ARM/gdb-7.10/sim/configure R processors/ARM/gdb-7.10/sim/configure.ac R processors/ARM/gdb-7.10/sim/configure.tgt R processors/ARM/gdb-7.10/sim/cr16/ChangeLog R processors/ARM/gdb-7.10/sim/cr16/Makefile.in R processors/ARM/gdb-7.10/sim/cr16/aclocal.m4 R processors/ARM/gdb-7.10/sim/cr16/config.in R processors/ARM/gdb-7.10/sim/cr16/configure R processors/ARM/gdb-7.10/sim/cr16/configure.ac R processors/ARM/gdb-7.10/sim/cr16/cr16_sim.h R processors/ARM/gdb-7.10/sim/cr16/endian.c R processors/ARM/gdb-7.10/sim/cr16/gencode.c R processors/ARM/gdb-7.10/sim/cr16/interp.c R processors/ARM/gdb-7.10/sim/cr16/sim-main.h R processors/ARM/gdb-7.10/sim/cr16/simops.c R processors/ARM/gdb-7.10/sim/cris/ChangeLog R processors/ARM/gdb-7.10/sim/cris/Makefile.in R processors/ARM/gdb-7.10/sim/cris/aclocal.m4 R processors/ARM/gdb-7.10/sim/cris/arch.c R processors/ARM/gdb-7.10/sim/cris/arch.h R processors/ARM/gdb-7.10/sim/cris/config.in R processors/ARM/gdb-7.10/sim/cris/configure R processors/ARM/gdb-7.10/sim/cris/configure.ac R processors/ARM/gdb-7.10/sim/cris/cpuall.h R processors/ARM/gdb-7.10/sim/cris/cpuv10.c Log Message: ----------- Merge branch 'Cog' into customizationForPharo Commit: 764e543dd6017c7204c2735a45a426c965dc6553 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/764e543dd6017c7204c2735a45a426c965dc6553 Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M build.macos32x86/common/Makefile.app M build.macos32x86/pharo.cog.spur.lowcode/Makefile M build.macos32x86/pharo.cog.spur.minheadless/Makefile M build.macos32x86/pharo.cog.v3/Makefile M build.macos64x64/common/Makefile.app R platforms/iOS/vm/English.lproj/MainMenu-cg.xib R platforms/iOS/vm/English.lproj/MainMenu-opengl.xib R platforms/iOS/vm/English.lproj/MainMenu.xib A platforms/iOS/vm/English.lproj/Newspeak-MainMenu-cg.xib A platforms/iOS/vm/English.lproj/Newspeak-MainMenu-opengl.xib A platforms/iOS/vm/English.lproj/Newspeak-MainMenu.xib A platforms/iOS/vm/English.lproj/Pharo-MainMenu-opengl.xib A platforms/iOS/vm/English.lproj/Pharo-MainMenu.xib A platforms/iOS/vm/English.lproj/Squeak-MainMenu-cg.xib A platforms/iOS/vm/English.lproj/Squeak-MainMenu-opengl.xib A platforms/iOS/vm/English.lproj/Squeak-MainMenu.xib M platforms/iOS/vm/OSX/Pharo-Info.plist M platforms/iOS/vm/OSX/SqueakOSXApplication.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication.h M platforms/iOS/vm/OSX/sqSqueakOSXApplication.m Log Message: ----------- Merge pull request #524 from demarey/customizationForPharo Customization for Pharo & About Dialog Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/93e1582ff357...764e543dd601 From notifications at github.com Mon Oct 19 20:34:04 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:34:04 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Customization for Pharo & About Dialog (#524) In-Reply-To: References: Message-ID: Merged #524 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/524#event-3895406531 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 20:34:07 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:34:07 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Customization for Pharo & About Dialog (#388) In-Reply-To: References: Message-ID: Merged #388 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/388#event-3895406702 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 20:35:38 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:35:38 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] unix: use dlopen's lookup mechanism when not specifying a path (#497) In-Reply-To: References: Message-ID: @eliotmiranda approved this pull request. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/497#pullrequestreview-512138516 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 20:35:45 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:35:45 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] a50535: unix: use dlopen's lookup mechanism when not speci... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: a50535d7dcc22648c2b7843d512b629e78be7d55 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/a50535d7dcc22648c2b7843d512b629e78be7d55 Author: Tom Beckmann Date: 2020-05-09 (Sat, 09 May 2020) Changed paths: M platforms/unix/vm/sqUnixExternalPrims.c Log Message: ----------- unix: use dlopen's lookup mechanism when not specifying a path This allows FFI modules to be specified in the same manner as you would when linking to them (-lGL --> GL, instead of /usr/lib/x86_64-linux-gnu/libGL.so as was required before this change, unless you manually placed /usr/lib/x86_64-linux-gnu in your LD_LIBRARY_PATH). Commit: aafb3941fed5bc42f6849f74c782f27ef2c5c65b https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/aafb3941fed5bc42f6849f74c782f27ef2c5c65b Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/unix/vm/sqUnixExternalPrims.c Log Message: ----------- Merge pull request #497 from tom95/dlopen-path unix: use dlopen's lookup mechanism when not specifying a path Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/764e543dd601...aafb3941fed5 From notifications at github.com Mon Oct 19 20:35:46 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:35:46 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] unix: use dlopen's lookup mechanism when not specifying a path (#497) In-Reply-To: References: Message-ID: Merged #497 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/497#event-3895412389 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 20:39:25 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 13:39:25 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Bump minimal supported Windows version to Windows Vista (0x0600). (#499) In-Reply-To: References: Message-ID: @eliotmiranda commented on this pull request. > @@ -53,16 +53,17 @@ ifdef MSVC MEMACCESS:=-DUSE_INLINE_MEMORY_ACCESSORS=1 endif -# Set minimum version to WindowsXP (see /cygwin/usr/include/w32api/w32api.h) -WINVER:=-D_WIN32_WINNT=0x0501 -DWINVER=0x0501 +# Set minimum version to Windows 8 (see /cygwin/usr/include/w32api/w32api.h) +WINVER:=-D_WIN32_WINNT=0x0602 -DWINVER=0x0602 How would you feel about setting minimum supported version to 8.0? I want to do this because of the GetSystemTimePreciseAsFileTime function, which appears in 8.0 nd neatly solves the time issues in the win32 VM (use of the millisecond clock to derive greater precision than the 15ms tick in GetSystemTimeAsFileTime causes significant direct over the course of several days). -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/499#discussion_r508047853 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 20:43:15 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 20:43:15 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2264 Message-ID: <20201019204315.1.1D3AA5DFF657F587@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 20:44:17 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 20:44:17 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2262 (Cog - 93e1582) In-Reply-To: Message-ID: <5f8dfa9fb3502_13f7f590bf1cc10352e@travis-tasks-5b8549478b-r6gsp.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2262 Status: Still Failing Duration: 12 mins and 17 secs Commit: 93e1582 (Cog) Author: Eliot Miranda Message: Merge pull request #504 from marceltaeumel/marceltaeumel/patch-4 Removes support for NO_VIRTUAL_MEMORY on win32 platform View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/c6a51e1e4a85...93e1582ff357 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737200573?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 20:54:54 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 20:54:54 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2265 Message-ID: <20201019205454.1.3BA16363CE9F1B33@appveyor.com> An HTML attachment was scrubbed... URL: From tim at rowledge.org Mon Oct 19 20:55:04 2020 From: tim at rowledge.org (tim Rowledge) Date: Mon, 19 Oct 2020 13:55:04 -0700 Subject: [Vm-dev] it's amazing to me... In-Reply-To: References: <20201019191401.GA75105@shell.msen.com> Message-ID: <13A210FC-47FE-451B-AB50-3624CE4D6ADB@rowledge.org> > On 2020-10-19, at 12:26 PM, Eliot Miranda wrote: > > But I take Tim's suggestion of grouping the file pointer and the read/write data in one as a good one It's definitely a good idea but to do it properly we'd really need to replace the mess that is FileStream. For RISC OS I had to make an absurdly over complicated linked list set up within the VM to deal with translating the FileStream prims to the OS view. As a small bonus it did provide the ability to open a file multiple times (something I find utterly horrific) to cope with the weird way a lot of FieStream works. The good news is that nobody ever found a bug in it, so maybe I got that right. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Strange OpCodes: RWD: Rewind Disk From builds at travis-ci.org Mon Oct 19 20:55:15 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 20:55:15 +0000 Subject: [Vm-dev] Errored: OpenSmalltalk/opensmalltalk-vm#2265 (Cog - aafb394) In-Reply-To: Message-ID: <5f8dfd336c622_13f7f590bf0dc1159e7@travis-tasks-5b8549478b-r6gsp.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2265 Status: Errored Duration: 12 mins and 33 secs Commit: aafb394 (Cog) Author: Eliot Miranda Message: Merge pull request #497 from tom95/dlopen-path unix: use dlopen's lookup mechanism when not specifying a path View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/764e543dd601...aafb3941fed5 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737201953?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 20:55:20 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 20:55:20 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2266 Message-ID: <20201019205520.1.D63647ADBA3C3336@appveyor.com> An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 21:08:51 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 21:08:51 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2267 Message-ID: <20201019210851.1.B397C7990CF2E14F@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 21:33:22 2020 From: notifications at github.com (Tobias Pape) Date: Mon, 19 Oct 2020 14:33:22 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Bump minimal supported Windows version to Windows Vista (0x0600). (#499) In-Reply-To: References: Message-ID: @krono commented on this pull request. > @@ -53,16 +53,17 @@ ifdef MSVC MEMACCESS:=-DUSE_INLINE_MEMORY_ACCESSORS=1 endif -# Set minimum version to WindowsXP (see /cygwin/usr/include/w32api/w32api.h) -WINVER:=-D_WIN32_WINNT=0x0501 -DWINVER=0x0501 +# Set minimum version to Windows 8 (see /cygwin/usr/include/w32api/w32api.h) +WINVER:=-D_WIN32_WINNT=0x0602 -DWINVER=0x0602 We can have `0x6000` (Vista) _and_ use that function. Ping me in a week or so, when I'm back from vacation -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/499#discussion_r508075473 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 21:51:22 2020 From: notifications at github.com (smalltalking) Date: Mon, 19 Oct 2020 14:51:22 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix image opening on unix (#529) Message-ID: In imgInit() of sqUnixMain.c - preserve fd instead of throwing it away - use fileno() to get the file descriptor (fd) created by fopen() instead of opening the file again with open() (which leaked a file descriptor due to lack of close()) - pass the file descriptor fd instead of the FILE* f to the recently changed methods expecting a file descriptor, e.g. readImageFromFileHeapSizeStartingAt() You can view, comment on, or merge this pull request online at: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/529 -- Commit Summary -- * Fix image opening on unix -- File Changes -- M platforms/unix/vm/sqUnixMain.c (12) -- Patch Links -- https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/529.patch https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/529.diff -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/529 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 22:03:35 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 22:03:35 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2268 Message-ID: <20201019220335.1.879999A7EAAB7931@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 22:15:41 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 15:15:41 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix image opening on unix (#529) In-Reply-To: References: Message-ID: @eliotmiranda approved this pull request. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/529#pullrequestreview-512198218 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 22:15:53 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 15:15:53 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 10cb9a: Fix image opening on unix Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 10cb9a759566159c7f38c56bc0c2535875985132 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/10cb9a759566159c7f38c56bc0c2535875985132 Author: Levente Uzonyi Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/unix/vm/sqUnixMain.c Log Message: ----------- Fix image opening on unix In imgInit() of sqUnixMain.c - preserve fd instead of throwing it away - use fileno() to get the file descriptor (fd) created by fopen() instead of opening the file again with open() (which leaked a file descriptor due to lack of close()) - pass the file descriptor fd instead of the FILE* f to the recently changed methods expecting a file descriptor, e.g. readImageFromFileHeapSizeStartingAt() Commit: de8df0c4e692a4869456b4c6814339d7b86bc33e https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/de8df0c4e692a4869456b4c6814339d7b86bc33e Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/unix/vm/sqUnixMain.c Log Message: ----------- Merge pull request #529 from smalltalking/Cog Fix image opening on unix Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/aafb3941fed5...de8df0c4e692 From notifications at github.com Mon Oct 19 22:15:54 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 15:15:54 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix image opening on unix (#529) In-Reply-To: References: Message-ID: Merged #529 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/529#event-3895738142 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 22:27:59 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 22:27:59 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2269 Message-ID: <20201019222759.1.D8AA778089C755CD@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 22:28:15 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 22:28:15 +0000 Subject: [Vm-dev] Errored: OpenSmalltalk/opensmalltalk-vm#2267 (Cog - de8df0c) In-Reply-To: Message-ID: <5f8e12fe16c28_13fb87e7d460c184014@travis-tasks-5b8549478b-rdxk5.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2267 Status: Errored Duration: 11 mins and 44 secs Commit: de8df0c (Cog) Author: Eliot Miranda Message: Merge pull request #529 from smalltalking/Cog Fix image opening on unix View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/aafb3941fed5...de8df0c4e692 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737228995?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 22:28:45 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 15:28:45 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 89efbc: Chunk image read/writes into 1Gb maxima. >4Gb ima... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 89efbcc16d4a6acdcfd4f7c90e568bbd31f6ab54 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/89efbcc16d4a6acdcfd4f7c90e568bbd31f6ab54 Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/unix/vm/sqImageFileAccess.h Log Message: ----------- Chunk image read/writes into 1Gb maxima. >4Gb image save/restore works (at least on macOS). Commit: 48b0ee9c0380fce0466a432d07941630bbedf4fb https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/48b0ee9c0380fce0466a432d07941630bbedf4fb Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M build.macos32x86/common/Makefile.app M build.macos32x86/pharo.cog.spur.lowcode/Makefile M build.macos32x86/pharo.cog.spur.minheadless/Makefile M build.macos32x86/pharo.cog.v3/Makefile M build.macos64x64/common/Makefile.app R platforms/iOS/vm/English.lproj/MainMenu-cg.xib R platforms/iOS/vm/English.lproj/MainMenu-opengl.xib R platforms/iOS/vm/English.lproj/MainMenu.xib A platforms/iOS/vm/English.lproj/Newspeak-MainMenu-cg.xib A platforms/iOS/vm/English.lproj/Newspeak-MainMenu-opengl.xib A platforms/iOS/vm/English.lproj/Newspeak-MainMenu.xib A platforms/iOS/vm/English.lproj/Pharo-MainMenu-opengl.xib A platforms/iOS/vm/English.lproj/Pharo-MainMenu.xib A platforms/iOS/vm/English.lproj/Squeak-MainMenu-cg.xib A platforms/iOS/vm/English.lproj/Squeak-MainMenu-opengl.xib A platforms/iOS/vm/English.lproj/Squeak-MainMenu.xib M platforms/iOS/vm/OSX/Pharo-Info.plist M platforms/iOS/vm/OSX/SqueakOSXApplication.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication+events.m M platforms/iOS/vm/OSX/sqSqueakOSXApplication.h M platforms/iOS/vm/OSX/sqSqueakOSXApplication.m M platforms/unix/vm/sqUnixExternalPrims.c M platforms/unix/vm/sqUnixMain.c M platforms/win32/vm/sqWin32.h M platforms/win32/vm/sqWin32Alloc.c M platforms/win32/vm/sqWin32Alloc.h M platforms/win32/vm/sqWin32Main.c Log Message: ----------- Merge branch 'Cog' of https://github.com/OpenSmalltalk/opensmalltalk-vm into Cog Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/de8df0c4e692...48b0ee9c0380 From builds at travis-ci.org Mon Oct 19 22:40:32 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 22:40:32 +0000 Subject: [Vm-dev] Errored: OpenSmalltalk/opensmalltalk-vm#2268 (Cog - 48b0ee9) In-Reply-To: Message-ID: <5f8e15e084624_13f7f590bf49c2005e6@travis-tasks-5b8549478b-r6gsp.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2268 Status: Errored Duration: 11 mins and 18 secs Commit: 48b0ee9 (Cog) Author: Eliot Miranda Message: Merge branch 'Cog' of https://github.com/OpenSmalltalk/opensmalltalk-vm into Cog View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/de8df0c4e692...48b0ee9c0380 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737231919?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 22:40:38 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 22:40:38 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2270 Message-ID: <20201019224038.1.90818D953440FD46@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:13:41 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:13:41 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Cannot build unix sources (missing file: bld/plugins.int) (#507) In-Reply-To: References: Message-ID: Can we close this issue now? -- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/507#issuecomment-712491678 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:14:05 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:14:05 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Latest commit segfaults win64x64.squeak.cog.spur (#498) In-Reply-To: References: Message-ID: Closed #498. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/498#event-3895882267 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:14:45 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:14:45 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] ArmV6 crash on start. (#487) In-Reply-To: References: Message-ID: Closed #487. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/487#event-3895883787 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:15:12 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:15:12 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Unable to build OSVM on macOS Catalina (#470) In-Reply-To: References: Message-ID: Closed #470. -- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/470#event-3895884858 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:15:33 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:15:33 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Metal crash on Mac (10.15.1) (#467) In-Reply-To: References: Message-ID: Closed #467. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/467#event-3895885720 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 19 23:20:50 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:20:50 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] f14b93: FilePlugin: for consistency have sqFilePluginBasic... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: f14b93899570196e00db9dab6d70012c26db5234 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f14b93899570196e00db9dab6d70012c26db5234 Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/Cross/plugins/FilePlugin/sqFilePluginBasicPrims.c Log Message: ----------- FilePlugin: for consistency have sqFilePluginBasicPrims.c answer 0 for the size of a stdio stream, rather than fail. From notifications at github.com Mon Oct 19 23:21:00 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:21:00 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] primitiveFileSize fails on Stdio handles (#430) In-Reply-To: References: Message-ID: Got to this today. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/430#issuecomment-712494053 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:21:00 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:21:00 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] primitiveFileSize fails on Stdio handles (#430) In-Reply-To: References: Message-ID: Closed #430. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/430#event-3895897717 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:24:26 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:24:26 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] macOS sockets broken (#428) In-Reply-To: References: Message-ID: Closed #428. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/428#event-3895904910 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:26:51 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:26:51 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fatal VM error using Newspeak VMs (#159) In-Reply-To: References: Message-ID: Closed #159. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/159#event-3895910347 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:28:26 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:28:26 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Proposal: Extend the VM with additional integration with native code (#157) In-Reply-To: References: Message-ID: Closed #157. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/157#event-3895913998 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:28:58 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:28:58 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Newspeak VMs do not open the Newspeak UI on Windows (#151) In-Reply-To: References: Message-ID: Closed #151. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/151#event-3895915217 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:30:09 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:30:09 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] HostWindowPlugin does not account for window decorations on resize (#40) In-Reply-To: References: Message-ID: I finally fixed this in d990bfd62542194ccc86b9687c7c1d9636a66403 -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/40#issuecomment-712496994 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:30:10 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:30:10 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] HostWindowPlugin does not account for window decorations on resize (#40) In-Reply-To: References: Message-ID: Closed #40. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/40#event-3895917898 -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Oct 19 23:32:46 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 19 Oct 2020 23:32:46 +0000 Subject: [Vm-dev] Errored: OpenSmalltalk/opensmalltalk-vm#2269 (Cog - f14b938) In-Reply-To: Message-ID: <5f8e221dac1db_13fb87ffb710c2206b0@travis-tasks-5b8549478b-rdxk5.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2269 Status: Errored Duration: 11 mins and 26 secs Commit: f14b938 (Cog) Author: Eliot Miranda Message: FilePlugin: for consistency have sqFilePluginBasicPrims.c answer 0 for the size of a stdio stream, rather than fail. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/48b0ee9c0380...f14b93899570 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737242879?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 19 23:32:48 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 19 Oct 2020 23:32:48 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2271 Message-ID: <20201019233248.1.432D15EB45E92DE8@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:41:50 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:41:50 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix checkSCCSversion invocation in mvm scripts of linux build subdirectories (#405) In-Reply-To: References: Message-ID: Closed #405. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/405#event-3895943537 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:42:22 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:42:22 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Pharo in OpenBSD (#414) In-Reply-To: References: Message-ID: Closed #414. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/414#event-3895944654 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:42:46 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:42:46 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] pharo x64 libssh2 crashes on Windows 1903 (#416) In-Reply-To: References: Message-ID: Closed #416. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/416#event-3895945456 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 19 23:55:20 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 16:55:20 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 64 bit Pharo VM on Mac hangs on full screen (#380) In-Reply-To: References: Message-ID: Closed #380. -- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/380#event-3895972666 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 20 00:01:56 2020 From: notifications at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 17:01:56 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Update README with load instructions : VMMaker in Squeak (#294) In-Reply-To: References: Message-ID: Closed #294. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/294#event-3895987290 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Tue Oct 20 01:41:42 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 19 Oct 2020 18:41:42 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 252be0: Hack/fix a regression from the pull request here: Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 252be09bee477df3592b796977f2781400eaceb2 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/252be09bee477df3592b796977f2781400eaceb2 Author: Eliot Miranda Date: 2020-10-19 (Mon, 19 Oct 2020) Changed paths: M platforms/iOS/vm/OSX/SqueakOSXApplication.m Log Message: ----------- Hack/fix a regression from the pull request here: Merge pull request #524 from demarey/customizationForPharo Customization for Pharo & About Dialog It would be nice to have the prioper fix. From no-reply at appveyor.com Tue Oct 20 01:54:05 2020 From: no-reply at appveyor.com (AppVeyor) Date: Tue, 20 Oct 2020 01:54:05 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2272 Message-ID: <20201020015405.1.7C093C67A1862A1A@appveyor.com> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Tue Oct 20 01:54:41 2020 From: builds at travis-ci.org (Travis CI) Date: Tue, 20 Oct 2020 01:54:41 +0000 Subject: [Vm-dev] Failed: OpenSmalltalk/opensmalltalk-vm#2270 (Cog - 252be09) In-Reply-To: Message-ID: <5f8e4361513c1_13ff751026344145745@travis-tasks-7cc7d444bf-t2sqz.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2270 Status: Failed Duration: 12 mins and 28 secs Commit: 252be09 (Cog) Author: Eliot Miranda Message: Hack/fix a regression from the pull request here: Merge pull request #524 from demarey/customizationForPharo Customization for Pharo & About Dialog It would be nice to have the prioper fix. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/f14b93899570...252be09bee47 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737267241?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 20 06:12:55 2020 From: notifications at github.com (Tobias Pape) Date: Mon, 19 Oct 2020 23:12:55 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] macOS sockets broken (#428) In-Reply-To: References: Message-ID: wait, this is fixed? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/428#issuecomment-712618772 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 20 16:12:39 2020 From: notifications at github.com (smalltalking) Date: Tue, 20 Oct 2020 09:12:39 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Simplify sqUnixMain.c's imgInit() (#530) Message-ID: - use sqImageFileOpen() to open the image file - use file descriptors only to avoid leaking a FILE struct - removed the ability to let winImageFind manipulate the file some way (only supported by the Quartz display anyway) - removed the loop retrying opening the file again because that relied on winImageFind - reformatted the code to follow the formatting guidelines (it was a bit messy) You can view, comment on, or merge this pull request online at: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/530 -- Commit Summary -- * Simplify sqUnixMain.c's imgInit() -- File Changes -- M platforms/unix/vm/sqUnixMain.c (64) -- Patch Links -- https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/530.patch https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/530.diff -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/530 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Tue Oct 20 16:33:04 2020 From: no-reply at appveyor.com (AppVeyor) Date: Tue, 20 Oct 2020 16:33:04 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2273 Message-ID: <20201020163304.1.BED385F87AAA70ED@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 20 17:32:49 2020 From: notifications at github.com (Eliot Miranda) Date: Tue, 20 Oct 2020 10:32:49 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] macOS sockets broken (#428) In-Reply-To: References: Message-ID: Oops. I was over optimistic. I assumed that Levente'se poll change applied to Mac. It doesn't. Mac needs kqueue. I'm reopening. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/428#issuecomment-713023214 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 20 17:32:50 2020 From: notifications at github.com (Eliot Miranda) Date: Tue, 20 Oct 2020 10:32:50 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] macOS sockets broken (#428) In-Reply-To: References: Message-ID: Reopened #428. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/428#event-3899971355 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue Oct 20 19:03:44 2020 From: notifications at github.com (Tobias Pape) Date: Tue, 20 Oct 2020 12:03:44 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] macOS sockets broken (#428) In-Reply-To: References: Message-ID: marvelous :D -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/428#issuecomment-713075118 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Wed Oct 21 01:56:43 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 20 Oct 2020 18:56:43 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 508e91: Add the Terf SOundPlugin for win32, minus the AEC ... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 508e91684c6c127cf3a3ee60648d70ba9d6e79a1 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/508e91684c6c127cf3a3ee60648d70ba9d6e79a1 Author: Eliot Miranda Date: 2020-10-20 (Tue, 20 Oct 2020) Changed paths: M build.win32x86/common/Makefile.msvc.tools M build.win64x64/common/Makefile.msvc.tools A platforms/win32/plugins/CameraPlugin/Makefile.plugin A platforms/win32/plugins/SoundPlugin/sqDSoundClassFactory.cpp A platforms/win32/plugins/SoundPlugin/sqDSoundClassFactory.h A platforms/win32/plugins/SoundPlugin/sqDSoundGUID.c A platforms/win32/plugins/SoundPlugin/sqWin32DPRINTF.h M platforms/win32/plugins/SoundPlugin/sqWin32Sound.c A platforms/win32/plugins/SoundPlugin/sqWin32SoundDeviceSelection.cpp A platforms/win32/plugins/SoundPlugin/sqWin32SoundDeviceSelection.h Log Message: ----------- Add the Terf SOundPlugin for win32, minus the AEC code (cuz this requires boost). Add a Makefile to disable the failing CameraPlugin build on cygwin. From noreply at github.com Wed Oct 21 02:02:11 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 20 Oct 2020 19:02:11 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] efb4b1: Add stdio.h to sqWin32NewNet.c for its debug print... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: efb4b1c82fd81798221d9811faa65f7bfb9c71be https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/efb4b1c82fd81798221d9811faa65f7bfb9c71be Author: Eliot Miranda Date: 2020-10-20 (Tue, 20 Oct 2020) Changed paths: M platforms/win32/plugins/SocketPlugin/sqWin32NewNet.c Log Message: ----------- Add stdio.h to sqWin32NewNet.c for its debug printing. From builds at travis-ci.org Wed Oct 21 02:09:53 2020 From: builds at travis-ci.org (Travis CI) Date: Wed, 21 Oct 2020 02:09:53 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2272 (Cog - 508e916) In-Reply-To: Message-ID: <5f8f98718208c_13ff4866c928c1147ee@travis-tasks-8b44cff46-ctjzv.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2272 Status: Still Failing Duration: 12 mins and 38 secs Commit: 508e916 (Cog) Author: Eliot Miranda Message: Add the Terf SOundPlugin for win32, minus the AEC code (cuz this requires boost). Add a Makefile to disable the failing CameraPlugin build on cygwin. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/252be09bee47...508e91684c6c View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737592027?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Wed Oct 21 02:18:36 2020 From: builds at travis-ci.org (Travis CI) Date: Wed, 21 Oct 2020 02:18:36 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2273 (Cog - efb4b1c) In-Reply-To: Message-ID: <5f8f9a7c6c268_13fc3d52e76007434b@travis-tasks-8b44cff46-v8scf.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2273 Status: Still Failing Duration: 15 mins and 54 secs Commit: efb4b1c (Cog) Author: Eliot Miranda Message: Add stdio.h to sqWin32NewNet.c for its debug printing. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/508e91684c6c...efb4b1c82fd8 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/737592892?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Wed Oct 21 02:29:09 2020 From: no-reply at appveyor.com (AppVeyor) Date: Wed, 21 Oct 2020 02:29:09 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2274 Message-ID: <20201021022909.1.05902F5113501893@appveyor.com> An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Wed Oct 21 03:01:42 2020 From: no-reply at appveyor.com (AppVeyor) Date: Wed, 21 Oct 2020 03:01:42 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2275 Message-ID: <20201021030142.1.E8502BC000F3DF47@appveyor.com> An HTML attachment was scrubbed... URL: From marcel.taeumel at hpi.de Wed Oct 21 16:21:18 2020 From: marcel.taeumel at hpi.de (Marcel Taeumel) Date: Wed, 21 Oct 2020 18:21:18 +0200 Subject: [Vm-dev] [squeak-dev] Pool for sysconf constants? In-Reply-To: References: <20201013032817.GA78602@shell.msen.com> <20201016214731.GA70979@shell.msen.com> Message-ID: Hi Eliot! > I should push thoguh and sdo a sysconf pool to learn how the current system really works :-) This is so exciting!! ^__^ Best, Marcel Am 17.10.2020 00:24:11 schrieb Eliot Miranda : Hi David, > On Oct 16, 2020, at 2:47 PM, David T. Lewis wrote: > > Hi Eliot, > > Replying back on vm-dev. > > Indeed I see the problem now, thanks. > > The closest that I can come to a useful suggestion is to write a > little C program to print out the index values of interest for a > given platform, then read that into the image to build the pool. > The index values are supposed to be opaque but I doubt that they > would change much in practice. This is what an ExternalPool does *automatically*. One creates a pool containing a set of named variables, adds metadata to the pool, and then when the pool needs to initialize or change, it generates the C program automatically, runs it, reaps the values, and updates class side code to initialize the constants for specific platforms. When it is run on a different platform it generates the program for that platform, etc. The management problem therefore is how to manage the executable programs because these are needed if one wants to deploy on a specific platform. I came up with the idea many years ago at ParcPlace when the problem first surfaced (that different platforms, though they may use the same names for symbolic constants, abstract types, etc, but don't use the same values, concrete types, etc). Monty write the implementation. Marcel has shepherded it into source.squeak.org/FFI. Marcel has written an excellent and comprehensive class comment for ExternalPool. I urge that everyone interested in deployment using FFIs read it ASAP. That goes for me too, because things have moved on with the implementation. There's no need to manage external C programs; there's a need to merge the definition code that is automatically generated when run on different platforms. I should push thoguh and sdo a sysconf pool to learn how the current system really works :-) > > I am looking only at a Linux system as I write this, and the only > way I can find to discover the available parameter names is to look > in /usr/include/bits/confname.h to see what is defined. I can't > spot any other way to get at the information, and I can't find any > runtime utility that provides a listing. > > But a little utility program that could be used to update the > pool might be good enough. Attaching an example C program, I'm > not sure if it helps. > > Dave > > >> On Tue, Oct 13, 2020 at 01:49:00PM -0700, Eliot Miranda wrote: >> Hi David, >> >>> On Mon, Oct 12, 2020 at 8:28 PM David T. Lewis wrote: >>> >>> On Sun, Oct 11, 2020 at 11:15:09AM -0700, Eliot Miranda wrote: >>>> Hi All, >>>> >>>> I want to implement a number of processors query on MacOS & other >>>> unices to complement the info provided by GetSystemInfo on Windows. The >>>> natural way to do this on unices is to use sysconf (3), and of course >>> this >>>> points to the issue for which FFI pools are needed, the constant names >>> for >>>> sysconf such as _SC_NPROCESSORS_ONLN are defined, but their values are >>>> implementation dependent. >>>> >>>> But before I go amd implement an FFI pool for this I thought I'd ask >>>> a) anyone already done this? Is it published anywhere? >>>> b) how are we going to organize such pools so that people don't have to >>>> reinvent the wheel? >>>> c) should there be a pool to cover sysconf or to cover unistd.h? (the >>>> point here is that while the pool might start off small, it could grow >>> and >>>> grow and maybe unistd.h is too much surface to cover) >>>> >>>> thoughts, suggestions? >>> >>> Hi Eliot, >>> >>> At first glance, it looks to me like the hard part of the problem is to >>> know what sysconf names are available to be queried on any given platform >>> at runtime. If you know that, or if you are only interested in a limited >>> number of well-known parameters (which seems likely), then it might be >>> simplest to just implement the sysconf(3) call either as an FFI call or >>> a call through the OSProcess plugin. >>> >> >> Well, I *am* implementing it as an FFI call in Terf. The issue is deriving >> the right integer values for the particular symbolic names, because these >> vary across implementations. And that's what FFIPools are designed to >> manage. >> Right now I don't have the FFIPool so I've hard-wired the constant: >> >> !CMacOSXPlatform methodsFor: 'accessing' stamp: 'eem 10/11/2020 17:53' >> prior: 47990341! >> numberOfCPUs >> "Warning, warning, Will Robertson!!!! The sysconf method bakes in a >> decidedly implementation-specific name for the support library *and* bakes >> in a value for a symbolic constant. Both of these are implementation >> dependent and subject to change. That said..." >> ^self sysconf: 58 >> >> "CPlatform current numberOfCPUs"! ! >> !CMacOSXPlatform methodsFor: 'private' stamp: 'eem 10/11/2020 17:51'! >> sysconf: systemInfo >> "Answer a value from sysconf(3)." >> >> '/usr/lib/system/libsystem_c.dylib'> >> ^self externalCallFailed >> >> " | scnprocsonline | >> scnprocsonline := 58. >> self current sysconf: scnprocsonline"! ! >> >> There's much to be unhappy about in this code: libSystem.dylib is the >> abstract name, but one can't use it because the search facilities can't >> chain through the libraries that libSystem.B.dylib (ibSystem.dylib is a >> symbolic link) refers to. So this could break in some future MacOS, >> whereas if libSystem.dylib did work, or if there was a symbolic name we >> could use that meant "the C library goddamnit", then it could be relied >> upon. 58 is meaningful only on MacOS, and presumably only since a >> particular version. That's why we need an FFIPool to manage the >> cross-platform variations. The type is longlong, which means we're not >> using a syntax that matches the declaration, and this will work only on >> 64-bits. We can fix the FFI to interpret C names accoding to the >> playtform, but we have a serious backwards-compatibility problem in that >> all of the FFI definitions up til now have been written under this >> assumption. >> >> But I suspect that I am not answering the right question here. If I am >>> off base, can you give an example of some of the parameters that you >>> would want to be able to query? >>> >> >> First off Terf needs _SC_NUM_PROCESSORS_ONLN, which is notionally the >> number of processors online, but now answers the number of cores, which >> shows you how fast these ideas go stale (_SC_NUM_PROCESSORS_CONF is the >> number of processors configured ;-) ). Other ones that could be meaningful >> for applications include _SC_ARG_MAX (The maximum bytes of argument to >> execve(2)) _SC_CHILD_MAX (The maximum number of simultaneous processes per >> user id), _SC_OPEN_MAX (The maximum number of open files per user id), >> _SC_STREAM_MAX (The minimum maximum number of streams that a process may >> have open at any one time), _SC_PHYS_PAGES (The number of pages of physical >> memory). >> >> There are many others, quite a few I can't imagine ever being compelling. >> >> Now yes, one can imagine implementing a cross-platform abstraction for >> these but it's a lot of effort for little gain. It;s easier just to suck >> it up and implement the FFI call. >> >> But I'm imagining these things will get used by the community and I don't >> want people to have to reinvent the wheel. This kind of stuff doesn't >> belong in trunk, but it does belong somewhere where we can share and >> coevolve the facilities. >> >> >>> Thanks, >>> Dave >>> >>> >>> >> >> -- >> _,,,^..^,,,_ >> best, Eliot > >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Yoshiki.Ohshima at acm.org Wed Oct 21 17:14:14 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Wed, 21 Oct 2020 10:14:14 -0700 Subject: [Vm-dev] nuSqueak source Message-ID: Hi, I heard that people got a new problem in inputting Japanese text into Scratch 1.4 running on Raspberry Pi OS after, or around the version 2020-08-20. I would like to take a look at it but it might involve recompiling and generating the VM with debugging info. Last time I looked into it was years and years ago and I need to basically make a fresh start. Is the process of making NuSqeauk VM For Raspberry Pi up to date and straightforward? Can people point me to the right point to start? Thanks! -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Wed Oct 21 17:21:28 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed, 21 Oct 2020 10:21:28 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi Yoshiki, On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima wrote: > > Hi, > > I heard that people got a new problem in inputting Japanese text into > Scratch 1.4 running on Raspberry Pi OS after, or around the version > 2020-08-20. I would like to take a look at it but it might involve > recompiling and generating the VM with debugging info. Last time I looked > into it was years and years ago and I need to basically make a fresh start. > > Is the process of making NuSqeauk VM For Raspberry Pi up to date and > straightforward? Can people point me to the right point to start? > Making a Cog VM for Raspberry pi is straight-forward. Clone opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Wed Oct 21 19:23:18 2020 From: tim at rowledge.org (tim Rowledge) Date: Wed, 21 Oct 2020 12:23:18 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi - we were just talking about you at the squeak board meeting :-) > On 2020-10-21, at 10:14 AM, Yoshiki Ohshima wrote: > I heard that people got a new problem in inputting Japanese text into Scratch 1.4 running on Raspberry Pi OS after, or around the version 2020-08-20. I would like to take a look at it but it might involve recompiling and generating the VM with debugging info. Last time I looked into it was years and years ago and I need to basically make a fresh start. > > Is the process of making NuSqeauk VM For Raspberry Pi up to date and straightforward? Can people point me to the right point to start? You shouldn't need to do anything special with the VM as far as I remember; I'll try to dig into my notes to see what I might have done. What I *do* recall is some problem with the X input method application - I managed to make it work at some point but then it catastrophically interfered with some other important thing. According to my ancient email archive I had quite a few messages with you and Kazuhiro-san to make this (almost) work in mid-2106. Something about an 'ibus' compositor window? Building the VM is completely vanilla; clone the opensmalltalk vm repository, run Eliot's magic scripts to build the VMMaker image if you need to do any serious development work, or just run the 'mvm' scripts in the relevant directory to build from the current sources. On a Pi4 it only takes a couple of minutes. Ah - here's something to do with it - in /usr/bin/squeak # see if the XMODIFIERS stuff is being used # CURRENTLY DISABLED # serious problem in the keypress handling is causedby invoking it #if echo $XMODIFIERS | grep '@im=' > /dev/null; then # COMPIN="-compositioninput" #fi So, one question is whether the current VM even has that cmdline option. And whether the applicable X input tool is available. Ah-hah - another old email - ibus ibus-anthy ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname - some libraries that needed to be installed. The current NuScratch image is included in the Raspberry Pi OS releases and *shouldn't* need any changes in order to work with the compositioninput stuff, at least as well or badly as it ever did. The VM included is certainly a few years old but it is a Cog/Spur system and the image will happily run on a latest VM. I will someday make a new release for RPF but they're all into the JS/HTML Scratch3 now. Making a new NuScratch image is, I hope, decently explained in the package on squeaksource, with some more info on the swiki at http://wiki.squeak.org/squeak/1263 and http://wiki.squeak.org/squeak/6604 Hope that helps a bit - let me know! tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Fractured Idiom:- PORTE-KOCHERE - Sacramental wine From Yoshiki.Ohshima at acm.org Wed Oct 21 19:30:28 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Wed, 21 Oct 2020 12:30:28 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: On Wed, Oct 21, 2020 at 12:23 PM tim Rowledge wrote: > > Hi - we were just talking about you at the squeak board meeting :-) > > > On 2020-10-21, at 10:14 AM, Yoshiki Ohshima > wrote: > > I heard that people got a new problem in inputting Japanese text into > Scratch 1.4 running on Raspberry Pi OS after, or around the version > 2020-08-20. I would like to take a look at it but it might involve > recompiling and generating the VM with debugging info. Last time I looked > into it was years and years ago and I need to basically make a fresh start. > > > > Is the process of making NuSqeauk VM For Raspberry Pi up to date and > straightforward? Can people point me to the right point to start? > > You shouldn't need to do anything special with the VM as far as I > remember; I'll try to dig into my notes to see what I might have done. What > I *do* recall is some problem with the X input method application - I > managed to make it work at some point but then it catastrophically > interfered with some other important thing. According to my ancient email > archive I had quite a few messages with you and Kazuhiro-san to make this > (almost) work in mid-2106. Something about an 'ibus' compositor window? > It is about ibus (and related input method, and somehow it started throwing random (that is, not always repeatable) errors in the 2020-08-20 Raspberry Pi OS. Yes, I remember some issues last time around, but I don't remember the conclusion, and I have to suspect that I did not really follow through. Building the VM is completely vanilla; clone the opensmalltalk vm > repository, run Eliot's magic scripts to build the VMMaker image if you > need to do any serious development work, or just run the 'mvm' scripts in > the relevant directory to build from the current sources. On a Pi4 it only > takes a couple of minutes. > Thanks! > > > Ah - here's something to do with it - > in /usr/bin/squeak > > # see if the XMODIFIERS stuff is being used > # CURRENTLY DISABLED > # serious problem in the keypress handling is causedby invoking it > #if echo $XMODIFIERS | grep '@im=' > /dev/null; then > # COMPIN="-compositioninput" > #fi > > So, one question is whether the current VM even has that cmdline option. > And whether the applicable X input tool is available. Ah-hah - another old > email - > > ibus > ibus-anthy > ttf-kochi-gothic > xfonts-intl-japanese > xfonts-intl-japanese-big xfonts-kaname > > - some libraries that needed to be installed. > > The current NuScratch image is included in the Raspberry Pi OS releases > and *shouldn't* need any changes in order to work with the compositioninput > stuff, at least as well or badly as it ever did. The VM included is > certainly a few years old but it is a Cog/Spur system and the image will > happily run on a latest VM. I will someday make a new release for RPF but > they're all into the JS/HTML Scratch3 now. > > Making a new NuScratch image is, I hope, decently explained in the package > on squeaksource, with some more info on the swiki at > http://wiki.squeak.org/squeak/1263 and http://wiki.squeak.org/squeak/6604 > > > Hope that helps a bit - let me know! > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Fractured Idiom:- PORTE-KOCHERE - Sacramental wine > > > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Thu Oct 22 11:21:02 2020 From: notifications at github.com (Christoph Thiede) Date: Thu, 22 Oct 2020 04:21:02 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Cannot build unix sources (missing file: bld/plugins.int) (#507) In-Reply-To: References: Message-ID: @eliotmiranda My concrete problem was resolved, but it might be helpful for others to add some exact documentation of the dependencies needed for the build without using cygwin. Feel free to close if you think this is not important. :-) -- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/507#issuecomment-714424778 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Thu Oct 22 18:02:40 2020 From: notifications at github.com (Christoph Thiede) Date: Thu, 22 Oct 2020 11:02:40 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) Message-ID: Today I tried to update my Squeak VM for Win10, 2004, and found out that the hearbeat primitives (primitiveUtcWithOffset/utcMicrosecondClock) are broken on Windows: ```smalltalk DateAndTime now. "586455-01-18T09:55:51.955317+02:00" Time utcMicrosecondClock. "18446744073363013317" ``` The issue occurs both on 32-bit and 64-bit platforms, using a fresh Squeak Trunk image. I tried to narrow down the origin of this issue, but because bintray builds were defect or incomplete between 202010191814 and 202010200140, I can only tell that the issue was born somewhere in the interval (202009300634, 202010210155]. Without ever having read the relevant implementation, I would assume that the issue was introduced in `sqWin32Heartbeat.c` via fae0d31cd52341977d37d150d8d2c9272f9864bf. @eliotmiranda Would this plausible? Can anyone else reproduce the issue? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Thu Oct 22 18:34:04 2020 From: notifications at github.com (Christoph Thiede) Date: Thu, 22 Oct 2020 11:34:04 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) In-Reply-To: References: Message-ID: PS: Also, after keeping an empty Squeak image open for ~15 minutes, it breaks itself inside `Delay class>>handlerTimerEvent` with a primitive failure from `#primSignal:atUTCMicroseconds:`. However, this is most likely only a consequence of the above error ... -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531#issuecomment-714681370 -------------- next part -------------- An HTML attachment was scrubbed... URL: From boris at shingarov.com Thu Oct 22 20:06:01 2020 From: boris at shingarov.com (Boris Shingarov) Date: Thu, 22 Oct 2020 16:06:01 -0400 Subject: [Vm-dev] processor emulation, and Status of PowerPC In-Reply-To: References: <20201019020953.DE7248C0186@proxy.email-ssl.com.br> Message-ID: > > > Well given that two of the solutions work fine and that Boris Shingarov is investigating using the Gem5 simulators, trying to unify has no point. It’s just work. But if it excites you, go for it. I don’t have spare cycles :-) Alright, now that my name got mentioned in this discussion, I'll chime in to explain where we are with that project. The idea is to use the widely-adopted GDB interfaces to drive the debugging of the VM on a wide range of targets, so that the difference between Simulation and Production mode is erased. Indeed I have booted up Cog interchangeably on purely-software-emulated CPU, on hard-silicon, and on FPGA, completely transparently to Cog and the VMSimulator. More interestingly, the Smalltalk API to the underlying GDB is designed to admit also other backends, such as the Angr symbolic execution engine.  This will server as the basis of Cog's formal verification (although I have not yet booted full Cog symbolically, only small fragments). What works today?  We have been running simulations of existing i386 and ARM Cog both on gem5 and on off-the-shelf hardware for several months, both in Squeak and Pharo host images (the code for both environments is publicly available). The all-new PowerPC backend successfully boots to the Reader prompt.  The code is available at https://github.com/shingarov/opensmalltalk-vm https://github.com/shingarov/SmallRSP https://github.com/shingarov/Pharo-ArchC https://github.com/shingarov/MachineArithmetic Setting it up is highly nontrivial, but not a "kids-please-don't-try-this-at-home" kind of deal.  On the contrary, I invite everyone interested and I am willing to show you how to run it. This is obviously a very long way from being usable for actual Smalltalk app development by customers; if there is interest, we can talk about what the next steps need to be. From notifications at github.com Fri Oct 23 06:15:47 2020 From: notifications at github.com (Eliot Miranda) Date: Thu, 22 Oct 2020 23:15:47 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) In-Reply-To: References: Message-ID: Hi Christoph, first it's not true that Time is broken on Windows: Smalltalk os platformName 'Win32' Smalltalk getSystemAttribute: 1007 'CoInterpreter VMMaker.oscog-eem.2850 uuid: 4d7fc8a4-2c7d-4bad-8aeb-5f8c5766e12a Oct 21 2020' DateAndTime now 2020-10-22T23:06:29.983933-07:00 Time utcMicrosecondClock 3780886299961528 It is true that unless you have 8.1 or later and have GetSystemTimePreciseAsFileTime in kernel32 then Time will not work. Here: ``` $ git diff 712cfe6c3e29667b56e668d7641daced18efb666 platforms/win32/vm/sqWin32Heartbeat.c | more diff --git a/platforms/win32/vm/sqWin32Heartbeat.c b/platforms/win32/vm/sqWin32H eartbeat.c old mode 100644 new mode 100755 index 85d27674a..70c430889 --- a/platforms/win32/vm/sqWin32Heartbeat.c +++ b/platforms/win32/vm/sqWin32Heartbeat.c @@ -14,6 +14,7 @@ #include #include "sq.h" +#undef EXPORT #include "sqAssert.h" #include "sqMemoryFence.h" @@ -76,19 +77,41 @@ sqLong ioHighResClock(void) { return value; } +#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) + +/* Compute the current VM time basis, the number of microseconds from 1901. + * + * As of Windows 8 there is a FILETIME wall clock interface which is high + * precision and so does not have to be combined with the millisecond clock. + */ +# define currentUTCMicroseconds(a,b,c) currentUTCMicrosecondsImplementation() +static inline unsigned __int64 +currentUTCMicrosecondsImplementation(void) +{ + union { // got to love little-endian architectures... + FILETIME utcNowFiletime; + unsigned __int64 utcNow; + } un; + + // cannot fail... + GetSystemTimePreciseAsFileTime(&un.utcNowFiletime); + return un.utcNow / TocksPerMicrosecond - MicrosecondsFrom1601To1901; +} +#else // _WIN32_WINNT >= _WIN32_WINNT_WIN8 + ``` -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531#issuecomment-714939175 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 23 06:18:09 2020 From: notifications at github.com (Eliot Miranda) Date: Thu, 22 Oct 2020 23:18:09 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) In-Reply-To: References: Message-ID: Now, that said, I am happy to work with anyone to write this code such that it works on older versions. But the use of GetSystemTimePreciseAsFileTime is a huge improvement over the previous code. I apologise for breaking your setup, but I'm curious to understand why it did, given that GetSystemTimePreciseAsFileTime has been around since 8.0. BTW, I've been running this VM on Windows for hours using Terf without any issues with delays. HTH -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531#issuecomment-714941210 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 23 12:23:27 2020 From: notifications at github.com (Christoph Thiede) Date: Fri, 23 Oct 2020 05:23:27 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) In-Reply-To: References: Message-ID: Hi Eliot, I don't think this is a backward compatibility issue. As mentioned, I'm using Windows 2004 (Build 19041.572), which is definitely a younger Windows version than 8.1 (which was released in 2013 compared to 2020). Microsofts and its versioning chaos :-) And on my machine, time is definitively broken, or at least returning wrong values: ```smalltalk Smalltalk os platformName. "'Win32'" Smalltalk getSystemAttribute: 1007. "'CoInterpreter VMMaker.oscog-eem.2850 uuid: 4d7fc8a4-2c7d-4bad-8aeb-5f8c5766e12a Oct 21 2020'" DateAndTime now. "586455-01-18T10:21:42.099068+02:00" Time utcMicrosecondClock. "1194520452" ``` `GetSystemTimePreciseAsFileTime` per se works on my machine when I try to run [this code example](https://www.codeproject.com/articles/792410/high-resolution-clock-in-csharp#high-resolution-clock:~:text=High%20Resolution%20Clock,-On): ``` > HighResolutionDateTime.UtcNow [2020-10-23 12:20:19] ``` Should it be relevant that I am using the 64-bit edition of Windows? However, I can reproduce the issue using both the 32-bit and the 64-bit version of OSVM. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531#issuecomment-715308920 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 23 18:39:04 2020 From: notifications at github.com (Eliot Miranda) Date: Fri, 23 Oct 2020 11:39:04 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) In-Reply-To: References: Message-ID: That's weird. What's the definition for Time class>>utcMicrosecondClock? It should be primitive 240. Also, if you write a C program to print out the result of GetSystemTimePreciseAsFileTime, and to convert it to the Smalltalk epoch via WindowsTime / 10 + (microseconds from 1601 to 1901), what does that look like? -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531#issuecomment-715510140 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 23 19:19:23 2020 From: notifications at github.com (Christoph Thiede) Date: Fri, 23 Oct 2020 12:19:23 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) In-Reply-To: References: Message-ID: > What's the definition for Time class>>utcMicrosecondClock? It should be primitive 240. It is. I'm using a fresh trunk image. > Also, if you write a C program to print out the result of GetSystemTimePreciseAsFileTime, and to convert it to the Smalltalk epoch via WindowsTime / 10 + (microseconds from 1601 to 1901), what does that look like? Did I mention that my C is very rudimentary? 😅 This is what I wrote: ```c #include #include int main(void) { FILETIME ft; ULARGE_INTEGER ui; GetSystemTimePreciseAsFileTime(&ft); ui.LowPart=ft.dwLowDateTime; ui.HighPart=ft.dwHighDateTime; printf("%i", ui.QuadPart / 10 - 9467020800000000); } ``` And it outputs: ``` ❯ .\timeTest.exe 718860433 ``` Does this help? :-) -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531#issuecomment-715534338 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 23 20:35:26 2020 From: notifications at github.com (Nicolas Cellier) Date: Fri, 23 Oct 2020 13:35:26 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Win32/64 VM: update the system time basis to use the Windows 8 API (fae0d31) In-Reply-To: References: Message-ID: Wasn't the return type `static unsigned __int64` lost? Note that the cygwin/mingw compilation takes this #else path. Most probably explaining https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531 -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/fae0d31cd52341977d37d150d8d2c9272f9864bf#commitcomment-43526634 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Fri Oct 23 20:46:59 2020 From: noreply at github.com (Nicolas Cellier) Date: Fri, 23 Oct 2020 13:46:59 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 4f54ee: Fix https://github.com/OpenSmalltalk/opensmalltalk... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 4f54eed845a8daef7681d17c01f004c3a7b50c9d https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/4f54eed845a8daef7681d17c01f004c3a7b50c9d Author: Nicolas Cellier Date: 2020-10-23 (Fri, 23 Oct 2020) Changed paths: M platforms/win32/vm/sqWin32Heartbeat.c Log Message: ----------- Fix https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531 The return type of `currentUTCMicroseconds` was lost. For some reason, the cygwin/mingw takes this compilation path `#else // _WIN32_WINNT >= _WIN32_WINNT_WIN8` From notifications at github.com Fri Oct 23 20:47:03 2020 From: notifications at github.com (Nicolas Cellier) Date: Fri, 23 Oct 2020 13:47:03 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) In-Reply-To: References: Message-ID: Closed #531 via 4f54eed845a8daef7681d17c01f004c3a7b50c9d. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531#event-3915699876 -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Fri Oct 23 21:10:01 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 23 Oct 2020 21:10:01 0000 Subject: [Vm-dev] VM Maker: VMMakerUI-eem.29.mcz Message-ID: Eliot Miranda uploaded a new version of VMMakerUI to project VM Maker: http://source.squeak.org/VMMaker/VMMakerUI-eem.29.mcz ==================== Summary ==================== Name: VMMakerUI-eem.29 Author: eem Time: 23 October 2020, 2:09:59.699357 pm UUID: 140f3784-da7f-452a-8259-f3b8a34616c4 Ancestors: VMMakerUI-eem.28 Provide a much simpler much more ratuional mechanism for squashing duplicate mouse move events in the simulator. Simply peek last and update the last event's position if it's a duplicate of the next event. =============== Diff against VMMakerUI-eem.28 =============== Item was added: + ----- Method: CogVMSimulator>>eventQueue (in category '*VMMakerUI-InterpreterSimulation-Morphic') ----- + eventQueue + ^eventQueue ifNil: + [eventQueue := SharedQueue2 new]! Item was added: + ----- Method: SharedQueue>>withinPeekLastDo: (in category '*VMMakerUI-accessing') ----- + withinPeekLastDo: aBlock + "Evaluate aBlock with the last (most recently added) item in the queue within the critical section" + + ^readSynch + critical: + [accessProtect critical: + [writePosition > 1 ifTrue: + [aBlock value: (contentsArray at: writePosition - 1)]]] + ifLocked: [nil]! Item was added: + ----- Method: SharedQueue2>>withinPeekLastDo: (in category '*VMMakerUI-accessing') ----- + withinPeekLastDo: aBlock + "Evaluate aBlock with the last (most recently added) item in the queue within the critical section." + ^monitor critical: + [items isEmpty ifFalse: + [aBlock value: items last]]! Item was changed: Object subclass: #SimulatorEventTransformer + instanceVariableNames: 'modifiers' - instanceVariableNames: 'buttons modifiers lastMouseMoveEvent' classVariableNames: 'Default' poolDictionaries: 'EventSensorConstants' category: 'VMMakerUI-InterpreterSimulation-Morphic'! !SimulatorEventTransformer commentStamp: 'eem 7/14/2015 17:05' prior: 0! A SimulatorEventTransformer takes events as wrapped by HandMorph and converts them to a form a StackInterpreterSimulator can deal with. See HandMorph >> handleEvent to see what the wrapping entails. See HandMorph >> ProcessEvents or EventSensor >> fetchMoreEvents for examples of what an unwrapped event looks like when given to the system for pre-wrapping. Instance Variables ! Item was changed: ----- Method: SimulatorEventTransformer>>degenerateMouseEvent: (in category 'event transformation') ----- degenerateMouseEvent: aMorphicEvent "see HandMorph>>generateMouseEvent" modifiers := aMorphicEvent buttons >> 3. "Sad, but modifiers come in on mouse move events..." + ^{ EventTypeMouse. - aMorphicEvent type == #mouseMove - ifTrue: [buttons = 0 ifTrue: [^nil]] "filter-out mouse moves unless buttons are pressed, so simulation doersn't get window leave events when we leave its window" - ifFalse: [buttons := aMorphicEvent buttons]. - ^{ 1. aMorphicEvent timeStamp. aMorphicEvent position x. aMorphicEvent position y. + aMorphicEvent button bitAnd: 7. "thanks Ron T." + modifiers. "Thanks dtl" - buttons bitAnd: 7. "thanks Ron T." - buttons >> 3. "Thanks dtl" aMorphicEvent class == MouseButtonEvent ifTrue: [aMorphicEvent nClicks] ifFalse: [0]. + self windowIndex }! - 0 "this is windowIndex" }! Item was changed: ----- Method: SimulatorEventTransformer>>degenerateMouseEvent:for: (in category 'event transformation') ----- degenerateMouseEvent: aMorphicEvent for: aClient "Convert the mouse event into low-level events for the VM simulator (aClient). Filter-out mouse moves, and generate a fake mouse move before each button press. See HandMorph>>generateMouseEvent" + | translated newMouseEvent | - | translated | modifiers := aMorphicEvent buttons >> 3. "Sad, but modifiers come in on mouse move events..." "filter-out mouse moves unless buttons are pressed, so simulation doesn't get window leave events when we leave its window" aMorphicEvent type == #mouseMove ifTrue: [(aClient displayView bounds containsPoint: aMorphicEvent position) ifFalse: + [^self]]. + - [^self]. - "If buttons (which includes modifiers) change, or are pressed, communicate the event, otherwise (at least potentially) filter it out." - aMorphicEvent buttons = 0 ifTrue: - [lastMouseMoveEvent := aMorphicEvent copy. - lastMouseMoveEvent timeStamp: (aClient ioUTCMicroseconds // 1000). - lastMouseMoveEvent position: lastMouseMoveEvent position - aClient displayView bounds origin. - ^self]]. - "Now output the last move event, and synthesize an event near to the current position" - lastMouseMoveEvent ifNotNil: - [:lastMouseMove| - aClient - queueForwardedEvent: - { EventTypeMouse. - lastMouseMove timeStamp. - lastMouseMove position x. - lastMouseMove position y. - lastMouseMove buttons bitAnd: 7. - lastMouseMove buttons >> 3. - 0. - self windowIndex }; - queueForwardedEvent: - { EventTypeMouse. - aClient ioUTCMicroseconds // 1000 + lastMouseMove timeStamp // 2. - aMorphicEvent position x * 9 + lastMouseMove position x // 10. - aMorphicEvent position y * 9 + lastMouseMove position y // 10. - lastMouseMove buttons bitAnd: 7. - lastMouseMove buttons >> 3. - 0. - self windowIndex }. - lastMouseMoveEvent := nil]. - buttons := aMorphicEvent buttons. translated := aMorphicEvent position - aClient displayView bounds origin. + newMouseEvent := { EventTypeMouse. + aClient ioUTCMicroseconds // 1000. + translated x. + translated y. + aMorphicEvent buttons bitAnd: 7. "thanks Ron T." + modifiers. "Thanks dtl" + aMorphicEvent class == MouseButtonEvent ifTrue: [aMorphicEvent nClicks] ifFalse: [0]. + self windowIndex }. + aClient eventQueue withinPeekLastDo: + [:event| + "Squash mouse move events..." + (#[1 5 6 7 8] allSatisfy: [:index| (event at: index) = (newMouseEvent at: index)]) ifTrue: + [^event replaceFrom: 2 to: 4 with: newMouseEvent startingAt: 2]]. + aClient queueForwardedEvent: newMouseEvent! - aClient queueForwardedEvent: - { EventTypeMouse. - aClient ioUTCMicroseconds // 1000. - translated x. - translated y. - buttons bitAnd: 7. "thanks Ron T." - buttons >> 3. "Thanks dtl" - aMorphicEvent class == MouseButtonEvent ifTrue: [aMorphicEvent nClicks] ifFalse: [0]. - self windowIndex }! Item was changed: ----- Method: SimulatorEventTransformer>>initialize (in category 'initialize-release') ----- initialize + modifiers := 0! - buttons := modifiers := 0! Item was added: + ----- Method: StackInterpreterSimulator>>eventQueue (in category '*VMMakerUI-InterpreterSimulation-Morphic') ----- + eventQueue + ^eventQueue ifNil: + [eventQueue := SharedQueue2 new]! From notifications at github.com Fri Oct 23 21:17:32 2020 From: notifications at github.com (Nicolas Cellier) Date: Fri, 23 Oct 2020 14:17:32 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) In-Reply-To: References: Message-ID: Note that WINVER is defined differently in Makefile.tools and Makefile.msvc.tools... https://github.com/OpenSmalltalk/opensmalltalk-vm/search?q=WINVER That explains why cygwin/mingw compilation took a different path. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531#issuecomment-715594262 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Fri Oct 23 21:19:23 2020 From: no-reply at appveyor.com (AppVeyor) Date: Fri, 23 Oct 2020 21:19:23 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2276 Message-ID: <20201023211923.1.B80CE01F143FDC3E@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Fri Oct 23 21:40:55 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 23 Oct 2020 21:40:55 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2851.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2851.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2851 Author: eem Time: 23 October 2020, 2:40:48.096696 pm UUID: e46fa7ed-5535-4332-8d36-764329448a33 Ancestors: VMMaker.oscog-eem.2850 CoInterpreterMT: eliminate use of reenterInterpreter, thsi is StackInterpreter only now. FilePlugin: use methodReturnInteger: rather than methodReturnValue: ... intergerObjectOf:: Simulators: start to simulate the interrupt-driven inputSemaphore input event mechanism (with an egregious hack in ioRelinquishProcessorForMicroseconds: that we can probably get rid of when we understand the code better). The mystery is that the changes here do allow events to get in quickly (e.g. Run tests in a TestRunner) but the screen menu resolutely refuses to appear (?!?!). Move ioGetNextEvent:, queueForwardedEvent: & ioProcessEvents up into StackInterpreter (as doNotGenerate). Use DoubleWordArray for the input event buffer on 64-bits. =============== Diff against VMMaker.oscog-eem.2850 =============== Item was changed: ----- Method: CoInterpreterMT>>enterSmalltalkExecutiveImplementation (in category 'initialization') ----- enterSmalltalkExecutiveImplementation "Main entry-point into the interpreter at each execution level, where an execution level is either the start of execution or reentry for a callback. Capture the C stack pointers so that calls from machine-code into the C run-time occur at this level. This is the actual implementation, separated from enterSmalltalkExecutive so the simulator can wrap it in an exception handler and hence simulate the setjmp/longjmp. Override to return if a longjmp to reenterInterpreter passes a parameter greater than 1. This causes a return to threadSchedulingLoop:startingVM: and is used to surrender control to another thread." self assertSaneThreadAndProcess. + ^super enterSmalltalkExecutiveImplementation! - cogit assertCStackWellAligned. - cogit ceCaptureCStackPointers. - "Setjmp for reentry into interpreter from elsewhere, e.g. machine-code trampolines." - (self _setjmp: reenterInterpreter) > 1 ifTrue: - [^0]. - (self isMachineCodeFrame: framePointer) ifTrue: - [self returnToExecutive: false postContextSwitch: true - "NOTREACHED"]. - self setMethod: (self iframeMethod: framePointer). - instructionPointer = cogit ceReturnToInterpreterPC ifTrue: - [instructionPointer := self iframeSavedIP: framePointer]. - self assertValidExecutionPointe: instructionPointer r: framePointer s: stackPointer imbar: true line: #'__LINE__'. - self interpret. - "NOTREACHED" - ^0! Item was changed: ----- Method: CoInterpreterMT>>ownVM: (in category 'vm scheduling') ----- ownVM: threadIndexAndFlags "This is the entry-point for plugins and primitives that wish to reacquire the VM after having released it via disownVM or callbacks that want to acquire it without knowing their ownership status. This call will block until the VM is owned by the current thread or an error occurs. The argument should be the value answered by disownVM, or 0 for callbacks that don't know if they have disowned or not. This is both an optimization to avoid having to query thread- local storage for the current thread's index (since it can easily keep it in some local variable), and a record of when an unbound process becomes affined to a thread for the dynamic extent of some operation. Answer 0 if the current thread is known to the VM. Answer 1 if the current thread is unknown to the VM and takes ownership. Answer -1 if the current thread is unknown to the VM and fails to take ownership." | threadIndex flags vmThread myProc activeProc sched | threadIndexAndFlags = 0 ifTrue: [^self ownVMFromUnidentifiedThread]. threadIndex := threadIndexAndFlags bitAnd: ThreadIdMask. flags := threadIndexAndFlags >> DisownFlagsShift. (flags anyMask: DisownVMForProcessorRelinquish) ifTrue: [relinquishing := false. self sqLowLevelMFence]. (threadIndexAndFlags anyMask: LockGUIThreadFlag) ifTrue: [self assert: (noThreadingOfGUIThread and: [self inGUIThread]). self assert: disowningVMThread = nil. (flags anyMask: DisownVMLockOutFullGC) ifTrue: [objectMemory decrementFullGCLock]. cogit recordEventTrace ifTrue: [self recordTrace: TraceOwnVM thing: ConstZero source: 0]. ^0]. vmThread := cogThreadManager acquireVMFor: threadIndex. disownCount := disownCount - 1. (flags anyMask: DisownVMLockOutFullGC) ifTrue: [objectMemory decrementFullGCLock]. disowningVMThread notNil ifTrue: [vmThread = disowningVMThread ifTrue: [self cCode: '' inSmalltalk: [| range | range := self cStackRangeForThreadIndex: threadIndex. self assert: (range includes: CStackPointer). self assert: (range includes: CFramePointer)]. self assert: self successful. self assert: (objectMemory fetchPointer: MyListIndex ofObject: self activeProcess) = objectMemory nilObject. disowningVMThread := nil. cogit recordEventTrace ifTrue: [self recordTrace: TraceOwnVM thing: ConstOne source: 0]. ^0]. "if not preempted we're done." self preemptDisowningThread]. "We've been preempted; we must restore state and update the threadId in our process, and may have to put the active process to sleep." sched := self schedulerPointer. activeProc := objectMemory fetchPointer: ActiveProcessIndex ofObject: sched. (threadIndexAndFlags anyMask: OwnVMForeignThreadFlag) ifTrue: [self assert: foreignCallbackProcessSlot == ForeignCallbackProcess. myProc := objectMemory splObj: foreignCallbackProcessSlot. self assert: myProc ~= objectMemory nilObject. objectMemory splObj: foreignCallbackProcessSlot put: objectMemory nilObject] ifFalse: [myProc := cogThreadManager popAWOLProcess: vmThread]. self assert: activeProc ~= myProc. (activeProc ~= objectMemory nilObject and: [(objectMemory fetchPointer: MyListIndex ofObject: activeProc) = objectMemory nilObject]) ifTrue: [self putToSleep: activeProc yieldingIf: preemptionYields]. self assert: (objectMemory fetchPointer: MyListIndex ofObject: myProc) = (objectMemory splObj: ProcessInExternalCodeTag). objectMemory storePointer: ActiveProcessIndex ofObject: sched withValue: myProc; storePointerUnchecked: MyListIndex ofObject: myProc withValue: objectMemory nilObject. "Only unaffine if the process was affined at this level and did not become bound in the interim." ((threadIndexAndFlags anyMask: ProcessUnaffinedOnDisown) and: [(self isBoundProcess: myProc) not]) ifTrue: [self setOwnerIndexOfProcess: myProc to: 0 bind: false]. self initPrimCall. self externalSetStackPageAndPointersForSuspendedContextOfProcess: myProc. "If this primitive is called from machine code maintain the invariant that the return pc of an interpreter callee calling a machine code caller is ceReturnToInterpreterPC." (vmThread inMachineCode and: [instructionPointer >= objectMemory startOfMemory]) ifTrue: [self iframeSavedIP: framePointer put: instructionPointer. instructionPointer := cogit ceReturnToInterpreterPC]. newMethod := vmThread newMethodOrNull. argumentCount := vmThread argumentCount. - self cCode: - [self memcpy: reenterInterpreter - _: vmThread reenterInterpreter - _: (self sizeof: #'jmp_buf')] - inSmalltalk: - [reenterInterpreter := vmThread reenterInterpreter]. vmThread newMethodOrNull: nil. self cCode: '' inSmalltalk: [| range | range := self cStackRangeForThreadIndex: threadIndex. self assert: (range includes: vmThread cStackPointer). self assert: (range includes: vmThread cFramePointer)]. self setCFramePointer: vmThread cFramePointer setCStackPointer: vmThread cStackPointer. self assert: newMethod ~~ nil. cogit recordEventTrace ifTrue: [self recordTrace: TraceOwnVM thing: ConstTwo source: 0]. ^threadIndexAndFlags bitAnd: OwnVMForeignThreadFlag! Item was changed: ----- Method: CoInterpreterMT>>preemptDisowningThread (in category 'vm scheduling') ----- preemptDisowningThread "Set the relevant state for disowningVMThread so that it can resume after being preempted and set disowningVMThread to nil to indicate preemption. N.B. This should only be sent from checkPreemptionOfDisowningThread. There are essentially four things to do. a) save the VM's notion of the current C stack pointers; these are pointers into a thread's stack and must be saved and restored in thread switch. b) save the VM's notion of the current Smalltalk execution point. This is simply the suspend half of a process switch that saves the current context in the current process. c) add the process to the thread's set of AWOL processes so that the scheduler won't try to run the process while the thread has disowned the VM. d) save the in-primitive VM state, newMethod and argumentCount ownVM: will restore the VM context as of disownVM: from the above when it finds it has been preempted." | activeProc activeContext preemptedThread | self assert: disowningVMThread notNil. self assert: (disowningVMThread state = CTMUnavailable or: [disowningVMThread state = CTMWantingOwnership]). self cCode: '' inSmalltalk: [| range | range := self cStackRangeForThreadIndex: disowningVMThread index. self assert: (range includes: CStackPointer). self assert: (range includes: CFramePointer)]. cogit recordEventTrace ifTrue: [self recordTrace: TracePreemptDisowningThread thing: (objectMemory integerObjectOf: disowningVMThread index) source: 0]. disowningVMThread cStackPointer: CStackPointer. disowningVMThread cFramePointer: CFramePointer. activeProc := self activeProcess. self assert: (objectMemory fetchPointer: MyListIndex ofObject: activeProc) = objectMemory nilObject. objectMemory storePointer: MyListIndex ofObject: activeProc withValue: (objectMemory splObj: ProcessInExternalCodeTag). "The instructionPointer must be pushed because the convention for inactive stack pages is that the instructionPointer is top of stack. We need to know if this primitive is called from machine code because the invariant that the return pc of an interpreter callee calling a machine code caller is ceReturnToInterpreterPC must be maintained." self push: instructionPointer. self externalWriteBackHeadFramePointers. activeContext := self ensureFrameIsMarried: framePointer SP: stackPointer. objectMemory storePointer: SuspendedContextIndex ofObject: activeProc withValue: activeContext. "Since pushing the awol process may realloc disowningVMThread we need to reassign. But since we're going to nil disowningVMThread anyway we can assign to a local." preemptedThread := cogThreadManager pushAWOLProcess: activeProc on: disowningVMThread. disowningVMThread := nil. preemptedThread priority: (self quickFetchInteger: PriorityIndex ofObject: activeProc). (self ownerIndexOfProcess: activeProc) = 0 ifTrue: [self setOwnerIndexOfProcess: activeProc to: preemptedThread index bind: false] ifFalse: [self assert: (self ownerIndexOfProcess: activeProc) = preemptedThread index]. preemptedThread newMethodOrNull: newMethod; argumentCount: argumentCount; + inMachineCode: instructionPointer asUnsignedInteger <= objectMemory startOfMemory! - inMachineCode: instructionPointer asUnsignedInteger <= objectMemory startOfMemory. - self cCode: - [self memcpy: preemptedThread reenterInterpreter - _: reenterInterpreter - _: (self sizeof: #'jmp_buf')] - inSmalltalk: - [preemptedThread reenterInterpreter: reenterInterpreter]! Item was changed: ----- Method: CoInterpreterMT>>primitiveRelinquishProcessor (in category 'I/O primitives') ----- primitiveRelinquishProcessor "Relinquish the processor for up to the given number of microseconds. The exact behavior of this primitive is platform dependent. Override to check for waiting threads." + | microSecs threadIndexAndFlags currentCStackPointer currentCFramePointer | - | microSecs threadIndexAndFlags currentCStackPointer currentCFramePointer savedReenterInterpreter | microSecs := self stackTop. (objectMemory isIntegerObject: microSecs) ifFalse: [^self primitiveFail]. self assert: (objectMemory fetchPointer: MyListIndex ofObject: self activeProcess) = objectMemory nilObject. self assert: relinquishing not. "DO NOT allow relinquishing the processor while we are profiling since this may skew the time base for our measures (it may reduce processor speed etc). Instead we go full speed, therefore measuring the precise time we spend in the inner idle loop as a busy loop." nextProfileTick = 0 ifTrue: "Presumably we have nothing to do; this primitive is typically called from the background process. So we should /not/ try and activate any threads in the pool; they will waste cycles finding there is no runnable process, and will cause a VM abort if no runnable process is found. But we /do/ want to allow FFI calls that have completed, or callbacks a chance to get into the VM; they do have something to do. DisownVMForProcessorRelinquish indicates this." [currentCStackPointer := CStackPointer. currentCFramePointer := CFramePointer. - self cCode: - [self memcpy: savedReenterInterpreter asVoidPointer - _: reenterInterpreter - _: (self sizeof: #'jmp_buf')]. threadIndexAndFlags := self disownVM: DisownVMForProcessorRelinquish. self assert: relinquishing. self ioRelinquishProcessorForMicroseconds: (objectMemory integerValueOf: microSecs). self assert: relinquishing. self ownVM: threadIndexAndFlags. self assert: relinquishing not. self assert: cogThreadManager currentVMThread state = CTMAssignableOrInVM. self assert: currentCStackPointer = CStackPointer. self assert: currentCFramePointer = CFramePointer. + "In simulation we allow ioRelinquishProcessorForMicroseconds: to fail so that + we can arrange that the simulator responds to input events promply. This + *DOES NOT HAPPEN* in the real vm." + self cCode: [] inSmalltalk: [primFailCode ~= 0 ifTrue: [^self]]]. - self cCode: - [self assert: (self mem: (self cCoerceSimple: savedReenterInterpreter to: #'void *') - cm: reenterInterpreter - p: (self sizeof: #'jmp_buf')) = 0]]. self assert: (objectMemory fetchPointer: MyListIndex ofObject: self activeProcess) = objectMemory nilObject. self pop: 1 "microSecs; leave rcvr on stack"! Item was changed: ----- Method: CoInterpreterMT>>returnToSchedulingLoopAndReleaseVMOrWakeThread:source: (in category 'process primitive support') ----- returnToSchedulingLoopAndReleaseVMOrWakeThread: vmThread source: source - | savedReenterInterpreter | - self cCode: [self flag: 'this is just for debugging. Note the current C stack pointers'. cogThreadManager currentVMThread cStackPointer: CStackPointer; cFramePointer: CFramePointer] inSmalltalk: [| range | range := self cStackRangeForThreadIndex: cogThreadManager getVMOwner. self assert: (range includes: CStackPointer). self assert: (range includes: CFramePointer)]. - "We must use a copy of reenterInterpreter since we're giving up the VM to another vmThread." - self cCode: - [self memcpy: savedReenterInterpreter asVoidPointer - _: reenterInterpreter - _: (self sizeof: #'jmp_buf')] - inSmalltalk: - [savedReenterInterpreter := reenterInterpreter]. self recordThreadSwitchTo: (vmThread ifNotNil: [vmThread index] ifNil: [0]) source: source. vmThread ifNotNil: [cogThreadManager wakeVMThreadFor: vmThread index] ifNil: [cogThreadManager releaseVM]. "2 implies returning to the threadSchedulingLoop." + self shouldBeImplemented. + "was: self _longjmp: savedReenterInterpreter _: ReturnToThreadSchedulingLoop. + But now we have ceInvokeInterpret, not reenterInterpreter, so we have to fugure out a new way in..."! - self _longjmp: savedReenterInterpreter _: ReturnToThreadSchedulingLoop! Item was changed: CoInterpreterMT subclass: #CogVMSimulator + instanceVariableNames: 'parent enableCog byteCount lastPollCount lastExtPC sendCount lookupCount printSends traceOn myBitBlt displayForm fakeForm imageName pluginList mappedPluginEntries quitBlock transcript displayView eventTransformer printFrameAtEachStep printBytecodeAtEachStep systemAttributes uniqueIndices uniqueIndex breakCount atEachStepBlock startMicroseconds lastYieldMicroseconds externalSemaphoreSignalRequests externalSemaphoreSignalResponses extSemTabSize debugStackDepthDictionary performFilters eventQueue effectiveCogCodeSize expectedSends expecting inputSemaphoreIndex' - instanceVariableNames: 'parent enableCog byteCount lastPollCount lastExtPC sendCount lookupCount printSends traceOn myBitBlt displayForm fakeForm imageName pluginList mappedPluginEntries quitBlock transcript displayView eventTransformer printFrameAtEachStep printBytecodeAtEachStep systemAttributes uniqueIndices uniqueIndex breakCount atEachStepBlock startMicroseconds lastYieldMicroseconds externalSemaphoreSignalRequests externalSemaphoreSignalResponses extSemTabSize debugStackDepthDictionary performFilters eventQueue effectiveCogCodeSize expectedSends expecting' classVariableNames: 'ByteCountsPerMicrosecond ExpectedSends NLRFailures NLRSuccesses StackAlteringPrimitives' poolDictionaries: '' category: 'VMMaker-JITSimulation'! !CogVMSimulator commentStamp: 'eem 9/3/2013 11:16' prior: 0! This class defines basic memory access and primitive simulation so that the CoInterpreter can run simulated in the Squeak environment. It also defines a number of handy object viewing methods to facilitate pawing around in the object memory. Remember that you can test the Cogit using its class-side in-image compilation facilities. To see the thing actually run, you could (after backing up this image and changes), execute (CogVMSimulator new openOn: Smalltalk imageName) test and be patient both to wait for things to happen, and to accept various things that may go wrong depending on how large or unusual your image may be. We usually do this with a small and simple benchmark image. Here's an example to launch the simulator in a window. The bottom-right window has a menu packed with useful stuff: (CogVMSimulator newWithOptions: #(Cogit StackToRegisterMappingCogit)) desiredNumStackPages: 8; openOn: '/Users/eliot/Cog/startreader.image'; openAsMorph; run Here's a hairier example that I (Eliot) actually use in daily development with some of the breakpoint facilities commented out. | cos proc opts | CoInterpreter initializeWithOptions: (opts := Dictionary newFromPairs: #(Cogit StackToRegisterMappingCogit)). CogVMSimulator chooseAndInitCogitClassWithOpts: opts. cos := CogVMSimulator new. "cos initializeThreadSupport." "to test the multi-threaded VM" cos desiredNumStackPages: 8. "to set the size of the stack zone" "cos desiredCogCodeSize: 8 * 1024 * 1024." "to set the size of the Cogit's code zone" cos openOn: '/Users/eliot/Squeak/Squeak4.4/trunk44.image'. "choose your favourite image" "cos setBreakSelector: 'r:degrees:'." "set a breakpoint at a specific selector" proc := cos cogit processor. "cos cogit sendTrace: 7." "turn on tracing" "set a complex breakpoint at a specific point in machine code" "cos cogit singleStep: true; breakPC: 16r56af; breakBlock: [:cg| cos framePointer > 16r101F3C and: [(cos longAt: cos framePointer - 4) = 16r2479A and: [(cos longAt: 16r101F30) = (cos longAt: 16r101F3C) or: [(cos longAt: 16r101F2C) = (cos longAt: 16r101F3C)]]]]; sendTrace: 1". "[cos cogit compilationTrace: -1] on: MessageNotUnderstood do: [:ex|]." "turn on compilation tracing in the StackToRegisterMappingCogit" "cos cogit setBreakMethod: 16rB38880." cos openAsMorph; "toggleTranscript;" "toggleTranscript will send output to the Transcript instead of the morph's rather small window" halt; run! Item was changed: ----- Method: CogVMSimulator>>initialize (in category 'initialization') ----- initialize "Initialize the CogVMSimulator when running the interpreter inside Smalltalk. The primary responsibility of this method is to allocate Smalltalk Arrays for variables that will be declared as statically-allocated global arrays in the translated code." super initialize. transcript := Transcript. objectMemory ifNil: [objectMemory := self class objectMemoryClass simulatorClass new]. cogit ifNil: [cogit := self class cogitClass new setInterpreter: self]. objectMemory coInterpreter: self cogit: cogit. (cogit numRegArgs > 0 and: [VMClass initializationOptions at: #CheckStackDepth ifAbsent: [true]]) ifTrue: [debugStackDepthDictionary := Dictionary new]. cogThreadManager ifNotNil: [super initialize]. self assert: ConstMinusOne = (objectMemory integerObjectOf: -1). cogMethodZone := cogit methodZone. "Because Slang can't remove intermediate implicit receivers (cogit methodZone foo doesn't reduce to foo())" enableCog := true. methodCache := Array new: MethodCacheSize. nsMethodCache := Array new: NSMethodCacheSize. atCache := nil. self flushMethodCache. cogCompiledCodeCompactionCalledFor := false. gcSemaphoreIndex := 0. externalSemaphoreSignalRequests := externalSemaphoreSignalResponses := #(). externalPrimitiveTable := CArrayAccessor on: (Array new: MaxExternalPrimitiveTableSize). externalPrimitiveTableFirstFreeIndex := 0. primitiveTable := self class primitiveTable copy. self initializePluginEntries. desiredNumStackPages := InitializationOptions at: #desiredNumStackPages ifAbsent: [0]. desiredEdenBytes := InitializationOptions at: #desiredEdenBytes ifAbsent: [0]. desiredCogCodeSize := InitializationOptions at: #desiredCogCodeSize ifAbsent: [0]. "This is initialized on loading the image, but convenient for testing stack page values..." numStackPages := self defaultNumStackPages. startMicroseconds := lastYieldMicroseconds := self ioUTCStartMicroseconds. maxLiteralCountForCompile := MaxLiteralCountForCompile. minBackwardJumpCountForCompile := MinBackwardJumpCountForCompile. flagInterpretedMethods := false. "initialize InterpreterSimulator variables used for debugging" byteCount := lastPollCount := sendCount := lookupCount := 0. quitBlock := [^self close]. traceOn := true. printSends := printFrameAtEachStep := printBytecodeAtEachStep := false. myBitBlt := BitBltSimulator new setInterpreter: self. displayForm := fakeForm := 'Display has not yet been installed' asDisplayText form. - eventQueue := SharedQueue new. suppressHeartbeatFlag := deferSmash := deferredSmash := false. systemAttributes := Dictionary new. primTraceLog := CArrayAccessor on: (Array new: 256 withAll: 0). primTraceLogIndex := 0. traceLog := CArrayAccessor on: (Array new: TraceBufferSize withAll: 0). traceLogIndex := 0. traceSources := TraceSources. statCodeCompactionCount := 0. statCodeCompactionUsecs := 0. extSemTabSize := 256! Item was added: + ----- Method: CogVMSimulator>>inputSemaphoreIndex (in category 'I/O primitive support') ----- + inputSemaphoreIndex + ^inputSemaphoreIndex! Item was removed: - ----- Method: CogVMSimulator>>ioGetNextEvent: (in category 'I/O primitives') ----- - ioGetNextEvent: evtBuf - | evt | - "SimulatorMorphicModel browse" - eventQueue ifNil: - [^self primitiveFail]. - eventQueue isEmpty ifFalse: - [evt := eventQueue next. - 1 to: evt size do: - [:i| - (evt at: i) ifNotNil: - [:val| - evtBuf - at: i - 1 - put: (i = 2 ifTrue: [val bitAnd: MillisecondClockMask] ifFalse: [val])]]]! Item was removed: - ----- Method: CogVMSimulator>>ioProcessEvents (in category 'I/O primitives') ----- - ioProcessEvents! Item was changed: ----- Method: CogVMSimulator>>ioRelinquishProcessorForMicroseconds: (in category 'I/O primitives support') ----- ioRelinquishProcessorForMicroseconds: microseconds "In the simulator give an indication that we're idling and check for input. + If there's an input event, fail to give the system a chance to respond to it in a timely manner. If called from machine code then increment the byte count since the clock is derived from it and the clock will not advance otherwise. If we're simulating threading we're in difficulties. We need a UI process (to run activities such as fill-in-the-blanks) but we also need an independent thread of control to run this VM thread. So we need to fork a new UI process." Display reverse: ((displayView ifNil: [0 at 0] ifNotNil: [displayView bounds origin]) extent: 16 at 16). - Sensor peekEvent ifNotNil: - [self forceInterruptCheck]. Processor activeProcess == Project uiProcess ifTrue: [World doOneCycle]. + (stackLimit = self allOnesAsCharStar + and: [nextPollUsecs <= self ioUTCMicroseconds]) + ifTrue: + ["Not only do we need to fail, we also need to push time faster + since the damn Morphic eventTickler process waits on a delay." + "ioUTCMicroseconds" + byteCount := byteCount + (1000 * ByteCountsPerMicrosecond). + self primitiveFail] + ifFalse: + [microseconds >= 1000 + ifTrue: [self isThreadedVM ifTrue: + [self forceInterruptCheckFromHeartbeat]. + (Delay forMilliseconds: microseconds + 999 // 1000) wait] + ifFalse: [Processor yield]]. - microseconds >= 1000 - ifTrue: [self isThreadedVM ifTrue: - [self forceInterruptCheckFromHeartbeat]. - (Delay forMilliseconds: microseconds + 999 // 1000) wait] - ifFalse: [Processor yield]. byteCount := byteCount + (microseconds * ByteCountsPerMicrosecond) - 1. self incrementByteCount! Item was changed: ----- Method: CogVMSimulator>>ioSetInputSemaphore: (in category 'I/O primitives') ----- ioSetInputSemaphore: index + inputSemaphoreIndex := index! - - self primitiveFail! Item was removed: - ----- Method: CogVMSimulator>>queueForwardedEvent: (in category 'I/O primitives support') ----- - queueForwardedEvent: event - eventQueue ifNil: - [eventQueue := SharedQueue new]. - eventQueue nextPut: event! Item was changed: ----- Method: CogVMSimulator>>signalSemaphoreWithIndex: (in category 'process primitive support') ----- signalSemaphoreWithIndex: index + "Record the given semaphore index in the double buffer semaphores array to be signaled + at the next convenient moment. Force a real interrupt check as soon as possible. + This is a simulation. See platforms/Cross/vm/sqExternalSemaphores.c for the real code. - "This is a simulation. See platforms/Cross/vm/sqExternalSemaphores.c for the real code. Thanks to Levente Uzoni for making this version almost thread-safe (in Smalltalk)" | originalResponses newRequests newResponses | index <= 0 ifTrue: [^false]. index > externalSemaphoreSignalRequests size ifTrue: [newRequests := Array new: 1 << index highBit withAll: 0. newResponses := newRequests shallowCopy]. "This is a lock-free thread-safe grow...; thanks Levente" originalResponses := externalSemaphoreSignalResponses. [index > externalSemaphoreSignalRequests size] whileTrue: [newRequests replaceFrom: 1 to: externalSemaphoreSignalRequests size with: externalSemaphoreSignalRequests startingAt: 1. newResponses replaceFrom: 1 to: externalSemaphoreSignalResponses size with: externalSemaphoreSignalResponses startingAt: 1. externalSemaphoreSignalResponses == originalResponses "This should always be true." ifTrue: [externalSemaphoreSignalRequests := newRequests. externalSemaphoreSignalResponses := newResponses] ifFalse: [originalResponses := externalSemaphoreSignalResponses]]. "This is not thread-safe however..." externalSemaphoreSignalRequests at: index put: (externalSemaphoreSignalRequests at: index) + 1. ^true! Item was changed: ----- Method: FilePlugin>>primitiveFileReadWithPinning (in category 'file primitives') ----- primitiveFileReadWithPinning "This version of primitiveFileRead is for garbage collectors that support pinning." | count startIndex array file slotSize elementSize bytesRead | count := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 0). startIndex := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 1). array := interpreterProxy stackValue: 2. file := self fileValueOf: (interpreterProxy stackValue: 3). (interpreterProxy failed "buffer can be any indexable words or bytes object except CompiledMethod" or: [(interpreterProxy isWordsOrBytes: array) not]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. slotSize := interpreterProxy slotSizeOf: array. (startIndex >= 1 and: [startIndex + count - 1 <= slotSize]) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. "Note: adjust startIndex for zero-origin byte indexing" elementSize := slotSize = 0 ifTrue: [1] ifFalse: [(interpreterProxy byteSizeOf: array) // slotSize]. bytesRead := self sqFile: file Read: count * elementSize Into: (interpreterProxy cCoerce: (interpreterProxy firstIndexableField: array) to: #'char *') At: startIndex - 1 * elementSize. interpreterProxy failed ifFalse: + [interpreterProxy methodReturnInteger: bytesRead // elementSize] "answer # of elements read"! - [interpreterProxy - methodReturnValue: (interpreterProxy integerObjectOf: bytesRead // elementSize) "push # of elements read"]! Item was changed: ----- Method: FilePlugin>>primitiveFileReadWithoutPinning (in category 'file primitives') ----- primitiveFileReadWithoutPinning "This version of primitiveFileRead is for garbage collectors without support for pinning." | retryCount count startIndex array file elementSize bytesRead | retryCount := 0. count := interpreterProxy positive32BitValueOf: (interpreterProxy stackValue: 0). startIndex := interpreterProxy positive32BitValueOf: (interpreterProxy stackValue: 1). [array := interpreterProxy stackValue: 2. file := self fileValueOf: (interpreterProxy stackValue: 3). (interpreterProxy failed "buffer can be any indexable words or bytes object except CompiledMethod" or: [(interpreterProxy isWordsOrBytes: array) not]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. elementSize := (interpreterProxy isWords: array) ifTrue: [4] ifFalse: [1]. (startIndex >= 1 and: [(startIndex + count - 1) <= (interpreterProxy slotSizeOf: array)]) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. "Note: adjust startIndex for zero-origin indexing" bytesRead := self sqFile: file Read: count * elementSize Into: (interpreterProxy cCoerce: (interpreterProxy firstIndexableField: array) to: #'char *') At: (startIndex - 1) * elementSize. interpreterProxy primitiveFailureCode = PrimErrObjectMayMove and: [(retryCount := retryCount + 1) <= 2] "Two objects, the file and the array can move"] whileTrue: [interpreterProxy tenuringIncrementalGC; primitiveFailFor: PrimNoErr]. interpreterProxy failed ifFalse: [interpreterProxy + methodReturnInteger: bytesRead // elementSize "push # of elements read"]! - methodReturnValue: (interpreterProxy integerObjectOf: bytesRead // elementSize) "push # of elements read"]! Item was changed: ----- Method: FilePlugin>>primitiveFileWrite (in category 'file primitives') ----- primitiveFileWrite | count startIndex array file slotSize elementSize bytesWritten | count := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 0). startIndex := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 1). array := interpreterProxy stackValue: 2. file := self fileValueOf: (interpreterProxy stackValue: 3). (interpreterProxy failed "buffer can be any indexable words or bytes object except CompiledMethod" or: [(interpreterProxy isWordsOrBytes: array) not]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. slotSize := interpreterProxy slotSizeOf: array. (startIndex >= 1 and: [startIndex + count - 1 <= slotSize]) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. "Note: adjust startIndex for zero-origin byte indexing" elementSize := slotSize = 0 ifTrue: [1] ifFalse: [(interpreterProxy byteSizeOf: array) // slotSize]. bytesWritten := self sqFile: file Write: count * elementSize From: (interpreterProxy cCoerce: (interpreterProxy firstIndexableField: array) to: #'char *') At: startIndex - 1 * elementSize. interpreterProxy failed ifFalse: + [interpreterProxy methodReturnInteger: bytesWritten // elementSize] "answer # of elements written"! - [interpreterProxy methodReturnValue: (interpreterProxy integerObjectOf: bytesWritten // elementSize)]! Item was changed: ----- Method: InterpreterPrimitives>>primitiveRelinquishProcessor (in category 'I/O primitives') ----- primitiveRelinquishProcessor "Relinquish the processor for up to the given number of microseconds. The exact behavior of this primitive is platform dependent." | microSecs | microSecs := self stackIntegerValue: 0. + self successful ifTrue: - self successful ifTrue: [ "DO NOT allow relinquishing the processor while we are profiling since this may skew the time base for our measures (it may reduce processor speed etc). Instead we go full speed, therefore measuring the precise time we spend in the inner idle loop as a busy loop." + [nextProfileTick = 0 ifTrue: + [self ioRelinquishProcessorForMicroseconds: microSecs. + "In simulation we allow ioRelinquishProcessorForMicroseconds: to fail so that + we can arrange that the simulator responds to input events promply. This + *DOES NOT HAPPEN* in the real vm." + self cCode: [] inSmalltalk: [primFailCode ~= 0 ifTrue: [^self]]]. + self pop: 1] "microSecs; leave rcvr on stack"! - nextProfileTick = 0 ifTrue:[self ioRelinquishProcessorForMicroseconds: microSecs]. - self pop: 1. "microSecs; leave rcvr on stack" - ]! Item was changed: ----- Method: Spur64BitMemoryManager>>newInputEventAccessorOfSize: (in category 'simulation') ----- newInputEventAccessorOfSize: numElements + ^CArrayAccessor on: (DoubleWordArray new: 8)! - self flag: #endianness. - ^(CPluggableAccessor on: (WordArray new: 16)) - atBlock: [:obj :idx| | v | - v := (obj at: idx - 1 * 2 + 1) + ((obj at: idx - 1 * 2 + 2) << 32). - v >> 63 > 0 ifTrue: - [v := v - (1 << 64)]. - v] - atPutBlock: [:obj :idx :val| - obj at: idx - 1 * 2 + 1 put: (val bitAnd: 16rFFFFFFFF). - obj at: idx - 1 * 2 + 2 put: (val >> 32 bitAnd: 16rFFFFFFFF). - val]; - objectSize: 8! Item was added: + ----- Method: StackInterpreter>>ioGetNextEvent: (in category 'I/O primitive support') ----- + ioGetNextEvent: evtBuf + + "SimulatorMorphicModel browse" + ^self eventQueue + ifNil: [self primitiveFail] + ifNotNil: + [:eventQueue| + eventQueue nextOrNil ifNotNil: + [:evt| + 1 to: evt size do: + [:i| + (evt at: i) ifNotNil: + [:val| + evtBuf at: i - 1 put: val]]]]! Item was added: + ----- Method: StackInterpreter>>ioProcessEvents (in category 'I/O primitive support') ----- + ioProcessEvents + ! Item was added: + ----- Method: StackInterpreter>>queueForwardedEvent: (in category 'I/O primitive support') ----- + queueForwardedEvent: event + "SimulatorMorphicModel browse" + + self eventQueue nextPut: event. + self inputSemaphoreIndex + ifNotNil: + [:isi| self signalSemaphoreWithIndex: isi] + ifNil: + [nextPollUsecs := self ioUTCMicroseconds. + self forceInterruptCheck]! Item was changed: StackInterpreterPrimitives subclass: #StackInterpreterSimulator + instanceVariableNames: 'parent bootstrapping byteCount breakCount sendCount lookupCount printSends printReturns traceOn myBitBlt displayForm fakeForm filesOpen imageName pluginList mappedPluginEntries quitBlock transcript displayView eventTransformer printFrameAtEachStep printBytecodeAtEachStep systemAttributes startMicroseconds lastYieldMicroseconds externalSemaphoreSignalRequests externalSemaphoreSignalResponses extSemTabSize atEachStepBlock disableBooleanCheat performFilters eventQueue assertVEPAES primTraceLog breakBlock inputSemaphoreIndex' - instanceVariableNames: 'parent bootstrapping byteCount breakCount sendCount lookupCount printSends printReturns traceOn myBitBlt displayForm fakeForm filesOpen imageName pluginList mappedPluginEntries quitBlock transcript displayView eventTransformer printFrameAtEachStep printBytecodeAtEachStep systemAttributes startMicroseconds lastYieldMicroseconds externalSemaphoreSignalRequests externalSemaphoreSignalResponses extSemTabSize atEachStepBlock disableBooleanCheat performFilters eventQueue assertVEPAES primTraceLog breakBlock' classVariableNames: '' poolDictionaries: '' category: 'VMMaker-InterpreterSimulation'! !StackInterpreterSimulator commentStamp: 'eem 9/3/2013 11:05' prior: 0! This class defines basic memory access and primitive simulation so that the StackInterpreter can run simulated in the Squeak environment. It also defines a number of handy object viewing methods to facilitate pawing around in the object memory. To see the thing actually run, you could (after backing up this image and changes), execute (StackInterpreterSimulator new openOn: Smalltalk imageName) test ((StackInterpreterSimulator newWithOptions: #(NewspeakVM true MULTIPLEBYTECODESETS true)) openOn: 'ns101.image') test and be patient both to wait for things to happen, and to accept various things that may go wrong depending on how large or unusual your image may be. We usually do this with a small and simple benchmark image. Here's an example of what Eliot uses to launch the simulator in a window. The bottom-right window has a menu packed with useful stuff: | vm | vm := StackInterpreterSimulator newWithOptions: #(). vm openOn: '/Users/eliot/Squeak/Squeak4.4/trunk44.image'. vm setBreakSelector: #&. vm openAsMorph; run! Item was changed: ----- Method: StackInterpreterSimulator>>initialize (in category 'initialization') ----- initialize "Initialize the StackInterpreterSimulator when running the interpreter inside Smalltalk. The primary responsibility of this method is to allocate Smalltalk Arrays for variables that will be declared as statically-allocated global arrays in the translated code." super initialize. bootstrapping := false. transcript := Transcript. objectMemory ifNil: [objectMemory := self class objectMemoryClass simulatorClass new]. objectMemory coInterpreter: self. self assert: ConstMinusOne = (objectMemory integerObjectOf: -1). methodCache := Array new: MethodCacheSize. nsMethodCache := Array new: NSMethodCacheSize. atCache := Array new: AtCacheTotalSize. self flushMethodCache. gcSemaphoreIndex := 0. externalSemaphoreSignalRequests := externalSemaphoreSignalResponses := #(). externalPrimitiveTable := CArrayAccessor on: (Array new: MaxExternalPrimitiveTableSize). externalPrimitiveTableFirstFreeIndex := 0. primitiveTable := self class primitiveTable copy. self initializePluginEntries. desiredNumStackPages := desiredEdenBytes := 0. "This is initialized on loading the image, but convenient for testing stack page values..." numStackPages := self defaultNumStackPages. startMicroseconds := lastYieldMicroseconds := self ioUTCStartMicroseconds. "initialize InterpreterSimulator variables used for debugging" byteCount := sendCount := lookupCount := 0. quitBlock := [^self close]. traceOn := true. printSends := printReturns := printFrameAtEachStep := printBytecodeAtEachStep := false. myBitBlt := BitBltSimulator new setInterpreter: self. displayForm := fakeForm := 'Display has not yet been installed' asDisplayText form. - eventQueue := SharedQueue new. suppressHeartbeatFlag := false. systemAttributes := Dictionary new. extSemTabSize := 256. disableBooleanCheat := false. assertVEPAES := false. "a flag so the assertValidExecutionPointers can be disabled for simulation speed and enabled when necessary."! Item was added: + ----- Method: StackInterpreterSimulator>>inputSemaphoreIndex (in category 'I/O primitive support') ----- + inputSemaphoreIndex + ^inputSemaphoreIndex! Item was removed: - ----- Method: StackInterpreterSimulator>>ioGetNextEvent: (in category 'I/O primitives') ----- - ioGetNextEvent: evtBuf - | evt | - "SimulatorMorphicModel browse" - eventQueue ifNil: - [^self primitiveFail]. - eventQueue isEmpty ifFalse: - [evt := eventQueue next. - 1 to: evt size do: - [:i| - (evt at: i) ifNotNil: - [:val| - evtBuf - at: i - 1 - put: (i = 2 ifTrue: [val bitAnd: MillisecondClockMask] ifFalse: [val])]]]! Item was removed: - ----- Method: StackInterpreterSimulator>>ioProcessEvents (in category 'I/O primitives') ----- - ioProcessEvents! Item was changed: ----- Method: StackInterpreterSimulator>>ioRelinquishProcessorForMicroseconds: (in category 'I/O primitives support') ----- ioRelinquishProcessorForMicroseconds: microseconds + "In the simulator give an indication that we're idling and check for input. + If there's an input event, fail to give the system a chance to respond to it in a timely manner." - "In the simulator give an indication that we're idling and check for input." Display reverse: ((displayView ifNil: [0 at 0] ifNotNil: [displayView bounds origin]) extent: 16 at 16). - Sensor peekEvent ifNotNil: - [self forceInterruptCheck]. Processor activeProcess == Project uiProcess ifTrue: [World doOneCycle]. + (stackLimit = self allOnesAsCharStar + and: [nextPollUsecs <= self ioUTCMicroseconds]) + ifTrue: + ["Not only do we need to fail, we also need to push time faster + since the damn Morphic eventTickler process waits on a delay." + "ioUTCMicroseconds" + byteCount := byteCount + (1000 * 50). + self primitiveFail] + ifFalse: + [microseconds >= 1000 + ifTrue: + [stackLimit = self allOnesAsCharStar ifFalse: + [(Delay forMilliseconds: microseconds + 999 // 1000) wait]] + ifFalse: [Processor yield]]. - microseconds >= 1000 - ifTrue: [(Delay forMilliseconds: microseconds + 999 // 1000) wait] - ifFalse: [Processor yield]. "And increase the byteCount form which the microsecond clock is derived..." byteCount := byteCount + microseconds - 1. self incrementByteCount! Item was changed: ----- Method: StackInterpreterSimulator>>ioSetInputSemaphore: (in category 'I/O primitives') ----- ioSetInputSemaphore: index + inputSemaphoreIndex := index! - - self primitiveFail! Item was removed: - ----- Method: StackInterpreterSimulator>>queueForwardedEvent: (in category 'I/O primitives support') ----- - queueForwardedEvent: event - eventQueue ifNil: - [eventQueue := SharedQueue new]. - eventQueue nextPut: event! Item was changed: ----- Method: StackInterpreterSimulator>>signalSemaphoreWithIndex: (in category 'process primitive support') ----- signalSemaphoreWithIndex: index + "Record the given semaphore index in the double buffer semaphores array to be signaled + at the next convenient moment. Force a real interrupt check as soon as possible. + This is a simulation. See platforms/Cross/vm/sqExternalSemaphores.c for the real code. - "This is a simulation. See platforms/Cross/vm/sqExternalSemaphores.c for the real code. Thanks to Levente Uzoni for making this version almost thread-safe (in Smalltalk)" | originalResponses newRequests newResponses | index <= 0 ifTrue: [^false]. index > externalSemaphoreSignalRequests size ifTrue: [newRequests := Array new: 1 << index highBit withAll: 0. newResponses := newRequests shallowCopy]. "This is a lock-free thread-safe grow...; thanks Levente" originalResponses := externalSemaphoreSignalResponses. [index > externalSemaphoreSignalRequests size] whileTrue: [newRequests replaceFrom: 1 to: externalSemaphoreSignalRequests size with: externalSemaphoreSignalRequests startingAt: 1. newResponses replaceFrom: 1 to: externalSemaphoreSignalResponses size with: externalSemaphoreSignalResponses startingAt: 1. externalSemaphoreSignalResponses == originalResponses "This should always be true." ifTrue: [externalSemaphoreSignalRequests := newRequests. externalSemaphoreSignalResponses := newResponses] ifFalse: [originalResponses := externalSemaphoreSignalResponses]]. "This is not thread-safe however..." externalSemaphoreSignalRequests at: index put: (externalSemaphoreSignalRequests at: index) + 1. ^true! From builds at travis-ci.org Fri Oct 23 21:53:37 2020 From: builds at travis-ci.org (Travis CI) Date: Fri, 23 Oct 2020 21:53:37 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2274 (Cog - 4f54eed) In-Reply-To: Message-ID: <5f9350e124ce0_13ff4b96c2c38967d6@travis-tasks-78b959f4ff-8cxct.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2274 Status: Still Failing Duration: 1 hr, 5 mins, and 16 secs Commit: 4f54eed (Cog) Author: Nicolas Cellier Message: Fix https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531 The return type of `currentUTCMicroseconds` was lost. For some reason, the cygwin/mingw takes this compilation path `#else // _WIN32_WINNT >= _WIN32_WINNT_WIN8` View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/efb4b1c82fd8...4f54eed845a8 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/738424974?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Fri Oct 23 23:05:27 2020 From: notifications at github.com (Christoph Thiede) Date: Fri, 23 Oct 2020 16:05:27 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Heart defect on Windows since October (#531) In-Reply-To: References: Message-ID: Ah, thanks a lot, Nicolas! I confirm that the issues do no longer occur with the 202010232046 build. :-) -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531#issuecomment-715625785 -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Sat Oct 24 03:21:08 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 24 Oct 2020 03:21:08 0000 Subject: [Vm-dev] VM Maker: Cog-eem.412.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.412.mcz ==================== Summary ==================== Name: Cog-eem.412 Author: eem Time: 23 October 2020, 8:21:06.015949 pm UUID: 5aa6e5fb-f48c-45fc-9b43-a5ffda953561 Ancestors: Cog-eem.411 Simplifications in set/void register state. State to revive MultiProcessor. =============== Diff against Cog-eem.411 =============== Item was removed: - ----- Method: BochsIA32Alien>>setRegisterState: (in category 'accessing-abstract') ----- - setRegisterState: aRegisterStateArray - "N.B. keep in sync with voidRegisterState" - self eax: (aRegisterStateArray at: 1). - self ebx: (aRegisterStateArray at: 2). - self ecx: (aRegisterStateArray at: 3). - self edx: (aRegisterStateArray at: 4). - self esp: (aRegisterStateArray at: 5). - self ebp: (aRegisterStateArray at: 6). - self esi: (aRegisterStateArray at: 7). - self edi: (aRegisterStateArray at: 8). - self eip: (aRegisterStateArray at: 9). - self eflags: (aRegisterStateArray at: 10). - self xmm0low: (aRegisterStateArray at: 11). - self xmm1low: (aRegisterStateArray at: 12). - self xmm2low: (aRegisterStateArray at: 13). - self xmm3low: (aRegisterStateArray at: 14). - self xmm4low: (aRegisterStateArray at: 15). - self xmm5low: (aRegisterStateArray at: 16). - self xmm6low: (aRegisterStateArray at: 17). - self xmm7low: (aRegisterStateArray at: 18)! Item was removed: - ----- Method: BochsIA32Alien>>voidRegisterState (in category 'accessing-abstract') ----- - voidRegisterState - "N.B. keep in sync with setRegisterState:" - self setRegisterState: (Array new: 18 withAll: 0)! Item was added: + ----- Method: CogProcessorAlien>>setRegisterState: (in category 'accessing-abstract') ----- + setRegisterState: aRegisterStateArray + "N.B. keep in sync with registerState, voidRegisterState, registerStateSetters, registerStateGetters" + | setters | + setters := self registerStateSetters. + aRegisterStateArray withIndexDo: + [:state :index| + self perform: (setters at: index) with: state]! Item was added: + ----- Method: CogProcessorAlien>>voidRegisterState (in category 'accessing-abstract') ----- + voidRegisterState + "N.B. keep in sync with registerState, voidRegisterState, registerStateSetters, registerStateGetters" + self registerStateSetters do: + [:setter| self perform: setter with: 0]! Item was removed: - ----- Method: GdbARMAlien>>setRegisterState: (in category 'accessing-abstract') ----- - setRegisterState: aRegisterStateArray - "N.B. keep in sync with voidRegisterState" - - self r0: (aRegisterStateArray at: 1). - self r1: (aRegisterStateArray at: 2). - self r2: (aRegisterStateArray at: 3). - self r3: (aRegisterStateArray at: 4). - self r4: (aRegisterStateArray at: 5). - self r5: (aRegisterStateArray at: 6). - self r6: (aRegisterStateArray at: 7). - self r7: (aRegisterStateArray at: 8). - self r8: (aRegisterStateArray at: 9). - self r9: (aRegisterStateArray at: 10). - self r10: (aRegisterStateArray at: 11). - self fp: (aRegisterStateArray at: 12). - self r12: (aRegisterStateArray at: 13). - self sp: (aRegisterStateArray at: 14). - self lr: (aRegisterStateArray at: 15). - self pc: (aRegisterStateArray at: 16). - self eflags: (aRegisterStateArray at: 17).! Item was removed: - ----- Method: GdbARMAlien>>voidRegisterState (in category 'accessing-abstract') ----- - voidRegisterState - "N.B. keep in sync with setRegisterState:" - self setRegisterState: (Array new: 17 withAll: 0)! Item was changed: Object subclass: #MultiProcessor + instanceVariableNames: 'mutex processor guardedProcessorProtocol unguardedProcessorProtocol owner registerState coInterpreter threadIndex cogit' - instanceVariableNames: 'mutex processor guardedProcessorProtocol unguardedProcessorProtocol owner registerState coInterpreter threadIndex' classVariableNames: '' poolDictionaries: '' category: 'Cog-Processors'! Item was changed: ----- Method: MultiProcessor>>coInterpreter: (in category 'initialize-release') ----- coInterpreter: aCoInterpreter + coInterpreter := aCoInterpreter. + cogit := aCoInterpreter cogit! - coInterpreter := aCoInterpreter! Item was changed: ----- Method: MultiProcessor>>doesNotUnderstand: (in category 'message forwarding') ----- doesNotUnderstand: aMessage "Forward a message to the actual processor, managing a thread-switch if necessary. Catch ProcessorSimulationTraps and raise them outside of the critical section to avoid deadlock when reentering the VM from a trap and switching threads in the run-time." | selector result trap | selector := aMessage selector. (guardedProcessorProtocol includes: selector) ifFalse: [^(unguardedProcessorProtocol includes: selector) ifTrue: [processor perform: selector withArguments: aMessage arguments] ifFalse: [super doesNotUnderstand: aMessage]]. + (#(simulateLeafCallOf:nextpc:memory:) includes: selector) ifTrue: + [self halt: selector]. result := [mutex critical: [owner ~~ mutex owningProcess ifTrue: [owner ifNotNil: [registerState at: owner put: processor registerState]. (registerState at: (owner := mutex owningProcess) ifAbsent: nil) ifNil: [coInterpreter initializeProcessorForThreadIndex: (threadIndex := threadIndex + 1)] ifNotNil: [:newState| processor setRegisterState: newState]]. processor perform: selector withArguments: aMessage arguments]] + on: ProcessorSimulationTrap, Error, AssertionFailure + do: [:ex| + ex class == ProcessorSimulationTrap ifFalse: + [ex pass]. + trap := ex]. - on: ProcessorSimulationTrap, Error - do: [:ex| trap := ex]. ^trap ifNil: [result] ifNotNil: [trap signal]! Item was added: + ----- Method: MultiProcessor>>flushICacheFrom:to: (in category 'system primitives') ----- + flushICacheFrom: startAddress "" to: endAddress "" + processor flushICacheFrom: startAddress to: endAddress! Item was changed: ----- Method: MultiProcessor>>processor: (in category 'initialize-release') ----- processor: aProcessor processor := aProcessor. + "Try and compute messages such as those in the execution category, for which + we should thread-switch, and those, in accessing, for which we don't need to. + Better would be to use pragmas to label those messages we should thread-switch on." + guardedProcessorProtocol := Set new. + unguardedProcessorProtocol := Set new. + (aProcessor class withAllSuperclasses copyUpThrough: CogProcessorAlien) do: + [:class| + unguardedProcessorProtocol addAll: class selectors. + #(execution) do: + [ :category| + guardedProcessorProtocol addAll: (class organization listAtCategoryNamed: category)]]. + unguardedProcessorProtocol removeAll: guardedProcessorProtocol! - guardedProcessorProtocol := aProcessor class selectors asSet - addAll: aProcessor class superclass selectors; - yourself. - unguardedProcessorProtocol := #(#'Cog API' #opcodes #disassembly #printing) - inject: Set new - into: [ :protocol :category| - protocol - addAll: (aProcessor class organization listAtCategoryNamed: category); - addAll: (aProcessor class superclass organization listAtCategoryNamed: category); - yourself]. - guardedProcessorProtocol removeAll: unguardedProcessorProtocol! Item was added: + ----- Method: Mutex>>owningProcess (in category '*Cog-Processors-accessing') ----- + owningProcess + ^owner! From commits at source.squeak.org Sat Oct 24 03:24:52 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 24 Oct 2020 03:24:52 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2852.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2852.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2852 Author: eem Time: 23 October 2020, 8:24:42.571147 pm UUID: f24c4594-b9be-4ec7-877f-e23945ed8dfa Ancestors: VMMaker.oscog-eem.2851 Refactoring to start reviving CoInterpreterMT. =============== Diff against VMMaker.oscog-eem.2851 =============== Item was added: + ----- Method: CoInterpreter>>setFramePointer:stackPointer:for: (in category 'initialization') ----- + setFramePointer: cFramePointer stackPointer: cStackPointer for: processor + + processor + setFramePointer: (self setCFramePointer: cFramePointer) + stackPointer: (self setCStackPointer: cStackPointer)! Item was added: + ----- Method: CoInterpreterMT>>setFramePointer:stackPointer:for: (in category 'initialization') ----- + setFramePointer: cFramePointer stackPointer: cStackPointer for: processor + + self flag: #design. + CFramePointer ifNil: + [self setCFramePointer: cFramePointer; setCStackPointer: cStackPointer]. + processor + setFramePointer: cFramePointer + stackPointer: cStackPointer! Item was changed: ----- Method: CogVMSimulator>>codeGeneratorToComputeAccessorDepth (in category 'primitive support') ----- codeGeneratorToComputeAccessorDepth ^(VMMaker new + buildCodeGeneratorForInterpreter: (COGMTVM ifTrue: [CoInterpreterMT] ifFalse: [CoInterpreterPrimitives]) - buildCodeGeneratorForInterpreter: CoInterpreterPrimitives includeAPIMethods: false initializeClasses: false) logger: self transcript; yourself! Item was changed: ----- Method: Cogit>>initializeProcessorStack: (in category 'initialization') ----- initializeProcessorStack: rumpCStackAddress "Initialize the simulation processor's stack pointers, arranging that they are somewhere on the rump C stack." | stackPad cFramePointer cStackPointer | stackPad := 64 max: cStackAlignment. cStackPointer := rumpCStackAddress - stackPad + expectedSPAlignment. cFramePointer := rumpCStackAddress - stackPad + cStackAlignment + expectedFPAlignment. self assert: cStackPointer \\ cStackAlignment = expectedSPAlignment. self assert: cFramePointer \\ cStackAlignment = expectedFPAlignment. + coInterpreter setFramePointer: cFramePointer stackPointer: cStackPointer for: processor! - processor - setFramePointer: (coInterpreter setCFramePointer: cFramePointer) - stackPointer: (coInterpreter setCStackPointer: cStackPointer)! From Yoshiki.Ohshima at acm.org Sat Oct 24 20:23:30 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Sat, 24 Oct 2020 13:23:30 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi, I reproduced the bug. If there is a version of an equivalent image but with .changes file available, that would be really good. The system browser in the image is having trouble accepting a changed method if I just try to modify in the image.. (Or is there a better way to do it?) Thanks! On Wed, Oct 21, 2020 at 12:23 PM tim Rowledge wrote: > > Hi - we were just talking about you at the squeak board meeting :-) > > > On 2020-10-21, at 10:14 AM, Yoshiki Ohshima > wrote: > > I heard that people got a new problem in inputting Japanese text into > Scratch 1.4 running on Raspberry Pi OS after, or around the version > 2020-08-20. I would like to take a look at it but it might involve > recompiling and generating the VM with debugging info. Last time I looked > into it was years and years ago and I need to basically make a fresh start. > > > > Is the process of making NuSqeauk VM For Raspberry Pi up to date and > straightforward? Can people point me to the right point to start? > > You shouldn't need to do anything special with the VM as far as I > remember; I'll try to dig into my notes to see what I might have done. What > I *do* recall is some problem with the X input method application - I > managed to make it work at some point but then it catastrophically > interfered with some other important thing. According to my ancient email > archive I had quite a few messages with you and Kazuhiro-san to make this > (almost) work in mid-2106. Something about an 'ibus' compositor window? > > Building the VM is completely vanilla; clone the opensmalltalk vm > repository, run Eliot's magic scripts to build the VMMaker image if you > need to do any serious development work, or just run the 'mvm' scripts in > the relevant directory to build from the current sources. On a Pi4 it only > takes a couple of minutes. > > > Ah - here's something to do with it - > in /usr/bin/squeak > > # see if the XMODIFIERS stuff is being used > # CURRENTLY DISABLED > # serious problem in the keypress handling is causedby invoking it > #if echo $XMODIFIERS | grep '@im=' > /dev/null; then > # COMPIN="-compositioninput" > #fi > > So, one question is whether the current VM even has that cmdline option. > And whether the applicable X input tool is available. Ah-hah - another old > email - > > ibus > ibus-anthy > ttf-kochi-gothic > xfonts-intl-japanese > xfonts-intl-japanese-big xfonts-kaname > > - some libraries that needed to be installed. > > The current NuScratch image is included in the Raspberry Pi OS releases > and *shouldn't* need any changes in order to work with the compositioninput > stuff, at least as well or badly as it ever did. The VM included is > certainly a few years old but it is a Cog/Spur system and the image will > happily run on a latest VM. I will someday make a new release for RPF but > they're all into the JS/HTML Scratch3 now. > > Making a new NuScratch image is, I hope, decently explained in the package > on squeaksource, with some more info on the swiki at > http://wiki.squeak.org/squeak/1263 and http://wiki.squeak.org/squeak/6604 > > > Hope that helps a bit - let me know! > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Fractured Idiom:- PORTE-KOCHERE - Sacramental wine > > > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From Yoshiki.Ohshima at acm.org Sat Oct 24 20:59:51 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Sat, 24 Oct 2020 13:59:51 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi Eliot, For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following error. I think I followed the steps in the instructions, including running updateSCCSVersion and mvm. How can I fix it? /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As yet no Cogit implementation appears to exist for your platform. # error As yet no Cogit implementation appears to exist for your platform. ^~~~~ /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error Consider implementing it, starting by adding a subclass of CogAbstractInstruction. # error Consider implementing it, starting by adding a subclass of CogAbstractInstruction. ^~~~~ make[1]: *** [Makefile:207: cogit.o] On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda wrote: > > Hi Yoshiki, > > On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima > wrote: > >> >> Hi, >> >> I heard that people got a new problem in inputting Japanese text into >> Scratch 1.4 running on Raspberry Pi OS after, or around the version >> 2020-08-20. I would like to take a look at it but it might involve >> recompiling and generating the VM with debugging info. Last time I looked >> into it was years and years ago and I need to basically make a fresh start. >> >> Is the process of making NuSqeauk VM For Raspberry Pi up to date and >> straightforward? Can people point me to the right point to start? >> > > Making a Cog VM for Raspberry pi is straight-forward. Clone > opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, > or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm > > _,,,^..^,,,_ > best, Eliot > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Sat Oct 24 21:16:16 2020 From: tim at rowledge.org (tim Rowledge) Date: Sat, 24 Oct 2020 14:16:16 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: <24691012-08D8-4D38-8E3B-73F8D4B32503@rowledge.org> OK, included is a zip of the 5.1 test/dev image I made some time back. Just open Dock->Apps->Scratch. The preferences are possibly not your taste since they're mine but I think you can fix that easily enough. [EDIT - mail system refused it so on it's way in a direct email to Yoshiki] This is a *32* bit image ready to run on a *32* bit release of Raspberry PI OS. Do not try to make a 64 bit ARM v8 image and expect this to run. Indeed, currently the 64bit ARM v8 VM will not run on Raspberry PI OS 64 because it needs some of the write/read/execute code memory area magic fixing. Make a 32 bit VM for plain old ARMv6. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Science is imagination equipped with grappling hooks. From Yoshiki.Ohshima at acm.org Sat Oct 24 22:27:13 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Sat, 24 Oct 2020 15:27:13 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: I still have not managed to compile the VM from the latest source on Raspberry Pi 4 yet, I was experimenting from the Squeak side (Thanks Tim). The bug manifests this way: https://youtu.be/HUieqOpD2k0 As you can see, nextEventFromQueue is modified to show a keystroke event to Transcript. I launch the image, enable FCITX, and type one character (あ). In the normal case, it would show only one question mark in the transcript. But at some random times, in this movie the second time, the exact same sequence gives the image two question marks, with the second one having a bogus key value. (The value changes at random.) I suspect that the use of malloc() and sizeof in x2sqKeyCompositionInput or such might be ending up with a wrong alignment or such and a character becomes two. Worst, it is a bug in X11... Then it'd be harder to fix... On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima wrote: > Hi Eliot, > > For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following > error. I think I followed the steps in the instructions, including running > updateSCCSVersion and mvm. How can I fix it? > > /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As yet > no Cogit implementation appears to exist for your platform. > > # error As yet no Cogit implementation appears to exist for your > platform. > > ^~~~~ > > /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error > Consider implementing it, starting by adding a subclass of > CogAbstractInstruction. > > # error Consider implementing it, starting by adding a subclass of > CogAbstractInstruction. > > ^~~~~ > > make[1]: *** [Makefile:207: cogit.o] > > On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda > wrote: > >> >> Hi Yoshiki, >> >> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima >> wrote: >> >>> >>> Hi, >>> >>> I heard that people got a new problem in inputting Japanese text into >>> Scratch 1.4 running on Raspberry Pi OS after, or around the version >>> 2020-08-20. I would like to take a look at it but it might involve >>> recompiling and generating the VM with debugging info. Last time I looked >>> into it was years and years ago and I need to basically make a fresh start. >>> >>> Is the process of making NuSqeauk VM For Raspberry Pi up to date and >>> straightforward? Can people point me to the right point to start? >>> >> >> Making a Cog VM for Raspberry pi is straight-forward. Clone >> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >> >> _,,,^..^,,,_ >> best, Eliot >> > > > -- > -- Yoshiki > > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From Yoshiki.Ohshima at acm.org Sat Oct 24 23:41:25 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Sat, 24 Oct 2020 16:41:25 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: And I tried a few more things by checking out the last release tag 202003021730 or try opensmalltalk-vm/build.linuxARMv6/squeak.cog.spur/build.debug but those attempts did not work. For the latter got this error: In file included from /usr/include/features.h:424, from /usr/include/pthread.h:21, from /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, from /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, from /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ extern int __REDIRECT (fseeko, ^~~~~~~~~~ In file included from /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, from /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: note: previous declaration \ of ‘fseeko’ was here #define fseek(s,o,w) fseeko(s,o,w) ^~~~~~ On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima wrote: > Hi Eliot, > > For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following > error. I think I followed the steps in the instructions, including running > updateSCCSVersion and mvm. How can I fix it? > > /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As yet > no Cogit implementation appears to exist for your platform. > > # error As yet no Cogit implementation appears to exist for your > platform. > > ^~~~~ > > /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error > Consider implementing it, starting by adding a subclass of > CogAbstractInstruction. > > # error Consider implementing it, starting by adding a subclass of > CogAbstractInstruction. > > ^~~~~ > > make[1]: *** [Makefile:207: cogit.o] > > On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda > wrote: > >> >> Hi Yoshiki, >> >> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima >> wrote: >> >>> >>> Hi, >>> >>> I heard that people got a new problem in inputting Japanese text into >>> Scratch 1.4 running on Raspberry Pi OS after, or around the version >>> 2020-08-20. I would like to take a look at it but it might involve >>> recompiling and generating the VM with debugging info. Last time I looked >>> into it was years and years ago and I need to basically make a fresh start. >>> >>> Is the process of making NuSqeauk VM For Raspberry Pi up to date and >>> straightforward? Can people point me to the right point to start? >>> >> >> Making a Cog VM for Raspberry pi is straight-forward. Clone >> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >> >> _,,,^..^,,,_ >> best, Eliot >> > > > -- > -- Yoshiki > > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From Yoshiki.Ohshima at acm.org Sun Oct 25 00:32:35 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Sat, 24 Oct 2020 17:32:35 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack I did was like this: diff --git a/platforms/unix/vm/sqPlatformSpecific.h b/platforms/unix/vm/sqPlatformSpecific.h index 268593673..bfb57257b 100644 --- a/platforms/unix/vm/sqPlatformSpecific.h +++ b/platforms/unix/vm/sqPlatformSpecific.h @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, sqInt stNameIndex, int sqNameLeng #undef sqFTruncate /* sqFTruncate should return 0 on success, ftruncate does also */ #define sqFTruncate(f,o) ftruncate(fileno(f), o) -#define ftell(s) ftello(s) -#define fseek(s,o,w) fseeko(s,o,w) +// #define ftell(s) ftello(s) +// #define fseek(s,o,w) fseeko(s,o,w) #if defined(__GNUC__) # if !defined(VM_LABEL) diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c index d62b05f40..e1c14a021 100644 --- a/spur64src/vm/cogit.c +++ b/spur64src/vm/cogit.c @@ -6,6 +6,8 @@ # define SysV 1 #endif +#define __arm64__ + #if defined(__arm64__) || defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) and this produced a runnable VM on Raspberry Pi4 On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima wrote: > And I tried a few more things by checking out the last release tag > 202003021730 or try opensmalltalk-vm/build.linuxARMv6/squeak.cog.spur/build.debug > but those attempts did not work. For the latter got this error: > > In file included from /usr/include/features.h:424, > > from /usr/include/pthread.h:21, > > from > /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, > > from > /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, > > from /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > > /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ > > extern int __REDIRECT (fseeko, > > ^~~~~~~~~~ > > In file included from > /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, > > from /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > > /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: > note: previous declaration \ > > of ‘fseeko’ was here > > #define fseek(s,o,w) fseeko(s,o,w) > > ^~~~~~ > > > > > On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima > wrote: > >> Hi Eliot, >> >> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following >> error. I think I followed the steps in the instructions, including running >> updateSCCSVersion and mvm. How can I fix it? >> >> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As yet >> no Cogit implementation appears to exist for your platform. >> >> # error As yet no Cogit implementation appears to exist for your >> platform. >> >> ^~~~~ >> >> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error >> Consider implementing it, starting by adding a subclass of >> CogAbstractInstruction. >> >> # error Consider implementing it, starting by adding a subclass of >> CogAbstractInstruction. >> >> ^~~~~ >> >> make[1]: *** [Makefile:207: cogit.o] >> >> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda >> wrote: >> >>> >>> Hi Yoshiki, >>> >>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>> Yoshiki.Ohshima at acm.org> wrote: >>> >>>> >>>> Hi, >>>> >>>> I heard that people got a new problem in inputting Japanese text into >>>> Scratch 1.4 running on Raspberry Pi OS after, or around the version >>>> 2020-08-20. I would like to take a look at it but it might involve >>>> recompiling and generating the VM with debugging info. Last time I looked >>>> into it was years and years ago and I need to basically make a fresh start. >>>> >>>> Is the process of making NuSqeauk VM For Raspberry Pi up to date and >>>> straightforward? Can people point me to the right point to start? >>>> >>> >>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >>> >>> _,,,^..^,,,_ >>> best, Eliot >>> >> >> >> -- >> -- Yoshiki >> >> > > -- > -- Yoshiki > > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Sun Oct 25 00:44:45 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat, 24 Oct 2020 17:44:45 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi Yoshiki, On Sat, Oct 24, 2020 at 2:00 PM Yoshiki Ohshima wrote: > > Hi Eliot, > > For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following > error. I think I followed the steps in the instructions, including running > updateSCCSVersion and mvm. How can I fix it? > I don't understand. It's there: $ git remote get-url origin https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ git status On branch Cog Your branch is up-to-date with 'origin/Cog'. $ git log spur64src/vm/cogitARMv8.c commit 883fab5c30cff36aeb93129030e8f7bfa692a697 Author: Eliot Miranda Date: Sat Oct 17 19:27:21 2020 -0700 etc maybe you're on a different branch? > /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As yet > no Cogit implementation appears to exist for your platform. > > # error As yet no Cogit implementation appears to exist for your > platform. > > ^~~~~ > > /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error > Consider implementing it, starting by adding a subclass of > CogAbstractInstruction. > > # error Consider implementing it, starting by adding a subclass of > CogAbstractInstruction. > > ^~~~~ > > make[1]: *** [Makefile:207: cogit.o] > > On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda > wrote: > >> >> Hi Yoshiki, >> >> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima >> wrote: >> >>> >>> Hi, >>> >>> I heard that people got a new problem in inputting Japanese text into >>> Scratch 1.4 running on Raspberry Pi OS after, or around the version >>> 2020-08-20. I would like to take a look at it but it might involve >>> recompiling and generating the VM with debugging info. Last time I looked >>> into it was years and years ago and I need to basically make a fresh start. >>> >>> Is the process of making NuSqeauk VM For Raspberry Pi up to date and >>> straightforward? Can people point me to the right point to start? >>> >> >> Making a Cog VM for Raspberry pi is straight-forward. Clone >> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >> > _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Sun Oct 25 02:51:22 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sun, 25 Oct 2020 02:51:22 0000 Subject: [Vm-dev] VM Maker: Cog-eem.413.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.413.mcz ==================== Summary ==================== Name: Cog-eem.413 Author: eem Time: 24 October 2020, 7:51:20.269241 pm UUID: b0316e73-788d-4e7f-ae7b-0f9a09515581 Ancestors: Cog-eem.412 Update MultiProcessor to current disassembly API. =============== Diff against Cog-eem.412 =============== Item was added: + ----- Method: MultiProcessor class>>printTempNames (in category 'testing') ----- + printTempNames + ^CogProcessorAlien printTempNames! Item was added: + ----- Method: MultiProcessor class>>printTempNames: (in category 'testing') ----- + printTempNames: aBoolean + ^CogProcessorAlien printTempNames: aBoolean! Item was added: + ----- Method: MultiProcessor class>>setReceiverResultReg: (in category 'testing') ----- + setReceiverResultReg: anIntegerOrNil + CogProcessorAlien setReceiverResultReg: anIntegerOrNil! Item was changed: ----- Method: MultiProcessor>>doesNotUnderstand: (in category 'message forwarding') ----- doesNotUnderstand: aMessage "Forward a message to the actual processor, managing a thread-switch if necessary. Catch ProcessorSimulationTraps and raise them outside of the critical section to avoid deadlock when reentering the VM from a trap and switching threads in the run-time." | selector result trap | selector := aMessage selector. (guardedProcessorProtocol includes: selector) ifFalse: [^(unguardedProcessorProtocol includes: selector) ifTrue: [processor perform: selector withArguments: aMessage arguments] ifFalse: [super doesNotUnderstand: aMessage]]. - (#(simulateLeafCallOf:nextpc:memory:) includes: selector) ifTrue: - [self halt: selector]. result := [mutex critical: [owner ~~ mutex owningProcess ifTrue: [owner ifNotNil: [registerState at: owner put: processor registerState]. (registerState at: (owner := mutex owningProcess) ifAbsent: nil) ifNil: [coInterpreter initializeProcessorForThreadIndex: (threadIndex := threadIndex + 1)] ifNotNil: [:newState| processor setRegisterState: newState]]. processor perform: selector withArguments: aMessage arguments]] on: ProcessorSimulationTrap, Error, AssertionFailure do: [:ex| ex class == ProcessorSimulationTrap ifFalse: [ex pass]. trap := ex]. ^trap ifNil: [result] ifNotNil: [trap signal]! From commits at source.squeak.org Sun Oct 25 03:04:38 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sun, 25 Oct 2020 03:04:38 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2853.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2853.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2853 Author: eem Time: 24 October 2020, 8:04:30.513205 pm UUID: 73f500c3-adf8-47ea-97ca-362ccf156b11 Ancestors: VMMaker.oscog-eem.2852 Cogit: implement the VM lock/unlock funcitons on x86_64. Recategorize x86 processor-specific instruction generators in the correct category. Change the order of fields in 64-bit CogAbstractInstructions to get better packing (affects CogARMv8Instruction). Compute numTarmpolines correctly for COGMTVM. Improve the map documentation in initializeAnnotationConstants. =============== Diff against VMMaker.oscog-eem.2852 =============== Item was changed: ----- Method: CogAbstractInstruction class>>instVarNamesAndTypesForTranslationDo: (in category 'translation') ----- instVarNamesAndTypesForTranslationDo: aBinaryBlock "Enumerate aBinaryBlock with the names and C type strings for the inst vars to include in an AbstractInstruction struct." + "((CogAbstractInstruction withAllSubclasses reject: + [:c| + (c class lookupSelector: #wordSize) isSubclassResponsibility + or: [((c lookupSelector: #machineCodeBytes) ifNil: [false] ifNotNil: [:cm| cm isSubclassResponsibility]) + or: [c name includesSubstring: 'ForTests']]]) + sort: [:a :b| a name <= b name]) do: + [:c| Transcript cr; cr; print: c; cr. c printTypedefOn: Transcript]" + + "The first four fields of an insruction are byte variables. opcode, machineCodeSize, maxSize, annotation. + On 64 bits we can get better packing if machine code follows these four..." + (self wordSize = 8 + ifTrue: [self filteredInstVarNames] + ifFalse: [(self filteredInstVarNames copyWithout: 'machineCode'), #('machineCode')]) do: - "(CogAbstractInstruction withAllSubclasses reject: [:c| c name includesSubString: 'ForTests']) do: - [:c| Transcript print: c; cr. c printTypedefOn: Transcript]" - (self filteredInstVarNames copyWithout: 'machineCode'), #('machineCode') do: [:ivn| aBinaryBlock value: ivn value: (ivn caseOf: { ['address'] -> [#usqInt]. "usqInt is always large enough to contain a pointer; we do not need to use usqIntptr_t" ['machineCode'] -> [self machineCodeDeclaration]. ['operands'] -> [{#usqInt. '[', NumOperands printString, ']'}]. ['dependent'] -> ['struct _AbstractInstruction *']} otherwise: [#'unsigned char'])]! Item was changed: ----- Method: CogAbstractInstruction class>>wordSize (in category 'translation') ----- wordSize + "Answer either 4 or 8 depending on the processor's basic architecture." - "Answer either 4 or 8 depending on the processor's basic architacture." self subclassResponsibility! Item was changed: ----- Method: CogIA32Compiler>>computeMaximumSize (in category 'generate machine code') ----- (excessive size, no diff calculated) Item was changed: + ----- Method: CogIA32Compiler>>concretizeBSR (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeBSR (in category 'generate machine code - concretize') ----- concretizeBSR "Bit Scan Reverse First operand is input register (mask) Second operand is output register (dest)" "BSR" | dest maskReg | maskReg := operands at: 0. dest := operands at: 1. machineCode at: 0 put: 16r0F; at: 1 put: 16rBD; at: 2 put: (self mod: ModReg RM: maskReg RO: dest). ^3! Item was changed: + ----- Method: CogIA32Compiler>>concretizeCDQ (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeCDQ (in category 'generate machine code - concretize') ----- concretizeCDQ "Will get inlined into concretizeAt: switch." machineCode at: 0 put: 16r99. ^1! Item was changed: + ----- Method: CogIA32Compiler>>concretizeCLD (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeCLD (in category 'generate machine code - concretize') ----- concretizeCLD machineCode at: 0 put: 16rFC. ^1! Item was changed: + ----- Method: CogIA32Compiler>>concretizeCMPXCHGAwR (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeCMPXCHGAwR (in category 'generate machine code - concretize') ----- concretizeCMPXCHGAwR | addressOperand reg | addressOperand := operands at: 0. reg := operands at: 1. machineCode at: 0 put: 16r0F; at: 1 put: 16rB1; at: 2 put: (self mod: ModRegInd RM: 5 RO: reg); at: 3 put: (addressOperand bitAnd: 16rFF); at: 4 put: (addressOperand >> 8 bitAnd: 16rFF); at: 5 put: (addressOperand >> 16 bitAnd: 16rFF); at: 6 put: (addressOperand >> 24 bitAnd: 16rFF). ^7! Item was changed: + ----- Method: CogIA32Compiler>>concretizeCMPXCHGMwrR (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeCMPXCHGMwrR (in category 'generate machine code - concretize') ----- concretizeCMPXCHGMwrR | srcReg offset destReg | offset := operands at: 0. srcReg := operands at: 1. destReg := operands at: 2. srcReg ~= ESP ifTrue: [(self isQuick: offset) ifTrue: [machineCode at: 0 put: 16r0F; at: 1 put: 16rB1; at: 2 put: (self mod: ModRegRegDisp8 RM: srcReg RO: destReg); at: 3 put: (offset bitAnd: 16rFF). ^4]. machineCode at: 0 put: 16r0F; at: 1 put: 16rB1; at: 2 put: (self mod: ModRegRegDisp32 RM: srcReg RO: destReg); at: 3 put: (offset bitAnd: 16rFF); at: 4 put: (offset >> 8 bitAnd: 16rFF); at: 5 put: (offset >> 16 bitAnd: 16rFF); at: 6 put: (offset >> 24 bitAnd: 16rFF). ^7]. "ESP:" (self isQuick: offset) ifTrue: [machineCode at: 0 put: 16r0F; at: 1 put: 16rB1; at: 2 put: (self mod: ModRegRegDisp8 RM: srcReg RO: destReg); at: 3 put: (self s: SIB1 i: 4 b: srcReg); at: 4 put: (offset bitAnd: 16rFF). ^5]. machineCode at: 0 put: 16r0F; at: 1 put: 16rB1; at: 2 put: (self mod: ModRegRegDisp32 RM: srcReg RO: destReg); at: 3 put: (self s: SIB1 i: 4 b: srcReg); at: 4 put: (offset bitAnd: 16rFF); at: 5 put: (offset >> 8 bitAnd: 16rFF); at: 6 put: (offset >> 16 bitAnd: 16rFF); at: 7 put: (offset >> 24 bitAnd: 16rFF). ^8! Item was changed: + ----- Method: CogIA32Compiler>>concretizeCPUID (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeCPUID (in category 'generate machine code - concretize') ----- concretizeCPUID machineCode at: 0 put: 16r0F; at: 1 put: 16rA2. ^2! Item was changed: + ----- Method: CogIA32Compiler>>concretizeFENCE: (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeFENCE: (in category 'generate machine code - concretize') ----- concretizeFENCE: regOpcode machineCode at: 0 put: 16r0F; at: 1 put: 16rAE; at: 2 put: (self mod: ModReg RM: 0 RO: regOpcode). ^3! Item was changed: + ----- Method: CogIA32Compiler>>concretizeFSTPD (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeFSTPD (in category 'generate machine code - concretize') ----- concretizeFSTPD "Will get inlined into concretizeAt: switch." | srcReg offset destReg | srcReg := 3. offset := operands at: 0. destReg := operands at: 1. destReg ~= ESP ifTrue: [(self isQuick: offset) ifTrue: "FSTP dest" [machineCode at: 0 put: 16rDD; at: 1 put: (self mod: ModRegRegDisp8 RM: destReg RO: srcReg); at: 2 put: (offset bitAnd: 16rFF). ^3]. "FSTP dest" machineCode at: 0 put: 16rDD; at: 1 put: (self mod: ModRegRegDisp32 RM: destReg RO: srcReg); at: 2 put: (offset bitAnd: 16rFF); at: 3 put: (offset >> 8 bitAnd: 16rFF); at: 4 put: (offset >> 16 bitAnd: 16rFF); at: 5 put: (offset >> 24 bitAnd: 16rFF). ^6]. "ESP:" (self isQuick: offset) ifTrue: [machineCode at: 0 put: 16rDD; at: 1 put: (self mod: ModRegRegDisp8 RM: destReg RO: srcReg); at: 2 put: (self s: SIB1 i: 4 b: destReg); at: 3 put: (offset bitAnd: 16rFF). ^4]. machineCode at: 0 put: 16rDD; at: 1 put: (self mod: ModRegRegDisp32 RM: destReg RO: srcReg); at: 2 put: (self s: SIB1 i: 4 b: destReg); at: 3 put: (offset bitAnd: 16rFF); at: 4 put: (offset >> 8 bitAnd: 16rFF); at: 5 put: (offset >> 16 bitAnd: 16rFF); at: 6 put: (offset >> 24 bitAnd: 16rFF). ^7! Item was changed: + ----- Method: CogIA32Compiler>>concretizeFSTPS (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeFSTPS (in category 'generate machine code - concretize') ----- concretizeFSTPS "Will get inlined into concretizeAt: switch." | srcReg offset destReg | srcReg := 3. offset := operands at: 0. destReg := operands at: 1. destReg ~= ESP ifTrue: [(self isQuick: offset) ifTrue: "FSTP dest" [machineCode at: 0 put: 16rD9; at: 1 put: (self mod: ModRegRegDisp8 RM: destReg RO: srcReg); at: 2 put: (offset bitAnd: 16rFF). ^3]. "FSTP dest" machineCode at: 0 put: 16rD9; at: 1 put: (self mod: ModRegRegDisp32 RM: destReg RO: srcReg); at: 2 put: (offset bitAnd: 16rFF); at: 3 put: (offset >> 8 bitAnd: 16rFF); at: 4 put: (offset >> 16 bitAnd: 16rFF); at: 5 put: (offset >> 24 bitAnd: 16rFF). ^6]. "ESP:" (self isQuick: offset) ifTrue: [machineCode at: 0 put: 16rD9; at: 1 put: (self mod: ModRegRegDisp8 RM: destReg RO: srcReg); at: 2 put: (self s: SIB1 i: 4 b: destReg); at: 3 put: (offset bitAnd: 16rFF). ^4]. machineCode at: 0 put: 16rD9; at: 1 put: (self mod: ModRegRegDisp32 RM: destReg RO: srcReg); at: 2 put: (self s: SIB1 i: 4 b: destReg); at: 3 put: (offset bitAnd: 16rFF); at: 4 put: (offset >> 8 bitAnd: 16rFF); at: 5 put: (offset >> 16 bitAnd: 16rFF); at: 6 put: (offset >> 24 bitAnd: 16rFF). ^7! Item was changed: + ----- Method: CogIA32Compiler>>concretizeIDIVR (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeIDIVR (in category 'generate machine code - concretize') ----- concretizeIDIVR "Will get inlined into concretizeAt: switch." | regDivisor | regDivisor := operands at: 0. machineCode at: 0 put: 16rF7; at: 1 put: (self mod: ModReg RM: regDivisor RO: 7). ^2! Item was changed: + ----- Method: CogIA32Compiler>>concretizeLOCK (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeLOCK (in category 'generate machine code - concretize') ----- concretizeLOCK machineCode at: 0 put: 16rF0. ^1! Item was changed: + ----- Method: CogIA32Compiler>>concretizeMOVSB (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeMOVSB (in category 'generate machine code - concretize') ----- concretizeMOVSB machineCode at: 0 put: 16rA4. ^1! Item was changed: + ----- Method: CogIA32Compiler>>concretizeMOVSD (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeMOVSD (in category 'generate machine code - concretize') ----- concretizeMOVSD machineCode at: 0 put: 16rA5. ^1! Item was changed: + ----- Method: CogIA32Compiler>>concretizeREP (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeREP (in category 'generate machine code - concretize') ----- concretizeREP machineCode at: 0 put: 16rF3. ^1! Item was changed: + ----- Method: CogIA32Compiler>>concretizeXCHGAwR (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeXCHGAwR (in category 'generate machine code - concretize') ----- concretizeXCHGAwR | addressOperand reg | addressOperand := operands at: 0. reg := operands at: 1. machineCode at: 0 put: 16r87; at: 1 put: (self mod: ModRegInd RM: 5 RO: reg); at: 2 put: (addressOperand bitAnd: 16rFF); at: 3 put: (addressOperand >> 8 bitAnd: 16rFF); at: 4 put: (addressOperand >> 16 bitAnd: 16rFF); at: 5 put: (addressOperand >> 24 bitAnd: 16rFF). ^6! Item was changed: + ----- Method: CogIA32Compiler>>concretizeXCHGMwrR (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeXCHGMwrR (in category 'generate machine code - concretize') ----- concretizeXCHGMwrR | srcReg offset destReg | offset := operands at: 0. srcReg := operands at: 1. destReg := operands at: 2. srcReg ~= ESP ifTrue: [(self isQuick: offset) ifTrue: [machineCode at: 0 put: 16r87; at: 1 put: (self mod: ModRegRegDisp8 RM: srcReg RO: destReg); at: 2 put: (offset bitAnd: 16rFF). ^3]. machineCode at: 0 put: 16r87; at: 1 put: (self mod: ModRegRegDisp32 RM: srcReg RO: destReg); at: 2 put: (offset bitAnd: 16rFF); at: 3 put: (offset >> 8 bitAnd: 16rFF); at: 4 put: (offset >> 16 bitAnd: 16rFF); at: 5 put: (offset >> 24 bitAnd: 16rFF). ^6]. "ESP:" (self isQuick: offset) ifTrue: [machineCode at: 0 put: 16r87; at: 1 put: (self mod: ModRegRegDisp8 RM: srcReg RO: destReg); at: 2 put: (self s: SIB1 i: 4 b: srcReg); at: 3 put: (offset bitAnd: 16rFF). ^4]. machineCode at: 0 put: 16r87; at: 1 put: (self mod: ModRegRegDisp32 RM: srcReg RO: destReg); at: 2 put: (self s: SIB1 i: 4 b: srcReg); at: 3 put: (offset bitAnd: 16rFF); at: 4 put: (offset >> 8 bitAnd: 16rFF); at: 5 put: (offset >> 16 bitAnd: 16rFF); at: 6 put: (offset >> 24 bitAnd: 16rFF). ^7! Item was changed: + ----- Method: CogIA32Compiler>>concretizeXCHGRR (in category 'generate machine code - concretize processor-specific') ----- - ----- Method: CogIA32Compiler>>concretizeXCHGRR (in category 'generate machine code - concretize') ----- concretizeXCHGRR | reg1 reg2 | reg1 := operands at: 0. reg2 := operands at: 1. reg2 = EAX ifTrue: [reg2 := reg1. reg1 := EAX]. reg1 = EAX ifTrue: [machineCode at: 0 put: 16r90 + reg2. ^1]. machineCode at: 0 put: 16r87; at: 1 put: (self mod: ModReg RM: reg1 RO: reg2). ^2! Item was changed: ----- Method: CogIA32Compiler>>dispatchConcretizeProcessorSpecific (in category 'generate machine code') ----- dispatchConcretizeProcessorSpecific "Attempt to generate concrete machine code for the instruction at address. This is part of the inner dispatch of concretizeAt: actualAddress which exists only to get around the number of literals limits in the SqueakV3 (blue book derived) bytecode set." opcode caseOf: { "Specific Control/Data Movement" [CDQ] -> [^self concretizeCDQ]. [IDIVR] -> [^self concretizeIDIVR]. [IMULRR] -> [^self concretizeMulRR]. [CPUID] -> [^self concretizeCPUID]. - [CMPXCHGAwR] -> [^self concretizeCMPXCHGAwR]. - [CMPXCHGMwrR] -> [^self concretizeCMPXCHGMwrR]. - [LFENCE] -> [^self concretizeFENCE: 5]. - [MFENCE] -> [^self concretizeFENCE: 6]. - [SFENCE] -> [^self concretizeFENCE: 7]. - [LOCK] -> [^self concretizeLOCK]. - [XCHGAwR] -> [^self concretizeXCHGAwR]. - [XCHGMwrR] -> [^self concretizeXCHGMwrR]. - [XCHGRR] -> [^self concretizeXCHGRR]. [FSTPS] -> [^self concretizeFSTPS]. [FSTPD] -> [^self concretizeFSTPD]. [REP] -> [^self concretizeREP]. [CLD] -> [^self concretizeCLD]. [MOVSB] -> [^self concretizeMOVSB]. [MOVSD] -> [^self concretizeMOVSD]. [BSR] -> [^self concretizeBSR]. + [XCHGRR] -> [^self concretizeXCHGRR]. + "Multi-processing" + "[CMPXCHGAwR] -> [^self concretizeCMPXCHGAwR]. + [CMPXCHGMwrR] -> [^self concretizeCMPXCHGMwrR]." + [LFENCE] -> [^self concretizeFENCE: 5]. + [MFENCE] -> [^self concretizeFENCE: 6]. + [SFENCE] -> [^self concretizeFENCE: 7]. + "[LOCK] -> [^self concretizeLOCK]." + [XCHGAwR] -> [^self concretizeXCHGAwR]. + "[XCHGMwrR] -> [^self concretizeXCHGMwrR]." }. ^0! Item was changed: ----- Method: CogThreadManager>>guiProcess (in category 'simulation') ----- guiProcess "Simulation only; answer the simulator's first process." + ^threads ifNotNil: [threads first osThread]! - ^threads first osThread! Item was changed: ----- Method: CogThreadManager>>vmOwnerLockAddress (in category 'public api') ----- vmOwnerLockAddress "NB. For the JIT only, so it can generate the lock & unlock functions." ^self cCode: [(self addressOf: vmOwnerLock) asUnsignedInteger] + inSmalltalk: [cogit simulatedVariableAddress: #vmOwnerLockFromMachineCode in: self]! - inSmalltalk: [self inMemoryVMOwnerLockAddress]! Item was added: + ----- Method: CogThreadManager>>vmOwnerLockFromMachineCode (in category 'simulation') ----- + vmOwnerLockFromMachineCode + ^vmOwnerLock! Item was added: + ----- Method: CogThreadManager>>vmOwnerLockFromMachineCode: (in category 'simulation') ----- + vmOwnerLockFromMachineCode: aValue + vmOwnerLock := aValue! Item was removed: - ----- Method: CogVMSimulator>>inMemoryVMOwnerLockAddress (in category 'rump c stack') ----- - inMemoryVMOwnerLockAddress - ^self rumpCStackAddress - 48! Item was added: + ----- Method: CogVMSimulator>>setFramePointer:stackPointer:for: (in category 'multi-threading simulation switch') ----- + setFramePointer: cFramePointer stackPointer: cStackPointer for: processor + "This method includes or excludes CoInterpreterMT methods as required. + Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate" + + ^self perform: #setFramePointer:stackPointer:for: + withArguments: {cFramePointer. cStackPointer. processor} + inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was changed: ----- Method: CogVMSimulator>>windowIsClosing (in category 'primitive support') ----- windowIsClosing self threadManager ifNotNil: [:threadManager| + threadManager guiProcess ifNotNil: + [:guiProcess| + guiProcess ~= Processor activeProcess ifTrue: + [guiProcess + signalException: + (Notification new tag: #evaluateQuit; yourself)]. - threadManager guiProcess ~= Processor activeProcess ifTrue: - [threadManager guiProcess - signalException: - (Notification new tag: #evaluateQuit; yourself). Processor terminateActive]]. quitBlock ifNotNil: [:effectiveQuitBlock| quitBlock := nil. "stop recursion on explicit window close." [effectiveQuitBlock value] on: BlockCannotReturn do: [:ex|]] "Cause return from #test, et al"! Item was changed: CogAbstractInstruction subclass: #CogX64Compiler instanceVariableNames: '' + classVariableNames: 'BSR CDQ CLD CMPXCHGAwR CMPXCHGMwrR CPUID IDIVR IMULRR LFENCE LOCK MFENCE MOVSB MOVSQ ModReg ModRegInd ModRegIndDisp32 ModRegIndSIB ModRegRegDisp32 ModRegRegDisp8 MoveRAwNoVBR R10 R11 R12 R13 R14 R15 R8 R9 RAX RBP RBX RCX RDI RDX REP RSI RSP SFENCE SIB1 SIB2 SIB4 SIB8 SysV XCHGAwR XCHGMwrR XCHGRR XMM0L XMM10L XMM11L XMM12L XMM13L XMM14L XMM15L XMM1L XMM2L XMM3L XMM4L XMM5L XMM6L XMM7L XMM8L XMM9L' - classVariableNames: 'BSR CDQ CLD CMPXCHGAwR CMPXCHGMwrR CPUID IDIVR IMULRR LFENCE LOCK MFENCE MOVSB MOVSQ ModReg ModRegInd ModRegIndDisp32 ModRegIndSIB ModRegRegDisp32 ModRegRegDisp8 R10 R11 R12 R13 R14 R15 R8 R9 RAX RBP RBX RCX RDI RDX REP RSI RSP SFENCE SIB1 SIB2 SIB4 SIB8 SysV XCHGAwR XCHGMwrR XCHGRR XMM0L XMM10L XMM11L XMM12L XMM13L XMM14L XMM15L XMM1L XMM2L XMM3L XMM4L XMM5L XMM6L XMM7L XMM8L XMM9L' poolDictionaries: '' category: 'VMMaker-JIT'! !CogX64Compiler commentStamp: 'eem 9/14/2015 17:12' prior: 0! I generate x64 (x86-64) instructions from CogAbstractInstructions. For reference see 1. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, A-M 2. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, N-Z http://www.intel.com/products/processor/manuals/ or AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions AMD64 Architecture Programmer's Manual Volume 4: 128-bit Media Instructions AMD64 Architecture Programmer's Manual Volume 5: 64-bit Media and x87 Floating Point Instructions http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/ (� is supposed to be the Unicode "registered sign").! Item was changed: ----- Method: CogX64Compiler class>>initialize (in category 'class initialization') ----- initialize "Initialize various x64 instruction-related constants. [1] IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, A-M" "CogX64Compiler initialize" self ~~ CogX64Compiler ifTrue: [^self]. (InitializationOptions ifNil: [Dictionary new]) at: #ABI ifPresent: [:abi| SysV := abi asUppercase ~= #WIN64 and: [abi asUppercase ~= #'_WIN64']] ifAbsent: [SysV := true]. "Default ABI; set to true for SysV, false for WIN64/_WIN64" RAX := 0. RCX := 1. "Were they completely mad or simply sadistic?" RDX := 2. RBX := 3. RSP := 4. RBP := 5. RSI := 6. RDI := 7. R8 := 8. R9 := 9. R10 := 10. R11 := 11. R12 := 12. R13 := 13. R14 := 14. R15 := 15. XMM0L := 0. XMM1L := 1. XMM2L := 2. XMM3L := 3. XMM4L := 4. XMM5L := 5. XMM6L := 6. XMM7L := 7. XMM8L := 8. XMM9L := 9. XMM10L := 10. XMM11L := 11. XMM12L := 12. XMM13L := 13. XMM14L := 14. XMM15L := 15. "Mod R/M Mod fields. See [1] Sec 2.4, 2.5 & 2.6 & Table 2-2" ModRegInd := 0. ModRegIndSIB := 4. ModRegIndDisp32 := 5. ModRegRegDisp8 := 1. ModRegRegDisp32 := 2. ModReg := 3. "SIB Scaled Index modes. See [1] Sec 2.4, 2.5 & 2.6 & Table 2-3" SIB1 := 0. SIB2 := 1. SIB4 := 2. SIB8 := 3. "Specific instructions" self + initializeSpecificOpcodes: #(CDQ IDIVR IMULRR CPUID LFENCE MFENCE SFENCE LOCK CMPXCHGAwR CMPXCHGMwrR XCHGAwR MoveRAwNoVBR XCHGMwrR XCHGRR CLD REP MOVSB MOVSQ BSR) - initializeSpecificOpcodes: #(CDQ IDIVR IMULRR CPUID LFENCE MFENCE SFENCE LOCK CMPXCHGAwR CMPXCHGMwrR XCHGAwR XCHGMwrR XCHGRR CLD REP MOVSB MOVSQ BSR) in: thisContext method! Item was changed: ----- Method: CogX64Compiler>>computeMaximumSize (in category 'generate machine code') ----- (excessive size, no diff calculated) Item was added: + ----- Method: CogX64Compiler>>concretizeFENCE: (in category 'generate machine code - concretize processor-specific') ----- + concretizeFENCE: regOpcode + + machineCode + at: 0 put: 16r0F; + at: 1 put: 16rAE; + at: 2 put: (self mod: ModReg RM: 0 RO: regOpcode). + ^3! Item was added: + ----- Method: CogX64Compiler>>concretizeMoveRAwNoVBR (in category 'generate machine code - concretize') ----- + concretizeMoveRAwNoVBR + "A version of concretizeMoveRAw tat does not use VarBaseReg." + + | addressOperand reg offset | + reg := operands at: 0. + addressOperand := operands at: 1. + (self isAnInstruction: (cogit cCoerceSimple: addressOperand to: #'AbstractInstruction *')) ifTrue: + [addressOperand := (cogit cCoerceSimple: addressOperand to: #'AbstractInstruction *') address]. + "If storing RAX, store directly, otherwise, because of instruction encoding limitations, the register + _must_ be stored through RAX. If reg = RBP or RSP simply store directly, otherwise swap RAX with + the register before and after the store through RAX. We avoid sweapping before hand with RBP + and RSP because setting RSP to whatever the contents of RAX is can cause disastrous results if + an interrupt is delivered immediately after that point. See mail threads beginning with + http://lists.squeakfoundation.org/pipermail/vm-dev/2019-September/031428.html + http://lists.squeakfoundation.org/pipermail/vm-dev/2019-October/031499.html" + (reg = RAX or: [reg = RBP or: [reg = RSP]]) + ifTrue: [offset := 0] + ifFalse: + [(reg = RBP or: [reg = RSP]) + ifTrue: + [machineCode + at: 0 put: (self rexR: reg x: 0 b: RAX); + at: 1 put: 16r89; + at: 2 put: (self mod: ModReg RM: RAX RO: reg). + offset := 3] + ifFalse: + [machineCode + at: 0 put: (self rexR: RAX x: 0 b: reg); + at: 1 put: 16r90 + (reg \\ 8). + offset := 2]]. + machineCode + at: 0 + offset put: 16r48; + at: 1 + offset put: 16rA3; + at: 2 + offset put: (addressOperand bitAnd: 16rFF); + at: 3 + offset put: (addressOperand >> 8 bitAnd: 16rFF); + at: 4 + offset put: (addressOperand >> 16 bitAnd: 16rFF); + at: 5 + offset put: (addressOperand >> 24 bitAnd: 16rFF); + at: 6 + offset put: (addressOperand >> 32 bitAnd: 16rFF); + at: 7 + offset put: (addressOperand >> 40 bitAnd: 16rFF); + at: 8 + offset put: (addressOperand >> 48 bitAnd: 16rFF); + at: 9 + offset put: (addressOperand >> 56 bitAnd: 16rFF). + reg = RAX ifTrue: + [^10]. + (reg = RBP or: [reg = RSP]) ifTrue: + [^13]. + "Now effect the assignment via xchg, which restores RAX" + machineCode + at: 12 put: (machineCode at: 0); + at: 13 put: (machineCode at: 1). + ^14! Item was added: + ----- Method: CogX64Compiler>>concretizeXCHGAwR (in category 'generate machine code - concretize processor-specific') ----- + concretizeXCHGAwR + "This is a very limited implementation that assumes RAX is available." + + | addressOperand reg scratch | + addressOperand := operands at: 0. + reg := operands at: 1. + scratch := operands at: 2. + self deny: reg = scratch. + machineCode + "movq addressOperand, %rscratch" + at: 0 put: (self rexR: 0 x: 0 b: scratch); + at: 1 put: 16rB8 + (scratch bitAnd: 7); + at: 2 put: (addressOperand bitAnd: 16rFF); + at: 3 put: (addressOperand >> 8 bitAnd: 16rFF); + at: 4 put: (addressOperand >> 16 bitAnd: 16rFF); + at: 5 put: (addressOperand >> 24 bitAnd: 16rFF); + at: 6 put: (addressOperand >> 32 bitAnd: 16rFF); + at: 7 put: (addressOperand >> 40 bitAnd: 16rFF); + at: 8 put: (addressOperand >> 48 bitAnd: 16rFF); + at: 9 put: (addressOperand >> 56 bitAnd: 16rFF); + "xchgq %reg, (%rscratch)" "0xf: 49 87 45 00 xchgq %rax, (%r13)" + at: 10 put: (self rexR: reg x: 0 b: scratch); + at: 11 put: 16r87; + at: 12 put: (self s: SIB1 i: 0 b: scratch). + "cogit processor disassembleInstructionAt: 0 In: machineCode object." + "cogit processor disassembleInstructionAt: 10 In: machineCode object" + ^13! Item was changed: ----- Method: CogX64Compiler>>dispatchConcretizeProcessorSpecific (in category 'generate machine code') ----- dispatchConcretizeProcessorSpecific "Attempt to generate concrete machine code for the instruction at address. This is part of the inner dispatch of concretizeAt: actualAddress which exists only to get around the number of literals limits in the SqueakV3 (blue book derived) bytecode set." opcode caseOf: { + "Specific Arithmetic" - "Specific Control/Data Movement" [CDQ] -> [^self concretizeCDQ]. [IDIVR] -> [^self concretizeIDIVR]. [IMULRR] -> [^self concretizeMulRR]. [CPUID] -> [^self concretizeCPUID]. - "[CMPXCHGAwR] -> [^self concretizeCMPXCHGAwR]." - "[CMPXCHGMwrR] -> [^self concretizeCMPXCHGMwrR]." - "[LFENCE] -> [^self concretizeFENCE: 5]." - "[MFENCE] -> [^self concretizeFENCE: 6]. - [SFENCE] -> [^self concretizeFENCE: 7]." - "[LOCK] -> [^self concretizeLOCK]." - "[XCHGAwR] -> [^self concretizeXCHGAwR]." - "[XCHGMwrR] -> [^self concretizeXCHGMwrR]." [XCHGRR] -> [^self concretizeXCHGRR]. + "Specific Data Movement" [REP] -> [^self concretizeREP]. [CLD] -> [^self concretizeCLD]. [MOVSB] -> [^self concretizeMOVSB]. [MOVSQ] -> [^self concretizeMOVSQ]. [BSR] -> [^self concretizeBSR]. + "Multi-processing" + "[CMPXCHGAwR] -> [^self concretizeCMPXCHGAwR]. + [CMPXCHGMwrR] -> [^self concretizeCMPXCHGMwrR]. + [LFENCE] -> [^self concretizeFENCE: 5]." + [MFENCE] -> [^self concretizeFENCE: 6]. + [SFENCE] -> [^self concretizeFENCE: 7]. + "[LOCK] -> [^self concretizeLOCK]." + [MoveRAwNoVBR] -> [^self concretizeMoveRAwNoVBR]. + [XCHGAwR] -> [^self concretizeXCHGAwR]. + "[XCHGMwrR] -> [^self concretizeXCHGMwrR]." }. ^0! Item was added: + ----- Method: CogX64Compiler>>generateLowLevelTryLock: (in category 'multi-threading') ----- + generateLowLevelTryLock: vmOwnerLockAddress + "Generate a function that attempts to lock the vmOwnerLock and answers if it succeeded." + + | callerSavedReg | + vmOwnerLockAddress = 0 ifTrue: + [cogit + MoveCq: 1 R: RAX; + RetN: 0. + ^self]. + "There is no 64-bit absolute address form of XCHGQ. Insteads, load the address into a scratch register." + callerSavedReg := cogit availableRegisterOrNoneIn: (ABICallerSavedRegisterMask bitClear: 1 << RAX). + cogit + MoveCq: 1 R: RAX; + gen: MFENCE; "make the XCHG globally consistent" + gen: XCHGAwR operand: vmOwnerLockAddress operand: RAX operand: callerSavedReg; + gen: SFENCE; "make the store globally visible" + SubCq: 1 R: RAX; "Since we only ever set the lock to 1 or 0, subtracting 1 sets + RAX to 0 if the lock was already locked and non-zero if it wasn't." + RetN: 0! Item was added: + ----- Method: CogX64Compiler>>generateLowLevelUnlock: (in category 'multi-threading') ----- + generateLowLevelUnlock: vmOwnerLockAddress + vmOwnerLockAddress ~= 0 ifTrue: + [cogit + MoveCq: 0 R: RAX; + "VarBaseRegister is only live in Smalltalk machine code so cannot be used here." + gen: MoveRAwNoVBR operand: RAX operand: vmOwnerLockAddress; + gen: SFENCE]. + cogit RetN: 0! Item was added: + ----- Method: CogX64Compiler>>numLowLevelLockOpcodes (in category 'accessing') ----- + numLowLevelLockOpcodes + "ceTryLockVMOwner: + movq $0x1, %rax + mfence : 0F AE F0 + movq &vmOwnerLockFromMachineCode, %rcx N.B. movq,xchgq are one XCHGAwR instruction + xchgq %rax, (%rcx) + sfence + subq $0x1, %rax + ret + ceUnlockVMOwner: + xorq %rax, %rax + movq %rax, &vmOwnerLockFromMachineCode + sfence + ret" + ^10! Item was changed: ----- Method: Cogit class>>initializeAnnotationConstants (in category 'class initialization') ----- initializeAnnotationConstants "These form the method map for a cog method. The map defines which addresses in a machine code method are ones with important functions, such as being a send site or being a reference to a heap object. Each annotated instruction has a byte + in the map, and each byte in the map has two parts. In the least signficant bits is + a distance. In the most signficant bits is the type of annotation at the point reached. + The first map entry's distance is that from the the cmNoCheckEntryOffset, and + subsequent distances are from the preceding map entry A null byte ends the map. - in the map, and each byte in the map has two parts. In the least signficant bits are - a distance in codeGranularity units from the start of the method or the previous - map entry, except for the IsAnnotationExtension type. In the most signficant bits - are the type of annotation at the point reached. A null byte ends the map. The - first mapped location is a distance from the cmNoCheckEntryOffset. + The map occurs at the end of a method (*), in reverse, so that its start is found by + adding the method's block size. If the distance between two mapped instructions + will not fit in the displacement field then one or more displacement entries are placed + in the map to bridge the gap. The displacements are in codeGranularity units so that + processors like e.g. ARM, with 4-byte instructions, do not have overly large maps. In + practice, maps are very compact, but they should be as quick to navigate as possible, + hence they have a simple regular structure. Each element of a map is a byte with the + three bit type in the most significant bits, and the five bit displacement in the least + significant. One annotation, IsAnnotationExtension, implicitly has a zero displacement + and reinterprets the displacement field as an extended annotation type. One annotation, + IsDisplacementX2N, interprets the displacement field as a power of two number of + codeGranularity units, for spanning large displacements compactly. - The map occurs at the end of a method (*), in reverse, so that its start is found - by adding the method's block size. If the distance between two mapped - instructions will not fit in the displacement field then one or more displacement - entries are placed in the map to bridge the gap. There is a * 32 displacement - units type for spanning large gaps. The displacements are in codeGranularity - units so that processors like e.g. ARM, with 4-byte instructions, do not have overly - large maps. In [practice maps are very compact, but they should be as quick to - navigate as possible, and hence be as compact as possible. + The map is the structure that allows methods to be dynamically linked, unlinked and + relocated. There are two categories of call that may need map entries, calls to (non- + send) run-time and/or primitive routines, and send calls. Run-time calls may be + changed during relocation. Send calls can be rewritten when linked or unlinked and + during relocation. Absolute run- time calls do not need a map entry because they don't + change on relocation. Hence the annotaion for non-send run-time/primitive calls is + IsRelativeCall. There are several kinds of send call, sends, super sends, and exotic + Newspeak sends (self sends, directed super sends, etc). These send calls need different + treatment at different times. For example, when the send cache is flushed or the + method zone is shrunk some sends must be unlinked and some sends must be relocated. + + The map is also used to map machine code pcs to bytecode pcs and vice verse. This is + done by walking the machine code method using its map at the same time as walking + the bytecoded method using its bytecodes, processing the pair of pcs at relevant points. + In all cases, sends and run-time calls, the address in the map is the address following the + call, which is also the return address for the call. - There is only one kind of call annotation that serves for all calls from machine - code. There are several kinds of call, sends, super sends, calls of the generated - run-time, and direct calls of primitive functions in the interpreter. These need - different treatment at different times. For example, when the send cache is - flushed or the method zone is shrunk some sends must be unlinked and some - sends must be relocated. But to be able to parse bytecoded methods and match - their pcs with corresponding machine code pcs the map needs to differentiate - between sends and run-time calls. + Sends are in two states, linked, in which case they call other machine code methods, or + unlinked, in which case they call a particular unlinked send run-time routine that will initiate + linking. Linked can be distinguished from unlinked sends based on address; only linked + sends have their target between methodZoneBase and methodZone freeStart. + We used to distinguish normal sends from super sends based on alignment of entry-point, + because normal sends link to the checked entry-point, whereas super sends link to the + unchecked entry-point, and both entry points have different alignments. But with the + arrival of exotic Newspeak sends came the need for supporting more varieties than merely + send and super send. So now we use the IsAnnotationExtension to label sends other than + normal sends. For these ``exotic'' sends there is both an IsAnnotationExtension annotation + and an IsSendCall annotation. - Sends can be distinguished from run-time or direct primitive calls based on address; - only sends have their target between methodZoneBase and methodZone freeStart. - We used to distinguish normal sends from super sends based on alignment of - entry-point, because normal sends link to the checked entry-point, whereas super sends - link to the unchecked entry-point, and both entry points have different alignments. - But now we use the IsAnnotationExtension to label sends other than normal sends. - For these ``exotic'' sends there is both an IsAnnotationExtension annotation and an - IsSendCall annotation. While run-time calls can be distinguished from direct primitive calls on the basis + of address there is no need to do so. They are merely calls to locations that don't + move during method zone compaction. - of address there is no need to do so. They are merely calls to locations that - don't move during method zone compaction. Absolute PC references are used for method references and counter references. These are references from within a particular method to absolute pcs in that same method that must be relocated when the method moves." "self initializeAnnotationConstants" AnnotationShift := 5. IsDisplacementX2N := 0. "N.B. A 0 byte ends the map" IsAnnotationExtension := 1. "Used to extend IsSendCall with different codes for exotic send types." IsObjectReference := 2. IsAbsPCReference := 3. IsRelativeCall := 4. HasBytecodePC := 5. IsNSSendCall := NewspeakVM ifTrue: [6]. IsSendCall := 7. "These are formed by combining IsSendCall and IsAnnotationExtension annotations." IsSuperSend := 8. IsDirectedSuperSend := BytecodeSetHasDirectedSuperSend ifTrue: [9]. IsDirectedSuperBindingSend := BytecodeSetHasDirectedSuperSend ifTrue: [10]. IsNSSelfSend := NewspeakVM ifTrue: [11]. IsNSDynamicSuperSend := NewspeakVM ifTrue: [12]. IsNSImplicitReceiverSend := NewspeakVM ifTrue: [13]. DisplacementMask := (1 << AnnotationShift) - 1. DisplacementX2N := IsDisplacementX2N << AnnotationShift. FirstAnnotation := IsObjectReference << AnnotationShift. MaxX2NDisplacement := DisplacementMask << AnnotationShift. MapEnd := 0. + "These two tables are used for printing annotations during disassembly" AnnotationConstantNames := #( IsDisplacementX2N IsAnnotationExtension IsObjectReference IsAbsPCReference IsRelativeCall HasBytecodePC IsNSSendCall IsSendCall IsSuperSend IsDirectedSuperSend IsDirectedSuperBindingSend IsNSSelfSend IsNSDynamicSuperSend IsNSImplicitReceiverSend). AnnotationsWithBytecodePCs := #(HasBytecodePC IsNSSendCall IsSendCall IsSuperSend IsDirectedSuperSend IsDirectedSuperBindingSend IsNSSelfSend IsNSDynamicSuperSend IsNSImplicitReceiverSend), {'IsRelativeCall:\HasBytecodePC' withCRs}! Item was changed: ----- Method: Cogit class>>numTrampolines (in category 'trampoline support') ----- numTrampolines + ^37 "29 + 4 each for self and super sends" + + (COGMTVM ifTrue: [2] ifFalse: [0]) "try lock/unlock routines" + + (LowcodeVM ifTrue: [3] ifFalse: [0]) + + CogCompilerClass numTrampolines - ^37 "29 + 4 each for self and super sends" + (LowcodeVM ifTrue: [3] ifFalse: [0]) + CogCompilerClass numTrampolines "self withAllSubclasses collect: [:c| {c. (c instVarNames select: [:ea| ea beginsWith: 'ce']) size}]"! From Yoshiki.Ohshima at acm.org Sun Oct 25 20:58:41 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Sun, 25 Oct 2020 13:58:41 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi Eliot, On Sat, Oct 24, 2020 at 5:45 PM Eliot Miranda wrote: > > Hi Yoshiki, > > On Sat, Oct 24, 2020 at 2:00 PM Yoshiki Ohshima > wrote: > >> >> Hi Eliot, >> >> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following >> error. I think I followed the steps in the instructions, including running >> updateSCCSVersion and mvm. How can I fix it? >> > > I don't understand. It's there: > > $ git remote get-url origin > https://github.com/OpenSmalltalk/opensmalltalk-vm.git > $ git status > On branch Cog > Your branch is up-to-date with 'origin/Cog'. > $ git log spur64src/vm/cogitARMv8.c > commit 883fab5c30cff36aeb93129030e8f7bfa692a697 > Author: Eliot Miranda > Date: Sat Oct 17 19:27:21 2020 -0700 > > etc > > maybe you're on a different branch? > The last commit (two commits) on the branch I am working with is like this: commit 4f54eed845a8daef7681d17c01f004c3a7b50c9d Author: Nicolas Cellier Date: Fri Oct 23 22:46:36 2020 +0200 Fix https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531 The return type of `currentUTCMicroseconds` was lost. For some reason, the cygwin/mingw takes this compilation path `#else // _WIN32_WINNT >= _WIN32_WINNT_WIN8` commit efb4b1c82fd81798221d9811faa65f7bfb9c71be Author: Eliot Miranda Date: Tue Oct 20 19:01:17 2020 -0700 Add stdio.h to sqWin32NewNet.c for its debug printing. And I do see 883fab5c30cff36 in the ancestor chain. Maybe a macro name like __arm64__ or __arm_something__ is missing or different? For the composition input problem, I have a hacky version of code that makes it not crash. It comes down to the line: /* 24-bit UCS */ - if ((keysym & 0xff000000) == 0x01000000) return keysym & 0x00ffffff; + if ((keysym & 0xff000000) == 0x01000000) { + return 0; // keysym & 00x00ffffff; + } I cannot tell when it gets "24-bit UCS" as keysym... keysym often does not store a code point like that, if I'm not mistaken. There are other problems which I believe I introduced while ago to misunderstood a debugging macro DCONV_FPRINTF(), which adds stderr as the first argument but many calls to it were adding stderr by themselves. -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: diff Type: application/octet-stream Size: 5080 bytes Desc: not available URL: From noreply at github.com Sun Oct 25 21:16:32 2020 From: noreply at github.com (Nicolas Cellier) Date: Sun, 25 Oct 2020 14:16:32 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] ed1bc7: Try to rescue minheadless builds by providing a co... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: ed1bc7c49136d0e06a58e80640b5f092cdd49e6c https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/ed1bc7c49136d0e06a58e80640b5f092cdd49e6c Author: Nicolas Cellier Date: 2020-10-25 (Sun, 25 Oct 2020) Changed paths: A platforms/minheadless/common/sqImageFileAccessViaStdio.h M platforms/minheadless/common/sqVirtualMachineInterface.c A platforms/minheadless/mac/sqImageFileAccess.h A platforms/minheadless/unix/sqImageFileAccess.h A platforms/minheadless/windows/sqImageFileAccess.h Log Message: ----------- Try to rescue minheadless builds by providing a copy of sqImageFileAccess.h From builds at travis-ci.org Sun Oct 25 21:29:22 2020 From: builds at travis-ci.org (Travis CI) Date: Sun, 25 Oct 2020 21:29:22 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2275 (Cog - ed1bc7c) In-Reply-To: Message-ID: <5f95ee31abec6_13fab4273a7a8369cb@travis-tasks-648c97cff9-d54x5.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2275 Status: Still Failing Duration: 12 mins and 11 secs Commit: ed1bc7c (Cog) Author: Nicolas Cellier Message: Try to rescue minheadless builds by providing a copy of sqImageFileAccess.h View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/4f54eed845a8...ed1bc7c49136 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/738800748?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.cellier.aka.nice at gmail.com Sun Oct 25 21:49:40 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Sun, 25 Oct 2020 22:49:40 +0100 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi Yoshiki, Eliot, I confirm the problem, 32 bit linux build fails, on x86 too. it appears on travis log: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738800749 In file included from /usr/include/features.h:367:0, from /usr/include/pthread.h:21, from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: /usr/include/stdio.h:781:12: error: conflicting types for ‘fseeko’ extern int __REDIRECT (fseeko, ^ In file included from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16:0, from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: note: previous declaration of ‘fseeko’ was here #define fseek(s,o,w) fseeko(s,o,w) ^ In file included from /usr/include/features.h:367:0, from /usr/include/pthread.h:21, from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: /usr/include/stdio.h:784:18: error: conflicting types for ‘ftello’ extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64); ^ In file included from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16:0, from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:108:18: note: previous declaration of ‘ftello’ was here #define ftell(s) ftello(s) ^ Makefile:252: recipe for target 'aio.o' failed We are doing horrible things with C macro : #define ftell(s) ftello(s) because ftell is a different function with its own signature. If we include stdio.h AFTER this macro, then we are causing big trouble mixing the signatures... We can cheat as long as we do not get caught... It seems to me that we are caught red-handed! Compilation appears to pass on x64 linux. Le dim. 25 oct. 2020 à 21:59, Yoshiki Ohshima a écrit : > > Hi Eliot, > > > On Sat, Oct 24, 2020 at 5:45 PM Eliot Miranda > wrote: > >> >> Hi Yoshiki, >> >> On Sat, Oct 24, 2020 at 2:00 PM Yoshiki Ohshima >> wrote: >> >>> >>> Hi Eliot, >>> >>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following >>> error. I think I followed the steps in the instructions, including running >>> updateSCCSVersion and mvm. How can I fix it? >>> >> >> I don't understand. It's there: >> >> $ git remote get-url origin >> https://github.com/OpenSmalltalk/opensmalltalk-vm.git >> $ git status >> On branch Cog >> Your branch is up-to-date with 'origin/Cog'. >> $ git log spur64src/vm/cogitARMv8.c >> commit 883fab5c30cff36aeb93129030e8f7bfa692a697 >> Author: Eliot Miranda >> Date: Sat Oct 17 19:27:21 2020 -0700 >> >> etc >> >> maybe you're on a different branch? >> > > The last commit (two commits) on the branch I am working with is like > this: > > commit 4f54eed845a8daef7681d17c01f004c3a7b50c9d > > Author: Nicolas Cellier > > Date: Fri Oct 23 22:46:36 2020 +0200 > > > Fix https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531 > > > The return type of `currentUTCMicroseconds` was lost. > > For some reason, the cygwin/mingw takes this compilation path > > > `#else // _WIN32_WINNT >= _WIN32_WINNT_WIN8` > > > commit efb4b1c82fd81798221d9811faa65f7bfb9c71be > > Author: Eliot Miranda > > Date: Tue Oct 20 19:01:17 2020 -0700 > > > Add stdio.h to sqWin32NewNet.c for its debug printing. > > > And I do see 883fab5c30cff36 in the ancestor chain. Maybe a macro name > like __arm64__ or __arm_something__ is missing or different? > > > For the composition input problem, I have a hacky version of code that > makes it not crash. It comes down to the line: > > /* 24-bit UCS */ > - if ((keysym & 0xff000000) == 0x01000000) return keysym & 0x00ffffff; > + if ((keysym & 0xff000000) == 0x01000000) { > + return 0; // keysym & 00x00ffffff; > + } > > I cannot tell when it gets "24-bit UCS" as keysym... keysym often does not > store a code point like that, if I'm not mistaken. > > There are other problems which I believe I introduced while ago to > misunderstood a debugging macro DCONV_FPRINTF(), which adds stderr as the > first argument but many calls to it were adding stderr by themselves. > > -- > -- Yoshiki > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Sun Oct 25 21:51:25 2020 From: no-reply at appveyor.com (AppVeyor) Date: Sun, 25 Oct 2020 21:51:25 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2277 Message-ID: <20201025215125.1.5C6C6254A6C3EE8B@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Sun Oct 25 23:56:04 2020 From: noreply at github.com (Nicolas Cellier) Date: Sun, 25 Oct 2020 16:56:04 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 51cd74: Try to fix missing setjmp implementation in window... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 51cd741267ea6520406e02320a58f2d8b5da1205 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/51cd741267ea6520406e02320a58f2d8b5da1205 Author: Nicolas Cellier Date: 2020-10-26 (Mon, 26 Oct 2020) Changed paths: M CMakeLists.txt Log Message: ----------- Try to fix missing setjmp implementation in windows minheadless From builds at travis-ci.org Mon Oct 26 00:08:15 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 26 Oct 2020 00:08:15 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2276 (Cog - 51cd741) In-Reply-To: Message-ID: <5f96136e953b8_13fab4261c4c09519d@travis-tasks-648c97cff9-d54x5.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2276 Status: Still Failing Duration: 11 mins and 26 secs Commit: 51cd741 (Cog) Author: Nicolas Cellier Message: Try to fix missing setjmp implementation in windows minheadless View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/ed1bc7c49136...51cd741267ea View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/738825138?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 26 00:09:58 2020 From: noreply at github.com (Nicolas Cellier) Date: Sun, 25 Oct 2020 17:09:58 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 1fde5a: Another attempt at fixing linux32 builds Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 1fde5ab77f6b4ef677014676e7925a4005471bc5 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/1fde5ab77f6b4ef677014676e7925a4005471bc5 Author: Nicolas Cellier Date: 2020-10-26 (Mon, 26 Oct 2020) Changed paths: M platforms/unix/vm/sqPlatformSpecific.h Log Message: ----------- Another attempt at fixing linux32 builds failure is related to ftello signature mismatch From no-reply at appveyor.com Mon Oct 26 00:28:52 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 26 Oct 2020 00:28:52 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2278 Message-ID: <20201026002852.1.58949F0B09C62B63@appveyor.com> An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 26 00:31:33 2020 From: notifications at github.com (Nicolas Cellier) Date: Sun, 25 Oct 2020 17:31:33 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Try to fix missing setjmp implementation in windows minheadless (51cd741) In-Reply-To: References: Message-ID: This was much too naive it seems... We cannot simply add assembler source like that in CMake. > CMake Error at CMakeLists.txt:724 (add_library): > Cannot find source file: > platform/win32/misc/_setjmp-x86.asm > Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm > .hpp .hxx .in .txx > CMake Error at CMakeLists.txt:724 (add_library): > No SOURCES given to target: SqueakVMCore > CMake Generate step failed. Build files cannot be regenerated correctly. > -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/51cd741267ea6520406e02320a58f2d8b5da1205#commitcomment-43568118 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Mon Oct 26 00:32:15 2020 From: notifications at github.com (Nicolas Cellier) Date: Sun, 25 Oct 2020 17:32:15 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Try to fix missing setjmp implementation in windows minheadless (51cd741) In-Reply-To: References: Message-ID: Oh no, it's platforms, not platform ! -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/51cd741267ea6520406e02320a58f2d8b5da1205#commitcomment-43568126 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 26 00:34:13 2020 From: noreply at github.com (Nicolas Cellier) Date: Sun, 25 Oct 2020 17:34:13 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 7c2c8e: Fix typo s/platform/platforms/ and retry rescuing ... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 7c2c8ee6b790ecfe81731bf8bee78f08362744bf https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7c2c8ee6b790ecfe81731bf8bee78f08362744bf Author: Nicolas Cellier Date: 2020-10-26 (Mon, 26 Oct 2020) Changed paths: M CMakeLists.txt Log Message: ----------- Fix typo s/platform/platforms/ and retry rescuing windows minheadless From no-reply at appveyor.com Mon Oct 26 01:01:20 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 26 Oct 2020 01:01:20 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2279 Message-ID: <20201026010120.1.EDDC4E9C83217E49@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Mon Oct 26 01:14:16 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Mon, 26 Oct 2020 01:14:16 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2854.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2854.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2854 Author: eem Time: 25 October 2020, 6:14:06.461732 pm UUID: 44be8c63-c2a2-4810-8280-4c215d9d1cad Ancestors: VMMaker.oscog-eem.2853 MT Cogit: Implement ceTryLockVMOwner that takes an argument and attempts to lock vmOwner to that argument on IA32 & X64. Refactor ABI callout marshalling on X64 to use the same CArg0Reg thru CArg3Reg pattern as on ARMv8. Make CPUID the first processor specific opcode on Intel. Slang: eliminate a space in function type printing. =============== Diff against VMMaker.oscog-eem.2853 =============== Item was changed: ----- Method: CoInterpreterMT>>ownVMFromUnidentifiedThread (in category 'vm scheduling') ----- ownVMFromUnidentifiedThread "Attempt to take ownership from a thread that as yet doesn't know its index. This supports callbacks where the callback could originate from any thread. Answer 0 if the owning thread is known to the VM. Answer 1 if the owning thread is unknown to the VM and now owns the VM. Answer -1 if the owning thread is unknown to the VM and fails to own the VM. Answer -2 if the owning thread is unknown to the VM and there is no foreign callback process installed." | count threadIndex vmThread | (threadIndex := cogThreadManager ioGetThreadLocalThreadIndex) ~= 0 ifTrue: [ "this is a callback from a known thread" threadIndex = cogThreadManager getVMOwner ifTrue: "the VM has not been disowned" [self assert: (disowningVMThread isNil or: [disowningVMThread = self currentVMThread]). disowningVMThread := nil. self currentVMThread state: CTMAssignableOrInVM. ^VMAlreadyOwnedHenceDoNotDisown]. ^self ownVM: threadIndex]. foreignCallbackPriority = 0 ifTrue: [^-2]. count := 0. "If the current thread doesn't have an index it's new to the vm and we need to allocate a new threadInfo, failing if we can't. We also need a process in the foreignCallbackProcessSlot upon which to run the thread's eventual callback." + [[cogit tryLockVMToIndex: cogThreadManager ioCurrentOSThread] whileFalse: - [[cogThreadManager tryLockVMToIndex: -1] whileFalse: [self waitingPriorityIsAtLeast: foreignCallbackPriority. cogThreadManager ioTransferTimeslice]. (objectMemory splObj: foreignCallbackProcessSlot) ~= objectMemory nilObject] whileFalse: [cogThreadManager releaseVM. (count := count + 1) > 1000 ifTrue: [^-2]. cogThreadManager ioMilliSleep: 1]. vmThread := cogThreadManager unusedThreadInfo. "N.B. Keep the VM locked anonymously so that we reserve the non-nil ForeignCallbackProcess for this thread, avoiding the race between competing foreign callbacks. The acquireVMFor: in ownVM: will set the vmOwner to the actual index. So only unlock on failure." vmThread isNil ifTrue: [cogThreadManager releaseVM. ^-1]. + cogThreadManager setVMOwner: vmThread index. vmThread state: CTMWantingOwnership; priority: foreignCallbackPriority. cogThreadManager registerVMThread: vmThread. ^self ownVM: vmThread index + OwnVMForeignThreadFlag! Item was changed: ----- Method: CoInterpreterMT>>threadSchedulingLoop: (in category 'vm scheduling') ----- threadSchedulingLoop: vmThread "Enter a loop attempting to run the VM with the highest priority process and blocking on the thread's OS semaphore when unable to run that process. We will return to this via threadSwitchIfNecessary:from: which is called in the middle of transferTo:from: once the active process has been stored in the scheduler." | attemptToRun | [self assert: vmThread state = CTMAssignableOrInVM. attemptToRun := false. (cogThreadManager getVMOwner = vmThread index) ifTrue: [attemptToRun := true] ifFalse: + [(cogit tryLockVMToIndex: vmThread index) ifTrue: - [(cogThreadManager tryLockVMToIndex: vmThread index) ifTrue: ["If relinquishing is true, then primitiveRelinquishProcessor has disowned the VM and only a returning call or callback should take ownership in that case." relinquishing ifTrue: [cogThreadManager releaseVM] ifFalse: [attemptToRun := true]]]. attemptToRun ifTrue: [self tryToExecuteSmalltalk: vmThread]. (cogThreadManager testVMOwnerIs: vmThread index) ifFalse: [cogThreadManager waitForWork: vmThread]. true] whileTrue! Item was changed: ----- Method: CogAbstractInstruction class>>initializeSpecificOpcodes:in: (in category 'class initialization') ----- initializeSpecificOpcodes: opcodeSymbolSequence in: initializeMethod "Declare as class variables, the opcodes in opcodeSymbolSequence. Assign values to them from LastRTLOpcode on. Undeclare any obsolete class vars. The assumption is that initializeMethod defines all class vars in the class. This method should be used by subclasses wishing to declare their own specific opcodes." + ^self initializeSpecificOpcodes: opcodeSymbolSequence in: initializeMethod extraClassVarNames: #()! - | pool classVariablesDefinedInMethod | - self assert: self ~~ CogAbstractInstruction. - pool := initializeMethod methodClass classPool. - LastRTLCode ifNil: - [CogRTLOpcodes initialize]. - classVariablesDefinedInMethod := Set new. - initializeMethod allLiteralsDo: - [:lit| - (lit isSymbol and: [pool includesKey: lit]) - ifTrue: [classVariablesDefinedInMethod add: lit] - ifFalse: - [(lit isVariableBinding and: [pool includesKey:lit key]) ifTrue: - [classVariablesDefinedInMethod add: lit key]]]. - "Undeclare any class var not defined in opcodeSymbolSequence or by the method." - (pool keys reject: [:k| (opcodeSymbolSequence includes: k) or: [classVariablesDefinedInMethod includes: k]]) do: - [:k| - Undeclared declare: k from: pool]. - "Declare opcodeSymbolSequence's elements from LastRTLCode on up." - opcodeSymbolSequence withIndexDo: - [:classVarName :value| - pool - declare: classVarName from: Undeclared; - at: classVarName put: value + LastRTLCode - 1]! Item was added: + ----- Method: CogAbstractInstruction class>>initializeSpecificOpcodes:in:extraClassVarNames: (in category 'class initialization') ----- + initializeSpecificOpcodes: opcodeSymbolSequence in: initializeMethod extraClassVarNames: extraClassVarNames + "Declare as class variables, the opcodes in opcodeSymbolSequence. + Assign values to them from LastRTLOpcode on. Undeclare any obsolete + class vars. The assumption is that initializeMethod defines all class vars + in the class. This method should be used by subclasses wishing to declare + their own specific opcodes." + | pool classVariablesDefinedInMethod | + self assert: self ~~ CogAbstractInstruction. + pool := initializeMethod methodClass classPool. + LastRTLCode ifNil: + [CogRTLOpcodes initialize]. + classVariablesDefinedInMethod := Set new. + initializeMethod allLiteralsDo: + [:lit| + (lit isSymbol and: [pool includesKey: lit]) + ifTrue: [classVariablesDefinedInMethod add: lit] + ifFalse: + [(lit isVariableBinding and: [pool includesKey:lit key]) ifTrue: + [classVariablesDefinedInMethod add: lit key]]]. + "Undeclare any class var not defined in opcodeSymbolSequence or by the method." + (pool keys reject: [:k| (opcodeSymbolSequence includes: k) + or: [(classVariablesDefinedInMethod includes: k) + or: [extraClassVarNames includes: k]]]) do: + [:k| + Undeclared declare: k from: pool]. + extraClassVarNames do: + [:classVarName| + (pool includesKey: classVarName) ifFalse: + [pool + declare: classVarName from: Undeclared; + at: classVarName put: nil]]. + "Declare opcodeSymbolSequence's elements from LastRTLCode on up." + opcodeSymbolSequence withIndexDo: + [:classVarName :value| + pool + declare: classVarName from: Undeclared; + at: classVarName put: value + LastRTLCode - 1]! Item was changed: ----- Method: CogAbstractInstruction class>>instVarNamesAndTypesForTranslationDo: (in category 'translation') ----- instVarNamesAndTypesForTranslationDo: aBinaryBlock "Enumerate aBinaryBlock with the names and C type strings for the inst vars to include in an AbstractInstruction struct." "((CogAbstractInstruction withAllSubclasses reject: [:c| (c class lookupSelector: #wordSize) isSubclassResponsibility or: [((c lookupSelector: #machineCodeBytes) ifNil: [false] ifNotNil: [:cm| cm isSubclassResponsibility]) or: [c name includesSubstring: 'ForTests']]]) sort: [:a :b| a name <= b name]) do: [:c| Transcript cr; cr; print: c; cr. c printTypedefOn: Transcript]" + "The first four fields of an instruction are byte variables. opcode, machineCodeSize, maxSize, annotation. - "The first four fields of an insruction are byte variables. opcode, machineCodeSize, maxSize, annotation. On 64 bits we can get better packing if machine code follows these four..." + self filteredInstVarNames do: - (self wordSize = 8 - ifTrue: [self filteredInstVarNames] - ifFalse: [(self filteredInstVarNames copyWithout: 'machineCode'), #('machineCode')]) do: [:ivn| aBinaryBlock value: ivn value: (ivn caseOf: { ['address'] -> [#usqInt]. "usqInt is always large enough to contain a pointer; we do not need to use usqIntptr_t" ['machineCode'] -> [self machineCodeDeclaration]. ['operands'] -> [{#usqInt. '[', NumOperands printString, ']'}]. ['dependent'] -> ['struct _AbstractInstruction *']} otherwise: [#'unsigned char'])]! Item was changed: ----- Method: CogAbstractInstruction>>numLowLevelLockOpcodes (in category 'multi-threading') ----- numLowLevelLockOpcodes + self subclassResponsibility! Item was changed: CogAbstractInstruction subclass: #CogIA32Compiler instanceVariableNames: '' + classVariableNames: 'BSR CDQ CLD CMPXCHGRAw CPUID EAX EBP EBX ECX EDI EDX ESI ESP FSTPD FSTPS IDIVR IMULRR LFENCE LOCK MFENCE MOVSB MOVSD ModReg ModRegInd ModRegIndDisp32 ModRegIndSIB ModRegRegDisp32 ModRegRegDisp8 REP SETE SFENCE SIB1 SIB2 SIB4 SIB8 XCHGRR XMM0L XMM1L XMM2L XMM3L XMM4L XMM5L XMM6L XMM7L' - classVariableNames: 'BSR CDQ CLD CMPXCHGAwR CMPXCHGMwrR CPUID EAX EBP EBX ECX EDI EDX ESI ESP FSTPD FSTPS IDIVR IMULRR LFENCE LOCK MFENCE MOVSB MOVSD ModReg ModRegInd ModRegIndDisp32 ModRegIndSIB ModRegRegDisp32 ModRegRegDisp8 REP SFENCE SIB1 SIB2 SIB4 SIB8 XCHGAwR XCHGMwrR XCHGRR XMM0L XMM1L XMM2L XMM3L XMM4L XMM5L XMM6L XMM7L' poolDictionaries: '' category: 'VMMaker-JIT'! !CogIA32Compiler commentStamp: 'eem 9/14/2015 17:13' prior: 0! I generate IA32 (x86) instructions from CogAbstractInstructions. For reference see 1. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, A-M 2. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, N-Z http://www.intel.com/products/processor/manuals/ (� is supposed to be the Unicode "registered sign". This class does not take any special action to flush the instruction cache on instruction-modification, trusting that Intel and AMD processors correctly invalidate the instruction cache via snooping. According to the manuals, this will work on systems where code and data have the same virtual address. The CogICacheFlushingIA32Compiler subclass exists to use the CPUID instruction to serialize instruction-modification for systems with code and data at different virtual addresses.! Item was added: + ----- Method: CogIA32Compiler class>>filteredInstVarNames (in category 'translation') ----- + filteredInstVarNames + "Move the unaligned bytes to the end of the structure." + ^(super filteredInstVarNames copyWithout: 'machineCode'), #('machineCode')! Item was changed: ----- Method: CogIA32Compiler class>>initialize (in category 'class initialization') ----- initialize "Initialize various IA32/x86 instruction-related constants. [1] IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, A-M" "CogIA32Compiler initialize" self ~~ CogIA32Compiler ifTrue: [^self]. "N.B. EAX ECX and EDX are caller-save (scratch) registers. EBX ESI and EDI are callee-save; see concreteRegisterFor:" EAX := 0. ECX := 1. "Were they completely mad or simply sadistic?" EDX := 2. EBX := 3. ESP := 4. EBP := 5. ESI := 6. EDI := 7. XMM0L := 0. XMM1L := 1. XMM2L := 2. XMM3L := 3. XMM4L := 4. XMM5L := 5. XMM6L := 6. XMM7L := 7. "Mod R/M Mod fields. See [1] Sec 2.4, 2.5 & 2.6 & Table 2-2" ModRegInd := 0. ModRegIndSIB := 4. ModRegIndDisp32 := 5. ModRegRegDisp8 := 1. ModRegRegDisp32 := 2. ModReg := 3. "SIB Scaled Index modes. See [1] Sec 2.4, 2.5 & 2.6 & Table 2-3" SIB1 := 0. SIB2 := 1. SIB4 := 2. SIB8 := 3. "Specific instructions" self + initializeSpecificOpcodes: #(CPUID + "Arithmetic/Bit count:" CDQ IDIVR IMULRR FSTPS FSTPD CLD REP MOVSB MOVSD BSR XCHGRR + "Multi-processing:" LFENCE MFENCE SFENCE LOCK CMPXCHGRAw SETE) - initializeSpecificOpcodes: #(CDQ IDIVR IMULRR CPUID LFENCE MFENCE SFENCE LOCK CMPXCHGAwR CMPXCHGMwrR XCHGAwR XCHGMwrR XCHGRR FSTPS FSTPD CLD REP MOVSB MOVSD BSR) in: thisContext method! Item was changed: ----- Method: CogIA32Compiler>>computeMaximumSize (in category 'generate machine code') ----- (excessive size, no diff calculated) Item was added: + ----- Method: CogIA32Compiler>>concretizeCMPXCHGRAw (in category 'generate machine code - concretize processor-specific') ----- + concretizeCMPXCHGRAw + + | addressOperand reg | + reg := operands at: 0. + addressOperand := operands at: 1. + machineCode + at: 0 put: 16r0F; + at: 1 put: 16rB1; + at: 2 put: (self mod: ModRegInd RM: 5 RO: reg); + at: 3 put: (addressOperand bitAnd: 16rFF); + at: 4 put: (addressOperand >> 8 bitAnd: 16rFF); + at: 5 put: (addressOperand >> 16 bitAnd: 16rFF); + at: 6 put: (addressOperand >> 24 bitAnd: 16rFF). + "cogit processor disassembleInstructionAt: 0 In: machineCode object" + ^7! Item was added: + ----- Method: CogIA32Compiler>>concretizeSet: (in category 'generate machine code - concretize processor-specific') ----- + concretizeSet: conditionCode + | reg | + reg := operands at: 0. + machineCode + at: 0 put: 16r0F; + at: 1 put: 16r90 + conditionCode; + at: 2 put: (self mod: ModReg RM: reg RO: 0). + "cogit processor disassembleInstructionAt: 0 In: machineCode object" + ^3! Item was changed: ----- Method: CogIA32Compiler>>dispatchConcretize (in category 'generate machine code') ----- dispatchConcretize "Attempt to generate concrete machine code for the instruction at address. This is the inner dispatch of concretizeAt: actualAddress which exists only to get around the branch size limits in the SqueakV3 (blue book derived) bytecode set." + opcode >= CPUID ifTrue: - opcode >= CDQ ifTrue: [^self dispatchConcretizeProcessorSpecific]. opcode caseOf: { "Noops & Pseudo Ops" [Label] -> [^self concretizeLabel]. [AlignmentNops] -> [^self concretizeAlignmentNops]. [Fill32] -> [^self concretizeFill32]. [Nop] -> [^self concretizeNop]. "Control" [Call] -> [^self concretizeCall]. [CallR] -> [^self concretizeCallR]. [CallFull] -> [^self concretizeCall]. [JumpR] -> [^self concretizeJumpR]. [JumpFull] -> [^self concretizeJumpLong]. [JumpLong] -> [^self concretizeJumpLong]. [JumpLongZero] -> [^self concretizeConditionalJump: 16r4]. [JumpLongNonZero] -> [^self concretizeConditionalJump: 16r5]. [Jump] -> [^self concretizeJump]. "Table B-1 Intel� 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture" [JumpZero] -> [^self concretizeConditionalJump: 16r4]. [JumpNonZero] -> [^self concretizeConditionalJump: 16r5]. [JumpNegative] -> [^self concretizeConditionalJump: 16r8]. [JumpNonNegative] -> [^self concretizeConditionalJump: 16r9]. [JumpOverflow] -> [^self concretizeConditionalJump: 16r0]. [JumpNoOverflow] -> [^self concretizeConditionalJump: 16r1]. [JumpCarry] -> [^self concretizeConditionalJump: 16r2]. [JumpNoCarry] -> [^self concretizeConditionalJump: 16r3]. [JumpLess] -> [^self concretizeConditionalJump: 16rC]. [JumpGreaterOrEqual] -> [^self concretizeConditionalJump: 16rD]. [JumpGreater] -> [^self concretizeConditionalJump: 16rF]. [JumpLessOrEqual] -> [^self concretizeConditionalJump: 16rE]. [JumpBelow] -> [^self concretizeConditionalJump: 16r2]. [JumpAboveOrEqual] -> [^self concretizeConditionalJump: 16r3]. [JumpAbove] -> [^self concretizeConditionalJump: 16r7]. [JumpBelowOrEqual] -> [^self concretizeConditionalJump: 16r6]. [JumpFPEqual] -> [^self concretizeConditionalJump: 16r4]. [JumpFPNotEqual] -> [^self concretizeConditionalJump: 16r5]. [JumpFPLess] -> [^self concretizeConditionalJump: 16r2]. [JumpFPGreaterOrEqual] -> [^self concretizeConditionalJump: 16r3]. [JumpFPGreater] -> [^self concretizeConditionalJump: 16r7]. [JumpFPLessOrEqual] -> [^self concretizeConditionalJump: 16r6]. [JumpFPOrdered] -> [^self concretizeConditionalJump: 16rB]. [JumpFPUnordered] -> [^self concretizeConditionalJump: 16rA]. [RetN] -> [^self concretizeRetN]. [Stop] -> [^self concretizeStop]. "Arithmetic" [AddCqR] -> [^self concretizeAddCqR]. [AddCwR] -> [^self concretizeAddCwR]. [AddRR] -> [^self concretizeOpRR: 16r03]. [AddcRR] -> [^self concretizeAddcRR]. [AddcCqR] -> [^self concretizeAddcCqR]. [AddRdRd] -> [^self concretizeSEE2OpRdRd: 16r58]. [AddRsRs] -> [^self concretizeSEEOpRsRs: 16r58]. [AndCqR] -> [^self concretizeAndCqR]. [AndCwR] -> [^self concretizeAndCwR]. [AndRR] -> [^self concretizeOpRR: 16r23]. [TstCqR] -> [^self concretizeTstCqR]. [CmpCqR] -> [^self concretizeCmpCqR]. [CmpCwR] -> [^self concretizeCmpCwR]. [CmpRR] -> [^self concretizeReverseOpRR: 16r39]. [CmpRdRd] -> [^self concretizeCmpRdRd]. [CmpRsRs] -> [^self concretizeCmpRsRs]. [DivRdRd] -> [^self concretizeSEE2OpRdRd: 16r5E]. [DivRsRs] -> [^self concretizeSEEOpRsRs: 16r5E]. [MulRdRd] -> [^self concretizeSEE2OpRdRd: 16r59]. [MulRsRs] -> [^self concretizeSEEOpRsRs: 16r59]. [OrCqR] -> [^self concretizeOrCqR]. [OrCwR] -> [^self concretizeOrCwR]. [OrRR] -> [^self concretizeOpRR: 16r0B]. [SubCqR] -> [^self concretizeSubCqR]. [SubCwR] -> [^self concretizeSubCwR]. [SubRR] -> [^self concretizeOpRR: 16r2B]. [SubbRR] -> [^self concretizeSubbRR]. [SubRdRd] -> [^self concretizeSEE2OpRdRd: 16r5C]. [SubRsRs] -> [^self concretizeSEEOpRsRs: 16r5C]. [SqrtRd] -> [^self concretizeSqrtRd]. [SqrtRs] -> [^self concretizeSqrtRs]. [XorCwR] -> [^self concretizeXorCwR]. [XorRR] -> [^self concretizeOpRR: 16r33]. [XorRdRd] -> [^self concretizeXorRdRd]. [XorRsRs] -> [^self concretizeXorRsRs]. [NegateR] -> [^self concretizeNegateR]. [NotR] -> [^self concretizeNotR]. [LoadEffectiveAddressMwrR] -> [^self concretizeLoadEffectiveAddressMwrR]. [ArithmeticShiftRightCqR] -> [^self concretizeArithmeticShiftRightCqR]. [LogicalShiftRightCqR] -> [^self concretizeLogicalShiftRightCqR]. [LogicalShiftLeftCqR] -> [^self concretizeLogicalShiftLeftCqR]. [ArithmeticShiftRightRR] -> [^self concretizeArithmeticShiftRightRR]. [LogicalShiftLeftRR] -> [^self concretizeLogicalShiftLeftRR]. [ClzRR] -> [^self concretizeClzRR]. "Data Movement" [MoveCqR] -> [^self concretizeMoveCqR]. [MoveCwR] -> [^self concretizeMoveCwR]. [MoveRR] -> [^self concretizeReverseOpRR: 16r89]. [MoveRdRd] -> [^self concretizeMoveRdRd]. [MoveRsRs] -> [^self concretizeMoveRsRs]. [MoveAwR] -> [^self concretizeMoveAwR]. [MoveRAw] -> [^self concretizeMoveRAw]. [MoveAbR] -> [^self concretizeMoveAbR]. [MoveRAb] -> [^self concretizeMoveRAb]. [MoveMbrR] -> [^self concretizeMoveMbrR]. [MoveRMbr] -> [^self concretizeMoveRMbr]. [MoveRM8r] -> [^self concretizeMoveRMbr]. [MoveM8rR] -> [^self concretizeMoveM8rR]. [MoveM16rR] -> [^self concretizeMoveM16rR]. [MoveRM16r] -> [^self concretizeMoveRM16r]. [MoveM32rR] -> [^self concretizeMoveMwrR]. [MoveRM32r] -> [^self concretizeMoveRMwr]. [MoveM32rRs] -> [^self concretizeMoveM32rRs]. [MoveRsM32r] -> [^self concretizeMoveRsM32r]. [MoveM64rRd] -> [^self concretizeMoveM64rRd]. [MoveMwrR] -> [^self concretizeMoveMwrR]. [MoveXbrRR] -> [^self concretizeMoveXbrRR]. [MoveRXbrR] -> [^self concretizeMoveRXbrR]. [MoveXwrRR] -> [^self concretizeMoveXwrRR]. [MoveRXwrR] -> [^self concretizeMoveRXwrR]. [MoveRMwr] -> [^self concretizeMoveRMwr]. [MoveRdM64r] -> [^self concretizeMoveRdM64r]. [PopR] -> [^self concretizePopR]. [PushR] -> [^self concretizePushR]. [PushCq] -> [^self concretizePushCq]. [PushCw] -> [^self concretizePushCw]. [PrefetchAw] -> [^self concretizePrefetchAw]. "Conversion" [ConvertRRd] -> [^self concretizeConvertRRd]. [ConvertRdR] -> [^self concretizeConvertRdR]. [ConvertRsRd] -> [^self concretizeConvertRsRd]. [ConvertRdRs] -> [^self concretizeConvertRdRs]. [ConvertRsR] -> [^self concretizeConvertRsR]. [ConvertRRs] -> [^self concretizeConvertRRs]. [SignExtend8RR] -> [^self concretizeSignExtend8RR]. [SignExtend16RR] -> [^self concretizeSignExtend16RR]. [ZeroExtend8RR] -> [^self concretizeZeroExtend8RR]. [ZeroExtend16RR] -> [^self concretizeZeroExtend16RR] }. ^0 "keep Slang happy"! Item was changed: ----- Method: CogIA32Compiler>>dispatchConcretizeProcessorSpecific (in category 'generate machine code') ----- dispatchConcretizeProcessorSpecific "Attempt to generate concrete machine code for the instruction at address. This is part of the inner dispatch of concretizeAt: actualAddress which exists only to get around the number of literals limits in the SqueakV3 (blue book derived) bytecode set." opcode caseOf: { + [CPUID] -> [^self concretizeCPUID]. + "Specific Arithmetic" - "Specific Control/Data Movement" [CDQ] -> [^self concretizeCDQ]. [IDIVR] -> [^self concretizeIDIVR]. [IMULRR] -> [^self concretizeMulRR]. + [XCHGRR] -> [^self concretizeXCHGRR]. + "Specific Control/Data Movement" - [CPUID] -> [^self concretizeCPUID]. - [FSTPS] -> [^self concretizeFSTPS]. - [FSTPD] -> [^self concretizeFSTPD]. [REP] -> [^self concretizeREP]. [CLD] -> [^self concretizeCLD]. [MOVSB] -> [^self concretizeMOVSB]. [MOVSD] -> [^self concretizeMOVSD]. [BSR] -> [^self concretizeBSR]. + [FSTPS] -> [^self concretizeFSTPS]. + [FSTPD] -> [^self concretizeFSTPD]. - [XCHGRR] -> [^self concretizeXCHGRR]. "Multi-processing" + [CMPXCHGRAw] -> [^self concretizeCMPXCHGRAw]. + "[LFENCE] -> [^self concretizeFENCE: 5]." - "[CMPXCHGAwR] -> [^self concretizeCMPXCHGAwR]. - [CMPXCHGMwrR] -> [^self concretizeCMPXCHGMwrR]." - [LFENCE] -> [^self concretizeFENCE: 5]. [MFENCE] -> [^self concretizeFENCE: 6]. [SFENCE] -> [^self concretizeFENCE: 7]. + [LOCK] -> [^self concretizeLOCK]. + [SETE] -> [^self concretizeSet: 4]. + "[XCHGAwR] -> [^self concretizeXCHGAwR]." - "[LOCK] -> [^self concretizeLOCK]." - [XCHGAwR] -> [^self concretizeXCHGAwR]. "[XCHGMwrR] -> [^self concretizeXCHGMwrR]." }. ^0! Item was changed: ----- Method: CogIA32Compiler>>generateLowLevelTryLock: (in category 'multi-threading') ----- generateLowLevelTryLock: vmOwnerLockAddress "Generate a function that attempts to lock the vmOwnerLock and answers true if it succeeded." + | valueReg | vmOwnerLockAddress = 0 ifTrue: [cogit + MoveCq: 1 R: ABIResultReg; - MoveCq: 1 R: EAX; RetN: 0. ^self]. + valueReg := cogit availableRegisterOrNoneIn: (ABICallerSavedRegisterMask bitClear: 1 << EAX). cogit + MoveMw: 4 r: ESP R: valueReg; + MoveCq: 0 R: EAX; + gen: LOCK; + gen: CMPXCHGRAw operand: valueReg operand: vmOwnerLockAddress; + gen: SETE operand: ABIResultReg; "a.k.a. EAX" - MoveCq: 1 R: EAX; - gen: MFENCE; "make the XCHG globally consistent" - gen: XCHGAwR operand: vmOwnerLockAddress operand: EAX; - gen: SFENCE; "make the store globally visible" - SubCq: 1 R: EAX; "Since we only ever set the lock to 1 or 0, subtracting 1 sets - EAX to 0 if the lock was already locked and non-zero if it wasn't." RetN: 0! Item was changed: + ----- Method: CogIA32Compiler>>numLowLevelLockOpcodes (in category 'multi-threading') ----- - ----- Method: CogIA32Compiler>>numLowLevelLockOpcodes (in category 'accessing') ----- numLowLevelLockOpcodes + + "ceTryLockVMOwner: + movl 4(%esp), %ecx + xorl %eax, %eax + lock cmpxchgl %ecx, %ds:&vmOwnerLock + setz %al + ret + ceUnlockVMOwner: + xorl %eax, %eax + movl %eax, %ds:&vmOwnerLock + sfence + ret" + ^10! - "push $ebx - movl #0, %eax - movl 1, $ebx - mfence - lock cmpxchg %eax, &vmOwnerLock; # N.B. 2 instructions - pop $ebx - jnz locked - sfence - movl 1, $eax - ret - locked: ; N.B. Requires an instruction - movl 0, $eax - ret" - ^14! Item was removed: - ----- Method: CogIA32CompilerTests>>testXCHGAwR (in category 'tests') ----- - testXCHGAwR - "self new testXCHGAwR" - | xchgAwR | - xchgAwR := CogIA32Compiler classPool at: #XCHGAwR. - CogIA32CompilerForTests registersWithNamesDo: - [:reg :regname| - #(16r555555 16rAAAAAA) do: - [:addr| | inst len | - inst := self gen: xchgAwR operand: addr operand: reg. - len := inst concretizeAt: 0. - self processor - disassembleInstructionAt: 0 - In: inst machineCode object - into: [:str :sz| | plainJane herIntended | - "Convert e.g. '00000000: movl %eax, 0x2(%eax) : 89 40 02' to 'movl %eax, 0x2(%eax)'" - plainJane := self strip: str. - herIntended := 'xchgl ', regname, ', 0x', (addr hex allButFirst: 3). - self assert: herIntended equals: plainJane. - self assert: len = sz]]]! Item was removed: - ----- Method: CogIA32CompilerTests>>testXCHGMwrR (in category 'tests') ----- - testXCHGMwrR - "self new testXCHGMwrR" - | xchgMwrR | - xchgMwrR := CogIA32Compiler classPool at: #XCHGMwrR. - CogIA32CompilerForTests registersWithNamesDo: - [:sreg :srname| - CogIA32CompilerForTests registersWithNamesDo: - [:dreg :drname| - ((1 to: 19 by: 3) collect: [:po2| 2 raisedToInteger: po2]) do: - [:offset| | memory | - self resetGen. - self gen: xchgMwrR operand: offset operand: sreg operand: dreg. - memory := self generateInstructions. - self processor - disassembleInstructionAt: 0 - In: memory - into: [:str :sz| | plainJane herIntended | - plainJane := self strip: str. - herIntended := 'xchgl ', drname, ', 0x', (offset hex allButFirst: 3), '(', srname, ')'. - self assert: herIntended equals: plainJane. - self assert: memory size = sz]]]]! Item was changed: ----- Method: CogThreadManager>>acquireVMFor: (in category 'public api') ----- acquireVMFor: threadIndex "Attempt to acquire the VM, eventually blocking until it becomes available. Spin until the maxWaitingPriority has been updated if it is lower than this thread's priority." | vmThread | self assert: threadIndex = self ioGetThreadLocalThreadIndex. vmThread := self vmThreadAt: threadIndex. self assert: (vmThread state = CTMUnavailable or: [vmThread state = CTMWantingOwnership]). + (cogit tryLockVMOwner: threadIndex) ifFalse: - (self tryLockVMToIndex: threadIndex) ifFalse: [vmThread state: CTMWantingOwnership. + [cogit tryLockVMToIndex: threadIndex] whileFalse: - [self tryLockVMToIndex: threadIndex] whileFalse: [[coInterpreter getMaxWaitingPriority < vmThread priority] whileTrue: + [coInterpreter waitingPriorityIsAtLeast: vmThread priority]. + vmOwner ~= threadIndex ifTrue: - [cogit tryLockVMOwner ifTrue: - [coInterpreter waitingPriorityIsAtLeast: vmThread priority. - cogit unlockVMOwner]]. - vmOwner ~= threadIndex ifTrue: [self ioWaitOnOSSemaphore: (self addressOf: vmThread osSemaphore)]]]. vmOSThread := vmThread osThread. vmThread state: CTMAssignableOrInVM. ^vmThread! Item was changed: ----- Method: CogThreadManager>>ensureRunningVMThread: (in category 'public api') ----- ensureRunningVMThread: vmIsRelinquishing + "Called from checkVMOwnershipFromHeartbeat if the VM is unowned. + Hence we are in the heartbeat thread. The race is against that thread + owning the VM and against foreign callbacks." - | vmThread | + self willingVMThread ifNotNil: + [:vmThread| + "If the VM is relinquishing the processor then only schedule a thread if it has work to do." - (self tryLockVMToIndex: -1) ifFalse: - ["self cCode: [coInterpreter print: 'ERVT failed to lock'; cr]." ^nil]. - (vmThread := self willingVMThread) ifNotNil: - ["If the VM is relinquishing the processor then only schedule a thread if it has work to do." (vmIsRelinquishing and: [vmThread state ~= CTMWantingOwnership]) ifTrue: + [^self]. + (cogit tryLockVMToIndex: vmThread index) ifFalse: "someone beat us to it..." + [^self]. - [self releaseVM. - ^nil]. - self setVMOwner: vmThread index. vmOSThread := vmThread osThread. + "release the thread from its blocking loop" self ioSignalOSSemaphore: (self addressOf: vmThread osSemaphore). self ioTransferTimeslice. "self cCode: [coInterpreter print: 'ERVT signalled '; printNum: vmThread index; cr]." + ^self]. - ^nil]. + "If the VM is relinquishing the processor then only schedule a thread if it has work to do + (willingVMThread not nil above. + If we have failed to allocate thread storage before there is no point continuing to - "If the VM is relinquishing the processor then only schedule a thread if it has work to do." - vmIsRelinquishing ifTrue: - [self releaseVM. - ^nil]. - - "If we have failed to allocate thread storage before there is no point continuing to try to do so. By this time we should have quite a few threads in the pool." + (vmIsRelinquishing or: [memoryIsScarce]) ifFalse: + [self unusedThreadInfo ifNotNil: + [:vmThread| + self setVMOwner: vmThread index. + (self startThreadForThreadInfo: vmThread) ifFalse: + [self releaseVM]]]! - (memoryIsScarce - or: [(vmThread := self unusedThreadInfo) isNil]) ifTrue: - [self releaseVM. - "self cCode: [coInterpreter print: 'ERVT memory is scarce or no unused thread info or too many threads'; cr]." - ^nil]. - - self setVMOwner: vmThread index. - (self startThreadForThreadInfo: vmThread) ifFalse: - [self releaseVM]! Item was changed: ----- Method: CogThreadManager>>ioCurrentOSThread (in category 'simulation') ----- ioCurrentOSThread "See platforms//vm/sqPlatformSpecific.h for the real definition." + ^Processor activeProcess identityHash! - ^Processor activeProcess! Item was changed: ----- Method: CogThreadManager>>testVMOwnerIs: (in category 'locking') ----- testVMOwnerIs: index "Test what the vmOwner is from a process that may not be the current VM owner" | retryCount ownerIsIndex | self assert: index ~= 0. retryCount := 0. + [cogit tryLockVMOwner: index] whileFalse: - [cogit tryLockVMOwner] whileFalse: [(retryCount := retryCount + 1) > 10 ifTrue: [self ioTransferTimeslice]]. ownerIsIndex := self getVMOwner = index. cogit unlockVMOwner. ^ownerIsIndex! Item was removed: - ----- Method: CogThreadManager>>tryLockVMToIndex: (in category 'locking') ----- - tryLockVMToIndex: index - "Attempt to lock the vmOwner to index, answering if successful." - | vmThread locked | - - self assert: index ~= 0. - cogit tryLockVMOwner ifFalse: [^false]. - self getVMOwner = 0 ifTrue: - [self setVMOwner: index. - cogit unlockVMOwner. - index >= 1 ifTrue: - [vmThread := self vmThreadAt: index. - vmOSThread := vmThread osThread. - self sqLowLevelMFence]. - ^true]. - (locked := index > 0 and: [self getVMOwner = index]) ifTrue: - [vmThread := self vmThreadAt: index. - vmOSThread := vmThread osThread. - self sqLowLevelMFence]. - cogit unlockVMOwner. - ^locked! Item was changed: CogAbstractInstruction subclass: #CogX64Compiler instanceVariableNames: '' + classVariableNames: 'BSR CArg0Reg CArg1Reg CArg2Reg CArg3Reg CDQ CLD CMPXCHGRMr CPUID IDIVR IMULRR LFENCE LOCK MFENCE MOVSB MOVSQ ModReg ModRegInd ModRegIndDisp32 ModRegIndSIB ModRegRegDisp32 ModRegRegDisp8 MoveRAwNoVBR R10 R11 R12 R13 R14 R15 R8 R9 RAX RBP RBX RCX RDI RDX REP RSI RSP SETE SFENCE SIB1 SIB2 SIB4 SIB8 SysV XCHGRR XMM0L XMM10L XMM11L XMM12L XMM13L XMM14L XMM15L XMM1L XMM2L XMM3L XMM4L XMM5L XMM6L XMM7L XMM8L XMM9L' - classVariableNames: 'BSR CDQ CLD CMPXCHGAwR CMPXCHGMwrR CPUID IDIVR IMULRR LFENCE LOCK MFENCE MOVSB MOVSQ ModReg ModRegInd ModRegIndDisp32 ModRegIndSIB ModRegRegDisp32 ModRegRegDisp8 MoveRAwNoVBR R10 R11 R12 R13 R14 R15 R8 R9 RAX RBP RBX RCX RDI RDX REP RSI RSP SFENCE SIB1 SIB2 SIB4 SIB8 SysV XCHGAwR XCHGMwrR XCHGRR XMM0L XMM10L XMM11L XMM12L XMM13L XMM14L XMM15L XMM1L XMM2L XMM3L XMM4L XMM5L XMM6L XMM7L XMM8L XMM9L' poolDictionaries: '' category: 'VMMaker-JIT'! !CogX64Compiler commentStamp: 'eem 9/14/2015 17:12' prior: 0! I generate x64 (x86-64) instructions from CogAbstractInstructions. For reference see 1. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, A-M 2. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, N-Z http://www.intel.com/products/processor/manuals/ or AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions AMD64 Architecture Programmer's Manual Volume 4: 128-bit Media Instructions AMD64 Architecture Programmer's Manual Volume 5: 64-bit Media and x87 Floating Point Instructions http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/ (� is supposed to be the Unicode "registered sign").! Item was added: + ----- Method: CogX64Compiler class>>filteredInstVarNames (in category 'translation') ----- + filteredInstVarNames + "Move the unaligned bytes to the end of the structure." + ^(super filteredInstVarNames copyWithout: 'machineCode'), #('machineCode')! Item was changed: ----- Method: CogX64Compiler class>>initialize (in category 'class initialization') ----- initialize "Initialize various x64 instruction-related constants. [1] IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, A-M" "CogX64Compiler initialize" self ~~ CogX64Compiler ifTrue: [^self]. (InitializationOptions ifNil: [Dictionary new]) at: #ABI ifPresent: [:abi| SysV := abi asUppercase ~= #WIN64 and: [abi asUppercase ~= #'_WIN64']] ifAbsent: [SysV := true]. "Default ABI; set to true for SysV, false for WIN64/_WIN64" + "Initialize most sets of variables that run from 0 to N - 1..." + #( "16 integer registers, rcx, rdx, rbx bizarrely inconsistent" + (RAX RCX RDX RBX RSP RBP RSI RDI R8 R9 R10 R11 R12 R13 R14 R15) + "16 lower half floating point registers" + (XMM0L XMM1L XMM2L XMM3L XMM4L XMM5L XMM6L XMM7L XMM8L XMM9L XMM10L XMM11L XMM12L XMM13L XMM14L XMM15L) + "Mod R/M Mod fields. See [1] Sec 2.4, 2.5 & 2.6 & Table 2-2" + (ModRegInd ModRegRegDisp8 ModRegRegDisp32 ModReg ModRegIndSIB ModRegIndDisp32) + "SIB Scaled Index modes. See [1] Sec 2.4, 2.5 & 2.6 & Table 2-3" + (SIB1 SIB2 SIB4 SIB8)) do: + [:classVarNames| + classVarNames doWithIndex: + [:k :v| + self classPool at: k put: v - 1]]. - RAX := 0. - RCX := 1. "Were they completely mad or simply sadistic?" - RDX := 2. - RBX := 3. - RSP := 4. - RBP := 5. - RSI := 6. - RDI := 7. - R8 := 8. - R9 := 9. - R10 := 10. - R11 := 11. - R12 := 12. - R13 := 13. - R14 := 14. - R15 := 15. - XMM0L := 0. - XMM1L := 1. - XMM2L := 2. - XMM3L := 3. - XMM4L := 4. - XMM5L := 5. - XMM6L := 6. - XMM7L := 7. - XMM8L := 8. - XMM9L := 9. - XMM10L := 10. - XMM11L := 11. - XMM12L := 12. - XMM13L := 13. - XMM14L := 14. - XMM15L := 15. - - "Mod R/M Mod fields. See [1] Sec 2.4, 2.5 & 2.6 & Table 2-2" - ModRegInd := 0. - ModRegIndSIB := 4. - ModRegIndDisp32 := 5. - ModRegRegDisp8 := 1. - ModRegRegDisp32 := 2. - ModReg := 3. - - "SIB Scaled Index modes. See [1] Sec 2.4, 2.5 & 2.6 & Table 2-3" - SIB1 := 0. - SIB2 := 1. - SIB4 := 2. - SIB8 := 3. - "Specific instructions" + self initializeSpecificOpcodes: #(CPUID + "Arithmetic:" CDQ IDIVR IMULRR XCHGRR + "Bit count/data movement:" CLD REP MOVSB MOVSQ BSR + "Multi-processing:" LFENCE MFENCE SFENCE LOCK CMPXCHGRMr SETE MoveRAwNoVBR) + in: thisContext method + extraClassVarNames: #(CArg0Reg CArg1Reg CArg2Reg CArg3Reg)! - self - initializeSpecificOpcodes: #(CDQ IDIVR IMULRR CPUID LFENCE MFENCE SFENCE LOCK CMPXCHGAwR CMPXCHGMwrR XCHGAwR MoveRAwNoVBR XCHGMwrR XCHGRR CLD REP MOVSB MOVSQ BSR) - in: thisContext method! Item was changed: ----- Method: CogX64Compiler class>>initializeAbstractRegistersSysV (in category 'class initialization') ----- initializeAbstractRegistersSysV "Assign the abstract registers with the identities/indices of the relevant concrete registers." "[1] Figure 3.4 Register Usage in System V Application Binary Interface AMD64 Architecture Processor Supplement" "N.B. RAX RCX & RDX are caller-save (scratch) registers. Hence we use RCX for class and RDX for receiver/result since these are written in all normal sends." ABICalleeSavedRegisterMask := self registerMaskFor: RBX and: R12 and: R13 and: R14 and: R15. ABICallerSavedRegisterMask := self registerMaskFor: RAX and: RCX and: RDX and: RSI and: RDI and: R8 and: R9 and: R10 and: R11. TempReg := RAX. ClassReg := RCX. ReceiverResultReg := RDX. SendNumArgsReg := R9. SPReg := RSP. FPReg := RBP. Arg0Reg := RDI. "So as to agree with C ABI arg 0" Arg1Reg := RSI. "So as to agree with C ABI arg 1" VarBaseReg := RBX. "Must be callee saved" "R8 is either RISCTempReg or Extra6Reg depending on subclass." Extra0Reg := R10. Extra1Reg := R11. Extra2Reg := R12. Extra3Reg := R13. Extra4Reg := R14. + Extra5Reg := R15. + + "The SysV ABI has 6 integer argument registers; we use only 4." + CArg0Reg := RDI. + CArg1Reg := RSI. + CArg2Reg := RDX. + CArg3Reg := RCX! - Extra5Reg := R15! Item was changed: ----- Method: CogX64Compiler class>>initializeAbstractRegistersWin64 (in category 'class initialization') ----- initializeAbstractRegistersWin64 "Assign the abstract registers with the identities/indices of the relevant concrete registers." "N.B. Since receiver/result are written in all normal sends, it's better to use scratch registers for them (those which are caller-saved). In Win64 ABI, this does not leave that many choices: - RAX is TempReg (overwritten by result etc...) - RCX and RDX are used for first 2 args (see genMarshallNArgs:arg:arg:arg:arg:) - it remains R8,R9,R10 & R11 : we choose the first two" ABICalleeSavedRegisterMask := self registerMaskFor: RBX and: RSI and: RDI and: R12 and: R13 and: R14 and: R15. ABICallerSavedRegisterMask := self registerMaskFor: RAX and: RCX and: RDX and: R8 and: R9 and: R10 and: R11. TempReg := RAX. ClassReg := R8. ReceiverResultReg := R9. SendNumArgsReg := R10. SPReg := RSP. FPReg := RBP. Arg0Reg := RCX. "So as to agree with C ABI arg 0" Arg1Reg := RDX. "So as to agree with C ABI arg 1" VarBaseReg := RBX. "Must be callee saved" "R11 is either RISCTempReg or Extra6Reg depending on subclass." Extra0Reg := RDI. Extra1Reg := RSI. Extra2Reg := R12. Extra3Reg := R13. Extra4Reg := R14. + Extra5Reg := R15. + + CArg0Reg := RCX. + CArg1Reg := RDX. + CArg2Reg := R8. + CArg3Reg := R9! - Extra5Reg := R15! Item was changed: ----- Method: CogX64Compiler>>computeMaximumSize (in category 'generate machine code') ----- (excessive size, no diff calculated) Item was added: + ----- Method: CogX64Compiler>>concretizeCMPXCHGRMr (in category 'generate machine code - concretize processor-specific') ----- + concretizeCMPXCHGRMr + + | valueReg addressReg | + valueReg := operands at: 0. + addressReg := operands at: 1. + machineCode + "REX.W + 0F B1/r CMPXCHG r64" + at: 0 put: (self rexR: valueReg x: 0 b: addressReg); + at: 1 put: 16r0f; + at: 2 put: 16rB1; + at: 3 put: (self mod: ModRegInd RM: addressReg RO: valueReg). + "cogit processor disassembleInstructionAt: 0 In: machineCode object" + ^4! Item was added: + ----- Method: CogX64Compiler>>concretizeLOCK (in category 'pro') ----- + concretizeLOCK + + machineCode at: 0 put: 16rF0. + ^1! Item was added: + ----- Method: CogX64Compiler>>concretizeSet: (in category 'proc') ----- + concretizeSet: conditionCode + | reg offset | + offset := (reg := operands at: 0) >= R8 + ifTrue: [machineCode at: 0 put: 16r40. + 1] + ifFalse: [0]. + machineCode + at: 0 + offset put: 16r0F; + at: 1 + offset put: 16r90 + conditionCode; + at: 2 + offset put: (self mod: ModReg RM: (reg bitAnd: 7) RO: 0). + "cogit processor disassembleInstructionAt: 0 In: machineCode object" + ^3 + offset! Item was changed: ----- Method: CogX64Compiler>>dispatchConcretize (in category 'generate machine code') ----- dispatchConcretize "Attempt to generate concrete machine code for the instruction at address. This is the inner dispatch of concretizeAt: actualAddress which exists only to get around the branch size limits in the SqueakV3 (blue book derived) bytecode set." + opcode >= CPUID ifTrue: - opcode >= CDQ ifTrue: [^self dispatchConcretizeProcessorSpecific]. opcode caseOf: { "Noops & Pseudo Ops" [Label] -> [^self concretizeLabel]. [AlignmentNops] -> [^self concretizeAlignmentNops]. [Fill32] -> [^self concretizeFill32]. [Nop] -> [^self concretizeNop]. "Control" [Call] -> [^self concretizeCall]. [CallR] -> [^self concretizeCallR]. [CallFull] -> [^self concretizeCallFull]. [JumpR] -> [^self concretizeJumpR]. [JumpFull] -> [^self concretizeJumpFull]. [JumpLong] -> [^self concretizeJumpLong]. [JumpLongZero] -> [^self concretizeConditionalJump: 16r4]. [JumpLongNonZero] -> [^self concretizeConditionalJump: 16r5]. [Jump] -> [^self concretizeJump]. "Table B-1 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture" [JumpZero] -> [^self concretizeConditionalJump: 16r4]. [JumpNonZero] -> [^self concretizeConditionalJump: 16r5]. [JumpNegative] -> [^self concretizeConditionalJump: 16r8]. [JumpNonNegative] -> [^self concretizeConditionalJump: 16r9]. [JumpOverflow] -> [^self concretizeConditionalJump: 16r0]. [JumpNoOverflow] -> [^self concretizeConditionalJump: 16r1]. [JumpCarry] -> [^self concretizeConditionalJump: 16r2]. [JumpNoCarry] -> [^self concretizeConditionalJump: 16r3]. [JumpLess] -> [^self concretizeConditionalJump: 16rC]. [JumpGreaterOrEqual] -> [^self concretizeConditionalJump: 16rD]. [JumpGreater] -> [^self concretizeConditionalJump: 16rF]. [JumpLessOrEqual] -> [^self concretizeConditionalJump: 16rE]. [JumpBelow] -> [^self concretizeConditionalJump: 16r2]. [JumpAboveOrEqual] -> [^self concretizeConditionalJump: 16r3]. [JumpAbove] -> [^self concretizeConditionalJump: 16r7]. [JumpBelowOrEqual] -> [^self concretizeConditionalJump: 16r6]. [JumpFPEqual] -> [^self concretizeConditionalJump: 16r4]. [JumpFPNotEqual] -> [^self concretizeConditionalJump: 16r5]. [JumpFPLess] -> [^self concretizeConditionalJump: 16r2]. [JumpFPGreaterOrEqual] -> [^self concretizeConditionalJump: 16r3]. [JumpFPGreater] -> [^self concretizeConditionalJump: 16r7]. [JumpFPLessOrEqual] -> [^self concretizeConditionalJump: 16r6]. [JumpFPOrdered] -> [^self concretizeConditionalJump: 16rB]. [JumpFPUnordered] -> [^self concretizeConditionalJump: 16rA]. [RetN] -> [^self concretizeRetN]. [Stop] -> [^self concretizeStop]. "Arithmetic" [AddCqR] -> [^self concretizeArithCqRWithRO: 0 raxOpcode: 15r05]. [AddcCqR] -> [^self concretizeArithCqRWithRO: 2 raxOpcode: 15r15]. [AddCwR] -> [^self concretizeArithCwR: 16r03]. [AddRR] -> [^self concretizeOpRR: 16r03]. [AddRsRs] -> [^self concretizeSEEOpRsRs: 16r58]. [AddRdRd] -> [^self concretizeSEE2OpRdRd: 16r58]. [AndCqR] -> [^self concretizeArithCqRWithRO: 4 raxOpcode: 16r25]. [AndCwR] -> [^self concretizeArithCwR: 16r23]. [AndRR] -> [^self concretizeOpRR: 16r23]. [TstCqR] -> [^self concretizeTstCqR]. [CmpCqR] -> [^self concretizeArithCqRWithRO: 7 raxOpcode: 16r3D]. [CmpCwR] -> [^self concretizeArithCwR: 16r39]. [CmpC32R] -> [^self concretizeCmpC32R]. [CmpRR] -> [^self concretizeReverseOpRR: 16r39]. [CmpRdRd] -> [^self concretizeCmpRdRd]. [CmpRsRs] -> [^self concretizeCmpRsRs]. [DivRdRd] -> [^self concretizeSEE2OpRdRd: 16r5E]. [DivRsRs] -> [^self concretizeSEEOpRsRs: 16r5E]. [MulRdRd] -> [^self concretizeSEE2OpRdRd: 16r59]. [MulRsRs] -> [^self concretizeSEEOpRsRs: 16r59]. [OrCqR] -> [^self concretizeArithCqRWithRO: 1 raxOpcode: 16r0D]. [OrCwR] -> [^self concretizeArithCwR: 16r0B]. [OrRR] -> [^self concretizeOpRR: 16r0B]. [SubCqR] -> [^self concretizeArithCqRWithRO: 5 raxOpcode: 16r2D]. [SubbCqR] -> [^self concretizeArithCqRWithRO: 3 raxOpcode: 16r1D]. [SubCwR] -> [^self concretizeArithCwR: 16r2B]. [SubRR] -> [^self concretizeOpRR: 16r2B]. [SubRdRd] -> [^self concretizeSEE2OpRdRd: 16r5C]. [SubRsRs] -> [^self concretizeSEEOpRsRs: 16r5C]. [SqrtRd] -> [^self concretizeSqrtRd]. [SqrtRs] -> [^self concretizeSqrtRs]. [XorCwR] -> [^self concretizeArithCwR: 16r33]. [XorRR] -> [^self concretizeOpRR: 16r33]. [XorRdRd] -> [^self concretizeXorRdRd]. [XorRsRs] -> [^self concretizeXorRsRs]. [NegateR] -> [^self concretizeNegateR]. [LoadEffectiveAddressMwrR] -> [^self concretizeLoadEffectiveAddressMwrR]. [RotateLeftCqR] -> [^self concretizeShiftCqRegOpcode: 0]. [RotateRightCqR] -> [^self concretizeShiftCqRegOpcode: 1]. [ArithmeticShiftRightCqR] -> [^self concretizeShiftCqRegOpcode: 7]. [LogicalShiftRightCqR] -> [^self concretizeShiftCqRegOpcode: 5]. [LogicalShiftLeftCqR] -> [^self concretizeShiftCqRegOpcode: 4]. [ArithmeticShiftRightRR] -> [^self concretizeShiftRegRegOpcode: 7]. [LogicalShiftLeftRR] -> [^self concretizeShiftRegRegOpcode: 4]. [ClzRR] -> [^self concretizeClzRR]. "Data Movement" [MoveCqR] -> [^self concretizeMoveCqR]. [MoveCwR] -> [^self concretizeMoveCwR]. [MoveC32R] -> [^self concretizeMoveC32R]. [MoveRR] -> [^self concretizeReverseOpRR: 16r89]. [MoveAwR] -> [^self concretizeMoveAwR]. [MoveA32R] -> [^self concretizeMoveA32R]. [MoveRAw] -> [^self concretizeMoveRAw]. [MoveRA32] -> [^self concretizeMoveRA32]. [MoveAbR] -> [^self concretizeMoveAbR]. [MoveRAb] -> [^self concretizeMoveRAb]. [MoveMbrR] -> [^self concretizeMoveMbrR]. [MoveRMbr] -> [^self concretizeMoveRMbr]. [MoveM8rR] -> [^self concretizeMoveMbrR]. [MoveRM8r] -> [^self concretizeMoveRMbr]. [MoveM16rR] -> [^self concretizeMoveM16rR]. [MoveRM16r] -> [^self concretizeMoveRM16r]. [MoveM32rR] -> [^self concretizeMoveM32rR]. [MoveM32rRs] -> [^self concretizeMoveM32rRs]. [MoveM64rRd] -> [^self concretizeMoveM64rRd]. [MoveMwrR] -> [^self concretizeMoveMwrR]. [MoveXbrRR] -> [^self concretizeMoveXbrRR]. [MoveRXbrR] -> [^self concretizeMoveRXbrR]. [MoveXwrRR] -> [^self concretizeMoveXwrRR]. [MoveRXwrR] -> [^self concretizeMoveRXwrR]. [MoveX32rRR] -> [^self concretizeMoveX32rRR]. [MoveRX32rR] -> [^self concretizeMoveRX32rR]. [MoveRMwr] -> [^self concretizeMoveRMwr]. [MoveRM32r] -> [^self concretizeMoveRM32r]. [MoveRsM32r] -> [^self concretizeMoveRsM32r]. [MoveRdM64r] -> [^self concretizeMoveRdM64r]. [MoveRdR] -> [^self concretizeMoveRdR]. [MoveRRd] -> [^self concretizeMoveRRd]. [MoveRdRd] -> [^self concretizeMoveRdRd]. [MoveRsRs] -> [^self concretizeMoveRsRs]. [PopR] -> [^self concretizePopR]. [PushR] -> [^self concretizePushR]. [PushCq] -> [^self concretizePushCq]. [PushCw] -> [^self concretizePushCw]. [PrefetchAw] -> [^self concretizePrefetchAw]. "Conversion" [ConvertRRd] -> [^self concretizeConvertRRd]. [ConvertRdR] -> [^self concretizeConvertRdR]. [ConvertRRs] -> [^self concretizeConvertRRs]. [ConvertRsR] -> [^self concretizeConvertRsR]. [ConvertRsRd] -> [^self concretizeConvertRsRd]. [ConvertRdRs] -> [^self concretizeConvertRdRs]. [SignExtend8RR] -> [^self concretizeSignExtend8RR]. [SignExtend16RR] -> [^self concretizeSignExtend16RR]. [SignExtend32RR] -> [^self concretizeSignExtend32RR]. [ZeroExtend8RR] -> [^self concretizeZeroExtend8RR]. [ZeroExtend16RR] -> [^self concretizeZeroExtend16RR]. [ZeroExtend32RR] -> [^self concretizeZeroExtend32RR]. }. ^0 "keep Slang happy"! Item was changed: ----- Method: CogX64Compiler>>dispatchConcretizeProcessorSpecific (in category 'generate machine code') ----- dispatchConcretizeProcessorSpecific "Attempt to generate concrete machine code for the instruction at address. This is part of the inner dispatch of concretizeAt: actualAddress which exists only to get around the number of literals limits in the SqueakV3 (blue book derived) bytecode set." opcode caseOf: { + [CPUID] -> [^self concretizeCPUID]. "Specific Arithmetic" [CDQ] -> [^self concretizeCDQ]. [IDIVR] -> [^self concretizeIDIVR]. [IMULRR] -> [^self concretizeMulRR]. - [CPUID] -> [^self concretizeCPUID]. [XCHGRR] -> [^self concretizeXCHGRR]. "Specific Data Movement" [REP] -> [^self concretizeREP]. [CLD] -> [^self concretizeCLD]. [MOVSB] -> [^self concretizeMOVSB]. [MOVSQ] -> [^self concretizeMOVSQ]. [BSR] -> [^self concretizeBSR]. "Multi-processing" "[CMPXCHGAwR] -> [^self concretizeCMPXCHGAwR]. [CMPXCHGMwrR] -> [^self concretizeCMPXCHGMwrR]. [LFENCE] -> [^self concretizeFENCE: 5]." [MFENCE] -> [^self concretizeFENCE: 6]. [SFENCE] -> [^self concretizeFENCE: 7]. + [LOCK] -> [^self concretizeLOCK]. - "[LOCK] -> [^self concretizeLOCK]." [MoveRAwNoVBR] -> [^self concretizeMoveRAwNoVBR]. + [CMPXCHGRMr] -> [^self concretizeCMPXCHGRMr]. + [SETE] -> [^self concretizeSet: 4]. - [XCHGAwR] -> [^self concretizeXCHGAwR]. "[XCHGMwrR] -> [^self concretizeXCHGMwrR]." }. ^0! Item was changed: ----- Method: CogX64Compiler>>genMarshallNArgs:arg:arg:arg:arg: (in category 'abi') ----- genMarshallNArgs: numArgs arg: regOrConst0 arg: regOrConst1 arg: regOrConst2 arg: regOrConst3 + "Generate the code to pass up to four arguments in a C run-time call. Hack: each argument is either + a negative number, which encodes a positive constant, or a non-negative number, that of a register. - "Generate the code to pass up to four arguments in a C run-time call. Hack: each argument is - either a negative number, which encodes a constant, or a non-negative number, that of a register. + Run-time calls have no more than four arguments, so chosen so that on ARM32, where in its C ABI + the first four integer arguments are passed in registers, all arguments can be passed in registers. + We defer to the back end to generate this code not so much that the back end knows whether it + uses the stack or registers to pass arguments (it does, but...). In fact we defer for an extremely evil + reason. Doing so allows the x64 (where up to 6 args are passed) to assign the register arguments + in an order that allows some of the argument registers to be used for specific abstract registers, + specifically ReceiverResultReg and ClassReg. This is evil, evil, evil, but also it's really nice to keep + using the old register assignments the original author has grown accustomed to. - Run-time calls have no more than four arguments, so chosen so that on ARM, where in its C ABI the - first four integer arguments are passed in registers, all arguments can be passed in registers. We - defer to the back end to generate this code not so much that the back end knows whether it uses - the stack or registers to pass arguments (it does, but...). In fact we defer for an extremely evil reason. - Doing so allows the x64 (where up to 6 args are passed) to assign the register arguments in an order - that allows some of the argument registers to be used for specific abstract registers, specifically - ReceiverResultReg and ClassReg. This is evil, evil, evil, but also it's really nice to keep using the old - register assignments the original author has grown accustomed to. How can this possibly work? Look at Cogit class>>runtime for a list of the run-time calls and their arguments, including which arguments are passed in which registers. Look at CogX64Compiler's subclass implementations of initializeAbstractRegisters. There are no calls in which ReceiverResultReg (RDX) and/or ClassReg (RCX) are passed along with Arg0Reg and Arg1Reg, and none in which the use of either ReceiverResultReg or ClassReg conflict for args 3 & 4. So if args are assigned in order, the registers do not get overwritten. Yes, this is evil, but it's so nice to continue to use RCX & RDX. Argument registers for args 0 to 3 in SysV are RDI RSI RDX RCX, and in Win64 are RCX RDX R8 R9" SysV ifFalse: "WIN64 ABI allways reserve shadow space on the stack for callee to save up to 4 register parameters" [cogit SubCq: 32 R: RSP]. numArgs = 0 ifTrue: [^self]. + self assert: numArgs <= 4. + (cogit isTrampolineArgConstant: regOrConst0) + ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst0) R: CArg0Reg] "a.k.a. Arg0Reg" - SysV - ifTrue: - [(cogit isTrampolineArgConstant: regOrConst0) - ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst0) R: RDI] "a.k.a. Arg0Reg" - ifFalse: - [regOrConst0 ~= RDI ifTrue: - [cogit MoveR: regOrConst0 R: RDI]]. - numArgs = 1 ifTrue: [^self]. - (cogit isTrampolineArgConstant: regOrConst1) - ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst1) R: RSI] "a.k.a. Arg1Reg" - ifFalse: - [regOrConst1 ~= RSI ifTrue: - [cogit MoveR: regOrConst1 R: RSI]]. - numArgs = 2 ifTrue: [^self]. - (cogit isTrampolineArgConstant: regOrConst2) - ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst2) R: RDX] "a.k.a. ReceiverResultReg" - ifFalse: - [regOrConst2 ~= RDX ifTrue: - [cogit MoveR: regOrConst2 R: RDX]]. - numArgs = 3 ifTrue: [^self]. - (cogit isTrampolineArgConstant: regOrConst3) - ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst3) R: RCX] "a.k.a. ClassReg" - ifFalse: - [regOrConst3 ~= RCX ifTrue: - [cogit MoveR: regOrConst3 R: RCX]]] ifFalse: + [regOrConst0 ~= CArg0Reg ifTrue: + [cogit MoveR: regOrConst0 R: CArg0Reg]]. + numArgs = 1 ifTrue: [^self]. + (cogit isTrampolineArgConstant: regOrConst1) + ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst1) R: CArg1Reg] "a.k.a. Arg1Reg" + ifFalse: + [regOrConst1 ~= CArg1Reg ifTrue: + [cogit MoveR: regOrConst1 R: CArg1Reg]]. + numArgs = 2 ifTrue: [^self]. + (cogit isTrampolineArgConstant: regOrConst2) + ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst2) R: CArg2Reg] "a.k.a. ReceiverResultReg (SysV) ClassReg (Win64)" + ifFalse: + [regOrConst2 ~= CArg2Reg ifTrue: + [cogit MoveR: regOrConst2 R: CArg2Reg]]. + numArgs = 3 ifTrue: [^self]. + (cogit isTrampolineArgConstant: regOrConst3) + ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst3) R: CArg3Reg] "a.k.a. ClassReg (SysV) ReceiverResultReg (Win64)" + ifFalse: + [regOrConst3 ~= CArg3Reg ifTrue: + [cogit MoveR: regOrConst3 R: CArg3Reg]]! - [(cogit isTrampolineArgConstant: regOrConst0) - ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst0) R: RCX] "a.k.a. Arg0Reg" - ifFalse: - [regOrConst0 ~= RCX ifTrue: - [cogit MoveR: regOrConst0 R: RCX]]. - numArgs = 1 ifTrue: [^self]. - (cogit isTrampolineArgConstant: regOrConst1) - ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst1) R: RDX] "a.k.a. Arg1Reg" - ifFalse: - [regOrConst1 ~= RDX ifTrue: - [cogit MoveR: regOrConst1 R: RDX]]. - numArgs = 2 ifTrue: [^self]. - (cogit isTrampolineArgConstant: regOrConst2) - ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst2) R: R8] "a.k.a. RISCTempReg in CogInLineLiteralsX64Compiler and Extra6Reg in CogOutOfLineLiteralsX64Compiler" - ifFalse: - [regOrConst2 ~= R8 ifTrue: - [cogit MoveR: regOrConst2 R: R8]]. - numArgs = 3 ifTrue: [^self]. - (cogit isTrampolineArgConstant: regOrConst3) - ifTrue: [cogit MoveCq: (cogit trampolineArgValue: regOrConst3) R: R9] "a.k.a. SendNumArgsReg" - ifFalse: - [regOrConst3 ~= R9 ifTrue: - [cogit MoveR: regOrConst3 R: R9]]]. - self assert: numArgs <= 4! Item was changed: ----- Method: CogX64Compiler>>generateLowLevelTryLock: (in category 'multi-threading') ----- generateLowLevelTryLock: vmOwnerLockAddress "Generate a function that attempts to lock the vmOwnerLock and answers if it succeeded." + | vmOwnerLockAddressReg | - | callerSavedReg | vmOwnerLockAddress = 0 ifTrue: [cogit + MoveCq: 1 R: ABIResultReg; - MoveCq: 1 R: RAX; RetN: 0. ^self]. + "RAX holds the value of lock if unlocked (zero), receives the existing value of the lock; RAX is implicit in CMPXCHG" + vmOwnerLockAddressReg := CArg1Reg. - "There is no 64-bit absolute address form of XCHGQ. Insteads, load the address into a scratch register." - callerSavedReg := cogit availableRegisterOrNoneIn: (ABICallerSavedRegisterMask bitClear: 1 << RAX). cogit + MoveCq: 0 R: RAX; + MoveCq: vmOwnerLockAddress R: vmOwnerLockAddressReg; + gen: LOCK; + gen: CMPXCHGRMr operand: CArg0Reg operand: vmOwnerLockAddressReg; + gen: SETE operand: ABIResultReg; - MoveCq: 1 R: RAX; - gen: MFENCE; "make the XCHG globally consistent" - gen: XCHGAwR operand: vmOwnerLockAddress operand: RAX operand: callerSavedReg; - gen: SFENCE; "make the store globally visible" - SubCq: 1 R: RAX; "Since we only ever set the lock to 1 or 0, subtracting 1 sets - RAX to 0 if the lock was already locked and non-zero if it wasn't." RetN: 0! Item was changed: + ----- Method: CogX64Compiler>>numLowLevelLockOpcodes (in category 'multi-threading') ----- - ----- Method: CogX64Compiler>>numLowLevelLockOpcodes (in category 'accessing') ----- numLowLevelLockOpcodes + "ceTryLockVMOwner: + xorq %rax, %rax + movq &vmOwnerLock, %rsi + lock cmpxchgq %rdi, (%rsi) N.B. lock cmpxchgq are two separate opcodes + setz %alt - movq $0x1, %rax - mfence : 0F AE F0 - movq &vmOwnerLockFromMachineCode, %rcx N.B. movq,xchgq are one XCHGAwR instruction - xchgq %rax, (%rcx) - sfence - subq $0x1, %rax ret ceUnlockVMOwner: xorq %rax, %rax movq %rax, &vmOwnerLockFromMachineCode sfence ret" ^10! Item was removed: - ----- Method: CogX64CompilerTests>>testCMPXCHGAwR (in category 'tests') ----- - testCMPXCHGAwR - "self new testCMPXCHGAwR" - | cmpxchgAwR | - cmpxchgAwR := CogX64Compiler classPool at: #CMPXCHGAwR. - self concreteCompilerClass registersWithNamesDo: - [:reg :regname| - #(16r555555 16rAAAAAA) do: - [:addr| | inst len | - inst := self gen: cmpxchgAwR operand: addr operand: reg. - len := inst concretizeAt: 0. - self processor - disassembleInstructionAt: 0 - In: inst machineCode object - into: [:str :sz| | plainJane herIntended | - "Convert e.g. '00000000: movl %eax, 0x2(%eax) : 89 40 02' to 'movl %eax, 0x2(%eax)'" - plainJane := self strip: str. - herIntended := 'cmpxchgl ', regname, ', 0x', (addr hex allButFirst: 3). - self assert: herIntended equals: plainJane. - self assert: len = sz]]]! Item was removed: - ----- Method: CogX64CompilerTests>>testXCHGAwR (in category 'tests') ----- - testXCHGAwR - "self new testXCHGAwR" - | xchgAwR | - xchgAwR := CogX64Compiler classPool at: #XCHGAwR. - self concreteCompilerClass registersWithNamesDo: - [:reg :regname| - #(16r555555 16rAAAAAA) do: - [:addr| | inst len | - inst := self gen: xchgAwR operand: addr operand: reg. - len := inst concretizeAt: 0. - self processor - disassembleInstructionAt: 0 - In: inst machineCode object - into: [:str :sz| | plainJane herIntended | - "Convert e.g. '00000000: movl %eax, 0x2(%eax) : 89 40 02' to 'movl %eax, 0x2(%eax)'" - plainJane := self strip: str. - herIntended := 'xchgl ', regname, ', 0x', (addr hex allButFirst: 3). - self assert: herIntended equals: plainJane. - self assert: len = sz]]]! Item was removed: - ----- Method: CogX64CompilerTests>>testXCHGMwrR (in category 'tests') ----- - testXCHGMwrR - "self new testXCHGMwrR" - | xchgMwrR | - xchgMwrR := CogX64Compiler classPool at: #XCHGMwrR. - self concreteCompilerClass registersWithNamesDo: - [:sreg :srname| - self concreteCompilerClass registersWithNamesDo: - [:dreg :drname| - ((1 to: 19 by: 3) collect: [:po2| 2 raisedToInteger: po2]) do: - [:offset| | memory | - self resetGen. - self gen: xchgMwrR operand: offset operand: sreg operand: dreg. - memory := self generateInstructions. - self processor - disassembleInstructionAt: 0 - In: memory - into: [:str :sz| | plainJane herIntended | - plainJane := self strip: str. - herIntended := 'xchgl ', drname, ', 0x', (offset hex allButFirst: 3), '(', srname, ')'. - self assert: herIntended equals: plainJane. - self assert: memory size = sz]]]]! Item was removed: - ----- Method: Cogit>>tryLockVMOwner (in category 'multi-threading') ----- - tryLockVMOwner - - "ceTryLockVMOwner does an atomic swap of the lock with 1 and - then subtracts 1from lock's value. So if the result is 0 the lock was - already held. Anything else (in fact -1) implies we hold the lock." - - ^(self simulateLeafCallOf: ceTryLockVMOwner) ~= 0! Item was added: + ----- Method: Cogit>>tryLockVMOwner: (in category 'multi-threading') ----- + tryLockVMOwner: value + + "ceTryLockVMOwner does an atomic compare-and-swap of the lock + with the argument and zero, setting the lock to value if it was zero. + It answers non-zero if the lock was zero." + + ^(self simulateLeafCallOf: ceTryLockVMOwner) ~= 0! Item was changed: ----- Method: VMStructType class>>printTypedefOn: (in category 'translation') ----- printTypedefOn: aStream aStream nextPutAll: 'typedef struct '. self needsTypeTag ifTrue: [aStream nextPutAll: self structTagName; space]. aStream nextPut: ${; cr. self instVarNamesAndTypesForTranslationDo: [:ivn :typeArg| | type | ivn first == $# ifTrue: [aStream nextPutAll: ivn] ifFalse: [type := typeArg. #(BytesPerWord BaseHeaderSize BytesPerOop) do: [:sizeConstant| | index sizeConstantSize | (type notNil and: [(index := type indexOf: sizeConstant ifAbsent: 0) > 0]) ifTrue: [sizeConstantSize := VMBasicConstants classPool at: sizeConstant. type := (type at: index + 1) = sizeConstantSize ifTrue: [type := type copyReplaceFrom: index to: index + 1 with: #(). type size = 1 ifTrue: [type first] ifFalse: [type]]]]. type ifNotNil: [type isArray ifTrue: [aStream tab: 1. aStream nextPutAll: type first. (type first last isSeparator or: [type first last = $*]) ifFalse: [aStream tab: 2]. aStream nextPutAll: ivn. + type last first isAlphaNumeric ifTrue: - type last first isSeparator ifFalse: [aStream space]. aStream nextPutAll: type last] ifFalse: [aStream tab: 1. aStream nextPutAll: type. + type last isAlphaNumeric ifTrue: - (type last isSeparator or: [type last = $*]) ifFalse: [aStream tab: 1]. aStream nextPutAll: ivn]]. aStream nextPut: $;]. aStream cr]. aStream nextPutAll: ' } '; nextPutAll: self structTypeName; nextPut: $;; cr. self name ~= self structTypeName ifTrue: [(self withAllSuperclasses copyUpThrough: (self class whichClassIncludesSelector: #structTypeName) theNonMetaClass) do: [:structClass| aStream cr; nextPutAll: '#define '; nextPutAll: structClass name; space; nextPutAll: self structTypeName]. aStream cr]. aStream flush! From builds at travis-ci.org Mon Oct 26 01:19:16 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 26 Oct 2020 01:19:16 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2277 (Cog - 1fde5ab) In-Reply-To: Message-ID: <5f9624147e1d1_13faca24aa4a0105699@travis-tasks-79756c4846-6q5w7.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2277 Status: Still Failing Duration: 1 hr, 8 mins, and 53 secs Commit: 1fde5ab (Cog) Author: Nicolas Cellier Message: Another attempt at fixing linux32 builds failure is related to ftello signature mismatch View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/51cd741267ea...1fde5ab77f6b View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/738828017?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Mon Oct 26 01:33:45 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun, 25 Oct 2020 18:33:45 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 51cd74: Try to fix missing setjmp implementation in window... In-Reply-To: References: Message-ID: Why are we using CMake at all in our standard windows builds? Neither the Cygwin/mingw build nor the MSVC build use CMake. I have no problem building either. _,,,^..^,,,_ (phone) > On Oct 25, 2020, at 4:56 PM, Nicolas Cellier wrote: > >  > Branch: refs/heads/Cog > Home: https://github.com/OpenSmalltalk/opensmalltalk-vm > Commit: 51cd741267ea6520406e02320a58f2d8b5da1205 > https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/51cd741267ea6520406e02320a58f2d8b5da1205 > Author: Nicolas Cellier > Date: 2020-10-26 (Mon, 26 Oct 2020) > > Changed paths: > M CMakeLists.txt > > Log Message: > ----------- > Try to fix missing setjmp implementation in windows minheadless > > From eliot.miranda at gmail.com Mon Oct 26 01:35:17 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun, 25 Oct 2020 18:35:17 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 1fde5a: Another attempt at fixing linux32 builds In-Reply-To: References: Message-ID: <0461FB65-7FFC-47A5-A434-DF24C7F9C76D@gmail.com> > On Oct 25, 2020, at 5:10 PM, Nicolas Cellier wrote: > >  > Branch: refs/heads/Cog > Home: https://github.com/OpenSmalltalk/opensmalltalk-vm > Commit: 1fde5ab77f6b4ef677014676e7925a4005471bc5 > https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/1fde5ab77f6b4ef677014676e7925a4005471bc5 > Author: Nicolas Cellier > Date: 2020-10-26 (Mon, 26 Oct 2020) > > Changed paths: > M platforms/unix/vm/sqPlatformSpecific.h > > Log Message: > ----------- > Another attempt at fixing linux32 builds > > failure is related to ftello signature mismatch Hi Nicolas, we should be removing these defines from sqPlatformSpecific.h abd updating clients to use the right functions, as I did in reimplementing the image I/o above system calls. From no-reply at appveyor.com Mon Oct 26 01:37:06 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 26 Oct 2020 01:37:06 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2280 Message-ID: <20201026013706.1.3DAEE632A4F0682C@appveyor.com> An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Mon Oct 26 01:37:29 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun, 25 Oct 2020 18:37:29 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 51cd74: Try to fix missing setjmp implementation in window... In-Reply-To: References: Message-ID: <877438F9-3CC5-4239-AE7A-19B96D8353DD@gmail.com> > On Oct 25, 2020, at 6:33 PM, Eliot Miranda wrote: > > Why are we using CMake at all in our standard windows builds? Neither the Cygwin/mingw build nor the MSVC build use CMake. I have no problem building either. Ah, I see. The minheadless builds. Why don’t we simply disable these until someone has a need? > > _,,,^..^,,,_ (phone) > >> On Oct 25, 2020, at 4:56 PM, Nicolas Cellier wrote: >> >>  >> Branch: refs/heads/Cog >> Home: https://github.com/OpenSmalltalk/opensmalltalk-vm >> Commit: 51cd741267ea6520406e02320a58f2d8b5da1205 >> https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/51cd741267ea6520406e02320a58f2d8b5da1205 >> Author: Nicolas Cellier >> Date: 2020-10-26 (Mon, 26 Oct 2020) >> >> Changed paths: >> M CMakeLists.txt >> >> Log Message: >> ----------- >> Try to fix missing setjmp implementation in windows minheadless >> >> From builds at travis-ci.org Mon Oct 26 01:51:24 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 26 Oct 2020 01:51:24 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2278 (Cog - 7c2c8ee) In-Reply-To: Message-ID: <5f962b9b97f43_13faca24aa3b0126858@travis-tasks-79756c4846-6q5w7.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2278 Status: Still Failing Duration: 1 hr, 5 mins, and 24 secs Commit: 7c2c8ee (Cog) Author: Nicolas Cellier Message: Fix typo s/platform/platforms/ and retry rescuing windows minheadless View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/1fde5ab77f6b...7c2c8ee6b790 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/738831126?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Mon Oct 26 02:52:31 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun, 25 Oct 2020 19:52:31 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi Nicolas, > On Oct 25, 2020, at 2:49 PM, Nicolas Cellier wrote: > >  > Hi Yoshiki, Eliot, > I confirm the problem, 32 bit linux build fails, on x86 too. it appears on travis log: > https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738800749 > In file included from /usr/include/features.h:367:0, > from /usr/include/pthread.h:21, > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > /usr/include/stdio.h:781:12: error: conflicting types for ‘fseeko’ > extern int __REDIRECT (fseeko, > ^ > In file included from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16:0, > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: note: previous declaration of ‘fseeko’ was here > #define fseek(s,o,w) fseeko(s,o,w) > ^ > In file included from /usr/include/features.h:367:0, > from /usr/include/pthread.h:21, > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > /usr/include/stdio.h:784:18: error: conflicting types for ‘ftello’ > extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64); > ^ > In file included from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16:0, > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:108:18: note: previous declaration of ‘ftello’ was here > #define ftell(s) ftello(s) Right. These macros have to go. They are examples of the counter argument to Tobias’s “include sqConfig.h first” suggestion and shows why it can’t work. C headers don’t provide encapsulation, therefore a hack (such as the above define) which works in one release may break in another. a) we have to change our client code to adapt to the platform, not the other way around. We can do this with macros, but they must come *after* system headers not before. b) this implies that at the very least HAS_CONFIG_H must be defined in the compiler command line either as -UHAS_CONFIG_H, -DHAS_CONFIG_H, or my preference -DHAS_CONFIG_H=0 or -DHAS_CONFIG_H=1 since #if HAS_CONFIG_H is more concise and precise than #ifdef HAS_CONFIG_H/#if defined( HAS_CONFIG_H) c) I have realized (thanks David) that static line functions are often better than macros. They’re more powerful and more debuggable (in the debug build). > Makefile:252: recipe for target 'aio.o' failed > > We are doing horrible things with C macro : #define ftell(s) ftello(s) because ftell is a different function with its own signature. > If we include stdio.h AFTER this macro, then we are causing big trouble mixing the signatures... > We can cheat as long as we do not get caught... It seems to me that we are caught red-handed! > Compilation appears to pass on x64 linux. > > >> Le dim. 25 oct. 2020 à 21:59, Yoshiki Ohshima a écrit : >> >> Hi Eliot, >> >> >>> On Sat, Oct 24, 2020 at 5:45 PM Eliot Miranda wrote: >>> >>> Hi Yoshiki, >>> >>>> On Sat, Oct 24, 2020 at 2:00 PM Yoshiki Ohshima wrote: >>>> >>>> Hi Eliot, >>>> >>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following error. I think I followed the steps in the instructions, including running updateSCCSVersion and mvm. How can I fix it? >>> >>> I don't understand. It's there: >>> >>> $ git remote get-url origin >>> https://github.com/OpenSmalltalk/opensmalltalk-vm.git >>> $ git status >>> On branch Cog >>> Your branch is up-to-date with 'origin/Cog'. >>> $ git log spur64src/vm/cogitARMv8.c >>> commit 883fab5c30cff36aeb93129030e8f7bfa692a697 >>> Author: Eliot Miranda >>> Date: Sat Oct 17 19:27:21 2020 -0700 >>> >>> etc >>> >>> maybe you're on a different branch? >> >> The last commit (two commits) on the branch I am working with is like this: >> >> commit 4f54eed845a8daef7681d17c01f004c3a7b50c9d >> Author: Nicolas Cellier >> Date: Fri Oct 23 22:46:36 2020 +0200 >> >> Fix https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531 >> >> The return type of `currentUTCMicroseconds` was lost. >> For some reason, the cygwin/mingw takes this compilation path >> >> `#else // _WIN32_WINNT >= _WIN32_WINNT_WIN8` >> >> commit efb4b1c82fd81798221d9811faa65f7bfb9c71be >> Author: Eliot Miranda >> Date: Tue Oct 20 19:01:17 2020 -0700 >> >> Add stdio.h to sqWin32NewNet.c for its debug printing. >> >> And I do see 883fab5c30cff36 in the ancestor chain. Maybe a macro name like __arm64__ or __arm_something__ is missing or different? >> >> For the composition input problem, I have a hacky version of code that makes it not crash. It comes down to the line: >> >> /* 24-bit UCS */ >> - if ((keysym & 0xff000000) == 0x01000000) return keysym & 0x00ffffff; >> + if ((keysym & 0xff000000) == 0x01000000) { >> + return 0; // keysym & 00x00ffffff; >> + } >> >> I cannot tell when it gets "24-bit UCS" as keysym... keysym often does not store a code point like that, if I'm not mistaken. >> >> There are other problems which I believe I introduced while ago to misunderstood a debugging macro DCONV_FPRINTF(), which adds stderr as the first argument but many calls to it were adding stderr by themselves. >> >> -- >> -- Yoshiki >> -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Mon Oct 26 11:53:40 2020 From: noreply at github.com (Nicolas Cellier) Date: Mon, 26 Oct 2020 04:53:40 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 6a6ed6: Fix windows minheadless again - ASM must be explic... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 6a6ed62e868fd31a3b0e63c9ec5f7174fafde6c2 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/6a6ed62e868fd31a3b0e63c9ec5f7174fafde6c2 Author: Nicolas Cellier Date: 2020-10-26 (Mon, 26 Oct 2020) Changed paths: M CMakeLists.txt Log Message: ----------- Fix windows minheadless again - ASM must be explicitely enabled From nicolas.cellier.aka.nice at gmail.com Mon Oct 26 13:45:33 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Mon, 26 Oct 2020 14:45:33 +0100 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi Eliot, Le lun. 26 oct. 2020 à 03:52, Eliot Miranda a écrit : > > Hi Nicolas, > > On Oct 25, 2020, at 2:49 PM, Nicolas Cellier < > nicolas.cellier.aka.nice at gmail.com> wrote: > >  > Hi Yoshiki, Eliot, > I confirm the problem, 32 bit linux build fails, on x86 too. it appears on > travis log: > https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738800749 > > In file included from /usr/include/features.h:367:0, > > from /usr/include/pthread.h:21, > > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, > > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, > > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > > /usr/include/stdio.h:781:12: error: conflicting types for ‘fseeko’ > > extern int __REDIRECT (fseeko, > > ^ > > In file included from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16:0, > > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > > /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: note: previous declaration of ‘fseeko’ was here > > #define fseek(s,o,w) fseeko(s,o,w) > > ^ > > In file included from /usr/include/features.h:367:0, > > from /usr/include/pthread.h:21, > > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, > > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, > > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > > /usr/include/stdio.h:784:18: error: conflicting types for ‘ftello’ > > extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64); > > ^ > > In file included from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16:0, > > from /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/aio.c:35: > > /home/travis/build/OpenSmalltalk/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:108:18: note: previous declaration of ‘ftello’ was here > > #define ftell(s) ftello(s) > > > Right. These macros have to go. They are examples of the counter > argument to Tobias’s “include sqConfig.h first” suggestion and shows why it > can’t work. C headers don’t provide encapsulation, therefore a hack (such > as the above define) which works in one release may break in another. > > +1. In the meantime, I have published a simple workaround that works, https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/1fde5ab77f6b4ef677014676e7925a4005471bc5 a) we have to change our client code to adapt to the platform, not the > other way around. We can do this with macros, but they must come *after* > system headers not before. > > b) this implies that at the very least HAS_CONFIG_H must be defined in the > compiler command line either as -UHAS_CONFIG_H, -DHAS_CONFIG_H, or my > preference -DHAS_CONFIG_H=0 or -DHAS_CONFIG_H=1 since > #if HAS_CONFIG_H > is more concise and precise than > > #ifdef HAS_CONFIG_H/#if defined( HAS_CONFIG_H) > > c) I have realized (thanks David) that static line functions are often > better than macros. They’re more powerful and more debuggable (in the debug > build). > > OK, let's use modern C features Makefile:252: recipe for target 'aio.o' failed > > > We are doing horrible things with C macro : #define ftell(s) ftello(s) > because ftell is a different function with its own signature. > If we include stdio.h AFTER this macro, then we are causing big trouble > mixing the signatures... > We can cheat as long as we do not get caught... It seems to me that we are > caught red-handed! > Compilation appears to pass on x64 linux. > > > Le dim. 25 oct. 2020 à 21:59, Yoshiki Ohshima a > écrit : > >> >> Hi Eliot, >> >> >> On Sat, Oct 24, 2020 at 5:45 PM Eliot Miranda >> wrote: >> >>> >>> Hi Yoshiki, >>> >>> On Sat, Oct 24, 2020 at 2:00 PM Yoshiki Ohshima >>> wrote: >>> >>>> >>>> Hi Eliot, >>>> >>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>> following error. I think I followed the steps in the instructions, >>>> including running updateSCCSVersion and mvm. How can I fix it? >>>> >>> >>> I don't understand. It's there: >>> >>> $ git remote get-url origin >>> https://github.com/OpenSmalltalk/opensmalltalk-vm.git >>> $ git status >>> On branch Cog >>> Your branch is up-to-date with 'origin/Cog'. >>> $ git log spur64src/vm/cogitARMv8.c >>> commit 883fab5c30cff36aeb93129030e8f7bfa692a697 >>> Author: Eliot Miranda >>> Date: Sat Oct 17 19:27:21 2020 -0700 >>> >>> etc >>> >>> maybe you're on a different branch? >>> >> >> The last commit (two commits) on the branch I am working with is like >> this: >> >> commit 4f54eed845a8daef7681d17c01f004c3a7b50c9d >> >> Author: Nicolas Cellier >> >> Date: Fri Oct 23 22:46:36 2020 +0200 >> >> >> Fix https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/531 >> >> >> The return type of `currentUTCMicroseconds` was lost. >> >> For some reason, the cygwin/mingw takes this compilation path >> >> >> `#else // _WIN32_WINNT >= _WIN32_WINNT_WIN8` >> >> >> commit efb4b1c82fd81798221d9811faa65f7bfb9c71be >> >> Author: Eliot Miranda >> >> Date: Tue Oct 20 19:01:17 2020 -0700 >> >> >> Add stdio.h to sqWin32NewNet.c for its debug printing. >> >> >> And I do see 883fab5c30cff36 in the ancestor chain. Maybe a macro name >> like __arm64__ or __arm_something__ is missing or different? >> >> >> For the composition input problem, I have a hacky version of code that >> makes it not crash. It comes down to the line: >> >> /* 24-bit UCS */ >> - if ((keysym & 0xff000000) == 0x01000000) return keysym & 0x00ffffff; >> + if ((keysym & 0xff000000) == 0x01000000) { >> + return 0; // keysym & 00x00ffffff; >> + } >> >> I cannot tell when it gets "24-bit UCS" as keysym... keysym often does >> not store a code point like that, if I'm not mistaken. >> >> There are other problems which I believe I introduced while ago to >> misunderstood a debugging macro DCONV_FPRINTF(), which adds stderr as the >> first argument but many calls to it were adding stderr by themselves. >> >> -- >> -- Yoshiki >> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.cellier.aka.nice at gmail.com Mon Oct 26 13:59:30 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Mon, 26 Oct 2020 14:59:30 +0100 Subject: [Vm-dev] CI status Message-ID: Hi all, I have restored (I think) the green status of minheadless build. We could eventually authorize failure of all those builds, or restrict the number of flavours that we build (it takes really loooong time before we get CI feedback). But if we abandon all those now, I fear that we never catch up; it's a one way ticket. IMO there are still interesting ideas to take, even if development has continued in Pharo fork... Now the next failing build on travis is about squeak.cog.v3. Did some incompatible VM change took place? For example https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738831149 ###################################################### # Squeak-4.6 on Travis CI (2278.23) # # 3401 Tests with 5 Failures and 0 Errors in 112.13s # ###################################################### ######################### # 5 tests did not pass: # ######################### SUnitToolBuilderTests 837fef_266b ✗ #testHandlingNotification (10023ms) TestValueWithinFix 2a65cb_266b ✗ #testValueWithinTimingBasic (1005ms) e9a7ab_266b ✗ #testValueWithinTimingNestedInner (1001ms) c57415_266b ✗ #testValueWithinTimingNestedOuter (1002ms) e89da3_266b ✗ #testValueWithinTimingRepeat (3004ms) Executed 3401 Tests with 5 Failures and 0 Errors in 112.13s. To reproduce the failed build locally, download smalltalkCI, and try to run something like: bin/smalltalkci -s Squeak-4.6 --headfull /path/to/.smalltalk.ston -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Mon Oct 26 14:11:38 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon, 26 Oct 2020 07:11:38 -0700 Subject: [Vm-dev] CI status In-Reply-To: References: Message-ID: Hi Nicolas, > On Oct 26, 2020, at 6:59 AM, Nicolas Cellier wrote: > >  > Hi all, > I have restored (I think) the green status of minheadless build. Thank you so much! > We could eventually authorize failure of all those builds, or restrict the number of flavours that we build (it takes really loooong time before we get CI feedback). > But if we abandon all those now, I fear that we never catch up; it's a one way ticket. IMO there are still interesting ideas to take, even if development has continued in Pharo fork... One approach might be to split them into “essential” and “nice to have” so we get faster feedback from the “essential” set. > Now the next failing build on travis is about squeak.cog.v3. Did some incompatible VM change took place? > > For example https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738831149 > > ###################################################### > # Squeak-4.6 on Travis CI (2278.23) # > # 3401 Tests with 5 Failures and 0 Errors in 112.13s # > ###################################################### > ######################### > # 5 tests did not pass: # > ######################### > SUnitToolBuilderTests > 837fef_266b > ✗ #testHandlingNotification (10023ms) > TestValueWithinFix > 2a65cb_266b > ✗ #testValueWithinTimingBasic (1005ms) > e9a7ab_266b > ✗ #testValueWithinTimingNestedInner (1001ms) > c57415_266b > ✗ #testValueWithinTimingNestedOuter (1002ms) > e89da3_266b > ✗ #testValueWithinTimingRepeat (3004ms) > Executed 3401 Tests with 5 Failures and 0 Errors in 112.13s. > To reproduce the failed build locally, download smalltalkCI, and try to run something like: > bin/smalltalkci -s Squeak-4.6 --headfull /path/to/.smalltalk.ston Could these test failures be nothing to do with the VM but instead to do with the (growing) divergence between trunk/spur and Squeak 4.6? _,,,^..^,,,_ (phone) -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.cellier.aka.nice at gmail.com Mon Oct 26 14:22:39 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Mon, 26 Oct 2020 15:22:39 +0100 Subject: [Vm-dev] CI status In-Reply-To: References: Message-ID: Le lun. 26 oct. 2020 à 15:11, Eliot Miranda a écrit : > > Hi Nicolas, > > On Oct 26, 2020, at 6:59 AM, Nicolas Cellier < > nicolas.cellier.aka.nice at gmail.com> wrote: > >  > Hi all, > I have restored (I think) the green status of minheadless build. > > > Thank you so much! > > We could eventually authorize failure of all those builds, or restrict the > number of flavours that we build (it takes really loooong time before we > get CI feedback). > But if we abandon all those now, I fear that we never catch up; it's a one > way ticket. IMO there are still interesting ideas to take, even if > development has continued in Pharo fork... > > > One approach might be to split them into “essential” and “nice to have” so > we get faster feedback from the “essential” set. > > +1, but I do not know how to configure the CI like that... > Now the next failing build on travis is about squeak.cog.v3. Did some > incompatible VM change took place? > > For example > https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738831149 > > ###################################################### > > # Squeak-4.6 on Travis CI (2278.23) # > > # 3401 Tests with 5 Failures and 0 Errors in 112.13s # > > ###################################################### > > ######################### > > # 5 tests did not pass: # > > ######################### > > SUnitToolBuilderTests > 837fef_266b > > ✗ #testHandlingNotification (10023ms) > > TestValueWithinFix > 2a65cb_266b > > ✗ #testValueWithinTimingBasic (1005ms) > e9a7ab_266b > > ✗ #testValueWithinTimingNestedInner (1001ms) > c57415_266b > > ✗ #testValueWithinTimingNestedOuter (1002ms) > e89da3_266b > > ✗ #testValueWithinTimingRepeat (3004ms) > > Executed 3401 Tests with 5 Failures and 0 Errors in 112.13s. > > To reproduce the failed build locally, download smalltalkCI, and try to run something like: > > bin/smalltalkci -s Squeak-4.6 --headfull /path/to/.smalltalk.ston > > Could these test failures be nothing to do with the VM but instead to do > with the (growing) divergence between trunk/spur and Squeak 4.6? > > _,,,^..^,,,_ (phone) > No idea... I've downloaded a Squeak4.6-15102.image, compiled a squeak.cog.v3 on windows10, and the test pass... I will retry on other OSes this evening (the test fails on linux...). -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Mon Oct 26 14:52:56 2020 From: no-reply at appveyor.com (AppVeyor) Date: Mon, 26 Oct 2020 14:52:56 +0000 Subject: [Vm-dev] Build completed: opensmalltalk-vm 1.0.2281 Message-ID: <20201026145256.1.5B5BFACC0312F85C@appveyor.com> An HTML attachment was scrubbed... URL: From lewis at mail.msen.com Mon Oct 26 14:54:01 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Mon, 26 Oct 2020 10:54:01 -0400 Subject: [Vm-dev] CI status In-Reply-To: References: Message-ID: <20201026145401.GA17603@shell.msen.com> On Mon, Oct 26, 2020 at 03:22:39PM +0100, Nicolas Cellier wrote: > > Le lun. 26 oct. 2020 ?? 15:11, Eliot Miranda a > ??crit : > > > > > Hi Nicolas, > > > > On Oct 26, 2020, at 6:59 AM, Nicolas Cellier < > > nicolas.cellier.aka.nice at gmail.com> wrote: > > > > ??? > > Hi all, > > I have restored (I think) the green status of minheadless build. > > > > > > Thank you so much! > > > > We could eventually authorize failure of all those builds, or restrict the > > number of flavours that we build (it takes really loooong time before we > > get CI feedback). > > But if we abandon all those now, I fear that we never catch up; it's a one > > way ticket. IMO there are still interesting ideas to take, even if > > development has continued in Pharo fork... > > > > > > One approach might be to split them into ???essential??? and ???nice to have??? so > > we get faster feedback from the ???essential??? set. > > > > +1, but I do not know how to configure the CI like that... > > > Now the next failing build on travis is about squeak.cog.v3. Did some > > incompatible VM change took place? > > > > For example > > https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738831149 > > > > ###################################################### > > > > # Squeak-4.6 on Travis CI (2278.23) # > > > > # 3401 Tests with 5 Failures and 0 Errors in 112.13s # > > > > ###################################################### > > > > ######################### > > > > # 5 tests did not pass: # > > > > ######################### > > > > SUnitToolBuilderTests > > 837fef_266b > > > > ??? #testHandlingNotification (10023ms) > > > > TestValueWithinFix > > 2a65cb_266b > > > > ??? #testValueWithinTimingBasic (1005ms) > > e9a7ab_266b > > > > ??? #testValueWithinTimingNestedInner (1001ms) > > c57415_266b > > > > ??? #testValueWithinTimingNestedOuter (1002ms) > > e89da3_266b > > > > ??? #testValueWithinTimingRepeat (3004ms) > > > > Executed 3401 Tests with 5 Failures and 0 Errors in 112.13s. > > > > To reproduce the failed build locally, download smalltalkCI, and try to run something like: > > > > bin/smalltalkci -s Squeak-4.6 --headfull /path/to/.smalltalk.ston > > > > Could these test failures be nothing to do with the VM but instead to do > > with the (growing) divergence between trunk/spur and Squeak 4.6? > > > > _,,,^..^,,,_ (phone) > > > No idea... > I've downloaded a Squeak4.6-15102.image, compiled a squeak.cog.v3 on > windows10, and the test pass... > I will retry on other OSes this evening (the test fails on linux...). I do not know if it is related to the CI issues, but here is one clue: I am maintaining a V3 "trunk" image that attempts to keep in sync with trunk except for changes that pertain to Spur object format (immediate characters, etc). As of Monticello-ul.728 I get failures in SSL connection to e.g. source.squeak.org. The failures happen with both Cog and the interpreter VM (although the specific error symptoms are different). I can bypass the errors by reverting MCHttpRepository>>httpGet:arguments: to its prior version (stamped ul 9/20/2019). I have not had time to dig into the underlying cause of the problem, but it seems likely that any CI test for Cog that requires the use of secure sockets will fail as of Monticello-ul.728 or later. This would include any test that needs to access the source.squeak.org repository. Dave From builds at travis-ci.org Mon Oct 26 14:55:58 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 26 Oct 2020 14:55:58 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2279 (Cog - 6a6ed62) In-Reply-To: Message-ID: <5f96e37e35997_13ffcc61c525c10935a@travis-tasks-668bc7cc86-nn42s.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2279 Status: Still Failing Duration: 3 hrs, 1 min, and 9 secs Commit: 6a6ed62 (Cog) Author: Nicolas Cellier Message: Fix windows minheadless again - ASM must be explicitely enabled View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/7c2c8ee6b790...6a6ed62e868f View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/738947794?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Mon Oct 26 15:26:36 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon, 26 Oct 2020 08:26:36 -0700 Subject: [Vm-dev] CI status In-Reply-To: References: Message-ID: <28EEFFD2-5436-40AB-93DA-CAA3EF48FB36@gmail.com> > On Oct 26, 2020, at 7:22 AM, Nicolas Cellier wrote: > >  > > >> Le lun. 26 oct. 2020 à 15:11, Eliot Miranda a écrit : >> >> Hi Nicolas, >> >>>> On Oct 26, 2020, at 6:59 AM, Nicolas Cellier wrote: >>>> >>>  >>> Hi all, >>> I have restored (I think) the green status of minheadless build. >> >> Thank you so much! >> >>> We could eventually authorize failure of all those builds, or restrict the number of flavours that we build (it takes really loooong time before we get CI feedback). >>> But if we abandon all those now, I fear that we never catch up; it's a one way ticket. IMO there are still interesting ideas to take, even if development has continued in Pharo fork... >> >> One approach might be to split them into “essential” and “nice to have” so we get faster feedback from the “essential” set. >> > +1, but I do not know how to configure the CI like that... >>> Now the next failing build on travis is about squeak.cog.v3. Did some incompatible VM change took place? >>> >>> For example https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738831149 >>> >>> ###################################################### >>> # Squeak-4.6 on Travis CI (2278.23) # >>> # 3401 Tests with 5 Failures and 0 Errors in 112.13s # >>> ###################################################### >>> ######################### >>> # 5 tests did not pass: # >>> ######################### >>> SUnitToolBuilderTests >>> 837fef_266b >>> ✗ #testHandlingNotification (10023ms) >>> TestValueWithinFix >>> 2a65cb_266b >>> ✗ #testValueWithinTimingBasic (1005ms) >>> e9a7ab_266b >>> ✗ #testValueWithinTimingNestedInner (1001ms) >>> c57415_266b >>> ✗ #testValueWithinTimingNestedOuter (1002ms) >>> e89da3_266b >>> ✗ #testValueWithinTimingRepeat (3004ms) >>> Executed 3401 Tests with 5 Failures and 0 Errors in 112.13s. >>> To reproduce the failed build locally, download smalltalkCI, and try to run something like: >>> bin/smalltalkci -s Squeak-4.6 --headfull /path/to/.smalltalk.ston >> Could these test failures be nothing to do with the VM but instead to do with the (growing) divergence between trunk/spur and Squeak 4.6? >> >> _,,,^..^,,,_ (phone) > No idea... > I've downloaded a Squeak4.6-15102.image, compiled a squeak.cog.v3 on windows10, and the test pass... > I will retry on other OSes this evening (the test fails on linux...). At least one of those failures is a timeout. So it may just be that the CI box is slow. We might cure the issues by lengthening the timeouts. Or we could make them expected failures, especially if we can find out some way to identify that we’re running on a CI box. -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.cellier.aka.nice at gmail.com Mon Oct 26 21:52:54 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Mon, 26 Oct 2020 22:52:54 +0100 Subject: [Vm-dev] CI status In-Reply-To: <28EEFFD2-5436-40AB-93DA-CAA3EF48FB36@gmail.com> References: <28EEFFD2-5436-40AB-93DA-CAA3EF48FB36@gmail.com> Message-ID: Le lun. 26 oct. 2020 à 16:26, Eliot Miranda a écrit : > > > On Oct 26, 2020, at 7:22 AM, Nicolas Cellier < > nicolas.cellier.aka.nice at gmail.com> wrote: > >  > > > Le lun. 26 oct. 2020 à 15:11, Eliot Miranda a > écrit : > >> >> Hi Nicolas, >> >> On Oct 26, 2020, at 6:59 AM, Nicolas Cellier < >> nicolas.cellier.aka.nice at gmail.com> wrote: >> >>  >> Hi all, >> I have restored (I think) the green status of minheadless build. >> >> >> Thank you so much! >> >> We could eventually authorize failure of all those builds, or restrict >> the number of flavours that we build (it takes really loooong time before >> we get CI feedback). >> But if we abandon all those now, I fear that we never catch up; it's a >> one way ticket. IMO there are still interesting ideas to take, even if >> development has continued in Pharo fork... >> >> >> One approach might be to split them into “essential” and “nice to have” >> so we get faster feedback from the “essential” set. >> >> +1, but I do not know how to configure the CI like that... > >> Now the next failing build on travis is about squeak.cog.v3. Did some >> incompatible VM change took place? >> >> For example >> https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738831149 >> >> ###################################################### >> >> # Squeak-4.6 on Travis CI (2278.23) # >> >> # 3401 Tests with 5 Failures and 0 Errors in 112.13s # >> >> ###################################################### >> >> ######################### >> >> # 5 tests did not pass: # >> >> ######################### >> >> SUnitToolBuilderTests >> 837fef_266b >> >> ✗ #testHandlingNotification (10023ms) >> >> TestValueWithinFix >> 2a65cb_266b >> >> ✗ #testValueWithinTimingBasic (1005ms) >> e9a7ab_266b >> >> ✗ #testValueWithinTimingNestedInner (1001ms) >> c57415_266b >> >> ✗ #testValueWithinTimingNestedOuter (1002ms) >> e89da3_266b >> >> ✗ #testValueWithinTimingRepeat (3004ms) >> >> Executed 3401 Tests with 5 Failures and 0 Errors in 112.13s. >> >> To reproduce the failed build locally, download smalltalkCI, and try to run something like: >> >> bin/smalltalkci -s Squeak-4.6 --headfull /path/to/.smalltalk.ston >> >> Could these test failures be nothing to do with the VM but instead to do >> with the (growing) divergence between trunk/spur and Squeak 4.6? >> >> _,,,^..^,,,_ (phone) >> > No idea... > I've downloaded a Squeak4.6-15102.image, compiled a squeak.cog.v3 on > windows10, and the test pass... > I will retry on other OSes this evening (the test fails on linux...). > > > At least one of those failures is a timeout. So it may just be that the > CI box is slow. We might cure the issues by lengthening the timeouts. Or > we could make them expected failures, especially if we can find out some > way to identify that we’re running on a CI box. > There's something fishy... Only the linux brand times out. The test waits 10 times 200msec, so should last about 2s. [SUnitToolBuilderTests new testHandlingNotification] timeToRun. does answer something around 2048 on macos brand, but 7706 on linux (???). The build.itimerheartbeat brand does complete the test in about 2020ms so it's OK. squeak.cog.spur/build/squeak also performs the test in about 7700ms in an updated trunk image... So it's not just squeak.cog.v3 here... I can only run linux thru a VM (Parallels), so if someone can confirm the behavior on some native linux -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Mon Oct 26 23:00:19 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon, 26 Oct 2020 16:00:19 -0700 Subject: [Vm-dev] CI status In-Reply-To: References: Message-ID: <16B92539-2604-4D9E-8C23-A50179B9543B@gmail.com> > On Oct 26, 2020, at 2:53 PM, Nicolas Cellier wrote: > >  > > >> Le lun. 26 oct. 2020 à 16:26, Eliot Miranda a écrit : >> >> >>>> On Oct 26, 2020, at 7:22 AM, Nicolas Cellier wrote: >>>> >>>  >>> >>> >>>> Le lun. 26 oct. 2020 à 15:11, Eliot Miranda a écrit : >>>> >>>> Hi Nicolas, >>>> >>>>>> On Oct 26, 2020, at 6:59 AM, Nicolas Cellier wrote: >>>>>> >>>>>  >>>>> Hi all, >>>>> I have restored (I think) the green status of minheadless build. >>>> >>>> Thank you so much! >>>> >>>>> We could eventually authorize failure of all those builds, or restrict the number of flavours that we build (it takes really loooong time before we get CI feedback). >>>>> But if we abandon all those now, I fear that we never catch up; it's a one way ticket. IMO there are still interesting ideas to take, even if development has continued in Pharo fork... >>>> >>>> One approach might be to split them into “essential” and “nice to have” so we get faster feedback from the “essential” set. >>>> >>> +1, but I do not know how to configure the CI like that... >>>>> Now the next failing build on travis is about squeak.cog.v3. Did some incompatible VM change took place? >>>>> >>>>> For example https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738831149 >>>>> >>>>> ###################################################### >>>>> # Squeak-4.6 on Travis CI (2278.23) # >>>>> # 3401 Tests with 5 Failures and 0 Errors in 112.13s # >>>>> ###################################################### >>>>> ######################### >>>>> # 5 tests did not pass: # >>>>> ######################### >>>>> SUnitToolBuilderTests >>>>> 837fef_266b >>>>> ✗ #testHandlingNotification (10023ms) >>>>> TestValueWithinFix >>>>> 2a65cb_266b >>>>> ✗ #testValueWithinTimingBasic (1005ms) >>>>> e9a7ab_266b >>>>> ✗ #testValueWithinTimingNestedInner (1001ms) >>>>> c57415_266b >>>>> ✗ #testValueWithinTimingNestedOuter (1002ms) >>>>> e89da3_266b >>>>> ✗ #testValueWithinTimingRepeat (3004ms) >>>>> Executed 3401 Tests with 5 Failures and 0 Errors in 112.13s. >>>>> To reproduce the failed build locally, download smalltalkCI, and try to run something like: >>>>> bin/smalltalkci -s Squeak-4.6 --headfull /path/to/.smalltalk.ston >>>> Could these test failures be nothing to do with the VM but instead to do with the (growing) divergence between trunk/spur and Squeak 4.6? >>>> >>>> _,,,^..^,,,_ (phone) >>> No idea... >>> I've downloaded a Squeak4.6-15102.image, compiled a squeak.cog.v3 on windows10, and the test pass... >>> I will retry on other OSes this evening (the test fails on linux...). >> >> At least one of those failures is a timeout. So it may just be that the CI box is slow. We might cure the issues by lengthening the timeouts. Or we could make them expected failures, especially if we can find out some way to identify that we’re running on a CI box. > > There's something fishy... > Only the linux brand times out. > The test waits 10 times 200msec, so should last about 2s. > [SUnitToolBuilderTests new testHandlingNotification] timeToRun. > does answer something around 2048 on macos brand, but 7706 on linux (???). > > The build.itimerheartbeat brand does complete the test in about 2020ms so it's OK. > > squeak.cog.spur/build/squeak also performs the test in about 7700ms in an updated trunk image... > So it's not just squeak.cog.v3 here... > I can only run linux thru a VM (Parallels), so if someone can confirm the behavior on some native linux Ah! Is the kernel older than 2.6.4 (IIRC)? If so, the heartbeat thread doesn’t work properly because the vm doesn’t have permission or ability to set the heartbeat thread’s priority. -------------- next part -------------- An HTML attachment was scrubbed... URL: From leves at caesar.elte.hu Mon Oct 26 23:59:55 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue, 27 Oct 2020 00:59:55 +0100 (CET) Subject: [Vm-dev] CI status In-Reply-To: <20201026145401.GA17603@shell.msen.com> References: <20201026145401.GA17603@shell.msen.com> Message-ID: Hi David On Mon, 26 Oct 2020, David T. Lewis wrote: > I do not know if it is related to the CI issues, but here is one clue: > > I am maintaining a V3 "trunk" image that attempts to keep in sync with > trunk except for changes that pertain to Spur object format (immediate > characters, etc). As of Monticello-ul.728 I get failures in SSL connection > to e.g. source.squeak.org. The failures happen with both Cog and the > interpreter VM (although the specific error symptoms are different). > > I can bypass the errors by reverting MCHttpRepository>>httpGet:arguments: > to its prior version (stamped ul 9/20/2019). That version adds some rewrite rules, so some http urls are converted to https. If that doesn't work, then there is a problem with the SqueakSSL plugin in your VM. Does the following print true? | response | response := WebClient httpGet: 'https://source.squeak.org'. response code = 200 Instead of reverting #httpGet:arguments: you can remove the individual http->https rewrite rules with the following snippet: MCHttpRepository urlRewriteRules in: [ :rules | rules size // 3 timesRepeat: [ | set | set := rules removeFirst: 3. (set second beginsWith: 'https') ifFalse: [ rules addAll: set ] ] ] But it would be better to use https for those repositories. Levente > > I have not had time to dig into the underlying cause of the problem, > but it seems likely that any CI test for Cog that requires the use > of secure sockets will fail as of Monticello-ul.728 or later. This > would include any test that needs to access the source.squeak.org > repository. > > Dave From chloebzm at gmail.com Tue Oct 27 00:07:27 2020 From: chloebzm at gmail.com (Chloe Ibezim) Date: Tue, 27 Oct 2020 00:07:27 +0000 Subject: [Vm-dev] What is this In-Reply-To: References: <28EEFFD2-5436-40AB-93DA-CAA3EF48FB36@gmail.com> Message-ID: On Mon, 26 Oct 2020 at 21:53, Nicolas Cellier < nicolas.cellier.aka.nice at gmail.com> wrote: > > > > Le lun. 26 oct. 2020 à 16:26, Eliot Miranda a > écrit : > >> >> >> On Oct 26, 2020, at 7:22 AM, Nicolas Cellier < >> nicolas.cellier.aka.nice at gmail.com> wrote: >> >>  >> >> >> >> Le lun. 26 oct. 2020 à 15:11, Eliot Miranda a >> écrit : >> >>> >>> Hi Nicolas, >>> >>> On Oct 26, 2020, at 6:59 AM, Nicolas Cellier < >>> nicolas.cellier.aka.nice at gmail.com> wrote: >>> >>>  >>> Hi all, >>> I have restored (I think) the green status of minheadless build. >>> >>> >>> Thank you so much! >>> >>> We could eventually authorize failure of all those builds, or restrict >>> the number of flavours that we build (it takes really loooong time before >>> we get CI feedback). >>> But if we abandon all those now, I fear that we never catch up; it's a >>> one way ticket. IMO there are still interesting ideas to take, even if >>> development has continued in Pharo fork... >>> >>> >>> One approach might be to split them into “essential” and “nice to have” >>> so we get faster feedback from the “essential” set. >>> >>> +1, but I do not know how to configure the CI like that... >> >>> Now the next failing build on travis is about squeak.cog.v3. Did some >>> incompatible VM change took place? >>> >>> For example >>> https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738831149 >>> >>> ###################################################### >>> >>> # Squeak-4.6 on Travis CI (2278.23) # >>> >>> # 3401 Tests with 5 Failures and 0 Errors in 112.13s # >>> >>> ###################################################### >>> >>> ######################### >>> >>> # 5 tests did not pass: # >>> >>> ######################### >>> >>> SUnitToolBuilderTests >>> 837fef_266b >>> >>> ✗ #testHandlingNotification (10023ms) >>> >>> TestValueWithinFix >>> 2a65cb_266b >>> >>> ✗ #testValueWithinTimingBasic (1005ms) >>> e9a7ab_266b >>> >>> ✗ #testValueWithinTimingNestedInner (1001ms) >>> c57415_266b >>> >>> ✗ #testValueWithinTimingNestedOuter (1002ms) >>> e89da3_266b >>> >>> ✗ #testValueWithinTimingRepeat (3004ms) >>> >>> Executed 3401 Tests with 5 Failures and 0 Errors in 112.13s. >>> >>> To reproduce the failed build locally, download smalltalkCI, and try to run something like: >>> >>> bin/smalltalkci -s Squeak-4.6 --headfull /path/to/.smalltalk.ston >>> >>> Could these test failures be nothing to do with the VM but instead to do >>> with the (growing) divergence between trunk/spur and Squeak 4.6? >>> >>> _,,,^..^,,,_ (phone) >>> >> No idea... >> I've downloaded a Squeak4.6-15102.image, compiled a squeak.cog.v3 on >> windows10, and the test pass... >> I will retry on other OSes this evening (the test fails on linux...). >> >> >> At least one of those failures is a timeout. So it may just be that the >> CI box is slow. We might cure the issues by lengthening the timeouts. Or >> we could make them expected failures, especially if we can find out some >> way to identify that we’re running on a CI box. >> > > There's something fishy... > Only the linux brand times out. > The test waits 10 times 200msec, so should last about 2s. > [SUnitToolBuilderTests new testHandlingNotification] timeToRun. > does answer something around 2048 on macos brand, but 7706 on linux (???). > > The build.itimerheartbeat brand does complete the test in about 2020ms so > it's OK. > > squeak.cog.spur/build/squeak also performs the test in about 7700ms in an > updated trunk image... > So it's not just squeak.cog.v3 here... > I can only run linux thru a VM (Parallels), so if someone can confirm the > behavior on some native linux > -------------- next part -------------- An HTML attachment was scrubbed... URL: From lewis at mail.msen.com Tue Oct 27 01:02:40 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Mon, 26 Oct 2020 21:02:40 -0400 Subject: [Vm-dev] CI status In-Reply-To: References: <20201026145401.GA17603@shell.msen.com> Message-ID: <20201027010240.GB10312@shell.msen.com> Hi Levente, On Tue, Oct 27, 2020 at 12:59:55AM +0100, Levente Uzonyi wrote: > > Hi David > > On Mon, 26 Oct 2020, David T. Lewis wrote: > > >I do not know if it is related to the CI issues, but here is one clue: > > > >I am maintaining a V3 "trunk" image that attempts to keep in sync with > >trunk except for changes that pertain to Spur object format (immediate > >characters, etc). As of Monticello-ul.728 I get failures in SSL connection > >to e.g. source.squeak.org. The failures happen with both Cog and the > >interpreter VM (although the specific error symptoms are different). > > > >I can bypass the errors by reverting MCHttpRepository>>httpGet:arguments: > >to its prior version (stamped ul 9/20/2019). > > That version adds some rewrite rules, so some http urls are converted to > https. > If that doesn't work, then there is a problem with the SqueakSSL plugin in > your VM. Does the following print true? > > | response | > response := WebClient httpGet: 'https://source.squeak.org'. > response code = 200 > With an interpreter VM, I get a failure from primitiveSSLCreate. With Cog (squeak.cog.v3_linux32x86_202010010729.tar.gz) I also get a failure on the same primitive call. So yes it is probably an issue with the SqueakSSL plugin. Sorry I don't have time to follow up on this properly, I just wanted to mention that I saw an issue in case it relates to the CI problems. Dave > > Instead of reverting #httpGet:arguments: you can remove the individual > http->https rewrite rules with the following snippet: > > MCHttpRepository urlRewriteRules in: [ :rules | > rules size // 3 timesRepeat: [ > | set | > set := rules removeFirst: 3. > (set second beginsWith: 'https') ifFalse: [ > rules addAll: set ] ] ] > > But it would be better to use https for those repositories. > > > Levente > > > > >I have not had time to dig into the underlying cause of the problem, > >but it seems likely that any CI test for Cog that requires the use > >of secure sockets will fail as of Monticello-ul.728 or later. This > >would include any test that needs to access the source.squeak.org > >repository. > > > >Dave From tim at rowledge.org Tue Oct 27 01:23:28 2020 From: tim at rowledge.org (tim Rowledge) Date: Mon, 26 Oct 2020 18:23:28 -0700 Subject: [Vm-dev] CI status In-Reply-To: <20201027010240.GB10312@shell.msen.com> References: <20201026145401.GA17603@shell.msen.com> <20201027010240.GB10312@shell.msen.com> Message-ID: > On 2020-10-26, at 6:02 PM, David T. Lewis wrote: >> >> | response | >> response := WebClient httpGet: 'https://source.squeak.org'. >> response code = 200 >> > > With an interpreter VM, I get a failure from primitiveSSLCreate. > > With Cog (squeak.cog.v3_linux32x86_202010010729.tar.gz) I also get a > failure on the same primitive call. > > So yes it is probably an issue with the SqueakSSL plugin. Just as a datapoint, it works on on my Pi 4 squeak.cog.spur VM tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Never do card tricks for the group you play poker with. From lewis at mail.msen.com Tue Oct 27 01:34:37 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Mon, 26 Oct 2020 21:34:37 -0400 Subject: [Vm-dev] CI status In-Reply-To: <20201027010240.GB10312@shell.msen.com> References: <20201026145401.GA17603@shell.msen.com> <20201027010240.GB10312@shell.msen.com> Message-ID: <20201027013437.GA17951@shell.msen.com> On Mon, Oct 26, 2020 at 09:02:40PM -0400, David T. Lewis wrote: > > Hi Levente, > > On Tue, Oct 27, 2020 at 12:59:55AM +0100, Levente Uzonyi wrote: > > > > Hi David > > > > On Mon, 26 Oct 2020, David T. Lewis wrote: > > > > >I do not know if it is related to the CI issues, but here is one clue: > > > > > >I am maintaining a V3 "trunk" image that attempts to keep in sync with > > >trunk except for changes that pertain to Spur object format (immediate > > >characters, etc). As of Monticello-ul.728 I get failures in SSL connection > > >to e.g. source.squeak.org. The failures happen with both Cog and the > > >interpreter VM (although the specific error symptoms are different). > > > > > >I can bypass the errors by reverting MCHttpRepository>>httpGet:arguments: > > >to its prior version (stamped ul 9/20/2019). > > > > That version adds some rewrite rules, so some http urls are converted to > > https. > > If that doesn't work, then there is a problem with the SqueakSSL plugin in > > your VM. Does the following print true? > > > > | response | > > response := WebClient httpGet: 'https://source.squeak.org'. > > response code = 200 > > > > With an interpreter VM, I get a failure from primitiveSSLCreate. > > With Cog (squeak.cog.v3_linux32x86_202010010729.tar.gz) I also get a > failure on the same primitive call. > > So yes it is probably an issue with the SqueakSSL plugin. > > Sorry I don't have time to follow up on this properly, I just wanted > to mention that I saw an issue in case it relates to the CI problems. > I'm sorry, I reported this incorrectly. With Cog (squeak.cog.v3_linux32x86_202010010729.tar.gz) I get the failure on primitiveSSLCreate. Basically "SqueakSSL new" is failing. With an interpreter VM, SqueakSSL class>>new succeeds, and the failure happens later with a "Host name mismatch" on the certificate. The SecureSocketStream thinks that the host name is source.squeak.org, and the SqueakSSL thinks that its peerName is squeak.org. Very likely this is a plugin problem also, since the interpreter VM would be using an outdated version of the plugin. Dave -------------- next part -------------- A non-text attachment was scrubbed... Name: SqueakSSLCertificateError.png Type: image/png Size: 51211 bytes Desc: not available URL: From commits at source.squeak.org Tue Oct 27 05:49:47 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Tue, 27 Oct 2020 05:49:47 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2855.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2855.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2855 Author: eem Time: 26 October 2020, 10:49:35.24822 pm UUID: 0228f9ca-5807-4e90-a7b5-e1fe14caddb7 Ancestors: VMMaker.oscog-eem.2854 Add oopAt:[put:] support to Alien, needed for callbacks that exchange Smalltalk objects. We need to discuss the security/safety implications, but the basic facility is essential for object-to-object interconnects such as JNI, and indeed Qwaq's PyBridge Python interconnect. =============== Diff against VMMaker.oscog-eem.2854 =============== Item was removed: - ----- Method: IA32ABIPlugin>>isAlien: (in category 'private-support') ----- - isAlien: anOop - - ^interpreterProxy - includesBehavior: (interpreterProxy fetchClassOf: anOop) - ThatOf: interpreterProxy classAlien! Item was added: + ----- Method: IA32ABIPlugin>>primOopAt (in category 'primitives-accessing') ----- + primOopAt + "Fetch an oop from 32 or 64 bits starting at the given byte offset (little endian)." + "THIS IS A HUGE SECURITY HOLE, BUT FULL CALLBACKS DEMAND IT" + " oopAt: index ^ + " + | byteOffset rcvr startAddr addr | + + + byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. + rcvr := interpreterProxy stackObjectValue: 1. + interpreterProxy failed ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. + (self index: byteOffset length: BytesPerOop inRange: rcvr) ifFalse: + [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. + (interpreterProxy isOopImmutable: rcvr) ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrNoModification]. + (startAddr := self startOfData: rcvr) = 0 ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + addr := self cCoerce: startAddr + byteOffset to: #'sqInt *'. + "WE SHOULD DO VALIDATION HERE!! FOR NOW WE PUNT, BUT THIS REALLY DOES REQUIRE A GOOD ANSWER!!!!" + ^interpreterProxy methodReturnValue: (addr at: 0)! Item was added: + ----- Method: IA32ABIPlugin>>primOopAtPut (in category 'primitives-accessing') ----- + primOopAtPut + "Store an oop into 32 or 64 bits starting at the given byte offset (little endian)." + "THIS IS A HUGE SECURITY HOLE, BUT FULL CALLBACKS DEMAND IT" + " oopAt: index put: value ^ + " + | byteOffset rcvr startAddr addr oop | + + + oop := interpreterProxy stackValue: 0. + byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. + rcvr := interpreterProxy stackObjectValue: 2. + interpreterProxy failed ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. + (self index: byteOffset length: BytesPerOop inRange: rcvr) ifFalse: + [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. + (interpreterProxy isOopImmutable: rcvr) ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrNoModification]. + (startAddr := self startOfData: rcvr) = 0 ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + addr := self cCoerce: startAddr + byteOffset to: #'sqInt *'. + addr at: 0 put: oop. + ^interpreterProxy methodReturnValue: oop! Item was removed: - ----- Method: ThreadedFFIPlugin>>isAlien: (in category 'primitive support') ----- - isAlien: anOop - ^interpreterProxy - includesBehavior: (interpreterProxy fetchClassOf: anOop) - ThatOf: interpreterProxy classAlien! From das.linux at gmx.de Tue Oct 27 06:04:20 2020 From: das.linux at gmx.de (Tobias) Date: Tue, 27 Oct 2020 07:04:20 +0100 Subject: [Vm-dev] CI status In-Reply-To: <20201027013437.GA17951@shell.msen.com> References: <20201026145401.GA17603@shell.msen.com> <20201027010240.GB10312@shell.msen.com> <20201027013437.GA17951@shell.msen.com> Message-ID: <9E79881D-074B-461E-A9F1-FC4FEB5DCBB8@gmx.de> Am 27. Oktober 2020 02:34:37 MEZ schrieb "David T. Lewis" : > Hi this looks an awful lot like a very old or brown plugin: SNI / sAN seems not to work. but on the other hand, is webclient outdated? the host name seems not to be send to the plug in... -t -- Sent from a mobile device From noreply at github.com Tue Oct 27 06:44:39 2020 From: noreply at github.com (Eliot Miranda) Date: Mon, 26 Oct 2020 23:44:39 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 09555d: IA32ABI & ThreadedFFIPlugins as per VMMaker.oscog-... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 09555de9320845bcfdb342d12b6711a00df0bdc9 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/09555de9320845bcfdb342d12b6711a00df0bdc9 Author: Eliot Miranda Date: 2020-10-26 (Mon, 26 Oct 2020) Changed paths: M src/plugins/FilePlugin/FilePlugin.c M src/plugins/IA32ABI/IA32ABI.c M src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c M src/plugins/SqueakFFIPrims/ARM64FFIPlugin.c M src/plugins/SqueakFFIPrims/IA32FFIPlugin.c M src/plugins/SqueakFFIPrims/X64SysVFFIPlugin.c M src/plugins/SqueakFFIPrims/X64Win64FFIPlugin.c Log Message: ----------- IA32ABI & ThreadedFFIPlugins as per VMMaker.oscog-eem.2855 Add oopAt:[put:] support to Alien, needed for callbacks that exchange Smalltalk objects. We need to discuss the security/safety implications, but the basic facility is essential for object-to-object interconnects such as JNI, and indeed Qwaq's PyBridge Python interconnect. Use a slightly more efficient isAlien: in IA32ABI and SqueakFFIPrims. From noreply at github.com Tue Oct 27 08:04:12 2020 From: noreply at github.com (Tobias Pape) Date: Tue, 27 Oct 2020 01:04:12 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 02a471: [unix/configure] Fix X11 detection of library pres... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 02a4719fe3df3bd51b92202a419fd45ad9480a5d https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/02a4719fe3df3bd51b92202a419fd45ad9480a5d Author: Tobias Pape Date: 2020-10-27 (Tue, 27 Oct 2020) Changed paths: M platforms/unix/config/config.h.in M platforms/unix/config/configure M platforms/unix/vm-display-X11/acinclude.m4 Log Message: ----------- [unix/configure] Fix X11 detection of library presence C code was ok, but autoconf set HAVE_* prematurely (ie, header there, lib not) From Das.Linux at gmx.de Tue Oct 27 08:05:21 2020 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue, 27 Oct 2020 09:05:21 +0100 Subject: [Vm-dev] CI status In-Reply-To: <9E79881D-074B-461E-A9F1-FC4FEB5DCBB8@gmx.de> References: <20201026145401.GA17603@shell.msen.com> <20201027010240.GB10312@shell.msen.com> <20201027013437.GA17951@shell.msen.com> <9E79881D-074B-461E-A9F1-FC4FEB5DCBB8@gmx.de> Message-ID: <231F8FFA-D93E-4E4B-8F37-CAD2C06434AE@gmx.de> Hi > On 27.10.2020, at 07:04, Tobias wrote: > > > Am 27. Oktober 2020 02:34:37 MEZ schrieb "David T. Lewis" : >> > > Hi > this looks an awful lot like a very old or brown plugin: SNI / sAN seems not to work. > > but on the other hand, is webclient outdated? the host name seems not to be send to the plug in... I've had a look, but I cannot reproduce :( See screenshot. Please tell me the openssl version used. Best regards -Tobias -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Bildschirmfoto 2020-10-27 um 09.02.22.PNG Type: image/png Size: 106913 bytes Desc: not available URL: From nicolas.cellier.aka.nice at gmail.com Tue Oct 27 08:33:38 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue, 27 Oct 2020 09:33:38 +0100 Subject: [Vm-dev] CI status In-Reply-To: <16B92539-2604-4D9E-8C23-A50179B9543B@gmail.com> References: <16B92539-2604-4D9E-8C23-A50179B9543B@gmail.com> Message-ID: Le mar. 27 oct. 2020 à 00:00, Eliot Miranda a écrit : > > > > On Oct 26, 2020, at 2:53 PM, Nicolas Cellier < > nicolas.cellier.aka.nice at gmail.com> wrote: > >  > > > Le lun. 26 oct. 2020 à 16:26, Eliot Miranda a > écrit : > >> >> >> On Oct 26, 2020, at 7:22 AM, Nicolas Cellier < >> nicolas.cellier.aka.nice at gmail.com> wrote: >> >>  >> >> >> Le lun. 26 oct. 2020 à 15:11, Eliot Miranda a >> écrit : >> >>> >>> Hi Nicolas, >>> >>> On Oct 26, 2020, at 6:59 AM, Nicolas Cellier < >>> nicolas.cellier.aka.nice at gmail.com> wrote: >>> >>>  >>> Hi all, >>> I have restored (I think) the green status of minheadless build. >>> >>> >>> Thank you so much! >>> >>> We could eventually authorize failure of all those builds, or restrict >>> the number of flavours that we build (it takes really loooong time before >>> we get CI feedback). >>> But if we abandon all those now, I fear that we never catch up; it's a >>> one way ticket. IMO there are still interesting ideas to take, even if >>> development has continued in Pharo fork... >>> >>> >>> One approach might be to split them into “essential” and “nice to have” >>> so we get faster feedback from the “essential” set. >>> >>> +1, but I do not know how to configure the CI like that... >> >>> Now the next failing build on travis is about squeak.cog.v3. Did some >>> incompatible VM change took place? >>> >>> For example >>> https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/jobs/738831149 >>> >>> ###################################################### >>> >>> # Squeak-4.6 on Travis CI (2278.23) # >>> >>> # 3401 Tests with 5 Failures and 0 Errors in 112.13s # >>> >>> ###################################################### >>> >>> ######################### >>> >>> # 5 tests did not pass: # >>> >>> ######################### >>> >>> SUnitToolBuilderTests >>> 837fef_266b >>> >>> ✗ #testHandlingNotification (10023ms) >>> >>> TestValueWithinFix >>> 2a65cb_266b >>> >>> ✗ #testValueWithinTimingBasic (1005ms) >>> e9a7ab_266b >>> >>> ✗ #testValueWithinTimingNestedInner (1001ms) >>> c57415_266b >>> >>> ✗ #testValueWithinTimingNestedOuter (1002ms) >>> e89da3_266b >>> >>> ✗ #testValueWithinTimingRepeat (3004ms) >>> >>> Executed 3401 Tests with 5 Failures and 0 Errors in 112.13s. >>> >>> To reproduce the failed build locally, download smalltalkCI, and try to run something like: >>> >>> bin/smalltalkci -s Squeak-4.6 --headfull /path/to/.smalltalk.ston >>> >>> Could these test failures be nothing to do with the VM but instead to do >>> with the (growing) divergence between trunk/spur and Squeak 4.6? >>> >>> _,,,^..^,,,_ (phone) >>> >> No idea... >> I've downloaded a Squeak4.6-15102.image, compiled a squeak.cog.v3 on >> windows10, and the test pass... >> I will retry on other OSes this evening (the test fails on linux...). >> >> >> At least one of those failures is a timeout. So it may just be that the >> CI box is slow. We might cure the issues by lengthening the timeouts. Or >> we could make them expected failures, especially if we can find out some >> way to identify that we’re running on a CI box. >> > > There's something fishy... > Only the linux brand times out. > The test waits 10 times 200msec, so should last about 2s. > [SUnitToolBuilderTests new testHandlingNotification] timeToRun. > does answer something around 2048 on macos brand, but 7706 on linux (???). > > The build.itimerheartbeat brand does complete the test in about 2020ms so > it's OK. > > squeak.cog.spur/build/squeak also performs the test in about 7700ms in an > updated trunk image... > So it's not just squeak.cog.v3 here... > I can only run linux thru a VM (Parallels), so if someone can confirm the > behavior on some native linux > > > Ah! Is the kernel older than 2.6.4 (IIRC)? If so, the heartbeat thread > doesn’t work properly because the vm doesn’t have permission or ability to > set the heartbeat thread’s priority. > No, it's an ubuntu 16: $ uname -a Linux ubuntu 4.4.0-193-generic #224-Ubuntu SMP Tue Oct 6 17:15:28 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux I hopefully have the correct setup for authorizing thread priority $ cat /etc/security/limits.d/squeak.conf * hard rtprio 2 * soft rtprio 2 I have no warning in the console telling that "pthread_setschedparam failed "... So I don't know what's going on. Can someone reproduce? -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Tue Oct 27 10:26:13 2020 From: builds at travis-ci.org (Travis CI) Date: Tue, 27 Oct 2020 10:26:13 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2280 (Cog - 09555de) In-Reply-To: Message-ID: <5f97f5c588436_13ff5fa1ae00c1111d1@travis-tasks-6d7969876-9zxk8.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2280 Status: Still Failing Duration: 3 hrs, 40 mins, and 21 secs Commit: 09555de (Cog) Author: Eliot Miranda Message: IA32ABI & ThreadedFFIPlugins as per VMMaker.oscog-eem.2855 Add oopAt:[put:] support to Alien, needed for callbacks that exchange Smalltalk objects. We need to discuss the security/safety implications, but the basic facility is essential for object-to-object interconnects such as JNI, and indeed Qwaq's PyBridge Python interconnect. Use a slightly more efficient isAlien: in IA32ABI and SqueakFFIPrims. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/6a6ed62e868f...09555de93208 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/739200730?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Tue Oct 27 13:31:51 2020 From: builds at travis-ci.org (Travis CI) Date: Tue, 27 Oct 2020 13:31:51 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2281 (Cog - 02a4719) In-Reply-To: Message-ID: <5f982146e5eaf_13fd4a73fc710752ec@travis-tasks-5c9f84b67b-7lhdb.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2281 Status: Still Failing Duration: 4 hrs, 51 mins, and 1 sec Commit: 02a4719 (Cog) Author: Tobias Pape Message: [unix/configure] Fix X11 detection of library presence C code was ok, but autoconf set HAVE_* prematurely (ie, header there, lib not) View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/09555de93208...02a4719fe3df View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/739214540?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From Yoshiki.Ohshima at acm.org Tue Oct 27 15:21:30 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Tue, 27 Oct 2020 08:21:30 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: The previous one was just a hack but I think I found the real problem. It was about the variable symbolic, that gets symbolic key code *when* it is needed has to be zero'ed out when it is not needed. The diff is attached... I'll a make pull request if that helps. On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima wrote: > For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack I did > was like this: > > diff --git a/platforms/unix/vm/sqPlatformSpecific.h > b/platforms/unix/vm/sqPlatformSpecific.h > > index 268593673..bfb57257b 100644 > > --- a/platforms/unix/vm/sqPlatformSpecific.h > > +++ b/platforms/unix/vm/sqPlatformSpecific.h > > @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, sqInt > stNameIndex, int sqNameLeng > > #undef sqFTruncate > > /* sqFTruncate should return 0 on success, ftruncate does also */ > > #define sqFTruncate(f,o) ftruncate(fileno(f), o) > > -#define ftell(s) ftello(s) > > -#define fseek(s,o,w) fseeko(s,o,w) > > +// #define ftell(s) ftello(s) > > +// #define fseek(s,o,w) fseeko(s,o,w) > > > #if defined(__GNUC__) > > # if !defined(VM_LABEL) > > diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c > > index d62b05f40..e1c14a021 100644 > > --- a/spur64src/vm/cogit.c > > +++ b/spur64src/vm/cogit.c > > @@ -6,6 +6,8 @@ > > # define SysV 1 > > #endif > > > +#define __arm64__ > > + > > #if defined(__arm64__) || defined(__aarch64__) || > defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) > > > and this produced a runnable VM on Raspberry Pi4 > > On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima > wrote: > >> And I tried a few more things by checking out the last release tag >> 202003021730 or try opensmalltalk-vm/build.linuxARMv6/squeak.cog.spur/build.debug >> but those attempts did not work. For the latter got this error: >> >> In file included from /usr/include/features.h:424, >> >> from /usr/include/pthread.h:21, >> >> from >> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >> >> from >> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >> >> from >> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >> >> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >> >> extern int __REDIRECT (fseeko, >> >> ^~~~~~~~~~ >> >> In file included from >> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >> >> from >> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >> >> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >> note: previous declaration \ >> >> of ‘fseeko’ was here >> >> #define fseek(s,o,w) fseeko(s,o,w) >> >> ^~~~~~ >> >> >> >> >> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima >> wrote: >> >>> Hi Eliot, >>> >>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following >>> error. I think I followed the steps in the instructions, including running >>> updateSCCSVersion and mvm. How can I fix it? >>> >>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As >>> yet no Cogit implementation appears to exist for your platform. >>> >>> # error As yet no Cogit implementation appears to exist for your >>> platform. >>> >>> ^~~~~ >>> >>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error >>> Consider implementing it, starting by adding a subclass of >>> CogAbstractInstruction. >>> >>> # error Consider implementing it, starting by adding a subclass of >>> CogAbstractInstruction. >>> >>> ^~~~~ >>> >>> make[1]: *** [Makefile:207: cogit.o] >>> >>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda >>> wrote: >>> >>>> >>>> Hi Yoshiki, >>>> >>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>> Yoshiki.Ohshima at acm.org> wrote: >>>> >>>>> >>>>> Hi, >>>>> >>>>> I heard that people got a new problem in inputting Japanese text into >>>>> Scratch 1.4 running on Raspberry Pi OS after, or around the version >>>>> 2020-08-20. I would like to take a look at it but it might involve >>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>> into it was years and years ago and I need to basically make a fresh start. >>>>> >>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to date and >>>>> straightforward? Can people point me to the right point to start? >>>>> >>>> >>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >>>> >>>> _,,,^..^,,,_ >>>> best, Eliot >>>> >>> >>> >>> -- >>> -- Yoshiki >>> >>> >> >> -- >> -- Yoshiki >> >> > > -- > -- Yoshiki > > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: compositioninput.diff Type: application/octet-stream Size: 5440 bytes Desc: not available URL: From lewis at mail.msen.com Tue Oct 27 16:09:45 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Tue, 27 Oct 2020 12:09:45 -0400 Subject: [Vm-dev] CI status In-Reply-To: <9E79881D-074B-461E-A9F1-FC4FEB5DCBB8@gmx.de> References: <20201026145401.GA17603@shell.msen.com> <20201027010240.GB10312@shell.msen.com> <20201027013437.GA17951@shell.msen.com> <9E79881D-074B-461E-A9F1-FC4FEB5DCBB8@gmx.de> Message-ID: <20201027160945.GA74374@shell.msen.com> On Tue, Oct 27, 2020 at 07:04:20AM +0100, Tobias wrote: > > Am 27. Oktober 2020 02:34:37 MEZ schrieb "David T. Lewis" : > > > > Hi > this looks an awful lot like a very old or brown plugin: SNI / sAN seems not to work. > > but on the other hand, is webclient outdated? the host name seems not to be send to the plug in... > The plugin in my interpreter VM is outdated, yes. But it's the Cog VM that would be of interest here. With Cog, I see a primitive failure in SqueakSSL>>primitiveSSLCreate. Here is the VM I am running: Virtual Machine --------------- /usr/local/lib/squeak/4.5-202010010729/squeak Open Smalltalk Cog[SqueakV3] VM [CoInterpreterPrimitives VMMaker.oscog-eem.2831] Unix built on Oct 1 2020 07:59:33 Compiler: 5.4.0 20160609 platform sources revision VM: 202010010729 https://github.com/OpenSmalltalk/opensmalltalk-vm.git Date: Thu Oct 1 09:29:33 2020 CommitHash: f679770 Plugins: 202010010729 https://github.com/OpenSmalltalk/opensmalltalk-vm.git CoInterpreter VMMaker.oscog-eem.2831 uuid: f4fed277-6b62-4e79-9147-c5405589f2b1 Oct 1 2020 StackToRegisterMappingCogit VMMaker.oscog-eem.2824 uuid: 8f091e5b-fc0f-4b4b-ab5e-e90e598f75ee Oct 1 2020 To Build A Similar Virtual Machine ---------------------------------- Visit https://github.com/OpenSmalltalk/opensmalltalk-vm; follow the "Clone or download" instructions, then read the top-level README.md and HowToBuild files in the top-level build directory for your platform(s), build.macos64x64/HowToBuild, build.win32x86/HowToBuild, etc. Loaded VM Modules ----------------- AioPlugin VMConstruction-Plugins-AioPlugin.oscog-eem.25 (i) B2DPlugin VMMaker.oscog-eem.2805 (i) BitBltPlugin VMMaker.oscog-eem.2821 (i) CroquetPlugin VMMaker.oscog-eem.2744 (i) FilePlugin VMMaker.oscog-eem.2795 (i) FloatArrayPlugin VMMaker.oscog-eem.2759 (i) LargeIntegers v2.0 VMMaker.oscog-eem.2821 (i) Matrix2x3Plugin VMMaker.oscog-eem.2780 (i) MiscPrimitivePlugin VMMaker.oscog-eem.2761 (i) SecurityPlugin VMMaker.oscog-eem.2790 (i) SocketPlugin VMMaker.oscog-eem.2823 (i) SqueakSSL VMMaker.oscog-eem.2805 (e) UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.69 (e) From eliot.miranda at gmail.com Tue Oct 27 16:57:40 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue, 27 Oct 2020 09:57:40 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi Yoshiki, on my Mac patch isn't smart enough to decode a git diff. Can you just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll integrate? Thanks! On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima wrote: > > The previous one was just a hack but I think I found the real problem. It > was about the variable symbolic, that gets symbolic key code *when* it is > needed has to be zero'ed out when it is not needed. > > The diff is attached... I'll a make pull request if that helps. > > On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima > wrote: > >> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack I >> did was like this: >> >> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >> b/platforms/unix/vm/sqPlatformSpecific.h >> >> index 268593673..bfb57257b 100644 >> >> --- a/platforms/unix/vm/sqPlatformSpecific.h >> >> +++ b/platforms/unix/vm/sqPlatformSpecific.h >> >> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, sqInt >> stNameIndex, int sqNameLeng >> >> #undef sqFTruncate >> >> /* sqFTruncate should return 0 on success, ftruncate does also */ >> >> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >> >> -#define ftell(s) ftello(s) >> >> -#define fseek(s,o,w) fseeko(s,o,w) >> >> +// #define ftell(s) ftello(s) >> >> +// #define fseek(s,o,w) fseeko(s,o,w) >> >> >> #if defined(__GNUC__) >> >> # if !defined(VM_LABEL) >> >> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >> >> index d62b05f40..e1c14a021 100644 >> >> --- a/spur64src/vm/cogit.c >> >> +++ b/spur64src/vm/cogit.c >> >> @@ -6,6 +6,8 @@ >> >> # define SysV 1 >> >> #endif >> >> >> +#define __arm64__ >> >> + >> >> #if defined(__arm64__) || defined(__aarch64__) || >> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >> >> >> and this produced a runnable VM on Raspberry Pi4 >> >> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima >> wrote: >> >>> And I tried a few more things by checking out the last release tag >>> 202003021730 or try opensmalltalk-vm/build.linuxARMv6/squeak.cog.spur/build.debug >>> but those attempts did not work. For the latter got this error: >>> >>> In file included from /usr/include/features.h:424, >>> >>> from /usr/include/pthread.h:21, >>> >>> from >>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>> >>> from >>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>> >>> from >>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>> >>> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >>> >>> extern int __REDIRECT (fseeko, >>> >>> ^~~~~~~~~~ >>> >>> In file included from >>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>> >>> from >>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>> >>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>> note: previous declaration \ >>> >>> of ‘fseeko’ was here >>> >>> #define fseek(s,o,w) fseeko(s,o,w) >>> >>> ^~~~~~ >>> >>> >>> >>> >>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima >>> wrote: >>> >>>> Hi Eliot, >>>> >>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>> following error. I think I followed the steps in the instructions, >>>> including running updateSCCSVersion and mvm. How can I fix it? >>>> >>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As >>>> yet no Cogit implementation appears to exist for your platform. >>>> >>>> # error As yet no Cogit implementation appears to exist for your >>>> platform. >>>> >>>> ^~~~~ >>>> >>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error >>>> Consider implementing it, starting by adding a subclass of >>>> CogAbstractInstruction. >>>> >>>> # error Consider implementing it, starting by adding a subclass of >>>> CogAbstractInstruction. >>>> >>>> ^~~~~ >>>> >>>> make[1]: *** [Makefile:207: cogit.o] >>>> >>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda >>>> wrote: >>>> >>>>> >>>>> Hi Yoshiki, >>>>> >>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> I heard that people got a new problem in inputting Japanese text into >>>>>> Scratch 1.4 running on Raspberry Pi OS after, or around the version >>>>>> 2020-08-20. I would like to take a look at it but it might involve >>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>> >>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to date and >>>>>> straightforward? Can people point me to the right point to start? >>>>>> >>>>> >>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >>>>> >>>>> _,,,^..^,,,_ >>>>> best, Eliot >>>>> >>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>>> >>> >>> -- >>> -- Yoshiki >>> >>> >> >> -- >> -- Yoshiki >> >> > > -- > -- Yoshiki > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From Yoshiki.Ohshima at acm.org Tue Oct 27 17:01:44 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Tue, 27 Oct 2020 10:01:44 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: I have a branch on a clone on github: https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct It might be easier to pull from this? Separately, I'll mail you sqUnixX11.c. On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda wrote: > > Hi Yoshiki, > > on my Mac patch isn't smart enough to decode a git diff. Can you just > email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll > integrate? Thanks! > > On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima > wrote: > >> >> The previous one was just a hack but I think I found the real problem. It >> was about the variable symbolic, that gets symbolic key code *when* it is >> needed has to be zero'ed out when it is not needed. >> >> The diff is attached... I'll a make pull request if that helps. >> >> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima >> wrote: >> >>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack I >>> did was like this: >>> >>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>> b/platforms/unix/vm/sqPlatformSpecific.h >>> >>> index 268593673..bfb57257b 100644 >>> >>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>> >>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>> >>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, >>> sqInt stNameIndex, int sqNameLeng >>> >>> #undef sqFTruncate >>> >>> /* sqFTruncate should return 0 on success, ftruncate does also */ >>> >>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>> >>> -#define ftell(s) ftello(s) >>> >>> -#define fseek(s,o,w) fseeko(s,o,w) >>> >>> +// #define ftell(s) ftello(s) >>> >>> +// #define fseek(s,o,w) fseeko(s,o,w) >>> >>> >>> #if defined(__GNUC__) >>> >>> # if !defined(VM_LABEL) >>> >>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>> >>> index d62b05f40..e1c14a021 100644 >>> >>> --- a/spur64src/vm/cogit.c >>> >>> +++ b/spur64src/vm/cogit.c >>> >>> @@ -6,6 +6,8 @@ >>> >>> # define SysV 1 >>> >>> #endif >>> >>> >>> +#define __arm64__ >>> >>> + >>> >>> #if defined(__arm64__) || defined(__aarch64__) || >>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>> >>> >>> and this produced a runnable VM on Raspberry Pi4 >>> >>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima >>> wrote: >>> >>>> And I tried a few more things by checking out the last release tag >>>> 202003021730 or try opensmalltalk-vm/build.linuxARMv6/squeak.cog.spur/build.debug >>>> but those attempts did not work. For the latter got this error: >>>> >>>> In file included from /usr/include/features.h:424, >>>> >>>> from /usr/include/pthread.h:21, >>>> >>>> from >>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>> >>>> from >>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>> >>>> from >>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>> >>>> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >>>> >>>> extern int __REDIRECT (fseeko, >>>> >>>> ^~~~~~~~~~ >>>> >>>> In file included from >>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>> >>>> from >>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>> >>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>> note: previous declaration \ >>>> >>>> of ‘fseeko’ was here >>>> >>>> #define fseek(s,o,w) fseeko(s,o,w) >>>> >>>> ^~~~~~ >>>> >>>> >>>> >>>> >>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>> Yoshiki.Ohshima at acm.org> wrote: >>>> >>>>> Hi Eliot, >>>>> >>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>>> following error. I think I followed the steps in the instructions, >>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>> >>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As >>>>> yet no Cogit implementation appears to exist for your platform. >>>>> >>>>> # error As yet no Cogit implementation appears to exist for your >>>>> platform. >>>>> >>>>> ^~~~~ >>>>> >>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error >>>>> Consider implementing it, starting by adding a subclass of >>>>> CogAbstractInstruction. >>>>> >>>>> # error Consider implementing it, starting by adding a subclass of >>>>> CogAbstractInstruction. >>>>> >>>>> ^~~~~ >>>>> >>>>> make[1]: *** [Makefile:207: cogit.o] >>>>> >>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>> eliot.miranda at gmail.com> wrote: >>>>> >>>>>> >>>>>> Hi Yoshiki, >>>>>> >>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>> >>>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I heard that people got a new problem in inputting Japanese text >>>>>>> into Scratch 1.4 running on Raspberry Pi OS after, or around the version >>>>>>> 2020-08-20. I would like to take a look at it but it might involve >>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>> >>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to date and >>>>>>> straightforward? Can people point me to the right point to start? >>>>>>> >>>>>> >>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >>>>>> >>>>>> _,,,^..^,,,_ >>>>>> best, Eliot >>>>>> >>>>> >>>>> >>>>> -- >>>>> -- Yoshiki >>>>> >>>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>>> >>> >>> -- >>> -- Yoshiki >>> >>> >> >> -- >> -- Yoshiki >> >> > > -- > _,,,^..^,,,_ > best, Eliot > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Tue Oct 27 17:17:49 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 27 Oct 2020 10:17:49 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] c99b14: Integrate Yoshiki's fix for input composition (see Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: c99b1433a12e2904985c13abde068cdfa61dda7c https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/c99b1433a12e2904985c13abde068cdfa61dda7c Author: Eliot Miranda Date: 2020-10-27 (Tue, 27 Oct 2020) Changed paths: M platforms/unix/vm-display-X11/sqUnixX11.c Log Message: ----------- Integrate Yoshiki's fix for input composition (see http://forum.world.st/nuSqueak-source-tt5123803.html). [ci skip] because in a subsequent commit I'll change ftell usage to ftello and nuke the define in sqPlatformSpecific.h. From nicolas.cellier.aka.nice at gmail.com Tue Oct 27 17:43:30 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue, 27 Oct 2020 18:43:30 +0100 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Hi Yoshiki, what you could do is 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since we have a working workaround now 2) just create a pull request from the github web interface (that's rather easy) It will be very easy for us to integrate (one click), and we'll keep your authorship. Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima a écrit : > > I have a branch on a clone on github: > > > https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct > > It might be easier to pull from this? Separately, I'll mail you > sqUnixX11.c. > > On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda > wrote: > >> >> Hi Yoshiki, >> >> on my Mac patch isn't smart enough to decode a git diff. Can you >> just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll >> integrate? Thanks! >> >> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima >> wrote: >> >>> >>> The previous one was just a hack but I think I found the real problem. >>> It was about the variable symbolic, that gets symbolic key code *when* it >>> is needed has to be zero'ed out when it is not needed. >>> >>> The diff is attached... I'll a make pull request if that helps. >>> >>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima >>> wrote: >>> >>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack I >>>> did was like this: >>>> >>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>> >>>> index 268593673..bfb57257b 100644 >>>> >>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>> >>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>> >>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, >>>> sqInt stNameIndex, int sqNameLeng >>>> >>>> #undef sqFTruncate >>>> >>>> /* sqFTruncate should return 0 on success, ftruncate does also */ >>>> >>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>> >>>> -#define ftell(s) ftello(s) >>>> >>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>> >>>> +// #define ftell(s) ftello(s) >>>> >>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>> >>>> >>>> #if defined(__GNUC__) >>>> >>>> # if !defined(VM_LABEL) >>>> >>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>> >>>> index d62b05f40..e1c14a021 100644 >>>> >>>> --- a/spur64src/vm/cogit.c >>>> >>>> +++ b/spur64src/vm/cogit.c >>>> >>>> @@ -6,6 +6,8 @@ >>>> >>>> # define SysV 1 >>>> >>>> #endif >>>> >>>> >>>> +#define __arm64__ >>>> >>>> + >>>> >>>> #if defined(__arm64__) || defined(__aarch64__) || >>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>> >>>> >>>> and this produced a runnable VM on Raspberry Pi4 >>>> >>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>> Yoshiki.Ohshima at acm.org> wrote: >>>> >>>>> And I tried a few more things by checking out the last release tag >>>>> 202003021730 or try opensmalltalk-vm/build.linuxARMv6/squeak.cog.spur/build.debug >>>>> but those attempts did not work. For the latter got this error: >>>>> >>>>> In file included from /usr/include/features.h:424, >>>>> >>>>> from /usr/include/pthread.h:21, >>>>> >>>>> from >>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>> >>>>> from >>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>> >>>>> from >>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>> >>>>> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >>>>> >>>>> extern int __REDIRECT (fseeko, >>>>> >>>>> ^~~~~~~~~~ >>>>> >>>>> In file included from >>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>> >>>>> from >>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>> >>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>> note: previous declaration \ >>>>> >>>>> of ‘fseeko’ was here >>>>> >>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>> >>>>> ^~~~~~ >>>>> >>>>> >>>>> >>>>> >>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>> >>>>>> Hi Eliot, >>>>>> >>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>>>> following error. I think I followed the steps in the instructions, >>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>> >>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As >>>>>> yet no Cogit implementation appears to exist for your platform. >>>>>> >>>>>> # error As yet no Cogit implementation appears to exist for your >>>>>> platform. >>>>>> >>>>>> ^~~~~ >>>>>> >>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error >>>>>> Consider implementing it, starting by adding a subclass of >>>>>> CogAbstractInstruction. >>>>>> >>>>>> # error Consider implementing it, starting by adding a subclass of >>>>>> CogAbstractInstruction. >>>>>> >>>>>> ^~~~~ >>>>>> >>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>> >>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>> eliot.miranda at gmail.com> wrote: >>>>>> >>>>>>> >>>>>>> Hi Yoshiki, >>>>>>> >>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>> >>>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> I heard that people got a new problem in inputting Japanese text >>>>>>>> into Scratch 1.4 running on Raspberry Pi OS after, or around the version >>>>>>>> 2020-08-20. I would like to take a look at it but it might involve >>>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>>> >>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to date >>>>>>>> and straightforward? Can people point me to the right point to start? >>>>>>>> >>>>>>> >>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >>>>>>> >>>>>>> _,,,^..^,,,_ >>>>>>> best, Eliot >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> -- Yoshiki >>>>>> >>>>>> >>>>> >>>>> -- >>>>> -- Yoshiki >>>>> >>>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>>> >>> >>> -- >>> -- Yoshiki >>> >>> >> >> -- >> _,,,^..^,,,_ >> best, Eliot >> > > > -- > -- Yoshiki > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.cellier.aka.nice at gmail.com Tue Oct 27 17:45:06 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue, 27 Oct 2020 18:45:06 +0100 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Ah too late, Eliot was faster, hit the pull request next time :) Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < nicolas.cellier.aka.nice at gmail.com> a écrit : > Hi Yoshiki, > what you could do is > 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since we have > a working workaround now > 2) just create a pull request from the github web interface (that's rather > easy) > It will be very easy for us to integrate (one click), and we'll keep your > authorship. > > Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima a > écrit : > >> >> I have a branch on a clone on github: >> >> >> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >> >> It might be easier to pull from this? Separately, I'll mail you >> sqUnixX11.c. >> >> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda >> wrote: >> >>> >>> Hi Yoshiki, >>> >>> on my Mac patch isn't smart enough to decode a git diff. Can you >>> just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll >>> integrate? Thanks! >>> >>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima >>> wrote: >>> >>>> >>>> The previous one was just a hack but I think I found the real problem. >>>> It was about the variable symbolic, that gets symbolic key code *when* it >>>> is needed has to be zero'ed out when it is not needed. >>>> >>>> The diff is attached... I'll a make pull request if that helps. >>>> >>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>> Yoshiki.Ohshima at acm.org> wrote: >>>> >>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack I >>>>> did was like this: >>>>> >>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>> >>>>> index 268593673..bfb57257b 100644 >>>>> >>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>> >>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>> >>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, >>>>> sqInt stNameIndex, int sqNameLeng >>>>> >>>>> #undef sqFTruncate >>>>> >>>>> /* sqFTruncate should return 0 on success, ftruncate does also */ >>>>> >>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>> >>>>> -#define ftell(s) ftello(s) >>>>> >>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>> >>>>> +// #define ftell(s) ftello(s) >>>>> >>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>> >>>>> >>>>> #if defined(__GNUC__) >>>>> >>>>> # if !defined(VM_LABEL) >>>>> >>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>> >>>>> index d62b05f40..e1c14a021 100644 >>>>> >>>>> --- a/spur64src/vm/cogit.c >>>>> >>>>> +++ b/spur64src/vm/cogit.c >>>>> >>>>> @@ -6,6 +6,8 @@ >>>>> >>>>> # define SysV 1 >>>>> >>>>> #endif >>>>> >>>>> >>>>> +#define __arm64__ >>>>> >>>>> + >>>>> >>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>>> >>>>> >>>>> and this produced a runnable VM on Raspberry Pi4 >>>>> >>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>> >>>>>> And I tried a few more things by checking out the last release tag >>>>>> 202003021730 or try opensmalltalk-vm/build. >>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts did not >>>>>> work. For the latter got this error: >>>>>> >>>>>> In file included from /usr/include/features.h:424, >>>>>> >>>>>> from /usr/include/pthread.h:21, >>>>>> >>>>>> from >>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>> >>>>>> from >>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>> >>>>>> from >>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>> >>>>>> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >>>>>> >>>>>> extern int __REDIRECT (fseeko, >>>>>> >>>>>> ^~~~~~~~~~ >>>>>> >>>>>> In file included from >>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>> >>>>>> from >>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>> >>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>> note: previous declaration \ >>>>>> >>>>>> of ‘fseeko’ was here >>>>>> >>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>> >>>>>> ^~~~~~ >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>> >>>>>>> Hi Eliot, >>>>>>> >>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>>>>> following error. I think I followed the steps in the instructions, >>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>> >>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error >>>>>>> As yet no Cogit implementation appears to exist for your platform. >>>>>>> >>>>>>> # error As yet no Cogit implementation appears to exist for your >>>>>>> platform. >>>>>>> >>>>>>> ^~~~~ >>>>>>> >>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error >>>>>>> Consider implementing it, starting by adding a subclass of >>>>>>> CogAbstractInstruction. >>>>>>> >>>>>>> # error Consider implementing it, starting by adding a subclass of >>>>>>> CogAbstractInstruction. >>>>>>> >>>>>>> ^~~~~ >>>>>>> >>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>> >>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>> >>>>>>>> >>>>>>>> Hi Yoshiki, >>>>>>>> >>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I heard that people got a new problem in inputting Japanese text >>>>>>>>> into Scratch 1.4 running on Raspberry Pi OS after, or around the version >>>>>>>>> 2020-08-20. I would like to take a look at it but it might involve >>>>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>>>> >>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to date >>>>>>>>> and straightforward? Can people point me to the right point to start? >>>>>>>>> >>>>>>>> >>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >>>>>>>> >>>>>>>> _,,,^..^,,,_ >>>>>>>> best, Eliot >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- Yoshiki >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> -- Yoshiki >>>>>> >>>>>> >>>>> >>>>> -- >>>>> -- Yoshiki >>>>> >>>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>>> >>> >>> -- >>> _,,,^..^,,,_ >>> best, Eliot >>> >> >> >> -- >> -- Yoshiki >> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Tue Oct 27 18:02:26 2020 From: tim at rowledge.org (tim Rowledge) Date: Tue, 27 Oct 2020 11:02:26 -0700 Subject: [Vm-dev] CI status In-Reply-To: References: <16B92539-2604-4D9E-8C23-A50179B9543B@gmail.com> Message-ID: <53D4A481-1BFE-4A25-80E7-91EDC3D7F6A9@rowledge.org> > On 2020-10-27, at 1:33 AM, Nicolas Cellier wrote: > > No, it's an ubuntu 16: > > $ uname -a > Linux ubuntu 4.4.0-193-generic #224-Ubuntu SMP Tue Oct 6 17:15:28 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux > > I hopefully have the correct setup for authorizing thread priority > > $ cat /etc/security/limits.d/squeak.conf > * hard rtprio 2 > * soft rtprio 2 > > I have no warning in the console telling that "pthread_setschedparam failed"... > > So I don't know what's going on. Can someone reproduce? Actually yeah, kinda. I have a linux i7 box I mostly use to run an ancient VW product on. It's a recent Ubuntu 18.0.4 download with that horrible xfce ui stuff (really, what were they thinking). Aside from many other faults it (mis)works with VNC in annoying ways tha mean it frequently stops sharing the copy/paste buffer. Anyway. uname -a tells me (and I can't paste it, of course!) 4.15.0-101generic #102-Ubuntu SMP etc etc I have run the limits.d set up several times and the file is ok. And yes, I have rebooted plenty of times. It *never* works to make squeak happy. Did I mention that Ubuntu is not very good? tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim A computer's attention span is only as long as its extension cord. From noreply at github.com Tue Oct 27 18:04:45 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 27 Oct 2020 11:04:45 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] e565f9: Change all uses of fseek/ftell into uses either of... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: e565f947da5151d9dc5898f8064f4296d895b1fa https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/e565f947da5151d9dc5898f8064f4296d895b1fa Author: Eliot Miranda Date: 2020-10-27 (Tue, 27 Oct 2020) Changed paths: M platforms/Cross/plugins/FilePlugin/sqFilePluginBasicPrims.c M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3io.c M platforms/Cross/vm/sqVirtualMachine.c M platforms/Mac OS/vm/config.h M platforms/Mac OS/vm/sqPlatformSpecific.h M platforms/RiscOS/vm/sqArgument.c M platforms/iOS/vm/OSX/config.h M platforms/iOS/vm/iPhone/config.h M platforms/iOS/vm/iPhone/sqPlatformSpecific.h M platforms/minheadless/config.h.in M platforms/minheadless/unix/sqPlatformSpecific-Unix.h M platforms/minheadless/windows/sqWin32Backtrace.c R platforms/unix/vm/glibc.h M platforms/unix/vm/sqPlatformSpecific.h R platforms/unix/vm/sunos.h M platforms/win32/plugins/FT2Plugin/freetype/config/ftstdlib.h M platforms/win32/vm/sqPlatformSpecific.h M platforms/win32/vm/sqWin32Backtrace.c M platforms/win32/vm/sqWin32Main.c Log Message: ----------- Change all uses of fseek/ftell into uses either of fseeko/ftello, or, if it is known that the code is being compiled for mingw/MSVC, to _fseeki64/_ftelli64. Nuke the useless and inappropriate platforms/unix/vm/{glibc.h,sunos.h} From noreply at github.com Tue Oct 27 18:11:34 2020 From: noreply at github.com (Eliot Miranda) Date: Tue, 27 Oct 2020 11:11:34 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] c3f4c2: But libmpeg does not include sqPlatformSpecific.h ... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: c3f4c20a157b953772beff4a53aa5669fde45bbe https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/c3f4c20a157b953772beff4a53aa5669fde45bbe Author: Eliot Miranda Date: 2020-10-27 (Tue, 27 Oct 2020) Changed paths: M platforms/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3io.h Log Message: ----------- But libmpeg does not include sqPlatformSpecific.h so explicitly define fseek as _fseeki64 in mpeg3io.h. From Yoshiki.Ohshima at acm.org Tue Oct 27 18:14:29 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Tue, 27 Oct 2020 11:14:29 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Thanks! Maybe I should not have sent a separate email to Eliot ^^; On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier < nicolas.cellier.aka.nice at gmail.com> wrote: > > Ah too late, Eliot was faster, hit the pull request next time :) > > Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < > nicolas.cellier.aka.nice at gmail.com> a écrit : > >> Hi Yoshiki, >> what you could do is >> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since we >> have a working workaround now >> 2) just create a pull request from the github web interface (that's >> rather easy) >> It will be very easy for us to integrate (one click), and we'll keep your >> authorship. >> >> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima >> a écrit : >> >>> >>> I have a branch on a clone on github: >>> >>> >>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>> >>> It might be easier to pull from this? Separately, I'll mail you >>> sqUnixX11.c. >>> >>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda >>> wrote: >>> >>>> >>>> Hi Yoshiki, >>>> >>>> on my Mac patch isn't smart enough to decode a git diff. Can you >>>> just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll >>>> integrate? Thanks! >>>> >>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima < >>>> Yoshiki.Ohshima at acm.org> wrote: >>>> >>>>> >>>>> The previous one was just a hack but I think I found the real problem. >>>>> It was about the variable symbolic, that gets symbolic key code *when* it >>>>> is needed has to be zero'ed out when it is not needed. >>>>> >>>>> The diff is attached... I'll a make pull request if that helps. >>>>> >>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>> >>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack >>>>>> I did was like this: >>>>>> >>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>>> >>>>>> index 268593673..bfb57257b 100644 >>>>>> >>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>> >>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>> >>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, >>>>>> sqInt stNameIndex, int sqNameLeng >>>>>> >>>>>> #undef sqFTruncate >>>>>> >>>>>> /* sqFTruncate should return 0 on success, ftruncate does also */ >>>>>> >>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>> >>>>>> -#define ftell(s) ftello(s) >>>>>> >>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>> >>>>>> +// #define ftell(s) ftello(s) >>>>>> >>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>> >>>>>> >>>>>> #if defined(__GNUC__) >>>>>> >>>>>> # if !defined(VM_LABEL) >>>>>> >>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>> >>>>>> index d62b05f40..e1c14a021 100644 >>>>>> >>>>>> --- a/spur64src/vm/cogit.c >>>>>> >>>>>> +++ b/spur64src/vm/cogit.c >>>>>> >>>>>> @@ -6,6 +6,8 @@ >>>>>> >>>>>> # define SysV 1 >>>>>> >>>>>> #endif >>>>>> >>>>>> >>>>>> +#define __arm64__ >>>>>> >>>>>> + >>>>>> >>>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>>>> >>>>>> >>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>> >>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>> >>>>>>> And I tried a few more things by checking out the last release tag >>>>>>> 202003021730 or try opensmalltalk-vm/build. >>>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts did not >>>>>>> work. For the latter got this error: >>>>>>> >>>>>>> In file included from /usr/include/features.h:424, >>>>>>> >>>>>>> from /usr/include/pthread.h:21, >>>>>>> >>>>>>> from >>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>> >>>>>>> from >>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>> >>>>>>> from >>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>> >>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >>>>>>> >>>>>>> extern int __REDIRECT (fseeko, >>>>>>> >>>>>>> ^~~~~~~~~~ >>>>>>> >>>>>>> In file included from >>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>> >>>>>>> from >>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>> >>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>>> note: previous declaration \ >>>>>>> >>>>>>> of ‘fseeko’ was here >>>>>>> >>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>> >>>>>>> ^~~~~~ >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>> >>>>>>>> Hi Eliot, >>>>>>>> >>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>>>>>> following error. I think I followed the steps in the instructions, >>>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>> >>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error >>>>>>>> As yet no Cogit implementation appears to exist for your platform. >>>>>>>> >>>>>>>> # error As yet no Cogit implementation appears to exist for your >>>>>>>> platform. >>>>>>>> >>>>>>>> ^~~~~ >>>>>>>> >>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error >>>>>>>> Consider implementing it, starting by adding a subclass of >>>>>>>> CogAbstractInstruction. >>>>>>>> >>>>>>>> # error Consider implementing it, starting by adding a subclass >>>>>>>> of CogAbstractInstruction. >>>>>>>> >>>>>>>> ^~~~~ >>>>>>>> >>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>> >>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> Hi Yoshiki, >>>>>>>>> >>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> I heard that people got a new problem in inputting Japanese text >>>>>>>>>> into Scratch 1.4 running on Raspberry Pi OS after, or around the version >>>>>>>>>> 2020-08-20. I would like to take a look at it but it might involve >>>>>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>>>>> >>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to date >>>>>>>>>> and straightforward? Can people point me to the right point to start? >>>>>>>>>> >>>>>>>>> >>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run >>>>>>>>> ./mvm >>>>>>>>> >>>>>>>>> _,,,^..^,,,_ >>>>>>>>> best, Eliot >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> -- Yoshiki >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- Yoshiki >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> -- Yoshiki >>>>>> >>>>>> >>>>> >>>>> -- >>>>> -- Yoshiki >>>>> >>>>> >>>> >>>> -- >>>> _,,,^..^,,,_ >>>> best, Eliot >>>> >>> >>> >>> -- >>> -- Yoshiki >>> >>> -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Tue Oct 27 18:42:56 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue, 27 Oct 2020 11:42:56 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima wrote: > > Thanks! Maybe I should not have sent a separate email to Eliot ^^; > Don't sweat it :-) Fixes gratefully received :-) Thanks *very* much for attending to the input issue. Much appreciated. > > On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier < > nicolas.cellier.aka.nice at gmail.com> wrote: > >> >> Ah too late, Eliot was faster, hit the pull request next time :) >> >> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < >> nicolas.cellier.aka.nice at gmail.com> a écrit : >> >>> Hi Yoshiki, >>> what you could do is >>> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since we >>> have a working workaround now >>> 2) just create a pull request from the github web interface (that's >>> rather easy) >>> It will be very easy for us to integrate (one click), and we'll keep >>> your authorship. >>> >>> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima >>> a écrit : >>> >>>> >>>> I have a branch on a clone on github: >>>> >>>> >>>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>>> >>>> It might be easier to pull from this? Separately, I'll mail you >>>> sqUnixX11.c. >>>> >>>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda >>>> wrote: >>>> >>>>> >>>>> Hi Yoshiki, >>>>> >>>>> on my Mac patch isn't smart enough to decode a git diff. Can you >>>>> just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll >>>>> integrate? Thanks! >>>>> >>>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima < >>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>> >>>>>> >>>>>> The previous one was just a hack but I think I found the real >>>>>> problem. It was about the variable symbolic, that gets symbolic key code >>>>>> *when* it is needed has to be zero'ed out when it is not needed. >>>>>> >>>>>> The diff is attached... I'll a make pull request if that helps. >>>>>> >>>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>> >>>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack >>>>>>> I did was like this: >>>>>>> >>>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>> >>>>>>> index 268593673..bfb57257b 100644 >>>>>>> >>>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>> >>>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>> >>>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, >>>>>>> sqInt stNameIndex, int sqNameLeng >>>>>>> >>>>>>> #undef sqFTruncate >>>>>>> >>>>>>> /* sqFTruncate should return 0 on success, ftruncate does also */ >>>>>>> >>>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>>> >>>>>>> -#define ftell(s) ftello(s) >>>>>>> >>>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>>> >>>>>>> +// #define ftell(s) ftello(s) >>>>>>> >>>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>>> >>>>>>> >>>>>>> #if defined(__GNUC__) >>>>>>> >>>>>>> # if !defined(VM_LABEL) >>>>>>> >>>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>>> >>>>>>> index d62b05f40..e1c14a021 100644 >>>>>>> >>>>>>> --- a/spur64src/vm/cogit.c >>>>>>> >>>>>>> +++ b/spur64src/vm/cogit.c >>>>>>> >>>>>>> @@ -6,6 +6,8 @@ >>>>>>> >>>>>>> # define SysV 1 >>>>>>> >>>>>>> #endif >>>>>>> >>>>>>> >>>>>>> +#define __arm64__ >>>>>>> >>>>>>> + >>>>>>> >>>>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>>>>> >>>>>>> >>>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>>> >>>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>> >>>>>>>> And I tried a few more things by checking out the last release tag >>>>>>>> 202003021730 or try opensmalltalk-vm/build. >>>>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts did not >>>>>>>> work. For the latter got this error: >>>>>>>> >>>>>>>> In file included from /usr/include/features.h:424, >>>>>>>> >>>>>>>> from /usr/include/pthread.h:21, >>>>>>>> >>>>>>>> from >>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>>> >>>>>>>> from >>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>> >>>>>>>> from >>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>> >>>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >>>>>>>> >>>>>>>> extern int __REDIRECT (fseeko, >>>>>>>> >>>>>>>> ^~~~~~~~~~ >>>>>>>> >>>>>>>> In file included from >>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>> >>>>>>>> from >>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>> >>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>>>> note: previous declaration \ >>>>>>>> >>>>>>>> of ‘fseeko’ was here >>>>>>>> >>>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>> >>>>>>>> ^~~~~~ >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>> >>>>>>>>> Hi Eliot, >>>>>>>>> >>>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>>>>>>> following error. I think I followed the steps in the instructions, >>>>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>>> >>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error >>>>>>>>> As yet no Cogit implementation appears to exist for your platform. >>>>>>>>> >>>>>>>>> # error As yet no Cogit implementation appears to exist for your >>>>>>>>> platform. >>>>>>>>> >>>>>>>>> ^~~~~ >>>>>>>>> >>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error >>>>>>>>> Consider implementing it, starting by adding a subclass of >>>>>>>>> CogAbstractInstruction. >>>>>>>>> >>>>>>>>> # error Consider implementing it, starting by adding a subclass >>>>>>>>> of CogAbstractInstruction. >>>>>>>>> >>>>>>>>> ^~~~~ >>>>>>>>> >>>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>>> >>>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Hi Yoshiki, >>>>>>>>>> >>>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> I heard that people got a new problem in inputting Japanese text >>>>>>>>>>> into Scratch 1.4 running on Raspberry Pi OS after, or around the version >>>>>>>>>>> 2020-08-20. I would like to take a look at it but it might involve >>>>>>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>>>>>> >>>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to date >>>>>>>>>>> and straightforward? Can people point me to the right point to start? >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run >>>>>>>>>> ./mvm >>>>>>>>>> >>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>> best, Eliot >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- Yoshiki >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> -- Yoshiki >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- Yoshiki >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> -- Yoshiki >>>>>> >>>>>> >>>>> >>>>> -- >>>>> _,,,^..^,,,_ >>>>> best, Eliot >>>>> >>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>>> > > -- > -- Yoshiki > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.cellier.aka.nice at gmail.com Tue Oct 27 22:39:03 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue, 27 Oct 2020 23:39:03 +0100 Subject: [Vm-dev] CI status In-Reply-To: <53D4A481-1BFE-4A25-80E7-91EDC3D7F6A9@rowledge.org> References: <16B92539-2604-4D9E-8C23-A50179B9543B@gmail.com> <53D4A481-1BFE-4A25-80E7-91EDC3D7F6A9@rowledge.org> Message-ID: Le mar. 27 oct. 2020 à 19:02, tim Rowledge a écrit : > > > > > On 2020-10-27, at 1:33 AM, Nicolas Cellier < > nicolas.cellier.aka.nice at gmail.com> wrote: > > > > No, it's an ubuntu 16: > > > > $ uname -a > > Linux ubuntu 4.4.0-193-generic #224-Ubuntu SMP Tue Oct 6 17:15:28 UTC > 2020 x86_64 x86_64 x86_64 GNU/Linux > > > > I hopefully have the correct setup for authorizing thread priority > > > > $ cat /etc/security/limits.d/squeak.conf > > * hard rtprio 2 > > * soft rtprio 2 > > > > I have no warning in the console telling that "pthread_setschedparam > failed"... > > > > So I don't know what's going on. Can someone reproduce? > > Actually yeah, kinda. > > I have a linux i7 box I mostly use to run an ancient VW product on. It's a > recent Ubuntu 18.0.4 download with that horrible xfce ui stuff (really, > what were they thinking). Aside from many other faults it (mis)works with > VNC in annoying ways tha mean it frequently stops sharing the copy/paste > buffer. > > Anyway. > > uname -a tells me (and I can't paste it, of course!) > 4.15.0-101generic #102-Ubuntu SMP etc etc > I have run the limits.d set up several times and the file is ok. And yes, > I have rebooted plenty of times. > > It *never* works to make squeak happy. Did I mention that Ubuntu is not > very good? > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > A computer's attention span is only as long as its extension cord. > > > Hi Tim, what is the result on that box with threaded heartbeat VM of: [SUnitToolBuilderTests new testHandlingNotification] timeToRun. If it is more than 5000 ms, then you would confirm the problem that I encounter. This testHandlingNotification is repeating 10 loops with a 200ms delay wait. The problem I've got with threaded heartbeat VM is that first 5 delays run normally, but next 5 will last for 1 second instead of 200ms... This is probably what happens on the CI server too (the test times out and CI fails). -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Wed Oct 28 00:18:25 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 28 Oct 2020 00:18:25 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2856.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2856.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2856 Author: eem Time: 27 October 2020, 5:18:12.906826 pm UUID: b69f3483-0563-40a4-9aab-a408455f740f Ancestors: VMMaker.oscog-eem.2855 CogAbstractInstruction: follow the format when printing an instruction, hence avoiding printing garbage operands from previous compilations. CoInterpreterMT: make the processor initialization not change the stack range of processor 0/threadIndex 0 Slang: handle SmartSyntaxPlugin simulation for the WordsOrShorts type (now used in the SoundPlugin). =============== Diff against VMMaker.oscog-eem.2855 =============== Item was changed: ----- Method: CoInterpreterMT>>cStackRangeForThreadIndex: (in category 'simulation') ----- cStackRangeForThreadIndex: threadIndex "Each simulated processor thread gets 4k of the rump C stack. The top-most section is reserved for in-memory variables such as vmOwnerLock." | top | ^(threadIndex between: 1 and: cogThreadManager maxNumThreads) ifTrue: + [top := self rumpCStackAddress - (threadIndex - 1 * RumpCStackSize). - [top := self rumpCStackAddress - (threadIndex * RumpCStackSize). top - RumpCStackSize + 1 to: top]! Item was changed: ----- Method: CoInterpreterMT>>initializeProcessorForThreadIndex: (in category 'simulation') ----- initializeProcessorForThreadIndex: threadIndex "Each simulated processor thread gets 4k of the rump C stack." + threadIndex > 1 ifTrue: + [cogit initializeProcessorStack: (self cStackRangeForThreadIndex: threadIndex) last]! - cogit initializeProcessorStack: (self cStackRangeForThreadIndex: threadIndex) last! Item was changed: ----- Method: CogAbstractInstruction>>printStateOn: (in category 'printing') ----- printStateOn: aStream | opcodeName orneryOperands format | "Smalltalk-side only" opcode ifNil: [^self]. aStream space; nextPut: $(; nextPutAll: (opcodeName := self class nameForOpcode: opcode). orneryOperands := operands isCObjectAccessor ifTrue: [operands object] ifFalse: [operands]. format := ((CogRTLOpcodes classPool includesKey: opcodeName) ifTrue: [CogRTLOpcodes] ifFalse: [self class]) printFormatForOpcodeName: opcodeName. + (format ifNil: [orneryOperands] ifNotNil: [orneryOperands first: format size]) withIndexDo: - orneryOperands withIndexDo: [:operand :index| operand ifNotNil: [aStream space. index >= (orneryOperands identityIndexOf: nil ifAbsent: [orneryOperands size + 1]) ifTrue: [aStream print: index - 1; nextPut: $:]. (format notNil and: ['rf' includes: (format at: index ifAbsent: $-)]) ifTrue: [aStream nextPutAll: ((format at: index) = $r ifTrue: [self nameForRegister: operand] ifFalse: [self nameForFPRegister: operand])] ifFalse: [| operandNameOrNil | operandNameOrNil := operand isInteger ifTrue: [(cogit coInterpreter lookupAddress: operand) ifNil: [objectMemory lookupAddress: operand]]. operandNameOrNil ifNotNil: [aStream nextPut: ${]. aStream print: operand. (operand isInteger and: [operand > 16 and: [opcode ~= Label]]) ifTrue: [objectMemory wordSize = 8 ifTrue: [(operand allMask: 1 << 63) ifTrue: [aStream nextPut: $/; print: operand signedIntFromLong64]] ifFalse: [(operand allMask: 1 << 31) ifTrue: [aStream nextPut: $/; print: operand signedIntFromLong]]. aStream nextPut: $/. operand printOn: aStream base: 16. operandNameOrNil ifNotNil: [aStream nextPut: $=; nextPutAll: operandNameOrNil; nextPut: $}]]]]]. machineCodeSize ifNotNil: [(machineCodeSize between: 1 and: machineCode size) ifTrue: [0 to: machineCodeSize - 1 by: self codeGranularity do: [:i| aStream space. (self machineCodeAt: i) ifNil: [aStream nextPut: $.] ifNotNil: [:mc| mc isInteger ifTrue: [mc printOn: aStream base: 16] ifFalse: [mc printOn: aStream]]]]]. address ifNotNil: [aStream space; nextPut: $@. address printOn: aStream base: 16]. aStream nextPut: $)! Item was changed: ----- Method: SmartSyntaxPluginSimulator>>ccgValBlock: (in category 'simulation') ----- ccgValBlock: aString ^aString caseOf: { ['isBytes'] -> [ [:oop| interpreterProxy success: (interpreterProxy isBytes: oop). oop]]. ['isShorts'] -> [ [:oop| interpreterProxy success: (interpreterProxy isShorts: oop). oop]]. ['isWords'] -> [ [:oop| interpreterProxy success: (interpreterProxy isWords: oop). oop]]. ['isLong64s'] -> [ [:oop| interpreterProxy success: (interpreterProxy isLong64s: oop). oop]]. ['isWordsOrBytes'] -> [ [:oop| interpreterProxy success: (interpreterProxy isWordsOrBytes: oop). oop]]. + ['isIndexable'] -> [ [:oop| - ['isIndexable'] -> [ [:oop| interpreterProxy success: (interpreterProxy isIndexable: oop). + oop]]. + ['isWordsOrShorts'] -> [ [:oop| + interpreterProxy success: (interpreterProxy isWordsOrShorts: oop). oop]] }! From builds at travis-ci.org Wed Oct 28 02:46:28 2020 From: builds at travis-ci.org (Travis CI) Date: Wed, 28 Oct 2020 02:46:28 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2282 (Cog - e565f94) In-Reply-To: Message-ID: <5f98db8435961_13faae8dd428018075e@travis-tasks-cb988dd6-bznk4.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2282 Status: Still Failing Duration: 8 hrs, 40 mins, and 28 secs Commit: e565f94 (Cog) Author: Eliot Miranda Message: Change all uses of fseek/ftell into uses either of fseeko/ftello, or, if it is known that the code is being compiled for mingw/MSVC, to _fseeki64/_ftelli64. Nuke the useless and inappropriate platforms/unix/vm/{glibc.h,sunos.h} View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/c99b1433a12e...e565f947da51 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/739374931?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From squeak-dev-noreply at lists.squeakfoundation.org Wed Oct 28 04:00:42 2020 From: squeak-dev-noreply at lists.squeakfoundation.org (squeak-dev-noreply at lists.squeakfoundation.org) Date: Wed, 28 Oct 2020 04:00:42 0000 Subject: [Vm-dev] OSProcessPlugin: VMConstruction-Plugins-OSProcessPlugin.oscog-eem.70.mcz Message-ID: Eliot Miranda uploaded a new version of VMConstruction-Plugins-OSProcessPlugin to project OSProcessPlugin: http://www.squeaksource.com/OSProcessPlugin/VMConstruction-Plugins-OSProcessPlugin.oscog-eem.70.mcz ==================== Summary ==================== Name: VMConstruction-Plugins-OSProcessPlugin.oscog-eem.70 Author: eem Time: 27 October 2020, 9:00:40.363481 pm UUID: dd0d175b-da76-4776-a015-bab0d0a4673e Ancestors: VMConstruction-Plugins-OSProcessPlugin.oscog-eem.69 Get the UnixOSProcessPlugin to simulate correctly environmentAtAsType:, the innards of primitiveEnvironmentAt[AsBytes] From builds at travis-ci.org Wed Oct 28 06:11:58 2020 From: builds at travis-ci.org (Travis CI) Date: Wed, 28 Oct 2020 06:11:58 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2283 (Cog - c3f4c20) In-Reply-To: Message-ID: <5f990badcc7bd_13ffcd1cd4304731fd@travis-tasks-74d5c4ccff-4p7c8.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2283 Status: Still Failing Duration: 10 hrs, 35 mins, and 35 secs Commit: c3f4c20 (Cog) Author: Eliot Miranda Message: But libmpeg does not include sqPlatformSpecific.h so explicitly define fseek as _fseeki64 in mpeg3io.h. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/e565f947da51...c3f4c20a157b View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/739377178?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Wed Oct 28 08:17:46 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 28 Oct 2020 08:17:46 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2857.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2857.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2857 Author: eem Time: 28 October 2020, 1:17:30.27409 am UUID: 4f72a34b-cd5d-4e2c-9eae-45498349bad6 Ancestors: VMMaker.oscog-eem.2856 IA32ABIPlugin: make most of the simple acessors simulate. This makes it possible to simulate the simulator ;-) Refactor sizeFieldOfAlien:, putting it in the object memories, allowing their simulators to cast the size field to a signed integer of the right size. SImulation: make SmartSyntaxPluginSimulator>>computeSignatureMap inheritance savvy. Slang: generate neater code for pointer indirection. Instead of indexing with zero, dereference with *. Fix a bug in CoInterpreterMT>>wakeHighestPriority. =============== Diff against VMMaker.oscog-eem.2856 =============== Item was changed: ----- Method: CCodeGenerator>>generateAt:on:indent: (in category 'C translation') ----- generateAt: msgNode on: aStream indent: level "Generate the C code for this message onto the given stream." + (msgNode args first isConstant + and: [msgNode args first value isZero + and: [msgNode receiver isSend + and: [(#(cCoerceSimple:to: cCoerce:to:) includes: msgNode receiver selector) + and: [msgNode receiver args last value last == $*]]]]) + ifTrue: + [aStream nextPutAll: '(*'. + msgNode receiver emitCCodeAsExpressionOn: aStream level: 0 generator: self. + aStream nextPut: $)] + ifFalse: + [self emitCExpression: msgNode receiver on: aStream. + aStream nextPut: $[. + msgNode args first emitCCodeAsExpressionOn: aStream level: level + 1 generator: self. + aStream nextPut: $]]! - self emitCExpression: msgNode receiver on: aStream. - aStream nextPut: $[. - msgNode args first emitCCodeAsExpressionOn: aStream level: level + 1 generator: self. - aStream nextPut: $]! Item was changed: ----- Method: CCodeGenerator>>generateAtPut:on:indent: (in category 'C translation') ----- generateAtPut: msgNode on: aStream indent: level "Generate the C code for this message onto the given stream." + (msgNode args first isConstant + and: [msgNode args first value isZero + and: [msgNode receiver isSend + and: [(#(cCoerceSimple:to: cCoerce:to:) includes: msgNode receiver selector) + and: [msgNode receiver args last value last == $*]]]]) + ifTrue: + [aStream nextPutAll: '(*'. + msgNode receiver emitCCodeAsExpressionOn: aStream level: 0 generator: self. + aStream nextPutAll: ' = '. + msgNode args last emitCCodeAsExpressionOn: aStream level: 0 generator: self. + aStream nextPut: $)] + ifFalse: + [self emitCExpression: msgNode receiver on: aStream. + aStream nextPut: $[. + msgNode args first emitCCodeAsExpressionOn: aStream level: level + 1 generator: self. + aStream nextPutAll: '] = '. + self emitCExpression: msgNode args last on: aStream]! - self emitCExpression: msgNode receiver on: aStream. - aStream nextPut: $[. - msgNode args first emitCCodeAsExpressionOn: aStream level: level + 1 generator: self. - aStream nextPutAll: '] = '. - self emitCExpression: msgNode args last on: aStream! Item was changed: ----- Method: CoInterpreterMT>>wakeHighestPriority (in category 'process primitive support') ----- wakeHighestPriority "Return the highest priority process that is ready to run. To save time looking at many empty lists before finding a runnable process the VM maintains a variable holding the highest priority runnable process. If this variable is 0 then the VM does not know the highest priority and must search all lists. Override to answer nil when there is no runnable process instead of aborting. In the threaded VM the abort test is done in transferTo:from: becaue there may be some thread waiting to own the VM. The transfer to the thread shouldn't be done here because not all clients call this in the right context (allowing a longjmp back to the threadSchedulingLoop)." | schedLists p processList proc ctxt | + self externalWriteBackHeadFramePointers. schedLists := objectMemory fetchPointer: ProcessListsIndex ofObject: self schedulerPointer. p := highestRunnableProcessPriority = 0 ifTrue: [objectMemory numSlotsOf: schedLists] ifFalse: [highestRunnableProcessPriority]. [(p := p - 1) >= 0] whileTrue: [processList := objectMemory fetchPointer: p ofObject: schedLists. [self isEmptyList: processList] whileFalse: ["Only answer processes with a runnable suspendedContext. Discard those that aren't; the VM would crash otherwise." proc := self removeFirstLinkOfList: processList. ctxt := objectMemory fetchPointer: SuspendedContextIndex ofObject: proc. (self isLiveContext: ctxt) ifTrue: [highestRunnableProcessPriority := p + 1. ^proc]. self cppIf: SPURVM ifTrue: ["This is uncommon, so we can deal with forwarders here instead of assuming there isn't." (self isOopForwarded: ctxt) ifTrue: [ctxt := self fixFollowedField: SuspendedContextIndex ofObject: proc withInitialValue: ctxt]. (self isLiveContext: ctxt) ifTrue: [highestRunnableProcessPriority := p + 1. ^proc].]. self warning: 'evicted zombie process from run queue']]. ^nil! Item was changed: ----- Method: IA32ABIPlugin>>primSignedByteAt (in category 'primitives-accessing') ----- primSignedByteAt "Answer the signed 8-bit integer starting at the given byte offset (little endian)." " unsignedByteAt: index ^ " + | byteOffset rcvr startAddr value | - | byteOffset rcvr startAddr addr value valueOop | + - byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 1 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + value := self cCode: [self byteAt: startAddr + byteOffset] + inSmalltalk: [(self alienFor: rcvr at: startAddr) signedByteAt: byteOffset + 1]. + ^interpreterProxy methodReturnInteger: value! - addr := startAddr + byteOffset. - value := self byteAt: addr. - valueOop := interpreterProxy signed32BitIntegerFor: value. - ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primSignedByteAtPut (in category 'primitives-accessing') ----- primSignedByteAtPut "Store a signed integer into 8 bits starting at the given byte offset (little endian)." " signedByteAt: index put: value ^ " + | byteOffset rcvr startAddr value valueOop | - | byteOffset rcvr startAddr addr value valueOop | valueOop := interpreterProxy stackValue: 0. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. rcvr := interpreterProxy stackObjectValue: 2. value := interpreterProxy signed32BitValueOf: valueOop. (interpreterProxy failed or: [value < -128 or: [value > 127]]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 1 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: rcvr) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + self cCode: [self byteAt: startAddr + byteOffset put: value] + inSmalltalk: [(self alienFor: rcvr at: startAddr) signedByteAt: byteOffset + 1 put: value]. - addr := startAddr + byteOffset. - self byteAt: addr put: value. ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primSignedLongAt (in category 'primitives-accessing') ----- primSignedLongAt "Answer the signed 32-bit integer starting at the given byte offset (little endian)." " signedLongAt: index ^ " + | byteOffset rcvr startAddr value | - | byteOffset rcvr startAddr addr value valueOop | byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 4 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + value := self cCode: [self long32At: startAddr + byteOffset] + inSmalltalk: [(self alienFor: rcvr at: startAddr) signedLongAt: byteOffset + 1]. + ^interpreterProxy methodReturnValue: (interpreterProxy signed32BitIntegerFor: value)! - addr := startAddr + byteOffset. - value := self long32At: addr. - valueOop := interpreterProxy signed32BitIntegerFor: value. - ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primSignedLongAtPut (in category 'primitives-accessing') ----- primSignedLongAtPut "Store a signed integer into 32 bits starting at the given byte offset (little endian)." " signedLongAt: index put: value ^ " + | byteOffset rcvr startAddr value valueOop | - | byteOffset rcvr startAddr addr value valueOop | valueOop := interpreterProxy stackValue: 0. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. rcvr := interpreterProxy stackObjectValue: 2. value := interpreterProxy signed32BitValueOf: valueOop. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 4 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: rcvr) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + self cCode: [self long32At: startAddr + byteOffset put: value] + inSmalltalk: [(self alienFor: rcvr at: startAddr) signedLongAt: byteOffset + 1 put: value]. - addr := startAddr + byteOffset. - self long32At: addr put: value. ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primSignedLongLongAt (in category 'primitives-accessing') ----- primSignedLongLongAt "Answer the signed 64-bit integer starting at the given byte offset (little endian)." " signedLongLongAt: index ^ " + | byteOffset rcvr startAddr value | - | byteOffset rcvr startAddr addr valueOop signedlonglongvaluePtr signedlonglongvalue | - - - signedlonglongvaluePtr := 0. - self touch: signedlonglongvaluePtr. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 8 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + value := self cCode: [(self cCoerce: startAddr + byteOffset to: #'long long *') at: 0] + inSmalltalk: [(self alienFor: rcvr at: startAddr) signedLongLongAt: byteOffset + 1]. + ^interpreterProxy methodReturnValue: (interpreterProxy signed64BitIntegerFor: value)! - addr := startAddr + byteOffset. - signedlonglongvaluePtr := self cCoerce: addr to: 'long long*'. - signedlonglongvalue := self cCode: '*signedlonglongvaluePtr'. - valueOop := interpreterProxy signed64BitIntegerFor: signedlonglongvalue. - ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primSignedLongLongAtPut (in category 'primitives-accessing') ----- primSignedLongLongAtPut "Store a signed integer into 64 bits starting at the given byte offset (little endian)." " signedLongLongAt: index put: value ^ " + | byteOffset rcvr startAddr valueOop value | - | byteOffset rcvr startAddr addr valueOop signedlonglongvalue signedlonglongvaluePtr | - - - signedlonglongvaluePtr := 0. - self touch: signedlonglongvaluePtr. valueOop := interpreterProxy stackValue: 0. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. rcvr := interpreterProxy stackObjectValue: 2. + value := interpreterProxy signed64BitValueOf: valueOop. - signedlonglongvalue := interpreterProxy signed64BitValueOf: valueOop. - self touch: signedlonglongvalue. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 8 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: rcvr) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + self cCode: [(self cCoerce: startAddr + byteOffset to: #'long long *') at: 0 put: value] + inSmalltalk: [(self alienFor: rcvr at: startAddr) signedLongLongAt: byteOffset + 1 put: value]. - addr := startAddr + byteOffset. - signedlonglongvaluePtr := self cCoerce: addr to: 'long long*'. - self cCode: '*signedlonglongvaluePtr = signedlonglongvalue'. ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primSignedShortAt (in category 'primitives-accessing') ----- primSignedShortAt "Answer the signed 32-bit integer starting at the given byte offset (little endian)." " signedShortAt: index ^ " + | byteOffset rcvr startAddr value | - | byteOffset rcvr startAddr addr value valueOop | + - byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 2 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + value := self cCode: [self shortAt: startAddr + byteOffset] + inSmalltalk: [(self alienFor: rcvr at: startAddr) signedShortAt: byteOffset + 1]. + ^interpreterProxy methodReturnInteger: value! - addr := startAddr + byteOffset. - value := self shortAt: addr. - valueOop := interpreterProxy signed32BitIntegerFor: value. - ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primSignedShortAtPut (in category 'primitives-accessing') ----- primSignedShortAtPut "Store a signed integer into 16 bits starting at the given byte offset (little endian)." " signedShortAt: index put: value ^ " + | byteOffset rcvr startAddr value valueOop | - | byteOffset rcvr startAddr addr value valueOop | valueOop := interpreterProxy stackValue: 0. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. rcvr := interpreterProxy stackObjectValue: 2. value := interpreterProxy signed32BitValueOf: valueOop. (interpreterProxy failed or: [value < -32768 or: [value > 32767]]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 2 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: rcvr) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + self cCode: [self shortAt: startAddr + byteOffset put: value] + inSmalltalk: [(self alienFor: rcvr at: startAddr) signedShortAt: byteOffset + 1 put: value]. - addr := startAddr + byteOffset. - self shortAt: addr put: value. ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primSizeFieldPut (in category 'primitives-accessing') ----- primSizeFieldPut "Store a signed integer into the size field (the first 32 bit field; little endian)." " sizeFieldPut: value ^ " | rcvr value valueOop | valueOop := interpreterProxy stackValue: 0. rcvr := interpreterProxy stackValue: 1. value := interpreterProxy signedMachineIntegerValueOf: valueOop. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. + interpreterProxy wordSize = 8 - (self cppIf: interpreterProxy bytesPerOop = 8 ifTrue: [self longAt: rcvr + interpreterProxy baseHeaderSize put: value signedIntToLong64] + ifFalse: [self longAt: rcvr + interpreterProxy baseHeaderSize put: value signedIntToLong]. - ifFalse: [self longAt: rcvr + interpreterProxy baseHeaderSize put: value signedIntToLong]). ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedByteAt (in category 'primitives-accessing') ----- primUnsignedByteAt "Answer the unsigned 8-bit integer starting at the given byte offset (little endian)." " unsignedByteAt: index ^ " + | byteOffset rcvr startAddr value | - | byteOffset rcvr startAddr addr value valueOop | byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 1 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + value := self cCode: [self byteAt: startAddr + byteOffset] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedByteAt: byteOffset + 1]. + ^interpreterProxy methodReturnInteger: value! - addr := startAddr + byteOffset. - value := self byteAt: addr. - valueOop := interpreterProxy positive32BitIntegerFor: value. - ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedByteAtPut (in category 'primitives-accessing') ----- primUnsignedByteAtPut "Store an unsigned integer into 8 bits starting at the given byte offset (little endian)." " unsignedByteAt: index put: value ^ " + | byteOffset rcvr startAddr value valueOop | - | byteOffset rcvr startAddr addr value valueOop | valueOop := interpreterProxy stackValue: 0. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. rcvr := interpreterProxy stackObjectValue: 2. value := interpreterProxy positive32BitValueOf: valueOop. (interpreterProxy failed or: [value > 255]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 1 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: rcvr) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + self cCode: [self byteAt: startAddr + byteOffset put: value] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedByteAt: byteOffset + 1 put: value]. - addr := startAddr + byteOffset. - self byteAt: addr put: value. ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedLongAt (in category 'primitives-accessing') ----- primUnsignedLongAt "Answer the unsigned 32-bit integer starting at the given byte offset (little endian)." " unsignedLongAt: index ^ " + | byteOffset rcvr startAddr value | - | byteOffset rcvr startAddr addr value valueOop | byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 4 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + value := self cCode: [self long32At: startAddr + byteOffset] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedLongAt: byteOffset + 1]. + ^interpreterProxy methodReturnValue: (interpreterProxy positive32BitIntegerFor: value)! - addr := startAddr + byteOffset. - value := self long32At: addr. - valueOop := interpreterProxy positive32BitIntegerFor: value. - ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedLongAtPut (in category 'primitives-accessing') ----- primUnsignedLongAtPut "Store an unsigned integer into 32 bits starting at the given byte offset (little endian)." " unsignedLongAt: index put: value ^ " + | byteOffset rcvr startAddr value valueOop | - | byteOffset rcvr startAddr addr value valueOop | valueOop := interpreterProxy stackValue: 0. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. rcvr := interpreterProxy stackObjectValue: 2. value := interpreterProxy positive32BitValueOf: valueOop. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 4 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: rcvr) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + self cCode: [self long32At: startAddr + byteOffset put: value] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedLongAt: byteOffset + 1 put: value]. - addr := startAddr + byteOffset. - self long32At: addr put: value. ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedLongLongAt (in category 'primitives-accessing') ----- primUnsignedLongLongAt "Answer the unsigned 64-bit integer starting at the given byte offset (little endian)." "unsignedLongLongAt: index ^ " + | byteOffset rcvr startAddr value | - | byteOffset rcvr startAddr addr valueOop unsignedlonglongvaluePtr unsignedlonglongvalue | - - - unsignedlonglongvaluePtr := 0. - self touch: unsignedlonglongvaluePtr. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 8 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + value := self cCode: [(self cCoerce: startAddr + byteOffset to: #'unsigned long long *') at: 0] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedLongLongAt: byteOffset + 1]. + ^interpreterProxy methodReturnValue: (interpreterProxy positive64BitIntegerFor: value)! - addr := startAddr + byteOffset. - unsignedlonglongvaluePtr := self cCoerce: addr to: 'unsigned long long*'. - unsignedlonglongvalue := self cCode: '*unsignedlonglongvaluePtr'. - valueOop := interpreterProxy positive64BitIntegerFor: unsignedlonglongvalue. - ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedLongLongAtPut (in category 'primitives-accessing') ----- primUnsignedLongLongAtPut "Store a signed integer into 64 bits starting at the given byte offset (little endian)." " unsignedLongLongAt: index put: value ^ " + | byteOffset rcvr startAddr valueOop value | - | byteOffset rcvr startAddr addr valueOop unsignedlonglongvalue unsignedlonglongvaluePtr | - - - unsignedlonglongvaluePtr := 0. - self touch: unsignedlonglongvaluePtr. - valueOop := interpreterProxy stackValue: 0. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. rcvr := interpreterProxy stackObjectValue: 2. + value := interpreterProxy positive64BitValueOf: valueOop. - unsignedlonglongvalue := interpreterProxy positive64BitValueOf: valueOop. - self touch: unsignedlonglongvalue. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 8 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: rcvr) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + self cCode: [(self cCoerce: startAddr + byteOffset to: #'unsigned long long *') at: 0 put: value] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedLongLongAt: byteOffset + 1 put: value]. - addr := startAddr + byteOffset. - unsignedlonglongvaluePtr := self cCoerce: addr to: 'unsigned long long*'. - self cCode: '*unsignedlonglongvaluePtr = unsignedlonglongvalue'. ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedShortAt (in category 'primitives-accessing') ----- primUnsignedShortAt "Answer the unsigned 16-bit integer starting at the given byte offset (little endian)." " unsignedShortAt: index ^ " + | byteOffset rcvr startAddr value | - | byteOffset rcvr startAddr addr value valueOop | byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 2 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + value := self cCode: [self shortAt: startAddr + byteOffset] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedShortAt: byteOffset + 1]. + ^interpreterProxy methodReturnInteger: value! - addr := startAddr + byteOffset. - value := self shortAt: addr. - valueOop := interpreterProxy positive32BitIntegerFor: value. - ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedShortAtPut (in category 'primitives-accessing') ----- primUnsignedShortAtPut "Store an unsigned integer into 16 bits starting at the given byte offset (little endian)." " unsignedShortAt: index put: value ^ " + | byteOffset rcvr startAddr value valueOop | - | byteOffset rcvr startAddr addr value valueOop | valueOop := interpreterProxy stackValue: 0. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. rcvr := interpreterProxy stackObjectValue: 2. value := interpreterProxy positive32BitValueOf: valueOop. (interpreterProxy failed or: [value > 65535]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: 2 inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: rcvr) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + self cCode: [self shortAt: startAddr + byteOffset put: value] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedShortAt: byteOffset + 1 put: value]. - addr := startAddr + byteOffset. - self shortAt: addr put: value. ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedWordAt (in category 'primitives-accessing') ----- primUnsignedWordAt "Answer the unsigned word starting at the given byte offset (little endian)." " unsignedWordAt: index ^ " + | byteOffset rcvr startAddr value | - | byteOffset rcvr startAddr addr value valueOop | byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 0) - 1. rcvr := interpreterProxy stackObjectValue: 1. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: interpreterProxy bytesPerOop inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + value := self cCode: [self longAt: startAddr + byteOffset] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedWordAt: byteOffset + 1]. + ^interpreterProxy methodReturnValue: (interpreterProxy positiveMachineIntegerFor: value)! - addr := startAddr + byteOffset. - value := self longAt: addr. - valueOop := interpreterProxy positiveMachineIntegerFor: value. - ^interpreterProxy methodReturnValue: valueOop! Item was changed: ----- Method: IA32ABIPlugin>>primUnsignedWordAtPut (in category 'primitives-accessing') ----- primUnsignedWordAtPut "Store an unsigned integer into 32 bits starting at the given byte offset (little endian)." " unsignedWordAt: index put: value ^ " + | byteOffset rcvr startAddr value valueOop | - | byteOffset rcvr startAddr addr value valueOop | valueOop := interpreterProxy stackValue: 0. byteOffset := (interpreterProxy stackPositiveMachineIntegerValue: 1) - 1. rcvr := interpreterProxy stackObjectValue: 2. value := interpreterProxy positiveMachineIntegerValueOf: valueOop. interpreterProxy failed ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. (self index: byteOffset length: interpreterProxy bytesPerOop inRange: rcvr) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. (interpreterProxy isOopImmutable: rcvr) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrNoModification]. (startAddr := self startOfData: rcvr) = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + self cCode: [self longAt: startAddr + byteOffset put: value] + inSmalltalk: [(self alienFor: rcvr at: startAddr) unsignedWordAt: byteOffset + 1 put: value]. - addr := startAddr + byteOffset. - self longAt: addr put: value. ^interpreterProxy methodReturnValue: valueOop! Item was added: + ----- Method: IA32ABIPluginSimulator>>alienFor:at: (in category 'simulation support') ----- + alienFor: alienObj at: addr + | size | + size := interpreterProxy sizeFieldOfAlien: alienObj. + size > 0 ifTrue: + [self error: 'cannot easily simulate internal aliens']. + ^Alien forPointer: addr! Item was added: + ----- Method: IA32ABIPluginSimulator>>cCode: (in category 'simulation support') ----- + cCode: thing + "These we want to rewrite into functional simulation code..." + self halt! Item was added: + ----- Method: IA32ABIPluginSimulator>>sizeField: (in category 'simulation support') ----- + sizeField: alienOop + "This way correctly coerces to a signed integer..." + ^interpreterProxy sizeFieldOfAlien: alienOop! Item was changed: ----- Method: InterpreterPlugin>>doesNotUnderstand: (in category 'simulation support') ----- doesNotUnderstand: aMessage "Override doesNotUnderstand: to iuntercept sends of translated primitive selectors. The translated primitives are primitives derived from the primitive methods themselves translating their failure code/method body into Slang code." (self methodAndTypesOrNilForTranslatedPrimitiveSelector: aMessage selector) ifNil: [^super doesNotUnderstand: aMessage] ifNotNil: [:tuple| | method | + "First check the cache for validity; if the last element of the tuple is the actual method - "First check the cache for validity; if the ast element of the tuple is the actual method then the cache is up-to-date. if it is not, the method has changed and should be regenerated." method := tuple last. method == (method methodClass >> method selector) ifFalse: [translatedMethodCache removeKey: aMessage selector. ^self doesNotUnderstand: aMessage]. method := tuple first. tuple second ifNil: [interpreterProxy primitiveFail] ifNotNil: [:types| self tryToRunTranslatedPrimitive: method types: types subsidiaries: tuple third]. (#( compare:with:collated: findFirstInString:inSet:startingAt: findSubstring:in:startingAt:matchTable: hashBytes:startingWith: indexOfAscii:inString:startingAt: translate:from:to:table: compress:toByteArray: decompress:fromByteArray:at:) includes: method selector) ifFalse: [interpreterProxy transcript print: method; cr. interpreterProxy coInterpreter printExternalHeadFrame]. interpreterProxy failed ifTrue: [interpreterProxy transcript nextPutAll: 'WARNING!! Failing translated primitive '; nextPutAll: aMessage selector; nextPutAll: ' implemented by '; nextPutAll: method methodClass name; nextPutAll: '>>'; nextPutAll: method selector; cr; flush]]! Item was changed: ----- Method: InterpreterPlugin>>sizeField: (in category 'alien support') ----- sizeField: alienOop "Answer the size field of an alienOop which is assumed to be an Alien of at least 8 bytes (32-bits) or 16 bytes (64 bits)" + ^interpreterProxy wordSize = 8 + ifTrue: [(interpreterProxy longAt: alienOop + interpreterProxy baseHeaderSize) signedIntFromLong64] + ifFalse: [(interpreterProxy longAt: alienOop + interpreterProxy baseHeaderSize) signedIntFromLong]! - ^self longAt: alienOop + interpreterProxy baseHeaderSize! Item was changed: ----- Method: InterpreterPlugin>>startOfData: (in category 'alien support') ----- startOfData: alienOop "Answer the start of an Alien's data. For direct aliens this is the address of the second field. For indirect and pointer aliens it is what the second field points to." ^(self sizeField: alienOop) > 0 ifTrue: [alienOop + interpreterProxy baseHeaderSize + interpreterProxy bytesPerOop] + ifFalse: [interpreterProxy longAt: alienOop + interpreterProxy baseHeaderSize + interpreterProxy bytesPerOop]! - ifFalse: [self longAt: alienOop + interpreterProxy baseHeaderSize + interpreterProxy bytesPerOop]! Item was changed: ----- Method: InterpreterPrimitives>>isDirectAlien: (in category 'primitive support') ----- isDirectAlien: oop + ^(objectMemory sizeFieldOfAlien: oop) > 0! - ^(self sizeFieldOfAlien: oop) > 0! Item was changed: ----- Method: InterpreterPrimitives>>isIndirectAlien: (in category 'primitive support') ----- isIndirectAlien: oop + ^(objectMemory sizeFieldOfAlien: oop) < 0! - ^(self sizeFieldOfAlien: oop) < 0! Item was changed: ----- Method: InterpreterPrimitives>>isPointerAlien: (in category 'primitive support') ----- isPointerAlien: oop + ^(objectMemory sizeFieldOfAlien: oop) = 0! - ^(self sizeFieldOfAlien: oop) = 0! Item was removed: - ----- Method: InterpreterPrimitives>>sizeFieldOfAlien: (in category 'primitive support') ----- - sizeFieldOfAlien: alienObj - "Answer the first field of alienObj which is assumed to be an Alien of at least 8 bytes" - - ^objectMemory longAt: alienObj + objectMemory baseHeaderSize! Item was changed: ----- Method: InterpreterPrimitives>>sizeOfAlienData: (in category 'primitive support') ----- sizeOfAlienData: oop "Answer the start of the Alien's data or fail if oop is not an Alien." - | size | (self is: oop KindOfClass: (objectMemory splObj: ClassAlien)) ifFalse: [self primitiveFailFor: PrimErrBadArgument. ^0]. + ^(objectMemory sizeFieldOfAlien: oop) abs! - size := self sizeFieldOfAlien: oop. - ^size abs! Item was added: + ----- Method: NewCoObjectMemorySimulator>>sizeFieldOfAlien: (in category 'interpreter access') ----- + sizeFieldOfAlien: alienObj + "Answer the first field of alienObj which is assumed to be an Alien of at least 8 bytes" + + ^(super sizeFieldOfAlien: alienObj) signedIntFromLong! Item was added: + ----- Method: NewObjectMemory>>sizeFieldOfAlien: (in category 'interpreter access') ----- + sizeFieldOfAlien: alienObj + "Answer the first field of alienObj which is assumed to be an Alien of at least 8 bytes" + + ^self longAt: alienObj + self baseHeaderSize! Item was added: + ----- Method: NewObjectMemory>>stackPositiveMachineIntegerValue: (in category 'simulation only') ----- + stackPositiveMachineIntegerValue: offset + "hack around the CoInterpreter/ObjectMemory split refactoring" + + ^coInterpreter stackPositiveMachineIntegerValue: offset! Item was added: + ----- Method: NewObjectMemorySimulator>>sizeFieldOfAlien: (in category 'interpreter access') ----- + sizeFieldOfAlien: alienObj + "Answer the first field of alienObj which is assumed to be an Alien of at least 8 bytes" + + ^(super sizeFieldOfAlien: alienObj) signedIntFromLong! Item was changed: ----- Method: SmartSyntaxPluginSimulator>>computeSignatureMap (in category 'initialize') ----- computeSignatureMap forMap := true. "true only while we compute the signatureMap" signatureMap := Dictionary new. + (pluginClass withAllSuperclasses copyUpTo: SmartSyntaxInterpreterPlugin) do: + [:theClass| + theClass selectorsAndMethodsDo: + [:s :m| + (m messages includesAnyOf: #(primitive: primitive:parameters: primitive:parameters:receiver:)) + ifTrue: [self getPrimitiveSignatureFor: s] + ifFalse: + [(m pragmaAt: #export:) ifNotNil: + [:exportPragma| + (exportPragma argumentAt: 1) ifTrue: + [self computeSignatureFor: s from: { #forMap. s. #(). nil }]]]]]. - pluginClass selectorsAndMethodsDo: - [:s :m| - (m messages includesAnyOf: #(primitive: primitive:parameters: primitive:parameters:receiver:)) - ifTrue: [self getPrimitiveSignatureFor: s] - ifFalse: - [(m pragmaAt: #export:) ifNotNil: - [:exportPragma| - (exportPragma argumentAt: 1) ifTrue: - [self computeSignatureFor: s from: { #forMap. s. #(). nil }]]]]. forMap := false! Item was added: + ----- Method: Spur32BitMMLECoSimulator>>sizeFieldOfAlien: (in category 'interpreter access') ----- + sizeFieldOfAlien: alienObj + "Answer the first field of alienObj which is assumed to be an Alien of at least 8 bytes" + + ^(super sizeFieldOfAlien: alienObj) signedIntFromLong! Item was added: + ----- Method: Spur32BitMMLESimulator>>sizeFieldOfAlien: (in category 'interpreter access') ----- + sizeFieldOfAlien: alienObj + "Answer the first field of alienObj which is assumed to be an Alien of at least 8 bytes" + + ^(super sizeFieldOfAlien: alienObj) signedIntFromLong! Item was added: + ----- Method: Spur64BitMMLECoSimulator>>sizeFieldOfAlien: (in category 'interpreter access') ----- + sizeFieldOfAlien: alienObj + "Answer the first field of alienObj which is assumed to be an Alien of at least 16 bytes" + + ^(super sizeFieldOfAlien: alienObj) signedIntFromLong64! Item was added: + ----- Method: Spur64BitMMLESimulator>>sizeFieldOfAlien: (in category 'interpreter access') ----- + sizeFieldOfAlien: alienObj + "Answer the first field of alienObj which is assumed to be an Alien of at least 16 bytes" + + ^(super sizeFieldOfAlien: alienObj) signedIntFromLong64! Item was added: + ----- Method: SpurMemoryManager>>sizeFieldOfAlien: (in category 'interpreter access') ----- + sizeFieldOfAlien: alienObj + "Answer the first field of alienObj which is assumed to be an Alien of at least 8/16 bytes, depending on word size" + + ^self longAt: alienObj + self baseHeaderSize! Item was added: + ----- Method: SpurMemoryManager>>stackPositiveMachineIntegerValue: (in category 'simulation only') ----- + stackPositiveMachineIntegerValue: offset + "hack around the CoInterpreter/ObjectMemory split refactoring" + + ^coInterpreter stackPositiveMachineIntegerValue: offset! Item was changed: ----- Method: StackInterpreter>>printOop: (in category 'debug printing') ----- printOop: oop | cls fmt lastIndex startIP bytecodesPerLine column | (objectMemory isImmediate: oop) ifTrue: [^self shortPrintOop: oop]. self printHex: oop. (objectMemory addressCouldBeObj: oop) ifFalse: [(oop bitAnd: objectMemory allocationUnit - 1) ~= 0 ifTrue: [^self print: ' is misaligned'; cr]. ((objectMemory isInNewSpace: oop) and: [objectMemory isForwarded: oop]) ifTrue: [self printForwarder: oop]. ^self print: (self whereIs: oop); cr]. (objectMemory isFreeObject: oop) ifTrue: [self print: ' is a free chunk of size '; printNum: (objectMemory sizeOfFree: oop). objectMemory hasSpurMemoryManagerAPI ifTrue: [self print: ' 0th: '; printHex: (objectMemory fetchPointer: 0 ofFreeChunk: oop). objectMemory printHeaderTypeOf: oop]. ^self cr]. (objectMemory isForwarded: oop) ifTrue: [^self printForwarder: oop]. self print: ': a(n) '. self printNameOfClass: (cls := objectMemory fetchClassOfNonImm: oop) count: 5. cls = (objectMemory splObj: ClassFloat) ifTrue: [^self cr; printFloat: (objectMemory dbgFloatValueOf: oop); cr]. fmt := objectMemory formatOf: oop. fmt > objectMemory lastPointerFormat ifTrue: [self print: ' nbytes '; printNum: (objectMemory numBytesOf: oop)]. self cr. (fmt between: objectMemory firstLongFormat and: objectMemory firstCompiledMethodFormat - 1) ifTrue: ["This will answer false if splObj: ClassAlien is nilObject" (self is: oop KindOfClass: (objectMemory splObj: ClassAlien)) ifTrue: + [self print: ' datasize '; printNum: (objectMemory sizeFieldOfAlien: oop). - [self print: ' datasize '; printNum: (self sizeOfAlienData: oop). self print: ((self isIndirectAlien: oop) ifTrue: [' indirect @ '] ifFalse: [(self isPointerAlien: oop) ifTrue: [' pointer @ '] ifFalse: [' direct @ ']]). ^self printHex: (self startOfAlienData: oop) asUnsignedInteger; cr]. (objectMemory isWordsNonImm: oop) ifTrue: [lastIndex := 64 min: ((objectMemory numBytesOf: oop) / objectMemory wordSize). lastIndex > 0 ifTrue: [1 to: lastIndex do: [:index| self space; printHex: (self cCoerceSimple: (objectMemory fetchLong32: index - 1 ofObject: oop) to: #'unsigned int'). (index \\ self elementsPerPrintOopLine) = 0 ifTrue: [self cr]]. (lastIndex \\ self elementsPerPrintOopLine) = 0 ifFalse: [self cr]]. ^self]. ^self printStringOf: oop; cr]. "this is nonsense. apologies." startIP := (objectMemory lastPointerOf: oop) + objectMemory bytesPerOop - objectMemory baseHeaderSize / objectMemory bytesPerOop. lastIndex := 256 min: startIP. lastIndex > 0 ifTrue: [1 to: lastIndex do: [:index| self cCode: [self printHex: (objectMemory fetchPointer: index - 1 ofObject: oop); space] inSmalltalk: [self space; printHex: (objectMemory fetchPointer: index - 1 ofObject: oop); space. self print: (self shortPrint: (objectMemory fetchPointer: index - 1 ofObject: oop))]. (index \\ self elementsPerPrintOopLine) = 0 ifTrue: [self cr]]. (lastIndex \\ self elementsPerPrintOopLine) = 0 ifFalse: [self cr]]. (objectMemory isCompiledMethod: oop) ifFalse: [startIP > 64 ifTrue: [self print: '...'; cr]] ifTrue: [startIP := startIP * objectMemory wordSize + 1. lastIndex := objectMemory lengthOf: oop. lastIndex - startIP > 100 ifTrue: [lastIndex := startIP + 100]. bytecodesPerLine := 8. column := 1. startIP to: lastIndex do: [:index| | byte | column = 1 ifTrue: [self cCode: 'printf("0x%08" PRIxSQPTR ": ", (usqIntptr_t)(oop+BaseHeaderSize+index-1))' inSmalltalk: [self print: (oop+objectMemory baseHeaderSize+index-1) hex; print: ': ']]. byte := objectMemory fetchByte: index - 1 ofObject: oop. self cCode: 'printf(" %02x/%-3d", (int)byte,(int)byte)' inSmalltalk: [self space; print: (byte radix: 16); printChar: $/; printNum: byte]. column := column + 1. column > bytecodesPerLine ifTrue: [column := 1. self cr]]. column = 1 ifFalse: [self cr]]! From commits at source.squeak.org Wed Oct 28 08:18:41 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 28 Oct 2020 08:18:41 0000 Subject: [Vm-dev] VM Maker: VMMakerUI-eem.30.mcz Message-ID: Eliot Miranda uploaded a new version of VMMakerUI to project VM Maker: http://source.squeak.org/VMMaker/VMMakerUI-eem.30.mcz ==================== Summary ==================== Name: VMMakerUI-eem.30 Author: eem Time: 28 October 2020, 1:18:39.037567 am UUID: 691b61b0-31b4-4bb7-9a1b-3ec0f3ecaaf5 Ancestors: VMMakerUI-eem.29 Have the processor inspector delve beneath the MultiProcessor. =============== Diff against VMMakerUI-eem.29 =============== Item was changed: ----- Method: CogProcessorAlienInspector>>coInterpreter: (in category 'initialization') ----- coInterpreter: aCoInterpreter super coInterpreter: aCoInterpreter. + processor := cogit processor nonVirtualProcessor. - processor := cogit processor. registerSelectors := processor registerStateGetters. self computeRegisterMap. windowTitle := nil. self changed: #text; changed: #window! From commits at source.squeak.org Wed Oct 28 08:22:54 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 28 Oct 2020 08:22:54 0000 Subject: [Vm-dev] VM Maker: Cog-eem.414.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.414.mcz ==================== Summary ==================== Name: Cog-eem.414 Author: eem Time: 28 October 2020, 1:22:52.353271 am UUID: 12531e8d-e09b-4057-a626-60006375a14a Ancestors: Cog-eem.413 Write code to stitch the stack together to preserve the continuation when raising the first of a pair of ProcessorSimulationTraps (from ARMv8 load/store pair) outside of the critical section inside MultiProcessor's doesNotUnderstand:. But even though this code looks correct it appears not to work properly. Boris has complained of a simular bug. Hence, let's try and simulate the simulator and see what is happening with this bug. Go some way to making the ProcessorSimulatorPlugins simulate :-) So far implement primitiveNewCPU and primitiveIntegerRegisterState. =============== Diff against Cog-eem.413 =============== Item was added: + ----- Method: BochsIA32Plugin>>alienClass (in category 'simulation support') ----- + alienClass + ^BochsIA32Alien! Item was added: + ----- Method: BochsX64Plugin>>alienClass (in category 'simulation support') ----- + alienClass + ^BochsX64Alien! Item was added: + ----- Method: CogProcessorAlien>>nonVirtualProcessor (in category 'accessing-abstract') ----- + nonVirtualProcessor + ^self! Item was added: + ----- Method: GdbARMv6Plugin>>alienClass (in category 'simulation support') ----- + alienClass + ^GdbARMAlien! Item was added: + ----- Method: GdbARMv8Plugin>>alienClass (in category 'simulation support') ----- + alienClass + ^GdbARMv8Alien! Item was added: + ----- Method: MIPSSimulator>>nonVirtualProcessor (in category 'accessing-abstract') ----- + nonVirtualProcessor + ^self! Item was changed: ----- Method: MultiProcessor>>doesNotUnderstand: (in category 'message forwarding') ----- doesNotUnderstand: aMessage "Forward a message to the actual processor, managing a thread-switch if necessary. Catch ProcessorSimulationTraps and raise them outside of the critical section to avoid deadlock when reentering the VM from a trap and switching threads in the run-time." + | selector result trap contextInCritical | - | selector result trap | selector := aMessage selector. (guardedProcessorProtocol includes: selector) ifFalse: [^(unguardedProcessorProtocol includes: selector) ifTrue: [processor perform: selector withArguments: aMessage arguments] ifFalse: [super doesNotUnderstand: aMessage]]. result := [mutex critical: + [contextInCritical := thisContext. + owner ~~ mutex owningProcess ifTrue: - [owner ~~ mutex owningProcess ifTrue: [owner ifNotNil: [registerState at: owner put: processor registerState]. (registerState at: (owner := mutex owningProcess) ifAbsent: nil) ifNil: [coInterpreter initializeProcessorForThreadIndex: (threadIndex := threadIndex + 1)] ifNotNil: [:newState| processor setRegisterState: newState]]. processor perform: selector withArguments: aMessage arguments]] on: ProcessorSimulationTrap, Error, AssertionFailure do: [:ex| ex class == ProcessorSimulationTrap ifFalse: [ex pass]. + "Alas things are not so simple with ARMv8 ldp/stp... + The comments in these two methods explain..." + (self isAboutToReturn: ex signalerContext) ifFalse: + [self saveStackFor: ex signalerContext + above: contextInCritical + homeContext: thisContext home]. trap := ex]. ^trap ifNil: [result] ifNotNil: [trap signal]! Item was added: + ----- Method: MultiProcessor>>isAboutToReturn: (in category 'private-deep hackery') ----- + isAboutToReturn: aContextRaisingProcessorSimulationTrap + "Answer if aContextRaisingProcessorSimulationTrap is about to return the result of raising + a ProcessorSimulationTrap. Such traps don't need special handling when continuing." + ^aContextRaisingProcessorSimulationTrap willReturn + or: [aContextRaisingProcessorSimulationTrap willJump + and: [aContextRaisingProcessorSimulationTrap copy interpretJump; willReturn]]! Item was added: + ----- Method: MultiProcessor>>nonVirtualProcessor (in category 'accessing-abstract') ----- + nonVirtualProcessor + ^processor! Item was added: + ----- Method: MultiProcessor>>saveStackFor:above:homeContext: (in category 'private-deep hackery') ----- + saveStackFor: signalerContext above: contextInCritical homeContext: doesNotUnderstandContext + "Some processors, notably ARMv8, support load/store pair instructions which may raise two + ProcessorSimulationTraps. To handle this we must preserve the continuation following the + raising of the first simulaiton trap. This cuts up, and restitches the stack so that when the + first ProcessorSimulationTrap is raised outside the critical: block in our doesNotUnderstand: + method, control continues to the second trap." + | contextAboveContextInCritical contextAboveSignalerContext | + contextAboveContextInCritical := signalerContext findContextSuchThat: [:ctxt| ctxt sender == contextInCritical]. + "This is our continuation, which should be changed to continue back into the critical section." + contextAboveSignalerContext := thisContext findContextSuchThat: [:ctxt| ctxt sender == signalerContext]. + self deny: contextAboveContextInCritical isNil. + self deny: contextAboveSignalerContext isNil. + + "signalerContext through contextAboveContextInCritical is the stack that is the continuation + for the trap. This must be inserted between the doesNotUnderstandContext and its sender." + signalerContext cut: contextAboveContextInCritical. + contextAboveContextInCritical privSender: doesNotUnderstandContext sender. + doesNotUnderstandContext privSender: signalerContext. + + "Now arrange that the handler returns to contextInCritical; and we're done." + contextAboveSignalerContext privSender: contextInCritical. + self deny: (thisContext findContextSuchThat: [:ctxt| ctxt == signalerContext]) isNil. + self deny: (thisContext findContextSuchThat: [:ctxt| ctxt == contextInCritical]) isNil. + self deny: (thisContext findContextSuchThat: [:ctxt| ctxt == doesNotUnderstandContext]) isNil! Item was changed: SmartSyntaxInterpreterPlugin subclass: #ProcessorSimulatorPlugin + instanceVariableNames: 'prevInterruptCheckChain mySimulatorAlien' - instanceVariableNames: 'prevInterruptCheckChain' classVariableNames: 'NumIntegerRegisterStateFields' poolDictionaries: 'VMBasicConstants' category: 'Cog-ProcessorPlugins'! !ProcessorSimulatorPlugin commentStamp: 'eem 11/19/2019 09:32' prior: 0! ProcessorSimulatorPlugin is the abstract superclass for plugins that interface to a processor simulator that executes the machine code for some processor the Cog JIT generates code for. These include the Bochs C++ IA32/x64 processor emulator, and the GDB simulator for the ARMv6 and ARMv8 architectures. Instance Variables prevInterruptCheckChain: prevInterruptCheckChain - the previous value of the interruptCheckChain function pointer ! Item was changed: ----- Method: ProcessorSimulatorPlugin class>>declareCVarsIn: (in category 'translation') ----- declareCVarsIn: aCCodeGenerator self ~~ ProcessorSimulatorPlugin ifTrue: [super declareCVarsIn: aCCodeGenerator. aCCodeGenerator removeVariable: 'prevInterruptCheckChain'; "lives in the platform support code." + removeConstant: #NumIntegerRegisterStateFields]. "defined by the header file" + aCCodeGenerator removeVariable: 'mySimulatorAlien' ifAbsent: nil! - removeConstant: #NumIntegerRegisterStateFields] "defined by the header file"! Item was added: + ----- Method: ProcessorSimulatorPlugin>>newCPU (in category 'simulation') ----- + newCPU + "Isn't this deliciously recursive??" + + ((interpreterProxy coInterpreter isKindOf: CoInterpreter) + and: [self alienClass = interpreterProxy coInterpreter cogit processor nonVirtualProcessor class]) ifTrue: + [self error: 'this isn''t going to work; choose a different simulator class to run the simulation...']. + mySimulatorAlien := self alienClass createNewCPU. + NumIntegerRegisterStateFields := mySimulatorAlien integerRegisterState size. + ^mySimulatorAlien address! Item was added: + ----- Method: ProcessorSimulatorPlugin>>storeIntegerRegisterStateOf:into: (in category 'simulation support') ----- + storeIntegerRegisterStateOf: objOop into: aCArray + | state | + state := mySimulatorAlien integerRegisterState. + 1 to: state size do: + [:i| aCArray at: i - 1 put: (objOop at: i)]! From Das.Linux at gmx.de Wed Oct 28 14:06:32 2020 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed, 28 Oct 2020 15:06:32 +0100 Subject: [Vm-dev] CI status In-Reply-To: References: <16B92539-2604-4D9E-8C23-A50179B9543B@gmail.com> <53D4A481-1BFE-4A25-80E7-91EDC3D7F6A9@rowledge.org> Message-ID: <4864BEBA-7255-4034-8F1A-4FD60C8A3933@gmx.de> Hi > On 27.10.2020, at 23:39, Nicolas Cellier wrote: > > Hi Tim, > what is the result on that box with threaded heartbeat VM of: > > [SUnitToolBuilderTests new testHandlingNotification] timeToRun. > > If it is more than 5000 ms, then you would confirm the problem that I encounter. > > This testHandlingNotification is repeating 10 loops with a 200ms delay wait. > The problem I've got with threaded heartbeat VM is that first 5 delays run normally, but next 5 will last for 1 second instead of 200ms... > This is probably what happens on the CI server too (the test times out and CI fails). Also note that the CI test builds both vms but uses the last one built (because it overwrites the first), and that happens to be the itimer one, not th ethreaded. The code above runs in around ~2000 ms on my machine (~2015, with ubuntu 18.04) Things that happened: - I just ran the test suite in the DEBUG itimer headful and headless variant and it passes. - I just ran the test suite in the DEBUG threaded headful and headless variant and it passes. - I ran the RELEASE itimer headful and headless variant and it passes - I ran the RELEASE threaded headless variant and it FAILED as on the CI - I ran the RELEASE threaded headful variant and it FAILED LESS I mean: testHandlingNotification passed, and so did testValueWithinTimingBasic and testValueWithinTimingNestedInner but testValueWithinTimingNestedOuter testValueWithinTimingRepeat still fail! So there are discrepancies between debug and release and headful and headless (at least for threaded release) TL;DR: The linux x86_32 cog v3 threaded release vm has a timing problem ... Does that help anyone? Best regards -Tobias BTW: Eliot, the VM spits out a "aioDisable: epoll_ctl: Bad file descriptor". Is that expected? From Yoshiki.Ohshima at acm.org Wed Oct 28 15:34:14 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Wed, 28 Oct 2020 08:34:14 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: Come to think of it, a better fix for a problem like this one: KeySym symbolic; int keyCode= x2sqKey(&evt->xkey, &symbolic); int ucs4= xkeysym2ucs4(symbolic); was (obviously) to change the first line to: KeySym symbolic= 0; rather than to try to store 0 into *symbolic on the callee side. (A professor of my college days once told us that "most bugs are related to uninitialized variables." I should've known better.) When I get around to it, I'll make another change and this time make a pull request. On Tue, Oct 27, 2020 at 11:43 AM Eliot Miranda wrote: > > > > On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima > wrote: > >> >> Thanks! Maybe I should not have sent a separate email to Eliot ^^; >> > > Don't sweat it :-) Fixes gratefully received :-) Thanks *very* much for > attending to the input issue. Much appreciated. > >> >> On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier < >> nicolas.cellier.aka.nice at gmail.com> wrote: >> >>> >>> Ah too late, Eliot was faster, hit the pull request next time :) >>> >>> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < >>> nicolas.cellier.aka.nice at gmail.com> a écrit : >>> >>>> Hi Yoshiki, >>>> what you could do is >>>> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since we >>>> have a working workaround now >>>> 2) just create a pull request from the github web interface (that's >>>> rather easy) >>>> It will be very easy for us to integrate (one click), and we'll keep >>>> your authorship. >>>> >>>> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima >>>> a écrit : >>>> >>>>> >>>>> I have a branch on a clone on github: >>>>> >>>>> >>>>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>>>> >>>>> It might be easier to pull from this? Separately, I'll mail you >>>>> sqUnixX11.c. >>>>> >>>>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda >>>>> wrote: >>>>> >>>>>> >>>>>> Hi Yoshiki, >>>>>> >>>>>> on my Mac patch isn't smart enough to decode a git diff. Can you >>>>>> just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll >>>>>> integrate? Thanks! >>>>>> >>>>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima < >>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>> >>>>>>> >>>>>>> The previous one was just a hack but I think I found the real >>>>>>> problem. It was about the variable symbolic, that gets symbolic key code >>>>>>> *when* it is needed has to be zero'ed out when it is not needed. >>>>>>> >>>>>>> The diff is attached... I'll a make pull request if that helps. >>>>>>> >>>>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>> >>>>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a >>>>>>>> hack I did was like this: >>>>>>>> >>>>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>> >>>>>>>> index 268593673..bfb57257b 100644 >>>>>>>> >>>>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>> >>>>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>> >>>>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, >>>>>>>> sqInt stNameIndex, int sqNameLeng >>>>>>>> >>>>>>>> #undef sqFTruncate >>>>>>>> >>>>>>>> /* sqFTruncate should return 0 on success, ftruncate does also */ >>>>>>>> >>>>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>>>> >>>>>>>> -#define ftell(s) ftello(s) >>>>>>>> >>>>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>>>> >>>>>>>> +// #define ftell(s) ftello(s) >>>>>>>> >>>>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>> >>>>>>>> >>>>>>>> #if defined(__GNUC__) >>>>>>>> >>>>>>>> # if !defined(VM_LABEL) >>>>>>>> >>>>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>>>> >>>>>>>> index d62b05f40..e1c14a021 100644 >>>>>>>> >>>>>>>> --- a/spur64src/vm/cogit.c >>>>>>>> >>>>>>>> +++ b/spur64src/vm/cogit.c >>>>>>>> >>>>>>>> @@ -6,6 +6,8 @@ >>>>>>>> >>>>>>>> # define SysV 1 >>>>>>>> >>>>>>>> #endif >>>>>>>> >>>>>>>> >>>>>>>> +#define __arm64__ >>>>>>>> >>>>>>>> + >>>>>>>> >>>>>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>>>>>> >>>>>>>> >>>>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>>>> >>>>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>> >>>>>>>>> And I tried a few more things by checking out the last release tag >>>>>>>>> 202003021730 or try opensmalltalk-vm/build. >>>>>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts did not >>>>>>>>> work. For the latter got this error: >>>>>>>>> >>>>>>>>> In file included from /usr/include/features.h:424, >>>>>>>>> >>>>>>>>> from /usr/include/pthread.h:21, >>>>>>>>> >>>>>>>>> from >>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>>>> >>>>>>>>> from >>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>> >>>>>>>>> from >>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>> >>>>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >>>>>>>>> >>>>>>>>> extern int __REDIRECT (fseeko, >>>>>>>>> >>>>>>>>> ^~~~~~~~~~ >>>>>>>>> >>>>>>>>> In file included from >>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>> >>>>>>>>> from >>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>> >>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>>>>> note: previous declaration \ >>>>>>>>> >>>>>>>>> of ‘fseeko’ was here >>>>>>>>> >>>>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>> >>>>>>>>> ^~~~~~ >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>> >>>>>>>>>> Hi Eliot, >>>>>>>>>> >>>>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>>>>>>>> following error. I think I followed the steps in the instructions, >>>>>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>>>> >>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: >>>>>>>>>> #error As yet no Cogit implementation appears to exist for your platform. >>>>>>>>>> >>>>>>>>>> # error As yet no Cogit implementation appears to exist for >>>>>>>>>> your platform. >>>>>>>>>> >>>>>>>>>> ^~~~~ >>>>>>>>>> >>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: >>>>>>>>>> #error Consider implementing it, starting by adding a subclass of >>>>>>>>>> CogAbstractInstruction. >>>>>>>>>> >>>>>>>>>> # error Consider implementing it, starting by adding a subclass >>>>>>>>>> of CogAbstractInstruction. >>>>>>>>>> >>>>>>>>>> ^~~~~ >>>>>>>>>> >>>>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>>>> >>>>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>> >>>>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Hi, >>>>>>>>>>>> >>>>>>>>>>>> I heard that people got a new problem in inputting Japanese >>>>>>>>>>>> text into Scratch 1.4 running on Raspberry Pi OS after, or around the >>>>>>>>>>>> version 2020-08-20. I would like to take a look at it but it might involve >>>>>>>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>>>>>>> >>>>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to >>>>>>>>>>>> date and straightforward? Can people point me to the right point to start? >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>>>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>>>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run >>>>>>>>>>> ./mvm >>>>>>>>>>> >>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>> best, Eliot >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> -- Yoshiki >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- Yoshiki >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> -- Yoshiki >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- Yoshiki >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> _,,,^..^,,,_ >>>>>> best, Eliot >>>>>> >>>>> >>>>> >>>>> -- >>>>> -- Yoshiki >>>>> >>>>> >> >> -- >> -- Yoshiki >> >> > > -- > _,,,^..^,,,_ > best, Eliot > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Wed Oct 28 15:47:36 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed, 28 Oct 2020 08:47:36 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Hi Yoshiki, > On Oct 28, 2020, at 8:34 AM, Yoshiki Ohshima wrote: > >  > Come to think of it, a better fix for a problem like this one: > > KeySym symbolic; > int keyCode= x2sqKey(&evt->xkey, &symbolic); > int ucs4= xkeysym2ucs4(symbolic); > > was (obviously) to change the first line to: > > KeySym symbolic= 0; > > rather than to try to store 0 into *symbolic on the callee side. (A professor of my college days once told us that "most bugs are related to uninitialized variables." I should've known better.) I had exactly this bug in the win32 CameraPlugin the other day. And it didn’t surface until shutting down the plugin on exiting the system. C, what a love/hate relationship it engenders :-) > When I get around to it, I'll make another change and this time make a pull request. Or if you’d like I could invite you to become a committer and then you could avoid the pull request. > > >> On Tue, Oct 27, 2020 at 11:43 AM Eliot Miranda wrote: >> >> >> >>> On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima wrote: >>> >>> Thanks! Maybe I should not have sent a separate email to Eliot ^^; >> >> Don't sweat it :-) Fixes gratefully received :-) Thanks *very* much for attending to the input issue. Much appreciated. >>> >>>> On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier wrote: >>>> >>>> Ah too late, Eliot was faster, hit the pull request next time :) >>>> >>>>> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier a écrit : >>>>> Hi Yoshiki, >>>>> what you could do is >>>>> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since we have a working workaround now >>>>> 2) just create a pull request from the github web interface (that's rather easy) >>>>> It will be very easy for us to integrate (one click), and we'll keep your authorship. >>>>> >>>>>> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima a écrit : >>>>>> >>>>>> I have a branch on a clone on github: >>>>>> >>>>>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>>>>> >>>>>> It might be easier to pull from this? Separately, I'll mail you sqUnixX11.c. >>>>>> >>>>>>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda wrote: >>>>>>> >>>>>>> Hi Yoshiki, >>>>>>> >>>>>>> on my Mac patch isn't smart enough to decode a git diff. Can you just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll integrate? Thanks! >>>>>>> >>>>>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima wrote: >>>>>>>> >>>>>>>> The previous one was just a hack but I think I found the real problem. It was about the variable symbolic, that gets symbolic key code *when* it is needed has to be zero'ed out when it is not needed. >>>>>>>> >>>>>>>> The diff is attached... I'll a make pull request if that helps. >>>>>>>> >>>>>>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima wrote: >>>>>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack I did was like this: >>>>>>>>> >>>>>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>> index 268593673..bfb57257b 100644 >>>>>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, sqInt stNameIndex, int sqNameLeng >>>>>>>>> #undef sqFTruncate >>>>>>>>> /* sqFTruncate should return 0 on success, ftruncate does also */ >>>>>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>>>>> -#define ftell(s) ftello(s) >>>>>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>> +// #define ftell(s) ftello(s) >>>>>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>> >>>>>>>>> #if defined(__GNUC__) >>>>>>>>> # if !defined(VM_LABEL) >>>>>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>>>>> index d62b05f40..e1c14a021 100644 >>>>>>>>> --- a/spur64src/vm/cogit.c >>>>>>>>> +++ b/spur64src/vm/cogit.c >>>>>>>>> @@ -6,6 +6,8 @@ >>>>>>>>> # define SysV 1 >>>>>>>>> #endif >>>>>>>>> >>>>>>>>> +#define __arm64__ >>>>>>>>> + >>>>>>>>> #if defined(__arm64__) || defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>>>>>>> >>>>>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>>>>> >>>>>>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima wrote: >>>>>>>>>> And I tried a few more things by checking out the last release tag 202003021730 or try opensmalltalk-vm/build.linuxARMv6/squeak.cog.spur/build.debug but those attempts did not work. For the latter got this error: >>>>>>>>>> >>>>>>>>>> In file included from /usr/include/features.h:424, >>>>>>>>>> from /usr/include/pthread.h:21, >>>>>>>>>> from /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>>>>> from /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>> from /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >>>>>>>>>> extern int __REDIRECT (fseeko, >>>>>>>>>> ^~~~~~~~~~ >>>>>>>>>> In file included from /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>> from /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: note: previous declaration \ >>>>>>>>>> of ‘fseeko’ was here >>>>>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>> ^~~~~~ >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima wrote: >>>>>>>>>>> Hi Eliot, >>>>>>>>>>> >>>>>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following error. I think I followed the steps in the instructions, including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>>>>> >>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As yet no Cogit implementation appears to exist for your platform. >>>>>>>>>>> # error As yet no Cogit implementation appears to exist for your platform. >>>>>>>>>>> ^~~~~ >>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error Consider implementing it, starting by adding a subclass of CogAbstractInstruction. >>>>>>>>>>> # error Consider implementing it, starting by adding a subclass of CogAbstractInstruction. >>>>>>>>>>> ^~~~~ >>>>>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>>>>> >>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>>> >>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> Hi, >>>>>>>>>>>>> >>>>>>>>>>>>> I heard that people got a new problem in inputting Japanese text into Scratch 1.4 running on Raspberry Pi OS after, or around the version 2020-08-20. I would like to take a look at it but it might involve recompiling and generating the VM with debugging info. Last time I looked into it was years and years ago and I need to basically make a fresh start. >>>>>>>>>>>>> >>>>>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to date and straightforward? Can people point me to the right point to start? >>>>>>>>>>>> >>>>>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >>>>>>>>>>>> >>>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>>> best, Eliot >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> -- Yoshiki >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> -- Yoshiki >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- Yoshiki >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> -- Yoshiki >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> _,,,^..^,,,_ >>>>>>> best, Eliot >>>>>> >>>>>> >>>>>> -- >>>>>> -- Yoshiki >>>>>> >>> >>> >>> -- >>> -- Yoshiki >>> >> >> >> -- >> _,,,^..^,,,_ >> best, Eliot > > > -- > -- Yoshiki > -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed Oct 28 16:00:18 2020 From: notifications at github.com (Eliot Miranda) Date: Wed, 28 Oct 2020 09:00:18 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Simplify sqUnixMain.c's imgInit() (#530) In-Reply-To: References: Message-ID: @eliotmiranda approved this pull request. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/530#pullrequestreview-518825978 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed Oct 28 16:02:15 2020 From: notifications at github.com (Eliot Miranda) Date: Wed, 28 Oct 2020 09:02:15 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Simplify sqUnixMain.c's imgInit() (#530) In-Reply-To: References: Message-ID: Merged #530 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/530#event-3932087972 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Wed Oct 28 16:02:15 2020 From: noreply at github.com (Eliot Miranda) Date: Wed, 28 Oct 2020 09:02:15 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] c94e77: Simplify sqUnixMain.c's imgInit() Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: c94e770242f3c7d59711b2243fbb8c7dc8363208 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/c94e770242f3c7d59711b2243fbb8c7dc8363208 Author: Levente Uzonyi Date: 2020-10-20 (Tue, 20 Oct 2020) Changed paths: M platforms/unix/vm/sqUnixMain.c Log Message: ----------- Simplify sqUnixMain.c's imgInit() - use sqImageFileOpen() to open the image file - use file descriptors only to avoid leaking a FILE struct - removed the ability to let winImageFind manipulate the file some way (only supported by the Quartz display anyway) - removed the loop retrying opening the file again because that relied on winImageFind - reformatted the code to follow the formatting guidelines (it was a bit messy) Commit: 75c8e99612cdf433171b9c207df76114f402c58f https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/75c8e99612cdf433171b9c207df76114f402c58f Author: Eliot Miranda Date: 2020-10-28 (Wed, 28 Oct 2020) Changed paths: M platforms/unix/vm/sqUnixMain.c Log Message: ----------- Merge pull request #530 from smalltalking/Cog Simplify sqUnixMain.c's imgInit() Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/c3f4c20a157b...75c8e99612cd From noreply at github.com Wed Oct 28 16:04:47 2020 From: noreply at github.com (Eliot Miranda) Date: Wed, 28 Oct 2020 09:04:47 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 525870: update url to always use current stable release Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 525870cc58fdb92b37df4f92f2fb45fec1d9d3e5 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/525870cc58fdb92b37df4f92f2fb45fec1d9d3e5 Author: kksubbu Date: 2020-06-18 (Thu, 18 Jun 2020) Changed paths: M image/getlatesttrunkimage.sh Log Message: ----------- update url to always use current stable release Commit: 2d169b7d5c6e57a955fa5bc69ae719a9d0eb8673 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/2d169b7d5c6e57a955fa5bc69ae719a9d0eb8673 Author: Eliot Miranda Date: 2020-10-28 (Wed, 28 Oct 2020) Changed paths: M image/getlatesttrunkimage.sh Log Message: ----------- Merge pull request #511 from kksubbu/updstable update url to always use current stable release Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/75c8e99612cd...2d169b7d5c6e From notifications at github.com Wed Oct 28 16:04:47 2020 From: notifications at github.com (Eliot Miranda) Date: Wed, 28 Oct 2020 09:04:47 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] update url to always use current stable release (#511) In-Reply-To: References: Message-ID: Merged #511 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/511#event-3932101894 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed Oct 28 16:08:23 2020 From: notifications at github.com (Eliot Miranda) Date: Wed, 28 Oct 2020 09:08:23 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Pullrequest/vmmaker (#305) In-Reply-To: References: Message-ID: Closed #305. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/305#event-3932120781 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed Oct 28 16:21:15 2020 From: notifications at github.com (Yoshiki Ohshima) Date: Wed, 28 Oct 2020 09:21:15 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] clean up symbolic key handling by initializing a passed-by-pointer variable (#532) Message-ID: You can view, comment on, or merge this pull request online at: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/532 -- Commit Summary -- * clean up the symbolic key code handling by initializing a passed-by-pointer variable -- File Changes -- M platforms/unix/vm-display-X11/sqUnixX11.c (8) -- Patch Links -- https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/532.patch https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/532.diff -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/532 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Wed Oct 28 16:21:27 2020 From: noreply at github.com (Yoshiki Ohshima) Date: Wed, 28 Oct 2020 09:21:27 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 08943f: clean up the symbolic key code handling by initial... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 08943fec51215b2ea7711eeb2124166146fbd407 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/08943fec51215b2ea7711eeb2124166146fbd407 Author: Yoshiki Ohshima Date: 2020-10-28 (Wed, 28 Oct 2020) Changed paths: M platforms/unix/vm-display-X11/sqUnixX11.c Log Message: ----------- clean up the symbolic key code handling by initializing a passed-by-pointer variable Commit: b223cd542dc67b0e317c7ebc1afc7f6f77582316 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/b223cd542dc67b0e317c7ebc1afc7f6f77582316 Author: Yoshiki Ohshima Date: 2020-10-28 (Wed, 28 Oct 2020) Changed paths: M platforms/unix/vm-display-X11/sqUnixX11.c Log Message: ----------- Merge pull request #532 from yoshikiohshima/composition-input-fix-2020-Oct-2 clean up symbolic key handling by initializing a passed-by-pointer variable Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/2d169b7d5c6e...b223cd542dc6 From notifications at github.com Wed Oct 28 16:21:27 2020 From: notifications at github.com (Yoshiki Ohshima) Date: Wed, 28 Oct 2020 09:21:27 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] clean up symbolic key handling by initializing a passed-by-pointer variable (#532) In-Reply-To: References: Message-ID: Merged #532 into Cog. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/532#event-3932188480 -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Wed Oct 28 16:23:40 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed, 28 Oct 2020 09:23:40 -0700 Subject: [Vm-dev] CI status Message-ID: Hi Tobi, Hi Levente, > On Oct 28, 2020, at 7:06 AM, Tobias Pape wrote: > >  > Hi > >>>>> On 27.10.2020, at 23:39, Nicolas Cellier wrote: >> Hi Tim, >> what is the result on that box with threaded heartbeat VM of: >> [SUnitToolBuilderTests new testHandlingNotification] timeToRun. >> If it is more than 5000 ms, then you would confirm the problem that I encounter. >> This testHandlingNotification is repeating 10 loops with a 200ms delay wait. >> The problem I've got with threaded heartbeat VM is that first 5 delays run normally, but next 5 will last for 1 second instead of 200ms... >> This is probably what happens on the CI server too (the test times out and CI fails). > > Also note that the CI test builds both vms but uses the last one built (because it overwrites the first), and that happens to be the itimer one, not th ethreaded. > > The code above runs in around ~2000 ms on my machine (~2015, with ubuntu 18.04) > > Things that happened: > - I just ran the test suite in the DEBUG itimer headful and headless variant and it passes. > - I just ran the test suite in the DEBUG threaded headful and headless variant and it passes. > - I ran the RELEASE itimer headful and headless variant and it passes > - I ran the RELEASE threaded headless variant and it FAILED as on the CI > - I ran the RELEASE threaded headful variant and it FAILED LESS > I mean: testHandlingNotification passed, and so did testValueWithinTimingBasic and testValueWithinTimingNestedInner > but testValueWithinTimingNestedOuter testValueWithinTimingRepeat still fail! > > So there are discrepancies between > debug and release and > headful and headless (at least for threaded release) > > TL;DR: The linux x86_32 cog v3 threaded release vm has a timing problem ... > > Does that help anyone? If you add code to extract the number of ioProcessEvents calls etc (see About Squeak VM parameters tab for the relevant info) does that tell us more? IIRC one available vm parameter is the number of heartbeats. So we should be able to see if it is the heartbeat itself that is failing or if it is further up stream. > > Best regards > -Tobias > > BTW: Eliot, the VM spits out a "aioDisable: epoll_ctl: Bad file descriptor". Is that expected? It’s not expected, but may be harmless. Levente, is this noise? Or is it that the input file descriptor is being shut down? Presumably this is just noise U.K. do with running headless. From Yoshiki.Ohshima at acm.org Wed Oct 28 16:24:29 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Wed, 28 Oct 2020 09:24:29 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: Ok! I did make a pull request but then merged it by myself. Next thing for me to try is to build linux64ARMv8. On Wed, Oct 28, 2020 at 8:47 AM Eliot Miranda wrote: > > Hi Yoshiki, > > On Oct 28, 2020, at 8:34 AM, Yoshiki Ohshima > wrote: > >  > Come to think of it, a better fix for a problem like this one: > > KeySym symbolic; > int keyCode= x2sqKey(&evt->xkey, &symbolic); > int ucs4= xkeysym2ucs4(symbolic); > > was (obviously) to change the first line to: > > KeySym symbolic= 0; > > rather than to try to store 0 into *symbolic on the callee side. (A > professor of my college days once told us that "most bugs are related to > uninitialized variables." I should've known better.) > > > I had exactly this bug in the win32 CameraPlugin the other day. And it > didn’t surface until shutting down the plugin on exiting the system. C, > what a love/hate relationship it engenders :-) > > When I get around to it, I'll make another change and this time make a > pull request. > > > Or if you’d like I could invite you to become a committer and then you > could avoid the pull request. > > > > On Tue, Oct 27, 2020 at 11:43 AM Eliot Miranda > wrote: > >> >> >> >> On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima >> wrote: >> >>> >>> Thanks! Maybe I should not have sent a separate email to Eliot ^^; >>> >> >> Don't sweat it :-) Fixes gratefully received :-) Thanks *very* much for >> attending to the input issue. Much appreciated. >> >>> >>> On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier < >>> nicolas.cellier.aka.nice at gmail.com> wrote: >>> >>>> >>>> Ah too late, Eliot was faster, hit the pull request next time :) >>>> >>>> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < >>>> nicolas.cellier.aka.nice at gmail.com> a écrit : >>>> >>>>> Hi Yoshiki, >>>>> what you could do is >>>>> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since we >>>>> have a working workaround now >>>>> 2) just create a pull request from the github web interface (that's >>>>> rather easy) >>>>> It will be very easy for us to integrate (one click), and we'll keep >>>>> your authorship. >>>>> >>>>> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima >>>>> a écrit : >>>>> >>>>>> >>>>>> I have a branch on a clone on github: >>>>>> >>>>>> >>>>>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>>>>> >>>>>> It might be easier to pull from this? Separately, I'll mail you >>>>>> sqUnixX11.c. >>>>>> >>>>>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda < >>>>>> eliot.miranda at gmail.com> wrote: >>>>>> >>>>>>> >>>>>>> Hi Yoshiki, >>>>>>> >>>>>>> on my Mac patch isn't smart enough to decode a git diff. Can >>>>>>> you just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll >>>>>>> integrate? Thanks! >>>>>>> >>>>>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima < >>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>> >>>>>>>> >>>>>>>> The previous one was just a hack but I think I found the real >>>>>>>> problem. It was about the variable symbolic, that gets symbolic key code >>>>>>>> *when* it is needed has to be zero'ed out when it is not needed. >>>>>>>> >>>>>>>> The diff is attached... I'll a make pull request if that helps. >>>>>>>> >>>>>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>> >>>>>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a >>>>>>>>> hack I did was like this: >>>>>>>>> >>>>>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>> >>>>>>>>> index 268593673..bfb57257b 100644 >>>>>>>>> >>>>>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>> >>>>>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>> >>>>>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char >>>>>>>>> *uxName, sqInt stNameIndex, int sqNameLeng >>>>>>>>> >>>>>>>>> #undef sqFTruncate >>>>>>>>> >>>>>>>>> /* sqFTruncate should return 0 on success, ftruncate does also */ >>>>>>>>> >>>>>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>>>>> >>>>>>>>> -#define ftell(s) ftello(s) >>>>>>>>> >>>>>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>> >>>>>>>>> +// #define ftell(s) ftello(s) >>>>>>>>> >>>>>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>> >>>>>>>>> >>>>>>>>> #if defined(__GNUC__) >>>>>>>>> >>>>>>>>> # if !defined(VM_LABEL) >>>>>>>>> >>>>>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>>>>> >>>>>>>>> index d62b05f40..e1c14a021 100644 >>>>>>>>> >>>>>>>>> --- a/spur64src/vm/cogit.c >>>>>>>>> >>>>>>>>> +++ b/spur64src/vm/cogit.c >>>>>>>>> >>>>>>>>> @@ -6,6 +6,8 @@ >>>>>>>>> >>>>>>>>> # define SysV 1 >>>>>>>>> >>>>>>>>> #endif >>>>>>>>> >>>>>>>>> >>>>>>>>> +#define __arm64__ >>>>>>>>> >>>>>>>>> + >>>>>>>>> >>>>>>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>>>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>>>>>>> >>>>>>>>> >>>>>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>>>>> >>>>>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>> >>>>>>>>>> And I tried a few more things by checking out the last release >>>>>>>>>> tag 202003021730 or try opensmalltalk-vm/build. >>>>>>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts did >>>>>>>>>> not work. For the latter got this error: >>>>>>>>>> >>>>>>>>>> In file included from /usr/include/features.h:424, >>>>>>>>>> >>>>>>>>>> from /usr/include/pthread.h:21, >>>>>>>>>> >>>>>>>>>> from >>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>>>>> >>>>>>>>>> from >>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>> >>>>>>>>>> from >>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>> >>>>>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >>>>>>>>>> >>>>>>>>>> extern int __REDIRECT (fseeko, >>>>>>>>>> >>>>>>>>>> ^~~~~~~~~~ >>>>>>>>>> >>>>>>>>>> In file included from >>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>> >>>>>>>>>> from >>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>> >>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>>>>>> note: previous declaration \ >>>>>>>>>> >>>>>>>>>> of ‘fseeko’ was here >>>>>>>>>> >>>>>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>> >>>>>>>>>> ^~~~~~ >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>> >>>>>>>>>>> Hi Eliot, >>>>>>>>>>> >>>>>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>>>>>>>>> following error. I think I followed the steps in the instructions, >>>>>>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>>>>> >>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: >>>>>>>>>>> #error As yet no Cogit implementation appears to exist for your platform. >>>>>>>>>>> >>>>>>>>>>> # error As yet no Cogit implementation appears to exist for >>>>>>>>>>> your platform. >>>>>>>>>>> >>>>>>>>>>> ^~~~~ >>>>>>>>>>> >>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: >>>>>>>>>>> #error Consider implementing it, starting by adding a subclass of >>>>>>>>>>> CogAbstractInstruction. >>>>>>>>>>> >>>>>>>>>>> # error Consider implementing it, starting by adding a >>>>>>>>>>> subclass of CogAbstractInstruction. >>>>>>>>>>> >>>>>>>>>>> ^~~~~ >>>>>>>>>>> >>>>>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>>>>> >>>>>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>>> >>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Hi, >>>>>>>>>>>>> >>>>>>>>>>>>> I heard that people got a new problem in inputting Japanese >>>>>>>>>>>>> text into Scratch 1.4 running on Raspberry Pi OS after, or around the >>>>>>>>>>>>> version 2020-08-20. I would like to take a look at it but it might involve >>>>>>>>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>>>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>>>>>>>> >>>>>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to >>>>>>>>>>>>> date and straightforward? Can people point me to the right point to start? >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>>>>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>>>>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run >>>>>>>>>>>> ./mvm >>>>>>>>>>>> >>>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>>> best, Eliot >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> -- Yoshiki >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> -- Yoshiki >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- Yoshiki >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> -- Yoshiki >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> _,,,^..^,,,_ >>>>>>> best, Eliot >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> -- Yoshiki >>>>>> >>>>>> >>> >>> -- >>> -- Yoshiki >>> >>> >> >> -- >> _,,,^..^,,,_ >> best, Eliot >> > > > -- > -- Yoshiki > > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From Das.Linux at gmx.de Wed Oct 28 16:37:02 2020 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed, 28 Oct 2020 17:37:02 +0100 Subject: [Vm-dev] CI status In-Reply-To: References: Message-ID: > On 28.10.2020, at 17:23, Eliot Miranda wrote: > > > Hi Tobi, Hi Levente, > >> On Oct 28, 2020, at 7:06 AM, Tobias Pape wrote: >> >>  >> Hi >> >>> Hi Tim, >>> what is the result on that box with threaded heartbeat VM of: >>> [SUnitToolBuilderTests new testHandlingNotification] timeToRun. >>> If it is more than 5000 ms, then you would confirm the problem that I encounter. >>> This testHandlingNotification is repeating 10 loops with a 200ms delay wait. >>> The problem I've got with threaded heartbeat VM is that first 5 delays run normally, but next 5 will last for 1 second instead of 200ms... >>> This is probably what happens on the CI server too (the test times out and CI fails). >> >> Also note that the CI test builds both vms but uses the last one built (because it overwrites the first), and that happens to be the itimer one, not th ethreaded. >> >> The code above runs in around ~2000 ms on my machine (~2015, with ubuntu 18.04) >> >> Things that happened: >> - I just ran the test suite in the DEBUG itimer headful and headless variant and it passes. >> - I just ran the test suite in the DEBUG threaded headful and headless variant and it passes. >> - I ran the RELEASE itimer headful and headless variant and it passes >> - I ran the RELEASE threaded headless variant and it FAILED as on the CI >> - I ran the RELEASE threaded headful variant and it FAILED LESS >> I mean: testHandlingNotification passed, and so did testValueWithinTimingBasic and testValueWithinTimingNestedInner >> but testValueWithinTimingNestedOuter testValueWithinTimingRepeat still fail! >> >> So there are discrepancies between >> debug and release and >> headful and headless (at least for threaded release) >> >> TL;DR: The linux x86_32 cog v3 threaded release vm has a timing problem ... >> >> Does that help anyone? > > If you add code to extract the number of ioProcessEvents calls etc (see About Squeak VM parameters tab for the relevant info) does that tell us more? IIRC one available vm parameter is the number of heartbeats. So we should be able to see if it is the heartbeat itself that is failing or if it is further up stream. ping me tomorrow, my linux machine is already switched off… -t > >> >> Best regards >> -Tobias >> >> BTW: Eliot, the VM spits out a "aioDisable: epoll_ctl: Bad file descriptor". Is that expected? > > It’s not expected, but may be harmless. Levente, is this noise? Or is it that the input file descriptor is being shut down? Presumably this is just noise U.K. do with running headless. From commits at source.squeak.org Wed Oct 28 17:55:49 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 28 Oct 2020 17:55:49 0000 Subject: [Vm-dev] VM Maker: Cog-eem.415.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.415.mcz ==================== Summary ==================== Name: Cog-eem.415 Author: eem Time: 28 October 2020, 10:55:45.197107 am UUID: 27a88b2a-20d1-48c2-b467-f3d84eb216f2 Ancestors: Cog-eem.414 Add the offset version of the run/step primitives which allow simulation of the simulator. Add the metacircular simulation methods for them. Recategorise the old more-arguments run/step primitives as legacy. =============== Diff against Cog-eem.414 =============== Item was changed: + ----- Method: ProcessorSimulatorPlugin>>primitiveRunInMemory:minimumAddress:maximumAddress:readOnlyBelow: (in category 'primitives-legacy') ----- - ----- Method: ProcessorSimulatorPlugin>>primitiveRunInMemory:minimumAddress:maximumAddress:readOnlyBelow: (in category 'primitives') ----- "cpuAlien " primitiveRunInMemory: memory "" minimumAddress: minAddress "" maximumAddress: maxAddress "" readOnlyBelow: minWriteMaxExecAddress "" "Run the cpu using the first argument as the memory and the following arguments defining valid addresses, running until it halts or hits an exception." + | cpuAlien cpu memorySize maybeErr | cpuAlien := self primitive: #primitiveRunInMemoryMinAddressMaxAddressReadWrite parameters: #(WordsOrBytes SmallInteger SmallInteger SmallInteger) receiver: #Oop. (cpu := self cCoerceSimple: (self startOfData: cpuAlien) to: #'void *') = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. (minAddress < 0 or: [maxAddress < 0 or: [minWriteMaxExecAddress < 0]]) ifTrue: [^self primitiveFailFor: PrimErrBadArgument]. "Add forceStopOnInterrupt to the interrupt check chain. It is our responsibility to chain calls, hence we remember any previous client in prevInterruptCheckChain." + prevInterruptCheckChain := interpreterProxy setInterruptCheckChain: #forceStopOnInterrupt. + prevInterruptCheckChain = #forceStopOnInterrupt ifTrue: - prevInterruptCheckChain := interpreterProxy setInterruptCheckChain: #forceStopOnInterrupt asSymbol. - prevInterruptCheckChain = #forceStopOnInterrupt asSymbol ifTrue: [prevInterruptCheckChain := 0]. memorySize := interpreterProxy byteSizeOf: memory cPtrAsOop. maybeErr := self runCPU: cpu In: memory Size: (memorySize min: maxAddress) MinAddressRead: minAddress Write: minWriteMaxExecAddress. interpreterProxy setInterruptCheckChain: prevInterruptCheckChain. maybeErr ~= 0 ifTrue: [^interpreterProxy primitiveFailForOSError: maybeErr]. ^cpuAlien! Item was changed: ----- Method: ProcessorSimulatorPlugin>>primitiveRunInMemory:minimumAddress:readOnlyBelow: (in category 'primitives') ----- "cpuAlien " primitiveRunInMemory: memory "" minimumAddress: minAddress "" readOnlyBelow: minWriteMaxExecAddress "" "Run the cpu using the first argument as the memory and the following arguments defining valid addresses, running until it halts or hits an exception." | cpuAlien cpu maybeErr | cpuAlien := self primitive: #primitiveRunInMemoryMinimumAddressReadWrite parameters: #(WordsOrBytes SmallInteger SmallInteger) receiver: #Oop. (cpu := self cCoerceSimple: (self startOfData: cpuAlien) to: #'void *') = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. (minAddress < 0 or: [minWriteMaxExecAddress < 0]) ifTrue: [^self primitiveFailFor: PrimErrBadArgument]. + prevInterruptCheckChain := interpreterProxy setInterruptCheckChain: #forceStopOnInterrupt. + prevInterruptCheckChain = #forceStopOnInterrupt ifTrue: - prevInterruptCheckChain := interpreterProxy setInterruptCheckChain: #forceStopOnInterrupt asSymbol. - prevInterruptCheckChain = #forceStopOnInterrupt asSymbol ifTrue: [prevInterruptCheckChain := 0]. maybeErr := self runCPU: cpu In: memory Size: (interpreterProxy byteSizeOf: memory cPtrAsOop) MinAddressRead: minAddress Write: minWriteMaxExecAddress. interpreterProxy setInterruptCheckChain: prevInterruptCheckChain. maybeErr ~= 0 ifTrue: [^interpreterProxy primitiveFailForOSError: maybeErr]. ^cpuAlien! Item was added: + ----- Method: ProcessorSimulatorPlugin>>primitiveRunInMemory:offsetBy:minimumAddress:readOnlyBelow: (in category 'primitives') ----- + "cpuAlien " primitiveRunInMemory: memory "" offsetBy: offset "" minimumAddress: minAddress "" readOnlyBelow: minWriteMaxExecAddress "" + "Run the cpu using the first argument as the memory and the following arguments defining valid addresses, running until it halts or hits an exception." + | cpuAlien cpu maybeErr | + + cpuAlien := self primitive: #primitiveRunInMemoryMinimumAddressReadWrite + parameters: #(WordsOrBytes SmallInteger SmallInteger SmallInteger) + receiver: #Oop. + (cpu := self cCoerceSimple: (self startOfData: cpuAlien) to: #'void *') = 0 ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + (minAddress < 0 + or: [minWriteMaxExecAddress < 0]) ifTrue: + [^self primitiveFailFor: PrimErrBadArgument]. + prevInterruptCheckChain := interpreterProxy setInterruptCheckChain: #forceStopOnInterrupt. + prevInterruptCheckChain = #forceStopOnInterrupt ifTrue: + [prevInterruptCheckChain := 0]. + maybeErr := self runCPU: cpu + In: (self cCoerceSimple: memory to: #'char *') + offset + Size: (interpreterProxy byteSizeOf: memory cPtrAsOop) + MinAddressRead: minAddress + Write: minWriteMaxExecAddress. + interpreterProxy setInterruptCheckChain: prevInterruptCheckChain. + maybeErr ~= 0 ifTrue: + [^interpreterProxy primitiveFailForOSError: maybeErr]. + ^cpuAlien! Item was changed: + ----- Method: ProcessorSimulatorPlugin>>primitiveSingleStepInMemory:minimumAddress:maximumAddress:readOnlyBelow: (in category 'primitives-legacy') ----- - ----- Method: ProcessorSimulatorPlugin>>primitiveSingleStepInMemory:minimumAddress:maximumAddress:readOnlyBelow: (in category 'primitives') ----- "cpuAlien " primitiveSingleStepInMemory: memory "" minimumAddress: minAddress "" maximumAddress: maxAddress "" readOnlyBelow: minWriteMaxExecAddress "" "Single-step the cpu using the first argument as the memory and the following arguments defining valid addresses." + | cpuAlien cpu memorySize maybeErr | cpuAlien := self primitive: #primitiveSingleStepInMemoryMinAddressMaxAddressReadWrite parameters: #(WordsOrBytes SmallInteger SmallInteger SmallInteger) receiver: #Oop. (cpu := self cCoerceSimple: (self startOfData: cpuAlien) to: #'void *') = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. (minAddress < 0 or: [maxAddress < 0 or: [minWriteMaxExecAddress < 0]]) ifTrue: [^self primitiveFailFor: PrimErrBadArgument]. memorySize := interpreterProxy byteSizeOf: memory cPtrAsOop. maybeErr := self singleStepCPU: cpu In: memory Size: (memorySize min: maxAddress) MinAddressRead: minAddress Write: minWriteMaxExecAddress. maybeErr ~= 0 ifTrue: [^interpreterProxy primitiveFailForOSError: maybeErr]. ^cpuAlien! Item was added: + ----- Method: ProcessorSimulatorPlugin>>primitiveSingleStepInMemory:offsetBy:minimumAddress:readOnlyBelow: (in category 'primitives') ----- + "cpuAlien " primitiveSingleStepInMemory: memory "" offsetBy: offset "" minimumAddress: minAddress "" readOnlyBelow: minWriteMaxExecAddress "" + "Single-step the cpu using the first argument as the memory and the following arguments defining valid addresses." + | cpuAlien cpu maybeErr | + + cpuAlien := self primitive: #primitiveSingleStepInMemoryMinimumAddressReadWrite + parameters: #(WordsOrBytes SmallInteger SmallInteger SmallInteger) + receiver: #Oop. + (cpu := self cCoerceSimple: (self startOfData: cpuAlien) to: #'void *') = 0 ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. + (minAddress < 0 + or: [minWriteMaxExecAddress < 0]) ifTrue: + [^self primitiveFailFor: PrimErrBadArgument]. + maybeErr := self singleStepCPU: cpu + In: (self cCoerceSimple: memory to: #'char *') + offset + Size: (interpreterProxy byteSizeOf: memory cPtrAsOop) + MinAddressRead: minAddress + Write: minWriteMaxExecAddress. + maybeErr ~= 0 ifTrue: + [^interpreterProxy primitiveFailForOSError: maybeErr]. + ^cpuAlien! Item was added: + ----- Method: ProcessorSimulatorPlugin>>runCPU:In:Size:MinAddressRead:Write: (in category 'simulation') ----- + runCPU: cpu In: memoryCArray Size: memorySize MinAddressRead: minAddress Write: minWriteMaxExecAddress + "*now* we need derived pointers. Ho hum... + But all we need is one more level of indirection..." + ^mySimulatorAlien + primitiveRunInMemory: interpreterProxy memory + offsetBy: memoryCArray ptrAddress + minimumAddress: minAddress + readOnlyBelow: minWriteMaxExecAddress! Item was added: + ----- Method: ProcessorSimulatorPlugin>>singleStepCPU:In:Size:MinAddressRead:Write: (in category 'simulation') ----- + singleStepCPU: cpu In: memoryCArray Size: memorySize MinAddressRead: minAddress Write: minWriteMaxExecAddress + "*now* we need derived pointers. Ho hum... + But all we need is one more level of indirection..." + ^mySimulatorAlien + primitiveSingleStepInMemory: interpreterProxy memory + offsetBy: memoryCArray ptrAddress + minimumAddress: minAddress + readOnlyBelow: minWriteMaxExecAddress! Item was changed: + ----- Method: ProcessorSimulatorPlugin>>storeIntegerRegisterStateOf:into: (in category 'simulation') ----- + storeIntegerRegisterStateOf: alien into: aCArray - ----- Method: ProcessorSimulatorPlugin>>storeIntegerRegisterStateOf:into: (in category 'simulation support') ----- - storeIntegerRegisterStateOf: objOop into: aCArray | state | state := mySimulatorAlien integerRegisterState. 1 to: state size do: + [:i| aCArray at: i - 1 put: (state at: i)]! - [:i| aCArray at: i - 1 put: (objOop at: i)]! From commits at source.squeak.org Wed Oct 28 17:57:25 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 28 Oct 2020 17:57:25 0000 Subject: [Vm-dev] VM Maker: Cog-eem.416.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.416.mcz ==================== Summary ==================== Name: Cog-eem.416 Author: eem Time: 28 October 2020, 10:57:22.976137 am UUID: 3d24e6f5-4e73-43f8-9cb9-1c8a3be678e7 Ancestors: Cog-eem.415 Oops, the simulation methods must be marked =============== Diff against Cog-eem.415 =============== Item was changed: ----- Method: ProcessorSimulatorPlugin>>runCPU:In:Size:MinAddressRead:Write: (in category 'simulation') ----- runCPU: cpu In: memoryCArray Size: memorySize MinAddressRead: minAddress Write: minWriteMaxExecAddress + "*now* we need derived pointers. Ho hum... But all we need is one more level of indirection..." ^mySimulatorAlien primitiveRunInMemory: interpreterProxy memory offsetBy: memoryCArray ptrAddress minimumAddress: minAddress readOnlyBelow: minWriteMaxExecAddress! Item was changed: ----- Method: ProcessorSimulatorPlugin>>singleStepCPU:In:Size:MinAddressRead:Write: (in category 'simulation') ----- singleStepCPU: cpu In: memoryCArray Size: memorySize MinAddressRead: minAddress Write: minWriteMaxExecAddress + "*now* we need derived pointers. Ho hum... But all we need is one more level of indirection..." ^mySimulatorAlien primitiveSingleStepInMemory: interpreterProxy memory offsetBy: memoryCArray ptrAddress minimumAddress: minAddress readOnlyBelow: minWriteMaxExecAddress! Item was changed: ----- Method: ProcessorSimulatorPlugin>>storeIntegerRegisterStateOf:into: (in category 'simulation') ----- storeIntegerRegisterStateOf: alien into: aCArray + | state | state := mySimulatorAlien integerRegisterState. 1 to: state size do: [:i| aCArray at: i - 1 put: (state at: i)]! From commits at source.squeak.org Wed Oct 28 17:59:08 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 28 Oct 2020 17:59:08 0000 Subject: [Vm-dev] VM Maker: Cog-eem.417.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.417.mcz ==================== Summary ==================== Name: Cog-eem.417 Author: eem Time: 28 October 2020, 10:59:05.398054 am UUID: 34d31321-fc48-4fa5-a5f6-26d56a703a64 Ancestors: Cog-eem.416 And rename the opffsetBy: primitives suitably. =============== Diff against Cog-eem.416 =============== Item was changed: ----- Method: ProcessorSimulatorPlugin>>primitiveRunInMemory:offsetBy:minimumAddress:readOnlyBelow: (in category 'primitives') ----- "cpuAlien " primitiveRunInMemory: memory "" offsetBy: offset "" minimumAddress: minAddress "" readOnlyBelow: minWriteMaxExecAddress "" "Run the cpu using the first argument as the memory and the following arguments defining valid addresses, running until it halts or hits an exception." | cpuAlien cpu maybeErr | + cpuAlien := self primitive: #primitiveRunInMemoryOffsetMinimumAddressReadWrite - cpuAlien := self primitive: #primitiveRunInMemoryMinimumAddressReadWrite parameters: #(WordsOrBytes SmallInteger SmallInteger SmallInteger) receiver: #Oop. (cpu := self cCoerceSimple: (self startOfData: cpuAlien) to: #'void *') = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. (minAddress < 0 or: [minWriteMaxExecAddress < 0]) ifTrue: [^self primitiveFailFor: PrimErrBadArgument]. prevInterruptCheckChain := interpreterProxy setInterruptCheckChain: #forceStopOnInterrupt. prevInterruptCheckChain = #forceStopOnInterrupt ifTrue: [prevInterruptCheckChain := 0]. maybeErr := self runCPU: cpu In: (self cCoerceSimple: memory to: #'char *') + offset Size: (interpreterProxy byteSizeOf: memory cPtrAsOop) MinAddressRead: minAddress Write: minWriteMaxExecAddress. interpreterProxy setInterruptCheckChain: prevInterruptCheckChain. maybeErr ~= 0 ifTrue: [^interpreterProxy primitiveFailForOSError: maybeErr]. ^cpuAlien! Item was changed: ----- Method: ProcessorSimulatorPlugin>>primitiveSingleStepInMemory:offsetBy:minimumAddress:readOnlyBelow: (in category 'primitives') ----- "cpuAlien " primitiveSingleStepInMemory: memory "" offsetBy: offset "" minimumAddress: minAddress "" readOnlyBelow: minWriteMaxExecAddress "" "Single-step the cpu using the first argument as the memory and the following arguments defining valid addresses." | cpuAlien cpu maybeErr | + cpuAlien := self primitive: #primitiveSingleStepInMemoryOffsetMinimumAddressReadWrite - cpuAlien := self primitive: #primitiveSingleStepInMemoryMinimumAddressReadWrite parameters: #(WordsOrBytes SmallInteger SmallInteger SmallInteger) receiver: #Oop. (cpu := self cCoerceSimple: (self startOfData: cpuAlien) to: #'void *') = 0 ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadReceiver]. (minAddress < 0 or: [minWriteMaxExecAddress < 0]) ifTrue: [^self primitiveFailFor: PrimErrBadArgument]. maybeErr := self singleStepCPU: cpu In: (self cCoerceSimple: memory to: #'char *') + offset Size: (interpreterProxy byteSizeOf: memory cPtrAsOop) MinAddressRead: minAddress Write: minWriteMaxExecAddress. maybeErr ~= 0 ifTrue: [^interpreterProxy primitiveFailForOSError: maybeErr]. ^cpuAlien! From commits at source.squeak.org Wed Oct 28 18:02:14 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 28 Oct 2020 18:02:14 0000 Subject: [Vm-dev] VM Maker: Cog-eem.418.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.418.mcz ==================== Summary ==================== Name: Cog-eem.418 Author: eem Time: 28 October 2020, 11:02:12.514306 am UUID: c6071ebe-d541-48e9-82ec-da42f9cbb3d0 Ancestors: Cog-eem.417 snd mark alienClass as . =============== Diff against Cog-eem.417 =============== Item was changed: ----- Method: BochsIA32Plugin>>alienClass (in category 'simulation support') ----- alienClass + ^BochsIA32Alien! Item was changed: ----- Method: BochsX64Plugin>>alienClass (in category 'simulation support') ----- alienClass + ^BochsX64Alien! Item was changed: ----- Method: GdbARMv6Plugin>>alienClass (in category 'simulation support') ----- alienClass + ^GdbARMAlien! Item was changed: ----- Method: GdbARMv8Plugin>>alienClass (in category 'simulation support') ----- alienClass + ^GdbARMv8Alien! From noreply at github.com Wed Oct 28 18:12:28 2020 From: noreply at github.com (Eliot Miranda) Date: Wed, 28 Oct 2020 11:12:28 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 647726: ProcessorSimulator plugins as per Cog-eem.418 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 64772676b662b016b372c7a86bc528978be0cea8 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/64772676b662b016b372c7a86bc528978be0cea8 Author: Eliot Miranda Date: 2020-10-28 (Wed, 28 Oct 2020) Changed paths: M platforms/Cross/plugins/BochsIA32Plugin/BochsIA32Plugin.h M platforms/Cross/plugins/BochsIA32Plugin/sqBochsIA32Plugin.cpp M platforms/Cross/plugins/BochsX64Plugin/BochsX64Plugin.h M platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp M platforms/Cross/plugins/GdbARMPlugin/GdbARMPlugin.h M platforms/Cross/plugins/GdbARMPlugin/sqGdbARMPlugin.c M platforms/Cross/plugins/GdbARMv8Plugin/GdbARMv8Plugin.h M platforms/Cross/plugins/GdbARMv8Plugin/sqGdbARMv8Plugin.c A platforms/Cross/plugins/ProcessorSimulatorPlugin.h M platforms/iOS/plugins/GdbARMPlugin/Makefile M src/plugins/BochsIA32Plugin/BochsIA32Plugin.c M src/plugins/BochsX64Plugin/BochsX64Plugin.c M src/plugins/GdbARMPlugin/GdbARMPlugin.c M src/plugins/GdbARMv8Plugin/GdbARMv8Plugin.c M src/plugins/IA32ABI/IA32ABI.c Log Message: ----------- ProcessorSimulator plugins as per Cog-eem.418 IA32ABI plugin as per VMMaker.oscog-eem.2857 Add the offset version of the run/step primitives which allow simulation of the simulator. IA32ABI: make most of the simple acessors simulate. This makes it possible to simulate the simulator ;-) Slang: generate neater code for pointer indirection. Instead of indexing with zero, dereference with *. From no-reply at appveyor.com Wed Oct 28 18:33:38 2020 From: no-reply at appveyor.com (AppVeyor) Date: Wed, 28 Oct 2020 18:33:38 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2286 Message-ID: <20201028183338.1.07AB4912DFB47BE4@appveyor.com> An HTML attachment was scrubbed... URL: From tim at rowledge.org Wed Oct 28 19:05:45 2020 From: tim at rowledge.org (tim Rowledge) Date: Wed, 28 Oct 2020 12:05:45 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: Message-ID: > On 2020-10-28, at 8:34 AM, Yoshiki Ohshima wrote: > > (A professor of my college days once told us that "most bugs are related to uninitialized variables." I should've known better.) AKA - Constants aren't. Variables won't. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Oxymorons: Religious tolerance From Yoshiki.Ohshima at acm.org Wed Oct 28 19:59:40 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Wed, 28 Oct 2020 12:59:40 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: As for linux64ARMv8, I had to hack like this (The below is somewhat inconsistent but you'll get an idea) to get it produce a VM: It looks like an issue of missing compiler macros for the architecture. The hack to sqUnixHeartbeat.c is likely to be wrong... the asm code specified for __ARM_ARCHI_ISA_A64 does not compile. ----------------------------------------------- diff --git a/platforms/Cross/vm/sqAtomicOps.h b/platforms/Cross/vm/sqAtomicOps.h index ff5d3fdd7..96abe3a22 100644 --- a/platforms/Cross/vm/sqAtomicOps.h +++ b/platforms/Cross/vm/sqAtomicOps.h @@ -203,7 +203,7 @@ AtomicGet(__int64 *target) # else /* TARGET_OS_IS_IPHONE elif x86 variants etc */ -#if defined(__arm__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__)) +#if defined(__arm__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__)) || 1 /* tpr - this is code intended for the Raspberry Pi Raspbian OS * We'll experimentally trust in our MMU to keep 64bit accesses atomic */ # define get64(variable) variable diff --git a/platforms/unix/vm/sqUnixHeartbeat.c b/platforms/unix/vm/sqUnixHeartbeat.c index e9e3545fa..a526b4515 100644 --- a/platforms/unix/vm/sqUnixHeartbeat.c +++ b/platforms/unix/vm/sqUnixHeartbeat.c @@ -183,7 +183,7 @@ ioHighResClock(void) : "rdx"); #elif defined(__ARM_ARCH_ISA_A64) || defined(__arm64__) || defined(__aarch64__) || defined(ARM64) __asm__ __volatile__ ("MRS X0, CNTVCT_EL0"); -#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__)) +#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__)) || 1 /* tpr - do nothing for now; needs input from eliot to decide further */ /* Tim, not sure I have input beyond: Is there a 64-bit clock on ARM? If so, access it here :-) diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c index d62b05f40..110685ac4 100644 --- a/spur64src/vm/cogit.c +++ b/spur64src/vm/cogit.c @@ -6,6 +6,8 @@ # define SysV 1 #endif +#define __arm64__ 1 + #if defined(__arm64__) || defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) # include "cogitARMv8.c" diff --git a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c index 2878f9529..a0e5e0596 100644 --- a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c +++ b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c @@ -7,7 +7,7 @@ # define ARM32FFIPlugin_exports SqueakFFIPrims_exports # include "ARM32FFIPlugin.c" -#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) +#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) || 1 # define ARM64FFIPlugin_exports SqueakFFIPrims_exports # include "ARM64FFIPlugin.c" On Wed, Oct 28, 2020 at 9:24 AM Yoshiki Ohshima wrote: > Ok! > > I did make a pull request but then merged it by myself. Next thing for me > to try is to build linux64ARMv8. > > On Wed, Oct 28, 2020 at 8:47 AM Eliot Miranda > wrote: > >> >> Hi Yoshiki, >> >> On Oct 28, 2020, at 8:34 AM, Yoshiki Ohshima >> wrote: >> >>  >> Come to think of it, a better fix for a problem like this one: >> >> KeySym symbolic; >> int keyCode= x2sqKey(&evt->xkey, &symbolic); >> int ucs4= xkeysym2ucs4(symbolic); >> >> was (obviously) to change the first line to: >> >> KeySym symbolic= 0; >> >> rather than to try to store 0 into *symbolic on the callee side. (A >> professor of my college days once told us that "most bugs are related to >> uninitialized variables." I should've known better.) >> >> >> I had exactly this bug in the win32 CameraPlugin the other day. And it >> didn’t surface until shutting down the plugin on exiting the system. C, >> what a love/hate relationship it engenders :-) >> >> When I get around to it, I'll make another change and this time make a >> pull request. >> >> >> Or if you’d like I could invite you to become a committer and then you >> could avoid the pull request. >> >> >> >> On Tue, Oct 27, 2020 at 11:43 AM Eliot Miranda >> wrote: >> >>> >>> >>> >>> On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima < >>> Yoshiki.Ohshima at acm.org> wrote: >>> >>>> >>>> Thanks! Maybe I should not have sent a separate email to Eliot ^^; >>>> >>> >>> Don't sweat it :-) Fixes gratefully received :-) Thanks *very* much >>> for attending to the input issue. Much appreciated. >>> >>>> >>>> On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier < >>>> nicolas.cellier.aka.nice at gmail.com> wrote: >>>> >>>>> >>>>> Ah too late, Eliot was faster, hit the pull request next time :) >>>>> >>>>> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < >>>>> nicolas.cellier.aka.nice at gmail.com> a écrit : >>>>> >>>>>> Hi Yoshiki, >>>>>> what you could do is >>>>>> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since we >>>>>> have a working workaround now >>>>>> 2) just create a pull request from the github web interface (that's >>>>>> rather easy) >>>>>> It will be very easy for us to integrate (one click), and we'll keep >>>>>> your authorship. >>>>>> >>>>>> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima < >>>>>> Yoshiki.Ohshima at acm.org> a écrit : >>>>>> >>>>>>> >>>>>>> I have a branch on a clone on github: >>>>>>> >>>>>>> >>>>>>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>>>>>> >>>>>>> It might be easier to pull from this? Separately, I'll mail you >>>>>>> sqUnixX11.c. >>>>>>> >>>>>>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda < >>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>> >>>>>>>> >>>>>>>> Hi Yoshiki, >>>>>>>> >>>>>>>> on my Mac patch isn't smart enough to decode a git diff. Can >>>>>>>> you just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll >>>>>>>> integrate? Thanks! >>>>>>>> >>>>>>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima < >>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> The previous one was just a hack but I think I found the real >>>>>>>>> problem. It was about the variable symbolic, that gets symbolic key code >>>>>>>>> *when* it is needed has to be zero'ed out when it is not needed. >>>>>>>>> >>>>>>>>> The diff is attached... I'll a make pull request if that helps. >>>>>>>>> >>>>>>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>> >>>>>>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a >>>>>>>>>> hack I did was like this: >>>>>>>>>> >>>>>>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>> >>>>>>>>>> index 268593673..bfb57257b 100644 >>>>>>>>>> >>>>>>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>> >>>>>>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>> >>>>>>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char >>>>>>>>>> *uxName, sqInt stNameIndex, int sqNameLeng >>>>>>>>>> >>>>>>>>>> #undef sqFTruncate >>>>>>>>>> >>>>>>>>>> /* sqFTruncate should return 0 on success, ftruncate does also >>>>>>>>>> */ >>>>>>>>>> >>>>>>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>>>>>> >>>>>>>>>> -#define ftell(s) ftello(s) >>>>>>>>>> >>>>>>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>> >>>>>>>>>> +// #define ftell(s) ftello(s) >>>>>>>>>> >>>>>>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> #if defined(__GNUC__) >>>>>>>>>> >>>>>>>>>> # if !defined(VM_LABEL) >>>>>>>>>> >>>>>>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>>>>>> >>>>>>>>>> index d62b05f40..e1c14a021 100644 >>>>>>>>>> >>>>>>>>>> --- a/spur64src/vm/cogit.c >>>>>>>>>> >>>>>>>>>> +++ b/spur64src/vm/cogit.c >>>>>>>>>> >>>>>>>>>> @@ -6,6 +6,8 @@ >>>>>>>>>> >>>>>>>>>> # define SysV 1 >>>>>>>>>> >>>>>>>>>> #endif >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> +#define __arm64__ >>>>>>>>>> >>>>>>>>>> + >>>>>>>>>> >>>>>>>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>>>>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>>>>>> >>>>>>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>> >>>>>>>>>>> And I tried a few more things by checking out the last release >>>>>>>>>>> tag 202003021730 or try opensmalltalk-vm/build. >>>>>>>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts did >>>>>>>>>>> not work. For the latter got this error: >>>>>>>>>>> >>>>>>>>>>> In file included from /usr/include/features.h:424, >>>>>>>>>>> >>>>>>>>>>> from /usr/include/pthread.h:21, >>>>>>>>>>> >>>>>>>>>>> from >>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>>>>>> >>>>>>>>>>> from >>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>> >>>>>>>>>>> from >>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>> >>>>>>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for >>>>>>>>>>> ‘fseeko’ >>>>>>>>>>> >>>>>>>>>>> extern int __REDIRECT (fseeko, >>>>>>>>>>> >>>>>>>>>>> ^~~~~~~~~~ >>>>>>>>>>> >>>>>>>>>>> In file included from >>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>> >>>>>>>>>>> from >>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>> >>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>>>>>>> note: previous declaration \ >>>>>>>>>>> >>>>>>>>>>> of ‘fseeko’ was here >>>>>>>>>>> >>>>>>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>> >>>>>>>>>>> ^~~~~~ >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi Eliot, >>>>>>>>>>>> >>>>>>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>>>>>>>>>> following error. I think I followed the steps in the instructions, >>>>>>>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>>>>>> >>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: >>>>>>>>>>>> #error As yet no Cogit implementation appears to exist for your platform. >>>>>>>>>>>> >>>>>>>>>>>> # error As yet no Cogit implementation appears to exist for >>>>>>>>>>>> your platform. >>>>>>>>>>>> >>>>>>>>>>>> ^~~~~ >>>>>>>>>>>> >>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: >>>>>>>>>>>> #error Consider implementing it, starting by adding a subclass of >>>>>>>>>>>> CogAbstractInstruction. >>>>>>>>>>>> >>>>>>>>>>>> # error Consider implementing it, starting by adding a >>>>>>>>>>>> subclass of CogAbstractInstruction. >>>>>>>>>>>> >>>>>>>>>>>> ^~~~~ >>>>>>>>>>>> >>>>>>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>>>>>> >>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>>>> >>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>> >>>>>>>>>>>>>> I heard that people got a new problem in inputting Japanese >>>>>>>>>>>>>> text into Scratch 1.4 running on Raspberry Pi OS after, or around the >>>>>>>>>>>>>> version 2020-08-20. I would like to take a look at it but it might involve >>>>>>>>>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>>>>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to >>>>>>>>>>>>>> date and straightforward? Can people point me to the right point to start? >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>>>>>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>>>>>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then run >>>>>>>>>>>>> ./mvm >>>>>>>>>>>>> >>>>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>>>> best, Eliot >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> -- Yoshiki >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> -- Yoshiki >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- Yoshiki >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> _,,,^..^,,,_ >>>>>>>> best, Eliot >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- Yoshiki >>>>>>> >>>>>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>>> >>> >>> -- >>> _,,,^..^,,,_ >>> best, Eliot >>> >> >> >> -- >> -- Yoshiki >> >> > > -- > -- Yoshiki > > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Wed Oct 28 20:07:29 2020 From: tim at rowledge.org (tim Rowledge) Date: Wed, 28 Oct 2020 13:07:29 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: Weird - I didn't have to change anything to get it to compile, but it won't run on Raspberry Pi OS 64 yet because of the write/execute address flimflammery that Eliot has had to mess with. > On 2020-10-28, at 12:59 PM, Yoshiki Ohshima wrote: > > As for linux64ARMv8, I had to hack like this (The below is somewhat inconsistent but you'll get an idea) to get it produce a VM: > > It looks like an issue of missing compiler macros for the architecture. The hack to sqUnixHeartbeat.c is likely to be wrong... the asm code specified for __ARM_ARCHI_ISA_A64 does not compile. > > ----------------------------------------------- > diff --git a/platforms/Cross/vm/sqAtomicOps.h b/platforms/Cross/vm/sqAtomicOps.h > index ff5d3fdd7..96abe3a22 100644 > --- a/platforms/Cross/vm/sqAtomicOps.h > +++ b/platforms/Cross/vm/sqAtomicOps.h > @@ -203,7 +203,7 @@ AtomicGet(__int64 *target) > > # else /* TARGET_OS_IS_IPHONE elif x86 variants etc */ > > -#if defined(__arm__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__)) > +#if defined(__arm__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__)) || 1 > /* tpr - this is code intended for the Raspberry Pi Raspbian OS > * We'll experimentally trust in our MMU to keep 64bit accesses atomic */ > # define get64(variable) variable > diff --git a/platforms/unix/vm/sqUnixHeartbeat.c b/platforms/unix/vm/sqUnixHeartbeat.c > index e9e3545fa..a526b4515 100644 > --- a/platforms/unix/vm/sqUnixHeartbeat.c > +++ b/platforms/unix/vm/sqUnixHeartbeat.c > @@ -183,7 +183,7 @@ ioHighResClock(void) > : "rdx"); > #elif defined(__ARM_ARCH_ISA_A64) || defined(__arm64__) || defined(__aarch64__) || defined(ARM64) > __asm__ __volatile__ ("MRS X0, CNTVCT_EL0"); > -#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__)) > +#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7A__)) || 1 > /* tpr - do nothing for now; needs input from eliot to decide further */ > /* Tim, not sure I have input beyond: > Is there a 64-bit clock on ARM? If so, access it here :-) > diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c > index d62b05f40..110685ac4 100644 > --- a/spur64src/vm/cogit.c > +++ b/spur64src/vm/cogit.c > @@ -6,6 +6,8 @@ > # define SysV 1 > #endif > > +#define __arm64__ 1 > + > #if defined(__arm64__) || defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) > > # include "cogitARMv8.c" > diff --git a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c > index 2878f9529..a0e5e0596 100644 > --- a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c > +++ b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c > @@ -7,7 +7,7 @@ > # define ARM32FFIPlugin_exports SqueakFFIPrims_exports > # include "ARM32FFIPlugin.c" > > -#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) > +#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) || 1 > > # define ARM64FFIPlugin_exports SqueakFFIPrims_exports > # include "ARM64FFIPlugin.c" > > > On Wed, Oct 28, 2020 at 9:24 AM Yoshiki Ohshima wrote: > Ok! > > I did make a pull request but then merged it by myself. Next thing for me to try is to build linux64ARMv8. > > On Wed, Oct 28, 2020 at 8:47 AM Eliot Miranda wrote: > > Hi Yoshiki, > >> On Oct 28, 2020, at 8:34 AM, Yoshiki Ohshima wrote: >> >>  >> Come to think of it, a better fix for a problem like this one: >> >> KeySym symbolic; >> int keyCode= x2sqKey(&evt->xkey, &symbolic); >> int ucs4= xkeysym2ucs4(symbolic); >> >> was (obviously) to change the first line to: >> >> KeySym symbolic= 0; >> >> rather than to try to store 0 into *symbolic on the callee side. (A professor of my college days once told us that "most bugs are related to uninitialized variables." I should've known better.) > > I had exactly this bug in the win32 CameraPlugin the other day. And it didn’t surface until shutting down the plugin on exiting the system. C, what a love/hate relationship it engenders :-) > >> When I get around to it, I'll make another change and this time make a pull request. > > Or if you’d like I could invite you to become a committer and then you could avoid the pull request. > >> >> >> On Tue, Oct 27, 2020 at 11:43 AM Eliot Miranda wrote: >> >> >> >> On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima wrote: >> >> Thanks! Maybe I should not have sent a separate email to Eliot ^^; >> >> Don't sweat it :-) Fixes gratefully received :-) Thanks *very* much for attending to the input issue. Much appreciated. >> >> On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier wrote: >> >> Ah too late, Eliot was faster, hit the pull request next time :) >> >> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier a écrit : >> Hi Yoshiki, >> what you could do is >> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since we have a working workaround now >> 2) just create a pull request from the github web interface (that's rather easy) >> It will be very easy for us to integrate (one click), and we'll keep your authorship. >> >> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima a écrit : >> >> I have a branch on a clone on github: >> >> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >> >> It might be easier to pull from this? Separately, I'll mail you sqUnixX11.c. >> >> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda wrote: >> >> Hi Yoshiki, >> >> on my Mac patch isn't smart enough to decode a git diff. Can you just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll integrate? Thanks! >> >> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima wrote: >> >> The previous one was just a hack but I think I found the real problem. It was about the variable symbolic, that gets symbolic key code *when* it is needed has to be zero'ed out when it is not needed. >> >> The diff is attached... I'll a make pull request if that helps. >> >> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima wrote: >> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a hack I did was like this: >> >> diff --git a/platforms/unix/vm/sqPlatformSpecific.h b/platforms/unix/vm/sqPlatformSpecific.h >> index 268593673..bfb57257b 100644 >> --- a/platforms/unix/vm/sqPlatformSpecific.h >> +++ b/platforms/unix/vm/sqPlatformSpecific.h >> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char *uxName, sqInt stNameIndex, int sqNameLeng >> #undef sqFTruncate >> /* sqFTruncate should return 0 on success, ftruncate does also */ >> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >> -#define ftell(s) ftello(s) >> -#define fseek(s,o,w) fseeko(s,o,w) >> +// #define ftell(s) ftello(s) >> +// #define fseek(s,o,w) fseeko(s,o,w) >> >> #if defined(__GNUC__) >> # if !defined(VM_LABEL) >> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >> index d62b05f40..e1c14a021 100644 >> --- a/spur64src/vm/cogit.c >> +++ b/spur64src/vm/cogit.c >> @@ -6,6 +6,8 @@ >> # define SysV 1 >> #endif >> >> +#define __arm64__ >> + >> #if defined(__arm64__) || defined(__aarch64__) || defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >> >> and this produced a runnable VM on Raspberry Pi4 >> >> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima wrote: >> And I tried a few more things by checking out the last release tag 202003021730 or try opensmalltalk-vm/build.linuxARMv6/squeak.cog.spur/build.debug but those attempts did not work. For the latter got this error: >> >> In file included from /usr/include/features.h:424, >> from /usr/include/pthread.h:21, >> from /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >> from /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >> from /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >> /usr/include/stdio.h:721:12: error: conflicting types for ‘fseeko’ >> extern int __REDIRECT (fseeko, >> ^~~~~~~~~~ >> In file included from /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >> from /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: note: previous declaration \ >> of ‘fseeko’ was here >> #define fseek(s,o,w) fseeko(s,o,w) >> ^~~~~~ >> >> >> >> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima wrote: >> Hi Eliot, >> >> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the following error. I think I followed the steps in the instructions, including running updateSCCSVersion and mvm. How can I fix it? >> >> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: #error As yet no Cogit implementation appears to exist for your platform. >> # error As yet no Cogit implementation appears to exist for your platform. >> ^~~~~ >> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: #error Consider implementing it, starting by adding a subclass of CogAbstractInstruction. >> # error Consider implementing it, starting by adding a subclass of CogAbstractInstruction. >> ^~~~~ >> make[1]: *** [Makefile:207: cogit.o] >> >> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda wrote: >> >> Hi Yoshiki, >> >> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima wrote: >> >> Hi, >> >> I heard that people got a new problem in inputting Japanese text into Scratch 1.4 running on Raspberry Pi OS after, or around the version 2020-08-20. I would like to take a look at it but it might involve recompiling and generating the VM with debugging info. Last time I looked into it was years and years ago and I need to basically make a fresh start. >> >> Is the process of making NuSqeauk VM For Raspberry Pi up to date and straightforward? Can people point me to the right point to start? >> >> Making a Cog VM for Raspberry pi is straight-forward. Clone opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, or build.linux64ARMv8/squeak.stack.spur/build.debug, then run ./mvm >> >> _,,,^..^,,,_ >> best, Eliot >> >> >> -- >> -- Yoshiki >> >> >> >> -- >> -- Yoshiki >> >> >> >> -- >> -- Yoshiki >> >> >> >> -- >> -- Yoshiki >> >> >> >> -- >> _,,,^..^,,,_ >> best, Eliot >> >> >> -- >> -- Yoshiki >> >> >> >> -- >> -- Yoshiki >> >> >> >> -- >> _,,,^..^,,,_ >> best, Eliot >> >> >> -- >> -- Yoshiki >> > > > -- > -- Yoshiki > > > > -- > -- Yoshiki > tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Cave ne ante ullas catapultas ambules = If I were you, I wouldn't walk in front of any catapults. From leves at caesar.elte.hu Wed Oct 28 20:40:29 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed, 28 Oct 2020 21:40:29 +0100 (CET) Subject: [Vm-dev] CI status In-Reply-To: <4864BEBA-7255-4034-8F1A-4FD60C8A3933@gmx.de> References: <16B92539-2604-4D9E-8C23-A50179B9543B@gmail.com> <53D4A481-1BFE-4A25-80E7-91EDC3D7F6A9@rowledge.org> <4864BEBA-7255-4034-8F1A-4FD60C8A3933@gmx.de> Message-ID: Hi Tobias, On Wed, 28 Oct 2020, Tobias Pape wrote: > BTW: Eliot, the VM spits out a "aioDisable: epoll_ctl: Bad file descriptor". Is that expected? Yes, it is expected. See "Known issue" at https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528 . Levente From Das.Linux at gmx.de Wed Oct 28 20:49:23 2020 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed, 28 Oct 2020 21:49:23 +0100 Subject: [Vm-dev] CI status In-Reply-To: References: <16B92539-2604-4D9E-8C23-A50179B9543B@gmail.com> <53D4A481-1BFE-4A25-80E7-91EDC3D7F6A9@rowledge.org> <4864BEBA-7255-4034-8F1A-4FD60C8A3933@gmx.de> Message-ID: <886DBE5E-95B8-44D1-8A01-4FB559D0B59E@gmx.de> > On 28.10.2020, at 21:40, Levente Uzonyi wrote: > > Hi Tobias, > > On Wed, 28 Oct 2020, Tobias Pape wrote: > >> BTW: Eliot, the VM spits out a "aioDisable: epoll_ctl: Bad file descriptor". Is that expected? > > Yes, it is expected. See "Known issue" at > https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/528 . > My bad, I didn't read properly :D -t From nicolas.cellier.aka.nice at gmail.com Wed Oct 28 21:11:10 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Wed, 28 Oct 2020 22:11:10 +0100 Subject: [Vm-dev] CI status In-Reply-To: References: Message-ID: Le mer. 28 oct. 2020 à 17:23, Eliot Miranda a écrit : > > Hi Tobi, Hi Levente, > > > On Oct 28, 2020, at 7:06 AM, Tobias Pape wrote: > > > >  > > Hi > > > >>>>> On 27.10.2020, at 23:39, Nicolas Cellier < > nicolas.cellier.aka.nice at gmail.com> wrote: > >> Hi Tim, > >> what is the result on that box with threaded heartbeat VM of: > >> [SUnitToolBuilderTests new testHandlingNotification] timeToRun. > >> If it is more than 5000 ms, then you would confirm the problem that I > encounter. > >> This testHandlingNotification is repeating 10 loops with a 200ms delay > wait. > >> The problem I've got with threaded heartbeat VM is that first 5 delays > run normally, but next 5 will last for 1 second instead of 200ms... > >> This is probably what happens on the CI server too (the test times out > and CI fails). > > > > Also note that the CI test builds both vms but uses the last one built > (because it overwrites the first), and that happens to be the itimer one, > not th ethreaded. > > > > The code above runs in around ~2000 ms on my machine (~2015, with ubuntu > 18.04) > > > > Things that happened: > > - I just ran the test suite in the DEBUG itimer headful and headless > variant and it passes. > > - I just ran the test suite in the DEBUG threaded headful and headless > variant and it passes. > > - I ran the RELEASE itimer headful and headless variant and it passes > > - I ran the RELEASE threaded headless variant and it FAILED as on the CI > > - I ran the RELEASE threaded headful variant and it FAILED LESS > > I mean: testHandlingNotification passed, and so did > testValueWithinTimingBasic and testValueWithinTimingNestedInner > > but testValueWithinTimingNestedOuter testValueWithinTimingRepeat > still fail! > > > > So there are discrepancies between > > debug and release and > > headful and headless (at least for threaded release) > > > > TL;DR: The linux x86_32 cog v3 threaded release vm has a timing problem > ... > > > > Does that help anyone? > > If you add code to extract the number of ioProcessEvents calls etc (see > About Squeak VM parameters tab for the relevant info) does that tell us > more? IIRC one available vm parameter is the number of heartbeats. So we > should be able to see if it is the heartbeat itself that is failing or if > it is further up stream. > > Hi Eliot, I instrumented the code like that: testHandlingNotification | receivedSignal resumed | receivedSignal := resumed := false. [ | count | "client-code puts up progress, and signals some notications" Transcript cr; nextPutAll: 'test begins:'; print: Time utcMicrosecondClock \\ 3600000000. count := 0. 'doing something' displayProgressFrom: 0 to: 10 during: [ : bar | 10 timesRepeat: [ bar value: (count := count + 1). Transcript cr; nextPutAll: 'count:'; print: count. Transcript cr; nextPutAll: 'before wait:'; print: Time utcMicrosecondClock \\ 3600000000. (Delay forMilliseconds: 200) wait. Transcript cr; nextPutAll: 'after wait:'; print: Time utcMicrosecondClock \\ 3600000000. Notification signal: 'message'. Transcript cr; nextPutAll: 'after notified:'; print: Time utcMicrosecondClock \\ 3600000000. Transcript cr; nextPutAll: '# ioProcessEvents: '; print: (Smalltalk vmParameterAt: 57). Transcript cr; nextPutAll: '# forceInterruptCheck: '; print: (Smalltalk vmParameterAt: 58). Transcript cr; nextPutAll: '# check event calls: '; print: (Smalltalk vmParameterAt: 59). resumed := true ] ] ] on: Notification do: [ : noti | receivedSignal := true. Transcript cr; nextPutAll: 'notified at:'; print: Time utcMicrosecondClock \\ 3600000000. noti resume ]. Transcript endEntry. self assert: receivedSignal ; assert: resumed The result I obtain with an updated trunk image and 64bits threaded VM: build.linux64x64/squeak.cog.spur/build$ ./squeak ../../../image/trunk6-64.image test begins:80631205 notified at:80631251 count:1 before wait:80633324 after wait:80834614 after notified:80834670 # ioProcessEvents: 94 # forceInterruptCheck: 3368 # check event calls: 815 count:2 before wait:80835008 after wait:81036398 after notified:81036454 # ioProcessEvents: 103 # forceInterruptCheck: 3459 # check event calls: 906 count:3 before wait:81036755 after wait:81238355 after notified:81238374 # ioProcessEvents: 113 # forceInterruptCheck: 3549 # check event calls: 996 count:4 before wait:81238633 after wait:81440889 after notified:81440909 # ioProcessEvents: 123 # forceInterruptCheck: 3639 # check event calls: 1086 count:5 before wait:81441151 after wait:82609021 after notified:82609053 # ioProcessEvents: 132 # forceInterruptCheck: 4119 # check event calls: 1161 count:6 before wait:82609520 after wait:83611465 after notified:83611497 # ioProcessEvents: 133 # forceInterruptCheck: 4536 # check event calls: 1162 count:7 before wait:83611974 after wait:84614429 after notified:84614462 # ioProcessEvents: 134 # forceInterruptCheck: 4961 # check event calls: 1165 count:8 before wait:84614926 after wait:85617377 after notified:85617404 # ioProcessEvents: 135 # forceInterruptCheck: 5368 # check event calls: 1166 count:9 before wait:85617840 after wait:86618396 after notified:86618428 # ioProcessEvents: 136 # forceInterruptCheck: 5776 # check event calls: 1167 count:10 before wait:86618896 after wait:87620232 after notified:87620291 # ioProcessEvents: 137 # forceInterruptCheck: 6196 # check event calls: 1168 Notice 10 ioProcessEvents and about 200ms wait on loop 1-5. Then a single ioProcessEvent and about 1000ms wait on loops 6-10 (single check event call too). -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.cellier.aka.nice at gmail.com Wed Oct 28 21:21:35 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Wed, 28 Oct 2020 22:21:35 +0100 Subject: [Vm-dev] CI status In-Reply-To: References: Message-ID: Le mer. 28 oct. 2020 à 22:11, Nicolas Cellier < nicolas.cellier.aka.nice at gmail.com> a écrit : > > > Le mer. 28 oct. 2020 à 17:23, Eliot Miranda a > écrit : > >> >> Hi Tobi, Hi Levente, >> >> > On Oct 28, 2020, at 7:06 AM, Tobias Pape wrote: >> > >> >  >> > Hi >> > >> >>>>> On 27.10.2020, at 23:39, Nicolas Cellier < >> nicolas.cellier.aka.nice at gmail.com> wrote: >> >> Hi Tim, >> >> what is the result on that box with threaded heartbeat VM of: >> >> [SUnitToolBuilderTests new testHandlingNotification] timeToRun. >> >> If it is more than 5000 ms, then you would confirm the problem that I >> encounter. >> >> This testHandlingNotification is repeating 10 loops with a 200ms delay >> wait. >> >> The problem I've got with threaded heartbeat VM is that first 5 delays >> run normally, but next 5 will last for 1 second instead of 200ms... >> >> This is probably what happens on the CI server too (the test times out >> and CI fails). >> > >> > Also note that the CI test builds both vms but uses the last one built >> (because it overwrites the first), and that happens to be the itimer one, >> not th ethreaded. >> > >> > The code above runs in around ~2000 ms on my machine (~2015, with >> ubuntu 18.04) >> > >> > Things that happened: >> > - I just ran the test suite in the DEBUG itimer headful and headless >> variant and it passes. >> > - I just ran the test suite in the DEBUG threaded headful and headless >> variant and it passes. >> > - I ran the RELEASE itimer headful and headless variant and it passes >> > - I ran the RELEASE threaded headless variant and it FAILED as on the CI >> > - I ran the RELEASE threaded headful variant and it FAILED LESS >> > I mean: testHandlingNotification passed, and so did >> testValueWithinTimingBasic and testValueWithinTimingNestedInner >> > but testValueWithinTimingNestedOuter testValueWithinTimingRepeat >> still fail! >> > >> > So there are discrepancies between >> > debug and release and >> > headful and headless (at least for threaded release) >> > >> > TL;DR: The linux x86_32 cog v3 threaded release vm has a timing problem >> ... >> > >> > Does that help anyone? >> >> If you add code to extract the number of ioProcessEvents calls etc (see >> About Squeak VM parameters tab for the relevant info) does that tell us >> more? IIRC one available vm parameter is the number of heartbeats. So we >> should be able to see if it is the heartbeat itself that is failing or if >> it is further up stream. >> >> > Hi Eliot, > I instrumented the code like that: > > testHandlingNotification > | receivedSignal resumed | > receivedSignal := resumed := false. > [ | count | > "client-code puts up progress, and signals some notications" > Transcript cr; nextPutAll: 'test begins:'; print: Time > utcMicrosecondClock \\ 3600000000. > count := 0. > 'doing something' > displayProgressFrom: 0 > to: 10 > during: > [ : bar | 10 timesRepeat: > [ bar value: (count := count + 1). > Transcript cr; nextPutAll: 'count:'; print: count. > Transcript cr; nextPutAll: 'before wait:'; print: Time > utcMicrosecondClock \\ 3600000000. > (Delay forMilliseconds: 200) wait. > Transcript cr; nextPutAll: 'after wait:'; print: Time > utcMicrosecondClock \\ 3600000000. > Notification signal: 'message'. > Transcript cr; nextPutAll: 'after notified:'; print: Time > utcMicrosecondClock \\ 3600000000. > Transcript cr; nextPutAll: '# ioProcessEvents: '; print: > (Smalltalk vmParameterAt: 57). > Transcript cr; nextPutAll: '# forceInterruptCheck: '; > print: (Smalltalk vmParameterAt: 58). > Transcript cr; nextPutAll: '# check event calls: '; print: > (Smalltalk vmParameterAt: 59). > resumed := true ] ] ] > on: Notification > do: > [ : noti | receivedSignal := true. > Transcript cr; nextPutAll: 'notified at:'; print: Time > utcMicrosecondClock \\ 3600000000. > noti resume ]. > Transcript endEntry. > self > assert: receivedSignal ; > assert: resumed > > The result I obtain with an updated trunk image and 64bits threaded VM: > build.linux64x64/squeak.cog.spur/build$ ./squeak > ../../../image/trunk6-64.image > > test begins:80631205 > notified at:80631251 > count:1 > before wait:80633324 > after wait:80834614 > after notified:80834670 > # ioProcessEvents: 94 > # forceInterruptCheck: 3368 > # check event calls: 815 > count:2 > before wait:80835008 > after wait:81036398 > after notified:81036454 > # ioProcessEvents: 103 > # forceInterruptCheck: 3459 > # check event calls: 906 > count:3 > before wait:81036755 > after wait:81238355 > after notified:81238374 > # ioProcessEvents: 113 > # forceInterruptCheck: 3549 > # check event calls: 996 > count:4 > before wait:81238633 > after wait:81440889 > after notified:81440909 > # ioProcessEvents: 123 > # forceInterruptCheck: 3639 > # check event calls: 1086 > count:5 > before wait:81441151 > after wait:82609021 > after notified:82609053 > # ioProcessEvents: 132 > # forceInterruptCheck: 4119 > # check event calls: 1161 > count:6 > before wait:82609520 > after wait:83611465 > after notified:83611497 > # ioProcessEvents: 133 > # forceInterruptCheck: 4536 > # check event calls: 1162 > count:7 > before wait:83611974 > after wait:84614429 > after notified:84614462 > # ioProcessEvents: 134 > # forceInterruptCheck: 4961 > # check event calls: 1165 > count:8 > before wait:84614926 > after wait:85617377 > after notified:85617404 > # ioProcessEvents: 135 > # forceInterruptCheck: 5368 > # check event calls: 1166 > count:9 > before wait:85617840 > after wait:86618396 > after notified:86618428 > # ioProcessEvents: 136 > # forceInterruptCheck: 5776 > # check event calls: 1167 > count:10 > before wait:86618896 > after wait:87620232 > after notified:87620291 > # ioProcessEvents: 137 > # forceInterruptCheck: 6196 > # check event calls: 1168 > > Notice 10 ioProcessEvents and about 200ms wait on loop 1-5. > Then a single ioProcessEvent and about 1000ms wait on loops 6-10 (single > check event call too). > and on itimer heatbeat, 200ms per loop, 10 ioProcessEvents, 100 forceInterruptCheck and 100 check event calls This is consistent with the 2ms heartbeat (vmParameter #26). linux64x64/squeak.cog.spur/build.itimerheartbeat$ ./squeak ../../../image/trunk6-64.image test begins:1013906366 notified at:1013906407 count:1 before wait:1013910362 after wait:1014112028 after notified:1014112085 # ioProcessEvents: 208 # forceInterruptCheck: 2299 # check event calls: 2236 count:2 before wait:1014112443 after wait:1014314011 after notified:1014314062 # ioProcessEvents: 218 # forceInterruptCheck: 2400 # check event calls: 2337 count:3 before wait:1014314405 after wait:1014516017 after notified:1014516052 # ioProcessEvents: 228 # forceInterruptCheck: 2501 # check event calls: 2438 count:4 before wait:1014516326 after wait:1014718011 after notified:1014718039 # ioProcessEvents: 237 # forceInterruptCheck: 2602 # check event calls: 2539 count:5 before wait:1014718296 after wait:1014920490 after notified:1014920521 # ioProcessEvents: 247 # forceInterruptCheck: 2703 # check event calls: 2640 count:6 before wait:1014920967 after wait:1015122184 after notified:1015122215 # ioProcessEvents: 256 # forceInterruptCheck: 2804 # check event calls: 2741 count:7 before wait:1015122608 after wait:1015324166 after notified:1015324198 # ioProcessEvents: 266 # forceInterruptCheck: 2905 # check event calls: 2841 count:8 before wait:1015324595 after wait:1015526278 after notified:1015526299 # ioProcessEvents: 275 # forceInterruptCheck: 3006 # check event calls: 2942 count:9 before wait:1015526556 after wait:1015728488 after notified:1015728518 # ioProcessEvents: 285 # forceInterruptCheck: 3107 # check event calls: 3042 count:10 before wait:1015728947 after wait:1015930499 after notified:1015930530 # ioProcessEvents: 295 # forceInterruptCheck: 3208 # check event calls: 3143 -------------- next part -------------- An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Wed Oct 28 21:23:36 2020 From: no-reply at appveyor.com (AppVeyor) Date: Wed, 28 Oct 2020 21:23:36 +0000 Subject: [Vm-dev] Build completed: opensmalltalk-vm 1.0.2287 Message-ID: <20201028212336.1.680B77DE4A91CB7D@appveyor.com> An HTML attachment was scrubbed... URL: From no-reply at appveyor.com Wed Oct 28 21:23:48 2020 From: no-reply at appveyor.com (AppVeyor) Date: Wed, 28 Oct 2020 21:23:48 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2288 Message-ID: <20201028212348.1.C617705D050B9C6C@appveyor.com> An HTML attachment was scrubbed... URL: From tim at rowledge.org Wed Oct 28 21:54:13 2020 From: tim at rowledge.org (tim Rowledge) Date: Wed, 28 Oct 2020 14:54:13 -0700 Subject: [Vm-dev] CI status In-Reply-To: References: <16B92539-2604-4D9E-8C23-A50179B9543B@gmail.com> <53D4A481-1BFE-4A25-80E7-91EDC3D7F6A9@rowledge.org> Message-ID: <38E1FC3E-6E2D-4885-9508-3602776A61C0@rowledge.org> > On 2020-10-27, at 3:39 PM, Nicolas Cellier wrote: > > [SUnitToolBuilderTests new testHandlingNotification] timeToRun. Hmm. I consistently get 2020mS, despite the previously mentioned problem with the stupid RTPRIO stuff. 2030 on a Pi 4, with no rtprio problems. Do any of the VM Parameteres in the 'About Squeak' window tell us anything useful here? the x64 box says #26 2 heartbeat peiod for example. Again, Pi #26 2 heartbeat period ...so no difference there. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Foolproof operation: All parameters are hard coded. From tim at rowledge.org Wed Oct 28 22:02:33 2020 From: tim at rowledge.org (tim Rowledge) Date: Wed, 28 Oct 2020 15:02:33 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: > On 2020-10-28, at 9:24 AM, Yoshiki Ohshima wrote: > > Ok! > > I did make a pull request but then merged it by myself. Next thing for me to try is to build linux64ARMv8. Assuming you do get a working ARMv8 VM, you *should* find that loading NuScratch from SqueakMap works. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Cashtration (n.): The act of buying a house, which renders the subject financially impotent for an indefinite period. From eliot.miranda at gmail.com Wed Oct 28 22:55:45 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed, 28 Oct 2020 15:55:45 -0700 Subject: [Vm-dev] CI status In-Reply-To: References: Message-ID: Hi Nicolas, On Wed, Oct 28, 2020 at 2:21 PM Nicolas Cellier < nicolas.cellier.aka.nice at gmail.com> wrote: > > > > Le mer. 28 oct. 2020 à 22:11, Nicolas Cellier < > nicolas.cellier.aka.nice at gmail.com> a écrit : > >> >> >> Le mer. 28 oct. 2020 à 17:23, Eliot Miranda a >> écrit : >> >>> >>> Hi Tobi, Hi Levente, >>> >>> > On Oct 28, 2020, at 7:06 AM, Tobias Pape wrote: >>> > >>> >  >>> > Hi >>> > >>> >>>>> On 27.10.2020, at 23:39, Nicolas Cellier < >>> nicolas.cellier.aka.nice at gmail.com> wrote: >>> >> Hi Tim, >>> >> what is the result on that box with threaded heartbeat VM of: >>> >> [SUnitToolBuilderTests new testHandlingNotification] timeToRun. >>> >> If it is more than 5000 ms, then you would confirm the problem that I >>> encounter. >>> >> This testHandlingNotification is repeating 10 loops with a 200ms >>> delay wait. >>> >> The problem I've got with threaded heartbeat VM is that first 5 >>> delays run normally, but next 5 will last for 1 second instead of 200ms... >>> >> This is probably what happens on the CI server too (the test times >>> out and CI fails). >>> > >>> > Also note that the CI test builds both vms but uses the last one built >>> (because it overwrites the first), and that happens to be the itimer one, >>> not th ethreaded. >>> > >>> > The code above runs in around ~2000 ms on my machine (~2015, with >>> ubuntu 18.04) >>> > >>> > Things that happened: >>> > - I just ran the test suite in the DEBUG itimer headful and headless >>> variant and it passes. >>> > - I just ran the test suite in the DEBUG threaded headful and headless >>> variant and it passes. >>> > - I ran the RELEASE itimer headful and headless variant and it passes >>> > - I ran the RELEASE threaded headless variant and it FAILED as on the >>> CI >>> > - I ran the RELEASE threaded headful variant and it FAILED LESS >>> > I mean: testHandlingNotification passed, and so did >>> testValueWithinTimingBasic and testValueWithinTimingNestedInner >>> > but testValueWithinTimingNestedOuter testValueWithinTimingRepeat >>> still fail! >>> > >>> > So there are discrepancies between >>> > debug and release and >>> > headful and headless (at least for threaded release) >>> > >>> > TL;DR: The linux x86_32 cog v3 threaded release vm has a timing >>> problem ... >>> > >>> > Does that help anyone? >>> >>> If you add code to extract the number of ioProcessEvents calls etc (see >>> About Squeak VM parameters tab for the relevant info) does that tell us >>> more? IIRC one available vm parameter is the number of heartbeats. So we >>> should be able to see if it is the heartbeat itself that is failing or if >>> it is further up stream. >>> >>> >> Hi Eliot, >> I instrumented the code like that: >> >> testHandlingNotification >> | receivedSignal resumed | >> receivedSignal := resumed := false. >> [ | count | >> "client-code puts up progress, and signals some notications" >> Transcript cr; nextPutAll: 'test begins:'; print: Time >> utcMicrosecondClock \\ 3600000000. >> count := 0. >> 'doing something' >> displayProgressFrom: 0 >> to: 10 >> during: >> [ : bar | 10 timesRepeat: >> [ bar value: (count := count + 1). >> Transcript cr; nextPutAll: 'count:'; print: count. >> Transcript cr; nextPutAll: 'before wait:'; print: Time >> utcMicrosecondClock \\ 3600000000. >> (Delay forMilliseconds: 200) wait. >> Transcript cr; nextPutAll: 'after wait:'; print: Time >> utcMicrosecondClock \\ 3600000000. >> Notification signal: 'message'. >> Transcript cr; nextPutAll: 'after notified:'; print: Time >> utcMicrosecondClock \\ 3600000000. >> Transcript cr; nextPutAll: '# ioProcessEvents: '; print: >> (Smalltalk vmParameterAt: 57). >> Transcript cr; nextPutAll: '# forceInterruptCheck: '; >> print: (Smalltalk vmParameterAt: 58). >> Transcript cr; nextPutAll: '# check event calls: '; >> print: (Smalltalk vmParameterAt: 59). >> resumed := true ] ] ] >> on: Notification >> do: >> [ : noti | receivedSignal := true. >> Transcript cr; nextPutAll: 'notified at:'; print: Time >> utcMicrosecondClock \\ 3600000000. >> noti resume ]. >> Transcript endEntry. >> self >> assert: receivedSignal ; >> assert: resumed >> >> The result I obtain with an updated trunk image and 64bits threaded VM: >> build.linux64x64/squeak.cog.spur/build$ ./squeak >> ../../../image/trunk6-64.image >> >> test begins:80631205 >> notified at:80631251 >> count:1 >> before wait:80633324 >> after wait:80834614 >> after notified:80834670 >> # ioProcessEvents: 94 >> # forceInterruptCheck: 3368 >> # check event calls: 815 >> count:2 >> before wait:80835008 >> after wait:81036398 >> after notified:81036454 >> # ioProcessEvents: 103 >> # forceInterruptCheck: 3459 >> # check event calls: 906 >> count:3 >> before wait:81036755 >> after wait:81238355 >> after notified:81238374 >> # ioProcessEvents: 113 >> # forceInterruptCheck: 3549 >> # check event calls: 996 >> count:4 >> before wait:81238633 >> after wait:81440889 >> after notified:81440909 >> # ioProcessEvents: 123 >> # forceInterruptCheck: 3639 >> # check event calls: 1086 >> count:5 >> before wait:81441151 >> after wait:82609021 >> after notified:82609053 >> # ioProcessEvents: 132 >> # forceInterruptCheck: 4119 >> # check event calls: 1161 >> count:6 >> before wait:82609520 >> after wait:83611465 >> after notified:83611497 >> # ioProcessEvents: 133 >> # forceInterruptCheck: 4536 >> # check event calls: 1162 >> count:7 >> before wait:83611974 >> after wait:84614429 >> after notified:84614462 >> # ioProcessEvents: 134 >> # forceInterruptCheck: 4961 >> # check event calls: 1165 >> count:8 >> before wait:84614926 >> after wait:85617377 >> after notified:85617404 >> # ioProcessEvents: 135 >> # forceInterruptCheck: 5368 >> # check event calls: 1166 >> count:9 >> before wait:85617840 >> after wait:86618396 >> after notified:86618428 >> # ioProcessEvents: 136 >> # forceInterruptCheck: 5776 >> # check event calls: 1167 >> count:10 >> before wait:86618896 >> after wait:87620232 >> after notified:87620291 >> # ioProcessEvents: 137 >> # forceInterruptCheck: 6196 >> # check event calls: 1168 >> >> Notice 10 ioProcessEvents and about 200ms wait on loop 1-5. >> Then a single ioProcessEvent and about 1000ms wait on loops 6-10 (single >> check event call too). >> > > and on itimer heatbeat, 200ms per loop, 10 ioProcessEvents, 100 > forceInterruptCheck and 100 check event calls > This is consistent with the 2ms heartbeat (vmParameter #26). > linux64x64/squeak.cog.spur/build.itimerheartbeat$ ./squeak > ../../../image/trunk6-64.image > > test begins:1013906366 > notified at:1013906407 > count:1 > before wait:1013910362 > after wait:1014112028 > after notified:1014112085 > # ioProcessEvents: 208 > # forceInterruptCheck: 2299 > # check event calls: 2236 > count:2 > before wait:1014112443 > after wait:1014314011 > after notified:1014314062 > # ioProcessEvents: 218 > # forceInterruptCheck: 2400 > # check event calls: 2337 > count:3 > before wait:1014314405 > after wait:1014516017 > after notified:1014516052 > # ioProcessEvents: 228 > # forceInterruptCheck: 2501 > # check event calls: 2438 > count:4 > before wait:1014516326 > after wait:1014718011 > after notified:1014718039 > # ioProcessEvents: 237 > # forceInterruptCheck: 2602 > # check event calls: 2539 > count:5 > before wait:1014718296 > after wait:1014920490 > after notified:1014920521 > # ioProcessEvents: 247 > # forceInterruptCheck: 2703 > # check event calls: 2640 > count:6 > before wait:1014920967 > after wait:1015122184 > after notified:1015122215 > # ioProcessEvents: 256 > # forceInterruptCheck: 2804 > # check event calls: 2741 > count:7 > before wait:1015122608 > after wait:1015324166 > after notified:1015324198 > # ioProcessEvents: 266 > # forceInterruptCheck: 2905 > # check event calls: 2841 > count:8 > before wait:1015324595 > after wait:1015526278 > after notified:1015526299 > # ioProcessEvents: 275 > # forceInterruptCheck: 3006 > # check event calls: 2942 > count:9 > before wait:1015526556 > after wait:1015728488 > after notified:1015728518 > # ioProcessEvents: 285 > # forceInterruptCheck: 3107 > # check event calls: 3042 > count:10 > before wait:1015728947 > after wait:1015930499 > after notified:1015930530 > # ioProcessEvents: 295 > # forceInterruptCheck: 3208 > # check event calls: 3143 > Thanks that's great. SO the problem is nothing to do with the heartbeat. It seems to be working perfectly OK, right? _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Wed Oct 28 22:57:47 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed, 28 Oct 2020 15:57:47 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: Hi Yoshiki, On Wed, Oct 28, 2020 at 12:59 PM Yoshiki Ohshima wrote: > > As for linux64ARMv8, I had to hack like this (The below is somewhat > inconsistent but you'll get an idea) to get it produce a VM: > > It looks like an issue of missing compiler macros for the architecture. > The hack to sqUnixHeartbeat.c is likely to be wrong... the asm code > specified for __ARM_ARCHI_ISA_A64 does not compile. > > ----------------------------------------------- > diff --git a/platforms/Cross/vm/sqAtomicOps.h > b/platforms/Cross/vm/sqAtomicOps.h > index ff5d3fdd7..96abe3a22 100644 > --- a/platforms/Cross/vm/sqAtomicOps.h > +++ b/platforms/Cross/vm/sqAtomicOps.h > @@ -203,7 +203,7 @@ AtomicGet(__int64 *target) > > # else /* TARGET_OS_IS_IPHONE elif x86 variants etc */ > > -#if defined(__arm__) && (defined(__ARM_ARCH_6__) || > defined(__ARM_ARCH_7A__)) > +#if defined(__arm__) && (defined(__ARM_ARCH_6__) || > defined(__ARM_ARCH_7A__)) || 1 > /* tpr - this is code intended for the Raspberry Pi Raspbian OS > * We'll experimentally trust in our MMU to keep 64bit accesses atomic */ > # define get64(variable) variable > diff --git a/platforms/unix/vm/sqUnixHeartbeat.c > b/platforms/unix/vm/sqUnixHeartbeat.c > index e9e3545fa..a526b4515 100644 > --- a/platforms/unix/vm/sqUnixHeartbeat.c > +++ b/platforms/unix/vm/sqUnixHeartbeat.c > @@ -183,7 +183,7 @@ ioHighResClock(void) > : "rdx"); > #elif defined(__ARM_ARCH_ISA_A64) || defined(__arm64__) || > defined(__aarch64__) || defined(ARM64) > __asm__ __volatile__ ("MRS X0, CNTVCT_EL0"); > -#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || > defined(__ARM_ARCH_7A__)) > +#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || > defined(__ARM_ARCH_7A__)) || 1 > /* tpr - do nothing for now; needs input from eliot to decide further */ > /* Tim, not sure I have input beyond: > Is there a 64-bit clock on ARM? If so, access it here :-) > diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c > index d62b05f40..110685ac4 100644 > --- a/spur64src/vm/cogit.c > +++ b/spur64src/vm/cogit.c > @@ -6,6 +6,8 @@ > # define SysV 1 > #endif > > +#define __arm64__ 1 > + > #if defined(__arm64__) || defined(__aarch64__) || > defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) > > # include "cogitARMv8.c" > diff --git a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c > b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c > index 2878f9529..a0e5e0596 100644 > --- a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c > +++ b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c > @@ -7,7 +7,7 @@ > # define ARM32FFIPlugin_exports SqueakFFIPrims_exports > # include "ARM32FFIPlugin.c" > > -#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || > defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) > +#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || > defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) || 1 > > # define ARM64FFIPlugin_exports SqueakFFIPrims_exports > # include "ARM64FFIPlugin.c" > If you do $ cc -dM -E - > On Wed, Oct 28, 2020 at 9:24 AM Yoshiki Ohshima > wrote: > >> Ok! >> >> I did make a pull request but then merged it by myself. Next thing for >> me to try is to build linux64ARMv8. >> >> On Wed, Oct 28, 2020 at 8:47 AM Eliot Miranda >> wrote: >> >>> >>> Hi Yoshiki, >>> >>> On Oct 28, 2020, at 8:34 AM, Yoshiki Ohshima >>> wrote: >>> >>>  >>> Come to think of it, a better fix for a problem like this one: >>> >>> KeySym symbolic; >>> int keyCode= x2sqKey(&evt->xkey, &symbolic); >>> int ucs4= xkeysym2ucs4(symbolic); >>> >>> was (obviously) to change the first line to: >>> >>> KeySym symbolic= 0; >>> >>> rather than to try to store 0 into *symbolic on the callee side. (A >>> professor of my college days once told us that "most bugs are related to >>> uninitialized variables." I should've known better.) >>> >>> >>> I had exactly this bug in the win32 CameraPlugin the other day. And it >>> didn’t surface until shutting down the plugin on exiting the system. C, >>> what a love/hate relationship it engenders :-) >>> >>> When I get around to it, I'll make another change and this time make a >>> pull request. >>> >>> >>> Or if you’d like I could invite you to become a committer and then you >>> could avoid the pull request. >>> >>> >>> >>> On Tue, Oct 27, 2020 at 11:43 AM Eliot Miranda >>> wrote: >>> >>>> >>>> >>>> >>>> On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima < >>>> Yoshiki.Ohshima at acm.org> wrote: >>>> >>>>> >>>>> Thanks! Maybe I should not have sent a separate email to Eliot ^^; >>>>> >>>> >>>> Don't sweat it :-) Fixes gratefully received :-) Thanks *very* much >>>> for attending to the input issue. Much appreciated. >>>> >>>>> >>>>> On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier < >>>>> nicolas.cellier.aka.nice at gmail.com> wrote: >>>>> >>>>>> >>>>>> Ah too late, Eliot was faster, hit the pull request next time :) >>>>>> >>>>>> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < >>>>>> nicolas.cellier.aka.nice at gmail.com> a écrit : >>>>>> >>>>>>> Hi Yoshiki, >>>>>>> what you could do is >>>>>>> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since >>>>>>> we have a working workaround now >>>>>>> 2) just create a pull request from the github web interface (that's >>>>>>> rather easy) >>>>>>> It will be very easy for us to integrate (one click), and we'll keep >>>>>>> your authorship. >>>>>>> >>>>>>> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima < >>>>>>> Yoshiki.Ohshima at acm.org> a écrit : >>>>>>> >>>>>>>> >>>>>>>> I have a branch on a clone on github: >>>>>>>> >>>>>>>> >>>>>>>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>>>>>>> >>>>>>>> It might be easier to pull from this? Separately, I'll mail you >>>>>>>> sqUnixX11.c. >>>>>>>> >>>>>>>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda < >>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> Hi Yoshiki, >>>>>>>>> >>>>>>>>> on my Mac patch isn't smart enough to decode a git diff. Can >>>>>>>>> you just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll >>>>>>>>> integrate? Thanks! >>>>>>>>> >>>>>>>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima < >>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>> >>>>>>>>>> >>>>>>>>>> The previous one was just a hack but I think I found the real >>>>>>>>>> problem. It was about the variable symbolic, that gets symbolic key code >>>>>>>>>> *when* it is needed has to be zero'ed out when it is not needed. >>>>>>>>>> >>>>>>>>>> The diff is attached... I'll a make pull request if that helps. >>>>>>>>>> >>>>>>>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>> >>>>>>>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a >>>>>>>>>>> hack I did was like this: >>>>>>>>>>> >>>>>>>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>> >>>>>>>>>>> index 268593673..bfb57257b 100644 >>>>>>>>>>> >>>>>>>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>> >>>>>>>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>> >>>>>>>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char >>>>>>>>>>> *uxName, sqInt stNameIndex, int sqNameLeng >>>>>>>>>>> >>>>>>>>>>> #undef sqFTruncate >>>>>>>>>>> >>>>>>>>>>> /* sqFTruncate should return 0 on success, ftruncate does also >>>>>>>>>>> */ >>>>>>>>>>> >>>>>>>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>>>>>>> >>>>>>>>>>> -#define ftell(s) ftello(s) >>>>>>>>>>> >>>>>>>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>> >>>>>>>>>>> +// #define ftell(s) ftello(s) >>>>>>>>>>> >>>>>>>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> #if defined(__GNUC__) >>>>>>>>>>> >>>>>>>>>>> # if !defined(VM_LABEL) >>>>>>>>>>> >>>>>>>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>>>>>>> >>>>>>>>>>> index d62b05f40..e1c14a021 100644 >>>>>>>>>>> >>>>>>>>>>> --- a/spur64src/vm/cogit.c >>>>>>>>>>> >>>>>>>>>>> +++ b/spur64src/vm/cogit.c >>>>>>>>>>> >>>>>>>>>>> @@ -6,6 +6,8 @@ >>>>>>>>>>> >>>>>>>>>>> # define SysV 1 >>>>>>>>>>> >>>>>>>>>>> #endif >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> +#define __arm64__ >>>>>>>>>>> >>>>>>>>>>> + >>>>>>>>>>> >>>>>>>>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>>>>>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>>>>>>> >>>>>>>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> And I tried a few more things by checking out the last release >>>>>>>>>>>> tag 202003021730 or try opensmalltalk-vm/build. >>>>>>>>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts did >>>>>>>>>>>> not work. For the latter got this error: >>>>>>>>>>>> >>>>>>>>>>>> In file included from /usr/include/features.h:424, >>>>>>>>>>>> >>>>>>>>>>>> from /usr/include/pthread.h:21, >>>>>>>>>>>> >>>>>>>>>>>> from >>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>>>>>>> >>>>>>>>>>>> from >>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>>> >>>>>>>>>>>> from >>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>>> >>>>>>>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for >>>>>>>>>>>> ‘fseeko’ >>>>>>>>>>>> >>>>>>>>>>>> extern int __REDIRECT (fseeko, >>>>>>>>>>>> >>>>>>>>>>>> ^~~~~~~~~~ >>>>>>>>>>>> >>>>>>>>>>>> In file included from >>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>>> >>>>>>>>>>>> from >>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>>> >>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>>>>>>>> note: previous declaration \ >>>>>>>>>>>> >>>>>>>>>>>> of ‘fseeko’ was here >>>>>>>>>>>> >>>>>>>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>> >>>>>>>>>>>> ^~~~~~ >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Eliot, >>>>>>>>>>>>> >>>>>>>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get the >>>>>>>>>>>>> following error. I think I followed the steps in the instructions, >>>>>>>>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>>>>>>> >>>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: >>>>>>>>>>>>> #error As yet no Cogit implementation appears to exist for your platform. >>>>>>>>>>>>> >>>>>>>>>>>>> # error As yet no Cogit implementation appears to exist for >>>>>>>>>>>>> your platform. >>>>>>>>>>>>> >>>>>>>>>>>>> ^~~~~ >>>>>>>>>>>>> >>>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: >>>>>>>>>>>>> #error Consider implementing it, starting by adding a subclass of >>>>>>>>>>>>> CogAbstractInstruction. >>>>>>>>>>>>> >>>>>>>>>>>>> # error Consider implementing it, starting by adding a >>>>>>>>>>>>> subclass of CogAbstractInstruction. >>>>>>>>>>>>> >>>>>>>>>>>>> ^~~~~ >>>>>>>>>>>>> >>>>>>>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>>>>>>> >>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I heard that people got a new problem in inputting Japanese >>>>>>>>>>>>>>> text into Scratch 1.4 running on Raspberry Pi OS after, or around the >>>>>>>>>>>>>>> version 2020-08-20. I would like to take a look at it but it might involve >>>>>>>>>>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>>>>>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to >>>>>>>>>>>>>>> date and straightforward? Can people point me to the right point to start? >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>>>>>>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>>>>>>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then >>>>>>>>>>>>>> run ./mvm >>>>>>>>>>>>>> >>>>>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>>>>> best, Eliot >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> -- Yoshiki >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> -- Yoshiki >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> _,,,^..^,,,_ >>>>>>>>> best, Eliot >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> -- Yoshiki >>>>>>>> >>>>>>>> >>>>> >>>>> -- >>>>> -- Yoshiki >>>>> >>>>> >>>> >>>> -- >>>> _,,,^..^,,,_ >>>> best, Eliot >>>> >>> >>> >>> -- >>> -- Yoshiki >>> >>> >> >> -- >> -- Yoshiki >> >> > > -- > -- Yoshiki > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From Yoshiki.Ohshima at acm.org Wed Oct 28 23:05:50 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Wed, 28 Oct 2020 16:05:50 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: I may be simply on a wrong OS. The main reason for me to dive in again was to fix it for Raspberry Pi OS users: https://www.raspberrypi.org/downloads/raspberry-pi-os/ but then it simply is not a 64bit OS I gather. It's just the compiler on targets 32 bit. Sorry for a confusion. The following is the results from cc -dM -E - wrote: > > Hi Yoshiki, > > On Wed, Oct 28, 2020 at 12:59 PM Yoshiki Ohshima > wrote: > >> >> As for linux64ARMv8, I had to hack like this (The below is somewhat >> inconsistent but you'll get an idea) to get it produce a VM: >> >> It looks like an issue of missing compiler macros for the architecture. >> The hack to sqUnixHeartbeat.c is likely to be wrong... the asm code >> specified for __ARM_ARCHI_ISA_A64 does not compile. >> >> ----------------------------------------------- >> diff --git a/platforms/Cross/vm/sqAtomicOps.h >> b/platforms/Cross/vm/sqAtomicOps.h >> index ff5d3fdd7..96abe3a22 100644 >> --- a/platforms/Cross/vm/sqAtomicOps.h >> +++ b/platforms/Cross/vm/sqAtomicOps.h >> @@ -203,7 +203,7 @@ AtomicGet(__int64 *target) >> >> # else /* TARGET_OS_IS_IPHONE elif x86 variants etc */ >> >> -#if defined(__arm__) && (defined(__ARM_ARCH_6__) || >> defined(__ARM_ARCH_7A__)) >> +#if defined(__arm__) && (defined(__ARM_ARCH_6__) || >> defined(__ARM_ARCH_7A__)) || 1 >> /* tpr - this is code intended for the Raspberry Pi Raspbian OS >> * We'll experimentally trust in our MMU to keep 64bit accesses atomic */ >> # define get64(variable) variable >> diff --git a/platforms/unix/vm/sqUnixHeartbeat.c >> b/platforms/unix/vm/sqUnixHeartbeat.c >> index e9e3545fa..a526b4515 100644 >> --- a/platforms/unix/vm/sqUnixHeartbeat.c >> +++ b/platforms/unix/vm/sqUnixHeartbeat.c >> @@ -183,7 +183,7 @@ ioHighResClock(void) >> : "rdx"); >> #elif defined(__ARM_ARCH_ISA_A64) || defined(__arm64__) || >> defined(__aarch64__) || defined(ARM64) >> __asm__ __volatile__ ("MRS X0, CNTVCT_EL0"); >> -#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || >> defined(__ARM_ARCH_7A__)) >> +#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || >> defined(__ARM_ARCH_7A__)) || 1 >> /* tpr - do nothing for now; needs input from eliot to decide further */ >> /* Tim, not sure I have input beyond: >> Is there a 64-bit clock on ARM? If so, access it here :-) >> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >> index d62b05f40..110685ac4 100644 >> --- a/spur64src/vm/cogit.c >> +++ b/spur64src/vm/cogit.c >> @@ -6,6 +6,8 @@ >> # define SysV 1 >> #endif >> >> +#define __arm64__ 1 >> + >> #if defined(__arm64__) || defined(__aarch64__) || >> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >> >> # include "cogitARMv8.c" >> diff --git a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >> b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >> index 2878f9529..a0e5e0596 100644 >> --- a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >> +++ b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >> @@ -7,7 +7,7 @@ >> # define ARM32FFIPlugin_exports SqueakFFIPrims_exports >> # include "ARM32FFIPlugin.c" >> >> -#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || >> defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) >> +#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || >> defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) || 1 >> >> # define ARM64FFIPlugin_exports SqueakFFIPrims_exports >> # include "ARM64FFIPlugin.c" >> > > If you do > $ cc -dM -E - what predefined identifying macros do you get for aarch64/armv8? Then I > can add them to the set tested in cogit.c > > >> >> On Wed, Oct 28, 2020 at 9:24 AM Yoshiki Ohshima >> wrote: >> >>> Ok! >>> >>> I did make a pull request but then merged it by myself. Next thing for >>> me to try is to build linux64ARMv8. >>> >>> On Wed, Oct 28, 2020 at 8:47 AM Eliot Miranda >>> wrote: >>> >>>> >>>> Hi Yoshiki, >>>> >>>> On Oct 28, 2020, at 8:34 AM, Yoshiki Ohshima >>>> wrote: >>>> >>>>  >>>> Come to think of it, a better fix for a problem like this one: >>>> >>>> KeySym symbolic; >>>> int keyCode= x2sqKey(&evt->xkey, &symbolic); >>>> int ucs4= xkeysym2ucs4(symbolic); >>>> >>>> was (obviously) to change the first line to: >>>> >>>> KeySym symbolic= 0; >>>> >>>> rather than to try to store 0 into *symbolic on the callee side. (A >>>> professor of my college days once told us that "most bugs are related to >>>> uninitialized variables." I should've known better.) >>>> >>>> >>>> I had exactly this bug in the win32 CameraPlugin the other day. And it >>>> didn’t surface until shutting down the plugin on exiting the system. C, >>>> what a love/hate relationship it engenders :-) >>>> >>>> When I get around to it, I'll make another change and this time make a >>>> pull request. >>>> >>>> >>>> Or if you’d like I could invite you to become a committer and then you >>>> could avoid the pull request. >>>> >>>> >>>> >>>> On Tue, Oct 27, 2020 at 11:43 AM Eliot Miranda >>>> wrote: >>>> >>>>> >>>>> >>>>> >>>>> On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima < >>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>> >>>>>> >>>>>> Thanks! Maybe I should not have sent a separate email to Eliot ^^; >>>>>> >>>>> >>>>> Don't sweat it :-) Fixes gratefully received :-) Thanks *very* much >>>>> for attending to the input issue. Much appreciated. >>>>> >>>>>> >>>>>> On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier < >>>>>> nicolas.cellier.aka.nice at gmail.com> wrote: >>>>>> >>>>>>> >>>>>>> Ah too late, Eliot was faster, hit the pull request next time :) >>>>>>> >>>>>>> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < >>>>>>> nicolas.cellier.aka.nice at gmail.com> a écrit : >>>>>>> >>>>>>>> Hi Yoshiki, >>>>>>>> what you could do is >>>>>>>> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since >>>>>>>> we have a working workaround now >>>>>>>> 2) just create a pull request from the github web interface (that's >>>>>>>> rather easy) >>>>>>>> It will be very easy for us to integrate (one click), and we'll >>>>>>>> keep your authorship. >>>>>>>> >>>>>>>> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima < >>>>>>>> Yoshiki.Ohshima at acm.org> a écrit : >>>>>>>> >>>>>>>>> >>>>>>>>> I have a branch on a clone on github: >>>>>>>>> >>>>>>>>> >>>>>>>>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>>>>>>>> >>>>>>>>> It might be easier to pull from this? Separately, I'll mail you >>>>>>>>> sqUnixX11.c. >>>>>>>>> >>>>>>>>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda < >>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Hi Yoshiki, >>>>>>>>>> >>>>>>>>>> on my Mac patch isn't smart enough to decode a git diff. Can >>>>>>>>>> you just email me your platforms/unix/vm-display-X11/sqUnixX11.c and I'll >>>>>>>>>> integrate? Thanks! >>>>>>>>>> >>>>>>>>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima < >>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> The previous one was just a hack but I think I found the real >>>>>>>>>>> problem. It was about the variable symbolic, that gets symbolic key code >>>>>>>>>>> *when* it is needed has to be zero'ed out when it is not needed. >>>>>>>>>>> >>>>>>>>>>> The diff is attached... I'll a make pull request if that helps. >>>>>>>>>>> >>>>>>>>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, a >>>>>>>>>>>> hack I did was like this: >>>>>>>>>>>> >>>>>>>>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>> >>>>>>>>>>>> index 268593673..bfb57257b 100644 >>>>>>>>>>>> >>>>>>>>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>> >>>>>>>>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>> >>>>>>>>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char >>>>>>>>>>>> *uxName, sqInt stNameIndex, int sqNameLeng >>>>>>>>>>>> >>>>>>>>>>>> #undef sqFTruncate >>>>>>>>>>>> >>>>>>>>>>>> /* sqFTruncate should return 0 on success, ftruncate does >>>>>>>>>>>> also */ >>>>>>>>>>>> >>>>>>>>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>>>>>>>> >>>>>>>>>>>> -#define ftell(s) ftello(s) >>>>>>>>>>>> >>>>>>>>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>> >>>>>>>>>>>> +// #define ftell(s) ftello(s) >>>>>>>>>>>> >>>>>>>>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> #if defined(__GNUC__) >>>>>>>>>>>> >>>>>>>>>>>> # if !defined(VM_LABEL) >>>>>>>>>>>> >>>>>>>>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>>>>>>>> >>>>>>>>>>>> index d62b05f40..e1c14a021 100644 >>>>>>>>>>>> >>>>>>>>>>>> --- a/spur64src/vm/cogit.c >>>>>>>>>>>> >>>>>>>>>>>> +++ b/spur64src/vm/cogit.c >>>>>>>>>>>> >>>>>>>>>>>> @@ -6,6 +6,8 @@ >>>>>>>>>>>> >>>>>>>>>>>> # define SysV 1 >>>>>>>>>>>> >>>>>>>>>>>> #endif >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> +#define __arm64__ >>>>>>>>>>>> >>>>>>>>>>>> + >>>>>>>>>>>> >>>>>>>>>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>>>>>>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>>>>>>>> >>>>>>>>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> And I tried a few more things by checking out the last release >>>>>>>>>>>>> tag 202003021730 or try opensmalltalk-vm/build. >>>>>>>>>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts did >>>>>>>>>>>>> not work. For the latter got this error: >>>>>>>>>>>>> >>>>>>>>>>>>> In file included from /usr/include/features.h:424, >>>>>>>>>>>>> >>>>>>>>>>>>> from /usr/include/pthread.h:21, >>>>>>>>>>>>> >>>>>>>>>>>>> from >>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>>>>>>>> >>>>>>>>>>>>> from >>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>>>> >>>>>>>>>>>>> from >>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>>>> >>>>>>>>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for >>>>>>>>>>>>> ‘fseeko’ >>>>>>>>>>>>> >>>>>>>>>>>>> extern int __REDIRECT (fseeko, >>>>>>>>>>>>> >>>>>>>>>>>>> ^~~~~~~~~~ >>>>>>>>>>>>> >>>>>>>>>>>>> In file included from >>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>>>> >>>>>>>>>>>>> from >>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>>>> >>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>>>>>>>>> note: previous declaration \ >>>>>>>>>>>>> >>>>>>>>>>>>> of ‘fseeko’ was here >>>>>>>>>>>>> >>>>>>>>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>>> >>>>>>>>>>>>> ^~~~~~ >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Eliot, >>>>>>>>>>>>>> >>>>>>>>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get >>>>>>>>>>>>>> the following error. I think I followed the steps in the instructions, >>>>>>>>>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>>>>>>>> >>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: >>>>>>>>>>>>>> #error As yet no Cogit implementation appears to exist for your platform. >>>>>>>>>>>>>> >>>>>>>>>>>>>> # error As yet no Cogit implementation appears to exist for >>>>>>>>>>>>>> your platform. >>>>>>>>>>>>>> >>>>>>>>>>>>>> ^~~~~ >>>>>>>>>>>>>> >>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: >>>>>>>>>>>>>> #error Consider implementing it, starting by adding a subclass of >>>>>>>>>>>>>> CogAbstractInstruction. >>>>>>>>>>>>>> >>>>>>>>>>>>>> # error Consider implementing it, starting by adding a >>>>>>>>>>>>>> subclass of CogAbstractInstruction. >>>>>>>>>>>>>> >>>>>>>>>>>>>> ^~~~~ >>>>>>>>>>>>>> >>>>>>>>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I heard that people got a new problem in inputting Japanese >>>>>>>>>>>>>>>> text into Scratch 1.4 running on Raspberry Pi OS after, or around the >>>>>>>>>>>>>>>> version 2020-08-20. I would like to take a look at it but it might involve >>>>>>>>>>>>>>>> recompiling and generating the VM with debugging info. Last time I looked >>>>>>>>>>>>>>>> into it was years and years ago and I need to basically make a fresh start. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up to >>>>>>>>>>>>>>>> date and straightforward? Can people point me to the right point to start? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. Clone >>>>>>>>>>>>>>> opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd to build.linux64ARMv8/squeak.cog.spur/build.debug, >>>>>>>>>>>>>>> or build.linux64ARMv8/squeak.stack.spur/build.debug, then >>>>>>>>>>>>>>> run ./mvm >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>>>>>> best, Eliot >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> -- Yoshiki >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>> best, Eliot >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- Yoshiki >>>>>>>>> >>>>>>>>> >>>>>> >>>>>> -- >>>>>> -- Yoshiki >>>>>> >>>>>> >>>>> >>>>> -- >>>>> _,,,^..^,,,_ >>>>> best, Eliot >>>>> >>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>>> >>> >>> -- >>> -- Yoshiki >>> >>> >> >> -- >> -- Yoshiki >> >> > > -- > _,,,^..^,,,_ > best, Eliot > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Wed Oct 28 23:17:08 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed, 28 Oct 2020 16:17:08 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: On Wed, Oct 28, 2020 at 4:06 PM Yoshiki Ohshima wrote: > > I may be simply on a wrong OS. The main reason for me to dive in again was > to fix it for Raspberry Pi OS users: > > https://www.raspberrypi.org/downloads/raspberry-pi-os/ > > but then it simply is not a 64bit OS I gather. It's just the compiler on > targets 32 bit. Sorry for a confusion. The following is the results from > > cc -dM -E - Forgive me pushing, but can you also send the result of cc -dM -E - #define __ARM_SIZEOF_WCHAR_T 4 > #define __ARM_FEATURE_SAT 1 > #define __ARM_ARCH_ISA_ARM 1 > #define __ARMEL__ 1 > #define __ARM_FEATURE_UNALIGNED 1 > #define __ARM_FP 12 > #define __ARM_SIZEOF_MINIMAL_ENUM 4 > #define __ARM_PCS_VFP 1 > #define __ARM_FEATURE_LDREX 4 > #define __ARM_FEATURE_QBIT 1 > #define __ARM_ARCH_6__ 1 > #define __ARM_32BIT_STATE 1 > #define __ARM_FEATURE_CLZ 1 > #define __ARM_ARCH_ISA_THUMB 1 > #define __ARM_ARCH 6 > #define __ARM_FEATURE_SIMD32 1 > #define __ARM_FEATURE_COPROC 15 > #define __ARM_EABI__ 1 > #define __ARM_FEATURE_DSP 1 > > > > On Wed, Oct 28, 2020 at 3:58 PM Eliot Miranda > wrote: > >> >> Hi Yoshiki, >> >> On Wed, Oct 28, 2020 at 12:59 PM Yoshiki Ohshima >> wrote: >> >>> >>> As for linux64ARMv8, I had to hack like this (The below is somewhat >>> inconsistent but you'll get an idea) to get it produce a VM: >>> >>> It looks like an issue of missing compiler macros for the >>> architecture. The hack to sqUnixHeartbeat.c is likely to be wrong... the >>> asm code specified for __ARM_ARCHI_ISA_A64 does not compile. >>> >>> ----------------------------------------------- >>> diff --git a/platforms/Cross/vm/sqAtomicOps.h >>> b/platforms/Cross/vm/sqAtomicOps.h >>> index ff5d3fdd7..96abe3a22 100644 >>> --- a/platforms/Cross/vm/sqAtomicOps.h >>> +++ b/platforms/Cross/vm/sqAtomicOps.h >>> @@ -203,7 +203,7 @@ AtomicGet(__int64 *target) >>> >>> # else /* TARGET_OS_IS_IPHONE elif x86 variants etc */ >>> >>> -#if defined(__arm__) && (defined(__ARM_ARCH_6__) || >>> defined(__ARM_ARCH_7A__)) >>> +#if defined(__arm__) && (defined(__ARM_ARCH_6__) || >>> defined(__ARM_ARCH_7A__)) || 1 >>> /* tpr - this is code intended for the Raspberry Pi Raspbian OS >>> * We'll experimentally trust in our MMU to keep 64bit accesses atomic >>> */ >>> # define get64(variable) variable >>> diff --git a/platforms/unix/vm/sqUnixHeartbeat.c >>> b/platforms/unix/vm/sqUnixHeartbeat.c >>> index e9e3545fa..a526b4515 100644 >>> --- a/platforms/unix/vm/sqUnixHeartbeat.c >>> +++ b/platforms/unix/vm/sqUnixHeartbeat.c >>> @@ -183,7 +183,7 @@ ioHighResClock(void) >>> : "rdx"); >>> #elif defined(__ARM_ARCH_ISA_A64) || defined(__arm64__) || >>> defined(__aarch64__) || defined(ARM64) >>> __asm__ __volatile__ ("MRS X0, CNTVCT_EL0"); >>> -#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || >>> defined(__ARM_ARCH_7A__)) >>> +#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || >>> defined(__ARM_ARCH_7A__)) || 1 >>> /* tpr - do nothing for now; needs input from eliot to decide further >>> */ >>> /* Tim, not sure I have input beyond: >>> Is there a 64-bit clock on ARM? If so, access it here :-) >>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>> index d62b05f40..110685ac4 100644 >>> --- a/spur64src/vm/cogit.c >>> +++ b/spur64src/vm/cogit.c >>> @@ -6,6 +6,8 @@ >>> # define SysV 1 >>> #endif >>> >>> +#define __arm64__ 1 >>> + >>> #if defined(__arm64__) || defined(__aarch64__) || >>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>> >>> # include "cogitARMv8.c" >>> diff --git a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >>> b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >>> index 2878f9529..a0e5e0596 100644 >>> --- a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >>> +++ b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >>> @@ -7,7 +7,7 @@ >>> # define ARM32FFIPlugin_exports SqueakFFIPrims_exports >>> # include "ARM32FFIPlugin.c" >>> >>> -#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || >>> defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) >>> +#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || >>> defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) || 1 >>> >>> # define ARM64FFIPlugin_exports SqueakFFIPrims_exports >>> # include "ARM64FFIPlugin.c" >>> >> >> If you do >> $ cc -dM -E - > what predefined identifying macros do you get for aarch64/armv8? Then I >> can add them to the set tested in cogit.c >> >> >>> >>> On Wed, Oct 28, 2020 at 9:24 AM Yoshiki Ohshima >>> wrote: >>> >>>> Ok! >>>> >>>> I did make a pull request but then merged it by myself. Next thing for >>>> me to try is to build linux64ARMv8. >>>> >>>> On Wed, Oct 28, 2020 at 8:47 AM Eliot Miranda >>>> wrote: >>>> >>>>> >>>>> Hi Yoshiki, >>>>> >>>>> On Oct 28, 2020, at 8:34 AM, Yoshiki Ohshima >>>>> wrote: >>>>> >>>>>  >>>>> Come to think of it, a better fix for a problem like this one: >>>>> >>>>> KeySym symbolic; >>>>> int keyCode= x2sqKey(&evt->xkey, &symbolic); >>>>> int ucs4= xkeysym2ucs4(symbolic); >>>>> >>>>> was (obviously) to change the first line to: >>>>> >>>>> KeySym symbolic= 0; >>>>> >>>>> rather than to try to store 0 into *symbolic on the callee side. (A >>>>> professor of my college days once told us that "most bugs are related to >>>>> uninitialized variables." I should've known better.) >>>>> >>>>> >>>>> I had exactly this bug in the win32 CameraPlugin the other day. And >>>>> it didn’t surface until shutting down the plugin on exiting the system. C, >>>>> what a love/hate relationship it engenders :-) >>>>> >>>>> When I get around to it, I'll make another change and this time make >>>>> a pull request. >>>>> >>>>> >>>>> Or if you’d like I could invite you to become a committer and then you >>>>> could avoid the pull request. >>>>> >>>>> >>>>> >>>>> On Tue, Oct 27, 2020 at 11:43 AM Eliot Miranda < >>>>> eliot.miranda at gmail.com> wrote: >>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima < >>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>> >>>>>>> >>>>>>> Thanks! Maybe I should not have sent a separate email to Eliot ^^; >>>>>>> >>>>>> >>>>>> Don't sweat it :-) Fixes gratefully received :-) Thanks *very* much >>>>>> for attending to the input issue. Much appreciated. >>>>>> >>>>>>> >>>>>>> On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier < >>>>>>> nicolas.cellier.aka.nice at gmail.com> wrote: >>>>>>> >>>>>>>> >>>>>>>> Ah too late, Eliot was faster, hit the pull request next time :) >>>>>>>> >>>>>>>> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < >>>>>>>> nicolas.cellier.aka.nice at gmail.com> a écrit : >>>>>>>> >>>>>>>>> Hi Yoshiki, >>>>>>>>> what you could do is >>>>>>>>> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) since >>>>>>>>> we have a working workaround now >>>>>>>>> 2) just create a pull request from the github web interface >>>>>>>>> (that's rather easy) >>>>>>>>> It will be very easy for us to integrate (one click), and we'll >>>>>>>>> keep your authorship. >>>>>>>>> >>>>>>>>> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima < >>>>>>>>> Yoshiki.Ohshima at acm.org> a écrit : >>>>>>>>> >>>>>>>>>> >>>>>>>>>> I have a branch on a clone on github: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>>>>>>>>> >>>>>>>>>> It might be easier to pull from this? Separately, I'll mail you >>>>>>>>>> sqUnixX11.c. >>>>>>>>>> >>>>>>>>>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda < >>>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>> >>>>>>>>>>> on my Mac patch isn't smart enough to decode a git diff. >>>>>>>>>>> Can you just email me your platforms/unix/vm-display-X11/sqUnixX11.c and >>>>>>>>>>> I'll integrate? Thanks! >>>>>>>>>>> >>>>>>>>>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima < >>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> The previous one was just a hack but I think I found the real >>>>>>>>>>>> problem. It was about the variable symbolic, that gets symbolic key code >>>>>>>>>>>> *when* it is needed has to be zero'ed out when it is not needed. >>>>>>>>>>>> >>>>>>>>>>>> The diff is attached... I'll a make pull request if that helps. >>>>>>>>>>>> >>>>>>>>>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, >>>>>>>>>>>>> a hack I did was like this: >>>>>>>>>>>>> >>>>>>>>>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>>> >>>>>>>>>>>>> index 268593673..bfb57257b 100644 >>>>>>>>>>>>> >>>>>>>>>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>>> >>>>>>>>>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>>> >>>>>>>>>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char >>>>>>>>>>>>> *uxName, sqInt stNameIndex, int sqNameLeng >>>>>>>>>>>>> >>>>>>>>>>>>> #undef sqFTruncate >>>>>>>>>>>>> >>>>>>>>>>>>> /* sqFTruncate should return 0 on success, ftruncate does >>>>>>>>>>>>> also */ >>>>>>>>>>>>> >>>>>>>>>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>>>>>>>>> >>>>>>>>>>>>> -#define ftell(s) ftello(s) >>>>>>>>>>>>> >>>>>>>>>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>>> >>>>>>>>>>>>> +// #define ftell(s) ftello(s) >>>>>>>>>>>>> >>>>>>>>>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> #if defined(__GNUC__) >>>>>>>>>>>>> >>>>>>>>>>>>> # if !defined(VM_LABEL) >>>>>>>>>>>>> >>>>>>>>>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>>>>>>>>> >>>>>>>>>>>>> index d62b05f40..e1c14a021 100644 >>>>>>>>>>>>> >>>>>>>>>>>>> --- a/spur64src/vm/cogit.c >>>>>>>>>>>>> >>>>>>>>>>>>> +++ b/spur64src/vm/cogit.c >>>>>>>>>>>>> >>>>>>>>>>>>> @@ -6,6 +6,8 @@ >>>>>>>>>>>>> >>>>>>>>>>>>> # define SysV 1 >>>>>>>>>>>>> >>>>>>>>>>>>> #endif >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> +#define __arm64__ >>>>>>>>>>>>> >>>>>>>>>>>>> + >>>>>>>>>>>>> >>>>>>>>>>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>>>>>>>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || >>>>>>>>>>>>> defined(ARMv8) >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>>>>>>>>> >>>>>>>>>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> And I tried a few more things by checking out the last >>>>>>>>>>>>>> release tag 202003021730 or try opensmalltalk-vm/build. >>>>>>>>>>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts >>>>>>>>>>>>>> did not work. For the latter got this error: >>>>>>>>>>>>>> >>>>>>>>>>>>>> In file included from /usr/include/features.h:424, >>>>>>>>>>>>>> >>>>>>>>>>>>>> from /usr/include/pthread.h:21, >>>>>>>>>>>>>> >>>>>>>>>>>>>> from >>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>>>>>>>>> >>>>>>>>>>>>>> from >>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>>>>> >>>>>>>>>>>>>> from >>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>>>>> >>>>>>>>>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for >>>>>>>>>>>>>> ‘fseeko’ >>>>>>>>>>>>>> >>>>>>>>>>>>>> extern int __REDIRECT (fseeko, >>>>>>>>>>>>>> >>>>>>>>>>>>>> ^~~~~~~~~~ >>>>>>>>>>>>>> >>>>>>>>>>>>>> In file included from >>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>>>>> >>>>>>>>>>>>>> from >>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>>>>> >>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>>>>>>>>>> note: previous declaration \ >>>>>>>>>>>>>> >>>>>>>>>>>>>> of ‘fseeko’ was here >>>>>>>>>>>>>> >>>>>>>>>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>>>> >>>>>>>>>>>>>> ^~~~~~ >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Eliot, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get >>>>>>>>>>>>>>> the following error. I think I followed the steps in the instructions, >>>>>>>>>>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: >>>>>>>>>>>>>>> #error As yet no Cogit implementation appears to exist for your platform. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> # error As yet no Cogit implementation appears to exist >>>>>>>>>>>>>>> for your platform. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ^~~~~ >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: >>>>>>>>>>>>>>> #error Consider implementing it, starting by adding a subclass of >>>>>>>>>>>>>>> CogAbstractInstruction. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> # error Consider implementing it, starting by adding a >>>>>>>>>>>>>>> subclass of CogAbstractInstruction. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ^~~~~ >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>>>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I heard that people got a new problem in inputting >>>>>>>>>>>>>>>>> Japanese text into Scratch 1.4 running on Raspberry Pi OS after, or around >>>>>>>>>>>>>>>>> the version 2020-08-20. I would like to take a look at it but it might >>>>>>>>>>>>>>>>> involve recompiling and generating the VM with debugging info. Last time >>>>>>>>>>>>>>>>> I looked into it was years and years ago and I need to basically make a >>>>>>>>>>>>>>>>> fresh start. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up >>>>>>>>>>>>>>>>> to date and straightforward? Can people point me to the right point to >>>>>>>>>>>>>>>>> start? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. >>>>>>>>>>>>>>>> Clone opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd >>>>>>>>>>>>>>>> to build.linux64ARMv8/squeak.cog.spur/build.debug, or build.linux64ARMv8/squeak.stack.spur/build.debug, >>>>>>>>>>>>>>>> then run ./mvm >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>>>>>>> best, Eliot >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>> best, Eliot >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> -- Yoshiki >>>>>>>>>> >>>>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- Yoshiki >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> _,,,^..^,,,_ >>>>>> best, Eliot >>>>>> >>>>> >>>>> >>>>> -- >>>>> -- Yoshiki >>>>> >>>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>>> >>> >>> -- >>> -- Yoshiki >>> >>> >> >> -- >> _,,,^..^,,,_ >> best, Eliot >> > > > -- > -- Yoshiki > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Wed Oct 28 23:22:10 2020 From: tim at rowledge.org (tim Rowledge) Date: Wed, 28 Oct 2020 16:22:10 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: <34747C38-114D-4594-9A88-4E851CA2D87F@rowledge.org> > On 2020-10-28, at 4:05 PM, Yoshiki Ohshima wrote: > > I may be simply on a wrong OS. The main reason for me to dive in again was to fix it for Raspberry Pi OS users: > > https://www.raspberrypi.org/downloads/raspberry-pi-os/ > > but then it simply is not a 64bit OS I gather. It's just the compiler on targets 32 bit. Ah, you're making a mistake made by many. The Pi 4 (and indeed 3+, 3 and even the 2) have ARMv8 cpus. *BUT* Raspbian is a 32bit OS using the v7 support in the ARM A53 & A72 cores. A lot of people have posted questions asking if they have been sold a 'fake' Pi after seeing that the API for querying the processor type tells them they have a 32 bit v7. That is actually an upstream Debian issue not under the control of RPF at all. So the squeak vm supplied for the current default Raspbian (or rather, recently renamed, Raspberry Pi OS) is a 32 bit version as built in the opensmalltalk-vm⁩ ▸ ⁨build.linux32ARMv6⁩ ▸ ⁨squeak.stack.spur⁩ tree. There *is* a 64 bit version of Raspberry PI OS that is currently in late-beta. That would need a VM from the opensmalltalk-vm⁩ ▸ ⁨build.linux32ARMv6⁩ ▸ ⁨squeak.stack.spur⁩ tree and of course a 64 bit image. That VMworks on *some* OS but not others due to some issue with the permission bits for memory being messed around in the name of some sort of security waffle. Eliot has made it work for at least some cases - Manjaro, for example. It still needs sorting out for the Pi 64bit OS. As soon as you have a 32bit vm that handled the Japanese input stuff ok, let me know and I'll do a build and ask RPF to upload it. I don't know how many people still use it on any sort of regular basis but it certainly isn't 0, which is gratifying. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim On a clear disk you can seek forever... From Yoshiki.Ohshima at acm.org Wed Oct 28 23:27:53 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Wed, 28 Oct 2020 16:27:53 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: The result from: cc -dM -E - wrote: > > > > On Wed, Oct 28, 2020 at 4:06 PM Yoshiki Ohshima > wrote: > >> >> I may be simply on a wrong OS. The main reason for me to dive in again >> was to fix it for Raspberry Pi OS users: >> >> https://www.raspberrypi.org/downloads/raspberry-pi-os/ >> >> but then it simply is not a 64bit OS I gather. It's just the compiler on >> targets 32 bit. Sorry for a confusion. The following is the results from >> >> cc -dM -E - > > > Forgive me pushing, but can you also send the result of cc -dM -E - > And the 64-bit ones are *way* faster and cheap... > > Tim, what do you get for the same on raspbian? > > >> #define __ARM_SIZEOF_WCHAR_T 4 >> #define __ARM_FEATURE_SAT 1 >> #define __ARM_ARCH_ISA_ARM 1 >> #define __ARMEL__ 1 >> #define __ARM_FEATURE_UNALIGNED 1 >> #define __ARM_FP 12 >> #define __ARM_SIZEOF_MINIMAL_ENUM 4 >> #define __ARM_PCS_VFP 1 >> #define __ARM_FEATURE_LDREX 4 >> #define __ARM_FEATURE_QBIT 1 >> #define __ARM_ARCH_6__ 1 >> #define __ARM_32BIT_STATE 1 >> #define __ARM_FEATURE_CLZ 1 >> #define __ARM_ARCH_ISA_THUMB 1 >> #define __ARM_ARCH 6 >> #define __ARM_FEATURE_SIMD32 1 >> #define __ARM_FEATURE_COPROC 15 >> #define __ARM_EABI__ 1 >> #define __ARM_FEATURE_DSP 1 >> >> >> >> On Wed, Oct 28, 2020 at 3:58 PM Eliot Miranda >> wrote: >> >>> >>> Hi Yoshiki, >>> >>> On Wed, Oct 28, 2020 at 12:59 PM Yoshiki Ohshima < >>> Yoshiki.Ohshima at acm.org> wrote: >>> >>>> >>>> As for linux64ARMv8, I had to hack like this (The below is somewhat >>>> inconsistent but you'll get an idea) to get it produce a VM: >>>> >>>> It looks like an issue of missing compiler macros for the >>>> architecture. The hack to sqUnixHeartbeat.c is likely to be wrong... the >>>> asm code specified for __ARM_ARCHI_ISA_A64 does not compile. >>>> >>>> ----------------------------------------------- >>>> diff --git a/platforms/Cross/vm/sqAtomicOps.h >>>> b/platforms/Cross/vm/sqAtomicOps.h >>>> index ff5d3fdd7..96abe3a22 100644 >>>> --- a/platforms/Cross/vm/sqAtomicOps.h >>>> +++ b/platforms/Cross/vm/sqAtomicOps.h >>>> @@ -203,7 +203,7 @@ AtomicGet(__int64 *target) >>>> >>>> # else /* TARGET_OS_IS_IPHONE elif x86 variants etc */ >>>> >>>> -#if defined(__arm__) && (defined(__ARM_ARCH_6__) || >>>> defined(__ARM_ARCH_7A__)) >>>> +#if defined(__arm__) && (defined(__ARM_ARCH_6__) || >>>> defined(__ARM_ARCH_7A__)) || 1 >>>> /* tpr - this is code intended for the Raspberry Pi Raspbian OS >>>> * We'll experimentally trust in our MMU to keep 64bit accesses atomic >>>> */ >>>> # define get64(variable) variable >>>> diff --git a/platforms/unix/vm/sqUnixHeartbeat.c >>>> b/platforms/unix/vm/sqUnixHeartbeat.c >>>> index e9e3545fa..a526b4515 100644 >>>> --- a/platforms/unix/vm/sqUnixHeartbeat.c >>>> +++ b/platforms/unix/vm/sqUnixHeartbeat.c >>>> @@ -183,7 +183,7 @@ ioHighResClock(void) >>>> : "rdx"); >>>> #elif defined(__ARM_ARCH_ISA_A64) || defined(__arm64__) || >>>> defined(__aarch64__) || defined(ARM64) >>>> __asm__ __volatile__ ("MRS X0, CNTVCT_EL0"); >>>> -#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || >>>> defined(__ARM_ARCH_7A__)) >>>> +#elif defined(__arm__) && (defined(__ARM_ARCH_6__) || >>>> defined(__ARM_ARCH_7A__)) || 1 >>>> /* tpr - do nothing for now; needs input from eliot to decide further >>>> */ >>>> /* Tim, not sure I have input beyond: >>>> Is there a 64-bit clock on ARM? If so, access it here :-) >>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>> index d62b05f40..110685ac4 100644 >>>> --- a/spur64src/vm/cogit.c >>>> +++ b/spur64src/vm/cogit.c >>>> @@ -6,6 +6,8 @@ >>>> # define SysV 1 >>>> #endif >>>> >>>> +#define __arm64__ 1 >>>> + >>>> #if defined(__arm64__) || defined(__aarch64__) || >>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || defined(ARMv8) >>>> >>>> # include "cogitARMv8.c" >>>> diff --git a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >>>> b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >>>> index 2878f9529..a0e5e0596 100644 >>>> --- a/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >>>> +++ b/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c >>>> @@ -7,7 +7,7 @@ >>>> # define ARM32FFIPlugin_exports SqueakFFIPrims_exports >>>> # include "ARM32FFIPlugin.c" >>>> >>>> -#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || >>>> defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) >>>> +#elif defined(__ARM_ARCH_ISA_A64) || defined(__aarch64__) || >>>> defined(__arm64__) || defined(ARM64) || defined(_M_ARM64) || 1 >>>> >>>> # define ARM64FFIPlugin_exports SqueakFFIPrims_exports >>>> # include "ARM64FFIPlugin.c" >>>> >>> >>> If you do >>> $ cc -dM -E - >> what predefined identifying macros do you get for aarch64/armv8? Then I >>> can add them to the set tested in cogit.c >>> >>> >>>> >>>> On Wed, Oct 28, 2020 at 9:24 AM Yoshiki Ohshima < >>>> Yoshiki.Ohshima at acm.org> wrote: >>>> >>>>> Ok! >>>>> >>>>> I did make a pull request but then merged it by myself. Next >>>>> thing for me to try is to build linux64ARMv8. >>>>> >>>>> On Wed, Oct 28, 2020 at 8:47 AM Eliot Miranda >>>>> wrote: >>>>> >>>>>> >>>>>> Hi Yoshiki, >>>>>> >>>>>> On Oct 28, 2020, at 8:34 AM, Yoshiki Ohshima >>>>>> wrote: >>>>>> >>>>>>  >>>>>> Come to think of it, a better fix for a problem like this one: >>>>>> >>>>>> KeySym symbolic; >>>>>> int keyCode= x2sqKey(&evt->xkey, &symbolic); >>>>>> int ucs4= xkeysym2ucs4(symbolic); >>>>>> >>>>>> was (obviously) to change the first line to: >>>>>> >>>>>> KeySym symbolic= 0; >>>>>> >>>>>> rather than to try to store 0 into *symbolic on the callee side. (A >>>>>> professor of my college days once told us that "most bugs are related to >>>>>> uninitialized variables." I should've known better.) >>>>>> >>>>>> >>>>>> I had exactly this bug in the win32 CameraPlugin the other day. And >>>>>> it didn’t surface until shutting down the plugin on exiting the system. C, >>>>>> what a love/hate relationship it engenders :-) >>>>>> >>>>>> When I get around to it, I'll make another change and this time make >>>>>> a pull request. >>>>>> >>>>>> >>>>>> Or if you’d like I could invite you to become a committer and then >>>>>> you could avoid the pull request. >>>>>> >>>>>> >>>>>> >>>>>> On Tue, Oct 27, 2020 at 11:43 AM Eliot Miranda < >>>>>> eliot.miranda at gmail.com> wrote: >>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Tue, Oct 27, 2020 at 11:14 AM Yoshiki Ohshima < >>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>> >>>>>>>> >>>>>>>> Thanks! Maybe I should not have sent a separate email to Eliot ^^; >>>>>>>> >>>>>>> >>>>>>> Don't sweat it :-) Fixes gratefully received :-) Thanks *very* >>>>>>> much for attending to the input issue. Much appreciated. >>>>>>> >>>>>>>> >>>>>>>> On Tue, Oct 27, 2020 at 10:46 AM Nicolas Cellier < >>>>>>>> nicolas.cellier.aka.nice at gmail.com> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> Ah too late, Eliot was faster, hit the pull request next time :) >>>>>>>>> >>>>>>>>> Le mar. 27 oct. 2020 à 18:43, Nicolas Cellier < >>>>>>>>> nicolas.cellier.aka.nice at gmail.com> a écrit : >>>>>>>>> >>>>>>>>>> Hi Yoshiki, >>>>>>>>>> what you could do is >>>>>>>>>> 1) revert the changes to sqPlatformSpecific.h (fseek, ftell) >>>>>>>>>> since we have a working workaround now >>>>>>>>>> 2) just create a pull request from the github web interface >>>>>>>>>> (that's rather easy) >>>>>>>>>> It will be very easy for us to integrate (one click), and we'll >>>>>>>>>> keep your authorship. >>>>>>>>>> >>>>>>>>>> Le mar. 27 oct. 2020 à 18:02, Yoshiki Ohshima < >>>>>>>>>> Yoshiki.Ohshima at acm.org> a écrit : >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> I have a branch on a clone on github: >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> https://github.com/yoshikiohshima/opensmalltalk-vm/tree/composition-input-fix-2020-Oct >>>>>>>>>>> >>>>>>>>>>> It might be easier to pull from this? Separately, I'll mail you >>>>>>>>>>> sqUnixX11.c. >>>>>>>>>>> >>>>>>>>>>> On Tue, Oct 27, 2020 at 9:58 AM Eliot Miranda < >>>>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>>> >>>>>>>>>>>> on my Mac patch isn't smart enough to decode a git diff. >>>>>>>>>>>> Can you just email me your platforms/unix/vm-display-X11/sqUnixX11.c and >>>>>>>>>>>> I'll integrate? Thanks! >>>>>>>>>>>> >>>>>>>>>>>> On Tue, Oct 27, 2020 at 8:21 AM Yoshiki Ohshima < >>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> The previous one was just a hack but I think I found the real >>>>>>>>>>>>> problem. It was about the variable symbolic, that gets symbolic key code >>>>>>>>>>>>> *when* it is needed has to be zero'ed out when it is not needed. >>>>>>>>>>>>> >>>>>>>>>>>>> The diff is attached... I'll a make pull request if that helps. >>>>>>>>>>>>> >>>>>>>>>>>>> On Sat, Oct 24, 2020 at 5:32 PM Yoshiki Ohshima < >>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> For the /build.linuxARMv6/squeak.cog.spur/build.debug case, >>>>>>>>>>>>>> a hack I did was like this: >>>>>>>>>>>>>> >>>>>>>>>>>>>> diff --git a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>>>> b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>>>> >>>>>>>>>>>>>> index 268593673..bfb57257b 100644 >>>>>>>>>>>>>> >>>>>>>>>>>>>> --- a/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>>>> >>>>>>>>>>>>>> +++ b/platforms/unix/vm/sqPlatformSpecific.h >>>>>>>>>>>>>> >>>>>>>>>>>>>> @@ -105,8 +105,8 @@ extern void sqFilenameFromString(char >>>>>>>>>>>>>> *uxName, sqInt stNameIndex, int sqNameLeng >>>>>>>>>>>>>> >>>>>>>>>>>>>> #undef sqFTruncate >>>>>>>>>>>>>> >>>>>>>>>>>>>> /* sqFTruncate should return 0 on success, ftruncate does >>>>>>>>>>>>>> also */ >>>>>>>>>>>>>> >>>>>>>>>>>>>> #define sqFTruncate(f,o) ftruncate(fileno(f), o) >>>>>>>>>>>>>> >>>>>>>>>>>>>> -#define ftell(s) ftello(s) >>>>>>>>>>>>>> >>>>>>>>>>>>>> -#define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>>>> >>>>>>>>>>>>>> +// #define ftell(s) ftello(s) >>>>>>>>>>>>>> >>>>>>>>>>>>>> +// #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> #if defined(__GNUC__) >>>>>>>>>>>>>> >>>>>>>>>>>>>> # if !defined(VM_LABEL) >>>>>>>>>>>>>> >>>>>>>>>>>>>> diff --git a/spur64src/vm/cogit.c b/spur64src/vm/cogit.c >>>>>>>>>>>>>> >>>>>>>>>>>>>> index d62b05f40..e1c14a021 100644 >>>>>>>>>>>>>> >>>>>>>>>>>>>> --- a/spur64src/vm/cogit.c >>>>>>>>>>>>>> >>>>>>>>>>>>>> +++ b/spur64src/vm/cogit.c >>>>>>>>>>>>>> >>>>>>>>>>>>>> @@ -6,6 +6,8 @@ >>>>>>>>>>>>>> >>>>>>>>>>>>>> # define SysV 1 >>>>>>>>>>>>>> >>>>>>>>>>>>>> #endif >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> +#define __arm64__ >>>>>>>>>>>>>> >>>>>>>>>>>>>> + >>>>>>>>>>>>>> >>>>>>>>>>>>>> #if defined(__arm64__) || defined(__aarch64__) || >>>>>>>>>>>>>> defined(__ARM_ARCH_ISA_A64) || defined(ARM64) || >>>>>>>>>>>>>> defined(ARMv8) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> and this produced a runnable VM on Raspberry Pi4 >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Sat, Oct 24, 2020 at 4:41 PM Yoshiki Ohshima < >>>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> And I tried a few more things by checking out the last >>>>>>>>>>>>>>> release tag 202003021730 or try opensmalltalk-vm/build. >>>>>>>>>>>>>>> linuxARMv6/squeak.cog.spur/build.debug but those attempts >>>>>>>>>>>>>>> did not work. For the latter got this error: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> In file included from /usr/include/features.h:424, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> from /usr/include/pthread.h:21, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> from >>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:62, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> from >>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> from >>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> /usr/include/stdio.h:721:12: error: conflicting types for >>>>>>>>>>>>>>> ‘fseeko’ >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> extern int __REDIRECT (fseeko, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ^~~~~~~~~~ >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> In file included from >>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/Cross/vm/sqAssert.h:16, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> from >>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/aio.c:35: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/platforms/unix/vm/sqPlatformSpecific.h:109:22: >>>>>>>>>>>>>>> note: previous declaration \ >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> of ‘fseeko’ was here >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> #define fseek(s,o,w) fseeko(s,o,w) >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ^~~~~~ >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Sat, Oct 24, 2020 at 1:59 PM Yoshiki Ohshima < >>>>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi Eliot, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> For build.linux64ARMv8/squeak.cog.spur/build.debug, i get >>>>>>>>>>>>>>>> the following error. I think I followed the steps in the instructions, >>>>>>>>>>>>>>>> including running updateSCCSVersion and mvm. How can I fix it? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:22:3: error: >>>>>>>>>>>>>>>> #error As yet no Cogit implementation appears to exist for your platform. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> # error As yet no Cogit implementation appears to exist >>>>>>>>>>>>>>>> for your platform. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ^~~~~ >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> /home/pi/opensmalltalk-vm/spur64src/vm/cogit.c:23:3: error: >>>>>>>>>>>>>>>> #error Consider implementing it, starting by adding a subclass of >>>>>>>>>>>>>>>> CogAbstractInstruction. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> # error Consider implementing it, starting by adding a >>>>>>>>>>>>>>>> subclass of CogAbstractInstruction. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ^~~~~ >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> make[1]: *** [Makefile:207: cogit.o] >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:21 AM Eliot Miranda < >>>>>>>>>>>>>>>> eliot.miranda at gmail.com> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi Yoshiki, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Wed, Oct 21, 2020 at 10:14 AM Yoshiki Ohshima < >>>>>>>>>>>>>>>>> Yoshiki.Ohshima at acm.org> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I heard that people got a new problem in inputting >>>>>>>>>>>>>>>>>> Japanese text into Scratch 1.4 running on Raspberry Pi OS after, or around >>>>>>>>>>>>>>>>>> the version 2020-08-20. I would like to take a look at it but it might >>>>>>>>>>>>>>>>>> involve recompiling and generating the VM with debugging info. Last time >>>>>>>>>>>>>>>>>> I looked into it was years and years ago and I need to basically make a >>>>>>>>>>>>>>>>>> fresh start. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Is the process of making NuSqeauk VM For Raspberry Pi up >>>>>>>>>>>>>>>>>> to date and straightforward? Can people point me to the right point to >>>>>>>>>>>>>>>>>> start? >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Making a Cog VM for Raspberry pi is straight-forward. >>>>>>>>>>>>>>>>> Clone opensmalltalk-vm. cd to build.linux64ARMv8, read the HowToBuild, cd >>>>>>>>>>>>>>>>> to build.linux64ARMv8/squeak.cog.spur/build.debug, or build.linux64ARMv8/squeak.stack.spur/build.debug, >>>>>>>>>>>>>>>>> then run ./mvm >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>>>>>>>> best, Eliot >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> -- Yoshiki >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> _,,,^..^,,,_ >>>>>>>>>>>> best, Eliot >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> -- Yoshiki >>>>>>>>>>> >>>>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> -- Yoshiki >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> _,,,^..^,,,_ >>>>>>> best, Eliot >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> -- Yoshiki >>>>>> >>>>>> >>>>> >>>>> -- >>>>> -- Yoshiki >>>>> >>>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>>> >>> >>> -- >>> _,,,^..^,,,_ >>> best, Eliot >>> >> >> >> -- >> -- Yoshiki >> >> > > -- > _,,,^..^,,,_ > best, Eliot > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Wed Oct 28 23:34:47 2020 From: tim at rowledge.org (tim Rowledge) Date: Wed, 28 Oct 2020 16:34:47 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> Message-ID: <110048A6-592A-44D8-85A7-3FA679AF8739@rowledge.org> > On 2020-10-28, at 4:17 PM, Eliot Miranda wrote: > > cc -dM -E - Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.419.mcz ==================== Summary ==================== Name: Cog-eem.419 Author: eem Time: 28 October 2020, 5:00:42.614467 pm UUID: 82e5725f-bce2-42a6-a9e0-2c048b5553cb Ancestors: Cog-eem.418 Add the simulating-the-simulator primitives for the processor aliens. Use these to simulate runCPU:In:Size:MinAddressRead:Write: & singleStepCPU:In:Size:MinAddressRead:Write:. Fix my misunderstanding of the use of Context>>cut: in MultiProcessor>>saveStackFor:above:homeContext: and consequently the COGMTVM happily simulates more than 1k methods into simulating-the-simulator before an assertt-fail. COGMTVM is officially undead ;-) =============== Diff against Cog-eem.418 =============== Item was added: + ----- Method: BochsIA32Alien>>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" + + ^ec! Item was added: + ----- Method: BochsIA32Alien>>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" + + ^ec! Item was added: + ----- Method: BochsX64Alien>>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" + + ^ec! Item was added: + ----- Method: BochsX64Alien>>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" + + ^ec! Item was added: + ----- Method: GdbARMAlien>>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" + + ^ec! Item was added: + ----- Method: GdbARMAlien>>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" + + ^ec! Item was changed: ----- Method: MultiProcessor>>saveStackFor:above:homeContext: (in category 'private-deep hackery') ----- saveStackFor: signalerContext above: contextInCritical homeContext: doesNotUnderstandContext "Some processors, notably ARMv8, support load/store pair instructions which may raise two ProcessorSimulationTraps. To handle this we must preserve the continuation following the raising of the first simulaiton trap. This cuts up, and restitches the stack so that when the first ProcessorSimulationTrap is raised outside the critical: block in our doesNotUnderstand: method, control continues to the second trap." + | contextAboveSignalerContext | - | contextAboveContextInCritical contextAboveSignalerContext | - contextAboveContextInCritical := signalerContext findContextSuchThat: [:ctxt| ctxt sender == contextInCritical]. "This is our continuation, which should be changed to continue back into the critical section." contextAboveSignalerContext := thisContext findContextSuchThat: [:ctxt| ctxt sender == signalerContext]. - self deny: contextAboveContextInCritical isNil. self deny: contextAboveSignalerContext isNil. + "signalerContext through the context above contextInCritical is the stack that is the continuation + for the trap. This must be inserted between the doesNotUnderstandContext and its sender. + N.B. Context>>cut: cuts above the argument!!!!" + signalerContext cut: contextInCritical. + contextInCritical privSender: doesNotUnderstandContext sender. - "signalerContext through contextAboveContextInCritical is the stack that is the continuation - for the trap. This must be inserted between the doesNotUnderstandContext and its sender." - signalerContext cut: contextAboveContextInCritical. - contextAboveContextInCritical privSender: doesNotUnderstandContext sender. doesNotUnderstandContext privSender: signalerContext. "Now arrange that the handler returns to contextInCritical; and we're done." + contextAboveSignalerContext privSender: contextInCritical! - contextAboveSignalerContext privSender: contextInCritical. - self deny: (thisContext findContextSuchThat: [:ctxt| ctxt == signalerContext]) isNil. - self deny: (thisContext findContextSuchThat: [:ctxt| ctxt == contextInCritical]) isNil. - self deny: (thisContext findContextSuchThat: [:ctxt| ctxt == doesNotUnderstandContext]) isNil! Item was changed: ----- Method: ProcessorSimulatorPlugin>>runCPU:In:Size:MinAddressRead:Write: (in category 'simulation') ----- runCPU: cpu In: memoryCArray Size: memorySize MinAddressRead: minAddress Write: minWriteMaxExecAddress "*now* we need derived pointers. Ho hum... But all we need is one more level of indirection..." + | result | + result := mySimulatorAlien + rawPrimitiveRunInMemory: interpreterProxy memory + offsetBy: memoryCArray ptrAddress + minimumAddress: minAddress + readOnlyBelow: minWriteMaxExecAddress. + ^result == mySimulatorAlien + ifTrue: [0] + ifFalse: + [result isPrimitiveError + ifTrue: [result errorCode] + ifFalse: [result]]! - ^mySimulatorAlien - primitiveRunInMemory: interpreterProxy memory - offsetBy: memoryCArray ptrAddress - minimumAddress: minAddress - readOnlyBelow: minWriteMaxExecAddress! Item was changed: ----- Method: ProcessorSimulatorPlugin>>singleStepCPU:In:Size:MinAddressRead:Write: (in category 'simulation') ----- singleStepCPU: cpu In: memoryCArray Size: memorySize MinAddressRead: minAddress Write: minWriteMaxExecAddress "*now* we need derived pointers. Ho hum... But all we need is one more level of indirection..." + | result | + self break. + result := mySimulatorAlien + rawPrimitiveSingleStepInMemory: interpreterProxy memory + offsetBy: memoryCArray ptrAddress + minimumAddress: minAddress + readOnlyBelow: minWriteMaxExecAddress. + ^result == mySimulatorAlien + ifTrue: [0] + ifFalse: + [result isPrimitiveError + ifTrue: [result errorCode] + ifFalse: [result]]! - ^mySimulatorAlien - primitiveSingleStepInMemory: interpreterProxy memory - offsetBy: memoryCArray ptrAddress - minimumAddress: minAddress - readOnlyBelow: minWriteMaxExecAddress! From commits at source.squeak.org Thu Oct 29 00:04:28 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 29 Oct 2020 00:04:28 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2858.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2858.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2858 Author: eem Time: 28 October 2020, 5:04:18.475277 pm UUID: a82bc143-8937-4842-8fe8-58e4d9d3ef85 Ancestors: VMMaker.oscog-eem.2857 We need a rump setInterruptCheckChain: to be able to simulate the processor plugins. =============== Diff against VMMaker.oscog-eem.2857 =============== Item was added: + ----- Method: SpurMemoryManager>>setInterruptCheckChain: (in category 'simulation only') ----- + setInterruptCheckChain: ignored + + ^0! From no-reply at appveyor.com Thu Oct 29 00:12:45 2020 From: no-reply at appveyor.com (AppVeyor) Date: Thu, 29 Oct 2020 00:12:45 +0000 Subject: [Vm-dev] Build completed: opensmalltalk-vm 1.0.2289 Message-ID: <20201029001245.1.8732FB5D8DD0B6A0@appveyor.com> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Thu Oct 29 00:16:11 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 29 Oct 2020 00:16:11 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2859.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2859.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2859 Author: eem Time: 28 October 2020, 5:16:02.046216 pm UUID: cf8dc817-56ad-44b6-a593-7ec5a163df5f Ancestors: VMMaker.oscog-eem.2858 Allow processor predefined macros to include expressions (i.e. __ARM_ARCH >= 8). =============== Diff against VMMaker.oscog-eem.2858 =============== Item was changed: ----- Method: Cogit class>>generateCodeStringForCogitDotC (in category 'translation') ----- generateCodeStringForCogitDotC "Generate a skeletal cogit.c that includes the relevant cogitFOO.c for the appropriate subclasses of CogAbstractInstruction. self generateCodeStringForCogitDotC" | string insertPosition abis defaultDef | abis := OrderedCollection new. string := String streamContents: [:s| s nextPutAll: '/* Automatically generated by\ ' withCRs. s nextPutAll: (CCodeGenerator monticelloDescriptionFor: self). s cr; nextPutAll: ' */'. s cr; cr; nextPut: $#. insertPosition := s position. self translateableInstructionSubclassesAndInstalledOptionsDo: [:class | | abi | s nextPutAll: 'if '. (abi := InitializationOptions at: #ABI ifAbsent: []) ifNotNil: [s nextPutAll: (abis addLast: abi); nextPutAll: ' && (']. class identifyingPredefinedMacros + do: [:predefinedMacro| + (predefinedMacro includes: Character space) "not a macr name but an expression" + ifTrue: [s nextPut: $(; nextPutAll: predefinedMacro] + ifFalse: [s nextPutAll: 'defined('; nextPutAll: predefinedMacro]. + s nextPut: $)] - do: [:predefinedMacro| s nextPutAll: 'defined('; nextPutAll: predefinedMacro; nextPut: $)] separatedBy: [s nextPutAll: ' || ']. abi ifNotNil: [s nextPut: $)]. s cr; cr; nextPutAll: '# include "'; nextPutAll: class moduleName; nextPutAll: '.c"'. s cr; cr; nextPutAll: '#el']. s nextPutAll: 'se'. #( 'As yet no Cogit implementation appears to exist for your platform.' 'Consider implementing it, starting by adding a subclass of CogAbstractInstruction.') do: [:msg| s cr; nextPutAll: '# error '; nextPutAll: msg]. s cr; nextPutAll: '#endif'; cr]. abis isEmpty ifTrue: [^string]. defaultDef := String streamContents: [:s| s nextPutAll: '#if !!'. abis do: [:abi| s nextPutAll: abi] separatedBy: [s nextPutAll: ' && !!']. s cr; nextPutAll: '# define '; nextPutAll: abis first; nextPutAll: ' 1'; cr. s nextPutAll: '#endif'; cr; cr]. ^string copyReplaceFrom: insertPosition to: insertPosition - 1 with: defaultDef! From noreply at github.com Thu Oct 29 00:29:36 2020 From: noreply at github.com (Eliot Miranda) Date: Wed, 28 Oct 2020 17:29:36 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 2fd7f4: Balloon-Engine-Pools no longer needed for a VMMake... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 2fd7f4385ed58a907202954d7ad72b26dba679d8 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/2fd7f4385ed58a907202954d7ad72b26dba679d8 Author: Eliot Miranda Date: 2020-10-28 (Wed, 28 Oct 2020) Changed paths: M .gitignore M image/BuildSqueakSpurTrunkVMMakerImage.st Log Message: ----------- Balloon-Engine-Pools no longer needed for a VMMaker image. Balloon is in trunk. ignore workspaces in image. [ci skip] From builds at travis-ci.org Thu Oct 29 01:20:33 2020 From: builds at travis-ci.org (Travis CI) Date: Thu, 29 Oct 2020 01:20:33 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2284 (Cog - 75c8e99) In-Reply-To: Message-ID: <5f9a18dd85824_13fcebb5eeccc11509c@travis-tasks-797ffc674b-wgp9s.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2284 Status: Still Failing Duration: 9 hrs, 17 mins, and 0 secs Commit: 75c8e99 (Cog) Author: Eliot Miranda Message: Merge pull request #530 from smalltalking/Cog Simplify sqUnixMain.c's imgInit() View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/c3f4c20a157b...75c8e99612cd View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/739657620?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Thu Oct 29 01:32:41 2020 From: builds at travis-ci.org (Travis CI) Date: Thu, 29 Oct 2020 01:32:41 +0000 Subject: [Vm-dev] Failed: OpenSmalltalk/opensmalltalk-vm#2288 (Cog - 6477267) In-Reply-To: Message-ID: <5f9a1bb8e7b8e_13fcebb5ee63c1218d0@travis-tasks-797ffc674b-wgp9s.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2288 Status: Failed Duration: 2 hrs, 35 mins, and 43 secs Commit: 6477267 (Cog) Author: Eliot Miranda Message: ProcessorSimulator plugins as per Cog-eem.418 IA32ABI plugin as per VMMaker.oscog-eem.2857 Add the offset version of the run/step primitives which allow simulation of the simulator. IA32ABI: make most of the simple acessors simulate. This makes it possible to simulate the simulator ;-) Slang: generate neater code for pointer indirection. Instead of indexing with zero, dereference with *. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/b223cd542dc6...64772676b662 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/739693912?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Thu Oct 29 02:15:46 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 29 Oct 2020 02:15:46 0000 Subject: [Vm-dev] VM Maker: Cog-eem.420.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.420.mcz ==================== Summary ==================== Name: Cog-eem.420 Author: eem Time: 28 October 2020, 7:15:44.003408 pm UUID: b03ad887-622e-4bf4-9fe4-7470af59aa6c Ancestors: Cog-eem.419 Fix the stack stitching code. Fix MultiProcessor's desNotUnderstand: handler to return the non-virtual processor to the second trap continuation. ANd no breaks for the wicked... =============== Diff against Cog-eem.419 =============== Item was changed: ----- Method: MultiProcessor>>doesNotUnderstand: (in category 'message forwarding') ----- doesNotUnderstand: aMessage "Forward a message to the actual processor, managing a thread-switch if necessary. Catch ProcessorSimulationTraps and raise them outside of the critical section to avoid deadlock when reentering the VM from a trap and switching threads in the run-time." | selector result trap contextInCritical | selector := aMessage selector. (guardedProcessorProtocol includes: selector) ifFalse: [^(unguardedProcessorProtocol includes: selector) ifTrue: [processor perform: selector withArguments: aMessage arguments] ifFalse: [super doesNotUnderstand: aMessage]]. result := [mutex critical: [contextInCritical := thisContext. owner ~~ mutex owningProcess ifTrue: [owner ifNotNil: [registerState at: owner put: processor registerState]. (registerState at: (owner := mutex owningProcess) ifAbsent: nil) ifNil: [coInterpreter initializeProcessorForThreadIndex: (threadIndex := threadIndex + 1)] ifNotNil: [:newState| processor setRegisterState: newState]]. processor perform: selector withArguments: aMessage arguments]] on: ProcessorSimulationTrap, Error, AssertionFailure do: [:ex| ex class == ProcessorSimulationTrap ifFalse: [ex pass]. "Alas things are not so simple with ARMv8 ldp/stp... The comments in these two methods explain..." (self isAboutToReturn: ex signalerContext) ifFalse: [self saveStackFor: ex signalerContext above: contextInCritical homeContext: thisContext home]. trap := ex]. + ^trap + ifNil: [result] + ifNotNil: [trap signal ifNotNil: + [:resultOfSignal| + resultOfSignal == self + ifTrue: [processor] + ifFalse: [resultOfSignal]]]! - ^trap ifNil: [result] ifNotNil: [trap signal]! Item was changed: ----- Method: MultiProcessor>>saveStackFor:above:homeContext: (in category 'private-deep hackery') ----- saveStackFor: signalerContext above: contextInCritical homeContext: doesNotUnderstandContext "Some processors, notably ARMv8, support load/store pair instructions which may raise two ProcessorSimulationTraps. To handle this we must preserve the continuation following the + raising of the first simulation trap. This cuts up, and restitches the stack so that when the - raising of the first simulaiton trap. This cuts up, and restitches the stack so that when the first ProcessorSimulationTrap is raised outside the critical: block in our doesNotUnderstand: method, control continues to the second trap." + | contextAboveContextInCritical contextAboveSignalerContext | + "This is the bottom context in the saved continuation, which must be stitched in beneath the doesNotUnderstand: handler." + contextAboveContextInCritical := signalerContext findContextSuchThat: [:ctxt| ctxt sender == contextInCritical]. - | contextAboveSignalerContext | "This is our continuation, which should be changed to continue back into the critical section." contextAboveSignalerContext := thisContext findContextSuchThat: [:ctxt| ctxt sender == signalerContext]. self deny: contextAboveSignalerContext isNil. "signalerContext through the context above contextInCritical is the stack that is the continuation for the trap. This must be inserted between the doesNotUnderstandContext and its sender. N.B. Context>>cut: cuts above the argument!!!!" signalerContext cut: contextInCritical. + contextAboveContextInCritical privSender: doesNotUnderstandContext sender. - contextInCritical privSender: doesNotUnderstandContext sender. doesNotUnderstandContext privSender: signalerContext. "Now arrange that the handler returns to contextInCritical; and we're done." contextAboveSignalerContext privSender: contextInCritical! Item was changed: ----- Method: ProcessorSimulatorPlugin>>singleStepCPU:In:Size:MinAddressRead:Write: (in category 'simulation') ----- singleStepCPU: cpu In: memoryCArray Size: memorySize MinAddressRead: minAddress Write: minWriteMaxExecAddress "*now* we need derived pointers. Ho hum... But all we need is one more level of indirection..." | result | - self break. result := mySimulatorAlien rawPrimitiveSingleStepInMemory: interpreterProxy memory offsetBy: memoryCArray ptrAddress minimumAddress: minAddress readOnlyBelow: minWriteMaxExecAddress. ^result == mySimulatorAlien ifTrue: [0] ifFalse: [result isPrimitiveError ifTrue: [result errorCode] ifFalse: [result]]! From tim at rowledge.org Thu Oct 29 03:51:13 2020 From: tim at rowledge.org (tim Rowledge) Date: Wed, 28 Oct 2020 20:51:13 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: <110048A6-592A-44D8-85A7-3FA679AF8739@rowledge.org> References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> <110048A6-592A-44D8-85A7-3FA679AF8739@rowledge.org> Message-ID: > On 2020-10-28, at 4:34 PM, tim Rowledge wrote: > > I could have sworn I had a uSD with Raspbian64 on it but it seems not. I'll make one and test on that again. Loaded and updated at last - Pi 4 with 64 bit Raspberry Pi OS: #define __ARM_SIZEOF_WCHAR_T 4 #define __ARM_FEATURE_UNALIGNED 1 #define __ARM_FEATURE_IDIV 1 #define __ARM_FP 14 #define __ARM_ALIGN_MAX_STACK_PWR 16 #define __ARM_SIZEOF_MINIMAL_ENUM 4 #define __ARM_ALIGN_MAX_PWR 28 #define __ARM_FP16_FORMAT_IEEE 1 #define __ARM_FP16_ARGS 1 #define __ARM_FEATURE_FMA 1 #define __ARM_64BIT_STATE 1 #define __ARM_ARCH_PROFILE 65 #define __ARM_PCS_AAPCS64 1 #define __ARM_FEATURE_CLZ 1 #define __ARM_ARCH 8 #define __ARM_ARCH_8A 1 #define __ARM_NEON 1 #define __ARM_FEATURE_NUMERIC_MAXMIN 1 #define __ARM_ARCH_ISA_A64 1 tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Oxymorons: Religious tolerance From noreply at github.com Thu Oct 29 05:08:13 2020 From: noreply at github.com (Eliot Miranda) Date: Wed, 28 Oct 2020 22:08:13 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 17625f: CogVM source as per VMMaker.oscog-eem.2859 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 17625fc20fa1f55ed11a728329f002e9feddb459 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/17625fc20fa1f55ed11a728329f002e9feddb459 Author: Eliot Miranda Date: 2020-10-28 (Wed, 28 Oct 2020) Changed paths: M nsspur64src/vm/cogit.c M spur64src/vm/cogit.c M spurlowcode64src/vm/cogit.c M spursista64src/vm/cogit.c Log Message: ----------- CogVM source as per VMMaker.oscog-eem.2859 Allow processor predefined macros to include expressions (i.e. __ARM_ARCH >= 8). [ci skip] From commits at source.squeak.org Thu Oct 29 06:53:45 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 29 Oct 2020 06:53:45 0000 Subject: [Vm-dev] VM Maker: Cog-eem.421.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.421.mcz ==================== Summary ==================== Name: Cog-eem.421 Author: eem Time: 28 October 2020, 11:53:43.385785 pm UUID: 0ace52a2-3ab3-4b9f-bdc5-890dba71fbaa Ancestors: Cog-eem.420 Modify dispatch of ProcessorSimulationTraps to doiuble dispatching (ProcessorSimulationTrap>>applyTo:). Extent the set of traps with CompareAndSwapSimulationTrap. Support MultiProcessor in goig with the flow by having CompareAndSwapSimulationTrap resume always with teh nonVirtualProcessor. =============== Diff against Cog-eem.420 =============== Item was added: + ProcessorSimulationTrap subclass: #CompareAndSwapSimulationTrap + instanceVariableNames: 'expectedValue storedValue' + classVariableNames: '' + poolDictionaries: '' + category: 'Cog-Processors'! Item was added: + ----- Method: CompareAndSwapSimulationTrap>>applyTo: (in category 'double dispatching') ----- + applyTo: aCogit + ^aCogit handleCompareAndSwapSimulationTrap: self! Item was added: + ----- Method: CompareAndSwapSimulationTrap>>expectedValue (in category 'accessing') ----- + expectedValue + + ^expectedValue! Item was added: + ----- Method: CompareAndSwapSimulationTrap>>expectedValue: (in category 'accessing') ----- + expectedValue: anObject + + expectedValue := anObject! Item was added: + ----- Method: CompareAndSwapSimulationTrap>>storedValue (in category 'accessing') ----- + storedValue + + ^storedValue! Item was added: + ----- Method: CompareAndSwapSimulationTrap>>storedValue: (in category 'accessing') ----- + storedValue: anObject + + storedValue := anObject! Item was added: + ----- Method: Exception>>isProcessorSimulationTrap (in category '*Cog-Processors-testing') ----- + isProcessorSimulationTrap + ^false! Item was changed: ----- Method: GdbARMv8AlienTests>>testNfib1 (in category 'tests') ----- testNfib1 "self new testNfib1" self should: [self runNFib: 1 disassemble: false printRegisters: false] raise: Error withExceptionDo: [:err| + self assert: err isProcessorSimulationTrap. - self assert: err class = ProcessorSimulationTrap. self assert: #return = err type. self assert: 16r1000 equals: err address]. self deny: (self processor pc between: 0 and: self nfib size). self assert: self processor r0 = 1 benchFib! Item was changed: ----- Method: MultiProcessor>>doesNotUnderstand: (in category 'message forwarding') ----- doesNotUnderstand: aMessage "Forward a message to the actual processor, managing a thread-switch if necessary. Catch ProcessorSimulationTraps and raise them outside of the critical section to avoid deadlock when reentering the VM from a trap and switching threads in the run-time." | selector result trap contextInCritical | selector := aMessage selector. (guardedProcessorProtocol includes: selector) ifFalse: [^(unguardedProcessorProtocol includes: selector) ifTrue: [processor perform: selector withArguments: aMessage arguments] ifFalse: [super doesNotUnderstand: aMessage]]. result := [mutex critical: [contextInCritical := thisContext. owner ~~ mutex owningProcess ifTrue: [owner ifNotNil: [registerState at: owner put: processor registerState]. (registerState at: (owner := mutex owningProcess) ifAbsent: nil) ifNil: [coInterpreter initializeProcessorForThreadIndex: (threadIndex := threadIndex + 1)] ifNotNil: [:newState| processor setRegisterState: newState]]. processor perform: selector withArguments: aMessage arguments]] on: ProcessorSimulationTrap, Error, AssertionFailure do: [:ex| + ex isProcessorSimulationTrap ifFalse: - ex class == ProcessorSimulationTrap ifFalse: [ex pass]. "Alas things are not so simple with ARMv8 ldp/stp... The comments in these two methods explain..." (self isAboutToReturn: ex signalerContext) ifFalse: [self saveStackFor: ex signalerContext above: contextInCritical homeContext: thisContext home]. trap := ex]. ^trap ifNil: [result] ifNotNil: [trap signal ifNotNil: [:resultOfSignal| resultOfSignal == self ifTrue: [processor] ifFalse: [resultOfSignal]]]! Item was added: + ----- Method: ProcessorSimulationTrap>>applyTo: (in category 'double dispatching') ----- + applyTo: aCogit + type == #read ifTrue: + [^aCogit handleReadSimulationTrap: self]. + (type == #call or: [type == #jump]) ifTrue: + [^aCogit handleCallOrJumpSimulationTrap: self]. + type == #write ifTrue: + [^aCogit handleWriteSimulationTrap: self]. + self assert: type == #return. + ^aCogit handleReturnSimulationTrap: self! Item was added: + ----- Method: ProcessorSimulationTrap>>isProcessorSimulationTrap (in category 'testing') ----- + isProcessorSimulationTrap + ^true! Item was added: + ----- Method: ProcessorSimulationTrap>>resume: (in category 'handling') ----- + resume: aProcessorSimulator + ^super resume: aProcessorSimulator nonVirtualProcessor! From commits at source.squeak.org Thu Oct 29 06:58:52 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 29 Oct 2020 06:58:52 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2860.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2860.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2860 Author: eem Time: 28 October 2020, 11:58:42.592939 pm UUID: 3836e239-6ba6-476a-a9bc-69f0c0f0098f Ancestors: VMMaker.oscog-eem.2859 CoInterpreterMT: Get rid of vmOwnerLock; what a bogus idea. Just use CAS on vmOwner as God (DS) intended. Cogit: Switch over to double-dispathcing for ProcessorSimulationTrap, adding handleCompareAndSwapSimulationTrap:. Get rid of the (dis)ownVM: nonsense in FakeStdinStream>>nextm, moving it to FilePlugin>>primitiveFileReadPinningAndDisowning, whjere it belongs, having that method also pin/unpin around the read. =============== Diff against VMMaker.oscog-eem.2859 =============== Item was added: + ----- Method: CoInterpreterMT>>vmOwnerAddress (in category 'simulation') ----- + vmOwnerAddress + + ^cogThreadManager vmOwnerAddress! Item was removed: - ----- Method: CoInterpreterMT>>vmOwnerLockAddress (in category 'cog jit support') ----- - vmOwnerLockAddress - - ^cogThreadManager - ifNotNil: [:ctm| ctm vmOwnerLockAddress] - ifNil: [0]! Item was changed: CogClass subclass: #CogThreadManager (excessive size, no diff calculated) Item was changed: ----- Method: CogThreadManager>>initialize (in category 'initialize-release') ----- initialize + vmOwner := numThreads := numThreadsIncrement := 0. - vmOwner := vmOwnerLock := numThreads := numThreadsIncrement := 0. memoryIsScarce := false. "N.B. Do not initialize threadLocalStorage; leave this to ioInitThreadLocalThreadIndices"! Item was added: + ----- Method: CogThreadManager>>vmOwnerAddress (in category 'public api') ----- + vmOwnerAddress + "NB. For the JIT only, so it can generate the lock & unlock functions." + + ^self + cCode: [(self addressOf: vmOwner) asUnsignedInteger] + inSmalltalk: [cogit simulatedReadWriteVariableAddress: #vmOwnerFromMachineCode in: self]! Item was added: + ----- Method: CogThreadManager>>vmOwnerFromMachineCode (in category 'simulation') ----- + vmOwnerFromMachineCode + ^vmOwner! Item was added: + ----- Method: CogThreadManager>>vmOwnerFromMachineCode: (in category 'simulation') ----- + vmOwnerFromMachineCode: aValue + vmOwner := aValue! Item was removed: - ----- Method: CogThreadManager>>vmOwnerLockAddress (in category 'public api') ----- - vmOwnerLockAddress - "NB. For the JIT only, so it can generate the lock & unlock functions." - - ^self - cCode: [(self addressOf: vmOwnerLock) asUnsignedInteger] - inSmalltalk: [cogit simulatedVariableAddress: #vmOwnerLockFromMachineCode in: self]! Item was removed: - ----- Method: CogThreadManager>>vmOwnerLockFromMachineCode (in category 'simulation') ----- - vmOwnerLockFromMachineCode - ^vmOwnerLock! Item was removed: - ----- Method: CogThreadManager>>vmOwnerLockFromMachineCode: (in category 'simulation') ----- - vmOwnerLockFromMachineCode: aValue - vmOwnerLock := aValue! Item was removed: - ----- Method: CogVMSimulator>>vmOwnerLockAddress (in category 'multi-threading simulation switch') ----- - vmOwnerLockAddress - "This method includes or excludes CoInterpreterMT methods as required. - Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate" - - ^self perform: #vmOwnerLockAddress - withArguments: {} - inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was changed: ----- Method: CogVMSimulator>>windowIsClosing (in category 'primitive support') ----- windowIsClosing self threadManager ifNotNil: [:threadManager| threadManager guiProcess ifNotNil: [:guiProcess| + (guiProcess ~= Processor activeProcess + and: [guiProcess isInteger not]) ifTrue: - guiProcess ~= Processor activeProcess ifTrue: [guiProcess signalException: (Notification new tag: #evaluateQuit; yourself)]. Processor terminateActive]]. quitBlock ifNotNil: [:effectiveQuitBlock| quitBlock := nil. "stop recursion on explicit window close." [effectiveQuitBlock value] on: BlockCannotReturn do: [:ex|]] "Cause return from #test, et al"! Item was changed: ----- Method: Cogit>>generateVMOwnerLockFunctions (in category 'initialization') ----- generateVMOwnerLockFunctions | startAddress | self cppIf: COGMTVM ifTrue: [self allocateOpcodes: backEnd numLowLevelLockOpcodes bytecodes: 0. self zeroOpcodeIndex. startAddress := methodZoneBase. + backEnd generateLowLevelTryLock: coInterpreter vmOwnerAddress. - backEnd generateLowLevelTryLock: coInterpreter vmOwnerLockAddress. self outputInstructionsForGeneratedRuntimeAt: startAddress. self recordGeneratedRunTime: 'ceTryLockVMOwner' address: startAddress. ceTryLockVMOwner := self cCoerceSimple: startAddress to: #'usqIntptr_t (*)(void)'. self zeroOpcodeIndex. initialPC := 0. endPC := numAbstractOpcodes - 1. startAddress := methodZoneBase. + backEnd generateLowLevelUnlock: coInterpreter vmOwnerAddress. - backEnd generateLowLevelUnlock: coInterpreter vmOwnerLockAddress. self outputInstructionsForGeneratedRuntimeAt: startAddress. self recordGeneratedRunTime: 'ceUnlockVMOwner' address: startAddress. ceUnlockVMOwner := self cCoerceSimple: startAddress to: #'void (*)(void)']! Item was changed: ----- Method: Cogit>>handleCallOrJumpSimulationTrap: (in category 'simulation only') ----- handleCallOrJumpSimulationTrap: aProcessorSimulationTrap | evaluable function memory result savedFramePointer savedStackPointer savedArgumentCount retpc | + + "This is a hack fix before we revise the simulators. When a jump call is made, the next + pc is effectively the return address on the stack, not the instruction following the jump." + aProcessorSimulationTrap type == #jump ifTrue: + [processor hackFixNextPCOfJumpFor: aProcessorSimulationTrap using: objectMemory]. + evaluable := simulatedTrampolines at: aProcessorSimulationTrap address ifAbsent: [self errorProcessingSimulationTrap: aProcessorSimulationTrap in: simulatedTrampolines]. function := evaluable isBlock ifTrue: ['aBlock; probably some plugin primitive'] ifFalse: [evaluable receiver == backEnd ifTrue: [^self handleABICallOrJumpSimulationTrap: aProcessorSimulationTrap evaluable: evaluable]. evaluable selector]. memory := coInterpreter memory. function == #interpret ifTrue: "i.e. we're here via ceInvokeInterpret and should discard all state back to enterSmalltalkExecutiveImplementation" [processor simulateJumpCallOf: aProcessorSimulationTrap address memory: memory. self recordInstruction: {'(simulated jump call of '. aProcessorSimulationTrap address. '/'. function. ')'}. processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize in: memory. coInterpreter reenterInterpreter. "NOTREACHED" self halt]. function ~~ #ceBaseFrameReturn: ifTrue: [coInterpreter assertValidExternalStackPointers]. (backEnd wantsNearAddressFor: function) ifTrue: [^self perform: function with: aProcessorSimulationTrap]. processor simulateCallOf: aProcessorSimulationTrap address nextpc: aProcessorSimulationTrap nextpc memory: memory. retpc := processor retpcIn: memory. self recordInstruction: {'(simulated call of '. aProcessorSimulationTrap address. '/'. function. ')'}. savedFramePointer := coInterpreter framePointer. savedStackPointer := coInterpreter stackPointer. savedArgumentCount := coInterpreter argumentCount. result := ["self halt: evaluable selector." clickConfirm ifTrue: [(self confirm: 'skip run-time call?') ifFalse: [clickConfirm := false. self halt]]. evaluable valueWithArguments: (processor postCallArgumentsNumArgs: evaluable numArgs in: memory)] on: ReenterMachineCode do: [:ex| ex return: #continueNoReturn]. coInterpreter assertValidExternalStackPointers. "Verify the stack layout assumption compileInterpreterPrimitive: makes, provided we've not called something that has built a frame, such as closure value or evaluate method, or switched frames, such as primitiveSignal, primitiveWait, primitiveResume, primitiveSuspend et al." (function beginsWith: 'primitive') ifTrue: [coInterpreter primFailCode = 0 ifTrue: [(CogVMSimulator stackAlteringPrimitives includes: function) ifFalse: ["This is a rare case (e.g. in Scorch where a married context's sender is set to nil on trapTrpped and hence the stack layout is altered." (function == #primitiveSlotAtPut and: [objectMemory isContext: (coInterpreter frameReceiver: coInterpreter framePointer)]) ifFalse: [self assert: savedFramePointer = coInterpreter framePointer. self assert: savedStackPointer + (savedArgumentCount * objectMemory wordSize) = coInterpreter stackPointer]]] ifFalse: [self assert: savedFramePointer = coInterpreter framePointer. self assert: savedStackPointer = coInterpreter stackPointer]]. result ~~ #continueNoReturn ifTrue: [self recordInstruction: {'(simulated return to '. processor retpcIn: memory. ')'}. processor simulateReturnIn: memory. self assert: processor pc = retpc. processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize in: memory]. self assert: (result isInteger "an oop result" or: [result == coInterpreter or: [result == objectMemory or: [result == nil or: [result == #continueNoReturn]]]]). processor cResultRegister: (result ifNil: [0] ifNotNil: [result isInteger ifTrue: [result] ifFalse: [16rF00BA222]])! Item was added: + ----- Method: Cogit>>handleCompareAndSwapSimulationTrap: (in category 'simulation only') ----- + handleCompareAndSwapSimulationTrap: aCompareAndSwapSimulationTrap + | variableValue accessor | + variableValue := (simulatedVariableGetters + at: aCompareAndSwapSimulationTrap address + ifAbsent: [self errorProcessingSimulationTrap: aCompareAndSwapSimulationTrap + in: simulatedVariableGetters]) + value asInteger. + variableValue = aCompareAndSwapSimulationTrap expectedValue ifTrue: + [(simulatedVariableSetters + at: aCompareAndSwapSimulationTrap address + ifAbsent: [self errorProcessingSimulationTrap: aCompareAndSwapSimulationTrap + in: simulatedVariableSetters]) value: aCompareAndSwapSimulationTrap storedValue]. + accessor := aCompareAndSwapSimulationTrap registerAccessor. + processor + perform: accessor + with: (processor convertIntegerToInternal: variableValue). + processor pc: aCompareAndSwapSimulationTrap nextpc. + aCompareAndSwapSimulationTrap resume: processor! Item was changed: ----- Method: Cogit>>handleReadSimulationTrap: (in category 'simulation only') ----- handleReadSimulationTrap: aProcessorSimulationTrap | variableValue accessor | variableValue := (simulatedVariableGetters at: aProcessorSimulationTrap address ifAbsent: [self errorProcessingSimulationTrap: aProcessorSimulationTrap in: simulatedVariableGetters]) value asInteger. accessor := aProcessorSimulationTrap registerAccessor. processor perform: accessor with: (processor convertIntegerToInternal: variableValue). accessor ~~ #pc: ifTrue: [processor pc: aProcessorSimulationTrap nextpc. "In an enilopmart stackPointer is assigned to sp before framePointer. In a trampoline fp and sp are written to the interpreter variables immediately before assigning sp with CStackPointer and immediately there-after fp with CFramePointer. So set processorFrameValid appropriately when assigning fp. This is for CogHeadFrameInspector" (processor accessorIsFramePointerSetter: accessor) ifTrue: + [processorFrameValid := aProcessorSimulationTrap address ~= (simulatedAddresses at: #getCFramePointer)]]. + aProcessorSimulationTrap resume: processor! - [processorFrameValid := aProcessorSimulationTrap address ~= (simulatedAddresses at: #getCFramePointer)]]! Item was added: + ----- Method: Cogit>>handleReturnSimulationTrap: (in category 'simulation only') ----- + handleReturnSimulationTrap: aProcessorSimulationTrap + + | retpc | + retpc := processor leafRetpcIn: coInterpreter memory. + processor simulateLeafReturnIn: coInterpreter memory. + self recordInstruction: {'(simulated return to '. retpc. ')'}! Item was changed: ----- Method: Cogit>>handleWriteSimulationTrap: (in category 'simulation only') ----- handleWriteSimulationTrap: aProcessorSimulationTrap | variableValue | (self addressIsInCodeZone: aProcessorSimulationTrap address) ifTrue: [self error: 'attempt to write to code space']. variableValue := processor perform: aProcessorSimulationTrap registerAccessor. (simulatedVariableSetters at: aProcessorSimulationTrap address ifAbsent: [self errorProcessingSimulationTrap: aProcessorSimulationTrap in: simulatedVariableSetters]) value: variableValue. + processor pc: aProcessorSimulationTrap nextpc. + ^aProcessorSimulationTrap resume: processor! - processor pc: aProcessorSimulationTrap nextpc! Item was changed: ----- Method: Cogit>>simulateCogCodeAt: (in category 'simulation only') ----- simulateCogCodeAt: address "" | stackZoneBase | stackZoneBase := coInterpreter stackZoneBase. processor pc: address. [[[singleStep ifTrue: [[processor sp < stackZoneBase ifTrue: [self halt]. self recordProcessing. self maybeBreakAt: processor pc] value. "So that the Debugger's Over steps over all this" processor singleStepIn: coInterpreter memory minimumAddress: guardPageSize readOnlyBelow: methodZone zoneEnd] ifFalse: [processor runInMemory: coInterpreter memory minimumAddress: guardPageSize readOnlyBelow: methodZone zoneEnd]. "((printRegisters or: [printInstructions]) and: [clickConfirm]) ifTrue: [(self confirm: 'continue?') ifFalse: [clickConfirm := false. self halt]]." true] whileTrue] on: ProcessorSimulationTrap + do: [:ex| ex applyTo: self]. - do: [:ex| - ex type == #read ifTrue: - [self handleReadSimulationTrap: ex. ex resume: processor]. - ex type == #write ifTrue: - [self handleWriteSimulationTrap: ex. ex resume: processor]. - ex type == #jump ifTrue: - [processor hackFixNextPCOfJumpFor: ex using: objectMemory]. - self handleCallOrJumpSimulationTrap: ex]. true] whileTrue! Item was changed: ----- Method: Cogit>>simulateLeafCallOf: (in category 'simulation only') ----- simulateLeafCallOf: someFunction "Simulate execution of machine code that leaf-calls someFunction, answering the result returned by someFunction." "CogProcessorAlienInspector openFor: coInterpreter" | priorSP priorPC priorLR spOnEntry bogusRetPC | self recordRegisters. priorSP := processor sp. priorPC := processor pc. priorLR := backEnd hasLinkRegister ifTrue: [processor lr]. processor setFramePointer: coInterpreter getCFramePointer stackPointer: coInterpreter getCStackPointer; simulateLeafCallOf: someFunction nextpc: (bogusRetPC := 16rBADF00D5 roundTo: backEnd codeGranularity) memory: coInterpreter memory. spOnEntry := processor sp. self recordInstruction: {'(simulated call of '. someFunction. ')'}. + ^[[processor pc between: 0 and: methodZone zoneEnd] whileTrue: - [[processor pc between: 0 and: methodZone zoneEnd] whileTrue: [[singleStep ifTrue: [self recordProcessing. self maybeBreakAt: processor pc. processor singleStepIn: coInterpreter memory minimumAddress: guardPageSize readOnlyBelow: methodZone zoneEnd] ifFalse: [processor runInMemory: coInterpreter memory minimumAddress: guardPageSize readOnlyBelow: methodZone zoneEnd]] on: ProcessorSimulationTrap, Error + do: [:ex| + "Again this is a hack for the processor simulators not properly simulating returns to bogus addresses. + In this case BochsX64Alien doesn't do the right thing." - do: [:ex| | retpc | processor pc = bogusRetPC ifTrue: [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}. ^processor cResultRegister]. + ex isProcessorSimulationTrap ifFalse: + [ex pass]. + ex applyTo: self. + ex type == #return ifTrue: + [^processor cResultRegister]]]. - ex class == ProcessorSimulationTrap ifTrue: - [ex type == #read ifTrue: - [self handleReadSimulationTrap: ex. ex resume: processor]. - ex type == #write ifTrue: - [self handleWriteSimulationTrap: ex. ex resume: processor]. - ex type == #return ifTrue: - [retpc := processor leafRetpcIn: coInterpreter memory. - self assert: retpc = bogusRetPC. - processor simulateLeafReturnIn: coInterpreter memory. - self recordInstruction: {'(simulated return to '. retpc. ')'}. - ^processor cResultRegister]]. - ex pass]]. processor pc = bogusRetPC ifTrue: [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}]. + processor cResultRegister] - ^processor cResultRegister] ensure: [processor sp: priorSP. processor pc: priorPC. priorLR ifNotNil: [:lr| processor lr: lr]]! Item was changed: ----- Method: FakeStdinStream>>next (in category 'accessing') ----- next "Answer the next object in the Stream represented by the receiver. If there are no more elements in the stream fill up the buffer by prompting for input" + | sem inputLine next | - | sem threadIndex inputLine next | position >= readLimit ifTrue: [simulator isThreadedVM ifTrue: + [simulator forceInterruptCheckFromHeartbeat. - ["(simulator cogit singleStep not - and: [UIManager confirm: 'Single step?']) ifTrue: - [simulator cogit singleStep: true]." - threadIndex := simulator disownVM: DisownVMLockOutFullGC. - simulator forceInterruptCheckFromHeartbeat. sem := Semaphore new. WorldState addDeferredUIMessage: [inputLine := UIManager default request: 'Input please!!'. sem signal]. sem wait] ifFalse: "simulate line-oriented input" [inputLine := ((Smalltalk classNamed: #FillInTheBlankMorph) ifNotNil: "Squeak" [:fITBM| fITBM request: 'Input please!!' initialAnswer: '' centerAt: ActiveHand cursorPoint inWorld: ActiveWorld onCancelReturn: nil acceptOnCR: true] ifNil: "Pharo; onCancelReturn: nil is the default here" [UIManager default request: 'Input please!!' initialAnswer: '']). inputLine ifNil: [self atEnd: true. ^nil]]. collection size <= inputLine size ifTrue: [collection := collection species new: inputLine size + 1]. collection replaceFrom: 1 to: inputLine size with: inputLine startingAt: 1; at: (readLimit := inputLine size + 1) put: Character lf. + position := 0]. - position := 0. - simulator isThreadedVM ifTrue: - [simulator ownVM: threadIndex]]. next := collection at: (position := position + 1). ^next " This does it with workspaces: | ws r s | s := Semaphore new. ws := Workspace new contents: ''. ws acceptAction: [:t| r := t asString. s signal]. [ws openLabel: 'Yo!!'; shouldStyle: false. (ws dependents detect: [:dep | dep isKindOf: PluggableTextMorph] ifNone: [nil]) ifNotNil: [:textMorph| textMorph acceptOnCR: true; hasUnacceptedEdits: true]] fork. Processor activeProcess == Project uiProcess ifTrue: [[r isNil] whileTrue: [World doOneCycle]] ifFalse: [s wait]. ws topView delete. s wait. s signal. r"! Item was changed: ----- Method: FilePlugin>>primitiveFileRead (in category 'file primitives') ----- primitiveFileRead self cppIf: SPURVM + ifTrue: [self cppIf: COGMTVM + ifTrue: [self primitiveFileReadPinningAndDisowning] + ifFalse: [self primitiveFileReadWithPinning]] - ifTrue: [self primitiveFileReadWithPinning] ifFalse: [self primitiveFileReadWithoutPinning]! Item was added: + ----- Method: FilePlugin>>primitiveFileReadPinningAndDisowning (in category 'file primitives') ----- + primitiveFileReadPinningAndDisowning + "This version of primitiveFileRead is for garbage collectors that support pinning + and the multi-threaded VM. It actually does the own/disown dance." + | count startIndex array file slotSize elementSize bytesRead threadIndexAndFlags wasPinned | + + + + + + + count := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 0). + startIndex := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 1). + array := interpreterProxy stackValue: 2. + file := self fileValueOf: (interpreterProxy stackValue: 3). + + (interpreterProxy failed + "buffer can be any indexable words or bytes object except CompiledMethod" + or: [(interpreterProxy isWordsOrBytes: array) not]) ifTrue: + [^interpreterProxy primitiveFailFor: PrimErrBadArgument]. + + slotSize := interpreterProxy slotSizeOf: array. + (startIndex >= 1 and: [startIndex + count - 1 <= slotSize]) ifFalse: + [^interpreterProxy primitiveFailFor: PrimErrBadIndex]. + (wasPinned := interpreterProxy isPinned: array) ifFalse: + [array := interpreterProxy pinObject: array]. + threadIndexAndFlags := interpreterProxy disownVM: DisownVMForFFICall. + "Note: adjust startIndex for zero-origin byte indexing" + elementSize := slotSize = 0 + ifTrue: [1] + ifFalse: [(interpreterProxy byteSizeOf: array) // slotSize]. + bytesRead := self + sqFile: file + Read: count * elementSize + Into: (interpreterProxy cCoerce: (interpreterProxy firstIndexableField: array) to: #'char *') + At: startIndex - 1 * elementSize. + interpreterProxy ownVM: threadIndexAndFlags. + wasPinned ifFalse: + [interpreterProxy unpinObject: array]. + interpreterProxy failed ifFalse: + [interpreterProxy methodReturnInteger: bytesRead // elementSize] "answer # of elements read"! From kksubbu.ml at gmail.com Thu Oct 29 10:29:20 2020 From: kksubbu.ml at gmail.com (K K Subbu) Date: Thu, 29 Oct 2020 15:59:20 +0530 Subject: [Vm-dev] nuSqueak source In-Reply-To: <34747C38-114D-4594-9A88-4E851CA2D87F@rowledge.org> References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> <34747C38-114D-4594-9A88-4E851CA2D87F@rowledge.org> Message-ID: <3d334810-b53c-9677-b213-4ff7ecef2164@gmail.com> On 29/10/20 4:52 am, tim Rowledge wrote: > There*is* a 64 bit version of Raspberry PI OS that is currently in > late-beta. That would need a VM from the opensmalltalk-vm⁩ ▸ > ⁨build.linux32ARMv6⁩ ▸ ⁨squeak.stack.spur⁩ tree and of course a 64 > bit image. Ubuntu released their 64-bit desktop versions for Raspberry Pi 4 just last week: https://ubuntu.com/raspberry-pi introduction and installation https://youtu.be/0pT4-RcTERU direct link http://cdimage.ubuntu.com/ubuntu/releases/20.10/release/ HTH .. Subbu From eliot.miranda at gmail.com Thu Oct 29 15:31:16 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu, 29 Oct 2020 08:31:16 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: <3d334810-b53c-9677-b213-4ff7ecef2164@gmail.com> References: <3d334810-b53c-9677-b213-4ff7ecef2164@gmail.com> Message-ID: Hi Yoshiki, Tim, Subbu, ARMv8 is cool; but Linux is a hydra. In getting the JIT to work with ARMv8 I went with the first full 64-bit ARMv8 platform I could access, Manjaro on Raspberry Pi 4. I now also have an Apple Silicon Mac Mini. The OS can impose radically different constraints on the JIT. In Mankato it is impossible to derive an executable region from mmap that is at the same time writable. On MacOS it is possible, but the VM needs a capability conveyed through its Info.plist and baked in when the app bundle is signed. Other linuxes for Pi4 May impose different constraints. As I only have these two variants I need your help in dealing with differing constraints on these other platforms. So what of these constraints? Manjaro’s prevents one from simply allocating the code zone as read+write+execute. So I have to allocate it read+execute and map it elsewhere in the address space as read+write and do all code zone modification (code generation, send-site editing/dynamic-linking/garbage-collection updating, compaction) through this second mapping. To enable that scheme the VM must be compiled with -DDUAL_MAPPED_CODE_ZONE=1. This is enabled in the mvm scripts in build.linux64ARMv8/squeak.cog.spur. I need to know if the dual mapping scheme is needed on other 64-bit distros. So can you take a look, try both variants and report back? The allocation of the code zone and it’s remapping is done via mmap calls in platforms/unix/vm/sqUnixSpurMemory.c. I have a small C test file that I used to experiment with copying a function into mmapped executable memory that I can post if you need to investigate why mmap might refuse to map write+execute and try and evade the restrictions it imposes. _,,,^..^,,,_ (phone) > On Oct 29, 2020, at 3:29 AM, K K Subbu wrote: > > On 29/10/20 4:52 am, tim Rowledge wrote: >> There*is* a 64 bit version of Raspberry PI OS that is currently in >> late-beta. That would need a VM from the opensmalltalk-vm⁩ ▸ >> ⁨build.linux32ARMv6⁩ ▸ ⁨squeak.stack.spur⁩ tree and of course a 64 >> bit image. > > Ubuntu released their 64-bit desktop versions for Raspberry Pi 4 just last week: > > https://ubuntu.com/raspberry-pi > > introduction and installation > https://youtu.be/0pT4-RcTERU > > direct link > http://cdimage.ubuntu.com/ubuntu/releases/20.10/release/ > > HTH .. Subbu -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Thu Oct 29 16:47:19 2020 From: tim at rowledge.org (tim Rowledge) Date: Thu, 29 Oct 2020 09:47:19 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: <3d334810-b53c-9677-b213-4ff7ecef2164@gmail.com> References: <750899A3-0407-4D0C-89A4-E88C4384C504@gmail.com> <34747C38-114D-4594-9A88-4E851CA2D87F@rowledge.org> <3d334810-b53c-9677-b213-4ff7ecef2164@gmail.com> Message-ID: <6B8A17B7-08F2-46B6-AF7B-8E151053BDAA@rowledge.org> > On 2020-10-29, at 3:29 AM, K K Subbu wrote: > > On 29/10/20 4:52 am, tim Rowledge wrote: >> There*is* a 64 bit version of Raspberry PI OS that is currently in >> late-beta. That would need a VM from the opensmalltalk-vm⁩ ▸ >> ⁨build.linux32ARMv6⁩ ▸ ⁨squeak.stack.spur⁩ tree and of course a 64 >> bit image. > > Ubuntu released their 64-bit desktop versions for Raspberry Pi 4 just last week: Yeah, I saw that on the Pi forum. The bad news is that it includes that *appalling* UI, one that should never, ever, have seen the light of pixels. And unless there is some core OS difference it will presumably cause the same rtprio problem that the i7 version is causing... tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim A)bort, R)etry, I)nfluence with large hammer. From commits at source.squeak.org Thu Oct 29 18:50:45 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 29 Oct 2020 18:50:45 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2861.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2861.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2861 Author: eem Time: 29 October 2020, 11:50:34.437951 am UUID: fe74d94b-c82c-47d0-8e6d-f2ac85eda597 Ancestors: VMMaker.oscog-eem.2860 Cog: Eliminate ceEnterInterpreterOnReturnFromCogCode and have the ceReturnToInterpreterTrampoline invoke interpret directly, using the same code as ceInvokeInterpret. Do this by moving the setMethod: send into interpret from senders; setMethod: is key because it sets the bytecodeSetSelector to enable multiple bytecode set support, but machine code is (and should remain) ignorant of the details of bytecode set selection in compiled method headers. Simulation: Eliminate teh simulator versions of interpret (too easy to get out of sync with the real versions). Do this by providing stubs for breakpointing and inctrementing of the bytecode count, in the real VMs and have these stubs implemented in teh simulators as they were in their own interpret imlementations. Sista: fix a pseeling rorre. =============== Diff against VMMaker.oscog-eem.2860 =============== Item was added: + ----- Method: CoInterpreter>>aboutToDispatchBytecode (in category 'interpreter shell') ----- + aboutToDispatchBytecode + "This is a hook for the simulator; null in production" + ! Item was removed: - ----- Method: CoInterpreter>>ceEnterInterpreterOnReturnFromCogCode (in category 'trampolines') ----- - ceEnterInterpreterOnReturnFromCogCode - "Perform a return from a machine code frame to an interpreted frame. - The machine code has executed a return instruction when the return address - is set to ceReturnToInterpreterPC. Push the result and call interpret." - - self assert: (objectMemory addressCouldBeOop: self stackTop). - self deny: (self isMachineCodeFrame: framePointer). - self setMethod: (self iframeMethod: framePointer). - instructionPointer := self iframeSavedIP: framePointer. - self assertValidExecutionPointe: instructionPointer r: framePointer s: stackPointer imbar: true line: #'__LINE__'. - cogit ceInvokeInterpret. - "NOTREACHED" - ^nil! Item was changed: ----- Method: CoInterpreter>>enterSmalltalkExecutiveImplementation (in category 'initialization') ----- enterSmalltalkExecutiveImplementation "Main entry-point into the interpreter at each execution level, where an execution level is either the start of execution or reentry for a callback. Capture the C stack pointers so that calls from machine-code into the C run-time occur at this level. This is the actual implementation, separated from enterSmalltalkExecutive so the simulator can wrap it in an exception handler and hence simulate the setjmp/longjmp." cogit assertCStackWellAligned. cogit ceCaptureCStackPointers. (self isMachineCodeFrame: framePointer) ifTrue: [self returnToExecutive: false postContextSwitch: true "NOTREACHED"]. - self setMethod: (self iframeMethod: framePointer). - instructionPointer = cogit ceReturnToInterpreterPC ifTrue: - [instructionPointer := self iframeSavedIP: framePointer]. - self assertValidExecutionPointe: instructionPointer r: framePointer s: stackPointer imbar: true line: #'__LINE__'. self interpret. ^0! Item was changed: ----- Method: CoInterpreter>>interpret (in category 'interpreter shell') ----- interpret "This is the main interpreter loop. In a pure interpreter it loops forever, fetching and executing bytecodes. With the Cogit JIT executing code as well, the interpreter is reentered from machine code whenever the machine code wants to interpret a method instead of executing its machine code. Entry into the interpreter is done via a ''jump call'' in machine code that uses CFramePointer and CStackPointer to find the base of the C stack (set in CoInterpreter>> enterSmalltalkExecutiveImplementation) and substitutes CReturnAddress as the return address in the code so it always appears that interpret has been called from CoInterpreter>>enterSmalltalkExecutiveImplementation, which may be important to, for example, C exception handling inside the VM. When running in the context of a browser plugin VM the interpreter must return control to the browser periodically. This should done only when the state of the currently running Squeak thread is safely stored in the object heap. Since this is the case at the moment that a check for interrupts is performed, that is when we return to the browser if it is time to do so. Interrupt checks happen quite frequently." "If stacklimit is zero then the stack pages have not been initialized." stackLimit = 0 ifTrue: [^self initStackPagesAndInterpret]. "An unchecked write is probably faster, so instead of CReturnAddress ifNil: [CReturnAddress := self cCoerceSimple: self getReturnAddress to: #usqIntptr_t] we have simply" self assert: (CReturnAddress isNil or: [CReturnAddress = (self cCoerceSimple: self getReturnAddress to: #usqIntptr_t)]). CReturnAddress := self cCoerceSimple: self getReturnAddress to: #usqIntptr_t. + + self useCogitBreakBlockIfNone. "record entry time when running as a browser plug-in" self browserPluginInitialiseIfNeeded. + self setMethod: (self iframeMethod: framePointer). + self deny: instructionPointer = cogit ceReturnToInterpreterPC. + self assertValidExecutionPointe: instructionPointer r: framePointer s: stackPointer imbar: true line: #'__LINE__'. self internalizeIPandSP. self initExtensions. self fetchNextBytecode. + [true] whileTrue: + [self aboutToDispatchBytecode. + self dispatchOn: currentBytecode in: BytecodeTable]. - [true] whileTrue: [self dispatchOn: currentBytecode in: BytecodeTable]. localIP := localIP - 1. "undo the pre-increment of IP before returning" self externalizeIPandSP. ^nil! Item was added: + ----- Method: CoInterpreter>>useCogitBreakBlockIfNone (in category 'interpreter shell') ----- + useCogitBreakBlockIfNone + "This is a hook for the simulator; null in production" + ! Item was added: + ----- Method: CogVMSimulator>>aboutToDispatchBytecode (in category 'interpreter shell') ----- + aboutToDispatchBytecode + self incrementByteCount. + self assertValidExecutionPointers. + atEachStepBlock value "N.B. may be nil"! Item was removed: - ----- Method: CogVMSimulator>>interpret (in category 'interpreter shell') ----- - interpret - "This is the main interpreter loop. It normally loops forever, fetching and executing bytecodes. - When running in the context of a web browser plugin VM, however, it must return control to the - web browser periodically. This should done only when the state of the currently running Squeak - thread is safely stored in the object heap. Since this is the case at the moment that a check for - interrupts is performed, that is when we return to the browser if it is time to do so. Interrupt - checks happen quite frequently. - - Override for simulation to insert bytecode breakpoint support." - - "If stacklimit is zero then the stack pages have not been initialized." - stackLimit = 0 ifTrue: - [^self initStackPagesAndInterpret]. - - "An unchecked write is probably faster, so instead of - CReturnAddress ifNil: - [CReturnAddress := self cCoerceSimple: self getReturnAddress to: #usqIntptr_t] - we have simply" - self assert: (CReturnAddress isNil or: [CReturnAddress = self getReturnAddress]). - CReturnAddress := self cCoerceSimple: self getReturnAddress to: #usqIntptr_t. - - self useCogitBreakBlockIfNone. - "record entry time when running as a browser plug-in" - self browserPluginInitialiseIfNeeded. - self internalizeIPandSP. - self initExtensions. - self fetchNextBytecode. - [true] whileTrue: - [self assertValidExecutionPointers. - atEachStepBlock value. "N.B. may be nil" - self dispatchOn: currentBytecode in: BytecodeTable. - self incrementByteCount]. - localIP := localIP - 1. "undo the pre-increment of IP before returning" - self externalizeIPandSP. - ^nil - ! Item was changed: ----- Method: Cogit>>genReturnToInterpreterTrampoline (in category 'initialization') ----- genReturnToInterpreterTrampoline + | startAddress | + + startAddress := methodZoneBase. self zeroOpcodeIndex. + "Push the result, set the instruction pointer to the interpreter frame's saved ip, + set the method and the bytecode set offset, then call interpret." - "Set the instruction pointer to the interpreter frame's saved ip, set the method and the bytecode set offset, - then call interpret." self PushR: ReceiverResultReg. "The result" + "Assign the iframeSavedIP to instructionPointer" + self MoveMw: FoxIFSavedIP r: FPReg R: TempReg. + self MoveR: TempReg Aw: coInterpreter instructionPointerAddress. + self genSmalltalkToCStackSwitch: false "pushLinkReg". + cFramePointerInUse + ifTrue: [backEnd genLoadCStackPointers] + ifFalse: [backEnd genLoadCStackPointer]. + "Sideways call interpret so that the stack looks correct, for exception handling etc" + backEnd genMarshallNArgs: 0 arg: nil arg: nil arg: nil arg: nil. + backEnd hasLinkRegister + ifTrue: + [self MoveAw: coInterpreter cReturnAddressAddress R: LinkReg] + ifFalse: + [self MoveAw: coInterpreter cReturnAddressAddress R: ABIResultReg. + backEnd genSubstituteReturnAddressR: ABIResultReg]. + self JumpFullRT: (self + cCode: [#interpret asUnsignedInteger] + inSmalltalk: [self simulatedTrampolineFor: #interpret]). + self outputInstructionsForGeneratedRuntimeAt: startAddress. + self recordGeneratedRunTime: 'ceReturnToInterpreterTrampoline' address: startAddress. + ^self cCoerceSimple: startAddress to: #'void (*)(void)'! - ^self genTrampolineFor: #ceEnterInterpreterOnReturnFromCogCode - called: 'ceEnterInterpreterOnReturnFromCogCode' - numArgs: 0 arg: nil arg: nil arg: nil arg: nil - regsToSave: self emptyRegisterMask - pushLinkReg: false - resultReg: NoReg - appendOpcodes: true! Item was changed: ----- Method: StackInterpreter class>>initializeBytecodeTableForSistaV1 (in category 'initialization') ----- initializeBytecodeTableForSistaV1 "See e.g. the cass comment for EncoderForSistaV1" "StackInterpreter initializeBytecodeTableForSistaV1" "Note: This table will be used to generate a C switch statement." InitializationOptions at: #SistaV1BytecodeSet put: (SistaV1BytecodeSet := true). BytecodeTable := Array new: 256. BytecodeEncoderClassName := #EncoderForSistaV1. BytecodeSetHasDirectedSuperSend := true. BytecodeSetHasExtensions := true. LongStoreBytecode := 245. self table: BytecodeTable from: #( "1 byte bytecodes" ( 0 15 pushReceiverVariableBytecode) ( 16 31 pushLiteralVariable16CasesBytecode) ( 32 63 pushLiteralConstantBytecode) ( 64 75 pushTemporaryVariableBytecode) ( 76 pushReceiverBytecode) ( 77 pushConstantTrueBytecode) ( 78 pushConstantFalseBytecode) ( 79 pushConstantNilBytecode) ( 80 pushConstantZeroBytecode) ( 81 pushConstantOneBytecode) ( 82 extPushPseudoVariable) ( 83 duplicateTopBytecode) ( 84 87 unknownBytecode) ( 88 returnReceiver) ( 89 returnTrue) ( 90 returnFalse) ( 91 returnNil) ( 92 returnTopFromMethod) ( 93 returnNilFromBlock) ( 94 returnTopFromBlock) ( 95 extNopBytecode) ( 96 bytecodePrimAdd) ( 97 bytecodePrimSubtract) ( 98 bytecodePrimLessThanSistaV1) "for booleanCheatSistaV1:" ( 99 bytecodePrimGreaterThanSistaV1) "for booleanCheatSistaV1:" (100 bytecodePrimLessOrEqualSistaV1) "for booleanCheatSistaV1:" (101 bytecodePrimGreaterOrEqualSistaV1) "for booleanCheatSistaV1:" (102 bytecodePrimEqualSistaV1) "for booleanCheatSistaV1:" (103 bytecodePrimNotEqualSistaV1) "for booleanCheatSistaV1:" (104 bytecodePrimMultiply) (105 bytecodePrimDivide) (106 bytecodePrimMod) (107 bytecodePrimMakePoint) (108 bytecodePrimBitShift) (109 bytecodePrimDiv) (110 bytecodePrimBitAnd) (111 bytecodePrimBitOr) (112 bytecodePrimAt) (113 bytecodePrimAtPut) (114 bytecodePrimSize) (115 bytecodePrimNext) "i.e. a 0 arg special selector" (116 bytecodePrimNextPut) "i.e. a 1 arg special selector" (117 bytecodePrimAtEnd) (118 bytecodePrimIdenticalSistaV1) "for booleanCheatSistaV1:" (119 bytecodePrimClass) (120 bytecodePrimNotIdenticalSistaV1) "was blockCopy:" (121 bytecodePrimValue) (122 bytecodePrimValueWithArg) (123 bytecodePrimDo) "i.e. a 1 arg special selector" (124 bytecodePrimNew) "i.e. a 0 arg special selector" (125 bytecodePrimNewWithArg) "i.e. a 1 arg special selector" (126 bytecodePrimPointX) "i.e. a 0 arg special selector" (127 bytecodePrimPointY) "i.e. a 0 arg special selector" (128 143 sendLiteralSelector0ArgsBytecode) (144 159 sendLiteralSelector1ArgBytecode) (160 175 sendLiteralSelector2ArgsBytecode) (176 183 shortUnconditionalJump) (184 191 shortConditionalJumpTrue) (192 199 shortConditionalJumpFalse) (200 207 storeAndPopReceiverVariableBytecode) (208 215 storeAndPopTemporaryVariableBytecode) (216 popStackBytecode) + (217 unconditionalTrapBytecode) - (217 unconditionnalTrapBytecode) (218 223 unknownBytecode) "2 byte bytecodes" (224 extABytecode) (225 extBBytecode) (226 extPushReceiverVariableBytecode) (227 extPushLiteralVariableBytecode) (228 extPushLiteralBytecode) (229 longPushTemporaryVariableBytecode) (230 unknownBytecode) (231 pushNewArrayBytecode) (232 extPushIntegerBytecode) (233 extPushCharacterBytecode) (234 extSendBytecode) (235 extSendSuperBytecode) (236 callMappedInlinedPrimitive) (237 extUnconditionalJump) (238 extJumpIfTrue) (239 extJumpIfFalse) (240 extStoreAndPopReceiverVariableBytecode) (241 extStoreAndPopLiteralVariableBytecode) (242 longStoreAndPopTemporaryVariableBytecode) (243 extStoreReceiverVariableBytecode) (244 extStoreLiteralVariableBytecode) (245 longStoreTemporaryVariableBytecode) (246 247 unknownBytecode) "3 byte bytecodes" (248 callPrimitiveBytecode) (249 extPushFullClosureBytecode) (250 extPushClosureBytecode) (251 pushRemoteTempLongBytecode) (252 storeRemoteTempLongBytecode) (253 storeAndPopRemoteTempLongBytecode) (254 255 unknownBytecode) )! Item was added: + ----- Method: StackInterpreter>>aboutToDispatchBytecode (in category 'interpreter shell') ----- + aboutToDispatchBytecode + "This is a hook for the simulator; null in production" + ! Item was changed: ----- Method: StackInterpreter>>enterSmalltalkExecutiveImplementation (in category 'initialization') ----- enterSmalltalkExecutiveImplementation "Main entry-point into the interpreter at each execution level, where an execution level is either the start of execution or reentry for a callback. This is the actual implementation, separated from enterSmalltalkExecutive so the simulator can wrap it in an exception handler and hence simulate the setjmp/longjmp." "Setjmp for reentry into interpreter from elsewhere, e.g. FFI exception primitive failure." self _setjmp: reenterInterpreter. - self setMethod: (self frameMethod: framePointer). - self assertValidExecutionPointe: instructionPointer r: framePointer s: stackPointer imbar: true line: #'__LINE__'. self interpret. ^0! Item was changed: ----- Method: StackInterpreter>>interpret (in category 'interpreter shell') ----- interpret "This is the main interpreter loop. It normally loops forever, fetching and executing bytecodes. When running in the context of a browser plugin VM, however, it must return control to the browser periodically. This should done only when the state of the currently running Squeak thread is safely stored in the object heap. Since this is the case at the moment that a check for interrupts is performed, that is when we return to the browser if it is time to do so. Interrupt checks happen quite frequently." "If stacklimit is zero then the stack pages have not been initialized." stackLimit = 0 ifTrue: [^self initStackPagesAndInterpret]. "record entry time when running as a browser plug-in" self browserPluginInitialiseIfNeeded. + self setMethod: (self frameMethod: framePointer). + self assertValidExecutionPointe: instructionPointer r: framePointer s: stackPointer imbar: true line: #'__LINE__'. self internalizeIPandSP. self initExtensions. self fetchNextBytecode. + [true] whileTrue: + [self aboutToDispatchBytecode. + self dispatchOn: currentBytecode in: BytecodeTable]. - [true] whileTrue: [self dispatchOn: currentBytecode in: BytecodeTable]. localIP := localIP - 1. "undo the pre-increment of IP before returning" self externalizeIPandSP. + ^nil! - ^nil - ! Item was changed: ----- Method: StackInterpreter>>respondToSistaTrap (in category 'sista bytecodes') ----- respondToSistaTrap | ourContext | + - messageSelector := objectMemory splObj: SelectorSistaTrap. ourContext := self ensureFrameIsMarried: localFP SP: localSP. self internalPush: ourContext. argumentCount := 0. self normalSend! Item was added: + ----- Method: StackInterpreter>>unconditionalTrapBytecode (in category 'sista bytecodes') ----- + unconditionalTrapBytecode + "SistaV1: * 217 Trap" + SistaVM + ifTrue: [^self respondToSistaTrap] + ifFalse: [^self respondToUnknownBytecode]! Item was removed: - ----- Method: StackInterpreter>>unconditionnalTrapBytecode (in category 'sista bytecodes') ----- - unconditionnalTrapBytecode - "SistaV1: * 217 Trap" - SistaVM - ifTrue: [^self respondToSistaTrap] - ifFalse: [^self respondToUnknownBytecode]! Item was added: + ----- Method: StackInterpreterSimulator>>aboutToDispatchBytecode (in category 'interpreter shell') ----- + aboutToDispatchBytecode + self incrementByteCount. + self assertValidExecutionPointers. + atEachStepBlock value "N.B. may be nil"! Item was removed: - ----- Method: StackInterpreterSimulator>>interpret (in category 'interpreter shell') ----- - interpret - "This is the main interpreter loop. It normally loops forever, fetching and executing bytecodes. - When running in the context of a web browser plugin VM, however, it must return control to the - web browser periodically. This should done only when the state of the currently running Squeak - thread is safely stored in the object heap. Since this is the case at the moment that a check for - interrupts is performed, that is when we return to the browser if it is time to do so. Interrupt - checks happen quite frequently. - - Override for simulation to insert bytecode breakpoint support." - - - "If stacklimit is zero then the stack pages have not been initialized." - stackLimit = 0 ifTrue: - [^self initStackPagesAndInterpret]. - "record entry time when running as a browser plug-in" - self browserPluginInitialiseIfNeeded. - self internalizeIPandSP. - self initExtensions. - self fetchNextBytecode. - [true] whileTrue: - [self assertValidExecutionPointers. - atEachStepBlock value. "N.B. may be nil" - self dispatchOn: currentBytecode in: BytecodeTable. - self incrementByteCount]. - localIP := localIP - 1. "undo the pre-increment of IP before returning" - self externalizeIPandSP. - ^nil! From builds at travis-ci.org Thu Oct 29 20:28:13 2020 From: builds at travis-ci.org (Travis CI) Date: Thu, 29 Oct 2020 20:28:13 +0000 Subject: [Vm-dev] Canceled: OpenSmalltalk/opensmalltalk-vm#2288 (Cog - 6477267) In-Reply-To: Message-ID: <5f9b25dd9dd3_13f90e52c32dc70710@travis-tasks-675444c6cf-rwkh8.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2288 Status: Canceled Duration: 6 mins and 49 secs Commit: 6477267 (Cog) Author: Eliot Miranda Message: ProcessorSimulator plugins as per Cog-eem.418 IA32ABI plugin as per VMMaker.oscog-eem.2857 Add the offset version of the run/step primitives which allow simulation of the simulator. IA32ABI: make most of the simple acessors simulate. This makes it possible to simulate the simulator ;-) Slang: generate neater code for pointer indirection. Instead of indexing with zero, dereference with *. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/b223cd542dc6...64772676b662 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/739693912?utm_medium=notification&utm_source=email Restart your build: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/739693912?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Thu Oct 29 21:12:41 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 29 Oct 2020 21:12:41 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2862.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2862.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2862 Author: eem Time: 29 October 2020, 2:12:30.601633 pm UUID: a30f9d13-a2a4-415a-982c-898cc5b69848 Ancestors: VMMaker.oscog-eem.2861 Cogit: eliminate diplication in the new genReturnToInterpreterTrampoline. Revise deriving the varBaseAddress after finding on MacOS that the linker may not "follow orders". So take the minimum of several likely addresses, secretly hoping the minimum is something like stackLimit, which likely has the highest dynamic frequency (well done clang). =============== Diff against VMMaker.oscog-eem.2861 =============== Item was changed: ----- Method: CogX64Compiler>>concretizeMoveRAw (in category 'generate machine code - concretize') ----- concretizeMoveRAw "Will get inlined into concretizeAt: switch." | addressOperand reg offset save1 savedSize | reg := operands at: 0. addressOperand := operands at: 1. (self isAnInstruction: (cogit cCoerceSimple: addressOperand to: #'AbstractInstruction *')) ifTrue: [addressOperand := (cogit cCoerceSimple: addressOperand to: #'AbstractInstruction *') address]. (self isAddressRelativeToVarBase: addressOperand) ifTrue: [save1 := operands at: 1. operands at: 1 put: addressOperand - cogit varBaseAddress; at: 2 put: RBX. savedSize := self concretizeMoveRMwr. operands at: 1 put: save1; at: 2 put: 0. ^savedSize]. "If storing RAX, store directly, otherwise, because of instruction encoding limitations, the register _must_ be stored through RAX. If reg = RBP or RSP simply store directly, otherwise swap RAX with + the register before and after the store through RAX. We avoid swapping before hand with RBP - the register before and after the store through RAX. We avoid sweapping before hand with RBP and RSP because setting RSP to whatever the contents of RAX is can cause disastrous results if an interrupt is delivered immediately after that point. See mail threads beginning with http://lists.squeakfoundation.org/pipermail/vm-dev/2019-September/031428.html http://lists.squeakfoundation.org/pipermail/vm-dev/2019-October/031499.html" (reg = RAX or: [reg = RBP or: [reg = RSP]]) ifTrue: [offset := 0] ifFalse: [(reg = RBP or: [reg = RSP]) ifTrue: [machineCode at: 0 put: (self rexR: reg x: 0 b: RAX); at: 1 put: 16r89; at: 2 put: (self mod: ModReg RM: RAX RO: reg). offset := 3] ifFalse: [machineCode at: 0 put: (self rexR: RAX x: 0 b: reg); at: 1 put: 16r90 + (reg \\ 8). offset := 2]]. machineCode at: 0 + offset put: 16r48; at: 1 + offset put: 16rA3; at: 2 + offset put: (addressOperand bitAnd: 16rFF); at: 3 + offset put: (addressOperand >> 8 bitAnd: 16rFF); at: 4 + offset put: (addressOperand >> 16 bitAnd: 16rFF); at: 5 + offset put: (addressOperand >> 24 bitAnd: 16rFF); at: 6 + offset put: (addressOperand >> 32 bitAnd: 16rFF); at: 7 + offset put: (addressOperand >> 40 bitAnd: 16rFF); at: 8 + offset put: (addressOperand >> 48 bitAnd: 16rFF); at: 9 + offset put: (addressOperand >> 56 bitAnd: 16rFF). reg = RAX ifTrue: [^10]. (reg = RBP or: [reg = RSP]) ifTrue: [^13]. "Now effect the assignment via xchg, which restores RAX" machineCode at: 12 put: (machineCode at: 0); at: 13 put: (machineCode at: 1). ^14! Item was changed: CogClass subclass: #Cogit (excessive size, no diff calculated) Item was added: + ----- Method: Cogit>>computeGoodVarBaseAddress (in category 'initialization') ----- + computeGoodVarBaseAddress + "While we order variables in the CoInterpreter in order of dynamic frequency, and hence + expect that stackPointer will be output first, C optimizers and linkers may get their own + ideas and ``improve upon'' this ordering. So we cannot depend on stackPointer being + at the lowest address of the variables we want to access through VarBaseReg. Here we + choose the minimum amongst a set to try to choose a varBaseAddress that is just less + than but iwht in range of all variables we want to access through it." + | minAddress | + minAddress := coInterpreter stackLimitAddress. "stackLimit is e.g. lowest using the clang toolchain on MacOS X" + coInterpreter stackPointerAddress < minAddress ifTrue: + [minAddress := coInterpreter stackPointerAddress]. + coInterpreter framePointerAddress < minAddress ifTrue: + [minAddress := coInterpreter framePointerAddress]. + coInterpreter instructionPointerAddress < minAddress ifTrue: + [minAddress := coInterpreter instructionPointerAddress]. + coInterpreter argumentCountAddress < minAddress ifTrue: + [minAddress := coInterpreter argumentCountAddress]. + coInterpreter primFailCodeAddress < minAddress ifTrue: + [minAddress := coInterpreter primFailCodeAddress]. + ^minAddress! Item was changed: ----- Method: Cogit>>genReturnToInterpreterTrampoline (in category 'initialization') ----- genReturnToInterpreterTrampoline | startAddress | startAddress := methodZoneBase. self zeroOpcodeIndex. "Push the result, set the instruction pointer to the interpreter frame's saved ip, set the method and the bytecode set offset, then call interpret." self PushR: ReceiverResultReg. "The result" "Assign the iframeSavedIP to instructionPointer" self MoveMw: FoxIFSavedIP r: FPReg R: TempReg. self MoveR: TempReg Aw: coInterpreter instructionPointerAddress. self genSmalltalkToCStackSwitch: false "pushLinkReg". - cFramePointerInUse - ifTrue: [backEnd genLoadCStackPointers] - ifFalse: [backEnd genLoadCStackPointer]. "Sideways call interpret so that the stack looks correct, for exception handling etc" backEnd genMarshallNArgs: 0 arg: nil arg: nil arg: nil arg: nil. backEnd hasLinkRegister ifTrue: [self MoveAw: coInterpreter cReturnAddressAddress R: LinkReg] ifFalse: [self MoveAw: coInterpreter cReturnAddressAddress R: ABIResultReg. backEnd genSubstituteReturnAddressR: ABIResultReg]. self JumpFullRT: (self cCode: [#interpret asUnsignedInteger] inSmalltalk: [self simulatedTrampolineFor: #interpret]). self outputInstructionsForGeneratedRuntimeAt: startAddress. self recordGeneratedRunTime: 'ceReturnToInterpreterTrampoline' address: startAddress. + ^startAddress! - ^self cCoerceSimple: startAddress to: #'void (*)(void)'! Item was changed: ----- Method: Cogit>>initializeBackend (in category 'initialization') ----- initializeBackend methodLabel machineCodeSize: 0. methodLabel opcode: Label. methodLabel operands at: 0 put: 0. methodLabel operands at: 1 put: 0. "label offset" backEnd hasVarBaseRegister ifTrue: + [self assert: ((self registerMaskFor: VarBaseReg) noMask: CallerSavedRegisterMask). + varBaseAddress := self computeGoodVarBaseAddress. + self assert: coInterpreter stackLimitAddress >= varBaseAddress. + self assert: coInterpreter cStackPointerAddress >= varBaseAddress. + self assert: coInterpreter cFramePointerAddress >= varBaseAddress. + self assert: coInterpreter cReturnAddressAddress >= varBaseAddress. + self assert: coInterpreter nextProfileTickAddress >= varBaseAddress]. - [self assert: ((self registerMaskFor: VarBaseReg) noMask: CallerSavedRegisterMask)]. literalsManager allocateLiterals: 4; resetLiterals! Item was changed: ----- Method: Cogit>>varBaseAddress (in category 'accessing') ----- varBaseAddress + + ^varBaseAddress! - ^coInterpreter stackPointerAddress - objectMemory wordSize! From noreply at github.com Thu Oct 29 21:49:13 2020 From: noreply at github.com (Eliot Miranda) Date: Thu, 29 Oct 2020 14:49:13 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] c14b71: CogVM source as per Name: VMMaker.oscog-eem.2862 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: c14b7173411680b35353844aa619d0b091d10e13 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/c14b7173411680b35353844aa619d0b091d10e13 Author: Eliot Miranda Date: 2020-10-29 (Thu, 29 Oct 2020) Changed paths: M build.macos64x64/bochsx64/exploration/Makefile M nsspur64src/vm/cogit.h M nsspur64src/vm/cogitARMv8.c M nsspur64src/vm/cogitX64SysV.c M nsspur64src/vm/cogitX64WIN64.c M nsspur64src/vm/cointerp.c M nsspur64src/vm/cointerp.h M nsspur64src/vm/gcc3x-cointerp.c M nsspur64src/vm/vmCallback.h M nsspursrc/vm/cogit.h M nsspursrc/vm/cogitARMv5.c M nsspursrc/vm/cogitIA32.c M nsspursrc/vm/cogitMIPSEL.c M nsspursrc/vm/cointerp.c M nsspursrc/vm/cointerp.h M nsspursrc/vm/gcc3x-cointerp.c M nsspursrc/vm/vmCallback.h M nsspurstack64src/vm/gcc3x-interp.c M nsspurstack64src/vm/interp.c M nsspurstack64src/vm/vmCallback.h M nsspurstacksrc/vm/gcc3x-interp.c M nsspurstacksrc/vm/interp.c M nsspurstacksrc/vm/vmCallback.h M platforms/iOS/vm/OSX/sqPlatformSpecific.h M processors/IA32/bochs/explorationx64/printcpu.c M processors/IA32/bochs/explorationx64/printcpucr.c M processors/IA32/bochs/explorationx64/printcpuxmm.c M scripts/gitrevert M spur64src/vm/cogit.h M spur64src/vm/cogitARMv8.c M spur64src/vm/cogitX64SysV.c M spur64src/vm/cogitX64WIN64.c M spur64src/vm/cointerp.c M spur64src/vm/cointerp.h M spur64src/vm/cointerpmt.c M spur64src/vm/cointerpmt.h M spur64src/vm/gcc3x-cointerp.c M spur64src/vm/gcc3x-cointerpmt.c M spur64src/vm/vmCallback.h M spurlowcode64src/vm/cogit.h M spurlowcode64src/vm/cogitARMv8.c M spurlowcode64src/vm/cogitX64SysV.c M spurlowcode64src/vm/cogitX64WIN64.c M spurlowcode64src/vm/cointerp.c M spurlowcode64src/vm/cointerp.h M spurlowcode64src/vm/gcc3x-cointerp.c M spurlowcode64src/vm/vmCallback.h M spurlowcodesrc/vm/cogit.h M spurlowcodesrc/vm/cogitARMv5.c M spurlowcodesrc/vm/cogitIA32.c M spurlowcodesrc/vm/cogitMIPSEL.c M spurlowcodesrc/vm/cointerp.c M spurlowcodesrc/vm/cointerp.h M spurlowcodesrc/vm/gcc3x-cointerp.c M spurlowcodesrc/vm/vmCallback.h M spurlowcodestack64src/vm/gcc3x-interp.c M spurlowcodestack64src/vm/interp.c M spurlowcodestack64src/vm/vmCallback.h M spurlowcodestacksrc/vm/gcc3x-interp.c M spurlowcodestacksrc/vm/interp.c M spurlowcodestacksrc/vm/vmCallback.h M spursista64src/vm/cogit.h M spursista64src/vm/cogitARMv8.c M spursista64src/vm/cogitX64SysV.c M spursista64src/vm/cogitX64WIN64.c M spursista64src/vm/cointerp.c M spursista64src/vm/cointerp.h M spursista64src/vm/gcc3x-cointerp.c M spursista64src/vm/vmCallback.h M spursistasrc/vm/cogit.h M spursistasrc/vm/cogitARMv5.c M spursistasrc/vm/cogitIA32.c M spursistasrc/vm/cogitMIPSEL.c M spursistasrc/vm/cointerp.c M spursistasrc/vm/cointerp.h M spursistasrc/vm/gcc3x-cointerp.c M spursistasrc/vm/vmCallback.h M spursrc/vm/cogit.h M spursrc/vm/cogitARMv5.c M spursrc/vm/cogitIA32.c M spursrc/vm/cogitMIPSEL.c M spursrc/vm/cointerp.c M spursrc/vm/cointerp.h M spursrc/vm/cointerpmt.c M spursrc/vm/cointerpmt.h M spursrc/vm/gcc3x-cointerp.c M spursrc/vm/gcc3x-cointerpmt.c M spursrc/vm/vmCallback.h M spurstack64src/vm/gcc3x-interp.c M spurstack64src/vm/interp.c M spurstack64src/vm/validImage.c M spurstack64src/vm/vmCallback.h M spurstacksrc/vm/gcc3x-interp.c M spurstacksrc/vm/interp.c M spurstacksrc/vm/validImage.c M spurstacksrc/vm/vmCallback.h M src/plugins/B2DPlugin/B2DPlugin.c M src/plugins/FilePlugin/FilePlugin.c M src/plugins/SocketPlugin/SocketPlugin.c M src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c M src/plugins/SqueakFFIPrims/ARM64FFIPlugin.c M src/plugins/SqueakFFIPrims/IA32FFIPlugin.c M src/plugins/SqueakFFIPrims/X64SysVFFIPlugin.c M src/plugins/SqueakFFIPrims/X64Win64FFIPlugin.c M src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c M src/vm/cogit.h M src/vm/cogitARMv5.c M src/vm/cogitIA32.c M src/vm/cogitMIPSEL.c M src/vm/cointerp.c M src/vm/cointerp.h M src/vm/cointerpmt.c M src/vm/cointerpmt.h M src/vm/gcc3x-cointerp.c M src/vm/gcc3x-cointerpmt.c M src/vm/vmCallback.h M stacksrc/vm/gcc3x-interp.c M stacksrc/vm/interp.c M stacksrc/vm/vmCallback.h Log Message: ----------- CogVM source as per Name: VMMaker.oscog-eem.2862 Cogit: Revise deriving the varBaseAddress after finding on MacOS that the linker may not "follow orders". So take the minimum of several likely addresses, secretly hoping the minimum is something like stackLimit, which likely has the highest dynamic frequency (well done clang). Eliminate ceEnterInterpreterOnReturnFromCogCode and have the ceReturnToInterpreterTrampoline invoke interpret directly, using the same code as ceInvokeInterpret. Do this by moving the setMethod: send into interpret from senders; setMethod: is key because it sets the bytecodeSetSelector to enable multiple bytecode set support, but machine code is (and should remain) ignorant of the details of bytecode set selection in compiled method headers. cogitARMv8.c Add __ARM_ARCH >= 8 to cogit.c's ARMv8 identifying macros. CoInterpreterMT: Get rid of vmOwnerLock; what a bogus idea. Just use CAS on vmOwner as God (DS) intended. Fix a bug in CoInterpreterMT>>wakeHighestPriority. Refactor ABI callout marshalling on X64 to use the same CArg0Reg thru CArg3Reg pattern as on ARMv8. Make CPUID the first processor specific opcode on Intel. Eliminate use of reenterInterpreter, this is StackInterpreter only now. FilePlugin: Add FilePlugin>>primitiveFileReadPinningAndDisowning, for file read in COGMTVM. Use methodReturnInteger: rather than methodReturnValue: ... integerObjectOf:: Slang: generate neater code for pointer indirection. Instead of indexing with zero, dereference with *. Eliminate a space in function type printing. From squeak-dev-noreply at lists.squeakfoundation.org Thu Oct 29 22:42:57 2020 From: squeak-dev-noreply at lists.squeakfoundation.org (squeak-dev-noreply at lists.squeakfoundation.org) Date: Thu, 29 Oct 2020 22:42:57 0000 Subject: [Vm-dev] OSProcessPlugin: VMConstruction-Plugins-OSProcessPlugin.oscog-eem.71.mcz Message-ID: Eliot Miranda uploaded a new version of VMConstruction-Plugins-OSProcessPlugin to project OSProcessPlugin: http://www.squeaksource.com/OSProcessPlugin/VMConstruction-Plugins-OSProcessPlugin.oscog-eem.71.mcz ==================== Summary ==================== Name: VMConstruction-Plugins-OSProcessPlugin.oscog-eem.71 Author: eem Time: 29 October 2020, 3:42:55.794304 pm UUID: f543fca0-f9e8-49e3-9ab3-d7839df6378a Ancestors: VMConstruction-Plugins-OSProcessPlugin.oscog-eem.70 Fix a slip in the last commit. From noreply at github.com Thu Oct 29 22:44:58 2020 From: noreply at github.com (Eliot Miranda) Date: Thu, 29 Oct 2020 15:44:58 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] f027c5: UnixOSProcessPlugin as per VMConstruction-Plugins-... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: f027c5ce8940e88b9d02db8b7c5c0c2bbec456e8 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f027c5ce8940e88b9d02db8b7c5c0c2bbec456e8 Author: Eliot Miranda Date: 2020-10-29 (Thu, 29 Oct 2020) Changed paths: M src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c Log Message: ----------- UnixOSProcessPlugin as per VMConstruction-Plugins-OSProcessPlugin.oscog-eem.71 Get the UnixOSProcessPlugin to simulate correctly environmentAtAsType:, the innards of primitiveEnvironmentAt[AsBytes] From commits at source.squeak.org Fri Oct 30 01:07:29 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 30 Oct 2020 01:07:29 0000 Subject: [Vm-dev] VM Maker: Cog-eem.422.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.422.mcz ==================== Summary ==================== Name: Cog-eem.422 Author: eem Time: 29 October 2020, 6:07:26.875213 pm UUID: 85b1cd7f-c753-4a65-9100-9f2408ba0f5c Ancestors: Cog-eem.421 Compare-and-swap support for BochsX64Alien =============== Diff against Cog-eem.421 =============== Item was added: + ----- Method: BochsIA32Alien>>abiMarshallArg0: (in category 'accessing-abstract') ----- + abiMarshallArg0: arg0 + "Marshall one integral argument according to the ABI. + Currently used in the COGMTVM to tryLockVMOwner:" + self push: arg0! Item was changed: ----- Method: BochsX64Alien class>>initialize (in category 'class initialization') ----- initialize "BochsX64Alien initialize" | it | it := self basicNew. OpcodeExceptionMap := Array new: 256 withAll: #handleExecutionPrimitiveFailureAt:in:rex:. OpcodeExceptionMap at: 1 + it twoByteEscape put: #handleTwoByteEscapeFailureAt:in:rex:; at: 1 + it operandSizeOverridePrefix put: #handleOperandSizeOverridePrefixFailureAt:in:rex:; at: 1 + it callOpcode put: #handleCallFailureAt:in:rex:; at: 1 + it jmpOpcode put: #handleJmpFailureAt:in:rex:; at: 1 + it retOpcode put: #handleRetFailureAt:in:rex:; at: 1 + it movALObOpcode put: #handleMovALObFailureAt:in:rex:; at: 1 + it movAXOvOpcode put: #handleMovAXOvFailureAt:in:rex:; at: 1 + it movObALOpcode put: #handleMovObALFailureAt:in:rex:; at: 1 + it movOvAXOpcode put: #handleMovOvAXFailureAt:in:rex:; at: 1 + it movGvEvOpcode put: #handleMovGvEvFailureAt:in:rex:; at: 1 + it movEvGvOpcode put: #handleMovEvGvFailureAt:in:rex:; at: 1 + it movGbEbOpcode put: #handleMovGbEbFailureAt:in:rex:; at: 1 + it movEbGbOpcode put: #handleMovEbGbFailureAt:in:rex:; + at: 1 + 16rF0 put: #handleGroup6through10FailureAt:in:rex:; "Table A6 One-Byte and Two-Byte Opcode ModRM Extensions" at: 1 + 16rFE put: #handleGroup4FailureAt:in:rex:; "Table A6 One-Byte and Two-Byte Opcode ModRM Extensions" at: 1 + 16rFF put: #handleGroup5FailureAt:in:rex:. "Table A6 One-Byte and Two-Byte Opcode ModRM Extensions" ExtendedOpcodeExceptionMap := Array new: 256 withAll: #handleExecutionPrimitiveFailureAt:in:rex:. ExtendedOpcodeExceptionMap at: 1 + it movGvEbOpcode put: #handleMovGvEbFailureAt:in:rex:! Item was added: + ----- Method: BochsX64Alien>>abiMarshallArg0: (in category 'accessing-abstract') ----- + abiMarshallArg0: arg0 + "Marshall one integral argument according to the ABI. + Currently used in the COGMTVM to tryLockVMOwner:" + (CogX64Compiler classPool at: #CArg0Reg) = 1 + ifTrue: [self rcx: arg0] "Hack; Win64" + ifFalse: [self rdi: arg0] "Hack; SysV"! Item was changed: ----- Method: BochsX64Alien>>decorateDisassembly:for:fromAddress: (in category 'disassembly') ----- decorateDisassembly: anInstructionString for: aSymbolManager "" fromAddress: address | string i1 i2 v o extra | string := PrintCodeBytes ifTrue: [anInstructionString] ifFalse: [anInstructionString copyFrom: 1 to: (anInstructionString lastIndexOf: $:) - 1]. "trailing space useful for parsing numbers" aSymbolManager relativeBaseForDisassemblyInto: [:baseAddress :baseName| string := baseName, '+', (address - baseAddress printStringBase: 16 length: 4 padded: true), (string copyFrom: (string indexOf: $:) + 1 to: string size)]. ((i1 := string indexOfSubCollection: '%ds:(') > 0 or: [(i1 := string indexOfSubCollection: '%ss:(') > 0]) ifTrue: + [string := string copyReplaceFrom: i1 + to: i1 + 3 + with: ((string copyFrom: i1 to: i1 + 9) = '%ds:(%rbx)' + ifTrue: ['%ds:0x0']"So the next clause finds it..." + ifFalse: [''])]. - [string := string copyReplaceFrom: i1 to: i1 + 3 with: '']. (i1 := string indexOfSubCollection: '%ds:0x') > 0 ifTrue: [i2 := i1 + 6. ['0123456789abcdef' includes: (string at: i2)] whileTrue: [i2 := i2 + 1]. (v := string copyFrom: i2 to: (i2 + 5 min: string size)) = '(%rbx)' ifTrue: + [| i3 | + o := Integer readFrom: (ReadStream on: string from: i1 + 6 to: i2 - 1) base: 16. - [o := Integer readFrom: (ReadStream on: string from: i1 + 6 to: i2 - 1) base: 16. (aSymbolManager lookupAddress: aSymbolManager varBaseAddress + o) ifNotNil: + [:varName| extra := ' = ', varName]. + (i3 := string indexOfSubCollection: '%ds:0x0(%rbx)' startingAt: i1) > 0 ifTrue: + [string := string copyReplaceFrom: i3 to: i3 + 6 with: ''. + i2 := 0]]. - [:varName| extra := ' = ', varName]]. v = '(%rip)' ifTrue: [o := anInstructionString size - (anInstructionString lastIndexOf: $:) - 1 / 3. "Count number of instruction bytes to find size of instruction" o := o + address. "Add address of instruction" o := o + (Integer readFrom: (ReadStream on: string from: i1 + 6 to: i2 - 1) base: 16) signedIntFromLong64. "Add offset to yield pc-relative address" (aSymbolManager lookupAddress: o) ifNotNil: [:methodName| extra := ' = ', methodName]]. v = ReceiverResultRegDereference ifTrue: [o := Integer readFrom: (ReadStream on: string from: i1 + 6 to: i2 - 1) base: 16. (aSymbolManager lookupInstVarOffset: o) ifNotNil: [:varName| string := string copyReplaceFrom: i1 to: i2 - 1 with: varName,'@',o printString. i2 := 0]]. i2 ~= 0 ifTrue: [string := string copyReplaceFrom: i1 to: i2 - 1 with: (aSymbolManager lookupCHexString: (string copyFrom: i1 + 4 to: i2 - 1))]]. (i1 := string indexOfSubCollection: '%ss:0x') > 0 ifTrue: [i2 := i1 + 6. ['0123456789abcdef' includes: (string at: i2)] whileTrue: [i2 := i2 + 1]. ((string at: i2) = $( and: [(string at: i2 + 1) = $%]) ifTrue: [o := Integer readFrom: (ReadStream on: string from: i1 + 6 to: i2 - 1) base: 16. o := (o bitAnd: (1 bitShift: 31) - 1) - (o bitAnd: (1 bitShift: 31)). ((string copyFrom: i2 to: (i2 + 5 min: string size)) = '(%rbp)' and: [PrintTempNames]) ifTrue: [(aSymbolManager lookupFrameOffset: o) ifNotNil: [:varName| string := string copyReplaceFrom: i1 to: i2 - 1 with: varName,'@',o printString. i2 := 0]]. i2 ~= 0 ifTrue: [string := string copyReplaceFrom: i1 to: i2 - 1 with: o printString]]]. (i1 := string indexOfSubCollection: '$0x') > 0 ifTrue: [i2 := i1 + 3. ['0123456789abcdef' includes: (string at: i2)] whileTrue: [i2 := i2 + 1]. string := string copyReplaceFrom: i1 + 1 to: i2 - 1 with: (aSymbolManager lookupCHexString: (string copyFrom: i1 + 1 to: i2 - 1))]. ((i1 := string indexOf: $() > 1 and: [(string at: i1 + 1) isDigit and: [i1 < (i2 := string indexOf: $))]]) ifTrue: [string := string copyReplaceFrom: i1 + 1 to: i2 - 1 with: (aSymbolManager lookupCHexString: (string copyFrom: i1 + 1 to: i2 - 1)). i1 := string indexOfSubCollection: '+0x'. "calls & jumps" i1 > 0 ifTrue: [o := Integer readFrom: (i2 := ReadStream on: string from: i1 + 3 to: string size) base: 16. o := ((o bitAnd: (1 bitShift: 63) - 1) - (o bitAnd: (1 bitShift: 63))) printStringRadix: 16. o := o first = $1 ifTrue: [o copyReplaceFrom: 1 to: 3 with: '+0x'] ifFalse: [o copyReplaceFrom: 2 to: 4 with: '0x']. string := string copyReplaceFrom: i1 to: i2 position with: o]]. ^extra ifNil: [string] ifNotNil: [PrintCodeBytes ifTrue: [i1 := string lastIndexOf: $:. string copyReplaceFrom: i1 - 1 to: i1 - 2 with: extra] ifFalse: [string, ';', extra]]! Item was added: + ----- Method: BochsX64Alien>>handleGroup6through10FailureAt:in:rex: (in category 'error handling') ----- + handleGroup6through10FailureAt: pc "" in: memoryArray "" rex: rexByteOrNil "" + "Convert an execution primitive failure for a group 5 instruction into the relevant ProcessorSimulationTrap signal." + | rexByte modrmByte baseReg srcReg | + (((rexByte := memoryArray byteAt: pc + 2) bitAnd: 16rF8) = self rexPrefix + and: [(memoryArray byteAt: pc + 3) = 16r0F + and: [(memoryArray byteAt: pc + 4) = 16rB1]]) ifTrue: + [modrmByte := memoryArray byteAt: pc + 5. + modrmByte >> 6 = 0 ifTrue: "ModRegInd" + [srcReg := (modrmByte >> 3 bitAnd: 7) + ((rexByte bitAnd: 4) bitShift: 1). + baseReg := (modrmByte bitAnd: 7) + ((rexByte bitAnd: 1) bitShift: 3). + ^(CompareAndSwapSimulationTrap + pc: pc + nextpc: pc + 5 + address: (self perform: (self registerStateGetters at: baseReg + 1)) + type: #write + accessor: (self registerStateSetters at: srcReg + 1)) + expectedValue: self rax; + storedValue: (self perform: (self registerStateGetters at: srcReg + 1)); + signal]]! Item was changed: ----- Method: BochsX64Alien>>handleMovEvGvFailureAt:in:rex: (in category 'error handling') ----- handleMovEvGvFailureAt: pc "" in: memoryArray "" rex: rexByteOrNil "" "Convert an execution primitive failure for a register write into a ProcessorSimulationTrap signal." | modrmByte getter base offset | self assert: rexByteOrNil notNil. modrmByte := memoryArray byteAt: pc + 3. + getter := self registerStateGetters at: (modrmByte >> 3 bitAnd: 7) + ((rexByteOrNil bitAnd: 4) << 1) + 1. - getter := self registerStateGetters at: ((modrmByte >> 3 bitAnd: 7) + ((rexByteOrNil bitAnd: 4) << 1) + 1). (modrmByte bitAnd: 16rC7) = 16r5 ifTrue: "ModRegInd & disp32" [^(ProcessorSimulationTrap pc: pc nextpc: pc + 7 address: (memoryArray unsignedLongAt: pc + 4 bigEndian: false) type: #write accessor: getter) signal]. + (modrmByte bitAnd: 16rC0) = 0 ifTrue: "ModRegInd" + [base := self registerStateGetters at: (modrmByte bitAnd: 7) + ((rexByteOrNil bitAnd: 1) << 3) + 1. + ^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 3 + address: (self perform: base) + type: #write + accessor: getter) + signal]. (modrmByte bitAnd: 16rC0) = 16r80 ifTrue: "ModRegRegDisp32" [offset := memoryArray longAt: pc + 4 bigEndian: false. + base := self registerStateGetters at: (modrmByte bitAnd: 7) + ((rexByteOrNil bitAnd: 1) << 3) + 1. - base := self registerStateGetters at: ((modrmByte bitAnd: 7) + ((rexByteOrNil bitAnd: 1) << 3) + 1). ^(ProcessorSimulationTrap pc: pc nextpc: pc + 7 address: (self perform: base) + offset type: #write accessor: getter) signal]. (modrmByte bitAnd: 16rC0) = 16r40 ifTrue: "ModRegRegDisp8" [offset := memoryArray unsignedByteAt: pc + 4. offset > 127 ifTrue: [offset := offset - 256]. + base := self registerStateGetters at: (modrmByte bitAnd: 7) + ((rexByteOrNil bitAnd: 1) << 3) + 1. - base := self registerStateGetters at: ((modrmByte bitAnd: 7) + ((rexByteOrNil bitAnd: 1) << 3) + 1). ^(ProcessorSimulationTrap pc: pc nextpc: pc + 4 address: (self perform: base) + offset type: #write accessor: getter) signal]. ^self reportPrimitiveFailure! Item was changed: ----- Method: BochsX64Alien>>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]. (sym beginsWith: 'xmm') ifTrue: [aStream nextPutAll: sym; nextPut: $:; space. val printOn: aStream base: 16 length: 16 padded: true. aStream space; nextPut: $(. "At the image level Float is apparently in big-endian format" ((Float basicNew: 2) at: 2 put: (val bitAnd: 16rFFFFFFFF); at: 1 put: (val bitShift: -32); yourself) printOn: aStream. aStream nextPut: $)] ifFalse: [aStream nextPutAll: sym; nextPut: $:; space. val printOn: aStream base: 16 length: 8 padded: true. + #rflags == sym - #eflags == sym ifTrue: [aStream space. 'C-P-A-ZS---O' 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 changed: ----- Method: BochsX64Alien>>rflags (in category 'accessing') ----- rflags + ^self unsignedLongAt: 621! - ^self unsignedLongLongAt: 621! Item was changed: ----- Method: BochsX64Alien>>rflags: (in category 'accessing') ----- rflags: anUnsignedInteger + ^self unsignedLongAt: 621 put: anUnsignedInteger! - ^self unsignedLongLongAt: 621 put: anUnsignedInteger! Item was added: + ----- Method: BochsX64Alien>>setFlagsForCompareAndSwap: (in category 'execution') ----- + setFlagsForCompareAndSwap: aBoolean + "Set ZF to aBoolean" + | flags | + flags := self rflags bitClear: 64. + self rflags: (aBoolean ifTrue: [flags + 64] ifFalse: [flags])! Item was added: + ----- Method: BochsX64Alien64>>prevRip (in category 'accessing') ----- + prevRip + ^self unsignedLongLongAt: 673! Item was added: + ----- Method: BochsX64Alien64>>prevRip: (in category 'accessing') ----- + prevRip: anUnsignedInteger + ^self unsignedLongLongAt: 673 put: anUnsignedInteger! Item was changed: ----- Method: BochsX64Alien64>>rflags (in category 'accessing') ----- rflags + ^self unsignedLongAt: 633! - ^self unsignedLongLongAt: 633! Item was added: + ----- Method: BochsX64Alien64>>rflags: (in category 'accessing') ----- + rflags: anUnsignedInteger + ^self unsignedLongAt: 633 put: anUnsignedInteger! Item was added: + ----- Method: CogProcessorAlien>>setFlagsForCompareAndSwap: (in category 'execution') ----- + setFlagsForCompareAndSwap: aBoolean + "If the processor sets flags in a compare-and-swap instruction, set its flags + according to aBoolean which is true if the compare-and-swap succeeded." + self subclassResponsibility! From commits at source.squeak.org Fri Oct 30 01:11:15 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 30 Oct 2020 01:11:15 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2863.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2863.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2863 Author: eem Time: 29 October 2020, 6:11:02.270516 pm UUID: b8007876-9c01-49e1-90da-6b2059369a5c Ancestors: VMMaker.oscog-eem.2862 Cogit: Make sure stackLimit is the first clustered variable, ticky because it has a pseudonym. Implement flag setting in compare-and-swaps that do so (X64). Correct the range of valid pcs in simulateLeafCallOf:. Remember to pass the argument to ceTryLockVMOwner. Simplify the FakeStdinStream crap, providing line-oriented input. =============== Diff against VMMaker.oscog-eem.2862 =============== Item was changed: ----- Method: CoInterpreter class>>clusteredVariableNames (in category 'translation') ----- clusteredVariableNames "Insist that these variables are present early in the list of variables, and in this order, so that e.g. they are conveniently accessed via the VarBaseReg if it is available." + ^#(stackLimitFromMachineCode "ensures zero offset in simulation" stackLimit "stackLimit is e.g. lowest using the clang toolchain on MacOS X" + stackPointer framePointer CStackPointer CFramePointer CReturnAddress + scavengeThreshold freeStart needGCFlag specialObjectsOop - ^#(stackPointer framePointer CStackPointer CFramePointer CReturnAddress - stackLimit scavengeThreshold freeStart needGCFlag specialObjectsOop primFailCode newMethod instructionPointer argumentCount nextProfileTick nativeSP nativeStackPointer shadowCallStackPointer)! Item was changed: ----- Method: CoInterpreterMT>>ownVM: (in category 'vm scheduling') ----- ownVM: threadIndexAndFlags "This is the entry-point for plugins and primitives that wish to reacquire the VM after having released it via disownVM or callbacks that want to acquire it without knowing their ownership status. This call will block until the VM is owned by the current thread or an error occurs. The argument should be the value answered by disownVM, or 0 for callbacks that don't know if they have disowned or not. This is both an optimization to avoid having to query thread- local storage for the current thread's index (since it can easily keep it in some local variable), and a record of when an unbound process becomes affined to a thread for the dynamic extent of some operation. Answer 0 if the current thread is known to the VM. Answer 1 if the current thread is unknown to the VM and takes ownership. Answer -1 if the current thread is unknown to the VM and fails to take ownership." | threadIndex flags vmThread myProc activeProc sched | threadIndexAndFlags = 0 ifTrue: [^self ownVMFromUnidentifiedThread]. threadIndex := threadIndexAndFlags bitAnd: ThreadIdMask. flags := threadIndexAndFlags >> DisownFlagsShift. (flags anyMask: DisownVMForProcessorRelinquish) ifTrue: [relinquishing := false. self sqLowLevelMFence]. (threadIndexAndFlags anyMask: LockGUIThreadFlag) ifTrue: [self assert: (noThreadingOfGUIThread and: [self inGUIThread]). self assert: disowningVMThread = nil. (flags anyMask: DisownVMLockOutFullGC) ifTrue: [objectMemory decrementFullGCLock]. cogit recordEventTrace ifTrue: [self recordTrace: TraceOwnVM thing: ConstZero source: 0]. ^0]. vmThread := cogThreadManager acquireVMFor: threadIndex. disownCount := disownCount - 1. (flags anyMask: DisownVMLockOutFullGC) ifTrue: [objectMemory decrementFullGCLock]. + disowningVMThread ifNotNil: - disowningVMThread notNil ifTrue: [vmThread = disowningVMThread ifTrue: [self cCode: '' inSmalltalk: [| range | range := self cStackRangeForThreadIndex: threadIndex. self assert: (range includes: CStackPointer). self assert: (range includes: CFramePointer)]. self assert: self successful. self assert: (objectMemory fetchPointer: MyListIndex ofObject: self activeProcess) = objectMemory nilObject. disowningVMThread := nil. cogit recordEventTrace ifTrue: [self recordTrace: TraceOwnVM thing: ConstOne source: 0]. ^0]. "if not preempted we're done." self preemptDisowningThread]. "We've been preempted; we must restore state and update the threadId in our process, and may have to put the active process to sleep." sched := self schedulerPointer. activeProc := objectMemory fetchPointer: ActiveProcessIndex ofObject: sched. (threadIndexAndFlags anyMask: OwnVMForeignThreadFlag) ifTrue: [self assert: foreignCallbackProcessSlot == ForeignCallbackProcess. myProc := objectMemory splObj: foreignCallbackProcessSlot. self assert: myProc ~= objectMemory nilObject. objectMemory splObj: foreignCallbackProcessSlot put: objectMemory nilObject] ifFalse: [myProc := cogThreadManager popAWOLProcess: vmThread]. self assert: activeProc ~= myProc. (activeProc ~= objectMemory nilObject and: [(objectMemory fetchPointer: MyListIndex ofObject: activeProc) = objectMemory nilObject]) ifTrue: [self putToSleep: activeProc yieldingIf: preemptionYields]. self assert: (objectMemory fetchPointer: MyListIndex ofObject: myProc) = (objectMemory splObj: ProcessInExternalCodeTag). objectMemory storePointer: ActiveProcessIndex ofObject: sched withValue: myProc; storePointerUnchecked: MyListIndex ofObject: myProc withValue: objectMemory nilObject. "Only unaffine if the process was affined at this level and did not become bound in the interim." ((threadIndexAndFlags anyMask: ProcessUnaffinedOnDisown) and: [(self isBoundProcess: myProc) not]) ifTrue: [self setOwnerIndexOfProcess: myProc to: 0 bind: false]. self initPrimCall. self externalSetStackPageAndPointersForSuspendedContextOfProcess: myProc. "If this primitive is called from machine code maintain the invariant that the return pc of an interpreter callee calling a machine code caller is ceReturnToInterpreterPC." (vmThread inMachineCode and: [instructionPointer >= objectMemory startOfMemory]) ifTrue: [self iframeSavedIP: framePointer put: instructionPointer. instructionPointer := cogit ceReturnToInterpreterPC]. newMethod := vmThread newMethodOrNull. argumentCount := vmThread argumentCount. vmThread newMethodOrNull: nil. self cCode: '' inSmalltalk: [| range | range := self cStackRangeForThreadIndex: threadIndex. self assert: (range includes: vmThread cStackPointer). self assert: (range includes: vmThread cFramePointer)]. self setCFramePointer: vmThread cFramePointer setCStackPointer: vmThread cStackPointer. self assert: newMethod ~~ nil. cogit recordEventTrace ifTrue: [self recordTrace: TraceOwnVM thing: ConstTwo source: 0]. ^threadIndexAndFlags bitAnd: OwnVMForeignThreadFlag! Item was changed: ----- Method: CogThreadManager>>acquireVMFor: (in category 'public api') ----- acquireVMFor: threadIndex "Attempt to acquire the VM, eventually blocking until it becomes available. Spin until the maxWaitingPriority has been updated if it is lower than this thread's priority." | vmThread | self assert: threadIndex = self ioGetThreadLocalThreadIndex. vmThread := self vmThreadAt: threadIndex. self assert: (vmThread state = CTMUnavailable or: [vmThread state = CTMWantingOwnership]). (cogit tryLockVMOwner: threadIndex) ifFalse: [vmThread state: CTMWantingOwnership. + [cogit tryLockVMOwner: threadIndex] whileFalse: - [cogit tryLockVMToIndex: threadIndex] whileFalse: [[coInterpreter getMaxWaitingPriority < vmThread priority] whileTrue: [coInterpreter waitingPriorityIsAtLeast: vmThread priority]. vmOwner ~= threadIndex ifTrue: [self ioWaitOnOSSemaphore: (self addressOf: vmThread osSemaphore)]]]. vmOSThread := vmThread osThread. vmThread state: CTMAssignableOrInVM. ^vmThread! Item was changed: ----- Method: CogThreadManager>>vmOwnerFromMachineCode (in category 'simulation') ----- vmOwnerFromMachineCode + ^vmOwner! Item was changed: ----- Method: CogThreadManager>>vmOwnerFromMachineCode: (in category 'simulation') ----- vmOwnerFromMachineCode: aValue + + self assert: (aValue between: 0 and: numThreads). vmOwner := aValue! Item was changed: ----- Method: Cogit>>handleCompareAndSwapSimulationTrap: (in category 'simulation only') ----- handleCompareAndSwapSimulationTrap: aCompareAndSwapSimulationTrap | variableValue accessor | variableValue := (simulatedVariableGetters at: aCompareAndSwapSimulationTrap address ifAbsent: [self errorProcessingSimulationTrap: aCompareAndSwapSimulationTrap in: simulatedVariableGetters]) value asInteger. variableValue = aCompareAndSwapSimulationTrap expectedValue ifTrue: [(simulatedVariableSetters at: aCompareAndSwapSimulationTrap address ifAbsent: [self errorProcessingSimulationTrap: aCompareAndSwapSimulationTrap in: simulatedVariableSetters]) value: aCompareAndSwapSimulationTrap storedValue]. + processor setFlagsForCompareAndSwap: variableValue = aCompareAndSwapSimulationTrap expectedValue. accessor := aCompareAndSwapSimulationTrap registerAccessor. processor perform: accessor with: (processor convertIntegerToInternal: variableValue). processor pc: aCompareAndSwapSimulationTrap nextpc. aCompareAndSwapSimulationTrap resume: processor! Item was changed: ----- Method: Cogit>>simulateLeafCallOf: (in category 'simulation only') ----- simulateLeafCallOf: someFunction "Simulate execution of machine code that leaf-calls someFunction, answering the result returned by someFunction." "CogProcessorAlienInspector openFor: coInterpreter" | priorSP priorPC priorLR spOnEntry bogusRetPC | self recordRegisters. priorSP := processor sp. priorPC := processor pc. priorLR := backEnd hasLinkRegister ifTrue: [processor lr]. processor setFramePointer: coInterpreter getCFramePointer stackPointer: coInterpreter getCStackPointer; simulateLeafCallOf: someFunction nextpc: (bogusRetPC := 16rBADF00D5 roundTo: backEnd codeGranularity) memory: coInterpreter memory. spOnEntry := processor sp. self recordInstruction: {'(simulated call of '. someFunction. ')'}. + ^[[processor pc between: self class guardPageSize and: methodZone zoneEnd] whileTrue: - ^[[processor pc between: 0 and: methodZone zoneEnd] whileTrue: [[singleStep ifTrue: [self recordProcessing. self maybeBreakAt: processor pc. processor singleStepIn: coInterpreter memory minimumAddress: guardPageSize readOnlyBelow: methodZone zoneEnd] ifFalse: [processor runInMemory: coInterpreter memory minimumAddress: guardPageSize readOnlyBelow: methodZone zoneEnd]] on: ProcessorSimulationTrap, Error do: [:ex| "Again this is a hack for the processor simulators not properly simulating returns to bogus addresses. In this case BochsX64Alien doesn't do the right thing." processor pc = bogusRetPC ifTrue: [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}. ^processor cResultRegister]. ex isProcessorSimulationTrap ifFalse: [ex pass]. ex applyTo: self. ex type == #return ifTrue: [^processor cResultRegister]]]. processor pc = bogusRetPC ifTrue: [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}]. processor cResultRegister] ensure: [processor sp: priorSP. processor pc: priorPC. priorLR ifNotNil: [:lr| processor lr: lr]]! Item was changed: ----- Method: Cogit>>tryLockVMOwner: (in category 'multi-threading') ----- tryLockVMOwner: value "ceTryLockVMOwner does an atomic compare-and-swap of the lock with the argument and zero, setting the lock to value if it was zero. It answers non-zero if the lock was zero." + processor abiMarshallArg0: value. ^(self simulateLeafCallOf: ceTryLockVMOwner) ~= 0! Item was added: + ----- Method: FakeStdinStream>>sqFile:Read:Into:At: (in category 'accessing') ----- + sqFile: file Read: count Into: byteArrayIndexArg At: startIndex + "Simulate the read primitive by answering a line of input" + | inputLine n | + position >= readLimit ifTrue: + [simulator isThreadedVM ifTrue: + [simulator forceInterruptCheckFromHeartbeat]. + inputLine := FillInTheBlankMorph + request: 'Input please!!' + initialAnswer: '' + centerAt: ActiveHand cursorPoint + inWorld: ActiveWorld + onCancelReturn: nil + acceptOnCR: true. + inputLine ifNil: [self atEnd: true. ^0]. + collection size <= inputLine size ifTrue: + [collection := collection species new: inputLine size + 1]. + collection + replaceFrom: 1 to: inputLine size with: inputLine startingAt: 1; + at: (readLimit := inputLine size + 1) put: Character lf. + position := 0]. + n := count min: readLimit - position. + simulator + strncpy: byteArrayIndexArg + startIndex + _: (collection copyFrom: position + 1 to: position + n) + _: n. + position := position + n. + ^n! Item was changed: ----- Method: FilePluginSimulator>>sqFile:Read:Into:At: (in category 'simulation') ----- + sqFile: file Read: count Into: byteArrayIndexArg At: startIndex + | byteArrayIndex | + file isFakeStdinStream ifTrue: + [^file sqFile: file Read: count Into: byteArrayIndexArg At: startIndex]. - sqFile: file Read: countArg Into: byteArrayIndexArg At: startIndex - | byteArrayIndex count | - count := file isFakeStdinStream - ifTrue: [1] - ifFalse: [countArg]. byteArrayIndex := byteArrayIndexArg asInteger. "Coerces CArray et al correctly" [[startIndex to: startIndex + count - 1 do: [ :i | + interpreterProxy byteAt: byteArrayIndex + i put: (file next ifNil: [^i - startIndex] ifNotNil: [:charOrByte| charOrByte asInteger])]] - file atEnd ifTrue: [^i - startIndex]. - interpreterProxy - byteAt: byteArrayIndex + i - put: (file next ifNil: [file isFakeStdinStream ifTrue: [^0]] ifNotNil: [:c| c asInteger])]] on: Error do: [:ex| (file isStream and: [file isTranscriptStream]) ifFalse: [ex pass]. ^0]] ensure: [self recordStateOf: file]. ^count! From builds at travis-ci.org Fri Oct 30 03:12:47 2020 From: builds at travis-ci.org (Travis CI) Date: Fri, 30 Oct 2020 03:12:47 +0000 Subject: [Vm-dev] Failed: OpenSmalltalk/opensmalltalk-vm#2289 (Cog - c14b717) In-Reply-To: Message-ID: <5f9b84acc9808_13febfbcb961c6789d@travis-tasks-6775c5cd6-qz6kb.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2289 Status: Failed Duration: 5 hrs, 22 mins, and 37 secs Commit: c14b717 (Cog) Author: Eliot Miranda Message: CogVM source as per Name: VMMaker.oscog-eem.2862 Cogit: Revise deriving the varBaseAddress after finding on MacOS that the linker may not "follow orders". So take the minimum of several likely addresses, secretly hoping the minimum is something like stackLimit, which likely has the highest dynamic frequency (well done clang). Eliminate ceEnterInterpreterOnReturnFromCogCode and have the ceReturnToInterpreterTrampoline invoke interpret directly, using the same code as ceInvokeInterpret. Do this by moving the setMethod: send into interpret from senders; setMethod: is key because it sets the bytecodeSetSelector to enable multiple bytecode set support, but machine code is (and should remain) ignorant of the details of bytecode set selection in compiled method headers. cogitARMv8.c Add __ARM_ARCH >= 8 to cogit.c's ARMv8 identifying macros. CoInterpreterMT: Get rid of vmOwnerLock; what a bogus idea. Just use CAS on vmOwner as God (DS) intended. Fix a bug in CoInterpreterMT>>wakeHighestPriority. Refactor ABI callout marshalling on X64 to use the same CArg0Reg thru CArg3Reg pattern as on ARMv8. Make CPUID the first processor specific opcode on Intel. Eliminate use of reenterInterpreter, this is StackInterpreter only now. FilePlugin: Add FilePlugin>>primitiveFileReadPinningAndDisowning, for file read in COGMTVM. Use methodReturnInteger: rather than methodReturnValue: ... integerObjectOf:: Slang: generate neater code for pointer indirection. Instead of indexing with zero, dereference with *. Eliminate a space in function type printing. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/17625fc20fa1...c14b71734116 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/740043695?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Fri Oct 30 05:21:12 2020 From: builds at travis-ci.org (Travis CI) Date: Fri, 30 Oct 2020 05:21:12 +0000 Subject: [Vm-dev] Failed: OpenSmalltalk/opensmalltalk-vm#2290 (Cog - f027c5c) In-Reply-To: Message-ID: <5f9ba2c7c05a3_13fd9cd8f5a0c9264d@travis-tasks-84859b85d-szqth.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2290 Status: Failed Duration: 6 hrs, 21 mins, and 59 secs Commit: f027c5c (Cog) Author: Eliot Miranda Message: UnixOSProcessPlugin as per VMConstruction-Plugins-OSProcessPlugin.oscog-eem.71 Get the UnixOSProcessPlugin to simulate correctly environmentAtAsType:, the innards of primitiveEnvironmentAt[AsBytes] View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/c14b71734116...f027c5ce8940 View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/740055574?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From kksubbu.ml at gmail.com Fri Oct 30 11:39:04 2020 From: kksubbu.ml at gmail.com (K K Subbu) Date: Fri, 30 Oct 2020 17:09:04 +0530 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <3d334810-b53c-9677-b213-4ff7ecef2164@gmail.com> Message-ID: <3775fc1e-a9c6-efa0-965d-caa8ee3a3b7d@gmail.com> On 29/10/20 9:01 pm, Eliot Miranda wrote: > The OS can impose radically different constraints on the JIT.  In > Mankato it is impossible to derive an executable region from mmap that > is at the same time writable.  On MacOS it is possible, but the VM needs > a capability conveyed through its Info.plist and baked in when the app > bundle is signed. doesn't PROT_EXEC imply PROT_READ? a region with write|exec would essentially be equivalent to an unprotected one. > Other linuxes for Pi4 May impose different constraints.  As I only have > these two variants I need your help in dealing with differing > constraints on these other platforms. I don't have a RP 4 board to test the Ubuntu aarch64 (COVID-19 lockdown constraints). Sorry :-(. Regards .. Subbu From p.fazio at eggingtons.com Fri Oct 30 11:48:04 2020 From: p.fazio at eggingtons.com (p.fazio at eggingtons.com) Date: Fri, 30 Oct 2020 04:48:04 -0700 Subject: [Vm-dev] nuSqueak source Message-ID: <20201030044804.6660d575ab2651c878a98e9495b99492.99059b9405.wbe@email24.secureserver.net> An HTML attachment was scrubbed... URL: From commits at source.squeak.org Fri Oct 30 13:02:42 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 30 Oct 2020 13:02:42 0000 Subject: [Vm-dev] VM Maker: Cog-eem.423.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.423.mcz ==================== Summary ==================== Name: Cog-eem.423 Author: eem Time: 30 October 2020, 6:02:36.95265 am UUID: 38d317fe-abfe-4ce6-97a1-972d0fe2ac25 Ancestors: Cog-eem.422 Refactor abiMarshalArg0:... to accomodate IA32. Raise a trap for stop opcodes. =============== Diff against Cog-eem.422 =============== Item was changed: ----- Method: BochsIA32Alien class>>initialize (in category 'class initialization') ----- initialize "BochsIA32Alien initialize" | it | it := self basicNew. PostBuildStackDelta := 0. OpcodeExceptionMap := Array new: 256 withAll: #handleExecutionPrimitiveFailureAt:in:. OpcodeExceptionMap at: 1 + it callOpcode put: #handleCallFailureAt:in:; at: 1 + it jmpOpcode put: #handleJmpFailureAt:in:; at: 1 + it retOpcode put: #handleRetFailureAt:in:; at: 1 + it movALObOpcode put: #handleMovALObFailureAt:in:; at: 1 + it movAXOvOpcode put: #handleMovAXOvFailureAt:in:; at: 1 + it movObALOpcode put: #handleMovObALFailureAt:in:; at: 1 + it movOvAXOpcode put: #handleMovOvAXFailureAt:in:; at: 1 + it movGvEvOpcode put: #handleMovGvEvFailureAt:in:; at: 1 + it movEvGvOpcode put: #handleMovEvGvFailureAt:in:; at: 1 + it movGbEbOpcode put: #handleMovGbEbFailureAt:in:; + at: 1 + it movEbGbOpcode put: #handleMovEbGbFailureAt:in:; + at: 1 + it stopOpcode put: #handleStopFailureAt:in:. - at: 1 + it movEbGbOpcode put: #handleMovEbGbFailureAt:in:. ExtendedOpcodeExceptionMap := Array new: 256 withAll: #handleExecutionPrimitiveFailureAt:in:. ExtendedOpcodeExceptionMap at: 1 + it movGvEbOpcode put: #handleMovGvEbFailureAt:in:! Item was added: + ----- Method: BochsIA32Alien>>abiMarshalArg0:arg1:in: (in category 'accessing-abstract') ----- + abiMarshalArg0: arg0 arg1: arg1 in: memory + "Marshal two integral arguments according to the ABI. + Currently used only on processors that do ceFlushICache in machine code. + CogICacheFlushingIA32Compiler does just this." + self push: arg1. + self push: arg0! Item was added: + ----- Method: BochsIA32Alien>>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 pushWord: arg0 in: memory! Item was removed: - ----- Method: BochsIA32Alien>>abiMarshallArg0: (in category 'accessing-abstract') ----- - abiMarshallArg0: arg0 - "Marshall one integral argument according to the ABI. - Currently used in the COGMTVM to tryLockVMOwner:" - self push: arg0! Item was removed: - ----- Method: BochsIA32Alien>>abiMarshallArg0:arg1: (in category 'accessing-abstract') ----- - abiMarshallArg0: arg0 arg1: arg1 - "Marshall two integral arguments according to the ABI. - Currently used only on processors that do ceFlushICache in machine code. - CogICacheFlushingIA32Compiler does just this." - self push: arg1. - self push: arg0! Item was added: + ----- Method: BochsIA32Alien>>handleStopFailureAt:in: (in category 'error handling') ----- + handleStopFailureAt: pc "" in: memoryArray "" + ^(ProcessorSimulationTrap + pc: pc + nextpc: pc + 1 + address: pc + type: #stop + accessor: nil) + signal! Item was added: + ----- Method: BochsIA32Alien>>stopOpcode (in category 'opcodes') ----- + stopOpcode + ^16rCC! Item was added: + ----- Method: BochsX64Alien>>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:" + (CogX64Compiler classPool at: #CArg0Reg) = 1 + ifTrue: [self rcx: arg0] "Hack; Win64" + ifFalse: [self rdi: arg0] "Hack; SysV"! Item was removed: - ----- Method: BochsX64Alien>>abiMarshallArg0: (in category 'accessing-abstract') ----- - abiMarshallArg0: arg0 - "Marshall one integral argument according to the ABI. - Currently used in the COGMTVM to tryLockVMOwner:" - (CogX64Compiler classPool at: #CArg0Reg) = 1 - ifTrue: [self rcx: arg0] "Hack; Win64" - ifFalse: [self rdi: arg0] "Hack; SysV"! Item was added: + ----- Method: CogProcessorAlien>>abiMarshalArg0:arg1:in: (in category 'accessing-abstract') ----- + abiMarshalArg0: arg0 arg1: arg1 in: memory + "Marshal two integral arguments according to the ABI. + Currently used only on processors that do ceFlushICache in machine code." + self subclassResponsibility! Item was removed: - ----- Method: CogProcessorAlien>>abiMarshallArg0:arg1: (in category 'accessing-abstract') ----- - abiMarshallArg0: arg0 arg1: arg1 - "Marshall two integral arguments according to the ABI. - Currently used only on processors that do ceFlushICache in machine code." - self subclassResponsibility! From commits at source.squeak.org Fri Oct 30 13:07:07 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 30 Oct 2020 13:07:07 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2864.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2864.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2864 Author: eem Time: 30 October 2020, 6:06:55.276851 am UUID: fe5cd24b-69ca-436c-80fb-04bb4f330099 Ancestors: VMMaker.oscog-eem.2863 Sionara ceCheckFeatures. Cache cpuid result(s) in variable(s). Do throw-away compilation(s) to get at the CPUID result(s) needed. Refactor abiMarshalArg0:... to accomodate IA32. To allow leaf functions to take arguments passed on the stack (as is needed for IA32) move marshaling to after the (questionable) switch to the C stack. =============== Diff against VMMaker.oscog-eem.2863 =============== Item was added: + ----- Method: CogAbstractInstruction>>detectFeatures (in category 'initialization') ----- + detectFeatures + "This is a null default for code to detect features specific to the processor + which may not be present on all versions of the processor and hence must + be checked at runtime. Subclasses override if necessary." + ! Item was changed: ----- Method: CogClass>>cCoerceSimple:to: (in category 'translation support') ----- cCoerceSimple: value to: cTypeString "Type coercion for translation and simulation. For simulation answer a suitable surrogate for the struct types" ^cTypeString caseOf: { [#'unsigned long'] -> [value]. [#'unsigned int'] -> [value]. [#'unsigned short'] -> [value]. [#sqInt] -> [value]. [#'sqIntptr_t'] -> [value]. [#'usqIntptr_t'] -> [value]. [#usqInt] -> [value]. [#sqLong] -> [value]. [#usqLong] -> [value]. [#'AbstractInstruction *'] -> [value]. [#'SpurSegmentInfo *'] -> [value]. [#'BytecodeFixup *'] -> [value]. [#'CogMethod *'] -> [value]. [#'char *'] -> [value]. [#'sqInt *'] -> [value]. [#'void *'] -> [value]. [#void] -> [value]. [#'void (*)()'] -> [value]. [#'void (*)(void)'] -> [value]. [#'usqIntptr_t (*)(void)'] -> [value]. + [#'void (*)(usqIntptr_t,usqIntptr_t)'] -> [value]. + [#'uintptr_t (*)(uintptr_t)'] -> [value]. + [#'uintptr_t (*)(void)'] -> [value] }! - [#'void (*)(usqIntptr_t,usqIntptr_t)'] -> [value] }! Item was changed: CogAbstractInstruction subclass: #CogIA32Compiler instanceVariableNames: '' classVariableNames: 'BSR CDQ CLD CMPXCHGRAw CPUID EAX EBP EBX ECX EDI EDX ESI ESP FSTPD FSTPS IDIVR IMULRR LFENCE LOCK MFENCE MOVSB MOVSD ModReg ModRegInd ModRegIndDisp32 ModRegIndSIB ModRegRegDisp32 ModRegRegDisp8 REP SETE SFENCE SIB1 SIB2 SIB4 SIB8 XCHGRR XMM0L XMM1L XMM2L XMM3L XMM4L XMM5L XMM6L XMM7L' poolDictionaries: '' category: 'VMMaker-JIT'! + CogIA32Compiler class + instanceVariableNames: 'cpuidWord0 cpuidWord1'! !CogIA32Compiler commentStamp: 'eem 9/14/2015 17:13' prior: 0! I generate IA32 (x86) instructions from CogAbstractInstructions. For reference see 1. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, A-M 2. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, N-Z http://www.intel.com/products/processor/manuals/ (� is supposed to be the Unicode "registered sign". This class does not take any special action to flush the instruction cache on instruction-modification, trusting that Intel and AMD processors correctly invalidate the instruction cache via snooping. According to the manuals, this will work on systems where code and data have the same virtual address. The CogICacheFlushingIA32Compiler subclass exists to use the CPUID instruction to serialize instruction-modification for systems with code and data at different virtual addresses.! + CogIA32Compiler class + instanceVariableNames: 'cpuidWord0 cpuidWord1'! Item was added: + ----- Method: CogIA32Compiler class>>cpuidWord0 (in category 'accessing') ----- + cpuidWord0 + ^cpuidWord0! Item was added: + ----- Method: CogIA32Compiler class>>cpuidWord1 (in category 'accessing') ----- + cpuidWord1 + ^cpuidWord1! Item was added: + ----- Method: CogIA32Compiler class>>declareCVarsIn: (in category 'translation') ----- + declareCVarsIn: aCCodeGenerator + aCCodeGenerator + declareVar: 'cpuidWord0' type: #uintptr_t; + declareVar: 'cpuidWord1' type: #uintptr_t! Item was removed: - ----- Method: CogIA32Compiler class>>numTrampolines (in category 'trampoline support') ----- - numTrampolines - ^2 "ceCheckFeatures and ceCheckLZCNTFunction"! Item was added: + ----- Method: CogIA32Compiler>>cpuid: (in category 'feature detection') ----- + cpuid: n + + "This is simulation only invocation of the throw-away CPUID function generated to initialize cpuidWord0 and cpuidWord1" + ^cogit + simulateLeafCallOf: cogit methodZoneBase + marshaling: [cogit processor abiMarshalArg0: n in: objectMemory memory]! Item was added: + ----- Method: CogIA32Compiler>>cpuidWord0 (in category 'feature detection') ----- + cpuidWord0 + + "For want of somewhere to put the variable..." + ^self class cpuidWord0! Item was added: + ----- Method: CogIA32Compiler>>cpuidWord1 (in category 'feature detection') ----- + cpuidWord1 + + "For want of somewhere to put the variable..." + ^self class cpuidWord1! Item was added: + ----- Method: CogIA32Compiler>>detectFeatures (in category 'feature detection') ----- + detectFeatures + "Do a throw-away compilation to get at the cpuid info and initialize cpuidWord0 and cpuidWord1. + N.B. All of MSVC, gcc & clang have intrinsics for this, so if you have the energy by all means + reimplement as an #if _MSC_VER...#elif __GNUC__ #else ... saga." + | startAddress cpuid | + + startAddress := cogit methodZoneBase. + cogit allocateOpcodes: 10 bytecodes: 0. + cpuid := cogit cCoerceSimple: cogit methodZoneBase to: #'uintptr_t (*)(uintptr_t)'. + cogit + PushR: EDX; + PushR: ECX; + PushR: EBX; + MoveMw: 16 "3 saved registers plus return pc" r: ESP R: EAX; + gen: CPUID; + MoveR: EDX R: EAX; + PopR: EBX; + PopR: ECX; + PopR: EDX; + RetN: 0. + cogit outputInstructionsForGeneratedRuntimeAt: startAddress. + cogit resetMethodZoneBase: startAddress. + self setCpuidWord0: (self cCode: 'cpuid(1)' inSmalltalk: [self cpuid: 1]). + cogit zeroOpcodeIndexForNewOpcodes. + cogit + PushR: EDX; + PushR: ECX; + PushR: EBX; + MoveMw: 16 "3 saved registers plus return pc" r: ESP R: EAX; + gen: CPUID; + MoveR: ECX R: EAX; + PopR: EBX; + PopR: ECX; + PopR: EDX; + RetN: 0. + cogit outputInstructionsForGeneratedRuntimeAt: startAddress. + cogit resetMethodZoneBase: startAddress. + self setCpuidWord1: (self cCode: 'cpuid(0x80000001)' inSmalltalk: [self cpuid: 16r80000001])! Item was removed: - ----- Method: CogIA32Compiler>>generateCheckFeatures (in category 'feature detection') ----- - generateCheckFeatures - - cogit - PushR: EDX; - PushR: ECX; - PushR: EBX; - MoveCq: 1 R: EAX; - gen: CPUID; - MoveR: EDX R: EAX; - PopR: EBX; - PopR: ECX; - PopR: EDX; - RetN: 0! Item was removed: - ----- Method: CogIA32Compiler>>generateCheckLZCNT (in category 'feature detection') ----- - generateCheckLZCNT - "to check is Leading Zero Count operation is present - cf. MSVC builtin __lzcnt documentation - The result will be in bit 5 of return value (in EAX)" - - cogit - PushR: EDX; - PushR: ECX; - PushR: EBX; - MoveCq: 16r80000001 R: EAX; - gen: CPUID; - MoveR: ECX R: EAX; - PopR: EBX; - PopR: ECX; - PopR: EDX; - RetN: 0! Item was changed: ----- Method: CogIA32Compiler>>hasLZCNTInstructions (in category 'testing') ----- hasLZCNTInstructions "Answer if we support LZCNT" + ^self cpuidWord1 anyMask: 1 << 5! - ^(cogit ceCheckLZCNT bitAnd: (1 << 5)) ~= 0! Item was changed: ----- Method: CogIA32Compiler>>hasSSE2Instructions (in category 'testing') ----- hasSSE2Instructions "Answer if we support SSE2" + ^self cpuidWord0 anyMask: 1 << 26! - ^(cogit ceCheckFeatures bitAnd: (1 << 26)) ~= 0! Item was changed: ----- Method: CogIA32Compiler>>hasSSEInstructions (in category 'testing') ----- hasSSEInstructions "Answer if we support SSE" + ^self cpuidWord0 anyMask: 1 << 25! - ^(cogit ceCheckFeatures bitAnd: (1 << 25)) ~= 0! Item was removed: - ----- Method: CogIA32Compiler>>numCheckFeaturesOpcodes (in category 'feature detection') ----- - numCheckFeaturesOpcodes - "Answer the number of opcodes required to compile the CPUID call to extract the extended features information." - ^11! Item was removed: - ----- Method: CogIA32Compiler>>numCheckLZCNTOpcodes (in category 'feature detection') ----- - numCheckLZCNTOpcodes - "Answer the number of opcodes required to compile the CPUID call to extract the extended features information." - ^11! Item was added: + ----- Method: CogIA32Compiler>>setCpuidWord0: (in category 'feature detection') ----- + setCpuidWord0: word + + "For want of somewhere to put the variable..." + self class instVarNamed: 'cpuidWord0' put: word! Item was added: + ----- Method: CogIA32Compiler>>setCpuidWord1: (in category 'feature detection') ----- + setCpuidWord1: word + + "For want of somewhere to put the variable..." + self class instVarNamed: 'cpuidWord1' put: word! Item was changed: CogAbstractInstruction subclass: #CogX64Compiler instanceVariableNames: '' classVariableNames: 'BSR CArg0Reg CArg1Reg CArg2Reg CArg3Reg CDQ CLD CMPXCHGRMr CPUID IDIVR IMULRR LFENCE LOCK MFENCE MOVSB MOVSQ ModReg ModRegInd ModRegIndDisp32 ModRegIndSIB ModRegRegDisp32 ModRegRegDisp8 MoveRAwNoVBR R10 R11 R12 R13 R14 R15 R8 R9 RAX RBP RBX RCX RDI RDX REP RSI RSP SETE SFENCE SIB1 SIB2 SIB4 SIB8 SysV XCHGRR XMM0L XMM10L XMM11L XMM12L XMM13L XMM14L XMM15L XMM1L XMM2L XMM3L XMM4L XMM5L XMM6L XMM7L XMM8L XMM9L' poolDictionaries: '' category: 'VMMaker-JIT'! + CogX64Compiler class + instanceVariableNames: 'cpuidWord1'! !CogX64Compiler commentStamp: 'eem 9/14/2015 17:12' prior: 0! I generate x64 (x86-64) instructions from CogAbstractInstructions. For reference see 1. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, A-M 2. IA-32 Intel� Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, N-Z http://www.intel.com/products/processor/manuals/ or AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions AMD64 Architecture Programmer's Manual Volume 4: 128-bit Media Instructions AMD64 Architecture Programmer's Manual Volume 5: 64-bit Media and x87 Floating Point Instructions http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/ (� is supposed to be the Unicode "registered sign").! + CogX64Compiler class + instanceVariableNames: 'cpuidWord1'! Item was added: + ----- Method: CogX64Compiler class>>cpuidWord1 (in category 'accessing') ----- + cpuidWord1 + ^cpuidWord1! Item was added: + ----- Method: CogX64Compiler class>>declareCVarsIn: (in category 'translation') ----- + declareCVarsIn: aCCodeGenerator + aCCodeGenerator + declareVar: 'cpuidWord1' type: #uintptr_t! Item was removed: - ----- Method: CogX64Compiler class>>numTrampolines (in category 'trampoline support') ----- - numTrampolines - ^1 "ceCheckLZCNTFunction"! Item was added: + ----- Method: CogX64Compiler>>cpuidWord1 (in category 'feature detection') ----- + cpuidWord1 + + "For want of somewhere to put the variable..." + ^self class cpuidWord1! Item was added: + ----- Method: CogX64Compiler>>detectFeatures (in category 'feature detection') ----- + detectFeatures + "Do a throw-away compilation to get at the cpuid info and initialize cpuidWord1 + N.B. All of MSVC, gcc & clang have intrinsics for this, so if you have the energy + by all means reimplement as an #if _MSC_VER...#elif __GNUC__ #else ... saga." + | startAddress cpuid | + + startAddress := cogit methodZoneBase. + cogit allocateOpcodes: 10 bytecodes: 0. + cpuid := cogit cCoerceSimple: startAddress to: #'uintptr_t (*)(void)'. + cogit + PushR: RDX; + PushR: RCX; + PushR: RBX; + MoveCq: 16r80000001 R: RAX; + gen: CPUID; + MoveR: RCX R: RAX; + PopR: RBX; + PopR: RCX; + PopR: RDX; + RetN: 0. + cogit outputInstructionsForGeneratedRuntimeAt: startAddress. + cogit resetMethodZoneBase: startAddress. + self setCpuidWord1: (self cCode: 'cpuid()' inSmalltalk: [cogit simulateLeafCallOf: startAddress marshaling: []])! Item was removed: - ----- Method: CogX64Compiler>>generateCheckLZCNT (in category 'feature detection') ----- - generateCheckLZCNT - "to check is Leading Zero Count operation is present - cf. MSVC builtin __lzcnt documentation - The result will be in bit 5 of return value (in RAX)" - - cogit - PushR: RDX; - PushR: RCX; - PushR: RBX; - MoveCq: 16r80000001 R: RAX; - gen: CPUID; - MoveR: RCX R: RAX; - PopR: RBX; - PopR: RCX; - PopR: RDX; - RetN: 0! Item was changed: ----- Method: CogX64Compiler>>hasLZCNTInstructions (in category 'testing') ----- hasLZCNTInstructions "Answer if we support LZCNT" + ^self cpuidWord1 anyMask: 1 << 5! - ^(cogit ceCheckLZCNT bitAnd: (1 << 5)) ~= 0! Item was removed: - ----- Method: CogX64Compiler>>numCheckLZCNTOpcodes (in category 'feature detection') ----- - numCheckLZCNTOpcodes - "Answer the number of opcodes required to compile the CPUID call to extract the extended features information." - ^11! Item was added: + ----- Method: CogX64Compiler>>setCpuidWord1: (in category 'feature detection') ----- + setCpuidWord1: word + + "For want of somewhere to put the variable..." + self class instVarNamed: 'cpuidWord1' put: word! Item was changed: CogClass subclass: #Cogit (excessive size, no diff calculated) Item was changed: ----- Method: Cogit class>>declareCVarsIn: (in category 'translation') ----- declareCVarsIn: aCCodeGenerator | backEnd | backEnd := CogCompilerClass basicNew. #( 'coInterpreter' 'objectMemory' 'methodZone' 'objectRepresentation' 'cogBlockMethodSurrogateClass' 'cogMethodSurrogateClass' 'nsSendCacheSurrogateClass' 'threadManager' 'processor' 'lastNInstructions' 'simulatedAddresses' 'simulatedTrampolines' 'simulatedVariableGetters' 'simulatedVariableSetters' 'processorFrameValid' 'printRegisters' 'printInstructions' 'clickConfirm' 'singleStep') do: [:simulationVariableNotNeededForRealVM| aCCodeGenerator removeVariable: simulationVariableNotNeededForRealVM]. NewspeakVM ifFalse: [#( 'selfSendTrampolines' 'dynamicSuperSendTrampolines' 'implicitReceiverSendTrampolines' 'outerSendTrampolines' 'ceEnclosingObjectTrampoline' 'numIRCs' 'indexOfIRC' 'theIRCs') do: [:variableNotNeededInNormalVM| aCCodeGenerator removeVariable: variableNotNeededInNormalVM]]. aCCodeGenerator removeConstant: #COGMTVM. "this should be defined at compile time" aCCodeGenerator addHeaderFile:''; "for e.g. offsetof" addHeaderFile:'"sqCogStackAlignment.h"'; addHeaderFile:'"dispdbg.h"'; "must precede cointerp.h & cogit.h otherwise NoDbgRegParms gets screwed up" addHeaderFile:'"cogmethod.h"'. NewspeakVM ifTrue: [aCCodeGenerator addHeaderFile:'"nssendcache.h"']. aCCodeGenerator addHeaderFile:'#if COGMTVM'; addHeaderFile:'"cointerpmt.h"'; addHeaderFile:'#else'; addHeaderFile:'"cointerp.h"'; addHeaderFile:'#endif'; addHeaderFile:'"cogit.h"'. aCCodeGenerator var: #ceGetFP declareC: 'usqIntptr_t (*ceGetFP)(void)'; var: #ceGetSP declareC: 'usqIntptr_t (*ceGetSP)(void)'; var: #ceCaptureCStackPointers declareC: 'void (*ceCaptureCStackPointers)(void)'; var: #ceInvokeInterpret declareC: 'void (*ceInvokeInterpret)(void)'; var: #ceEnterCogCodePopReceiverReg declareC: 'void (*ceEnterCogCodePopReceiverReg)(void)'; var: #realCEEnterCogCodePopReceiverReg declareC: 'void (*realCEEnterCogCodePopReceiverReg)(void)'; var: #ceCallCogCodePopReceiverReg declareC: 'void (*ceCallCogCodePopReceiverReg)(void)'; var: #realCECallCogCodePopReceiverReg declareC: 'void (*realCECallCogCodePopReceiverReg)(void)'; var: #ceCallCogCodePopReceiverAndClassRegs declareC: 'void (*ceCallCogCodePopReceiverAndClassRegs)(void)'; var: #realCECallCogCodePopReceiverAndClassRegs declareC: 'void (*realCECallCogCodePopReceiverAndClassRegs)(void)'; var: #postCompileHook declareC: 'void (*postCompileHook)(CogMethod *)'; var: #openPICList declareC: 'CogMethod *openPICList = 0'; var: #maxMethodBefore type: #'CogBlockMethod *'; var: 'enumeratingCogMethod' type: #'CogMethod *'. aCCodeGenerator var: #ceTryLockVMOwner declareC: '#if COGMTVM\usqIntptr_t (*ceTryLockVMOwner)(void)'; var: #ceUnlockVMOwner declareC: 'void (*ceUnlockVMOwner)(void)\#endif /* COGMTVM */'. - backEnd numCheckLZCNTOpcodes > 0 ifTrue: - [aCCodeGenerator - var: #ceCheckLZCNTFunction - declareC: 'static usqIntptr_t (*ceCheckLZCNTFunction)(void)']. - backEnd numCheckFeaturesOpcodes > 0 ifTrue: - [aCCodeGenerator - var: #ceCheckFeaturesFunction - declareC: 'static usqIntptr_t (*ceCheckFeaturesFunction)(void)']. backEnd numICacheFlushOpcodes > 0 ifTrue: [aCCodeGenerator var: #ceFlushICache declareC: 'static void (*ceFlushICache)(usqIntptr_t from, usqIntptr_t to)']. aCCodeGenerator var: #ceFlushDCache declareC: '#if DUAL_MAPPED_CODE_ZONE\static void (*ceFlushDCache)(usqIntptr_t from, usqIntptr_t to)\#endif'; var: #codeToDataDelta declareC: '#if DUAL_MAPPED_CODE_ZONE\static sqInt codeToDataDelta\#else\# define codeToDataDelta 0\#endif'. aCCodeGenerator declareVar: 'aMethodLabel' type: #'AbstractInstruction'; "Has to come lexicographically before backEnd & methodLabel" var: #backEnd declareC: 'AbstractInstruction * const backEnd = &aMethodLabel'; var: #methodLabel declareC: 'AbstractInstruction * const methodLabel = &aMethodLabel'. self declareC: #(abstractOpcodes stackCheckLabel blockEntryLabel blockEntryNoContextSwitch stackOverflowCall sendMiss entry noCheckEntry selfSendEntry dynSuperEntry fullBlockNoContextSwitchEntry fullBlockEntry picMNUAbort picInterpretAbort endCPICCase0 endCPICCase1 cPICEndOfCodeLabel) as: #'AbstractInstruction *' in: aCCodeGenerator. aCCodeGenerator declareVar: #cPICPrototype type: #'CogMethod *'; declareVar: #blockStarts type: #'BlockStart *'; declareVar: #fixups type: #'BytecodeFixup *'; declareVar: #methodZoneBase type: #usqInt. aCCodeGenerator var: #ordinarySendTrampolines declareC: 'sqInt ordinarySendTrampolines[NumSendTrampolines]'; var: #superSendTrampolines declareC: 'sqInt superSendTrampolines[NumSendTrampolines]'. BytecodeSetHasDirectedSuperSend ifTrue: [aCCodeGenerator var: #directedSuperSendTrampolines declareC: 'sqInt directedSuperSendTrampolines[NumSendTrampolines]'; var: #directedSuperBindingSendTrampolines declareC: 'sqInt directedSuperBindingSendTrampolines[NumSendTrampolines]']. NewspeakVM ifTrue: [aCCodeGenerator var: #selfSendTrampolines declareC: 'sqInt selfSendTrampolines[NumSendTrampolines]'; var: #dynamicSuperSendTrampolines declareC: 'sqInt dynamicSuperSendTrampolines[NumSendTrampolines]'; var: #implicitReceiverSendTrampolines declareC: 'sqInt implicitReceiverSendTrampolines[NumSendTrampolines]'; var: #outerSendTrampolines declareC: 'sqInt outerSendTrampolines[NumSendTrampolines]']. aCCodeGenerator var: #trampolineAddresses declareC: 'static char *trampolineAddresses[NumTrampolines*2]'; var: #objectReferencesInRuntime declareC: 'static usqInt objectReferencesInRuntime[NumObjRefsInRuntime+1]'; var: #labelCounter type: #int; var: #traceFlags declareC: 'int traceFlags = 8 /* prim trace log on by default */'; var: #cStackAlignment declareC: 'const int cStackAlignment = STACK_ALIGN_BYTES'. aCCodeGenerator declareVar: #minValidCallAddress type: #'usqIntptr_t'. aCCodeGenerator vmClass generatorTable ifNotNil: [:bytecodeGenTable| aCCodeGenerator var: #generatorTable declareC: 'static BytecodeDescriptor generatorTable[', bytecodeGenTable size printString, ']', (self tableInitializerFor: bytecodeGenTable in: aCCodeGenerator)]. "In C the abstract opcode names clash with the Smalltalk generator syntactic sugar. Most of the syntactic sugar is inlined, but alas some remains. Rename the syntactic sugar to avoid the clash." (self organization listAtCategoryNamed: #'abstract instructions') do: [:s| aCCodeGenerator addSelectorTranslation: s to: 'g', (aCCodeGenerator cFunctionNameFor: s)]. aCCodeGenerator addSelectorTranslation: #halt: to: 'haltmsg'. self declareFlagVarsAsByteIn: aCCodeGenerator! Item was changed: ----- Method: Cogit>>ceCaptureCStackPointers (in category 'jit - api') ----- ceCaptureCStackPointers | range | coInterpreter isCurrentImageFacade ifTrue: [^self]. coInterpreter isThreadedVM ifFalse: + [^self simulateLeafCallOf: ceCaptureCStackPointers marshaling: []]. - [^self simulateLeafCallOf: ceCaptureCStackPointers]. thisContext sender selector == #generateStackPointerCapture ifTrue: [^self]. range := coInterpreter cStackRangeForThreadIndex: coInterpreter threadManager getVMOwner. self assert: (range notNil "VM is owned" and: [(range includes: processor sp) and: [range includes: processor fp]]). coInterpreter setCFramePointer: processor fp setCStackPointer: processor sp! Item was removed: - ----- Method: Cogit>>ceCheckFeatures (in category 'testing') ----- - ceCheckFeatures - - ^self simulateLeafCallOf: ceCheckFeaturesFunction! Item was removed: - ----- Method: Cogit>>ceCheckLZCNT (in category 'testing') ----- - ceCheckLZCNT - - ^self simulateLeafCallOf: ceCheckLZCNTFunction! Item was changed: ----- Method: Cogit>>initializeCodeZoneFrom:upTo: (in category 'initialization') ----- initializeCodeZoneFrom: startAddress upTo: endAddress self initializeBackend. self sqMakeMemoryExecutableFrom: startAddress To: endAddress CodeToDataDelta: (self cppIf: #DUAL_MAPPED_CODE_ZONE ifTrue: [self addressOf: codeToDataDelta put: [:v| codeToDataDelta := v]] ifFalse: [nil]). backEnd stopsFrom: startAddress to: endAddress - 1. self cCode: '' inSmalltalk: [self initializeProcessor. backEnd stopsFrom: 0 to: guardPageSize - 1]. codeBase := methodZoneBase := startAddress. minValidCallAddress := (codeBase min: coInterpreter interpretAddress) min: coInterpreter primitiveFailAddress. methodZone manageFrom: methodZoneBase to: endAddress. self assertValidDualZone. + backEnd detectFeatures. - self maybeGenerateCheckFeatures. self maybeGenerateCacheFlush. - self maybeGenerateCheckLZCNT. self generateVMOwnerLockFunctions. self genGetLeafCallStackPointers. self generateStackPointerCapture. self generateTrampolines. self computeEntryOffsets. self computeFullBlockEntryOffsets. self generateClosedPICPrototype. self alignMethodZoneBase. "None of the above is executed beyond ceCheckFeatures, so a bulk flush now is the leanest thing to do." backEnd flushICacheFrom: startAddress to: methodZoneBase asUnsignedInteger. self maybeFlushWritableZoneFrom: startAddress to: methodZoneBase asUnsignedInteger. "Repeat so that now the methodZone ignores the generated run-time." methodZone manageFrom: methodZoneBase to: endAddress. "N.B. this is assumed to be the last thing done in initialization; see Cogit>>initialized. This is done only to compute openPICSize; the generated code is discarded." self generateOpenPICPrototype! Item was removed: - ----- Method: Cogit>>maybeGenerateCheckFeatures (in category 'initialization') ----- - maybeGenerateCheckFeatures - | startAddress | - - backEnd numCheckFeaturesOpcodes > 0 ifTrue: - [self allocateOpcodes: backEnd numCheckFeaturesOpcodes bytecodes: 0. - startAddress := methodZoneBase. - backEnd generateCheckFeatures. - self outputInstructionsForGeneratedRuntimeAt: startAddress. - self recordGeneratedRunTime: 'ceCheckFeaturesFunction' address: startAddress. - ceCheckFeaturesFunction := self cCoerceSimple: startAddress to: #'usqIntptr_t (*)(void)'. - backEnd initialFlushICacheFrom: startAddress to: methodZoneBase]! Item was removed: - ----- Method: Cogit>>maybeGenerateCheckLZCNT (in category 'initialization') ----- - maybeGenerateCheckLZCNT - | startAddress | - - backEnd numCheckLZCNTOpcodes > 0 ifTrue: - [self allocateOpcodes: backEnd numCheckLZCNTOpcodes bytecodes: 0. - startAddress := methodZoneBase. - methodLabel address: startAddress. "for pc-relative MoveCq: 16r80000001 R: RAX;" - backEnd generateCheckLZCNT. - self outputInstructionsForGeneratedRuntimeAt: startAddress. - self recordGeneratedRunTime: 'ceCheckLZCNTFunction' address: startAddress. - ceCheckLZCNTFunction := self cCoerceSimple: startAddress to: #'usqIntptr_t (*)(void)']! Item was added: + ----- Method: Cogit>>resetMethodZoneBase: (in category 'initialization') ----- + resetMethodZoneBase: address + "For throw-away/one-off compilations" + + methodZoneBase := address! Item was changed: ----- Method: Cogit>>simulateCeFlushDCacheFrom:to: (in category 'simulation only') ----- simulateCeFlushDCacheFrom: start to: finish + self simulateLeafCallOf: ceFlushDCache + marshaling: [processor abiMarshalArg0: start arg1: finish in: objectMemory memory]! - processor abiMarshallArg0: start arg1: finish. - self simulateLeafCallOf: ceFlushDCache! Item was changed: ----- Method: Cogit>>simulateCeFlushICacheFrom:to: (in category 'simulation only') ----- simulateCeFlushICacheFrom: start to: finish + self simulateLeafCallOf: ceFlushICache + marshaling: [processor abiMarshalArg0: start arg1: finish in: objectMemory memory]! - processor abiMarshallArg0: start arg1: finish. - self simulateLeafCallOf: ceFlushICache! Item was removed: - ----- Method: Cogit>>simulateLeafCallOf: (in category 'simulation only') ----- - simulateLeafCallOf: someFunction - "Simulate execution of machine code that leaf-calls someFunction, - answering the result returned by someFunction." - "CogProcessorAlienInspector openFor: coInterpreter" - - | priorSP priorPC priorLR spOnEntry bogusRetPC | - self recordRegisters. - priorSP := processor sp. - priorPC := processor pc. - priorLR := backEnd hasLinkRegister ifTrue: [processor lr]. - processor - setFramePointer: coInterpreter getCFramePointer stackPointer: coInterpreter getCStackPointer; - simulateLeafCallOf: someFunction - nextpc: (bogusRetPC := 16rBADF00D5 roundTo: backEnd codeGranularity) - memory: coInterpreter memory. - spOnEntry := processor sp. - self recordInstruction: {'(simulated call of '. someFunction. ')'}. - ^[[processor pc between: self class guardPageSize and: methodZone zoneEnd] whileTrue: - [[singleStep - ifTrue: [self recordProcessing. - self maybeBreakAt: processor pc. - processor - singleStepIn: coInterpreter memory - minimumAddress: guardPageSize - readOnlyBelow: methodZone zoneEnd] - ifFalse: [processor - runInMemory: coInterpreter memory - minimumAddress: guardPageSize - readOnlyBelow: methodZone zoneEnd]] - on: ProcessorSimulationTrap, Error - do: [:ex| - "Again this is a hack for the processor simulators not properly simulating returns to bogus addresses. - In this case BochsX64Alien doesn't do the right thing." - processor pc = bogusRetPC ifTrue: - [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}. - ^processor cResultRegister]. - ex isProcessorSimulationTrap ifFalse: - [ex pass]. - ex applyTo: self. - ex type == #return ifTrue: - [^processor cResultRegister]]]. - processor pc = bogusRetPC ifTrue: - [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}]. - processor cResultRegister] - ensure: - [processor sp: priorSP. - processor pc: priorPC. - priorLR ifNotNil: [:lr| processor lr: lr]]! Item was added: + ----- Method: Cogit>>simulateLeafCallOf:marshaling: (in category 'simulation only') ----- + simulateLeafCallOf: someFunction marshaling: marshallingBlock + "Simulate execution of machine code that leaf-calls someFunction, + answering the result returned by someFunction." + "CogProcessorAlienInspector openFor: coInterpreter" + + | priorSP priorPC priorLR spOnEntry bogusRetPC | + self recordRegisters. + priorSP := processor sp. + priorPC := processor pc. + priorLR := backEnd hasLinkRegister ifTrue: [processor lr]. + processor + setFramePointer: coInterpreter getCFramePointer + stackPointer: coInterpreter getCStackPointer. + marshallingBlock value. + processor + simulateLeafCallOf: someFunction + nextpc: (bogusRetPC := 16rBADF00D5 roundTo: backEnd codeGranularity) + memory: coInterpreter memory. + spOnEntry := processor sp. + self recordInstruction: {'(simulated call of '. someFunction. ')'}. + ^[[processor pc between: self class guardPageSize and: methodZone zoneEnd] whileTrue: + [[singleStep + ifTrue: [self recordProcessing. + self maybeBreakAt: processor pc. + processor + singleStepIn: coInterpreter memory + minimumAddress: guardPageSize + readOnlyBelow: methodZone zoneEnd] + ifFalse: [processor + runInMemory: coInterpreter memory + minimumAddress: guardPageSize + readOnlyBelow: methodZone zoneEnd]] + on: ProcessorSimulationTrap, Error + do: [:ex| + "Again this is a hack for the processor simulators not properly simulating returns to bogus addresses. + In this case BochsX64Alien doesn't do the right thing." + processor pc = bogusRetPC ifTrue: + [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}. + ^processor cResultRegister]. + ex isProcessorSimulationTrap ifFalse: + [ex pass]. + ex applyTo: self. + ex type == #return ifTrue: + [^processor cResultRegister]]]. + processor pc = bogusRetPC ifTrue: + [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}]. + processor cResultRegister] + ensure: + [processor sp: priorSP. + processor pc: priorPC. + priorLR ifNotNil: [:lr| processor lr: lr]]! Item was changed: ----- Method: Cogit>>tryLockVMOwner: (in category 'multi-threading') ----- tryLockVMOwner: value "ceTryLockVMOwner does an atomic compare-and-swap of the lock with the argument and zero, setting the lock to value if it was zero. It answers non-zero if the lock was zero." + ^0 ~= (self + simulateLeafCallOf: ceTryLockVMOwner + marshaling: [processor abiMarshalArg0: value in: objectMemory memory])! - processor abiMarshallArg0: value. - ^(self simulateLeafCallOf: ceTryLockVMOwner) ~= 0! Item was changed: ----- Method: Cogit>>unlockVMOwner (in category 'multi-threading') ----- unlockVMOwner + ^self simulateLeafCallOf: ceUnlockVMOwner marshaling: []! - ^self simulateLeafCallOf: ceUnlockVMOwner! From commits at source.squeak.org Fri Oct 30 13:08:21 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 30 Oct 2020 13:08:21 0000 Subject: [Vm-dev] VM Maker: VMMakerUI-eem.31.mcz Message-ID: Eliot Miranda uploaded a new version of VMMakerUI to project VM Maker: http://source.squeak.org/VMMaker/VMMakerUI-eem.31.mcz ==================== Summary ==================== Name: VMMakerUI-eem.31 Author: eem Time: 30 October 2020, 6:08:18.984073 am UUID: 569db58c-700d-4f32-82fc-b2dee4ffb3b7 Ancestors: VMMakerUI-eem.30 To allow leaf functions to take arguments passed on the stack (as is needed for IA32) move marshaling to after the (questionable) switch to the C stack. =============== Diff against VMMakerUI-eem.30 =============== Item was changed: ----- Method: Cogit>>setClickStepBreakBlock (in category '*VMMakerUI-user interface') ----- setClickStepBreakBlock "Set the break block to present a confirmer, breaking if true, and restoring the previous break block. If an open debugger on the receiver can be found, proceed it." | previousBreakBlock previousAtEachStepBlock previousBreakPC previousSingleStep previousClickConfirm result | (breakBlock isNil or: [breakBlock method ~~ thisContext method]) ifTrue: [previousBreakBlock := breakBlock. previousAtEachStepBlock := coInterpreter atEachStepBlock. previousBreakPC := breakPC. previousSingleStep := singleStep. previousClickConfirm := clickConfirm. breakBlock := [:ign| (processor pc ~= previousBreakPC and: [(result := self promptClickStep) == true]) ifTrue: [false] ifFalse: [breakBlock := previousBreakBlock. coInterpreter atEachStepBlock: previousAtEachStepBlock. breakPC := previousBreakPC. singleStep := previousSingleStep. clickConfirm := previousClickConfirm. true]]. coInterpreter atEachStepBlock: [previousAtEachStepBlock value. (coInterpreter localIP ~= previousBreakPC and: [(result := self promptClickStep) == true]) ifFalse: [breakBlock := previousBreakBlock. coInterpreter atEachStepBlock: previousAtEachStepBlock. breakPC := previousBreakPC. singleStep := previousSingleStep. clickConfirm := previousClickConfirm. self halt]]. singleStep := breakPC := clickConfirm := result ~~ #proceed]. (World submorphs detect: [:m| m model isDebugger and: [(m model interruptedProcess suspendedContext findContextSuchThat: [:ctxt| (ctxt receiver == self and: [ctxt selector == #simulateCogCodeAt: + or: [ctxt selector == #simulateLeafCallOf:marshaling:]]) - or: [ctxt selector == #simulateLeafCallOf:]]) or: [ctxt receiver == coInterpreter and: [ctxt selector == #interpret]]]) notNil]] ifNone: []) ifNotNil: [:debuggerWindow| WorldState addDeferredUIMessage: [debuggerWindow model proceed]]! From noreply at github.com Fri Oct 30 13:21:38 2020 From: noreply at github.com (Eliot Miranda) Date: Fri, 30 Oct 2020 06:21:38 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 61a3e3: CogVM source as per VMMaker.oscog-eem.2864 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 61a3e3df190e0b30437dc50966b130f397638c08 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/61a3e3df190e0b30437dc50966b130f397638c08 Author: Eliot Miranda Date: 2020-10-30 (Fri, 30 Oct 2020) Changed paths: M nsspur64src/vm/cogit.h M nsspur64src/vm/cogitARMv8.c M nsspur64src/vm/cogitX64SysV.c M nsspur64src/vm/cogitX64WIN64.c M nsspur64src/vm/cointerp.c M nsspur64src/vm/cointerp.h M nsspur64src/vm/gcc3x-cointerp.c M nsspursrc/vm/cogit.h M nsspursrc/vm/cogitARMv5.c M nsspursrc/vm/cogitIA32.c M nsspursrc/vm/cogitMIPSEL.c M nsspursrc/vm/cointerp.c M nsspursrc/vm/cointerp.h M nsspursrc/vm/gcc3x-cointerp.c M nsspurstack64src/vm/gcc3x-interp.c M nsspurstack64src/vm/interp.c M nsspurstacksrc/vm/gcc3x-interp.c M nsspurstacksrc/vm/interp.c M processors/IA32/bochs/explorationx64/printcpu.c M spur64src/vm/cogit.h M spur64src/vm/cogitARMv8.c M spur64src/vm/cogitX64SysV.c M spur64src/vm/cogitX64WIN64.c M spur64src/vm/cointerp.c M spur64src/vm/cointerp.h M spur64src/vm/cointerpmt.c M spur64src/vm/cointerpmt.h M spur64src/vm/gcc3x-cointerp.c M spur64src/vm/gcc3x-cointerpmt.c M spurlowcode64src/vm/cogit.h M spurlowcode64src/vm/cogitARMv8.c M spurlowcode64src/vm/cogitX64SysV.c M spurlowcode64src/vm/cogitX64WIN64.c M spurlowcode64src/vm/cointerp.c M spurlowcode64src/vm/cointerp.h M spurlowcode64src/vm/gcc3x-cointerp.c M spurlowcodesrc/vm/cogit.h M spurlowcodesrc/vm/cogitARMv5.c M spurlowcodesrc/vm/cogitIA32.c M spurlowcodesrc/vm/cogitMIPSEL.c M spurlowcodesrc/vm/cointerp.c M spurlowcodesrc/vm/cointerp.h M spurlowcodesrc/vm/gcc3x-cointerp.c M spurlowcodestack64src/vm/gcc3x-interp.c M spurlowcodestack64src/vm/interp.c M spurlowcodestacksrc/vm/gcc3x-interp.c M spurlowcodestacksrc/vm/interp.c M spursista64src/vm/cogit.h M spursista64src/vm/cogitARMv8.c M spursista64src/vm/cogitX64SysV.c M spursista64src/vm/cogitX64WIN64.c M spursista64src/vm/cointerp.c M spursista64src/vm/cointerp.h M spursista64src/vm/gcc3x-cointerp.c M spursistasrc/vm/cogit.h M spursistasrc/vm/cogitARMv5.c M spursistasrc/vm/cogitIA32.c M spursistasrc/vm/cogitMIPSEL.c M spursistasrc/vm/cointerp.c M spursistasrc/vm/cointerp.h M spursistasrc/vm/gcc3x-cointerp.c M spursrc/vm/cogit.h M spursrc/vm/cogitARMv5.c M spursrc/vm/cogitIA32.c M spursrc/vm/cogitMIPSEL.c M spursrc/vm/cointerp.c M spursrc/vm/cointerp.h M spursrc/vm/cointerpmt.c M spursrc/vm/cointerpmt.h M spursrc/vm/gcc3x-cointerp.c M spursrc/vm/gcc3x-cointerpmt.c M spurstack64src/vm/gcc3x-interp.c M spurstack64src/vm/interp.c M spurstack64src/vm/validImage.c M spurstacksrc/vm/gcc3x-interp.c M spurstacksrc/vm/interp.c M spurstacksrc/vm/validImage.c M src/vm/cogit.h M src/vm/cogitARMv5.c M src/vm/cogitIA32.c M src/vm/cogitMIPSEL.c M src/vm/cointerp.c M src/vm/cointerp.h M src/vm/cointerpmt.c M src/vm/cointerpmt.h M src/vm/gcc3x-cointerp.c M src/vm/gcc3x-cointerpmt.c Log Message: ----------- CogVM source as per VMMaker.oscog-eem.2864 Sionara ceCheckFeatures. Cache cpuid result(s) in variable(s). Do throw-away compilation(s) to get at the CPUID result(s) needed. From p.fazio at eggingtons.com Fri Oct 30 13:44:51 2020 From: p.fazio at eggingtons.com (p.fazio at eggingtons.com) Date: Fri, 30 Oct 2020 06:44:51 -0700 Subject: [Vm-dev] nuSqueak source Message-ID: <20201030064451.6660d575ab2651c878a98e9495b99492.d0520334f5.wbe@email24.secureserver.net> An HTML attachment was scrubbed... URL: From builds at travis-ci.org Fri Oct 30 13:59:40 2020 From: builds at travis-ci.org (Travis CI) Date: Fri, 30 Oct 2020 13:59:40 +0000 Subject: [Vm-dev] Still Failing: OpenSmalltalk/opensmalltalk-vm#2291 (Cog - 61a3e3d) In-Reply-To: Message-ID: <5f9c1c4c79bf7_13fdb9d8c9a0c102831@travis-tasks-5b8944c9b8-tddxr.mail> Build Update for OpenSmalltalk/opensmalltalk-vm ------------------------------------- Build: #2291 Status: Still Failing Duration: 36 mins and 40 secs Commit: 61a3e3d (Cog) Author: Eliot Miranda Message: CogVM source as per VMMaker.oscog-eem.2864 Sionara ceCheckFeatures. Cache cpuid result(s) in variable(s). Do throw-away compilation(s) to get at the CPUID result(s) needed. View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/f027c5ce8940...61a3e3df190e View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/740185994?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Fri Oct 30 14:59:10 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 30 Oct 2020 14:59:10 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2865.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2865.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2865 Author: eem Time: 30 October 2020, 7:58:58.320942 am UUID: f9e6957e-d20a-47ba-b579-29e37af6cef3 Ancestors: VMMaker.oscog-eem.2864 Get the CoInterpreterMT to simulate. Refactor _setjmp:/_longjmp:_: for the added use for reentering the thread scheduling loop. =============== Diff against VMMaker.oscog-eem.2864 =============== Item was changed: ----- Method: CoInterpreter>>_longjmp:_: (in category 'cog jit support') ----- _longjmp: aJumpBuf _: returnValue "Hack simulation of _setjmp/_longjmp, intended to invoke the most minimal setjmp/longjmp pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc. Signal the exception that simulates a longjmp back to the interpreter." + self halt: 'This should not be encountered now we use ceInvokeInterpreter!!!!'! - self halt: 'This should not be encountered now we use ceInvokeInterpreter!!!!'. - (aJumpBuf == reenterInterpreter - and: [returnValue ~= 2 "2 == returnToThreadSchedulingLoopVia:"]) ifTrue: - [self assert: (self isOnRumpCStack: cogit processor sp). - self assertValidExecutionPointe: instructionPointer r: framePointer s: stackPointer imbar: true line: nil]. - aJumpBuf returnValue: returnValue; signal! Item was changed: CoInterpreterPrimitives subclass: #CoInterpreterMT + instanceVariableNames: 'cogThreadManager checkThreadActivation maxWaitingPriority foreignCallbackPriority deferThreadSwitch disowningVMThread disownCount foreignCallbackProcessSlot willNotThreadWarnCount activeProcessAffined relinquishing processHasThreadId noThreadingOfGUIThread reenterThreadSchedulingLoop' - instanceVariableNames: 'cogThreadManager checkThreadActivation maxWaitingPriority foreignCallbackPriority deferThreadSwitch disowningVMThread disownCount foreignCallbackProcessSlot willNotThreadWarnCount activeProcessAffined relinquishing processHasThreadId noThreadingOfGUIThread' classVariableNames: 'DisownFlagsShift DisownVMForProcessorRelinquish LockGUIThreadFlag LockGUIThreadShift OwnVMForeignThreadFlag ProcessUnaffinedOnDisown ReturnToThreadSchedulingLoop VMAlreadyOwnedHenceDoNotDisown' poolDictionaries: 'VMThreadingConstants' category: 'VMMaker-Multithreading'! Item was added: + ----- Method: CoInterpreterMT>>_longjmp:_: (in category 'cog jit support') ----- + _longjmp: aJumpBuf _: returnValue + "Hack simulation of _setjmp/_longjmp, intended to invoke the most minimal setjmp/longjmp + pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc. + Signal the exception that simulates a longjmp back to the interpreter." + + self assert: aJumpBuf == reenterThreadSchedulingLoop. + aJumpBuf returnValue: returnValue; signal! Item was changed: ----- Method: CoInterpreterMT>>initializeInterpreter: (in category 'initialization') ----- initializeInterpreter: bytesToShift super initializeInterpreter: bytesToShift. foreignCallbackProcessSlot := (objectMemory lengthOf: objectMemory specialObjectsOop) > ForeignCallbackProcess ifTrue: [ForeignCallbackProcess] + ifFalse: [NilObject]. + self cCode: '' inSmalltalk: + [reenterThreadSchedulingLoop := ReenterThreadSchedulingLoop new]. + ! - ifFalse: [NilObject]! Item was added: + ----- Method: CoInterpreterMT>>initializeProcessorStackForSimulation: (in category 'initialization') ----- + initializeProcessorStackForSimulation: vmThread + + self cCode: [] inSmalltalk: + [| range | + range := self cStackRangeForThreadIndex: vmThread index. + cogit processor + setFramePointer: range last + stackPointer: range last - 32]! Item was changed: ----- Method: CoInterpreterMT>>mapInterpreterOops (in category 'object memory support') ----- mapInterpreterOops "Map all oops in the interpreter's state to their new values during garbage collection or a become: operation." "Assume: All traced variables contain valid oops." super mapInterpreterOops. "Per-thread state; trace each thread's own newMethod and stack of awol processes." 1 to: cogThreadManager getNumThreads do: [:i| | vmThread | vmThread := cogThreadManager vmThreadAt: i. vmThread state ifNotNil: [(vmThread newMethodOrNull notNil and: [objectMemory shouldRemapOop: vmThread newMethodOrNull]) ifTrue: [vmThread newMethodOrNull: (objectMemory remapObj: vmThread newMethodOrNull)]. 0 to: vmThread awolProcIndex - 1 do: [:j| (objectMemory shouldRemapOop: (vmThread awolProcesses at: j)) ifTrue: + [vmThread awolProcesses at: j put: (objectMemory remapObj: (vmThread awolProcesses at: j))]]]]! - [vmThread awolProcesses at: j put: (objectMemory remap: (vmThread awolProcesses at: j))]]]]! Item was changed: ----- Method: CoInterpreterMT>>returnToSchedulingLoopAndReleaseVMOrWakeThread:source: (in category 'process primitive support') ----- returnToSchedulingLoopAndReleaseVMOrWakeThread: vmThread source: source self cCode: [self flag: 'this is just for debugging. Note the current C stack pointers'. cogThreadManager currentVMThread cStackPointer: CStackPointer; cFramePointer: CFramePointer] inSmalltalk: [| range | range := self cStackRangeForThreadIndex: cogThreadManager getVMOwner. self assert: (range includes: CStackPointer). self assert: (range includes: CFramePointer)]. self recordThreadSwitchTo: (vmThread ifNotNil: [vmThread index] ifNil: [0]) source: source. vmThread ifNotNil: [cogThreadManager wakeVMThreadFor: vmThread index] ifNil: [cogThreadManager releaseVM]. + "I am not frightened of flying. + Any value will do. I don't mind. + Why should I be frightened of flying? + There's no reason for it." + self _longjmp: reenterThreadSchedulingLoop _: 1 ! - "2 implies returning to the threadSchedulingLoop." - self shouldBeImplemented. - "was: self _longjmp: savedReenterInterpreter _: ReturnToThreadSchedulingLoop. - But now we have ceInvokeInterpret, not reenterInterpreter, so we have to fugure out a new way in..."! Item was changed: ----- Method: CoInterpreterMT>>threadSchedulingLoop: (in category 'vm scheduling') ----- threadSchedulingLoop: vmThread "Enter a loop attempting to run the VM with the highest priority process and blocking on the thread's OS semaphore when unable to run that process. + This version is for simulation only, simulating the longjmp back to the real + threadSchedulingLoopImplementation: through exception handling." + + + self initializeProcessorStackForSimulation: vmThread. + [([self threadSchedulingLoopImplementation: vmThread] + on: ReenterThreadSchedulingLoop + do: [:ex| ex return: ex returnValue]) = ReenterThreadSchedulingLoop] whileTrue! - We will return to this via threadSwitchIfNecessary:from: which is called in the - middle of transferTo:from: once the active process has been stored in the scheduler." - - | attemptToRun | - - [self assert: vmThread state = CTMAssignableOrInVM. - attemptToRun := false. - (cogThreadManager getVMOwner = vmThread index) - ifTrue: [attemptToRun := true] - ifFalse: - [(cogit tryLockVMToIndex: vmThread index) ifTrue: - ["If relinquishing is true, then primitiveRelinquishProcessor has disowned the - VM and only a returning call or callback should take ownership in that case." - relinquishing - ifTrue: [cogThreadManager releaseVM] - ifFalse: [attemptToRun := true]]]. - attemptToRun ifTrue: - [self tryToExecuteSmalltalk: vmThread]. - (cogThreadManager testVMOwnerIs: vmThread index) ifFalse: - [cogThreadManager waitForWork: vmThread]. - true] whileTrue! Item was added: + ----- Method: CoInterpreterMT>>threadSchedulingLoopImplementation: (in category 'vm scheduling') ----- + threadSchedulingLoopImplementation: vmThread + "Enter a loop attempting to run the VM with the highest priority process and + blocking on the thread's OS semaphore when unable to run that process. + We will return to this via threadSwitchIfNecessary:from: which is called in the + middle of transferTo:from: once the active process has been stored in the scheduler." + + | attemptToRun | + + self _setjmp: reenterThreadSchedulingLoop. + [self assert: vmThread state = CTMAssignableOrInVM. + attemptToRun := false. + (cogThreadManager getVMOwner = vmThread index) + ifTrue: [attemptToRun := true] + ifFalse: + [(cogit tryLockVMToIndex: vmThread index) ifTrue: + ["If relinquishing is true, then primitiveRelinquishProcessor has disowned the + VM and only a returning call or callback should take ownership in that case." + relinquishing + ifTrue: [cogThreadManager releaseVM] + ifFalse: [attemptToRun := true]]]. + attemptToRun ifTrue: + [self tryToExecuteSmalltalk: vmThread]. + (cogThreadManager testVMOwnerIs: vmThread index) ifFalse: + [cogThreadManager waitForWork: vmThread]. + true] whileTrue! Item was added: + ----- Method: CogVMSimulator>>_longjmp:_: (in category 'multi-threading simulation switch') ----- + _longjmp: aJumpBuf _: returnValue + "This method includes or excludes CoInterpreterMT methods as required. + Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate" + + ^self perform: #'_longjmp:_:' + withArguments: {aJumpBuf. returnValue} + inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was added: + Notification subclass: #ReenterThreadSchedulingLoop + instanceVariableNames: 'returnValue' + classVariableNames: '' + poolDictionaries: '' + category: 'VMMaker-JITSimulation'! Item was changed: ----- Method: StackInterpreter>>_setjmp: (in category 'primitive support') ----- _setjmp: aJumpBuf "Hack simulation of _setjmp/_longjmp, intended to invoke the most minimal setjmp/longjmp + pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc." - pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc. - Assign to reenterInterpreter the exception that when raised simulates a _longjmp back to the interpreter." + self assert: (#(ReenterInterpreter ReenterThreadSchedulingLoop) includes: aJumpBuf class name). - reenterInterpreter := ReenterInterpreter new returnValue: 0; yourself. ^0! Item was changed: ----- Method: StackInterpreter>>initializeInterpreter: (in category 'initialization') ----- initializeInterpreter: bytesToShift "Initialize Interpreter state before starting execution of a new image." interpreterProxy := self sqGetInterpreterProxy. self dummyReferToProxy. objectMemory initializeObjectMemory: bytesToShift. self checkAssumedCompactClasses. self initializeExtraClassInstVarIndices. method := newMethod := objectMemory nilObject. self cCode: '' inSmalltalk: [breakSelectorLength ifNil: [breakSelectorLength := objectMemory minSmallInteger]. + breakLookupClassTag ifNil: [breakLookupClassTag := -1]. + reenterInterpreter := ReenterInterpreter new]. - breakLookupClassTag ifNil: [breakLookupClassTag := -1]]. methodDictLinearSearchLimit := 8. self initialCleanup. LowcodeVM ifTrue: [ self setupNativeStack ]. profileSemaphore := profileProcess := profileMethod := objectMemory nilObject. interruptKeycode := 2094. "cmd-. as used for Mac but no other OS" [globalSessionID = 0] whileTrue: [globalSessionID := self cCode: [(self time: #NULL) + self ioMSecs] inSmalltalk: [(Random new next * (SmallInteger maxVal min: 16rFFFFFFFF)) asInteger]]. metaAccessorDepth := -2. super initializeInterpreter: bytesToShift! From eliot.miranda at gmail.com Fri Oct 30 18:39:14 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri, 30 Oct 2020 11:39:14 -0700 Subject: [Vm-dev] nuSqueak source In-Reply-To: <3775fc1e-a9c6-efa0-965d-caa8ee3a3b7d@gmail.com> References: <3d334810-b53c-9677-b213-4ff7ecef2164@gmail.com> <3775fc1e-a9c6-efa0-965d-caa8ee3a3b7d@gmail.com> Message-ID: > On Oct 30, 2020, at 4:39 AM, K K Subbu wrote: > > On 29/10/20 9:01 pm, Eliot Miranda wrote: >> The OS can impose radically different constraints on the JIT. In Mankato it is impossible to derive an executable region from mmap that is at the same time writable. On MacOS it is possible, but the VM needs a capability conveyed through its Info.plist and baked in when the app bundle is signed. > > doesn't PROT_EXEC imply PROT_READ? a region with write|exec would essentially be equivalent to an unprotected one. I believe not. I think an instruction fetch is different at the bus level from a normal read. I could be wrong. There are strong security reasons why this should be the case. The manual page says The protections (region accessibility) are specified in the prot argument by or'ing the following values: PROT_NONE Pages may not be accessed. PROT_READ Pages may be read. PROT_WRITE Pages may be written. PROT_EXEC Pages may be executed. Note that, due to hardware limitations, on some platforms PROT_WRITE may imply PROT_READ, and PROT_READ may imply PROT_EXEC. Portable programs should not rely on these flags being separately enforcable. Note that it does *not* say that due to hardware limitations PROT_EXEC may imply PROT_READ :-) >> Other linuxes for Pi4 May impose different constraints. As I only have these two variants I need your help in dealing with differing constraints on these other platforms. > > I don't have a RP 4 board to test the Ubuntu aarch64 (COVID-19 lockdown constraints). Sorry :-(. They're inexpensive and fun. > > Regards .. Subbu From Das.Linux at gmx.de Fri Oct 30 18:54:58 2020 From: Das.Linux at gmx.de (Tobias Pape) Date: Fri, 30 Oct 2020 19:54:58 +0100 Subject: [Vm-dev] nuSqueak source In-Reply-To: References: <3d334810-b53c-9677-b213-4ff7ecef2164@gmail.com> <3775fc1e-a9c6-efa0-965d-caa8ee3a3b7d@gmail.com> Message-ID: <1C0C4AFC-40C0-4B82-BFC7-F44EB38A704D@gmx.de> > On 30. Oct 2020, at 19:39, Eliot Miranda wrote: > >>> The OS can impose radically different constraints on the JIT. In Mankato it is impossible to derive an executable region from mmap that is at the same time writable. On MacOS it is possible, but the VM needs a capability conveyed through its Info.plist and baked in when the app bundle is signed. > In OpenBSD, your _filesystem_ must allow write&exectute-pages otherwise your program is killed when trying to mprotect a page w&x. -t From commits at source.squeak.org Sat Oct 31 01:33:56 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 31 Oct 2020 01:33:56 0000 Subject: [Vm-dev] VM Maker: Cog-eem.424.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.424.mcz ==================== Summary ==================== Name: Cog-eem.424 Author: eem Time: 30 October 2020, 6:33:53.848366 pm UUID: bb913004-6fb8-4e7e-9c53-55153bb970db Ancestors: Cog-eem.423 MultiProcessor needs to save the register state after each execution in the doesNotUnderstand: so that the right state can be restored on entry to the doesNotUnderstand: wrapper. =============== Diff against Cog-eem.423 =============== Item was added: + ----- Method: BochsIA32Alien>>setIntegerRegisterState: (in category 'accessing-abstract') ----- + setIntegerRegisterState: newState + "Set the state reasonably efficiently, for the benefit of the MultiProcessor." + self eax: (newState at: 1). + self ebx: (newState at: 2). + self ecx: (newState at: 3). + self edx: (newState at: 4). + self esp: (newState at: 5). + self ebp: (newState at: 6). + self esi: (newState at: 7). + self edi: (newState at: 8). + self eip: (newState at: 9). + self eflags: (newState at: 10)! Item was added: + ----- Method: BochsX64Alien>>setIntegerRegisterState: (in category 'accessing-abstract') ----- + setIntegerRegisterState: newState + "Set the state reasonably efficiently, for the benefit of the MultiProcessor." + self rax: (newState at: 1). + self rbx: (newState at: 2). + self rcx: (newState at: 3). + self rdx: (newState at: 4). + self rsp: (newState at: 5). + self rbp: (newState at: 6). + self rsi: (newState at: 7). + self rdi: (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 rip: (newState at: 17). + self rflags: (newState at: 18)! Item was changed: ----- Method: MultiProcessor>>doesNotUnderstand: (in category 'message forwarding') ----- doesNotUnderstand: aMessage "Forward a message to the actual processor, managing a thread-switch if necessary. Catch ProcessorSimulationTraps and raise them outside of the critical section to avoid deadlock when reentering the VM from a trap and switching threads in the run-time." | selector result trap contextInCritical | selector := aMessage selector. (guardedProcessorProtocol includes: selector) ifFalse: [^(unguardedProcessorProtocol includes: selector) ifTrue: [processor perform: selector withArguments: aMessage arguments] ifFalse: [super doesNotUnderstand: aMessage]]. + [mutex critical: + [contextInCritical := thisContext. + owner ~~ mutex owningProcess ifTrue: + [(registerState at: (owner := mutex owningProcess) ifAbsent: nil) + ifNil: [coInterpreter initializeProcessorForThreadIndex: (threadIndex := threadIndex + 1)] + ifNotNil: [:newState| processor setIntegerRegisterState: newState]]. + result := processor perform: selector withArguments: aMessage arguments. + registerState at: owner put: processor integerRegisterState]] + on: ProcessorSimulationTrap, Error, AssertionFailure + do: [:ex| + ex isProcessorSimulationTrap ifFalse: + [ex pass]. + "Alas things are not so simple with ARMv8 ldp/stp... + The comments in these two methods explain..." + (self isAboutToReturn: ex signalerContext) ifFalse: + [self saveStackFor: ex signalerContext + above: contextInCritical + homeContext: thisContext home]. + trap := ex]. - result := [mutex critical: - [contextInCritical := thisContext. - owner ~~ mutex owningProcess ifTrue: - [owner ifNotNil: - [registerState at: owner put: processor registerState]. - (registerState at: (owner := mutex owningProcess) ifAbsent: nil) - ifNil: [coInterpreter initializeProcessorForThreadIndex: (threadIndex := threadIndex + 1)] - ifNotNil: [:newState| processor setRegisterState: newState]]. - processor perform: selector withArguments: aMessage arguments]] - on: ProcessorSimulationTrap, Error, AssertionFailure - do: [:ex| - ex isProcessorSimulationTrap ifFalse: - [ex pass]. - "Alas things are not so simple with ARMv8 ldp/stp... - The comments in these two methods explain..." - (self isAboutToReturn: ex signalerContext) ifFalse: - [self saveStackFor: ex signalerContext - above: contextInCritical - homeContext: thisContext home]. - trap := ex]. ^trap ifNil: [result] ifNotNil: [trap signal ifNotNil: [:resultOfSignal| resultOfSignal == self ifTrue: [processor] ifFalse: [resultOfSignal]]]! Item was changed: ----- Method: MultiProcessor>>processor: (in category 'initialize-release') ----- processor: aProcessor processor := aProcessor. "Try and compute messages such as those in the execution category, for which we should thread-switch, and those, in accessing, for which we don't need to. Better would be to use pragmas to label those messages we should thread-switch on." guardedProcessorProtocol := Set new. unguardedProcessorProtocol := Set new. (aProcessor class withAllSuperclasses copyUpThrough: CogProcessorAlien) do: [:class| unguardedProcessorProtocol addAll: class selectors. + #(execution #'accessing-abstract') do: - #(execution) do: [ :category| guardedProcessorProtocol addAll: (class organization listAtCategoryNamed: category)]]. unguardedProcessorProtocol removeAll: guardedProcessorProtocol! From commits at source.squeak.org Sat Oct 31 01:34:43 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 31 Oct 2020 01:34:43 0000 Subject: [Vm-dev] VM Maker: VMMakerUI-eem.32.mcz Message-ID: Eliot Miranda uploaded a new version of VMMakerUI to project VM Maker: http://source.squeak.org/VMMaker/VMMakerUI-eem.32.mcz ==================== Summary ==================== Name: VMMakerUI-eem.32 Author: eem Time: 30 October 2020, 6:34:41.325848 pm UUID: febcf45e-d6a8-4561-80b2-47509f37750a Ancestors: VMMakerUI-eem.31 revert back to the simpler simulateLeafCallOf: =============== Diff against VMMakerUI-eem.31 =============== Item was changed: ----- Method: Cogit>>setClickStepBreakBlock (in category '*VMMakerUI-user interface') ----- setClickStepBreakBlock "Set the break block to present a confirmer, breaking if true, and restoring the previous break block. If an open debugger on the receiver can be found, proceed it." | previousBreakBlock previousAtEachStepBlock previousBreakPC previousSingleStep previousClickConfirm result | (breakBlock isNil or: [breakBlock method ~~ thisContext method]) ifTrue: [previousBreakBlock := breakBlock. previousAtEachStepBlock := coInterpreter atEachStepBlock. previousBreakPC := breakPC. previousSingleStep := singleStep. previousClickConfirm := clickConfirm. breakBlock := [:ign| (processor pc ~= previousBreakPC and: [(result := self promptClickStep) == true]) ifTrue: [false] ifFalse: [breakBlock := previousBreakBlock. coInterpreter atEachStepBlock: previousAtEachStepBlock. breakPC := previousBreakPC. singleStep := previousSingleStep. clickConfirm := previousClickConfirm. true]]. coInterpreter atEachStepBlock: [previousAtEachStepBlock value. (coInterpreter localIP ~= previousBreakPC and: [(result := self promptClickStep) == true]) ifFalse: [breakBlock := previousBreakBlock. coInterpreter atEachStepBlock: previousAtEachStepBlock. breakPC := previousBreakPC. singleStep := previousSingleStep. clickConfirm := previousClickConfirm. self halt]]. singleStep := breakPC := clickConfirm := result ~~ #proceed]. (World submorphs detect: [:m| m model isDebugger and: [(m model interruptedProcess suspendedContext findContextSuchThat: [:ctxt| (ctxt receiver == self and: [ctxt selector == #simulateCogCodeAt: + or: [ctxt selector == #simulateLeafCallOf:]]) - or: [ctxt selector == #simulateLeafCallOf:marshaling:]]) or: [ctxt receiver == coInterpreter and: [ctxt selector == #interpret]]]) notNil]] ifNone: []) ifNotNil: [:debuggerWindow| WorldState addDeferredUIMessage: [debuggerWindow model proceed]]! From commits at source.squeak.org Sat Oct 31 01:43:31 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 31 Oct 2020 01:43:31 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2866.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2866.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2866 Author: eem Time: 30 October 2020, 6:43:21.049089 pm UUID: 966fa589-237e-4e2f-a292-bb824bf3be58 Ancestors: VMMaker.oscog-eem.2865 Cogit simulation: Revert back to the simple simulateLeafCallOf:. Neither handleCallOrJumpSimulationTrap: nor simulateLeafCallOf: have any business doing *anything* to the stack, unless handleCallOrJumpSimulationTrap: is mimicing a funciton activation, so *not* on invoking interpret through ceInvokeInterpreter/ceReturnToInterpreterTrampoline! CoInterpreterMT: Some simplification and rationalization of the code. Get rid of ceUnlockVMOwner. Refactor the ReenterFoo exceptions under a common parent. Add ReenterThreadSchedulingLoop to do just that. Make sure primitiveFunctionPointer is saved/restored (needed for Spur; or is it since faling after disowning is more than questionable). =============== Diff against VMMaker.oscog-eem.2865 =============== Item was changed: CoInterpreterPrimitives subclass: #CoInterpreterMT + instanceVariableNames: 'cogThreadManager checkThreadActivation maxWaitingPriority foreignCallbackPriority deferThreadSwitch disowningVMThread foreignCallbackProcessSlot willNotThreadWarnCount activeProcessAffined relinquishing processHasThreadId noThreadingOfGUIThread reenterThreadSchedulingLoop' - instanceVariableNames: 'cogThreadManager checkThreadActivation maxWaitingPriority foreignCallbackPriority deferThreadSwitch disowningVMThread disownCount foreignCallbackProcessSlot willNotThreadWarnCount activeProcessAffined relinquishing processHasThreadId noThreadingOfGUIThread reenterThreadSchedulingLoop' classVariableNames: 'DisownFlagsShift DisownVMForProcessorRelinquish LockGUIThreadFlag LockGUIThreadShift OwnVMForeignThreadFlag ProcessUnaffinedOnDisown ReturnToThreadSchedulingLoop VMAlreadyOwnedHenceDoNotDisown' poolDictionaries: 'VMThreadingConstants' category: 'VMMaker-Multithreading'! Item was changed: + ----- Method: CoInterpreterMT>>_longjmp:_: (in category 'simulation') ----- - ----- Method: CoInterpreterMT>>_longjmp:_: (in category 'cog jit support') ----- _longjmp: aJumpBuf _: returnValue "Hack simulation of _setjmp/_longjmp, intended to invoke the most minimal setjmp/longjmp pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc. Signal the exception that simulates a longjmp back to the interpreter." self assert: aJumpBuf == reenterThreadSchedulingLoop. aJumpBuf returnValue: returnValue; signal! Item was removed: - ----- Method: CoInterpreterMT>>assertCStackPointersBelongToCurrentVMOwner (in category 'simulation') ----- - assertCStackPointersBelongToCurrentVMOwner - - | range | - range := self cStackRangeForCurrentVMOwner. - self assert: (range notNil "VM is owned" - and: [(range includes: CStackPointer) - and: [range includes: CFramePointer]])! Item was changed: ----- Method: CoInterpreterMT>>assertSaneThreadAndProcess (in category 'debug support') ----- assertSaneThreadAndProcess + self assert: cogThreadManager vmIsOwned. - self assert: cogThreadManager getVMOwner > 0. self assert: cogThreadManager currentVMThread state = CTMAssignableOrInVM. self assert: (objectMemory fetchPointer: MyListIndex ofObject: self activeProcess) = objectMemory nilObject! Item was removed: - ----- Method: CoInterpreterMT>>cStackRangeForCurrentVMOwner (in category 'simulation') ----- - cStackRangeForCurrentVMOwner - - ^self cStackRangeForThreadIndex: cogThreadManager getVMOwner! Item was changed: ----- Method: CoInterpreterMT>>checkVMOwnershipFromHeartbeat (in category 'process primitive support') ----- checkVMOwnershipFromHeartbeat "Check whether the VM is unowned and needs to set a thread running to try and own it. Do not attempt this if the image doesn't have a threadId inst var in Process; the VM can't thread these images." self sqLowLevelMFence. (processHasThreadId + and: [cogThreadManager vmIsUnowned]) ifTrue: - and: [cogThreadManager getVMOwner = 0]) ifTrue: [cogThreadManager ensureRunningVMThread: relinquishing]! Item was changed: ----- Method: CoInterpreterMT>>disownVM: (in category 'vm scheduling') ----- disownVM: flags "Release the VM to other threads and answer the current thread's index. Currently valid flags: DisownVMLockOutFullGC - prevent fullGCs while this thread disowns the VM DisownVMForFFICall - informs the VM that it is entering an FFI call DisownVMForThreading - informs the VM that it is entering an FFI call etc during which threading should be permitted OwnVMForeignThreadFlag - indicates lowest-level entry from a foreign thread - not to be used explicitly by clients - only set by ownVMFromUnidentifiedThread VMAlreadyOwnedHenceDoNotDisown - indicates an ownVM from a callback was made when the vm was still owned. - not to be used explicitly by clients - only set by ownVMFromUnidentifiedThread This is the entry-point for plugins and primitives that wish to release the VM while performing some operation that may potentially block, and for callbacks returning back to some blocking operation. If this thread does not reclaim the VM before- hand then when the next heartbeat occurs the thread manager will schedule a thread to acquire the VM which may start running the VM in place of this thread. N.B. Most of the state needed to resume after preemption is set in preemptDisowningThread." | vmThread result | self assert: self successful. cogit recordEventTrace ifTrue: [self recordTrace: TraceDisownVM thing: (objectMemory integerObjectOf: flags) source: 0]. processHasThreadId ifFalse: [willNotThreadWarnCount < 10 ifTrue: [self print: 'warning: VM parameter 48 indicates Process doesn''t have threadId; VM will not thread'; cr. willNotThreadWarnCount := willNotThreadWarnCount + 1]]. vmThread := cogThreadManager currentVMThread. (flags anyMask: VMAlreadyOwnedHenceDoNotDisown) ifTrue: [disowningVMThread := vmThread. vmThread state: CTMUnavailable. ^0]. self cCode: '' inSmalltalk: [| range | range := self cStackRangeForThreadIndex: vmThread index. self assert: (range includes: CStackPointer). self assert: (range includes: CFramePointer)]. (flags anyMask: DisownVMForProcessorRelinquish) ifTrue: [| proc | (proc := objectMemory splObj: foreignCallbackProcessSlot) ~= objectMemory nilObject ifTrue: [foreignCallbackPriority := self quickFetchInteger: PriorityIndex ofObject: proc]. relinquishing := true. self sqLowLevelMFence]. (flags anyMask: DisownVMLockOutFullGC) ifTrue: [objectMemory incrementFullGCLock]. (noThreadingOfGUIThread and: [self inGUIThread]) ifTrue: [^vmThread index + LockGUIThreadFlag + (activeProcessAffined ifTrue: [0] ifFalse: [ProcessUnaffinedOnDisown]) + (flags << DisownFlagsShift)]. - disownCount := disownCount + 1. disowningVMThread := vmThread. "self cr; cr; print: 'disownVM Csp: '; printHex: vmThread cStackPointer; cr. (0 to: 16 by: 4) do: [:offset| self print: ' *(esp+'; printNum: offset; print: ': '; printHex: (stackPages longAt: cogit processor sp + offset); cr]. cogit processor printIntegerRegistersOn: Transcript." "OwnVMForeignThreadFlag indicates lowest-level of entry by a foreign thread. If that's where we are then release the vmThread. Otherwise indicate the vmThread is off doing something outside of the VM." (flags anyMask: OwnVMForeignThreadFlag) ifTrue: ["I don't think this is quite right. Josh's use case is creating some foreign thread and then registering it with the VM. That's not the same as binding a process to a foreign thread given that the foreign callback process is about to terminate anyway (it is returning from a callback here). So do we need an additional concept, that of a vmThread being either of the set known to the VM or floating?" self flag: 'issue with registering foreign threads with the VM'. (self isBoundProcess: self activeProcess) ifFalse: [cogThreadManager unregisterVMThread: vmThread]] ifFalse: [vmThread state: CTMUnavailable]. result := vmThread index + (activeProcessAffined ifTrue: [0] ifFalse: [ProcessUnaffinedOnDisown]) + (flags << DisownFlagsShift). cogThreadManager releaseVM. ^result! Item was removed: - ----- Method: CoInterpreterMT>>enterSmalltalkExecutive (in category 'initialization') ----- - enterSmalltalkExecutive - "Main entry-point into the interpreter at each execution level, where an - execution level is either the start of execution or reentry for a callback." - - "Simulation of the setjmp in enterSmalltalkExecutiveImplementation for reentry - into interpreter. Simulation of the register state switch on thread switch." - | vmo tlti thisActivationsSP thisActivationsFP retVal | - [vmo := cogThreadManager getVMOwner. - tlti := cogThreadManager ioGetThreadLocalThreadIndex. - self assert: vmo = tlti. - thisActivationsSP := cogit processor sp. - thisActivationsFP := cogit processor fp. - retVal := [self enterSmalltalkExecutiveImplementation] - on: ReenterInterpreter - do: [:ex| - vmo := cogThreadManager getVMOwner. - tlti := cogThreadManager ioGetThreadLocalThreadIndex. - self assert: (ex returnValue = ReturnToThreadSchedulingLoop - or: [vmo = tlti]). - ex return: ex returnValue]. - "We must cut back the stack pointers on return to mimic the longjmp." - cogit processor - setFramePointer: thisActivationsFP - stackPointer: thisActivationsSP. - retVal = ReturnToInterpreter] whileTrue! Item was changed: ----- Method: CoInterpreterMT>>inGUIThread (in category 'vm scheduling') ----- inGUIThread "The first thread is assumed to be the GUI thread, the VM thread that expects to receive window events, etc. This might appear to invite race conditions but it is only to be used to decide whether to not give up the VM from the GUI thread (see disownVM:)." self assert: noThreadingOfGUIThread. + ^cogThreadManager vmOwnerIs: 1! - ^cogThreadManager getVMOwner = 1! Item was changed: ----- Method: CoInterpreterMT>>initialize (in category 'initialization') ----- initialize super initialize. relinquishing := checkThreadActivation := deferThreadSwitch := false. + foreignCallbackPriority := maxWaitingPriority := willNotThreadWarnCount := 0! - foreignCallbackPriority := maxWaitingPriority := disownCount := willNotThreadWarnCount := 0! Item was changed: ----- Method: CoInterpreterMT>>markAndTraceInterpreterOops: (in category 'object memory support') ----- markAndTraceInterpreterOops: fullGCFlag + "Override to mark the awolProcesses" - "Mark and trace all oops in the interpreter's state." - "Assume: All traced variables contain valid oops. - N.B. Don't trace messageSelector and lkupClass; these are ephemeral, live - only during message lookup and because createActualMessageTo will not - cause a GC these cannot change during message lookup." - | oop | - "Must mark stack pages first to initialize the per-page trace - flags for full garbage collect before any subsequent tracing." - self markAndTraceStackPages: fullGCFlag. - self markAndTraceTraceLog. - self markAndTracePrimTraceLog. - objectMemory markAndTrace: objectMemory specialObjectsOop. "also covers nilObj, trueObj, falseObj, and compact classes" - (objectMemory isImmediate: newMethod) ifFalse: - [objectMemory markAndTrace: newMethod]. - self traceProfileState. - tempOop = 0 ifFalse: [objectMemory markAndTrace: tempOop]. - tempOop2 = 0 ifFalse: [objectMemory markAndTrace: tempOop2]. + super markAndTraceInterpreterOops: fullGCFlag. - 1 to: objectMemory remapBufferCount do: - [:i| - oop := objectMemory remapBuffer at: i. - (objectMemory isIntegerObject: oop) ifFalse: - [objectMemory markAndTrace: oop]]. - "Callback support - trace suspended callback list - will be made per-thread soon" - 1 to: jmpDepth do: - [:i| - oop := suspendedCallbacks at: i. - (objectMemory isIntegerObject: oop) ifFalse: - [objectMemory markAndTrace: oop]. - oop := suspendedMethods at: i. - (objectMemory isIntegerObject: oop) ifFalse: - [objectMemory markAndTrace: oop]]. - "Per-thread state; trace each thread's own newMethod and stack of awol processes." 1 to: cogThreadManager getNumThreads do: [:i| | vmThread | vmThread := cogThreadManager vmThreadAt: i. + vmThread state ifNotNil: + [vmThread newMethodOrNull ifNotNil: - vmThread state notNil ifTrue: - [vmThread newMethodOrNull notNil ifTrue: [objectMemory markAndTrace: vmThread newMethodOrNull]. 0 to: vmThread awolProcIndex - 1 do: + [:j| objectMemory markAndTrace: (vmThread awolProcesses at: j)]]]! - [:j| - objectMemory markAndTrace: (vmThread awolProcesses at: j)]]]! Item was changed: ----- Method: CoInterpreterMT>>ownVM: (in category 'vm scheduling') ----- ownVM: threadIndexAndFlags "This is the entry-point for plugins and primitives that wish to reacquire the VM after having released it via disownVM or callbacks that want to acquire it without knowing their ownership status. This call will block until the VM is owned by the current thread or an error occurs. The argument should be the value answered by disownVM, or 0 for callbacks that don't know if they have disowned or not. This is both an optimization to avoid having to query thread- local storage for the current thread's index (since it can easily keep it in some local variable), and a record of when an unbound process becomes affined to a thread for the dynamic extent of some operation. + Answer 0 if the current thread is known to the VM (and on return owns the VM). - Answer 0 if the current thread is known to the VM. Answer 1 if the current thread is unknown to the VM and takes ownership. Answer -1 if the current thread is unknown to the VM and fails to take ownership." + | threadIndex flags vmThread | - | threadIndex flags vmThread myProc activeProc sched | - threadIndexAndFlags = 0 ifTrue: [^self ownVMFromUnidentifiedThread]. + threadIndex := threadIndexAndFlags bitAnd: ThreadIdMask. flags := threadIndexAndFlags >> DisownFlagsShift. + (flags anyMask: DisownVMForProcessorRelinquish) ifTrue: + ["Presumably we have nothing to do; this primitive is typically called from the + background process. So we should /not/ try and activate any threads in the + pool; they will waste cycles finding there is no runnable process, and will + cause a VM abort if no runnable process is found. But we /do/ want to allow + FFI calls that have completed, or callbacks a chance to get into the VM; they + do have something to do. DisownVMForProcessorRelinquish indicates this." + relinquishing := false. - [relinquishing := false. self sqLowLevelMFence]. + + (flags anyMask: DisownVMLockOutFullGC) ifTrue: + [objectMemory decrementFullGCLock]. + (threadIndexAndFlags anyMask: LockGUIThreadFlag) ifTrue: [self assert: (noThreadingOfGUIThread and: [self inGUIThread]). + self assert: disowningVMThread isNil. - self assert: disowningVMThread = nil. - (flags anyMask: DisownVMLockOutFullGC) ifTrue: - [objectMemory decrementFullGCLock]. cogit recordEventTrace ifTrue: [self recordTrace: TraceOwnVM thing: ConstZero source: 0]. ^0]. vmThread := cogThreadManager acquireVMFor: threadIndex. - disownCount := disownCount - 1. - (flags anyMask: DisownVMLockOutFullGC) ifTrue: - [objectMemory decrementFullGCLock]. disowningVMThread ifNotNil: [vmThread = disowningVMThread ifTrue: + [self cCode: '' inSmalltalk: + [| range | range := self cStackRangeForThreadIndex: threadIndex. + self assert: ((range includes: CStackPointer) and: [range includes: CFramePointer])]. - [self cCode: '' - inSmalltalk: - [| range | - range := self cStackRangeForThreadIndex: threadIndex. - self assert: (range includes: CStackPointer). - self assert: (range includes: CFramePointer)]. self assert: self successful. self assert: (objectMemory fetchPointer: MyListIndex ofObject: self activeProcess) = objectMemory nilObject. disowningVMThread := nil. cogit recordEventTrace ifTrue: [self recordTrace: TraceOwnVM thing: ConstOne source: 0]. ^0]. "if not preempted we're done." self preemptDisowningThread]. + "We've been preempted; we must restore state and update the threadId in our process, and may have to put the active process to sleep." + self restoreVMStateFor: vmThread threadIndexAndFlags: threadIndexAndFlags. + - sched := self schedulerPointer. - activeProc := objectMemory fetchPointer: ActiveProcessIndex ofObject: sched. - (threadIndexAndFlags anyMask: OwnVMForeignThreadFlag) - ifTrue: - [self assert: foreignCallbackProcessSlot == ForeignCallbackProcess. - myProc := objectMemory splObj: foreignCallbackProcessSlot. - self assert: myProc ~= objectMemory nilObject. - objectMemory splObj: foreignCallbackProcessSlot put: objectMemory nilObject] - ifFalse: [myProc := cogThreadManager popAWOLProcess: vmThread]. - self assert: activeProc ~= myProc. - (activeProc ~= objectMemory nilObject - and: [(objectMemory fetchPointer: MyListIndex ofObject: activeProc) = objectMemory nilObject]) ifTrue: - [self putToSleep: activeProc yieldingIf: preemptionYields]. - self assert: (objectMemory fetchPointer: MyListIndex ofObject: myProc) = (objectMemory splObj: ProcessInExternalCodeTag). - objectMemory - storePointer: ActiveProcessIndex ofObject: sched withValue: myProc; - storePointerUnchecked: MyListIndex ofObject: myProc withValue: objectMemory nilObject. - "Only unaffine if the process was affined at this level and did not become bound in the interim." - ((threadIndexAndFlags anyMask: ProcessUnaffinedOnDisown) - and: [(self isBoundProcess: myProc) not]) ifTrue: - [self setOwnerIndexOfProcess: myProc to: 0 bind: false]. - self initPrimCall. - self externalSetStackPageAndPointersForSuspendedContextOfProcess: myProc. - "If this primitive is called from machine code maintain the invariant that the return pc - of an interpreter callee calling a machine code caller is ceReturnToInterpreterPC." - (vmThread inMachineCode - and: [instructionPointer >= objectMemory startOfMemory]) ifTrue: - [self iframeSavedIP: framePointer put: instructionPointer. - instructionPointer := cogit ceReturnToInterpreterPC]. - newMethod := vmThread newMethodOrNull. - argumentCount := vmThread argumentCount. - vmThread newMethodOrNull: nil. - self cCode: '' - inSmalltalk: - [| range | - range := self cStackRangeForThreadIndex: threadIndex. - self assert: (range includes: vmThread cStackPointer). - self assert: (range includes: vmThread cFramePointer)]. - self setCFramePointer: vmThread cFramePointer setCStackPointer: vmThread cStackPointer. - self assert: newMethod ~~ nil. cogit recordEventTrace ifTrue: [self recordTrace: TraceOwnVM thing: ConstTwo source: 0]. ^threadIndexAndFlags bitAnd: OwnVMForeignThreadFlag! Item was changed: ----- Method: CoInterpreterMT>>ownVMFromUnidentifiedThread (in category 'vm scheduling') ----- ownVMFromUnidentifiedThread "Attempt to take ownership from a thread that as yet doesn't know its index. This supports callbacks where the callback could originate from any thread. Answer 0 if the owning thread is known to the VM. Answer 1 if the owning thread is unknown to the VM and now owns the VM. Answer -1 if the owning thread is unknown to the VM and fails to own the VM. Answer -2 if the owning thread is unknown to the VM and there is no foreign callback process installed." | count threadIndex vmThread | (threadIndex := cogThreadManager ioGetThreadLocalThreadIndex) ~= 0 ifTrue: [ "this is a callback from a known thread" + (cogThreadManager vmOwnerIs: threadIndex) ifTrue: "the VM has not been disowned" - threadIndex = cogThreadManager getVMOwner ifTrue: "the VM has not been disowned" [self assert: (disowningVMThread isNil or: [disowningVMThread = self currentVMThread]). disowningVMThread := nil. self currentVMThread state: CTMAssignableOrInVM. ^VMAlreadyOwnedHenceDoNotDisown]. ^self ownVM: threadIndex]. foreignCallbackPriority = 0 ifTrue: [^-2]. count := 0. "If the current thread doesn't have an index it's new to the vm and we need to allocate a new threadInfo, failing if we can't. We also need a process in the foreignCallbackProcessSlot upon which to run the thread's eventual callback." [[cogit tryLockVMToIndex: cogThreadManager ioCurrentOSThread] whileFalse: [self waitingPriorityIsAtLeast: foreignCallbackPriority. cogThreadManager ioTransferTimeslice]. (objectMemory splObj: foreignCallbackProcessSlot) ~= objectMemory nilObject] whileFalse: [cogThreadManager releaseVM. (count := count + 1) > 1000 ifTrue: [^-2]. cogThreadManager ioMilliSleep: 1]. + vmThread := cogThreadManager unusedThreadInfo. "N.B. Keep the VM locked anonymously so that we reserve the non-nil ForeignCallbackProcess + for this thread, avoiding the race between competing foreign callbacks. The acquireVMFor: in + ownVM: will set the vmOwner to the actual index. So only unlock on failure." + vmThread ifNil: - for this thread, avoiding the race between competing foreign callbacks. The acquireVMFor: in - ownVM: will set the vmOwner to the actual index. So only unlock on failure." - vmThread isNil ifTrue: [cogThreadManager releaseVM. ^-1]. cogThreadManager setVMOwner: vmThread index. vmThread state: CTMWantingOwnership; priority: foreignCallbackPriority. cogThreadManager registerVMThread: vmThread. ^self ownVM: vmThread index + OwnVMForeignThreadFlag! Item was changed: ----- Method: CoInterpreterMT>>preemptDisowningThread (in category 'vm scheduling') ----- preemptDisowningThread "Set the relevant state for disowningVMThread so that it can resume after being preempted and set disowningVMThread to nil to indicate preemption. N.B. This should only be sent from checkPreemptionOfDisowningThread. There are essentially four things to do. a) save the VM's notion of the current C stack pointers; these are pointers into a thread's stack and must be saved and restored in thread switch. b) save the VM's notion of the current Smalltalk execution point. This is simply the suspend half of a process switch that saves the current context in the current process. c) add the process to the thread's set of AWOL processes so that the scheduler won't try to run the process while the thread has disowned the VM. d) save the in-primitive VM state, newMethod and argumentCount ownVM: will restore the VM context as of disownVM: from the above when it finds it has been preempted." | activeProc activeContext preemptedThread | self assert: disowningVMThread notNil. self assert: (disowningVMThread state = CTMUnavailable or: [disowningVMThread state = CTMWantingOwnership]). self cCode: '' inSmalltalk: [| range | range := self cStackRangeForThreadIndex: disowningVMThread index. self assert: (range includes: CStackPointer). self assert: (range includes: CFramePointer)]. cogit recordEventTrace ifTrue: [self recordTrace: TracePreemptDisowningThread thing: (objectMemory integerObjectOf: disowningVMThread index) source: 0]. disowningVMThread cStackPointer: CStackPointer. disowningVMThread cFramePointer: CFramePointer. activeProc := self activeProcess. self assert: (objectMemory fetchPointer: MyListIndex ofObject: activeProc) = objectMemory nilObject. objectMemory storePointer: MyListIndex ofObject: activeProc withValue: (objectMemory splObj: ProcessInExternalCodeTag). "The instructionPointer must be pushed because the convention for inactive stack pages is that the instructionPointer is top of stack. We need to know if this primitive is called from machine code because the invariant that the return pc of an interpreter callee calling a machine code caller is ceReturnToInterpreterPC must be maintained." self push: instructionPointer. self externalWriteBackHeadFramePointers. activeContext := self ensureFrameIsMarried: framePointer SP: stackPointer. objectMemory storePointer: SuspendedContextIndex ofObject: activeProc withValue: activeContext. "Since pushing the awol process may realloc disowningVMThread we need to reassign. But since we're going to nil disowningVMThread anyway we can assign to a local." preemptedThread := cogThreadManager pushAWOLProcess: activeProc on: disowningVMThread. disowningVMThread := nil. preemptedThread priority: (self quickFetchInteger: PriorityIndex ofObject: activeProc). (self ownerIndexOfProcess: activeProc) = 0 ifTrue: [self setOwnerIndexOfProcess: activeProc to: preemptedThread index bind: false] ifFalse: [self assert: (self ownerIndexOfProcess: activeProc) = preemptedThread index]. preemptedThread newMethodOrNull: newMethod; argumentCount: argumentCount; + primitiveFunctionPointer: primitiveFunctionPointer; inMachineCode: instructionPointer asUnsignedInteger <= objectMemory startOfMemory! Item was changed: ----- Method: CoInterpreterMT>>primitiveProcessBindToThreadId (in category 'process primitives') ----- primitiveProcessBindToThreadId "Attempt to bind the receiver to the thread with the id of the argument or nil, where the receiver is a Process. If successful the VM will ensure that there are at least id many threads active." | aProcess id ec | self cCode: [] inSmalltalk: [cogThreadManager isNil ifTrue: [^self primitiveFail]]. id := self stackTop. aProcess := self stackValue: 1. ((id = objectMemory nilObject or: [(objectMemory isIntegerObject: id) and: [(objectMemory integerValueOf: id) >= 0]]) and: [(objectMemory isPointers: aProcess) and: [(objectMemory slotSizeOf: aProcess) >= (ThreadIdIndex + 1)]]) ifFalse: [^self primitiveFailFor: PrimErrBadArgument]. id := id = objectMemory nilObject ifTrue: [0] ifFalse: [objectMemory integerValueOf: id]. id >= cogThreadManager maxNumThreads ifTrue: [^self primitiveFailFor: PrimErrLimitExceeded]. (ec := self bindProcess: aProcess toId: id) ~= 0 ifTrue: [^self primitiveFailFor: ec]. (aProcess = self activeProcess and: [(activeProcessAffined := id ~= 0) + and: [(cogThreadManager vmOwnerIs: id) not]]) ifTrue: - and: [id ~= cogThreadManager getVMOwner]]) ifTrue: [(self quickFetchInteger: PriorityIndex ofObject: aProcess) < maxWaitingPriority ifTrue: [maxWaitingPriority = self quickFetchInteger: PriorityIndex ofObject: aProcess]. checkThreadActivation := true. self forceInterruptCheck]. + self methodReturnReceiver! - self pop: argumentCount! Item was changed: ----- Method: CoInterpreterMT>>primitiveVMCurrentThreadId (in category 'process primitives') ----- primitiveVMCurrentThreadId "Answer the VM's current thread's Id" self cCode: [] inSmalltalk: [cogThreadManager isNil ifTrue: [^self primitiveFail]]. + self methodReturnInteger: cogThreadManager getVMOwner! - self pop: 1 thenPushInteger: cogThreadManager getVMOwner! Item was added: + ----- Method: CoInterpreterMT>>restoreVMStateFor:threadIndexAndFlags: (in category 'vm scheduling') ----- + restoreVMStateFor: vmThread threadIndexAndFlags: threadIndexAndFlags + "We've been preempted; we must restore state and update the threadId + in our process, and may have to put the active process to sleep." + | sched activeProc myProc | + sched := self schedulerPointer. + activeProc := objectMemory fetchPointer: ActiveProcessIndex ofObject: sched. + (threadIndexAndFlags anyMask: OwnVMForeignThreadFlag) + ifTrue: + [self assert: foreignCallbackProcessSlot == ForeignCallbackProcess. + myProc := objectMemory splObj: foreignCallbackProcessSlot. + self assert: myProc ~= objectMemory nilObject. + objectMemory splObj: foreignCallbackProcessSlot put: objectMemory nilObject] + ifFalse: [myProc := cogThreadManager popAWOLProcess: vmThread]. + self assert: activeProc ~= myProc. + (activeProc ~= objectMemory nilObject + and: [(objectMemory fetchPointer: MyListIndex ofObject: activeProc) = objectMemory nilObject]) ifTrue: + [self putToSleep: activeProc yieldingIf: preemptionYields]. + self assert: (objectMemory fetchPointer: MyListIndex ofObject: myProc) = (objectMemory splObj: ProcessInExternalCodeTag). + objectMemory + storePointer: ActiveProcessIndex ofObject: sched withValue: myProc; + storePointerUnchecked: MyListIndex ofObject: myProc withValue: objectMemory nilObject. + "Only unaffine if the process was affined at this level and did not become bound in the interim." + ((threadIndexAndFlags anyMask: ProcessUnaffinedOnDisown) + and: [(self isBoundProcess: myProc) not]) ifTrue: + [self setOwnerIndexOfProcess: myProc to: 0 bind: false]. + self initPrimCall. + self externalSetStackPageAndPointersForSuspendedContextOfProcess: myProc. + "If this primitive is called from machine code maintain the invariant that the return pc + of an interpreter callee calling a machine code caller is ceReturnToInterpreterPC." + (vmThread inMachineCode + and: [instructionPointer >= objectMemory startOfMemory]) ifTrue: + [self iframeSavedIP: framePointer put: instructionPointer. + instructionPointer := cogit ceReturnToInterpreterPC]. + newMethod := vmThread newMethodOrNull. + argumentCount := vmThread argumentCount. + primitiveFunctionPointer := vmThread primitiveFunctionPointer. + vmThread newMethodOrNull: nil. + self cCode: '' inSmalltalk: + [| range | + range := self cStackRangeForThreadIndex: vmThread index. + self assert: ((range includes: vmThread cStackPointer) and: [range includes: vmThread cFramePointer])]. + self setCFramePointer: vmThread cFramePointer setCStackPointer: vmThread cStackPointer. + self assert: newMethod notNil + ! Item was changed: ----- Method: CoInterpreterMT>>returnToSchedulingLoopAndReleaseVMOrWakeThread:source: (in category 'process primitive support') ----- returnToSchedulingLoopAndReleaseVMOrWakeThread: vmThread source: source self cCode: [self flag: 'this is just for debugging. Note the current C stack pointers'. cogThreadManager currentVMThread cStackPointer: CStackPointer; cFramePointer: CFramePointer] inSmalltalk: + [| range | range := self cStackRangeForThreadIndex: cogThreadManager getVMOwner. + self assert: ((range includes: CStackPointer) and: [range includes: CFramePointer])]. - [| range | - range := self cStackRangeForThreadIndex: cogThreadManager getVMOwner. - self assert: (range includes: CStackPointer). - self assert: (range includes: CFramePointer)]. self recordThreadSwitchTo: (vmThread ifNotNil: [vmThread index] ifNil: [0]) source: source. vmThread ifNotNil: [cogThreadManager wakeVMThreadFor: vmThread index] ifNil: [cogThreadManager releaseVM]. "I am not frightened of flying. Any value will do. I don't mind. Why should I be frightened of flying? There's no reason for it." self _longjmp: reenterThreadSchedulingLoop _: 1 ! Item was changed: ----- Method: CoInterpreterMT>>threadSchedulingLoopImplementation: (in category 'vm scheduling') ----- threadSchedulingLoopImplementation: vmThread "Enter a loop attempting to run the VM with the highest priority process and blocking on the thread's OS semaphore when unable to run that process. We will return to this via threadSwitchIfNecessary:from: which is called in the middle of transferTo:from: once the active process has been stored in the scheduler." | attemptToRun | self _setjmp: reenterThreadSchedulingLoop. [self assert: vmThread state = CTMAssignableOrInVM. attemptToRun := false. + (cogThreadManager vmOwnerIs: vmThread index) - (cogThreadManager getVMOwner = vmThread index) ifTrue: [attemptToRun := true] ifFalse: [(cogit tryLockVMToIndex: vmThread index) ifTrue: ["If relinquishing is true, then primitiveRelinquishProcessor has disowned the VM and only a returning call or callback should take ownership in that case." relinquishing ifTrue: [cogThreadManager releaseVM] ifFalse: [attemptToRun := true]]]. attemptToRun ifTrue: [self tryToExecuteSmalltalk: vmThread]. + (cogThreadManager vmOwnerIs: vmThread index) ifFalse: - (cogThreadManager testVMOwnerIs: vmThread index) ifFalse: [cogThreadManager waitForWork: vmThread]. true] whileTrue! Item was changed: ----- Method: CoInterpreterMT>>threadSwitchIfNecessary:from: (in category 'process primitive support') ----- threadSwitchIfNecessary: newProc from: sourceCode "Invoked from transferTo:from: to switch threads if the new process is bound or affined to some other thread." + | newProcThreadId vmThread activeContext | + self assert: (cogThreadManager vmOwnerIs: cogThreadManager ioGetThreadLocalThreadIndex). - | newProcThreadId vmThread activeContext tlti vmo | - - self cCode: [] - inSmalltalk: - [vmo := cogThreadManager getVMOwner. - tlti := cogThreadManager ioGetThreadLocalThreadIndex. - self assert: vmo = tlti]. deferThreadSwitch ifTrue: [^self]. + + "If the current process is unaffined or it is affined to the current thread we're + ok to run, but we should yield asap if a higher-priority t6hread wants the VM." newProcThreadId := self ownerIndexOfProcess: newProc. ((activeProcessAffined := newProcThreadId ~= 0) + and: [(cogThreadManager vmOwnerIs: newProcThreadId) not]) ifFalse: + [(self quickFetchInteger: PriorityIndex ofObject: newProc) < maxWaitingPriority ifTrue: + [checkThreadActivation := true. + self forceInterruptCheck]. + ^self]. + + "The current process is affined to a thread, but not to the current owner. So switch to that owner." + self cCode: '' inSmalltalk: + [self transcript ensureCr; nextPutAll: #threadSwitchIfNecessary:from:; space; print: newProc; + space; print: cogThreadManager getVMOwner; nextPutAll: '->'; print: newProcThreadId; cr; flush]. + "If the activeProcess doesn't have a context yet, it needs one from which the new thread can resume execution." + (objectMemory fetchPointer: SuspendedContextIndex ofObject: newProc) = objectMemory nilObject ifTrue: + [self assert: newProc = self activeProcess. + self push: instructionPointer. + self externalWriteBackHeadFramePointers. + activeContext := self ensureFrameIsMarried: framePointer SP: stackPointer. + objectMemory storePointer: SuspendedContextIndex ofObject: newProc withValue: activeContext]. + + vmThread := cogThreadManager vmThreadAt: newProcThreadId. + vmThread priority: (self quickFetchInteger: PriorityIndex ofObject: newProc). + vmThread state = CTMUnavailable ifTrue: + [vmThread state: CTMWantingOwnership]. + self returnToSchedulingLoopAndReleaseVMOrWakeThread: vmThread source: CSSwitchIfNeccessary! - and: [newProcThreadId ~= cogThreadManager getVMOwner]) ifTrue: - [self cCode: '' - inSmalltalk: - [self transcript ensureCr; nextPutAll: #threadSwitchIfNecessary:from:; space; print: newProc; - space; print: vmo; nextPutAll: '->'; print: newProcThreadId; cr; flush]. - "If primitiveProcessBindToThreadId has bound a process and indicated a thread - switch is necessary we'll come in here but the activeProcess won't have a - context yet, and it needs one from which the new thread can resume execution." - (objectMemory fetchPointer: SuspendedContextIndex ofObject: newProc) = objectMemory nilObject ifTrue: - [self assert: newProc = self activeProcess. - self push: instructionPointer. - self externalWriteBackHeadFramePointers. - activeContext := self ensureFrameIsMarried: framePointer SP: stackPointer. - objectMemory storePointer: SuspendedContextIndex ofObject: newProc withValue: activeContext]. - vmThread := cogThreadManager vmThreadAt: newProcThreadId. - vmThread priority: (self quickFetchInteger: PriorityIndex ofObject: newProc). - vmThread state = CTMUnavailable ifTrue: - [vmThread state: CTMWantingOwnership]. - self returnToSchedulingLoopAndReleaseVMOrWakeThread: vmThread source: CSSwitchIfNeccessary]. - (self quickFetchInteger: PriorityIndex ofObject: newProc) < maxWaitingPriority ifTrue: - [checkThreadActivation := true. - self forceInterruptCheck]! Item was changed: ----- Method: CoInterpreterMT>>tryToExecuteSmalltalk: (in category 'vm scheduling') ----- tryToExecuteSmalltalk: vmThread "Attempt to run the current process, if it exists, on the given vmThread." | dvmt activeProc ownerIndex | + self assert: (cogThreadManager vmOwnerIs: vmThread index). - self assert: cogThreadManager getVMOwner = vmThread index. self assert: cogThreadManager ioGetThreadLocalThreadIndex = vmThread index. dvmt := disowningVMThread. disowningVMThread ifNil: [activeProc := self activeProcess] ifNotNil: [self preemptDisowningThread. activeProc := self wakeHighestPriority. activeProc ifNil: [activeProc := objectMemory nilObject] ifNotNil: [objectMemory storePointerUnchecked: MyListIndex ofObject: activeProc withValue: objectMemory nilObject]. objectMemory storePointer: ActiveProcessIndex ofObject: self schedulerPointer withValue: activeProc]. activeProc = objectMemory nilObject ifTrue: [cogThreadManager releaseVM. ^nil]. ownerIndex := self ownerIndexOfProcess: activeProc. + (ownerIndex = 0 or: [cogThreadManager vmOwnerIs: ownerIndex]) ifTrue: + [self assert: (objectMemory fetchPointer: MyListIndex ofObject: self activeProcess) = objectMemory nilObject. + (objectMemory fetchPointer: SuspendedContextIndex ofObject: activeProc) ~= objectMemory nilObject ifTrue: + [self externalSetStackPageAndPointersForSuspendedContextOfProcess: activeProc]. + self enterSmalltalkExecutive. + "When we return here we should have already given up + the VM and so we cannot touch any interpreter state." + "NOTREACHED"]. + cogThreadManager wakeVMThreadFor: ownerIndex! - (ownerIndex = 0 - or: [ownerIndex ~= 0 and: [ownerIndex = cogThreadManager getVMOwner]]) - ifTrue: - [self assert: (objectMemory fetchPointer: MyListIndex ofObject: self activeProcess) = objectMemory nilObject. - (objectMemory fetchPointer: SuspendedContextIndex ofObject: activeProc) ~= objectMemory nilObject ifTrue: - [self externalSetStackPageAndPointersForSuspendedContextOfProcess: activeProc]. - self enterSmalltalkExecutive. - "When we return here we should have already given up - the VM and so we cannot touch any interpreter state."] - ifFalse: - [cogThreadManager wakeVMThreadFor: ownerIndex]! Item was changed: ----- Method: CogIA32Compiler>>cpuid: (in category 'feature detection') ----- cpuid: n "This is simulation only invocation of the throw-away CPUID function generated to initialize cpuidWord0 and cpuidWord1" + cogit processor abiMarshalArg0: n in: objectMemory memory. + ^cogit simulateLeafCallOf: cogit methodZoneBase! - ^cogit - simulateLeafCallOf: cogit methodZoneBase - marshaling: [cogit processor abiMarshalArg0: n in: objectMemory memory]! Item was changed: ----- Method: CogIA32Compiler>>numLowLevelLockOpcodes (in category 'multi-threading') ----- numLowLevelLockOpcodes "ceTryLockVMOwner: movl 4(%esp), %ecx xorl %eax, %eax + lock cmpxchgl %ecx, %ds:&vmOwnerLock N.B. lock cmpxchgq are two separate opcodes - lock cmpxchgl %ecx, %ds:&vmOwnerLock setz %al - ret - ceUnlockVMOwner: - xorl %eax, %eax - movl %eax, %ds:&vmOwnerLock - sfence ret" + ^6! - ^10! Item was changed: ----- Method: CogThreadManager>>acquireVMFor: (in category 'public api') ----- acquireVMFor: threadIndex "Attempt to acquire the VM, eventually blocking until it becomes available. Spin until the maxWaitingPriority has been updated if it is lower than this thread's priority." | vmThread | self assert: threadIndex = self ioGetThreadLocalThreadIndex. vmThread := self vmThreadAt: threadIndex. self assert: (vmThread state = CTMUnavailable or: [vmThread state = CTMWantingOwnership]). (cogit tryLockVMOwner: threadIndex) ifFalse: [vmThread state: CTMWantingOwnership. + [(self vmOwnerIs: threadIndex) + or: [cogit tryLockVMOwner: threadIndex]] whileFalse: - [cogit tryLockVMOwner: threadIndex] whileFalse: [[coInterpreter getMaxWaitingPriority < vmThread priority] whileTrue: [coInterpreter waitingPriorityIsAtLeast: vmThread priority]. + (self vmOwnerIs: threadIndex) ifFalse: - vmOwner ~= threadIndex ifTrue: [self ioWaitOnOSSemaphore: (self addressOf: vmThread osSemaphore)]]]. vmOSThread := vmThread osThread. vmThread state: CTMAssignableOrInVM. ^vmThread! Item was removed: - ----- Method: CogThreadManager>>assertProcessor:isInThread: (in category 'simulation') ----- - assertProcessor: aProcessorAlien isInThread: aProcess - - self assert: processorOwner == aProcess! Item was changed: ----- Method: CogThreadManager>>currentVMThread (in category 'public api') ----- currentVMThread - ^self vmThreadAt: self getVMOwner! Item was changed: ----- Method: CogThreadManager>>ensureRunningVMThread: (in category 'public api') ----- ensureRunningVMThread: vmIsRelinquishing "Called from checkVMOwnershipFromHeartbeat if the VM is unowned. Hence we are in the heartbeat thread. The race is against that thread owning the VM and against foreign callbacks." self willingVMThread ifNotNil: [:vmThread| "If the VM is relinquishing the processor then only schedule a thread if it has work to do." (vmIsRelinquishing and: [vmThread state ~= CTMWantingOwnership]) ifTrue: [^self]. (cogit tryLockVMToIndex: vmThread index) ifFalse: "someone beat us to it..." [^self]. vmOSThread := vmThread osThread. "release the thread from its blocking loop" self ioSignalOSSemaphore: (self addressOf: vmThread osSemaphore). self ioTransferTimeslice. "self cCode: [coInterpreter print: 'ERVT signalled '; printNum: vmThread index; cr]." ^self]. "If the VM is relinquishing the processor then only schedule a thread if it has work to do + (willingVMThread not nil above). - (willingVMThread not nil above. If we have failed to allocate thread storage before there is no point continuing to try to do so. By this time we should have quite a few threads in the pool." + (vmIsRelinquishing or: [memoryIsScarce]) ifTrue: + [^self]. + self unusedThreadInfo ifNotNil: + [:vmThread| + (cogit tryLockVMOwner: vmThread index) ifTrue: + [(self startThreadForThreadInfo: vmThread) ifFalse: - (vmIsRelinquishing or: [memoryIsScarce]) ifFalse: - [self unusedThreadInfo ifNotNil: - [:vmThread| - self setVMOwner: vmThread index. - (self startThreadForThreadInfo: vmThread) ifFalse: [self releaseVM]]]! Item was changed: + ----- Method: CogThreadManager>>getVMOSThread (in category 'public api-vm platform code') ----- - ----- Method: CogThreadManager>>getVMOSThread (in category 'public api') ----- getVMOSThread "This is for signalSemaphoreWithIndex in Cross/vm/sqExternalSemaphores.c" ^vmOSThread! Item was changed: ----- Method: CogThreadManager>>ioExitOSThread: (in category 'simulation') ----- ioExitOSThread: anOSThread "See platforms/Cross/vm/sq.h for the real definition." + | active | + active := Processor activeProcess == anOSThread. + self halt. anOSThread terminate. self ioReleaseOSThreadState: anOSThread! Item was changed: ----- Method: CogThreadManager>>setVMOwner: (in category 'public api') ----- setVMOwner: index - self flag: #revisit. vmOwner := index. self sqLowLevelMFence! Item was changed: ----- Method: CogThreadManager>>startThreadSubsystem (in category 'public api') ----- startThreadSubsystem "Initialize the threading subsystem, aborting if there is an error." | vmThread | - self assert: threads = nil. vmOSThread := self ioCurrentOSThread. numThreadsIncrement := (self ioNumProcessors max: 2) min: 16. (self growThreadInfosToAtLeast: numThreadsIncrement * 2) ifFalse: [self error: 'no memory to start thread system']. vmThread := threads at: 1. vmThread state: CTMInitializing. self registerVMThread: vmThread. vmThread state: CTMAssignableOrInVM. self setVMOwner: 1! Item was removed: - ----- Method: CogThreadManager>>testVMOwnerIs: (in category 'locking') ----- - testVMOwnerIs: index - "Test what the vmOwner is from a process that may not be the current VM owner" - | retryCount ownerIsIndex | - self assert: index ~= 0. - retryCount := 0. - [cogit tryLockVMOwner: index] whileFalse: - [(retryCount := retryCount + 1) > 10 ifTrue: - [self ioTransferTimeslice]]. - ownerIsIndex := self getVMOwner = index. - cogit unlockVMOwner. - ^ownerIsIndex! Item was added: + ----- Method: CogThreadManager>>vmIsOwned (in category 'public api-testing') ----- + vmIsOwned + "Answer if the vm is owned" + + self sqLowLevelMFence. + ^vmOwner > 0! Item was added: + ----- Method: CogThreadManager>>vmIsUnowned (in category 'public api-testing') ----- + vmIsUnowned + ^self vmOwnerIs: 0! Item was changed: + ----- Method: CogThreadManager>>vmOwnerAddress (in category 'Cogit lock implementation') ----- - ----- Method: CogThreadManager>>vmOwnerAddress (in category 'public api') ----- vmOwnerAddress "NB. For the JIT only, so it can generate the lock & unlock functions." ^self cCode: [(self addressOf: vmOwner) asUnsignedInteger] inSmalltalk: [cogit simulatedReadWriteVariableAddress: #vmOwnerFromMachineCode in: self]! Item was changed: + ----- Method: CogThreadManager>>vmOwnerFromMachineCode (in category 'Cogit lock implementation') ----- - ----- Method: CogThreadManager>>vmOwnerFromMachineCode (in category 'simulation') ----- vmOwnerFromMachineCode ^vmOwner! Item was changed: + ----- Method: CogThreadManager>>vmOwnerFromMachineCode: (in category 'Cogit lock implementation') ----- - ----- Method: CogThreadManager>>vmOwnerFromMachineCode: (in category 'simulation') ----- vmOwnerFromMachineCode: aValue self assert: (aValue between: 0 and: numThreads). vmOwner := aValue! Item was added: + ----- Method: CogThreadManager>>vmOwnerIs: (in category 'public api-testing') ----- + vmOwnerIs: index + "Test if the vmOwner is index." + + self sqLowLevelMFence. + ^vmOwner = index! Item was changed: ----- Method: CogThreadManager>>vmThreadAt: (in category 'public api') ----- vmThreadAt: index + self assert: (index between: 0 and: numThreads). + ^index > 0 ifTrue: [threads at: index]! - - self assert: (index between: 1 and: numThreads). - ^threads at: index! Item was changed: ----- Method: CogThreadManager>>waitForWork: (in category 'public api') ----- waitForWork: vmThread "Wait for work." self assert: vmThread state = CTMAssignableOrInVM. + self deny: (self vmOwnerIs: vmThread index). - self assert: vmOwner ~= vmThread index. self ioWaitOnOSSemaphore: (self addressOf: vmThread osSemaphore)! Item was changed: ----- Method: CogThreadManager>>wakeVMThreadFor: (in category 'public api') ----- wakeVMThreadFor: index "Transfer the VM to the thread with index. Called from a thread that finds the highest priority runnable process is bound to the thread with index index." | vmThread | + self assert: (self vmIsOwned and: [(self vmOwnerIs: index) not]). + self assert: (index between: 1 and: numThreads). - - self assert: (vmOwner > 0 and: [vmOwner ~= index]). - self assert: index <= numThreads. self setVMOwner: index. vmThread := threads at: index. + vmThread state + ifNil: [self startThreadForThreadInfo: vmThread] + ifNotNil: - vmThread state = nil - ifTrue: [self startThreadForThreadInfo: vmThread] - ifFalse: [self assert: vmThread state = CTMWantingOwnership. self ioSignalOSSemaphore: (self addressOf: vmThread osSemaphore)]. self ioTransferTimeslice! Item was changed: ----- Method: CogThreadManager>>willingVMThread (in category 'thread set') ----- willingVMThread "Answer a pointer to a live CogVMThread in any of the ``will do VM work'' states (other than the current owner if the VM is owned), or nil if none. Preferentially answer threads wanting ownership." | thread threadWantingVM threadWilling | - - - threadWantingVM := threadWilling := nil. 1 to: numThreads do: [:i| + (self vmOwnerIs: i) ifFalse: - i ~= vmOwner ifTrue: [thread := threads at: i. thread state = CTMWantingOwnership ifTrue: [(threadWantingVM isNil or: [threadWantingVM priority < thread priority]) ifTrue: [threadWantingVM := thread]]. thread state = CTMAssignableOrInVM ifTrue: [(threadWilling isNil or: [threadWilling priority < thread priority]) ifTrue: [threadWilling := thread]]]]. + ^threadWantingVM ifNil: + [threadWilling]! - threadWantingVM ifNotNil: - [^threadWantingVM]. - threadWilling ifNotNil: - [^threadWilling]. - ^nil! Item was removed: - ----- Method: CogVMSimulator>>assertCStackPointersBelongToCurrentVMOwner (in category 'multi-threading simulation switch') ----- - assertCStackPointersBelongToCurrentVMOwner - "This method includes or excludes CoInterpreterMT methods as required. - Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate" - - ^self perform: #assertCStackPointersBelongToCurrentVMOwner - withArguments: {} - inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was removed: - ----- Method: CogVMSimulator>>cStackRangeForCurrentVMOwner (in category 'multi-threading simulation switch') ----- - cStackRangeForCurrentVMOwner - "This method includes or excludes CoInterpreterMT methods as required. - Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate" - - ^self perform: #cStackRangeForCurrentVMOwner - withArguments: {} - inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was changed: ----- Method: CogVMSimulator>>initialEnterSmalltalkExecutive (in category 'initialization') ----- initialEnterSmalltalkExecutive "Main entry-point into the interpreter at system start-up. Override to choose between the threaded and non-threaded versions and if threaded to ensure that the switch method overrides are up-to-date." self ensureMultiThreadingOverridesAreUpToDate. + self assert: (cogit processor fp = CFramePointer and: [cogit processor sp = CStackPointer]). ^self perform: #initialEnterSmalltalkExecutive withArguments: {} inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])! Item was changed: VMStructType subclass: #CogVMThread + instanceVariableNames: 'index state priority osSemaphore osThread newMethodOrNull argumentCount primitiveFunctionPointer inMachineCode cStackPointer cFramePointer reenterInterpreter awolProcIndex awolProcLength awolProcesses' - instanceVariableNames: 'index state priority osSemaphore osThread newMethodOrNull argumentCount inMachineCode cStackPointer cFramePointer reenterInterpreter awolProcIndex awolProcLength awolProcesses' classVariableNames: '' poolDictionaries: 'VMThreadingConstants' category: 'VMMaker-Multithreading'! !CogVMThread commentStamp: '' prior: 0! Instances of this class represent control blocks for native threads that cooperatively schedule the VM. See the class comment of CogThreadManager for full documentation. N.B. awolProcesses must be the last inst var.! Item was added: + ----- Method: CogVMThread>>primitiveFunctionPointer (in category 'accessing') ----- + primitiveFunctionPointer + "Answer the value of primitiveFunctionPointer" + + ^primitiveFunctionPointer! Item was added: + ----- Method: CogVMThread>>primitiveFunctionPointer: (in category 'accessing') ----- + primitiveFunctionPointer: anObject + "Set the value of primitiveFunctionPointer" + + ^primitiveFunctionPointer := anObject! Item was added: + ----- Method: CogVMThread>>printOn: (in category 'printing') ----- + printOn: aStream + super printOn: aStream. + aStream + nextPutAll: ' index: '; print: index; + nextPutAll: ' state: '; nextPutAll: (VMThreadingConstants keys + detect: [:k| k first == $C and: [(VMThreadingConstants classPool at: k) = state]] + ifNone: [state printString])! Item was changed: ----- Method: CogX64Compiler>>detectFeatures (in category 'feature detection') ----- detectFeatures "Do a throw-away compilation to get at the cpuid info and initialize cpuidWord1 N.B. All of MSVC, gcc & clang have intrinsics for this, so if you have the energy by all means reimplement as an #if _MSC_VER...#elif __GNUC__ #else ... saga." | startAddress cpuid | startAddress := cogit methodZoneBase. cogit allocateOpcodes: 10 bytecodes: 0. cpuid := cogit cCoerceSimple: startAddress to: #'uintptr_t (*)(void)'. cogit PushR: RDX; PushR: RCX; PushR: RBX; MoveCq: 16r80000001 R: RAX; gen: CPUID; MoveR: RCX R: RAX; PopR: RBX; PopR: RCX; PopR: RDX; RetN: 0. cogit outputInstructionsForGeneratedRuntimeAt: startAddress. cogit resetMethodZoneBase: startAddress. + self setCpuidWord1: (self cCode: 'cpuid()' inSmalltalk: [cogit simulateLeafCallOf: startAddress])! - self setCpuidWord1: (self cCode: 'cpuid()' inSmalltalk: [cogit simulateLeafCallOf: startAddress marshaling: []])! Item was changed: ----- Method: CogX64Compiler>>numLowLevelLockOpcodes (in category 'multi-threading') ----- numLowLevelLockOpcodes "ceTryLockVMOwner: xorq %rax, %rax movq &vmOwnerLock, %rsi lock cmpxchgq %rdi, (%rsi) N.B. lock cmpxchgq are two separate opcodes setz %alt - ret - ceUnlockVMOwner: - xorq %rax, %rax - movq %rax, &vmOwnerLockFromMachineCode - sfence ret" + ^6! - ^10! Item was changed: CogClass subclass: #Cogit (excessive size, no diff calculated) Item was changed: ----- Method: Cogit class>>declareCVarsIn: (in category 'translation') ----- declareCVarsIn: aCCodeGenerator | backEnd | backEnd := CogCompilerClass basicNew. #( 'coInterpreter' 'objectMemory' 'methodZone' 'objectRepresentation' 'cogBlockMethodSurrogateClass' 'cogMethodSurrogateClass' 'nsSendCacheSurrogateClass' 'threadManager' 'processor' 'lastNInstructions' 'simulatedAddresses' 'simulatedTrampolines' 'simulatedVariableGetters' 'simulatedVariableSetters' 'processorFrameValid' 'printRegisters' 'printInstructions' 'clickConfirm' 'singleStep') do: [:simulationVariableNotNeededForRealVM| aCCodeGenerator removeVariable: simulationVariableNotNeededForRealVM]. NewspeakVM ifFalse: [#( 'selfSendTrampolines' 'dynamicSuperSendTrampolines' 'implicitReceiverSendTrampolines' 'outerSendTrampolines' 'ceEnclosingObjectTrampoline' 'numIRCs' 'indexOfIRC' 'theIRCs') do: [:variableNotNeededInNormalVM| aCCodeGenerator removeVariable: variableNotNeededInNormalVM]]. aCCodeGenerator removeConstant: #COGMTVM. "this should be defined at compile time" aCCodeGenerator addHeaderFile:''; "for e.g. offsetof" addHeaderFile:'"sqCogStackAlignment.h"'; addHeaderFile:'"dispdbg.h"'; "must precede cointerp.h & cogit.h otherwise NoDbgRegParms gets screwed up" addHeaderFile:'"cogmethod.h"'. NewspeakVM ifTrue: [aCCodeGenerator addHeaderFile:'"nssendcache.h"']. aCCodeGenerator addHeaderFile:'#if COGMTVM'; addHeaderFile:'"cointerpmt.h"'; addHeaderFile:'#else'; addHeaderFile:'"cointerp.h"'; addHeaderFile:'#endif'; addHeaderFile:'"cogit.h"'. aCCodeGenerator var: #ceGetFP declareC: 'usqIntptr_t (*ceGetFP)(void)'; var: #ceGetSP declareC: 'usqIntptr_t (*ceGetSP)(void)'; var: #ceCaptureCStackPointers declareC: 'void (*ceCaptureCStackPointers)(void)'; var: #ceInvokeInterpret declareC: 'void (*ceInvokeInterpret)(void)'; var: #ceEnterCogCodePopReceiverReg declareC: 'void (*ceEnterCogCodePopReceiverReg)(void)'; var: #realCEEnterCogCodePopReceiverReg declareC: 'void (*realCEEnterCogCodePopReceiverReg)(void)'; var: #ceCallCogCodePopReceiverReg declareC: 'void (*ceCallCogCodePopReceiverReg)(void)'; var: #realCECallCogCodePopReceiverReg declareC: 'void (*realCECallCogCodePopReceiverReg)(void)'; var: #ceCallCogCodePopReceiverAndClassRegs declareC: 'void (*ceCallCogCodePopReceiverAndClassRegs)(void)'; var: #realCECallCogCodePopReceiverAndClassRegs declareC: 'void (*realCECallCogCodePopReceiverAndClassRegs)(void)'; var: #postCompileHook declareC: 'void (*postCompileHook)(CogMethod *)'; var: #openPICList declareC: 'CogMethod *openPICList = 0'; var: #maxMethodBefore type: #'CogBlockMethod *'; var: 'enumeratingCogMethod' type: #'CogMethod *'. aCCodeGenerator var: #ceTryLockVMOwner + declareC: '#if COGMTVM\uintptr_t (*ceTryLockVMOwner)(uintptr_t);\#endif'. - declareC: '#if COGMTVM\usqIntptr_t (*ceTryLockVMOwner)(void)'; - var: #ceUnlockVMOwner - declareC: 'void (*ceUnlockVMOwner)(void)\#endif /* COGMTVM */'. backEnd numICacheFlushOpcodes > 0 ifTrue: [aCCodeGenerator var: #ceFlushICache declareC: 'static void (*ceFlushICache)(usqIntptr_t from, usqIntptr_t to)']. aCCodeGenerator var: #ceFlushDCache declareC: '#if DUAL_MAPPED_CODE_ZONE\static void (*ceFlushDCache)(usqIntptr_t from, usqIntptr_t to)\#endif'; var: #codeToDataDelta declareC: '#if DUAL_MAPPED_CODE_ZONE\static sqInt codeToDataDelta\#else\# define codeToDataDelta 0\#endif'. aCCodeGenerator declareVar: 'aMethodLabel' type: #'AbstractInstruction'; "Has to come lexicographically before backEnd & methodLabel" var: #backEnd declareC: 'AbstractInstruction * const backEnd = &aMethodLabel'; var: #methodLabel declareC: 'AbstractInstruction * const methodLabel = &aMethodLabel'. self declareC: #(abstractOpcodes stackCheckLabel blockEntryLabel blockEntryNoContextSwitch stackOverflowCall sendMiss entry noCheckEntry selfSendEntry dynSuperEntry fullBlockNoContextSwitchEntry fullBlockEntry picMNUAbort picInterpretAbort endCPICCase0 endCPICCase1 cPICEndOfCodeLabel) as: #'AbstractInstruction *' in: aCCodeGenerator. aCCodeGenerator declareVar: #cPICPrototype type: #'CogMethod *'; declareVar: #blockStarts type: #'BlockStart *'; declareVar: #fixups type: #'BytecodeFixup *'; declareVar: #methodZoneBase type: #usqInt. aCCodeGenerator var: #ordinarySendTrampolines declareC: 'sqInt ordinarySendTrampolines[NumSendTrampolines]'; var: #superSendTrampolines declareC: 'sqInt superSendTrampolines[NumSendTrampolines]'. BytecodeSetHasDirectedSuperSend ifTrue: [aCCodeGenerator var: #directedSuperSendTrampolines declareC: 'sqInt directedSuperSendTrampolines[NumSendTrampolines]'; var: #directedSuperBindingSendTrampolines declareC: 'sqInt directedSuperBindingSendTrampolines[NumSendTrampolines]']. NewspeakVM ifTrue: [aCCodeGenerator var: #selfSendTrampolines declareC: 'sqInt selfSendTrampolines[NumSendTrampolines]'; var: #dynamicSuperSendTrampolines declareC: 'sqInt dynamicSuperSendTrampolines[NumSendTrampolines]'; var: #implicitReceiverSendTrampolines declareC: 'sqInt implicitReceiverSendTrampolines[NumSendTrampolines]'; var: #outerSendTrampolines declareC: 'sqInt outerSendTrampolines[NumSendTrampolines]']. aCCodeGenerator var: #trampolineAddresses declareC: 'static char *trampolineAddresses[NumTrampolines*2]'; var: #objectReferencesInRuntime declareC: 'static usqInt objectReferencesInRuntime[NumObjRefsInRuntime+1]'; var: #labelCounter type: #int; var: #traceFlags declareC: 'int traceFlags = 8 /* prim trace log on by default */'; var: #cStackAlignment declareC: 'const int cStackAlignment = STACK_ALIGN_BYTES'. aCCodeGenerator declareVar: #minValidCallAddress type: #'usqIntptr_t'. aCCodeGenerator vmClass generatorTable ifNotNil: [:bytecodeGenTable| aCCodeGenerator var: #generatorTable declareC: 'static BytecodeDescriptor generatorTable[', bytecodeGenTable size printString, ']', (self tableInitializerFor: bytecodeGenTable in: aCCodeGenerator)]. "In C the abstract opcode names clash with the Smalltalk generator syntactic sugar. Most of the syntactic sugar is inlined, but alas some remains. Rename the syntactic sugar to avoid the clash." (self organization listAtCategoryNamed: #'abstract instructions') do: [:s| aCCodeGenerator addSelectorTranslation: s to: 'g', (aCCodeGenerator cFunctionNameFor: s)]. aCCodeGenerator addSelectorTranslation: #halt: to: 'haltmsg'. self declareFlagVarsAsByteIn: aCCodeGenerator! Item was changed: ----- Method: Cogit>>ceCaptureCStackPointers (in category 'jit - api') ----- ceCaptureCStackPointers | range | coInterpreter isCurrentImageFacade ifTrue: [^self]. + self simulateLeafCallOf: ceCaptureCStackPointers. - coInterpreter isThreadedVM ifFalse: - [^self simulateLeafCallOf: ceCaptureCStackPointers marshaling: []]. thisContext sender selector == #generateStackPointerCapture ifTrue: [^self]. + coInterpreter isThreadedVM ifTrue: + [range := coInterpreter cStackRangeForThreadIndex: coInterpreter threadManager getVMOwner. + self assert: (range notNil "VM is owned" + and: [(range includes: coInterpreter getCFramePointer) + and: [range includes: coInterpreter getCStackPointer]])]! - range := coInterpreter cStackRangeForThreadIndex: coInterpreter threadManager getVMOwner. - self assert: (range notNil "VM is owned" - and: [(range includes: processor sp) - and: [range includes: processor fp]]). - coInterpreter setCFramePointer: processor fp setCStackPointer: processor sp! Item was changed: ----- Method: Cogit>>generateVMOwnerLockFunctions (in category 'initialization') ----- generateVMOwnerLockFunctions - | startAddress | + self cppIf: COGMTVM ifTrue: + [| startAddress | + self allocateOpcodes: backEnd numLowLevelLockOpcodes bytecodes: 0. + self zeroOpcodeIndex. + startAddress := methodZoneBase. + backEnd generateLowLevelTryLock: coInterpreter vmOwnerAddress. + self outputInstructionsForGeneratedRuntimeAt: startAddress. + self recordGeneratedRunTime: 'ceTryLockVMOwner' address: startAddress. + ceTryLockVMOwner := self cCoerceSimple: startAddress to: #'uintptr_t (*)(uintptr_t)']! - self cppIf: COGMTVM - ifTrue: - [self allocateOpcodes: backEnd numLowLevelLockOpcodes bytecodes: 0. - self zeroOpcodeIndex. - startAddress := methodZoneBase. - backEnd generateLowLevelTryLock: coInterpreter vmOwnerAddress. - self outputInstructionsForGeneratedRuntimeAt: startAddress. - self recordGeneratedRunTime: 'ceTryLockVMOwner' address: startAddress. - ceTryLockVMOwner := self cCoerceSimple: startAddress to: #'usqIntptr_t (*)(void)'. - - self zeroOpcodeIndex. - initialPC := 0. - endPC := numAbstractOpcodes - 1. - startAddress := methodZoneBase. - backEnd generateLowLevelUnlock: coInterpreter vmOwnerAddress. - self outputInstructionsForGeneratedRuntimeAt: startAddress. - self recordGeneratedRunTime: 'ceUnlockVMOwner' address: startAddress. - ceUnlockVMOwner := self cCoerceSimple: startAddress to: #'void (*)(void)']! Item was changed: ----- Method: Cogit>>handleCallOrJumpSimulationTrap: (in category 'simulation only') ----- handleCallOrJumpSimulationTrap: aProcessorSimulationTrap | evaluable function memory result savedFramePointer savedStackPointer savedArgumentCount retpc | "This is a hack fix before we revise the simulators. When a jump call is made, the next pc is effectively the return address on the stack, not the instruction following the jump." aProcessorSimulationTrap type == #jump ifTrue: [processor hackFixNextPCOfJumpFor: aProcessorSimulationTrap using: objectMemory]. evaluable := simulatedTrampolines at: aProcessorSimulationTrap address ifAbsent: [self errorProcessingSimulationTrap: aProcessorSimulationTrap in: simulatedTrampolines]. function := evaluable isBlock ifTrue: ['aBlock; probably some plugin primitive'] ifFalse: [evaluable receiver == backEnd ifTrue: [^self handleABICallOrJumpSimulationTrap: aProcessorSimulationTrap evaluable: evaluable]. evaluable selector]. memory := coInterpreter memory. + function == #interpret ifTrue: "i.e. we're here via ceInvokeInterpret/ceReturnToInterpreterTrampoline and should discard all state back to enterSmalltalkExecutiveImplementation" + [false ifTrue: + [processor "No longer appropriate to do anything; this is a direct jump; the trampolines have done everything" + simulateJumpCallOf: aProcessorSimulationTrap address + memory: memory]. - function == #interpret ifTrue: "i.e. we're here via ceInvokeInterpret and should discard all state back to enterSmalltalkExecutiveImplementation" - [processor - simulateJumpCallOf: aProcessorSimulationTrap address - memory: memory. self recordInstruction: {'(simulated jump call of '. aProcessorSimulationTrap address. '/'. function. ')'}. processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize in: memory. coInterpreter reenterInterpreter. "NOTREACHED" self halt]. function ~~ #ceBaseFrameReturn: ifTrue: [coInterpreter assertValidExternalStackPointers]. (backEnd wantsNearAddressFor: function) ifTrue: [^self perform: function with: aProcessorSimulationTrap]. processor simulateCallOf: aProcessorSimulationTrap address nextpc: aProcessorSimulationTrap nextpc memory: memory. retpc := processor retpcIn: memory. self recordInstruction: {'(simulated call of '. aProcessorSimulationTrap address. '/'. function. ')'}. savedFramePointer := coInterpreter framePointer. savedStackPointer := coInterpreter stackPointer. savedArgumentCount := coInterpreter argumentCount. result := ["self halt: evaluable selector." clickConfirm ifTrue: [(self confirm: 'skip run-time call?') ifFalse: [clickConfirm := false. self halt]]. evaluable valueWithArguments: (processor postCallArgumentsNumArgs: evaluable numArgs in: memory)] on: ReenterMachineCode do: [:ex| ex return: #continueNoReturn]. coInterpreter assertValidExternalStackPointers. "Verify the stack layout assumption compileInterpreterPrimitive: makes, provided we've not called something that has built a frame, such as closure value or evaluate method, or switched frames, such as primitiveSignal, primitiveWait, primitiveResume, primitiveSuspend et al." (function beginsWith: 'primitive') ifTrue: [coInterpreter primFailCode = 0 ifTrue: [(CogVMSimulator stackAlteringPrimitives includes: function) ifFalse: ["This is a rare case (e.g. in Scorch where a married context's sender is set to nil on trapTrpped and hence the stack layout is altered." (function == #primitiveSlotAtPut and: [objectMemory isContext: (coInterpreter frameReceiver: coInterpreter framePointer)]) ifFalse: [self assert: savedFramePointer = coInterpreter framePointer. self assert: savedStackPointer + (savedArgumentCount * objectMemory wordSize) = coInterpreter stackPointer]]] ifFalse: [self assert: savedFramePointer = coInterpreter framePointer. self assert: savedStackPointer = coInterpreter stackPointer]]. result ~~ #continueNoReturn ifTrue: [self recordInstruction: {'(simulated return to '. processor retpcIn: memory. ')'}. processor simulateReturnIn: memory. self assert: processor pc = retpc. processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize in: memory]. self assert: (result isInteger "an oop result" or: [result == coInterpreter or: [result == objectMemory or: [result == nil or: [result == #continueNoReturn]]]]). processor cResultRegister: (result ifNil: [0] ifNotNil: [result isInteger ifTrue: [result] ifFalse: [16rF00BA222]])! Item was changed: ----- Method: Cogit>>simulateCeFlushDCacheFrom:to: (in category 'simulation only') ----- simulateCeFlushDCacheFrom: start to: finish + processor abiMarshalArg0: start arg1: finish in: objectMemory memory. + self simulateLeafCallOf: ceFlushDCache! - self simulateLeafCallOf: ceFlushDCache - marshaling: [processor abiMarshalArg0: start arg1: finish in: objectMemory memory]! Item was changed: ----- Method: Cogit>>simulateCeFlushICacheFrom:to: (in category 'simulation only') ----- simulateCeFlushICacheFrom: start to: finish + processor abiMarshalArg0: start arg1: finish in: objectMemory memory. + self simulateLeafCallOf: ceFlushICache! - self simulateLeafCallOf: ceFlushICache - marshaling: [processor abiMarshalArg0: start arg1: finish in: objectMemory memory]! Item was added: + ----- Method: Cogit>>simulateLeafCallOf: (in category 'simulation only') ----- + simulateLeafCallOf: someFunction + "Simulate execution of machine code that leaf-calls someFunction, + answering the result returned by someFunction." + "CogProcessorAlienInspector openFor: coInterpreter" + + | priorSP priorPC priorLR spOnEntry bogusRetPC | + self recordRegisters. + priorSP := processor sp. + priorPC := processor pc. + priorLR := backEnd hasLinkRegister ifTrue: [processor lr]. + processor + simulateLeafCallOf: someFunction + nextpc: (bogusRetPC := 16rBADF00D5 roundTo: backEnd codeGranularity) + memory: coInterpreter memory. + spOnEntry := processor sp. + self recordInstruction: {'(simulated call of '. someFunction. ')'}. + ^[[processor pc between: self class guardPageSize and: methodZone zoneEnd] whileTrue: + [[singleStep + ifTrue: [self recordProcessing. + self maybeBreakAt: processor pc. + processor + singleStepIn: coInterpreter memory + minimumAddress: guardPageSize + readOnlyBelow: methodZone zoneEnd] + ifFalse: [processor + runInMemory: coInterpreter memory + minimumAddress: guardPageSize + readOnlyBelow: methodZone zoneEnd]] + on: ProcessorSimulationTrap, Error + do: [:ex| + "Again this is a hack for the processor simulators not properly simulating returns to bogus addresses. + In this case BochsX64Alien doesn't do the right thing." + processor pc = bogusRetPC ifTrue: + [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}. + ^processor cResultRegister]. + ex isProcessorSimulationTrap ifFalse: + [ex pass]. + ex applyTo: self. + ex type == #return ifTrue: + [^processor cResultRegister]]]. + processor pc = bogusRetPC ifTrue: + [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}]. + processor cResultRegister] + ensure: + [processor sp: priorSP. + processor pc: priorPC. + priorLR ifNotNil: [:lr| processor lr: lr]]! Item was removed: - ----- Method: Cogit>>simulateLeafCallOf:marshaling: (in category 'simulation only') ----- - simulateLeafCallOf: someFunction marshaling: marshallingBlock - "Simulate execution of machine code that leaf-calls someFunction, - answering the result returned by someFunction." - "CogProcessorAlienInspector openFor: coInterpreter" - - | priorSP priorPC priorLR spOnEntry bogusRetPC | - self recordRegisters. - priorSP := processor sp. - priorPC := processor pc. - priorLR := backEnd hasLinkRegister ifTrue: [processor lr]. - processor - setFramePointer: coInterpreter getCFramePointer - stackPointer: coInterpreter getCStackPointer. - marshallingBlock value. - processor - simulateLeafCallOf: someFunction - nextpc: (bogusRetPC := 16rBADF00D5 roundTo: backEnd codeGranularity) - memory: coInterpreter memory. - spOnEntry := processor sp. - self recordInstruction: {'(simulated call of '. someFunction. ')'}. - ^[[processor pc between: self class guardPageSize and: methodZone zoneEnd] whileTrue: - [[singleStep - ifTrue: [self recordProcessing. - self maybeBreakAt: processor pc. - processor - singleStepIn: coInterpreter memory - minimumAddress: guardPageSize - readOnlyBelow: methodZone zoneEnd] - ifFalse: [processor - runInMemory: coInterpreter memory - minimumAddress: guardPageSize - readOnlyBelow: methodZone zoneEnd]] - on: ProcessorSimulationTrap, Error - do: [:ex| - "Again this is a hack for the processor simulators not properly simulating returns to bogus addresses. - In this case BochsX64Alien doesn't do the right thing." - processor pc = bogusRetPC ifTrue: - [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}. - ^processor cResultRegister]. - ex isProcessorSimulationTrap ifFalse: - [ex pass]. - ex applyTo: self. - ex type == #return ifTrue: - [^processor cResultRegister]]]. - processor pc = bogusRetPC ifTrue: - [self recordInstruction: {'(simulated (real) return to '. processor pc. ')'}]. - processor cResultRegister] - ensure: - [processor sp: priorSP. - processor pc: priorPC. - priorLR ifNotNil: [:lr| processor lr: lr]]! Item was changed: ----- Method: Cogit>>tryLockVMOwner: (in category 'multi-threading') ----- tryLockVMOwner: value "ceTryLockVMOwner does an atomic compare-and-swap of the lock with the argument and zero, setting the lock to value if it was zero. It answers non-zero if the lock was zero." + processor abiMarshalArg0: value in: objectMemory memory. + ^0 ~= (self simulateLeafCallOf: ceTryLockVMOwner)! - ^0 ~= (self - simulateLeafCallOf: ceTryLockVMOwner - marshaling: [processor abiMarshalArg0: value in: objectMemory memory])! Item was removed: - ----- Method: Cogit>>unlockVMOwner (in category 'multi-threading') ----- - unlockVMOwner - - - ^self simulateLeafCallOf: ceUnlockVMOwner marshaling: []! Item was changed: + VMLongJumpSimulation subclass: #ReenterInterpreter + instanceVariableNames: '' - Notification subclass: #ReenterInterpreter - instanceVariableNames: 'returnValue' classVariableNames: '' poolDictionaries: '' category: 'VMMaker-JITSimulation'! Item was removed: - ----- Method: ReenterInterpreter>>returnValue (in category 'accessing') ----- - returnValue - "Answer the value of returnValue" - - ^ returnValue! Item was removed: - ----- Method: ReenterInterpreter>>returnValue: (in category 'accessing') ----- - returnValue: anObject - "Set the value of returnValue" - - returnValue := anObject! Item was changed: + VMLongJumpSimulation subclass: #ReenterMachineCode + instanceVariableNames: '' - Notification subclass: #ReenterMachineCode - instanceVariableNames: 'returnValue' classVariableNames: '' poolDictionaries: '' category: 'VMMaker-JITSimulation'! Item was removed: - ----- Method: ReenterMachineCode>>returnValue (in category 'accessing') ----- - returnValue - "Answer the value of returnValue" - - ^ returnValue! Item was removed: - ----- Method: ReenterMachineCode>>returnValue: (in category 'accessing') ----- - returnValue: anObject - "Set the value of returnValue" - - returnValue := anObject! Item was changed: + VMLongJumpSimulation subclass: #ReenterThreadSchedulingLoop + instanceVariableNames: '' - Notification subclass: #ReenterThreadSchedulingLoop - instanceVariableNames: 'returnValue' classVariableNames: '' poolDictionaries: '' category: 'VMMaker-JITSimulation'! Item was changed: ----- Method: SocketPluginSimulator>>sqResolverNameLookupResult (in category 'simulation') ----- sqResolverNameLookupResult "For now don't simulate the implicit semaphore." addressForName ifNil: [^interpreterProxy primitiveFail]. + self assert: (addressForName size >= 4 and: [addressForName size \\ 4 = 0]). - self assert: addressForName size = 4. "Effectively netAddressToInt: bytes" ^ ((addressForName at: 4)) + ((addressForName at: 3) <<8) + ((addressForName at: 2) <<16) + ((addressForName at: 1) <<24)! Item was changed: ----- Method: StackInterpreter>>_setjmp: (in category 'primitive support') ----- _setjmp: aJumpBuf "Hack simulation of _setjmp/_longjmp, intended to invoke the most minimal setjmp/longjmp pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc." self assert: (#(ReenterInterpreter ReenterThreadSchedulingLoop) includes: aJumpBuf class name). + ^aJumpBuf returnValue ifNil: [0]! - ^0! Item was added: + Notification subclass: #VMLongJumpSimulation + instanceVariableNames: 'returnValue' + classVariableNames: '' + poolDictionaries: '' + category: 'VMMaker-JITSimulation'! + + !VMLongJumpSimulation commentStamp: 'eem 10/30/2020 10:24' prior: 0! + A VMLongJumpSimulation is an exception used to simulate a _setjmp:/_longjmp: pair. An instance variable which is typed as a jmpbuf in the real VM holds onto a sub-instance of VMLongJumpSimulation. _longjmp:_: then sets its return value and signals it. It is the responsibility of the holder of the inst var/sender of _setjmp: to provide an exception handler for the exception artound the point where _setjmp: is called. See for example StackInterpreter>>enterSmalltalkExecutive that provides the exception handler and invoking enterSmalltalkExecutiveImplementation to do the real work. A macro in enterSmalltalkExecutive is used to arrange that in the real VM a mention of enterSmalltalkExecutive is replaced by a use of enterSmalltalkExecutiveImplementation. + + Instance Variables + returnValue: + + returnValue + - the value to be "returned from" _setjmp:, sort-of. + ! Item was added: + ----- Method: VMLongJumpSimulation>>returnValue (in category 'accessing') ----- + returnValue + "Answer the value of returnValue" + + ^ returnValue! Item was added: + ----- Method: VMLongJumpSimulation>>returnValue: (in category 'accessing') ----- + returnValue: anObject + "Set the value of returnValue" + + returnValue := anObject! From commits at source.squeak.org Sat Oct 31 01:45:29 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 31 Oct 2020 01:45:29 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2867.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2867.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2867 Author: eem Time: 30 October 2020, 6:45:19.952056 pm UUID: 4570a573-0bad-41c5-b9d9-be004c7f14de Ancestors: VMMaker.oscog-eem.2866 Oops. Commit the truly simplified handleCallOrJumpSimulationTrap:. The false ifTrue: [...] is just noise. =============== Diff against VMMaker.oscog-eem.2866 =============== Item was changed: ----- Method: Cogit>>handleCallOrJumpSimulationTrap: (in category 'simulation only') ----- handleCallOrJumpSimulationTrap: aProcessorSimulationTrap | evaluable function memory result savedFramePointer savedStackPointer savedArgumentCount retpc | "This is a hack fix before we revise the simulators. When a jump call is made, the next pc is effectively the return address on the stack, not the instruction following the jump." aProcessorSimulationTrap type == #jump ifTrue: [processor hackFixNextPCOfJumpFor: aProcessorSimulationTrap using: objectMemory]. evaluable := simulatedTrampolines at: aProcessorSimulationTrap address ifAbsent: [self errorProcessingSimulationTrap: aProcessorSimulationTrap in: simulatedTrampolines]. function := evaluable isBlock ifTrue: ['aBlock; probably some plugin primitive'] ifFalse: [evaluable receiver == backEnd ifTrue: [^self handleABICallOrJumpSimulationTrap: aProcessorSimulationTrap evaluable: evaluable]. evaluable selector]. memory := coInterpreter memory. function == #interpret ifTrue: "i.e. we're here via ceInvokeInterpret/ceReturnToInterpreterTrampoline and should discard all state back to enterSmalltalkExecutiveImplementation" + [self recordInstruction: {'(simulated jump call of '. aProcessorSimulationTrap address. '/'. function. ')'}. - [false ifTrue: - [processor "No longer appropriate to do anything; this is a direct jump; the trampolines have done everything" - simulateJumpCallOf: aProcessorSimulationTrap address - memory: memory]. - self recordInstruction: {'(simulated jump call of '. aProcessorSimulationTrap address. '/'. function. ')'}. processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize in: memory. coInterpreter reenterInterpreter. "NOTREACHED" self halt]. function ~~ #ceBaseFrameReturn: ifTrue: [coInterpreter assertValidExternalStackPointers]. (backEnd wantsNearAddressFor: function) ifTrue: [^self perform: function with: aProcessorSimulationTrap]. processor simulateCallOf: aProcessorSimulationTrap address nextpc: aProcessorSimulationTrap nextpc memory: memory. retpc := processor retpcIn: memory. self recordInstruction: {'(simulated call of '. aProcessorSimulationTrap address. '/'. function. ')'}. savedFramePointer := coInterpreter framePointer. savedStackPointer := coInterpreter stackPointer. savedArgumentCount := coInterpreter argumentCount. result := ["self halt: evaluable selector." clickConfirm ifTrue: [(self confirm: 'skip run-time call?') ifFalse: [clickConfirm := false. self halt]]. evaluable valueWithArguments: (processor postCallArgumentsNumArgs: evaluable numArgs in: memory)] on: ReenterMachineCode do: [:ex| ex return: #continueNoReturn]. coInterpreter assertValidExternalStackPointers. "Verify the stack layout assumption compileInterpreterPrimitive: makes, provided we've not called something that has built a frame, such as closure value or evaluate method, or switched frames, such as primitiveSignal, primitiveWait, primitiveResume, primitiveSuspend et al." (function beginsWith: 'primitive') ifTrue: [coInterpreter primFailCode = 0 ifTrue: [(CogVMSimulator stackAlteringPrimitives includes: function) ifFalse: ["This is a rare case (e.g. in Scorch where a married context's sender is set to nil on trapTrpped and hence the stack layout is altered." (function == #primitiveSlotAtPut and: [objectMemory isContext: (coInterpreter frameReceiver: coInterpreter framePointer)]) ifFalse: [self assert: savedFramePointer = coInterpreter framePointer. self assert: savedStackPointer + (savedArgumentCount * objectMemory wordSize) = coInterpreter stackPointer]]] ifFalse: [self assert: savedFramePointer = coInterpreter framePointer. self assert: savedStackPointer = coInterpreter stackPointer]]. result ~~ #continueNoReturn ifTrue: [self recordInstruction: {'(simulated return to '. processor retpcIn: memory. ')'}. processor simulateReturnIn: memory. self assert: processor pc = retpc. processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize in: memory]. self assert: (result isInteger "an oop result" or: [result == coInterpreter or: [result == objectMemory or: [result == nil or: [result == #continueNoReturn]]]]). processor cResultRegister: (result ifNil: [0] ifNotNil: [result isInteger ifTrue: [result] ifFalse: [16rF00BA222]])! From commits at source.squeak.org Sat Oct 31 05:57:09 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 31 Oct 2020 05:57:09 0000 Subject: [Vm-dev] VM Maker: Cog-eem.425.mcz Message-ID: Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.425.mcz ==================== Summary ==================== Name: Cog-eem.425 Author: eem Time: 30 October 2020, 10:57:07.489163 pm UUID: c3bf37ca-a5fd-43e4-bab0-68e08a0cbe86 Ancestors: Cog-eem.424 smashCallerSavedRegistersWithValuesFrom:by:in: is not a good idea. smashCallerSavedRegistersWithValuesFrom:by: is just fine. And we do need abiUnmarshal: for x86. =============== Diff against Cog-eem.424 =============== Item was added: + ----- Method: BochsIA32Alien>>abiUnmarshal: (in category 'accessing-abstract') ----- + abiUnmarshal: nArgs + "Remove nArgs form teh stack of a leaf call" + self esp: self esp + (nArgs * 4)! Item was added: + ----- Method: BochsIA32Alien>>smashCallerSavedRegistersWithValuesFrom:by: (in category 'accessing-abstract') ----- + smashCallerSavedRegistersWithValuesFrom: base by: step + #(eax: ecx: edx:) withIndexDo: + [:accessor :index| + self perform: accessor with: index - 1 * step + base]! Item was removed: - ----- Method: BochsIA32Alien>>smashCallerSavedRegistersWithValuesFrom:by:in: (in category 'accessing-abstract') ----- - smashCallerSavedRegistersWithValuesFrom: base by: step in: aMemory - #(eax: ecx: edx:) - withIndexDo: - [:accessor :index| - self perform: accessor with: index - 1 * step + base]! Item was added: + ----- Method: BochsX64Alien>>smashCallerSavedRegistersWithValuesFrom:by: (in category 'accessing-abstract') ----- + smashCallerSavedRegistersWithValuesFrom: base by: step + CogX64Compiler callerSavedRegisterSetters withIndexDo: + [:setter :index| + self perform: setter with: index - 1 * step + base]! Item was removed: - ----- Method: BochsX64Alien>>smashCallerSavedRegistersWithValuesFrom:by:in: (in category 'accessing-abstract') ----- - smashCallerSavedRegistersWithValuesFrom: base by: step in: aMemory - | volatileRegisters | - CogX64Compiler isSysV - ifTrue: - [volatileRegisters := #(rax: rcx: rdx: rsi: rdi: r8: r9: r10: r11:)] - ifFalse: "We should also save the registers to the shadow parameter space." - [volatileRegisters := #(rax: rcx: rdx: r8: r9: r10: r11:). - #(rcx rdx r8 r9) withIndexDo: - [:getter :index| - aMemory - unsignedLong64At: self rbp + 9 + (index * 8) "skip saved fp and retpc; aMemory is 1-relative" - put: (self perform: getter)]]. - volatileRegisters withIndexDo: - [:setter :index| - self perform: setter with: index - 1 * step + base]! Item was added: + ----- Method: CogProcessorAlien>>abiUnmarshal: (in category 'accessing-abstract') ----- + abiUnmarshal: nArgs + "This is a default for RISCs; assume arguments have been passed in registers and that there is nothing to do."! Item was added: + ----- Method: GdbARMAlien>>smashCallerSavedRegistersWithValuesFrom:by: (in category 'accessing-abstract') ----- + smashCallerSavedRegistersWithValuesFrom: base by: step + #(r0: r1: r2: r3: r9: r12: lr:) withIndexDo: + [:accessor :index| + self perform: accessor with: index - 1 * step + base]! Item was removed: - ----- Method: GdbARMAlien>>smashCallerSavedRegistersWithValuesFrom:by:in: (in category 'accessing-abstract') ----- - smashCallerSavedRegistersWithValuesFrom: base by: step in: aMemory - #(r0: r1: r2: r3: r9: r12: lr:) withIndexDo: - [:accessor :index| - self perform: accessor with: index - 1 * step + base]! Item was added: + ----- Method: MIPSSimulator>>smashCallerSavedRegistersWithValuesFrom:by: (in category 'processor api') ----- + smashCallerSavedRegistersWithValuesFrom: base by: step + "i.e., smashVolatileRegisters" + self flag: #OABI. + self unsignedRegister: AT put: 0 * step + base. + self unsignedRegister: V0 put: 1 * step + base. + self unsignedRegister: V1 put: 2 * step + base. + self unsignedRegister: A0 put: 3 * step + base. + self unsignedRegister: A1 put: 4 * step + base. + self unsignedRegister: A2 put: 5 * step + base. + self unsignedRegister: A3 put: 6 * step + base. + self unsignedRegister: T0 put: 7 * step + base. + self unsignedRegister: T1 put: 8 * step + base. + self unsignedRegister: T2 put: 9 * step + base. + self unsignedRegister: T3 put: 10 * step + base. + self unsignedRegister: T4 put: 11 * step + base. + self unsignedRegister: T5 put: 12 * step + base. + self unsignedRegister: T6 put: 13 * step + base. + self unsignedRegister: T7 put: 14 * step + base. + self unsignedRegister: T8 put: 15 * step + base. + self unsignedRegister: T9 put: 16 * step + base. + self unsignedRegister: GP put: 17 * step + base. + self unsignedRegister: RA put: 18 * step + base! Item was removed: - ----- Method: MIPSSimulator>>smashCallerSavedRegistersWithValuesFrom:by:in: (in category 'processor api') ----- - smashCallerSavedRegistersWithValuesFrom: base by: step in: aMemory - "i.e., smashVolatileRegisters" - self flag: #OABI. - self unsignedRegister: AT put: 0 * step + base. - self unsignedRegister: V0 put: 1 * step + base. - self unsignedRegister: V1 put: 2 * step + base. - self unsignedRegister: A0 put: 3 * step + base. - self unsignedRegister: A1 put: 4 * step + base. - self unsignedRegister: A2 put: 5 * step + base. - self unsignedRegister: A3 put: 6 * step + base. - self unsignedRegister: T0 put: 7 * step + base. - self unsignedRegister: T1 put: 8 * step + base. - self unsignedRegister: T2 put: 9 * step + base. - self unsignedRegister: T3 put: 10 * step + base. - self unsignedRegister: T4 put: 11 * step + base. - self unsignedRegister: T5 put: 12 * step + base. - self unsignedRegister: T6 put: 13 * step + base. - self unsignedRegister: T7 put: 14 * step + base. - self unsignedRegister: T8 put: 15 * step + base. - self unsignedRegister: T9 put: 16 * step + base. - self unsignedRegister: GP put: 17 * step + base. - self unsignedRegister: RA put: 18 * step + base! From commits at source.squeak.org Sat Oct 31 06:01:53 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 31 Oct 2020 06:01:53 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2868.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2868.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2868 Author: eem Time: 30 October 2020, 11:01:42.573574 pm UUID: ff18b9dd-739b-43c9-b4c1-a994d4da65b8 Ancestors: VMMaker.oscog-eem.2867 smashCallerSavedRegistersWithValuesFrom:by:in: is not a good idea. smashCallerSavedRegistersWithValuesFrom:by: is just fine. And we do need abiUnmarshal: for x86. COGMTVM: Fix a missing fix in CoInterpreterMT>>transferTo:from: from CoInterpreter's verison. Fix a slip in windowIsClosing. Fix the assert in preemptDisowningThread. Set both processor's stack pointers and CoInterprteer's saved C stack poi nters when initializing a thread. This is incorrect but gets us going. Need to think about how and when to reset CStack/FramePointer. =============== Diff against VMMaker.oscog-eem.2867 =============== Item was changed: ----- Method: CoInterpreterMT>>initializeProcessorStackForSimulation: (in category 'initialization') ----- initializeProcessorStackForSimulation: vmThread self cCode: [] inSmalltalk: [| range | range := self cStackRangeForThreadIndex: vmThread index. cogit processor setFramePointer: range last + stackPointer: range last - 32. + self setCFramePointer: cogit processor fp setCStackPointer: cogit processor sp]! - stackPointer: range last - 32]! Item was changed: ----- Method: CoInterpreterMT>>preemptDisowningThread (in category 'vm scheduling') ----- preemptDisowningThread "Set the relevant state for disowningVMThread so that it can resume after being preempted and set disowningVMThread to nil to indicate preemption. N.B. This should only be sent from checkPreemptionOfDisowningThread. There are essentially four things to do. a) save the VM's notion of the current C stack pointers; these are pointers into a thread's stack and must be saved and restored in thread switch. b) save the VM's notion of the current Smalltalk execution point. This is simply the suspend half of a process switch that saves the current context in the current process. c) add the process to the thread's set of AWOL processes so that the scheduler won't try to run the process while the thread has disowned the VM. d) save the in-primitive VM state, newMethod and argumentCount ownVM: will restore the VM context as of disownVM: from the above when it finds it has been preempted." | activeProc activeContext preemptedThread | self assert: disowningVMThread notNil. self assert: (disowningVMThread state = CTMUnavailable or: [disowningVMThread state = CTMWantingOwnership]). self cCode: '' inSmalltalk: [| range | range := self cStackRangeForThreadIndex: disowningVMThread index. + disowningVMThread index = cogThreadManager getVMOwner + ifTrue: [self assert: ((range includes: CStackPointer) and: [range includes: CFramePointer])] + ifFalse: [self deny: ((range includes: CStackPointer) or: [range includes: CFramePointer])]]. - self assert: (range includes: CStackPointer). - self assert: (range includes: CFramePointer)]. cogit recordEventTrace ifTrue: [self recordTrace: TracePreemptDisowningThread thing: (objectMemory integerObjectOf: disowningVMThread index) source: 0]. disowningVMThread cStackPointer: CStackPointer. disowningVMThread cFramePointer: CFramePointer. activeProc := self activeProcess. self assert: (objectMemory fetchPointer: MyListIndex ofObject: activeProc) = objectMemory nilObject. objectMemory storePointer: MyListIndex ofObject: activeProc withValue: (objectMemory splObj: ProcessInExternalCodeTag). "The instructionPointer must be pushed because the convention for inactive stack pages is that the instructionPointer is top of stack. We need to know if this primitive is called from machine code because the invariant that the return pc of an interpreter callee calling a machine code caller is ceReturnToInterpreterPC must be maintained." self push: instructionPointer. self externalWriteBackHeadFramePointers. activeContext := self ensureFrameIsMarried: framePointer SP: stackPointer. objectMemory storePointer: SuspendedContextIndex ofObject: activeProc withValue: activeContext. "Since pushing the awol process may realloc disowningVMThread we need to reassign. But since we're going to nil disowningVMThread anyway we can assign to a local." preemptedThread := cogThreadManager pushAWOLProcess: activeProc on: disowningVMThread. disowningVMThread := nil. preemptedThread priority: (self quickFetchInteger: PriorityIndex ofObject: activeProc). (self ownerIndexOfProcess: activeProc) = 0 ifTrue: [self setOwnerIndexOfProcess: activeProc to: preemptedThread index bind: false] ifFalse: [self assert: (self ownerIndexOfProcess: activeProc) = preemptedThread index]. preemptedThread newMethodOrNull: newMethod; argumentCount: argumentCount; primitiveFunctionPointer: primitiveFunctionPointer; inMachineCode: instructionPointer asUnsignedInteger <= objectMemory startOfMemory! Item was changed: ----- Method: CoInterpreterMT>>transferTo:from: (in category 'process primitive support') ----- transferTo: newProc from: sourceCode "Record a process to be awoken on the next interpreter cycle. Override to potentially switch threads either if the new process is bound to another thread, or if there is no runnable process but there is a waiting thread. Note that the abort on no runnable process has beeen moved here from wakeHighestPriority." + | sched oldProc activeContext | - | sched oldProc activeContext vmThread | - statProcessSwitch := statProcessSwitch + 1. self push: instructionPointer. self externalWriteBackHeadFramePointers. self assertValidExecutionPointe: instructionPointer r: framePointer s: stackPointer. "ensureMethodIsCogged: in makeBaseFrameFor: in externalSetStackPageAndPointersForSuspendedContextOfProcess: below may do a code compaction. Nil instructionPointer to avoid it getting pushed twice." instructionPointer := 0. sched := self schedulerPointer. oldProc := objectMemory fetchPointer: ActiveProcessIndex ofObject: sched. self recordContextSwitchFrom: oldProc in: sourceCode. + activeContext := self ensureFrameIsMarried: framePointer SP: stackPointer + objectMemory wordSize. - activeContext := self ensureFrameIsMarried: framePointer SP: stackPointer. objectMemory storePointer: SuspendedContextIndex ofObject: oldProc withValue: activeContext. + newProc ifNil: - newProc isNil ifTrue: ["Two possibilities. One, there is at least one thread waiting to own the VM in which case it should be activated. Two, there are no processes to run and so abort." + self willingVMThread ifNotNil: + [:vmThread| + vmThread state = CTMWantingOwnership ifTrue: + [self returnToSchedulingLoopAndReleaseVMOrWakeThread: vmThread source: sourceCode]]. + self error: 'scheduler could not find a runnable process']. - vmThread := self willingVMThread. - (vmThread notNil and: [vmThread state = CTMWantingOwnership]) ifTrue: - [self returnToSchedulingLoopAndReleaseVMOrWakeThread: vmThread source: sourceCode]. - self error: 'scheduler could not find a runnable process']. + objectMemory + storePointer: ActiveProcessIndex ofObject: sched withValue: newProc; + storePointerUnchecked: MyListIndex ofObject: newProc withValue: objectMemory nilObject. - objectMemory storePointer: ActiveProcessIndex ofObject: sched withValue: newProc. - objectMemory storePointerUnchecked: MyListIndex ofObject: newProc withValue: objectMemory nilObject. self threadSwitchIfNecessary: newProc from: sourceCode. self externalSetStackPageAndPointersForSuspendedContextOfProcess: newProc! Item was changed: ----- Method: CogIA32Compiler>>cpuid: (in category 'feature detection') ----- cpuid: n "This is simulation only invocation of the throw-away CPUID function generated to initialize cpuidWord0 and cpuidWord1" + | result | cogit processor abiMarshalArg0: n in: objectMemory memory. + result := cogit simulateLeafCallOf: cogit methodZoneBase. + cogit processor abiUnmarshal: 1. + ^result! - ^cogit simulateLeafCallOf: cogit methodZoneBase! Item was changed: ----- Method: CogVMSimulator>>windowIsClosing (in category 'primitive support') ----- windowIsClosing self threadManager ifNotNil: [:threadManager| threadManager guiProcess ifNotNil: [:guiProcess| (guiProcess ~= Processor activeProcess and: [guiProcess isInteger not]) ifTrue: [guiProcess signalException: + (Notification new tag: #evaluateQuit; yourself). + Processor terminateActive]]]. - (Notification new tag: #evaluateQuit; yourself)]. - Processor terminateActive]]. quitBlock ifNotNil: [:effectiveQuitBlock| quitBlock := nil. "stop recursion on explicit window close." [effectiveQuitBlock value] on: BlockCannotReturn do: [:ex|]] "Cause return from #test, et al"! Item was added: + ----- Method: CogX64Compiler class>>callerSavedRegisterSetters (in category 'accessing') ----- + callerSavedRegisterSetters + "Answer the register setters for the caller-saved registers on the current ABI" + ^SysV + ifTrue: [#(rax: rcx: rdx: rsi: rdi: r8: r9: r10: r11:)] + ifFalse: [#(rax: rcx: rdx: r8: r9: r10: r11:)]! Item was changed: ----- Method: Cogit>>handleCallOrJumpSimulationTrap: (in category 'simulation only') ----- handleCallOrJumpSimulationTrap: aProcessorSimulationTrap | evaluable function memory result savedFramePointer savedStackPointer savedArgumentCount retpc | "This is a hack fix before we revise the simulators. When a jump call is made, the next pc is effectively the return address on the stack, not the instruction following the jump." aProcessorSimulationTrap type == #jump ifTrue: [processor hackFixNextPCOfJumpFor: aProcessorSimulationTrap using: objectMemory]. evaluable := simulatedTrampolines at: aProcessorSimulationTrap address ifAbsent: [self errorProcessingSimulationTrap: aProcessorSimulationTrap in: simulatedTrampolines]. function := evaluable isBlock ifTrue: ['aBlock; probably some plugin primitive'] ifFalse: [evaluable receiver == backEnd ifTrue: [^self handleABICallOrJumpSimulationTrap: aProcessorSimulationTrap evaluable: evaluable]. evaluable selector]. memory := coInterpreter memory. function == #interpret ifTrue: "i.e. we're here via ceInvokeInterpret/ceReturnToInterpreterTrampoline and should discard all state back to enterSmalltalkExecutiveImplementation" [self recordInstruction: {'(simulated jump call of '. aProcessorSimulationTrap address. '/'. function. ')'}. + processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize. - processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize in: memory. coInterpreter reenterInterpreter. "NOTREACHED" self halt]. function ~~ #ceBaseFrameReturn: ifTrue: [coInterpreter assertValidExternalStackPointers]. (backEnd wantsNearAddressFor: function) ifTrue: [^self perform: function with: aProcessorSimulationTrap]. processor simulateCallOf: aProcessorSimulationTrap address nextpc: aProcessorSimulationTrap nextpc memory: memory. retpc := processor retpcIn: memory. self recordInstruction: {'(simulated call of '. aProcessorSimulationTrap address. '/'. function. ')'}. savedFramePointer := coInterpreter framePointer. savedStackPointer := coInterpreter stackPointer. savedArgumentCount := coInterpreter argumentCount. result := ["self halt: evaluable selector." clickConfirm ifTrue: [(self confirm: 'skip run-time call?') ifFalse: [clickConfirm := false. self halt]]. evaluable valueWithArguments: (processor postCallArgumentsNumArgs: evaluable numArgs in: memory)] on: ReenterMachineCode do: [:ex| ex return: #continueNoReturn]. coInterpreter assertValidExternalStackPointers. "Verify the stack layout assumption compileInterpreterPrimitive: makes, provided we've not called something that has built a frame, such as closure value or evaluate method, or switched frames, such as primitiveSignal, primitiveWait, primitiveResume, primitiveSuspend et al." (function beginsWith: 'primitive') ifTrue: [coInterpreter primFailCode = 0 ifTrue: [(CogVMSimulator stackAlteringPrimitives includes: function) ifFalse: ["This is a rare case (e.g. in Scorch where a married context's sender is set to nil on trapTrpped and hence the stack layout is altered." (function == #primitiveSlotAtPut and: [objectMemory isContext: (coInterpreter frameReceiver: coInterpreter framePointer)]) ifFalse: [self assert: savedFramePointer = coInterpreter framePointer. self assert: savedStackPointer + (savedArgumentCount * objectMemory wordSize) = coInterpreter stackPointer]]] ifFalse: [self assert: savedFramePointer = coInterpreter framePointer. self assert: savedStackPointer = coInterpreter stackPointer]]. result ~~ #continueNoReturn ifTrue: [self recordInstruction: {'(simulated return to '. processor retpcIn: memory. ')'}. processor simulateReturnIn: memory. self assert: processor pc = retpc. + processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize]. - processor smashCallerSavedRegistersWithValuesFrom: 16r80000000 by: objectMemory wordSize in: memory]. self assert: (result isInteger "an oop result" or: [result == coInterpreter or: [result == objectMemory or: [result == nil or: [result == #continueNoReturn]]]]). processor cResultRegister: (result ifNil: [0] ifNotNil: [result isInteger ifTrue: [result] ifFalse: [16rF00BA222]])! Item was changed: ----- Method: Cogit>>simulateCeFlushDCacheFrom:to: (in category 'simulation only') ----- simulateCeFlushDCacheFrom: start to: finish processor abiMarshalArg0: start arg1: finish in: objectMemory memory. + self simulateLeafCallOf: ceFlushDCache. + processor abiUnmarshal: 2! - self simulateLeafCallOf: ceFlushDCache! Item was changed: ----- Method: Cogit>>simulateCeFlushICacheFrom:to: (in category 'simulation only') ----- simulateCeFlushICacheFrom: start to: finish processor abiMarshalArg0: start arg1: finish in: objectMemory memory. + self simulateLeafCallOf: ceFlushICache. + processor abiUnmarshal: 2! - self simulateLeafCallOf: ceFlushICache! Item was changed: ----- Method: Cogit>>tryLockVMOwner: (in category 'multi-threading') ----- tryLockVMOwner: value + "ceTryLockVMOwner does an atomic compare-and-swap of the vmOwner + variable with zero and the argument, setting vmOwner to value if it was + zero. It answers if the lock was zero and hence was acquired." - "ceTryLockVMOwner does an atomic compare-and-swap of the lock - with the argument and zero, setting the lock to value if it was zero. - It answers non-zero if the lock was zero." processor abiMarshalArg0: value in: objectMemory memory. + ^[(self simulateLeafCallOf: ceTryLockVMOwner) ~= 0] ensure: + [processor abiUnmarshal: 1]! - ^0 ~= (self simulateLeafCallOf: ceTryLockVMOwner)!