From notifications at github.com Sat May 1 10:24:51 2021 From: notifications at github.com (Marcel Taeumel) Date: Sat, 01 May 2021 03:24:51 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Patch callback thunkEntry to not optimize (#353) In-Reply-To: References: Message-ID: qsort still SEGFAULTs for me when compiled via Cygwin with `gcc-Version 10.2.0 (GCC)` in production mode (`./mvm -f`). :-( When trying to qsort a list of 10 floats, the first callback is fine but the second callback has a different address for the callback context -- which should not happen -- and shows bogus values for the stack arguments. Maybe it is related to some sort of stack optimization? Works fine with DEBUG build, does also SEGFAULT with ASSERT 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/pull/353#issuecomment-830607945 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sun May 2 08:56:45 2021 From: notifications at github.com (Marcel Taeumel) Date: Sun, 02 May 2021 01:56:45 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] primitiveSSLCreate fails sporadically on Windows (#554) In-Reply-To: References: Message-ID: Well ... if it helps ... try to avoid the file-chooser when starting the OSVM under Windows. Either specify the image path on the command line or do drag-and-drop or just have a single image in your VM path. There is something fishy going on there. Last time, I had repeated issues with FFI that I could repeatedly resolve with directly opening the image file. This is very strange! (Maybe it has something to do with those dialogs being obsolete in Windows 10? See: - https://docs.microsoft.com/en-us/windows/win32/dlgbox/using-common-dialog-boxes#opening-a-file - https://docs.microsoft.com/en-us/windows/win32/shell/common-file-dialog -- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/554#issuecomment-830774945 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sun May 2 14:38:59 2021 From: notifications at github.com (Marcel Taeumel) Date: Sun, 02 May 2021 07:38:59 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] primitiveSSLCreate fails sporadically on Windows (#554) In-Reply-To: References: Message-ID: Note that I cannot reproduce the SSL bug as described by Christoph above in recent VMs. Seems that Eliot fix worked. :-) -- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/554#issuecomment-830819576 -------------- next part -------------- An HTML attachment was scrubbed... URL: From ken.dickey at whidbey.com Sun May 2 15:57:37 2021 From: ken.dickey at whidbey.com (ken.dickey at whidbey.com) Date: Sun, 02 May 2021 15:57:37 +0000 Subject: [Vm-dev] ARMv8 BitBLT speedups provided by RPi/Ben Avison Message-ID: Experience Report: FYI, I git cloned https://github.com/bavison/opensmalltalk-vm and built build.linux64ARMv8/squeak.cog.spur/build Build went fine (did not have to elide broken CameraPlugin or adjust config.h) and all seems to work fine for me (on aarch64 Chromebook). FYI, -KenD From tim at rowledge.org Sun May 2 17:06:56 2021 From: tim at rowledge.org (tim Rowledge) Date: Sun, 2 May 2021 10:06:56 -0700 Subject: [Vm-dev] ARMv8 BitBLT speedups provided by RPi/Ben Avison In-Reply-To: References: Message-ID: <5AC0AA17-45B0-4BD5-9A8B-A7B9D39841FB@rowledge.org> Excellent! > On 2021-05-02, at 8:57 AM, ken.dickey at whidbey.com wrote: > FYI, I git cloned > https://github.com/bavison/opensmalltalk-vm > and built > build.linux64ARMv8/squeak.cog.spur/build > > Build went fine (did not have to elide broken CameraPlugin or adjust config.h) and all seems to work fine for me (on aarch64 Chromebook). tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Strange OpCodes: IBLU: Ignore Basic Laws of Universe From notifications at github.com Mon May 3 10:29:37 2021 From: notifications at github.com (Christoph Thiede) Date: Mon, 03 May 2021 03:29:37 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Bintray has reached end-of-life, where can we download the bleeding-edge releases now? (#564) Message-ID: Is it possible to migrate to GitHub prereleases? Also, the badge in the README should be updated. -- 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/564 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue May 4 11:23:24 2021 From: notifications at github.com (bavison) Date: Tue, 04 May 2021 04:23:24 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Update BitBlt support (primarily for 64-bit ARM) (#565) Message-ID: The accelerated BitBlt framework was initially targeted at the ARM11, running the AArch32 instruction set (which is the only one it fully supported). More recent ARMs run much faster, which has enabled more comprehensive testing via the BitBlt fuzz test framework (https://github.com/bavison/SqueakBitBltTest). This has detected a handful of bugs in both the AArch32-specific and the architecture-neutral parts of the fast BitBlt framework. First I address these. Next, I add a number of BitBlt fast paths written in platform-independent C. The 8-to-32bpp conversion routine is as fast as anything I could manage with hand-crafted AArch64 assembly. Others are useful as reference implementations for other architectures, or to fill in gaps in their abilities (for example, while I've introduced a class of fast paths for colour maps that only feature two distinct colours, I haven't retrospectively written any AArch32 fast paths for them, so the C fast path will be used for them on AArch32). The fast path that handles operations with scalar halftoning and 32bpp destination images is a bit of a special case, in that it acts to extend the capabilities of other fast paths. It thus accelerates both AArch32 and AArch64. The most significant commit, however, is the last one. This features a collection of fast paths implemented using inline AArch64 assembly, tuned for Cortex-A72 (as found in the Raspberry Pi 4). Based on the results of profiling, this has an emphasis on operations with a 32bpp destination image. Operations with any source depth, in conjunction with 22 of the possible combinationRules (including the common sourceWord, pixPaint and alphaBlend rules) should all be accelerated, providing you don't use little-endian pixel packing, vector halftoning, or non-standard colour map rules when converting from different colour depths. There are additional fast paths for alphaBlend for either a constant source colour, or a source image whose colour map only consists of two different colours (i.e. where the source image is effectively used as a 1bpp mask, despite being of a greater depth). You can view, comment on, or merge this pull request online at: https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/565 -- Commit Summary -- * Don't pass -m32 to GCC for ARM builds * Correct various "#if ENABLE_FAST_BLT" to "#ifdef" * Don't assume sourcePPW is valid on entry to copyBitsFallback * Fallback routines need extra help to detect intra-image operations * Remove invalid shortcut in rgbComponentAlphawith * Fix bug in 32-bit ARM fast paths * Fix buffer overflow bugs * Fix corruption bugs with wide 1bpp source images * Fix type of halftone array for 64-bit targets * Detect and add a new fast path flag for effective-1bpp colour maps * C fast path for 32bpp alphaBlend * C fast path for planar alphaBlend * C fast path for 8->32bpp conversion * C fast path for alphaBlend with 1bpp colour map and scalar halftone * Apply scalar halftoning to colour map entries instead for 32bpp destination * Enable fast blit code for AArch64 * AArch64 assembly optimisations -- File Changes -- M build.linux32ARMv6/squeak.cog.spur/build.assert/mvm (2) M build.linux32ARMv6/squeak.cog.spur/build.debug/mvm (2) M build.linux32ARMv6/squeak.cog.spur/build/mvm (2) M build.linux64ARMv8/squeak.cog.spur/build.assert/mvm (1) M build.linux64ARMv8/squeak.cog.spur/build.debug/mvm (1) M build.linux64ARMv8/squeak.cog.spur/build/mvm (1) A platforms/Cross/plugins/BitBltPlugin/BitBltArm64.c (2482) A platforms/Cross/plugins/BitBltPlugin/BitBltArm64.h (30) M platforms/Cross/plugins/BitBltPlugin/BitBltArmSimdAsm.hdr (2) M platforms/Cross/plugins/BitBltPlugin/BitBltArmSimdSourceWord.s (17) M platforms/Cross/plugins/BitBltPlugin/BitBltDispatch.c (126) M platforms/Cross/plugins/BitBltPlugin/BitBltDispatch.h (2) M platforms/Cross/plugins/BitBltPlugin/BitBltGeneric.c (247) M platforms/Cross/plugins/BitBltPlugin/BitBltInternal.h (32) M platforms/unix/config/configure (12) M platforms/unix/plugins/BitBltPlugin/acinclude.m4 (11) M src/plugins/BitBltPlugin/BitBltPlugin.c (23) -- Patch Links -- https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/565.patch https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/565.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/565 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue May 4 20:28:04 2021 From: notifications at github.com (Nicolas Cellier) Date: Tue, 04 May 2021 13:28:04 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Update BitBlt support (primarily for 64-bit ARM) (#565) In-Reply-To: References: Message-ID: Great! The only thing to be changed is that src/plugins/BitBltPlugin/BitBltPlugin.c is generated from Smalltalk slang code. I think that we can merge first, then modify VMMaker and regenerate BitBltPlugin Thanks!!! -- 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/565#issuecomment-832221598 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Tue May 4 20:41:00 2021 From: notifications at github.com (Nicolas Cellier) Date: Tue, 04 May 2021 13:41:00 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Incorrect become forwarder for objectSize: mirror primitive (#566) Message-ID: This has been reported in pharo fork as https://github.com/pharo-project/opensmalltalk-vm/issues/179 and also affects upstream opensmalltalk-vm ``` | result obj | result := OrderedCollection new. obj := { 1. 2. 3 }. result add: (thisContext objectSize: obj). "Should be 3" obj become: { 'a'. 'b'. }. result add: (thisContext objectSize: obj). "Should be 2, but is 0" Smalltalk garbageCollect. result add: (thisContext objectSize: obj). "Should be 2" result "an OrderedCollection(3 0 2)" ``` -- 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/566 -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Tue May 4 21:57:23 2021 From: commits at source.squeak.org (commits at source.squeak.org) Date: Tue, 4 May 2021 21:57:23 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2957.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2957.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2957 Author: eem Time: 4 May 2021, 2:57:14.47864 pm UUID: 1905cffe-ff84-45bc-b423-79e7978ecfd7 Ancestors: VMMaker.oscog-eem.2956 Fix https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/566. The primitiveSize primtiive (#62) failed to check for its argument being a forwarder when the primtiive is used as a mirror primitive (num args > 0). As a minro simplification use methodReturnInteger: in it and primitiveContextSize, sicne both are varargs. =============== Diff against VMMaker.oscog-eem.2956 =============== Item was changed: ----- Method: InterpreterPrimitives>>primitiveSize (in category 'indexing primitives') ----- primitiveSize | rcvr hdr fmt fixedFields totalLength | rcvr := self stackTop. ((objectMemory isImmediate: rcvr) "Integers are not indexable" or: [hdr := objectMemory baseHeader: rcvr. + (fmt := objectMemory formatOfHeader: hdr) < objectMemory arrayFormat "This is not an indexable object" + or: [objectMemory isForwarderFormat: fmt]]) "And if Spur, this is a forwarder." - (fmt := objectMemory formatOfHeader: hdr) < 2]) "This is not an indexable object" ifTrue: [^self primitiveFailFor: PrimErrBadReceiver]. (fmt = objectMemory indexablePointersFormat and: [objectMemory isContextHeader: hdr]) ifTrue: [^self primitiveContextSize]. totalLength := objectMemory lengthOf: rcvr baseHeader: hdr format: fmt. fixedFields := objectMemory fixedFieldsOf: rcvr format: fmt length: totalLength. + self methodReturnInteger: totalLength - fixedFields! - self pop: argumentCount + 1 thenPush: (objectMemory integerObjectOf: totalLength - fixedFields)! Item was added: + ----- Method: ObjectMemory>>isForwarderFormat: (in category 'header access') ----- + isForwarderFormat: format + ^false! Item was added: + ----- Method: SpurMemoryManager>>isForwarderFormat: (in category 'header formats') ----- + isForwarderFormat: format + ^format = self forwardedFormat! Item was changed: ----- Method: StackInterpreterPrimitives>>primitiveContextSize (in category 'indexing primitives') ----- primitiveContextSize "Special version of primitiveSize for accessing contexts. Written to be varargs for use from mirror primitives." | rcvr sz hdr fmt totalLength fixedFields | rcvr := self stackTop. hdr := objectMemory baseHeader: rcvr. fmt := objectMemory formatOfHeader: hdr. totalLength := objectMemory lengthOf: rcvr baseHeader: hdr format: fmt. fixedFields := objectMemory fixedFieldsOf: rcvr format: fmt length: totalLength. (objectMemory isContextHeader: hdr) ifTrue: [self externalWriteBackHeadFramePointers. sz := self stackPointerForMaybeMarriedContext: rcvr] ifFalse: [sz := totalLength - fixedFields]. + self methodReturnInteger: sz! - self pop: argumentCount + 1 thenPush: (objectMemory integerObjectOf: sz)! From noreply at github.com Tue May 4 22:11:20 2021 From: noreply at github.com (Eliot Miranda) Date: Tue, 04 May 2021 15:11:20 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 10aac2: CogVM source as per VMMaker.oscog-eem.2957 Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 10aac272367b89068af3730641240179269ce6a7 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/10aac272367b89068af3730641240179269ce6a7 Author: Eliot Miranda Date: 2021-05-04 (Tue, 04 May 2021) Changed paths: 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/plugins/CameraPlugin/CameraPlugin.c M src/vm/cointerp.c M src/vm/cointerp.h M src/vm/gcc3x-cointerp.c M stacksrc/vm/gcc3x-interp.c M stacksrc/vm/interp.c Log Message: ----------- CogVM source as per VMMaker.oscog-eem.2957 Fix https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/566. The primitiveSize primtiive (#62) failed to check for its argument being a forwarder when the primtiive is used as a mirror primitive (num args > 0). As a minor simplification use methodReturnInteger: in it and primitiveContextSize, since both are varargs. From notifications at github.com Tue May 4 22:11:22 2021 From: notifications at github.com (Eliot Miranda) Date: Tue, 04 May 2021 15:11:22 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Incorrect become forwarder for objectSize: mirror primitive (#566) In-Reply-To: References: Message-ID: Closed #566 via 10aac272367b89068af3730641240179269ce6a7. -- 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/566#event-4685936342 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Wed May 5 00:56:31 2021 From: noreply at github.com (Eliot Miranda) Date: Tue, 04 May 2021 17:56:31 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] f7ea6a: Changed sqSocketListenOnPortBacklogSizeInterface()... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: f7ea6a5bb050173b0d947598e7e97e5231743556 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f7ea6a5bb050173b0d947598e7e97e5231743556 Author: John Dougan Date: 2021-04-30 (Fri, 30 Apr 2021) Changed paths: M platforms/win32/plugins/SocketPlugin/sqWin32NewNet.c Log Message: ----------- Changed sqSocketListenOnPortBacklogSizeInterface() to match general behavior of Unix socket version. Previously was alway incorrectly binding UDP sockets to INADDR_ANY instead of the specified IPv4 address. Commit: 128d14994b4a8002bb006db1bf9a5b37544139c1 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/128d14994b4a8002bb006db1bf9a5b37544139c1 Author: Eliot Miranda Date: 2021-05-04 (Tue, 04 May 2021) Changed paths: M platforms/win32/plugins/SocketPlugin/sqWin32NewNet.c Log Message: ----------- Merge pull request #563 from jdougan/Cog Fix UDP binding in Windows sockets Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/10aac272367b...128d14994b4a From notifications at github.com Wed May 5 00:56:32 2021 From: notifications at github.com (Eliot Miranda) Date: Tue, 04 May 2021 17:56:32 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix UDP binding in Windows sockets (#563) In-Reply-To: References: Message-ID: Merged #563 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/563#event-4686337072 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed May 5 01:02:59 2021 From: notifications at github.com (Eliot Miranda) Date: Tue, 04 May 2021 18:02:59 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix UDP binding in Windows sockets (#563) In-Reply-To: References: Message-ID: Hi John, thanks for this. Which specific tests are affected by this change? -- 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/563#issuecomment-832350744 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed May 5 04:42:59 2021 From: notifications at github.com (John Dougan) Date: Tue, 04 May 2021 21:42:59 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix UDP binding in Windows sockets (#563) In-Reply-To: References: Message-ID: No tests present in 5.3 broke. I could redo my test code and stick it in the socket tests, if you could point me to how to get it integrated. I caught it while working on Rbt to make it handler multiple network interfaces more sanely. This prior behavior was normal up until Sept. 2003, when there was discussion on the squeak-l about it and Ian updated the Unix code to do the right thing. Since then there have been some complaints, but apparently no one who had the expertise or time to fix it was available. Is there anyone at present who has the nominal responsibility for the socket plugin and the various platform modules? I spent a lot of time reading the code and have some questions about the whys of the design. -- 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/563#issuecomment-832406913 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed May 5 05:50:24 2021 From: notifications at github.com (Eliot Miranda) Date: Tue, 04 May 2021 22:50:24 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix UDP binding in Windows sockets (#563) In-Reply-To: References: Message-ID: John, look at SocketTest in a 5.3 or preferably a trunk image. You can then submit a new version of the Tests package to inbox or just mail me a change set etc. We can discuss more on squeak-dev to eg make you a committer etc. Discuss the design issues on vm-dev or squeak-dev. I’m curious about the design too and would love to get rid of the threads and the asynchronous name lookup, replaced by a proper threaded FFI. -- 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/563#issuecomment-832429226 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed May 5 14:22:43 2021 From: notifications at github.com (smalltalking) Date: Wed, 05 May 2021 07:22:43 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix UDP binding in Windows sockets (#563) In-Reply-To: References: Message-ID: I noted this issue along with some others back in 2014 but never got my questions answered: http://lists.squeakfoundation.org/pipermail/vm-dev/2014-December/017383.html SocketPlugin's platform code needs some review/cleanup. -- 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/563#issuecomment-832728987 -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Thu May 6 22:17:59 2021 From: noreply at github.com (Eliot Miranda) Date: Thu, 06 May 2021 15:17:59 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] fc4b69: MacOS builds: get applications built under a newer... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: fc4b69a7c16899244a3cfde95297d140d9889fc8 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/fc4b69a7c16899244a3cfde95297d140d9889fc8 Author: Eliot Miranda Date: 2021-05-06 (Thu, 06 May 2021) Changed paths: M build.macos64ARMv8/common/Makefile.flags M build.macos64ARMv8/common/Makefile.vm M build.macos64x64/common/Makefile.flags M build.macos64x64/common/Makefile.vm Log Message: ----------- MacOS builds: get applications built under a newer version (e.g. 11.x) to run on the version specified by TARGET_VERSION_MIN. Previously they were being compiled with TARGET_VERSION_MIN specified, but not linked. [ci skip] From notifications at github.com Fri May 7 08:01:55 2021 From: notifications at github.com (Christoph Thiede) Date: Fri, 07 May 2021 01:01:55 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] [Win10] [Squeak] High CPU usage in different images for a few minutes after resume from sleep (#537) In-Reply-To: References: Message-ID: Any ideas? How would I debug this? ![image](https://user-images.githubusercontent.com/38782922/117417958-2bdfd800-af1b-11eb-95f1-f4dcb5c634f8.png) -- 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/537#issuecomment-834153050 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sat May 8 16:23:24 2021 From: notifications at github.com (Eliot Miranda) Date: Sat, 08 May 2021 09:23:24 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] [Win10] [Squeak] High CPU usage in different images for a few minutes after resume from sleep (#537) In-Reply-To: References: Message-ID: Hi Christoph, the VM maintains a circular buffer of the most recent 256 invoked non-JIT primitives, the primitive trace log. This is sometimes a useful clue to what the VM has been doing up to the point where the primitive trace log (PRL) is dumped. On Unix the PTL and current stack can be printed on stdout by sending SIGUSR1 to the VM. If you wanted to dump the PTL on Windows you’d have to work out how to signal the VM. I’m in no way a Windows expert so I have no idea how to do this. But if I were in your shoes this is the route I would take. _,,,^..^,,,_ (phone) > On May 7, 2021, at 1:01 AM, Christoph Thiede ***@***.***> wrote: > >  > Any ideas? How would I debug this? > > > > — > 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/issues/537#issuecomment-835419053 -------------- next part -------------- An HTML attachment was scrubbed... URL: From vanessa at codefrau.net Mon May 10 15:45:55 2021 From: vanessa at codefrau.net (Vanessa Freudenberg) Date: Mon, 10 May 2021 08:45:55 -0700 Subject: [Vm-dev] [squeak-dev] 2 raisedTo: 63 on Pi returns 0 ? (was Re: how to determine available RAM?) In-Reply-To: <1620644096-16e8271d29733a29158f5f4d639fda80@pckswarms.ch> References: <6951BADE-D8F3-4573-AEFD-D50F23BF356A@rowledge.org> <20210507222218.GA18151@shell.msen.com> <4942434F-93E5-4B09-85C4-D8FA1C172773@rowledge.org> <20210509143152.GA91791@shell.msen.com> <69695C3C-D0E9-469A-9B02-FB685ED9E8A4@rowledge.org> <1620644096-16e8271d29733a29158f5f4d639fda80@pckswarms.ch> Message-ID: I think we really ought to move the discussion over to the experts at vm-dev. CC’ed. –Vanessa– On Mon, May 10, 2021 at 03:55 Bruce O'Neel wrote: > Hi, > > So, um, kind of good news but maybe not. > > So I built a collection of different VMs on ARM64 and the most recent > build is below. The stack VM gives the right answer, the cog one not. > The dates are the dates of the most recent commit from the git repository. > > 2020/03/24 - Cog VM does not build, stack vm builds with the right answer. > 2021/01/09 - Both stack and cog VMs build. Stack VM gives the right > answer. > 2021/03/24 - Both stack and cog VMs build. Stack VM gives the right > answer. > > All of this on a Ubuntu 18.04 based system with Gcc 7.5.0 on an NVIDIA > Jetson Nano which has A57 cores. > > I also in all cases with the cog VMs I tested the debug build as well in > hopes that it was a GCC optimization problem, but, alas, no luck there. > > Tim, is it possible to try a stack build and see if that gives the correct > answer for you? > > Thanks. > > bruce > > > > > > [image: image.png] > > > > *09 May 2021 19:56 tim Rowledge > > wrote:* > > > > > On 2021-05-09, at 7:31 AM, David T. Lewis wrote: > > > > > If the primitive is failing for 16r80000000 squared, then I wonder if we > > may be looking at a signed/unsigned arithmetic problem somewhere in the > > plugin. > > Ah, but that is the extra-weird bit. It *sometimes* gives the right > answer. The only thing I can think of that could explain that & that might > be ARM64 code specific is something to do with the address of the LPI, > which obviously is sometihng that varies with each test. If there is some > code expecting base addresses to always match some requirement and that is > not always being met, subsequent code might be reading the wrong values. > > Another possibility is that the compiled result of the LI plugin has a > bug; it's not like C compilers never get it wrong. > > Another possibility must be that I screwed up somewhere and the 'correct' > result I saw was not actually with the prim enabled - but I'm fairly sure I > did that in a different image anyway. Grr. > > And now I do more testing, and I haven't yet got the right answer again > for 16r80000000 squared. > 16r80000001 squared always seems to be ok. 16r[9ABCDEF]0000000 squared > always seems to be ok. And 16r[7654321]0000000 squared always seems to be > right. > > Also 16r40000000 squared * 4 seems always ok. So we're rather pointed to > some peculiarity of the 16r80000000 bit-pattern? My brian hurts. > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: SG: Show Garbage > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: image.png Type: image/png Size: 306507 bytes Desc: not available URL: From commits at source.squeak.org Tue May 11 02:19:38 2021 From: commits at source.squeak.org (commits at source.squeak.org) Date: Tue, 11 May 2021 02:19:38 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2958.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2958.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2958 Author: eem Time: 10 May 2021, 7:19:28.320827 pm UUID: 972e62ae-ea8b-4399-8619-b0e9e01d83de Ancestors: VMMaker.oscog-eem.2957 spelling in a comment only. this is not the commit you're looking for. =============== Diff against VMMaker.oscog-eem.2957 =============== Item was changed: ----- Method: Spur32BitMemoryManager>>objectAfterMaybeSlimBridge:limit: (in category 'object enumeration-private') ----- objectAfterMaybeSlimBridge: objOop limit: limit "Object parsing. 1. all objects have at least a word following the header, for a forwarding pointer. 2. objects with an overflow size have a preceding word with a saturated numSlots. If the word following an object doesn't have a saturated numSlots field it must be a single-header object. If the word following does have a saturated numSlots it must be the overflow size word. This variation on objectAfter:limit: allows for a single (64-bit) word bridge which may be needed + to bridge from an almost full pastSpace to eden. It is only used in the flat enumerators that use - to bridge from an almost full pastSpace to eden. It is ony used in the flat enumerators that use startAddressForBridgedHeapEnumeration and enumerate over pastSpace, eden and oldSpace in that order. Note that the order for allObjects, and allInstances enumerates over oldSpace first. This hack is cheap. It increases the size of the objectAfter code, but saves two extra copies of the inner loop, since the inner loop now enumerates over all of pastSpace, eden and oldSpace. The test for a slim bridge is only performed if applied to an overflow header, and typically only 1 in 400 objects have overflow headers in 32-bits, 1 in 500 in 64-bits." | followingWordAddress followingWord | followingWordAddress := self addressAfter: objOop. (self oop: followingWordAddress isGreaterThanOrEqualTo: limit) ifTrue: [^limit]. self flag: #endianness. followingWord := self longAt: followingWordAddress + 4. ^followingWord >> self numSlotsHalfShift = self numSlotsMask ifTrue: [1 = (self longAt: followingWordAddress) "i.e. the raw overflow slots in the overflow word" ifTrue: [followingWordAddress + self baseHeaderSize + self baseHeaderSize] ifFalse: [followingWordAddress + self baseHeaderSize]] ifFalse: [followingWordAddress]! Item was changed: ----- Method: Spur64BitMemoryManager>>objectAfterMaybeSlimBridge:limit: (in category 'object enumeration-private') ----- objectAfterMaybeSlimBridge: objOop limit: limit "Object parsing. 1. all objects have at least a word following the header, for a forwarding pointer. 2. objects with an overflow size have a preceding word with a saturated numSlots. If the word following an object doesn't have a saturated numSlots field it must be a single-header object. If the word following does have a saturated numSlots it must be the overflow size word. This variation on objectAfter:limit: allows for a single (64-bit) word bridge which may be needed + to bridge from an almost full pastSpace to eden. It is only used in the flat enumerators that use - to bridge from an almost full pastSpace to eden. It is ony used in the flat enumerators that use startAddressForBridgedHeapEnumeration and enumerate over pastSpace, eden and oldSpace in that order. Note that the order for allObjects, and allInstances enumerates over oldSpace first. This hack is cheap. It increases the size of the objectAfter code, but saves two extra copies of the inner loop, since the inner loop now enumerates over all of pastSpace, eden and oldSpace. The test for a slim bridge is only performed if applied to an overflow header, and typically only 1 in 400 objects have overflow headers in 32-bits, 1 in 500 in 64-bits." | followingWordAddress followingWord | followingWordAddress := self addressAfter: objOop. (self oop: followingWordAddress isGreaterThanOrEqualTo: limit) ifTrue: [^limit]. self flag: #endianness. followingWord := self longAt: followingWordAddress. ^followingWord >> self numSlotsFullShift = self numSlotsMask ifTrue: [(followingWord bitAnd: 16rFFFFFFFFFFFFFF) = 1 ifTrue: [followingWordAddress + self baseHeaderSize + self baseHeaderSize] ifFalse: [followingWordAddress + self baseHeaderSize]] ifFalse: [followingWordAddress]! Item was changed: ----- Method: SpurMemoryManager>>objectAfterMaybeSlimBridge:limit: (in category 'object enumeration-private') ----- objectAfterMaybeSlimBridge: objOop limit: limit "Object parsing. 1. all objects have at least a word following the header, for a forwarding pointer. 2. objects with an overflow size have a preceding word with a saturated numSlots. If the word following an object doesn't have a saturated numSlots field it must be a single-header object. If the word following does have a saturated numSlots it must be the overflow size word. This variation on objectAfter:limit: allows for a single (64-bit) word bridge which may be needed + to bridge from an almost full pastSpace to eden. It is only used in the flat enumerators that use - to bridge from an almost full pastSpace to eden. It is ony used in the flat enumerators that use startAddressForBridgedHeapEnumeration and enumerate over pastSpace, eden and oldSpace in that order. Note that the order for allObjects, and allInstances enumerates over oldSpace first. This hack is cheap. It increases the size of the objectAfter code, but saves two extra copies of the inner loop, since the inner loop now enumerates over all of pastSpace, eden and oldSpace. The test for a slim bridge is only performed if applied to an overflow header, and typically only 1 in 400 objects have overflow headers in 32-bits, 1 in 500 in 64-bits." ^self subclassResponsibility! From tim at rowledge.org Wed May 12 21:24:17 2021 From: tim at rowledge.org (tim Rowledge) Date: Wed, 12 May 2021 14:24:17 -0700 Subject: [Vm-dev] ARMv8 BitBLT speedups provided by RPi/Ben Avison In-Reply-To: <953FF696-71E9-45E4-8B9F-FA68C559A622@rowledge.org> References: <7041C30C-0679-4B39-8694-B3A4FC2FF05E@rowledge.org> <953FF696-71E9-45E4-8B9F-FA68C559A622@rowledge.org> Message-ID: <2F2A3E81-FD0E-45AC-898F-92DDE01FCB7A@rowledge.org> > On 2021-04-30, at 10:14 AM, tim Rowledge wrote: >> On 2021-04-29, at 11:16 PM, Marcel Taeumel wrote: >> >> :-O >> >> +1 !!! :-) >> >> I haven't looked into it. Would be nice if it remained compatible with upstream. There is no pull request yet. > > Yeah, nice eh? A couple of months of Ben's time is a lot of money to gift us. > > I'm not sure about this pull request stuff but I'll nudge Ben about. In the meantime, if anyone has spare time to actually build from his tree and try it, that would be interesting. I made a few moments to do a simple compare of a recent generated-by-us BitBitPlugin.c and the Ben-version; three changes that will need a little tweaking of the Slang. See in the Ben-code (per https://raw.githubusercontent.com/bavison/opensmalltalk-vm/Ben/src/plugins/BitBltPlugin/BitBltPlugin.c), lines - 1855 1866-73 5238 for possible return value change? 6395-6401 tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Strange OpCodes: FSE: Fake Serious Error From 0800nacho at gmail.com Sun May 16 14:11:34 2021 From: 0800nacho at gmail.com (=?UTF-8?Q?Rafael_Ignacio_Mat=C3=ADas_Sniechowski?=) Date: Sun, 16 May 2021 11:11:34 -0300 Subject: [Vm-dev] Question on VM for Apple's M1 Message-ID: Hi, Hope you are all well, Just subscribed to the list. I mostly use Cuis-Smalltalk which uses the same VM as Squeak. I was wondering if there are plans to release a VM specifically for the new Apple M1 arm64 chip. I read somewhere that they were experimenting on one for Pharo 9. Thanks in advance Cheers Nacho *Ignacio Sniechowski* -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Sun May 16 17:58:14 2021 From: notifications at github.com (Christoph Thiede) Date: Sun, 16 May 2021 10:58:14 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] primitiveSSLCreate fails sporadically on Windows (#554) In-Reply-To: References: Message-ID: Hi all! I just pulled the latest changes from OSVM and was still able to reproduce the steps from above. I'm sorry to say that the issue is not yet resolved for me. -- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/554#issuecomment-841852536 -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Sun May 16 18:15:59 2021 From: tim at rowledge.org (tim Rowledge) Date: Sun, 16 May 2021 11:15:59 -0700 Subject: [Vm-dev] Question on VM for Apple's M1 In-Reply-To: References: Message-ID: <0C180865-DDB0-4811-A0B6-AC9330C3065A@rowledge.org> > On 2021-05-16, at 7:11 AM, Rafael Ignacio Matías Sniechowski <0800nacho at gmail.com> wrote: > > Hi, > Hope you are all well, > Just subscribed to the list. > I mostly use Cuis-Smalltalk which uses the same VM as Squeak. > I was wondering if there are plans to release a VM specifically for the new Apple M1 arm64 chip. Well we already have arm64 cog VMs; it's what I use as my main earn-a-living-machine. Specifically for Apple M1 ... not completely certain if it is releaseable yet because that is somewhat different to commodity ARM64 and the Mac OS stuff adds some security related issues for dynamic translation. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Strange OpCodes: PWB: Put to Waste Basket From 0800nacho at gmail.com Sun May 16 18:36:50 2021 From: 0800nacho at gmail.com (=?UTF-8?Q?Rafael_Ignacio_Mat=C3=ADas_Sniechowski?=) Date: Sun, 16 May 2021 15:36:50 -0300 Subject: [Vm-dev] Question on VM for Apple's M1 In-Reply-To: <0C180865-DDB0-4811-A0B6-AC9330C3065A@rowledge.org> References: <0C180865-DDB0-4811-A0B6-AC9330C3065A@rowledge.org> Message-ID: Thanks Tim Yes, I saw that there is already a linux-arm64, but as you said, macos stuff adds some security related issues. I do know that there were advances in a VM version for Pharo 9 (which involved installing lots of stuff using "brew"). I guess that in a near future a version for DarwinM1arm64 will be released. Best Nacho *Ignacio Sniechowski* On Sun, May 16, 2021 at 3:16 PM tim Rowledge wrote: > > > > > On 2021-05-16, at 7:11 AM, Rafael Ignacio Matías Sniechowski < > 0800nacho at gmail.com> wrote: > > > > Hi, > > Hope you are all well, > > Just subscribed to the list. > > I mostly use Cuis-Smalltalk which uses the same VM as Squeak. > > I was wondering if there are plans to release a VM specifically for the > new Apple M1 arm64 chip. > > Well we already have arm64 cog VMs; it's what I use as my main > earn-a-living-machine. Specifically for Apple M1 ... not completely certain > if it is releaseable yet because that is somewhat different to commodity > ARM64 and the Mac OS stuff adds some security related issues for dynamic > translation. > > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: PWB: Put to Waste Basket > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Sun May 16 23:01:10 2021 From: tim at rowledge.org (tim Rowledge) Date: Sun, 16 May 2021 16:01:10 -0700 Subject: [Vm-dev] VM build seems to be broken Message-ID: <3C49E7BE-E573-4FE4-93EF-9522982BFACD@rowledge.org> I was going to try making a debug vm to dive into gdb and hunt the `2 raisedTo: 63` bug recently discussed but the latest source download off git simply will not build. I think either Dave or Bruce noticed this recently. The error I see starts with complaining about build/config.h being included to late. That breaks everything later. I seem to remember reading some mail going by a while ago that might have related to this but I didn't have time to pay much attention. If the people that have been changing things here could please examine their memories and consider what might solve this I would be most grateful. There's two issues needing work (2 raisedTo: 63 & Ben's bitblt speedups) that can't be done without a fix. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Throughout history, every mystery solved has turned out to be… *not magic* From Das.Linux at gmx.de Mon May 17 05:07:42 2021 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon, 17 May 2021 07:07:42 +0200 Subject: [Vm-dev] VM build seems to be broken In-Reply-To: <3C49E7BE-E573-4FE4-93EF-9522982BFACD@rowledge.org> References: <3C49E7BE-E573-4FE4-93EF-9522982BFACD@rowledge.org> Message-ID: <5AF7BF18-0E9E-4777-8376-3AFE1A73B424@gmx.de> Hi > On 17. May 2021, at 01:01, tim Rowledge wrote: > > > I was going to try making a debug vm to dive into gdb and hunt the `2 raisedTo: 63` bug recently discussed but the latest source download off git simply will not build. I think either Dave or Bruce noticed this recently. > > The error I see starts with complaining about build/config.h being included to late. That breaks everything later. I seem to remember reading some mail going by a while ago that might have related to this but I didn't have time to pay much attention. If the people that have been changing things here could please examine their memories and consider what might solve this I would be most grateful. There's two issues needing work (2 raisedTo: 63 & Ben's bitblt speedups) that can't be done without a fix. > See https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/562 and the related threads on here a few weeks back. We patiently waiting for Eliot to give his blessing :) Best regards -Tobias > tim From notifications at github.com Wed May 19 17:49:31 2021 From: notifications at github.com (Marcel Taeumel) Date: Wed, 19 May 2021 10:49:31 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Fix include order (#562) In-Reply-To: References: Message-ID: @marceltaeumel approved this pull request. Maybe merge the current upstream again. Please make the Linux builds work again. Thanks Nicolas! -- 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/562#pullrequestreview-663499978 -------------- next part -------------- An HTML attachment was scrubbed... URL: From bwestergaard at gmail.com Wed May 19 19:17:58 2021 From: bwestergaard at gmail.com (Bob Westergaard) Date: Wed, 19 May 2021 12:17:58 -0700 Subject: [Vm-dev] Intermittent AttachableFileStream error during 7:36 and 10:36 today Message-ID: Hi, I have a rather bizarre intermittent failure that I'd see if anyone else can reproduce. I've taken the following: http://files.squeak.org/5.3/Squeak5.3-19435-64bit/Squeak5.3-19435-64bit-202003021730-Linux.zip Started it up and loaded the latest system updates and the OSProcess package (access OS functions). I then did: CommandShell command: 'date' This works as I'd expect it too. However, what is interesting is that if I change the time on the machine to any time between 7:36AM and 10:36AM (PDT, I'm in San Jose, CA) for today (May 19th) this call fails with the stack below. I'm quitting the image between time changes. There was no failure for the same time period yesterday. Nor does it appear to fail for any other time period today. -- Bob Stack follows: 19 May 2021 10:30:20.503624 am VM: unix - Smalltalk Image: Squeak5.3 [latest update: #19458] SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared Trusted Dir /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/secure Untrusted Dir /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/My Squeak AioEventHandler(Object)>>notify: Receiver: an AioEventHandler Arguments and temporary variables: aString: 'aio event forwarding not supported' Receiver's instance variables: dependents: nil semaphore: nil semaIndex: nil handlerProc: nil descriptor: nil [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: Receiver: an AioEventHandler Arguments and temporary variables: < Receiver's instance variables: dependents: nil semaphore: nil semaIndex: nil handlerProc: nil descriptor: nil BlockClosure>>cull: Receiver: [closure] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: Arguments and temporary variables: firstArg: Warning: aio event forwarding not supported Receiver's instance variables: outerContext: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: startpc: 154 numArgs: 1 [] in Context>>handleSignal: Receiver: BlockClosure>>on:do: Arguments and temporary variables: < Receiver's instance variables: sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: pc: 32 stackp: 3 method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") closureOrNil: nil receiver: [closure] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... BlockClosure>>ensure: Receiver: [closure] in Context>>handleSignal: Arguments and temporary variables: aBlock: [closure] in Context>>handleSignal: complete: nil returnValue: nil Receiver's instance variables: outerContext: Context>>handleSignal: startpc: 174 numArgs: 0 Context>>handleSignal: Receiver: BlockClosure>>on:do: Arguments and temporary variables: exception: Warning: aio event forwarding not supported handlerActive: true val: nil Receiver's instance variables: sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: pc: 32 stackp: 3 method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") closureOrNil: nil receiver: [closure] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... Warning(Exception)>>signal Receiver: Warning: aio event forwarding not supported Arguments and temporary variables: Receiver's instance variables: messageText: 'aio event forwarding not supported' tag: nil signalContext: Warning(Exception)>>signal handlerContext: BlockClosure>>on:do: outerContext: nil Warning(Exception)>>signal: Receiver: Warning: aio event forwarding not supported Arguments and temporary variables: signalerText: 'aio event forwarding not supported' Receiver's instance variables: messageText: 'aio event forwarding not supported' tag: nil signalContext: Warning(Exception)>>signal handlerContext: BlockClosure>>on:do: outerContext: nil Warning class>>signal: Receiver: Warning Arguments and temporary variables: signalerText: 'aio event forwarding not supported' Receiver's instance variables: superclass: Notification methodDict: a MethodDictionary(#defaultAction->(Warning>>#defaultAction "a CompiledMethod...etc... format: 65541 instanceVariables: nil organization: ('priv handling' defaultAction) subclasses: {Deprecation . ServiceCancelled . SAXWarning . UndeclaredVariableWarning...etc... name: #Warning classPool: nil sharedPools: nil environment: nil category: #'Kernel-Exceptions' suppressed: false resetOnStartUp: false AioEventHandler(Object)>>notify: Receiver: an AioEventHandler Arguments and temporary variables: aString: 'aio event forwarding not supported' Receiver's instance variables: dependents: nil semaphore: nil semaIndex: nil handlerProc: nil descriptor: nil AioEventHandler>>aioEnable:forSemaphore:externalObject: Receiver: an AioEventHandler Arguments and temporary variables: ioDescriptor: nil semaphoreIndex: 17 trueOrFalse: true Receiver's instance variables: dependents: nil semaphore: nil semaIndex: nil handlerProc: nil descriptor: nil [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: Receiver: an AioEventHandler Arguments and temporary variables: < Receiver's instance variables: dependents: nil semaphore: nil semaIndex: nil handlerProc: nil descriptor: nil BlockClosure>>on:do: Receiver: [closure] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: Arguments and temporary variables: exceptionOrExceptionSet: Warning handlerAction: [closure] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... handlerActive: false Receiver's instance variables: outerContext: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: startpc: 140 numArgs: 0 AioEventHandler>>initializeForExceptions:readEvents:writeEvents: Receiver: an AioEventHandler Arguments and temporary variables: exceptionEventFlag: true readEventFlag: true writeEventFlag: false Receiver's instance variables: dependents: nil semaphore: nil semaIndex: nil handlerProc: nil descriptor: nil AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: Receiver: an AioEventHandler Arguments and temporary variables: aFileStream: BufferedAsyncFileReadStream: 'pipeReader' exceptionEventFlag: true readEventFlag: true writeEventFlag: false Receiver's instance variables: dependents: nil semaphore: nil semaIndex: nil handlerProc: nil descriptor: nil AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: Receiver: AioEventHandler Arguments and temporary variables: aFileStream: BufferedAsyncFileReadStream: 'pipeReader' exceptionEventFlag: true readEventFlag: true writeEventFlag: false Receiver's instance variables: superclass: Model methodDict: a MethodDictionary(#aioDisable:->(AioEventHandler>>#aioDisable: "a CompiledMethod...etc... format: 65541 instanceVariables: #('semaphore' 'semaIndex' 'handlerProc' 'descriptor') organization: ('aio event forwarding' aioDisable: aioEnable:forSemaphore:externalObject:...etc... subclasses: nil name: #AioEventHandler classPool: a Dictionary(#AioPluginPresent->true ) sharedPools: nil environment: Smalltalk category: #'OSProcess-AIO' BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling Receiver: BufferedAsyncFileReadStream: 'pipeReader' Arguments and temporary variables: Receiver's instance variables: BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize Receiver: BufferedAsyncFileReadStream: 'pipeReader' Arguments and temporary variables: Receiver's instance variables: BufferedAsyncFileReadStream class(AttachableFileStream class)>>name:attachTo:writable: Receiver: BufferedAsyncFileReadStream Arguments and temporary variables: aSymbolOrString: 'pipeReader' anIOHandle: #[93 179 159 128 0 0 0 0 48 162 123 2 0 0 0 0 0 0 0 0 0 0 0 0] readWriteFlag: false Receiver's instance variables: superclass: AsyncFileReadStream methodDict: a MethodDictionary(#actAsExecutor->(BufferedAsyncFileReadStream>>#a...etc... format: 65552 instanceVariables: #('nonBlockingMode' 'readBuffer' 'readSyncSemaphore' 'dataAv...etc... organization: ('finalization' actAsExecutor) ('read ahead buffer' appendAllToBuffer:...etc... subclasses: nil name: #BufferedAsyncFileReadStream classPool: nil sharedPools: nil environment: Smalltalk category: #'OSProcess-Base' --- The full stack --- AioEventHandler(Object)>>notify: [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: BlockClosure>>cull: [] in Context>>handleSignal: BlockClosure>>ensure: Context>>handleSignal: Warning(Exception)>>signal Warning(Exception)>>signal: Warning class>>signal: AioEventHandler(Object)>>notify: AioEventHandler>>aioEnable:forSemaphore:externalObject: [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: BlockClosure>>on:do: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize BufferedAsyncFileReadStream class(AttachableFileStream class)>>name:attachTo:writable: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AttachableFileStream>>asBufferedAsyncFileReadStream ExternalPipe>>setBufferedReader PipeableOSProcess(PipeJunction)>>enableOutputStreamTriggers PipeableOSProcess>>enableEventTriggers PipeableOSProcess(PipeJunction)>>prepareOutputForInternalReader PipeableOSProcess>>prepareOutputForInternalReader PipeableOSProcess(PipeJunction)>>prepareOutputFor: ProxyPipeline>>fromString:shell: ProxyPipeline class>>fromString:shell: CommandShell>>pipelineCollectionFrom: CommandShell>>evaluateOrMakePipelinesFrom: CommandShell>>command:echo: [] in CommandShell>>processCommand:echo: [] in BlockClosure>>newProcess -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed May 19 18:27:12 2021 From: notifications at github.com (Greg A. Woods) Date: Wed, 19 May 2021 11:27:12 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk.github.io] the opensmalltalk.org web site no longer works (#1) In-Reply-To: References: Message-ID: Still not working? -- 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.github.io/issues/1#issuecomment-844359574 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Wed May 19 18:41:18 2021 From: notifications at github.com (Tobias Pape) Date: Wed, 19 May 2021 11:41:18 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk.github.io] the opensmalltalk.org web site no longer works (#1) In-Reply-To: References: Message-ID: Sorry, lost track :( -- 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.github.io/issues/1#issuecomment-844370217 -------------- next part -------------- An HTML attachment was scrubbed... URL: From lewis at mail.msen.com Wed May 19 21:02:35 2021 From: lewis at mail.msen.com (David T. Lewis) Date: Wed, 19 May 2021 17:02:35 -0400 Subject: [Vm-dev] Intermittent AttachableFileStream error during 7:36 and 10:36 today In-Reply-To: References: Message-ID: <20210519210235.GA15318@shell.msen.com> Wos, that's a new one on me. What exactly are you changing on your computer, are you changing the system time, or changing time zone? Dave On Wed, May 19, 2021 at 12:17:58PM -0700, Bob Westergaard wrote: > > Hi, > > I have a rather bizarre intermittent failure that I'd see if anyone else > can reproduce. > > I've taken the following: > > http://files.squeak.org/5.3/Squeak5.3-19435-64bit/Squeak5.3-19435-64bit-202003021730-Linux.zip > > Started it up and loaded the latest system updates and the OSProcess > package (access OS functions). > > I then did: > > CommandShell command: 'date' > > This works as I'd expect it too. > > However, what is interesting is that if I change the time on the machine to > any time between 7:36AM and 10:36AM (PDT, I'm in San Jose, CA) for today > (May 19th) this call fails with the stack below. I'm quitting the image > between time changes. > > There was no failure for the same time period yesterday. Nor does it > appear to fail for any other time period today. > > -- Bob > > Stack follows: > > 19 May 2021 10:30:20.503624 am > > VM: unix - Smalltalk > Image: Squeak5.3 [latest update: #19458] > > SecurityManager state: > Restricted: false > FileAccess: true > SocketAccess: true > Working Dir > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared > Trusted Dir > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/secure > Untrusted Dir > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/My > Squeak > > AioEventHandler(Object)>>notify: > Receiver: an AioEventHandler > Arguments and temporary variables: > aString: 'aio event forwarding not supported' > Receiver's instance variables: > dependents: nil > semaphore: nil > semaIndex: nil > handlerProc: nil > descriptor: nil > > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > Receiver: an AioEventHandler > Arguments and temporary variables: > < > Receiver's instance variables: > dependents: nil > semaphore: nil > semaIndex: nil > handlerProc: nil > descriptor: nil > > BlockClosure>>cull: > Receiver: [closure] in > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > Arguments and temporary variables: > firstArg: Warning: aio event forwarding not supported > Receiver's instance variables: > outerContext: > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > startpc: 154 > numArgs: 1 > > [] in Context>>handleSignal: > Receiver: BlockClosure>>on:do: > Arguments and temporary variables: > < > Receiver's instance variables: > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > pc: 32 > stackp: 3 > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") > closureOrNil: nil > receiver: [closure] in > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > > BlockClosure>>ensure: > Receiver: [closure] in Context>>handleSignal: > Arguments and temporary variables: > aBlock: [closure] in Context>>handleSignal: > complete: nil > returnValue: nil > Receiver's instance variables: > outerContext: Context>>handleSignal: > startpc: 174 > numArgs: 0 > > Context>>handleSignal: > Receiver: BlockClosure>>on:do: > Arguments and temporary variables: > exception: Warning: aio event forwarding not supported > handlerActive: true > val: nil > Receiver's instance variables: > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > pc: 32 > stackp: 3 > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") > closureOrNil: nil > receiver: [closure] in > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > > Warning(Exception)>>signal > Receiver: Warning: aio event forwarding not supported > Arguments and temporary variables: > > Receiver's instance variables: > messageText: 'aio event forwarding not supported' > tag: nil > signalContext: Warning(Exception)>>signal > handlerContext: BlockClosure>>on:do: > outerContext: nil > > Warning(Exception)>>signal: > Receiver: Warning: aio event forwarding not supported > Arguments and temporary variables: > signalerText: 'aio event forwarding not supported' > Receiver's instance variables: > messageText: 'aio event forwarding not supported' > tag: nil > signalContext: Warning(Exception)>>signal > handlerContext: BlockClosure>>on:do: > outerContext: nil > > Warning class>>signal: > Receiver: Warning > Arguments and temporary variables: > signalerText: 'aio event forwarding not supported' > Receiver's instance variables: > superclass: Notification > methodDict: a MethodDictionary(#defaultAction->(Warning>>#defaultAction "a > CompiledMethod...etc... > format: 65541 > instanceVariables: nil > organization: ('priv handling' defaultAction) > > subclasses: {Deprecation . ServiceCancelled . SAXWarning . > UndeclaredVariableWarning...etc... > name: #Warning > classPool: nil > sharedPools: nil > environment: nil > category: #'Kernel-Exceptions' > suppressed: false > resetOnStartUp: false > > AioEventHandler(Object)>>notify: > Receiver: an AioEventHandler > Arguments and temporary variables: > aString: 'aio event forwarding not supported' > Receiver's instance variables: > dependents: nil > semaphore: nil > semaIndex: nil > handlerProc: nil > descriptor: nil > > AioEventHandler>>aioEnable:forSemaphore:externalObject: > Receiver: an AioEventHandler > Arguments and temporary variables: > ioDescriptor: nil > semaphoreIndex: 17 > trueOrFalse: true > Receiver's instance variables: > dependents: nil > semaphore: nil > semaIndex: nil > handlerProc: nil > descriptor: nil > > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > Receiver: an AioEventHandler > Arguments and temporary variables: > < > Receiver's instance variables: > dependents: nil > semaphore: nil > semaIndex: nil > handlerProc: nil > descriptor: nil > > BlockClosure>>on:do: > Receiver: [closure] in > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > Arguments and temporary variables: > exceptionOrExceptionSet: Warning > handlerAction: [closure] in > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > handlerActive: false > Receiver's instance variables: > outerContext: > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > startpc: 140 > numArgs: 0 > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > Receiver: an AioEventHandler > Arguments and temporary variables: > exceptionEventFlag: true > readEventFlag: true > writeEventFlag: false > Receiver's instance variables: > dependents: nil > semaphore: nil > semaIndex: nil > handlerProc: nil > descriptor: nil > > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: > Receiver: an AioEventHandler > Arguments and temporary variables: > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' > exceptionEventFlag: true > readEventFlag: true > writeEventFlag: false > Receiver's instance variables: > dependents: nil > semaphore: nil > semaIndex: nil > handlerProc: nil > descriptor: nil > > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: > Receiver: AioEventHandler > Arguments and temporary variables: > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' > exceptionEventFlag: true > readEventFlag: true > writeEventFlag: false > Receiver's instance variables: > superclass: Model > methodDict: a MethodDictionary(#aioDisable:->(AioEventHandler>>#aioDisable: > "a CompiledMethod...etc... > format: 65541 > instanceVariables: #('semaphore' 'semaIndex' 'handlerProc' 'descriptor') > organization: ('aio event forwarding' aioDisable: > aioEnable:forSemaphore:externalObject:...etc... > subclasses: nil > name: #AioEventHandler > classPool: a Dictionary(#AioPluginPresent->true ) > sharedPools: nil > environment: Smalltalk > category: #'OSProcess-AIO' > > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling > Receiver: BufferedAsyncFileReadStream: 'pipeReader' > Arguments and temporary variables: > > Receiver's instance variables: > > > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize > Receiver: BufferedAsyncFileReadStream: 'pipeReader' > Arguments and temporary variables: > > Receiver's instance variables: > > > BufferedAsyncFileReadStream class(AttachableFileStream > class)>>name:attachTo:writable: > Receiver: BufferedAsyncFileReadStream > Arguments and temporary variables: > aSymbolOrString: 'pipeReader' > anIOHandle: #[93 179 159 128 0 0 0 0 48 162 123 2 0 0 0 0 0 0 0 0 0 0 0 0] > readWriteFlag: false > Receiver's instance variables: > superclass: AsyncFileReadStream > methodDict: a > MethodDictionary(#actAsExecutor->(BufferedAsyncFileReadStream>>#a...etc... > format: 65552 > instanceVariables: #('nonBlockingMode' 'readBuffer' 'readSyncSemaphore' > 'dataAv...etc... > organization: ('finalization' actAsExecutor) > ('read ahead buffer' appendAllToBuffer:...etc... > subclasses: nil > name: #BufferedAsyncFileReadStream > classPool: nil > sharedPools: nil > environment: Smalltalk > category: #'OSProcess-Base' > > > --- The full stack --- > AioEventHandler(Object)>>notify: > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > BlockClosure>>cull: > [] in Context>>handleSignal: > BlockClosure>>ensure: > Context>>handleSignal: > Warning(Exception)>>signal > Warning(Exception)>>signal: > Warning class>>signal: > AioEventHandler(Object)>>notify: > AioEventHandler>>aioEnable:forSemaphore:externalObject: > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > BlockClosure>>on:do: > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize > BufferedAsyncFileReadStream class(AttachableFileStream > class)>>name:attachTo:writable: > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > AttachableFileStream>>asBufferedAsyncFileReadStream > ExternalPipe>>setBufferedReader > PipeableOSProcess(PipeJunction)>>enableOutputStreamTriggers > PipeableOSProcess>>enableEventTriggers > PipeableOSProcess(PipeJunction)>>prepareOutputForInternalReader > PipeableOSProcess>>prepareOutputForInternalReader > PipeableOSProcess(PipeJunction)>>prepareOutputFor: > ProxyPipeline>>fromString:shell: > ProxyPipeline class>>fromString:shell: > CommandShell>>pipelineCollectionFrom: > CommandShell>>evaluateOrMakePipelinesFrom: > CommandShell>>command:echo: > [] in CommandShell>>processCommand:echo: > [] in BlockClosure>>newProcess From bwestergaard at gmail.com Wed May 19 21:06:31 2021 From: bwestergaard at gmail.com (Bob Westergaard) Date: Wed, 19 May 2021 14:06:31 -0700 Subject: [Vm-dev] Intermittent AttachableFileStream error during 7:36 and 10:36 today In-Reply-To: <20210519210235.GA15318@shell.msen.com> References: <20210519210235.GA15318@shell.msen.com> Message-ID: Hi Dave, I'm changing the system time before starting the image. -- Bob On Wed, May 19, 2021 at 2:02 PM David T. Lewis wrote: > > Wos, that's a new one on me. What exactly are you changing on your > computer, are you changing the system time, or changing time zone? > > Dave > > On Wed, May 19, 2021 at 12:17:58PM -0700, Bob Westergaard wrote: > > > > Hi, > > > > I have a rather bizarre intermittent failure that I'd see if anyone else > > can reproduce. > > > > I've taken the following: > > > > > http://files.squeak.org/5.3/Squeak5.3-19435-64bit/Squeak5.3-19435-64bit-202003021730-Linux.zip > > > > Started it up and loaded the latest system updates and the OSProcess > > package (access OS functions). > > > > I then did: > > > > CommandShell command: 'date' > > > > This works as I'd expect it too. > > > > However, what is interesting is that if I change the time on the machine > to > > any time between 7:36AM and 10:36AM (PDT, I'm in San Jose, CA) for today > > (May 19th) this call fails with the stack below. I'm quitting the image > > between time changes. > > > > There was no failure for the same time period yesterday. Nor does it > > appear to fail for any other time period today. > > > > -- Bob > > > > Stack follows: > > > > 19 May 2021 10:30:20.503624 am > > > > VM: unix - Smalltalk > > Image: Squeak5.3 [latest update: #19458] > > > > SecurityManager state: > > Restricted: false > > FileAccess: true > > SocketAccess: true > > Working Dir > > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared > > Trusted Dir > > > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/secure > > Untrusted Dir > > > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/My > > Squeak > > > > AioEventHandler(Object)>>notify: > > Receiver: an AioEventHandler > > Arguments and temporary variables: > > aString: 'aio event forwarding not supported' > > Receiver's instance variables: > > dependents: nil > > semaphore: nil > > semaIndex: nil > > handlerProc: nil > > descriptor: nil > > > > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > Receiver: an AioEventHandler > > Arguments and temporary variables: > > < > > Receiver's instance variables: > > dependents: nil > > semaphore: nil > > semaIndex: nil > > handlerProc: nil > > descriptor: nil > > > > BlockClosure>>cull: > > Receiver: [closure] in > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > Arguments and temporary variables: > > firstArg: Warning: aio event forwarding not supported > > Receiver's instance variables: > > outerContext: > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > startpc: 154 > > numArgs: 1 > > > > [] in Context>>handleSignal: > > Receiver: BlockClosure>>on:do: > > Arguments and temporary variables: > > < > > Receiver's instance variables: > > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > pc: 32 > > stackp: 3 > > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") > > closureOrNil: nil > > receiver: [closure] in > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > > > > BlockClosure>>ensure: > > Receiver: [closure] in Context>>handleSignal: > > Arguments and temporary variables: > > aBlock: [closure] in Context>>handleSignal: > > complete: nil > > returnValue: nil > > Receiver's instance variables: > > outerContext: Context>>handleSignal: > > startpc: 174 > > numArgs: 0 > > > > Context>>handleSignal: > > Receiver: BlockClosure>>on:do: > > Arguments and temporary variables: > > exception: Warning: aio event forwarding not supported > > handlerActive: true > > val: nil > > Receiver's instance variables: > > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > pc: 32 > > stackp: 3 > > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") > > closureOrNil: nil > > receiver: [closure] in > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > > > > Warning(Exception)>>signal > > Receiver: Warning: aio event forwarding not supported > > Arguments and temporary variables: > > > > Receiver's instance variables: > > messageText: 'aio event forwarding not supported' > > tag: nil > > signalContext: Warning(Exception)>>signal > > handlerContext: BlockClosure>>on:do: > > outerContext: nil > > > > Warning(Exception)>>signal: > > Receiver: Warning: aio event forwarding not supported > > Arguments and temporary variables: > > signalerText: 'aio event forwarding not supported' > > Receiver's instance variables: > > messageText: 'aio event forwarding not supported' > > tag: nil > > signalContext: Warning(Exception)>>signal > > handlerContext: BlockClosure>>on:do: > > outerContext: nil > > > > Warning class>>signal: > > Receiver: Warning > > Arguments and temporary variables: > > signalerText: 'aio event forwarding not supported' > > Receiver's instance variables: > > superclass: Notification > > methodDict: a MethodDictionary(#defaultAction->(Warning>>#defaultAction > "a > > CompiledMethod...etc... > > format: 65541 > > instanceVariables: nil > > organization: ('priv handling' defaultAction) > > > > subclasses: {Deprecation . ServiceCancelled . SAXWarning . > > UndeclaredVariableWarning...etc... > > name: #Warning > > classPool: nil > > sharedPools: nil > > environment: nil > > category: #'Kernel-Exceptions' > > suppressed: false > > resetOnStartUp: false > > > > AioEventHandler(Object)>>notify: > > Receiver: an AioEventHandler > > Arguments and temporary variables: > > aString: 'aio event forwarding not supported' > > Receiver's instance variables: > > dependents: nil > > semaphore: nil > > semaIndex: nil > > handlerProc: nil > > descriptor: nil > > > > AioEventHandler>>aioEnable:forSemaphore:externalObject: > > Receiver: an AioEventHandler > > Arguments and temporary variables: > > ioDescriptor: nil > > semaphoreIndex: 17 > > trueOrFalse: true > > Receiver's instance variables: > > dependents: nil > > semaphore: nil > > semaIndex: nil > > handlerProc: nil > > descriptor: nil > > > > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > Receiver: an AioEventHandler > > Arguments and temporary variables: > > < > > Receiver's instance variables: > > dependents: nil > > semaphore: nil > > semaIndex: nil > > handlerProc: nil > > descriptor: nil > > > > BlockClosure>>on:do: > > Receiver: [closure] in > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > Arguments and temporary variables: > > exceptionOrExceptionSet: Warning > > handlerAction: [closure] in > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > > handlerActive: false > > Receiver's instance variables: > > outerContext: > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > startpc: 140 > > numArgs: 0 > > > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > Receiver: an AioEventHandler > > Arguments and temporary variables: > > exceptionEventFlag: true > > readEventFlag: true > > writeEventFlag: false > > Receiver's instance variables: > > dependents: nil > > semaphore: nil > > semaIndex: nil > > handlerProc: nil > > descriptor: nil > > > > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: > > Receiver: an AioEventHandler > > Arguments and temporary variables: > > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' > > exceptionEventFlag: true > > readEventFlag: true > > writeEventFlag: false > > Receiver's instance variables: > > dependents: nil > > semaphore: nil > > semaIndex: nil > > handlerProc: nil > > descriptor: nil > > > > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: > > Receiver: AioEventHandler > > Arguments and temporary variables: > > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' > > exceptionEventFlag: true > > readEventFlag: true > > writeEventFlag: false > > Receiver's instance variables: > > superclass: Model > > methodDict: a > MethodDictionary(#aioDisable:->(AioEventHandler>>#aioDisable: > > "a CompiledMethod...etc... > > format: 65541 > > instanceVariables: #('semaphore' 'semaIndex' 'handlerProc' 'descriptor') > > organization: ('aio event forwarding' aioDisable: > > aioEnable:forSemaphore:externalObject:...etc... > > subclasses: nil > > name: #AioEventHandler > > classPool: a Dictionary(#AioPluginPresent->true ) > > sharedPools: nil > > environment: Smalltalk > > category: #'OSProcess-AIO' > > > > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling > > Receiver: BufferedAsyncFileReadStream: 'pipeReader' > > Arguments and temporary variables: > > > > Receiver's instance variables: > > > > > > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize > > Receiver: BufferedAsyncFileReadStream: 'pipeReader' > > Arguments and temporary variables: > > > > Receiver's instance variables: > > > > > > BufferedAsyncFileReadStream class(AttachableFileStream > > class)>>name:attachTo:writable: > > Receiver: BufferedAsyncFileReadStream > > Arguments and temporary variables: > > aSymbolOrString: 'pipeReader' > > anIOHandle: #[93 179 159 128 0 0 0 0 48 162 123 2 0 0 0 0 0 0 0 0 0 0 0 > 0] > > readWriteFlag: false > > Receiver's instance variables: > > superclass: AsyncFileReadStream > > methodDict: a > > > MethodDictionary(#actAsExecutor->(BufferedAsyncFileReadStream>>#a...etc... > > format: 65552 > > instanceVariables: #('nonBlockingMode' 'readBuffer' 'readSyncSemaphore' > > 'dataAv...etc... > > organization: ('finalization' actAsExecutor) > > ('read ahead buffer' appendAllToBuffer:...etc... > > subclasses: nil > > name: #BufferedAsyncFileReadStream > > classPool: nil > > sharedPools: nil > > environment: Smalltalk > > category: #'OSProcess-Base' > > > > > > --- The full stack --- > > AioEventHandler(Object)>>notify: > > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > BlockClosure>>cull: > > [] in Context>>handleSignal: > > BlockClosure>>ensure: > > Context>>handleSignal: > > Warning(Exception)>>signal > > Warning(Exception)>>signal: > > Warning class>>signal: > > AioEventHandler(Object)>>notify: > > AioEventHandler>>aioEnable:forSemaphore:externalObject: > > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > BlockClosure>>on:do: > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: > > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: > > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling > > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize > > BufferedAsyncFileReadStream class(AttachableFileStream > > class)>>name:attachTo:writable: > > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > > AttachableFileStream>>asBufferedAsyncFileReadStream > > ExternalPipe>>setBufferedReader > > PipeableOSProcess(PipeJunction)>>enableOutputStreamTriggers > > PipeableOSProcess>>enableEventTriggers > > PipeableOSProcess(PipeJunction)>>prepareOutputForInternalReader > > PipeableOSProcess>>prepareOutputForInternalReader > > PipeableOSProcess(PipeJunction)>>prepareOutputFor: > > ProxyPipeline>>fromString:shell: > > ProxyPipeline class>>fromString:shell: > > CommandShell>>pipelineCollectionFrom: > > CommandShell>>evaluateOrMakePipelinesFrom: > > CommandShell>>command:echo: > > [] in CommandShell>>processCommand:echo: > > [] in BlockClosure>>newProcess > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From bwestergaard at gmail.com Wed May 19 21:17:21 2021 From: bwestergaard at gmail.com (Bob Westergaard) Date: Wed, 19 May 2021 14:17:21 -0700 Subject: [Vm-dev] Intermittent AttachableFileStream error during 7:36 and 10:36 today In-Reply-To: References: <20210519210235.GA15318@shell.msen.com> Message-ID: I wonder if the file/pipe sessionID comparison with the getThisSessionID() that is failing in a primitive somewhere. I guess I'll look at how that is created. -- Bob On Wed, May 19, 2021 at 2:06 PM Bob Westergaard wrote: > > Hi Dave, > > I'm changing the system time before starting the image. > > -- Bob > > On Wed, May 19, 2021 at 2:02 PM David T. Lewis > wrote: > >> >> Wos, that's a new one on me. What exactly are you changing on your >> computer, are you changing the system time, or changing time zone? >> >> Dave >> >> On Wed, May 19, 2021 at 12:17:58PM -0700, Bob Westergaard wrote: >> > >> > Hi, >> > >> > I have a rather bizarre intermittent failure that I'd see if anyone else >> > can reproduce. >> > >> > I've taken the following: >> > >> > >> http://files.squeak.org/5.3/Squeak5.3-19435-64bit/Squeak5.3-19435-64bit-202003021730-Linux.zip >> > >> > Started it up and loaded the latest system updates and the OSProcess >> > package (access OS functions). >> > >> > I then did: >> > >> > CommandShell command: 'date' >> > >> > This works as I'd expect it too. >> > >> > However, what is interesting is that if I change the time on the >> machine to >> > any time between 7:36AM and 10:36AM (PDT, I'm in San Jose, CA) for today >> > (May 19th) this call fails with the stack below. I'm quitting the image >> > between time changes. >> > >> > There was no failure for the same time period yesterday. Nor does it >> > appear to fail for any other time period today. >> > >> > -- Bob >> > >> > Stack follows: >> > >> > 19 May 2021 10:30:20.503624 am >> > >> > VM: unix - Smalltalk >> > Image: Squeak5.3 [latest update: #19458] >> > >> > SecurityManager state: >> > Restricted: false >> > FileAccess: true >> > SocketAccess: true >> > Working Dir >> > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared >> > Trusted Dir >> > >> /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/secure >> > Untrusted Dir >> > >> /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/My >> > Squeak >> > >> > AioEventHandler(Object)>>notify: >> > Receiver: an AioEventHandler >> > Arguments and temporary variables: >> > aString: 'aio event forwarding not supported' >> > Receiver's instance variables: >> > dependents: nil >> > semaphore: nil >> > semaIndex: nil >> > handlerProc: nil >> > descriptor: nil >> > >> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > Receiver: an AioEventHandler >> > Arguments and temporary variables: >> > < >> > Receiver's instance variables: >> > dependents: nil >> > semaphore: nil >> > semaIndex: nil >> > handlerProc: nil >> > descriptor: nil >> > >> > BlockClosure>>cull: >> > Receiver: [closure] in >> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > Arguments and temporary variables: >> > firstArg: Warning: aio event forwarding not supported >> > Receiver's instance variables: >> > outerContext: >> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > startpc: 154 >> > numArgs: 1 >> > >> > [] in Context>>handleSignal: >> > Receiver: BlockClosure>>on:do: >> > Arguments and temporary variables: >> > < >> > Receiver's instance variables: >> > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > pc: 32 >> > stackp: 3 >> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") >> > closureOrNil: nil >> > receiver: [closure] in >> > >> AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... >> > >> > BlockClosure>>ensure: >> > Receiver: [closure] in Context>>handleSignal: >> > Arguments and temporary variables: >> > aBlock: [closure] in Context>>handleSignal: >> > complete: nil >> > returnValue: nil >> > Receiver's instance variables: >> > outerContext: Context>>handleSignal: >> > startpc: 174 >> > numArgs: 0 >> > >> > Context>>handleSignal: >> > Receiver: BlockClosure>>on:do: >> > Arguments and temporary variables: >> > exception: Warning: aio event forwarding not supported >> > handlerActive: true >> > val: nil >> > Receiver's instance variables: >> > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > pc: 32 >> > stackp: 3 >> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") >> > closureOrNil: nil >> > receiver: [closure] in >> > >> AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... >> > >> > Warning(Exception)>>signal >> > Receiver: Warning: aio event forwarding not supported >> > Arguments and temporary variables: >> > >> > Receiver's instance variables: >> > messageText: 'aio event forwarding not supported' >> > tag: nil >> > signalContext: Warning(Exception)>>signal >> > handlerContext: BlockClosure>>on:do: >> > outerContext: nil >> > >> > Warning(Exception)>>signal: >> > Receiver: Warning: aio event forwarding not supported >> > Arguments and temporary variables: >> > signalerText: 'aio event forwarding not supported' >> > Receiver's instance variables: >> > messageText: 'aio event forwarding not supported' >> > tag: nil >> > signalContext: Warning(Exception)>>signal >> > handlerContext: BlockClosure>>on:do: >> > outerContext: nil >> > >> > Warning class>>signal: >> > Receiver: Warning >> > Arguments and temporary variables: >> > signalerText: 'aio event forwarding not supported' >> > Receiver's instance variables: >> > superclass: Notification >> > methodDict: a MethodDictionary(#defaultAction->(Warning>>#defaultAction >> "a >> > CompiledMethod...etc... >> > format: 65541 >> > instanceVariables: nil >> > organization: ('priv handling' defaultAction) >> > >> > subclasses: {Deprecation . ServiceCancelled . SAXWarning . >> > UndeclaredVariableWarning...etc... >> > name: #Warning >> > classPool: nil >> > sharedPools: nil >> > environment: nil >> > category: #'Kernel-Exceptions' >> > suppressed: false >> > resetOnStartUp: false >> > >> > AioEventHandler(Object)>>notify: >> > Receiver: an AioEventHandler >> > Arguments and temporary variables: >> > aString: 'aio event forwarding not supported' >> > Receiver's instance variables: >> > dependents: nil >> > semaphore: nil >> > semaIndex: nil >> > handlerProc: nil >> > descriptor: nil >> > >> > AioEventHandler>>aioEnable:forSemaphore:externalObject: >> > Receiver: an AioEventHandler >> > Arguments and temporary variables: >> > ioDescriptor: nil >> > semaphoreIndex: 17 >> > trueOrFalse: true >> > Receiver's instance variables: >> > dependents: nil >> > semaphore: nil >> > semaIndex: nil >> > handlerProc: nil >> > descriptor: nil >> > >> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > Receiver: an AioEventHandler >> > Arguments and temporary variables: >> > < >> > Receiver's instance variables: >> > dependents: nil >> > semaphore: nil >> > semaIndex: nil >> > handlerProc: nil >> > descriptor: nil >> > >> > BlockClosure>>on:do: >> > Receiver: [closure] in >> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > Arguments and temporary variables: >> > exceptionOrExceptionSet: Warning >> > handlerAction: [closure] in >> > >> AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... >> > handlerActive: false >> > Receiver's instance variables: >> > outerContext: >> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > startpc: 140 >> > numArgs: 0 >> > >> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > Receiver: an AioEventHandler >> > Arguments and temporary variables: >> > exceptionEventFlag: true >> > readEventFlag: true >> > writeEventFlag: false >> > Receiver's instance variables: >> > dependents: nil >> > semaphore: nil >> > semaIndex: nil >> > handlerProc: nil >> > descriptor: nil >> > >> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: >> > Receiver: an AioEventHandler >> > Arguments and temporary variables: >> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' >> > exceptionEventFlag: true >> > readEventFlag: true >> > writeEventFlag: false >> > Receiver's instance variables: >> > dependents: nil >> > semaphore: nil >> > semaIndex: nil >> > handlerProc: nil >> > descriptor: nil >> > >> > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: >> > Receiver: AioEventHandler >> > Arguments and temporary variables: >> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' >> > exceptionEventFlag: true >> > readEventFlag: true >> > writeEventFlag: false >> > Receiver's instance variables: >> > superclass: Model >> > methodDict: a >> MethodDictionary(#aioDisable:->(AioEventHandler>>#aioDisable: >> > "a CompiledMethod...etc... >> > format: 65541 >> > instanceVariables: #('semaphore' 'semaIndex' 'handlerProc' 'descriptor') >> > organization: ('aio event forwarding' aioDisable: >> > aioEnable:forSemaphore:externalObject:...etc... >> > subclasses: nil >> > name: #AioEventHandler >> > classPool: a Dictionary(#AioPluginPresent->true ) >> > sharedPools: nil >> > environment: Smalltalk >> > category: #'OSProcess-AIO' >> > >> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling >> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' >> > Arguments and temporary variables: >> > >> > Receiver's instance variables: >> > >> > >> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize >> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' >> > Arguments and temporary variables: >> > >> > Receiver's instance variables: >> > >> > >> > BufferedAsyncFileReadStream class(AttachableFileStream >> > class)>>name:attachTo:writable: >> > Receiver: BufferedAsyncFileReadStream >> > Arguments and temporary variables: >> > aSymbolOrString: 'pipeReader' >> > anIOHandle: #[93 179 159 128 0 0 0 0 48 162 123 2 0 0 0 0 0 0 0 0 0 0 0 >> 0] >> > readWriteFlag: false >> > Receiver's instance variables: >> > superclass: AsyncFileReadStream >> > methodDict: a >> > >> MethodDictionary(#actAsExecutor->(BufferedAsyncFileReadStream>>#a...etc... >> > format: 65552 >> > instanceVariables: #('nonBlockingMode' 'readBuffer' 'readSyncSemaphore' >> > 'dataAv...etc... >> > organization: ('finalization' actAsExecutor) >> > ('read ahead buffer' appendAllToBuffer:...etc... >> > subclasses: nil >> > name: #BufferedAsyncFileReadStream >> > classPool: nil >> > sharedPools: nil >> > environment: Smalltalk >> > category: #'OSProcess-Base' >> > >> > >> > --- The full stack --- >> > AioEventHandler(Object)>>notify: >> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > BlockClosure>>cull: >> > [] in Context>>handleSignal: >> > BlockClosure>>ensure: >> > Context>>handleSignal: >> > Warning(Exception)>>signal >> > Warning(Exception)>>signal: >> > Warning class>>signal: >> > AioEventHandler(Object)>>notify: >> > AioEventHandler>>aioEnable:forSemaphore:externalObject: >> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > BlockClosure>>on:do: >> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: >> > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: >> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling >> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize >> > BufferedAsyncFileReadStream class(AttachableFileStream >> > class)>>name:attachTo:writable: >> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >> > AttachableFileStream>>asBufferedAsyncFileReadStream >> > ExternalPipe>>setBufferedReader >> > PipeableOSProcess(PipeJunction)>>enableOutputStreamTriggers >> > PipeableOSProcess>>enableEventTriggers >> > PipeableOSProcess(PipeJunction)>>prepareOutputForInternalReader >> > PipeableOSProcess>>prepareOutputForInternalReader >> > PipeableOSProcess(PipeJunction)>>prepareOutputFor: >> > ProxyPipeline>>fromString:shell: >> > ProxyPipeline class>>fromString:shell: >> > CommandShell>>pipelineCollectionFrom: >> > CommandShell>>evaluateOrMakePipelinesFrom: >> > CommandShell>>command:echo: >> > [] in CommandShell>>processCommand:echo: >> > [] in BlockClosure>>newProcess >> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: From bwestergaard at gmail.com Wed May 19 21:28:22 2021 From: bwestergaard at gmail.com (Bob Westergaard) Date: Wed, 19 May 2021 14:28:22 -0700 Subject: [Vm-dev] Intermittent AttachableFileStream error during 7:36 and 10:36 today In-Reply-To: References: <20210519210235.GA15318@shell.msen.com> Message-ID: I'm pretty sure that is it. I added some logging code to primitiveTestEndOfFileFlag() and the session ids do not compare. I see (in a not very recent) VMMaker image that #ioMSecs is used to create the global session id. Maybe there is some overflow/underflow with the primitive type used for this field? -- Bob On Wed, May 19, 2021 at 2:17 PM Bob Westergaard wrote: > I wonder if the file/pipe sessionID comparison with the getThisSessionID() > that is failing in a primitive somewhere. I guess I'll look at how that > is created. > > -- Bob > > On Wed, May 19, 2021 at 2:06 PM Bob Westergaard > wrote: > >> >> Hi Dave, >> >> I'm changing the system time before starting the image. >> >> -- Bob >> >> On Wed, May 19, 2021 at 2:02 PM David T. Lewis >> wrote: >> >>> >>> Wos, that's a new one on me. What exactly are you changing on your >>> computer, are you changing the system time, or changing time zone? >>> >>> Dave >>> >>> On Wed, May 19, 2021 at 12:17:58PM -0700, Bob Westergaard wrote: >>> > >>> > Hi, >>> > >>> > I have a rather bizarre intermittent failure that I'd see if anyone >>> else >>> > can reproduce. >>> > >>> > I've taken the following: >>> > >>> > >>> http://files.squeak.org/5.3/Squeak5.3-19435-64bit/Squeak5.3-19435-64bit-202003021730-Linux.zip >>> > >>> > Started it up and loaded the latest system updates and the OSProcess >>> > package (access OS functions). >>> > >>> > I then did: >>> > >>> > CommandShell command: 'date' >>> > >>> > This works as I'd expect it too. >>> > >>> > However, what is interesting is that if I change the time on the >>> machine to >>> > any time between 7:36AM and 10:36AM (PDT, I'm in San Jose, CA) for >>> today >>> > (May 19th) this call fails with the stack below. I'm quitting the >>> image >>> > between time changes. >>> > >>> > There was no failure for the same time period yesterday. Nor does it >>> > appear to fail for any other time period today. >>> > >>> > -- Bob >>> > >>> > Stack follows: >>> > >>> > 19 May 2021 10:30:20.503624 am >>> > >>> > VM: unix - Smalltalk >>> > Image: Squeak5.3 [latest update: #19458] >>> > >>> > SecurityManager state: >>> > Restricted: false >>> > FileAccess: true >>> > SocketAccess: true >>> > Working Dir >>> > >>> /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared >>> > Trusted Dir >>> > >>> /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/secure >>> > Untrusted Dir >>> > >>> /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/My >>> > Squeak >>> > >>> > AioEventHandler(Object)>>notify: >>> > Receiver: an AioEventHandler >>> > Arguments and temporary variables: >>> > aString: 'aio event forwarding not supported' >>> > Receiver's instance variables: >>> > dependents: nil >>> > semaphore: nil >>> > semaIndex: nil >>> > handlerProc: nil >>> > descriptor: nil >>> > >>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > Receiver: an AioEventHandler >>> > Arguments and temporary variables: >>> > < >>> > Receiver's instance variables: >>> > dependents: nil >>> > semaphore: nil >>> > semaIndex: nil >>> > handlerProc: nil >>> > descriptor: nil >>> > >>> > BlockClosure>>cull: >>> > Receiver: [closure] in >>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > Arguments and temporary variables: >>> > firstArg: Warning: aio event forwarding not supported >>> > Receiver's instance variables: >>> > outerContext: >>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > startpc: 154 >>> > numArgs: 1 >>> > >>> > [] in Context>>handleSignal: >>> > Receiver: BlockClosure>>on:do: >>> > Arguments and temporary variables: >>> > < >>> > Receiver's instance variables: >>> > sender: >>> AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > pc: 32 >>> > stackp: 3 >>> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") >>> > closureOrNil: nil >>> > receiver: [closure] in >>> > >>> AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... >>> > >>> > BlockClosure>>ensure: >>> > Receiver: [closure] in Context>>handleSignal: >>> > Arguments and temporary variables: >>> > aBlock: [closure] in Context>>handleSignal: >>> > complete: nil >>> > returnValue: nil >>> > Receiver's instance variables: >>> > outerContext: Context>>handleSignal: >>> > startpc: 174 >>> > numArgs: 0 >>> > >>> > Context>>handleSignal: >>> > Receiver: BlockClosure>>on:do: >>> > Arguments and temporary variables: >>> > exception: Warning: aio event forwarding not supported >>> > handlerActive: true >>> > val: nil >>> > Receiver's instance variables: >>> > sender: >>> AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > pc: 32 >>> > stackp: 3 >>> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") >>> > closureOrNil: nil >>> > receiver: [closure] in >>> > >>> AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... >>> > >>> > Warning(Exception)>>signal >>> > Receiver: Warning: aio event forwarding not supported >>> > Arguments and temporary variables: >>> > >>> > Receiver's instance variables: >>> > messageText: 'aio event forwarding not supported' >>> > tag: nil >>> > signalContext: Warning(Exception)>>signal >>> > handlerContext: BlockClosure>>on:do: >>> > outerContext: nil >>> > >>> > Warning(Exception)>>signal: >>> > Receiver: Warning: aio event forwarding not supported >>> > Arguments and temporary variables: >>> > signalerText: 'aio event forwarding not supported' >>> > Receiver's instance variables: >>> > messageText: 'aio event forwarding not supported' >>> > tag: nil >>> > signalContext: Warning(Exception)>>signal >>> > handlerContext: BlockClosure>>on:do: >>> > outerContext: nil >>> > >>> > Warning class>>signal: >>> > Receiver: Warning >>> > Arguments and temporary variables: >>> > signalerText: 'aio event forwarding not supported' >>> > Receiver's instance variables: >>> > superclass: Notification >>> > methodDict: a >>> MethodDictionary(#defaultAction->(Warning>>#defaultAction "a >>> > CompiledMethod...etc... >>> > format: 65541 >>> > instanceVariables: nil >>> > organization: ('priv handling' defaultAction) >>> > >>> > subclasses: {Deprecation . ServiceCancelled . SAXWarning . >>> > UndeclaredVariableWarning...etc... >>> > name: #Warning >>> > classPool: nil >>> > sharedPools: nil >>> > environment: nil >>> > category: #'Kernel-Exceptions' >>> > suppressed: false >>> > resetOnStartUp: false >>> > >>> > AioEventHandler(Object)>>notify: >>> > Receiver: an AioEventHandler >>> > Arguments and temporary variables: >>> > aString: 'aio event forwarding not supported' >>> > Receiver's instance variables: >>> > dependents: nil >>> > semaphore: nil >>> > semaIndex: nil >>> > handlerProc: nil >>> > descriptor: nil >>> > >>> > AioEventHandler>>aioEnable:forSemaphore:externalObject: >>> > Receiver: an AioEventHandler >>> > Arguments and temporary variables: >>> > ioDescriptor: nil >>> > semaphoreIndex: 17 >>> > trueOrFalse: true >>> > Receiver's instance variables: >>> > dependents: nil >>> > semaphore: nil >>> > semaIndex: nil >>> > handlerProc: nil >>> > descriptor: nil >>> > >>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > Receiver: an AioEventHandler >>> > Arguments and temporary variables: >>> > < >>> > Receiver's instance variables: >>> > dependents: nil >>> > semaphore: nil >>> > semaIndex: nil >>> > handlerProc: nil >>> > descriptor: nil >>> > >>> > BlockClosure>>on:do: >>> > Receiver: [closure] in >>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > Arguments and temporary variables: >>> > exceptionOrExceptionSet: Warning >>> > handlerAction: [closure] in >>> > >>> AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... >>> > handlerActive: false >>> > Receiver's instance variables: >>> > outerContext: >>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > startpc: 140 >>> > numArgs: 0 >>> > >>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > Receiver: an AioEventHandler >>> > Arguments and temporary variables: >>> > exceptionEventFlag: true >>> > readEventFlag: true >>> > writeEventFlag: false >>> > Receiver's instance variables: >>> > dependents: nil >>> > semaphore: nil >>> > semaIndex: nil >>> > handlerProc: nil >>> > descriptor: nil >>> > >>> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: >>> > Receiver: an AioEventHandler >>> > Arguments and temporary variables: >>> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' >>> > exceptionEventFlag: true >>> > readEventFlag: true >>> > writeEventFlag: false >>> > Receiver's instance variables: >>> > dependents: nil >>> > semaphore: nil >>> > semaIndex: nil >>> > handlerProc: nil >>> > descriptor: nil >>> > >>> > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: >>> > Receiver: AioEventHandler >>> > Arguments and temporary variables: >>> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' >>> > exceptionEventFlag: true >>> > readEventFlag: true >>> > writeEventFlag: false >>> > Receiver's instance variables: >>> > superclass: Model >>> > methodDict: a >>> MethodDictionary(#aioDisable:->(AioEventHandler>>#aioDisable: >>> > "a CompiledMethod...etc... >>> > format: 65541 >>> > instanceVariables: #('semaphore' 'semaIndex' 'handlerProc' >>> 'descriptor') >>> > organization: ('aio event forwarding' aioDisable: >>> > aioEnable:forSemaphore:externalObject:...etc... >>> > subclasses: nil >>> > name: #AioEventHandler >>> > classPool: a Dictionary(#AioPluginPresent->true ) >>> > sharedPools: nil >>> > environment: Smalltalk >>> > category: #'OSProcess-AIO' >>> > >>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling >>> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' >>> > Arguments and temporary variables: >>> > >>> > Receiver's instance variables: >>> > >>> > >>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize >>> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' >>> > Arguments and temporary variables: >>> > >>> > Receiver's instance variables: >>> > >>> > >>> > BufferedAsyncFileReadStream class(AttachableFileStream >>> > class)>>name:attachTo:writable: >>> > Receiver: BufferedAsyncFileReadStream >>> > Arguments and temporary variables: >>> > aSymbolOrString: 'pipeReader' >>> > anIOHandle: #[93 179 159 128 0 0 0 0 48 162 123 2 0 0 0 0 0 0 0 0 0 0 >>> 0 0] >>> > readWriteFlag: false >>> > Receiver's instance variables: >>> > superclass: AsyncFileReadStream >>> > methodDict: a >>> > >>> MethodDictionary(#actAsExecutor->(BufferedAsyncFileReadStream>>#a...etc... >>> > format: 65552 >>> > instanceVariables: #('nonBlockingMode' 'readBuffer' 'readSyncSemaphore' >>> > 'dataAv...etc... >>> > organization: ('finalization' actAsExecutor) >>> > ('read ahead buffer' appendAllToBuffer:...etc... >>> > subclasses: nil >>> > name: #BufferedAsyncFileReadStream >>> > classPool: nil >>> > sharedPools: nil >>> > environment: Smalltalk >>> > category: #'OSProcess-Base' >>> > >>> > >>> > --- The full stack --- >>> > AioEventHandler(Object)>>notify: >>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > BlockClosure>>cull: >>> > [] in Context>>handleSignal: >>> > BlockClosure>>ensure: >>> > Context>>handleSignal: >>> > Warning(Exception)>>signal >>> > Warning(Exception)>>signal: >>> > Warning class>>signal: >>> > AioEventHandler(Object)>>notify: >>> > AioEventHandler>>aioEnable:forSemaphore:externalObject: >>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > BlockClosure>>on:do: >>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: >>> > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: >>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling >>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize >>> > BufferedAsyncFileReadStream class(AttachableFileStream >>> > class)>>name:attachTo:writable: >>> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>> > AttachableFileStream>>asBufferedAsyncFileReadStream >>> > ExternalPipe>>setBufferedReader >>> > PipeableOSProcess(PipeJunction)>>enableOutputStreamTriggers >>> > PipeableOSProcess>>enableEventTriggers >>> > PipeableOSProcess(PipeJunction)>>prepareOutputForInternalReader >>> > PipeableOSProcess>>prepareOutputForInternalReader >>> > PipeableOSProcess(PipeJunction)>>prepareOutputFor: >>> > ProxyPipeline>>fromString:shell: >>> > ProxyPipeline class>>fromString:shell: >>> > CommandShell>>pipelineCollectionFrom: >>> > CommandShell>>evaluateOrMakePipelinesFrom: >>> > CommandShell>>command:echo: >>> > [] in CommandShell>>processCommand:echo: >>> > [] in BlockClosure>>newProcess >>> >>> -------------- next part -------------- An HTML attachment was scrubbed... URL: From florin.mateoc at gmail.com Wed May 19 23:05:08 2021 From: florin.mateoc at gmail.com (Florin Mateoc) Date: Wed, 19 May 2021 19:05:08 -0400 Subject: [Vm-dev] primitive 87 resume Message-ID: Hi all, In the method Process>>resume, which invokes primitive 87, the comment states that the primitive should fail if the process is already waiting in a queue. But the implementation does not do that. If we execute (inspect) the snippet: | evaluationProcess result delay testProcess | delay := Delay forMilliseconds: 50. testProcess := Processor activeProcess. evaluationProcess := [ delay unschedule. result := testProcess isBlocked. testProcess resume] fork. delay wait. result it returns true (and no primitive failed error occurs), which means we successfully resumed a blocked (waiting on a semaphore) process. I also checked in VMMaker and indeed, the code does not check if the process is on a queue or not before just putting it on a runnable list. What do you think? Should the comment be changed or the implementation? Florin -------------- next part -------------- An HTML attachment was scrubbed... URL: From florin.mateoc at gmail.com Thu May 20 00:01:57 2021 From: florin.mateoc at gmail.com (Florin Mateoc) Date: Wed, 19 May 2021 20:01:57 -0400 Subject: [Vm-dev] =?utf-8?q?=28no_subject=29?= Message-ID: thinking some more about it, I think the implementation should respect the comment. Clearly, as it is, we can put the same process on multiple lists, which seems very wrong. Also, a process that stopped executing by waiting on a semaphore has started executing again without the semaphore being signalled, and with the process still on the semaphore's list. | evaluationProcess result sema testProcess | sema := Semaphore new. testProcess := Processor activeProcess. result := OrderedCollection new. evaluationProcess := [ result add: testProcess isBlocked. testProcess resume. result add: testProcess isBlocked. result add: (sema includes: testProcess). ] fork. sema wait. result -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Thu May 20 03:26:10 2021 From: notifications at github.com (asarch) Date: Wed, 19 May 2021 20:26:10 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] config.h:40:2: error: This file was included too late. Please make sure it is included earlier (#567) Message-ID: This is what happens in Debian 10 Buster for AMD64: [compilacion.log](https://github.com/OpenSmalltalk/opensmalltalk-vm/files/6512643/compilacion.log) -- 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/567 -------------- next part -------------- An HTML attachment was scrubbed... URL: From chisvasileandrei at gmail.com Thu May 20 08:53:35 2021 From: chisvasileandrei at gmail.com (Andrei Chis) Date: Thu, 20 May 2021 10:53:35 +0200 Subject: [Vm-dev] Intermittent AttachableFileStream error during 7:36 and 10:36 today In-Reply-To: References: <20210519210235.GA15318@shell.msen.com> Message-ID: Maybe not related at all, but in a different context we were getting random failures when redirecting output from os commands to the stdio depending on the value of #ioMSecs caused by an inconsistency in how globalSessionID was computed (https://github.com/pharo-project/opensmalltalk-vm/issues/233) On Wed, May 19, 2021 at 11:28 PM Bob Westergaard wrote: > > > I'm pretty sure that is it. I added some logging code to primitiveTestEndOfFileFlag() and the session ids do not compare. I see (in a not very recent) VMMaker image that #ioMSecs is used to create the global session id. Maybe there is some overflow/underflow with the primitive type used for this field? > > -- Bob > > On Wed, May 19, 2021 at 2:17 PM Bob Westergaard wrote: >> >> I wonder if the file/pipe sessionID comparison with the getThisSessionID() that is failing in a primitive somewhere. I guess I'll look at how that is created. >> >> -- Bob >> >> On Wed, May 19, 2021 at 2:06 PM Bob Westergaard wrote: >>> >>> >>> Hi Dave, >>> >>> I'm changing the system time before starting the image. >>> >>> -- Bob >>> >>> On Wed, May 19, 2021 at 2:02 PM David T. Lewis wrote: >>>> >>>> >>>> Wos, that's a new one on me. What exactly are you changing on your >>>> computer, are you changing the system time, or changing time zone? >>>> >>>> Dave >>>> >>>> On Wed, May 19, 2021 at 12:17:58PM -0700, Bob Westergaard wrote: >>>> > >>>> > Hi, >>>> > >>>> > I have a rather bizarre intermittent failure that I'd see if anyone else >>>> > can reproduce. >>>> > >>>> > I've taken the following: >>>> > >>>> > http://files.squeak.org/5.3/Squeak5.3-19435-64bit/Squeak5.3-19435-64bit-202003021730-Linux.zip >>>> > >>>> > Started it up and loaded the latest system updates and the OSProcess >>>> > package (access OS functions). >>>> > >>>> > I then did: >>>> > >>>> > CommandShell command: 'date' >>>> > >>>> > This works as I'd expect it too. >>>> > >>>> > However, what is interesting is that if I change the time on the machine to >>>> > any time between 7:36AM and 10:36AM (PDT, I'm in San Jose, CA) for today >>>> > (May 19th) this call fails with the stack below. I'm quitting the image >>>> > between time changes. >>>> > >>>> > There was no failure for the same time period yesterday. Nor does it >>>> > appear to fail for any other time period today. >>>> > >>>> > -- Bob >>>> > >>>> > Stack follows: >>>> > >>>> > 19 May 2021 10:30:20.503624 am >>>> > >>>> > VM: unix - Smalltalk >>>> > Image: Squeak5.3 [latest update: #19458] >>>> > >>>> > SecurityManager state: >>>> > Restricted: false >>>> > FileAccess: true >>>> > SocketAccess: true >>>> > Working Dir >>>> > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared >>>> > Trusted Dir >>>> > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/secure >>>> > Untrusted Dir >>>> > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/My >>>> > Squeak >>>> > >>>> > AioEventHandler(Object)>>notify: >>>> > Receiver: an AioEventHandler >>>> > Arguments and temporary variables: >>>> > aString: 'aio event forwarding not supported' >>>> > Receiver's instance variables: >>>> > dependents: nil >>>> > semaphore: nil >>>> > semaIndex: nil >>>> > handlerProc: nil >>>> > descriptor: nil >>>> > >>>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > Receiver: an AioEventHandler >>>> > Arguments and temporary variables: >>>> > < >>>> > Receiver's instance variables: >>>> > dependents: nil >>>> > semaphore: nil >>>> > semaIndex: nil >>>> > handlerProc: nil >>>> > descriptor: nil >>>> > >>>> > BlockClosure>>cull: >>>> > Receiver: [closure] in >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > Arguments and temporary variables: >>>> > firstArg: Warning: aio event forwarding not supported >>>> > Receiver's instance variables: >>>> > outerContext: >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > startpc: 154 >>>> > numArgs: 1 >>>> > >>>> > [] in Context>>handleSignal: >>>> > Receiver: BlockClosure>>on:do: >>>> > Arguments and temporary variables: >>>> > < >>>> > Receiver's instance variables: >>>> > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > pc: 32 >>>> > stackp: 3 >>>> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") >>>> > closureOrNil: nil >>>> > receiver: [closure] in >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... >>>> > >>>> > BlockClosure>>ensure: >>>> > Receiver: [closure] in Context>>handleSignal: >>>> > Arguments and temporary variables: >>>> > aBlock: [closure] in Context>>handleSignal: >>>> > complete: nil >>>> > returnValue: nil >>>> > Receiver's instance variables: >>>> > outerContext: Context>>handleSignal: >>>> > startpc: 174 >>>> > numArgs: 0 >>>> > >>>> > Context>>handleSignal: >>>> > Receiver: BlockClosure>>on:do: >>>> > Arguments and temporary variables: >>>> > exception: Warning: aio event forwarding not supported >>>> > handlerActive: true >>>> > val: nil >>>> > Receiver's instance variables: >>>> > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > pc: 32 >>>> > stackp: 3 >>>> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") >>>> > closureOrNil: nil >>>> > receiver: [closure] in >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... >>>> > >>>> > Warning(Exception)>>signal >>>> > Receiver: Warning: aio event forwarding not supported >>>> > Arguments and temporary variables: >>>> > >>>> > Receiver's instance variables: >>>> > messageText: 'aio event forwarding not supported' >>>> > tag: nil >>>> > signalContext: Warning(Exception)>>signal >>>> > handlerContext: BlockClosure>>on:do: >>>> > outerContext: nil >>>> > >>>> > Warning(Exception)>>signal: >>>> > Receiver: Warning: aio event forwarding not supported >>>> > Arguments and temporary variables: >>>> > signalerText: 'aio event forwarding not supported' >>>> > Receiver's instance variables: >>>> > messageText: 'aio event forwarding not supported' >>>> > tag: nil >>>> > signalContext: Warning(Exception)>>signal >>>> > handlerContext: BlockClosure>>on:do: >>>> > outerContext: nil >>>> > >>>> > Warning class>>signal: >>>> > Receiver: Warning >>>> > Arguments and temporary variables: >>>> > signalerText: 'aio event forwarding not supported' >>>> > Receiver's instance variables: >>>> > superclass: Notification >>>> > methodDict: a MethodDictionary(#defaultAction->(Warning>>#defaultAction "a >>>> > CompiledMethod...etc... >>>> > format: 65541 >>>> > instanceVariables: nil >>>> > organization: ('priv handling' defaultAction) >>>> > >>>> > subclasses: {Deprecation . ServiceCancelled . SAXWarning . >>>> > UndeclaredVariableWarning...etc... >>>> > name: #Warning >>>> > classPool: nil >>>> > sharedPools: nil >>>> > environment: nil >>>> > category: #'Kernel-Exceptions' >>>> > suppressed: false >>>> > resetOnStartUp: false >>>> > >>>> > AioEventHandler(Object)>>notify: >>>> > Receiver: an AioEventHandler >>>> > Arguments and temporary variables: >>>> > aString: 'aio event forwarding not supported' >>>> > Receiver's instance variables: >>>> > dependents: nil >>>> > semaphore: nil >>>> > semaIndex: nil >>>> > handlerProc: nil >>>> > descriptor: nil >>>> > >>>> > AioEventHandler>>aioEnable:forSemaphore:externalObject: >>>> > Receiver: an AioEventHandler >>>> > Arguments and temporary variables: >>>> > ioDescriptor: nil >>>> > semaphoreIndex: 17 >>>> > trueOrFalse: true >>>> > Receiver's instance variables: >>>> > dependents: nil >>>> > semaphore: nil >>>> > semaIndex: nil >>>> > handlerProc: nil >>>> > descriptor: nil >>>> > >>>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > Receiver: an AioEventHandler >>>> > Arguments and temporary variables: >>>> > < >>>> > Receiver's instance variables: >>>> > dependents: nil >>>> > semaphore: nil >>>> > semaIndex: nil >>>> > handlerProc: nil >>>> > descriptor: nil >>>> > >>>> > BlockClosure>>on:do: >>>> > Receiver: [closure] in >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > Arguments and temporary variables: >>>> > exceptionOrExceptionSet: Warning >>>> > handlerAction: [closure] in >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... >>>> > handlerActive: false >>>> > Receiver's instance variables: >>>> > outerContext: >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > startpc: 140 >>>> > numArgs: 0 >>>> > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > Receiver: an AioEventHandler >>>> > Arguments and temporary variables: >>>> > exceptionEventFlag: true >>>> > readEventFlag: true >>>> > writeEventFlag: false >>>> > Receiver's instance variables: >>>> > dependents: nil >>>> > semaphore: nil >>>> > semaIndex: nil >>>> > handlerProc: nil >>>> > descriptor: nil >>>> > >>>> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: >>>> > Receiver: an AioEventHandler >>>> > Arguments and temporary variables: >>>> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' >>>> > exceptionEventFlag: true >>>> > readEventFlag: true >>>> > writeEventFlag: false >>>> > Receiver's instance variables: >>>> > dependents: nil >>>> > semaphore: nil >>>> > semaIndex: nil >>>> > handlerProc: nil >>>> > descriptor: nil >>>> > >>>> > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: >>>> > Receiver: AioEventHandler >>>> > Arguments and temporary variables: >>>> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' >>>> > exceptionEventFlag: true >>>> > readEventFlag: true >>>> > writeEventFlag: false >>>> > Receiver's instance variables: >>>> > superclass: Model >>>> > methodDict: a MethodDictionary(#aioDisable:->(AioEventHandler>>#aioDisable: >>>> > "a CompiledMethod...etc... >>>> > format: 65541 >>>> > instanceVariables: #('semaphore' 'semaIndex' 'handlerProc' 'descriptor') >>>> > organization: ('aio event forwarding' aioDisable: >>>> > aioEnable:forSemaphore:externalObject:...etc... >>>> > subclasses: nil >>>> > name: #AioEventHandler >>>> > classPool: a Dictionary(#AioPluginPresent->true ) >>>> > sharedPools: nil >>>> > environment: Smalltalk >>>> > category: #'OSProcess-AIO' >>>> > >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling >>>> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' >>>> > Arguments and temporary variables: >>>> > >>>> > Receiver's instance variables: >>>> > >>>> > >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize >>>> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' >>>> > Arguments and temporary variables: >>>> > >>>> > Receiver's instance variables: >>>> > >>>> > >>>> > BufferedAsyncFileReadStream class(AttachableFileStream >>>> > class)>>name:attachTo:writable: >>>> > Receiver: BufferedAsyncFileReadStream >>>> > Arguments and temporary variables: >>>> > aSymbolOrString: 'pipeReader' >>>> > anIOHandle: #[93 179 159 128 0 0 0 0 48 162 123 2 0 0 0 0 0 0 0 0 0 0 0 0] >>>> > readWriteFlag: false >>>> > Receiver's instance variables: >>>> > superclass: AsyncFileReadStream >>>> > methodDict: a >>>> > MethodDictionary(#actAsExecutor->(BufferedAsyncFileReadStream>>#a...etc... >>>> > format: 65552 >>>> > instanceVariables: #('nonBlockingMode' 'readBuffer' 'readSyncSemaphore' >>>> > 'dataAv...etc... >>>> > organization: ('finalization' actAsExecutor) >>>> > ('read ahead buffer' appendAllToBuffer:...etc... >>>> > subclasses: nil >>>> > name: #BufferedAsyncFileReadStream >>>> > classPool: nil >>>> > sharedPools: nil >>>> > environment: Smalltalk >>>> > category: #'OSProcess-Base' >>>> > >>>> > >>>> > --- The full stack --- >>>> > AioEventHandler(Object)>>notify: >>>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > BlockClosure>>cull: >>>> > [] in Context>>handleSignal: >>>> > BlockClosure>>ensure: >>>> > Context>>handleSignal: >>>> > Warning(Exception)>>signal >>>> > Warning(Exception)>>signal: >>>> > Warning class>>signal: >>>> > AioEventHandler(Object)>>notify: >>>> > AioEventHandler>>aioEnable:forSemaphore:externalObject: >>>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > BlockClosure>>on:do: >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: >>>> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: >>>> > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize >>>> > BufferedAsyncFileReadStream class(AttachableFileStream >>>> > class)>>name:attachTo:writable: >>>> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>>> > AttachableFileStream>>asBufferedAsyncFileReadStream >>>> > ExternalPipe>>setBufferedReader >>>> > PipeableOSProcess(PipeJunction)>>enableOutputStreamTriggers >>>> > PipeableOSProcess>>enableEventTriggers >>>> > PipeableOSProcess(PipeJunction)>>prepareOutputForInternalReader >>>> > PipeableOSProcess>>prepareOutputForInternalReader >>>> > PipeableOSProcess(PipeJunction)>>prepareOutputFor: >>>> > ProxyPipeline>>fromString:shell: >>>> > ProxyPipeline class>>fromString:shell: >>>> > CommandShell>>pipelineCollectionFrom: >>>> > CommandShell>>evaluateOrMakePipelinesFrom: >>>> > CommandShell>>command:echo: >>>> > [] in CommandShell>>processCommand:echo: >>>> > [] in BlockClosure>>newProcess >>>> From bwestergaard at gmail.com Thu May 20 14:11:33 2021 From: bwestergaard at gmail.com (Bob Westergaard) Date: Thu, 20 May 2021 07:11:33 -0700 Subject: [Vm-dev] Intermittent AttachableFileStream error during 7:36 and 10:36 today In-Reply-To: References: <20210519210235.GA15318@shell.msen.com> Message-ID: HI Andrei, Yep, this is the same issue. Glad to hear that someone else has seen it. Thanks! -- Bob On Thu, May 20, 2021 at 1:53 AM Andrei Chis wrote: > > Maybe not related at all, but in a different context we were getting > random failures when redirecting output from os commands to the stdio > depending on the value of #ioMSecs caused by an inconsistency in how > globalSessionID was computed > (https://github.com/pharo-project/opensmalltalk-vm/issues/233) > > On Wed, May 19, 2021 at 11:28 PM Bob Westergaard > wrote: > > > > > > I'm pretty sure that is it. I added some logging code to > primitiveTestEndOfFileFlag() and the session ids do not compare. I see (in > a not very recent) VMMaker image that #ioMSecs is used to create the global > session id. Maybe there is some overflow/underflow with the primitive type > used for this field? > > > > -- Bob > > > > On Wed, May 19, 2021 at 2:17 PM Bob Westergaard > wrote: > >> > >> I wonder if the file/pipe sessionID comparison with the > getThisSessionID() that is failing in a primitive somewhere. I guess > I'll look at how that is created. > >> > >> -- Bob > >> > >> On Wed, May 19, 2021 at 2:06 PM Bob Westergaard > wrote: > >>> > >>> > >>> Hi Dave, > >>> > >>> I'm changing the system time before starting the image. > >>> > >>> -- Bob > >>> > >>> On Wed, May 19, 2021 at 2:02 PM David T. Lewis > wrote: > >>>> > >>>> > >>>> Wos, that's a new one on me. What exactly are you changing on your > >>>> computer, are you changing the system time, or changing time zone? > >>>> > >>>> Dave > >>>> > >>>> On Wed, May 19, 2021 at 12:17:58PM -0700, Bob Westergaard wrote: > >>>> > > >>>> > Hi, > >>>> > > >>>> > I have a rather bizarre intermittent failure that I'd see if anyone > else > >>>> > can reproduce. > >>>> > > >>>> > I've taken the following: > >>>> > > >>>> > > http://files.squeak.org/5.3/Squeak5.3-19435-64bit/Squeak5.3-19435-64bit-202003021730-Linux.zip > >>>> > > >>>> > Started it up and loaded the latest system updates and the OSProcess > >>>> > package (access OS functions). > >>>> > > >>>> > I then did: > >>>> > > >>>> > CommandShell command: 'date' > >>>> > > >>>> > This works as I'd expect it too. > >>>> > > >>>> > However, what is interesting is that if I change the time on the > machine to > >>>> > any time between 7:36AM and 10:36AM (PDT, I'm in San Jose, CA) for > today > >>>> > (May 19th) this call fails with the stack below. I'm quitting the > image > >>>> > between time changes. > >>>> > > >>>> > There was no failure for the same time period yesterday. Nor does > it > >>>> > appear to fail for any other time period today. > >>>> > > >>>> > -- Bob > >>>> > > >>>> > Stack follows: > >>>> > > >>>> > 19 May 2021 10:30:20.503624 am > >>>> > > >>>> > VM: unix - Smalltalk > >>>> > Image: Squeak5.3 [latest update: #19458] > >>>> > > >>>> > SecurityManager state: > >>>> > Restricted: false > >>>> > FileAccess: true > >>>> > SocketAccess: true > >>>> > Working Dir > >>>> > > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared > >>>> > Trusted Dir > >>>> > > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/secure > >>>> > Untrusted Dir > >>>> > > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/My > >>>> > Squeak > >>>> > > >>>> > AioEventHandler(Object)>>notify: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > aString: 'aio event forwarding not supported' > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > [] in > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > < > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > BlockClosure>>cull: > >>>> > Receiver: [closure] in > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Arguments and temporary variables: > >>>> > firstArg: Warning: aio event forwarding not supported > >>>> > Receiver's instance variables: > >>>> > outerContext: > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > startpc: 154 > >>>> > numArgs: 1 > >>>> > > >>>> > [] in Context>>handleSignal: > >>>> > Receiver: BlockClosure>>on:do: > >>>> > Arguments and temporary variables: > >>>> > < > >>>> > Receiver's instance variables: > >>>> > sender: > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > pc: 32 > >>>> > stackp: 3 > >>>> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") > >>>> > closureOrNil: nil > >>>> > receiver: [closure] in > >>>> > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > >>>> > > >>>> > BlockClosure>>ensure: > >>>> > Receiver: [closure] in Context>>handleSignal: > >>>> > Arguments and temporary variables: > >>>> > aBlock: [closure] in Context>>handleSignal: > >>>> > complete: nil > >>>> > returnValue: nil > >>>> > Receiver's instance variables: > >>>> > outerContext: Context>>handleSignal: > >>>> > startpc: 174 > >>>> > numArgs: 0 > >>>> > > >>>> > Context>>handleSignal: > >>>> > Receiver: BlockClosure>>on:do: > >>>> > Arguments and temporary variables: > >>>> > exception: Warning: aio event forwarding not supported > >>>> > handlerActive: true > >>>> > val: nil > >>>> > Receiver's instance variables: > >>>> > sender: > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > pc: 32 > >>>> > stackp: 3 > >>>> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") > >>>> > closureOrNil: nil > >>>> > receiver: [closure] in > >>>> > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > >>>> > > >>>> > Warning(Exception)>>signal > >>>> > Receiver: Warning: aio event forwarding not supported > >>>> > Arguments and temporary variables: > >>>> > > >>>> > Receiver's instance variables: > >>>> > messageText: 'aio event forwarding not supported' > >>>> > tag: nil > >>>> > signalContext: Warning(Exception)>>signal > >>>> > handlerContext: BlockClosure>>on:do: > >>>> > outerContext: nil > >>>> > > >>>> > Warning(Exception)>>signal: > >>>> > Receiver: Warning: aio event forwarding not supported > >>>> > Arguments and temporary variables: > >>>> > signalerText: 'aio event forwarding not supported' > >>>> > Receiver's instance variables: > >>>> > messageText: 'aio event forwarding not supported' > >>>> > tag: nil > >>>> > signalContext: Warning(Exception)>>signal > >>>> > handlerContext: BlockClosure>>on:do: > >>>> > outerContext: nil > >>>> > > >>>> > Warning class>>signal: > >>>> > Receiver: Warning > >>>> > Arguments and temporary variables: > >>>> > signalerText: 'aio event forwarding not supported' > >>>> > Receiver's instance variables: > >>>> > superclass: Notification > >>>> > methodDict: a > MethodDictionary(#defaultAction->(Warning>>#defaultAction "a > >>>> > CompiledMethod...etc... > >>>> > format: 65541 > >>>> > instanceVariables: nil > >>>> > organization: ('priv handling' defaultAction) > >>>> > > >>>> > subclasses: {Deprecation . ServiceCancelled . SAXWarning . > >>>> > UndeclaredVariableWarning...etc... > >>>> > name: #Warning > >>>> > classPool: nil > >>>> > sharedPools: nil > >>>> > environment: nil > >>>> > category: #'Kernel-Exceptions' > >>>> > suppressed: false > >>>> > resetOnStartUp: false > >>>> > > >>>> > AioEventHandler(Object)>>notify: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > aString: 'aio event forwarding not supported' > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > AioEventHandler>>aioEnable:forSemaphore:externalObject: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > ioDescriptor: nil > >>>> > semaphoreIndex: 17 > >>>> > trueOrFalse: true > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > [] in > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > < > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > BlockClosure>>on:do: > >>>> > Receiver: [closure] in > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Arguments and temporary variables: > >>>> > exceptionOrExceptionSet: Warning > >>>> > handlerAction: [closure] in > >>>> > > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > >>>> > handlerActive: false > >>>> > Receiver's instance variables: > >>>> > outerContext: > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > startpc: 140 > >>>> > numArgs: 0 > >>>> > > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > exceptionEventFlag: true > >>>> > readEventFlag: true > >>>> > writeEventFlag: false > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' > >>>> > exceptionEventFlag: true > >>>> > readEventFlag: true > >>>> > writeEventFlag: false > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > AioEventHandler > class>>forFileStream:exceptions:readEvents:writeEvents: > >>>> > Receiver: AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' > >>>> > exceptionEventFlag: true > >>>> > readEventFlag: true > >>>> > writeEventFlag: false > >>>> > Receiver's instance variables: > >>>> > superclass: Model > >>>> > methodDict: a > MethodDictionary(#aioDisable:->(AioEventHandler>>#aioDisable: > >>>> > "a CompiledMethod...etc... > >>>> > format: 65541 > >>>> > instanceVariables: #('semaphore' 'semaIndex' 'handlerProc' > 'descriptor') > >>>> > organization: ('aio event forwarding' aioDisable: > >>>> > aioEnable:forSemaphore:externalObject:...etc... > >>>> > subclasses: nil > >>>> > name: #AioEventHandler > >>>> > classPool: a Dictionary(#AioPluginPresent->true ) > >>>> > sharedPools: nil > >>>> > environment: Smalltalk > >>>> > category: #'OSProcess-AIO' > >>>> > > >>>> > > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling > >>>> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' > >>>> > Arguments and temporary variables: > >>>> > > >>>> > Receiver's instance variables: > >>>> > > >>>> > > >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize > >>>> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' > >>>> > Arguments and temporary variables: > >>>> > > >>>> > Receiver's instance variables: > >>>> > > >>>> > > >>>> > BufferedAsyncFileReadStream class(AttachableFileStream > >>>> > class)>>name:attachTo:writable: > >>>> > Receiver: BufferedAsyncFileReadStream > >>>> > Arguments and temporary variables: > >>>> > aSymbolOrString: 'pipeReader' > >>>> > anIOHandle: #[93 179 159 128 0 0 0 0 48 162 123 2 0 0 0 0 0 0 0 0 0 > 0 0 0] > >>>> > readWriteFlag: false > >>>> > Receiver's instance variables: > >>>> > superclass: AsyncFileReadStream > >>>> > methodDict: a > >>>> > > MethodDictionary(#actAsExecutor->(BufferedAsyncFileReadStream>>#a...etc... > >>>> > format: 65552 > >>>> > instanceVariables: #('nonBlockingMode' 'readBuffer' > 'readSyncSemaphore' > >>>> > 'dataAv...etc... > >>>> > organization: ('finalization' actAsExecutor) > >>>> > ('read ahead buffer' appendAllToBuffer:...etc... > >>>> > subclasses: nil > >>>> > name: #BufferedAsyncFileReadStream > >>>> > classPool: nil > >>>> > sharedPools: nil > >>>> > environment: Smalltalk > >>>> > category: #'OSProcess-Base' > >>>> > > >>>> > > >>>> > --- The full stack --- > >>>> > AioEventHandler(Object)>>notify: > >>>> > [] in > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > BlockClosure>>cull: > >>>> > [] in Context>>handleSignal: > >>>> > BlockClosure>>ensure: > >>>> > Context>>handleSignal: > >>>> > Warning(Exception)>>signal > >>>> > Warning(Exception)>>signal: > >>>> > Warning class>>signal: > >>>> > AioEventHandler(Object)>>notify: > >>>> > AioEventHandler>>aioEnable:forSemaphore:externalObject: > >>>> > [] in > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > BlockClosure>>on:do: > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: > >>>> > AioEventHandler > class>>forFileStream:exceptions:readEvents:writeEvents: > >>>> > > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling > >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize > >>>> > BufferedAsyncFileReadStream class(AttachableFileStream > >>>> > class)>>name:attachTo:writable: > >>>> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > >>>> > AttachableFileStream>>asBufferedAsyncFileReadStream > >>>> > ExternalPipe>>setBufferedReader > >>>> > PipeableOSProcess(PipeJunction)>>enableOutputStreamTriggers > >>>> > PipeableOSProcess>>enableEventTriggers > >>>> > PipeableOSProcess(PipeJunction)>>prepareOutputForInternalReader > >>>> > PipeableOSProcess>>prepareOutputForInternalReader > >>>> > PipeableOSProcess(PipeJunction)>>prepareOutputFor: > >>>> > ProxyPipeline>>fromString:shell: > >>>> > ProxyPipeline class>>fromString:shell: > >>>> > CommandShell>>pipelineCollectionFrom: > >>>> > CommandShell>>evaluateOrMakePipelinesFrom: > >>>> > CommandShell>>command:echo: > >>>> > [] in CommandShell>>processCommand:echo: > >>>> > [] in BlockClosure>>newProcess > >>>> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Thu May 20 22:07:35 2021 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu, 20 May 2021 15:07:35 -0700 Subject: [Vm-dev] primitive 87 resume In-Reply-To: References: Message-ID: Hi Florin, On Wed, May 19, 2021 at 4:05 PM Florin Mateoc wrote: > > Hi all, > > In the method Process>>resume, which invokes primitive 87, the comment > states that the primitive should fail if the process is already waiting in > a queue. > But the implementation does not do that. If we execute (inspect) the > snippet: > > | evaluationProcess result delay testProcess | > delay := Delay forMilliseconds: 50. > testProcess := Processor activeProcess. > evaluationProcess := [ > delay unschedule. > result := testProcess isBlocked. > testProcess resume] fork. > delay wait. > result > > it returns true (and no primitive failed error occurs), which means we > successfully resumed a blocked (waiting on a semaphore) process. > I also checked in VMMaker and indeed, the code does not check if the > process is on a queue or not before just putting it on a runnable list. > > What do you think? Should the comment be changed or the implementation? > I think the implementation. Any other opinions? > > Florin > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Thu May 20 22:15:01 2021 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu, 20 May 2021 15:15:01 -0700 Subject: [Vm-dev] primitive 87 resume In-Reply-To: References: Message-ID: Hi Florin, here's my comment in the implementation from 2010: "Personally I would like to check MyList, which should not be one of the elements of the scheduler lists. But there are awful race conditions in things like should:notTakeMoreThan: that mean we can't. eem 9/27/2010 23:08. e.g. So it appears that there may be issues that make it difficult to change the primitive. On Wed, May 19, 2021 at 4:05 PM Florin Mateoc wrote: > > Hi all, > > In the method Process>>resume, which invokes primitive 87, the comment > states that the primitive should fail if the process is already waiting in > a queue. > But the implementation does not do that. If we execute (inspect) the > snippet: > > | evaluationProcess result delay testProcess | > delay := Delay forMilliseconds: 50. > testProcess := Processor activeProcess. > evaluationProcess := [ > delay unschedule. > result := testProcess isBlocked. > testProcess resume] fork. > delay wait. > result > > it returns true (and no primitive failed error occurs), which means we > successfully resumed a blocked (waiting on a semaphore) process. > I also checked in VMMaker and indeed, the code does not check if the > process is on a queue or not before just putting it on a runnable list. > > What do you think? Should the comment be changed or the implementation? > > Florin > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Thu May 20 22:30:44 2021 From: notifications at github.com (Nicolas Cellier) Date: Thu, 20 May 2021 15:30:44 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] config.h:40:2: error: This file was included too late. Please make sure it is included earlier (#567) In-Reply-To: References: Message-ID: Duplicate of #560 -- 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/567#issuecomment-845522534 -------------- next part -------------- An HTML attachment was scrubbed... URL: From notifications at github.com Thu May 20 22:30:44 2021 From: notifications at github.com (Nicolas Cellier) Date: Thu, 20 May 2021 15:30:44 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] config.h:40:2: error: This file was included too late. Please make sure it is included earlier (#567) In-Reply-To: References: Message-ID: Closed #567. -- 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/567#event-4776306498 -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Thu May 20 22:32:44 2021 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 20 May 2021 22:32:44 0000 Subject: [Vm-dev] VM Maker Inbox: VMMaker.oscog-eem.2959.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker Inbox: http://source.squeak.org/VMMakerInbox/VMMaker.oscog-eem.2959.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2959 Author: eem Time: 20 May 2021, 3:32:35.376631 pm UUID: bcb1f4a6-116d-4a10-ae3f-fcd449535d7d Ancestors: VMMaker.oscog-eem.2958 Candidate implementations of primitiveResume that check for myList and fail if it is not nil. See the comment in InterpreterPrimitives>>primitiveResume "Personally I would like to check MyList, which should not be one of the elements of the scheduler lists. But there are awful race conditions in things like should:notTakeMoreThan: that mean we can't. eem 9/27/2010 23:08." =============== Diff against VMMaker.oscog-eem.2958 =============== Item was changed: ----- Method: CoInterpreterPrimitives>>primitiveResume (in category 'process primitives') ----- primitiveResume "Put this process on the scheduler's lists thus allowing it to proceed next time there is a chance for processes of it's priority level. It must go to the back of its run queue so as not to preempt any already running processes at this level. If the process's priority is higher than the current process, preempt the current process." | proc inInterpreter | proc := self stackTop. "rcvr" + "We only have to check for myList being nil. If it is nil then this is either the active process or + a process suspended with primitiveSuspend (and if it is the activeProcess suspendedContext will + be nil and the isContext: test will fail). If it is not nil then either the process is waiting on some + semaphore-like list or on one of the scheduler's lists. If it is on some semaphore-like list it should + not resume. If it is on one of the scheduler's lists it is runnable (already resumed)." + objectMemory nilObject = (objectMemory followField: MyListIndex ofObject: proc) ifFalse: + [^self primitiveFailFor: PrimErrInappropriate]. (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: + [^self primitiveFailFor: PrimErrBadReceiver]. - [^self primitiveFail]. "We're about to switch process, either to an interpreted frame or a machine code frame. To know whether to return or enter machine code we have to know from whence we came. We could have come from the interpreter, either directly or via a machine code primitive. We could have come from machine code. The instructionPointer tells us where from:" inInterpreter := instructionPointer >= objectMemory startOfMemory. (self resume: proc preemptedYieldingIf: preemptionYields from: CSResume) ifTrue: [self forProcessPrimitiveReturnToExecutivePostContextSwitch: inInterpreter] "Personally I would like to check MyList, which should not be one of the elements of the scheduler lists. But there are awful race conditions in things like should:notTakeMoreThan: that mean we can't. eem 9/27/2010 23:08. e.g. | proc myList classLinkedList | proc := self stackTop. myList := objectMemory fetchPointer: MyListIndex ofObject: proc. classLinkedList := self superclassOf: (objectMemory splObj: ClassSemaphore). ((self fetchClassOfNonInt: myList) ~= classLinkedList and: [objectMemory isContext: (objectMemory fetchPointer: SuspendedContextIndex ofObject: proc)]) ifFalse: [^self primitiveFail]. ''We're about to switch process, either to an interpreted frame or a machine code frame. To know whether to return or enter machine code we have to know from whence we came. We could have come from the interpreter, either directly or via a machine code primitive. We could have come from machine code. The instructionPointer tells us where from:'' inInterpreter := instructionPointer >= objectMemory startOfMemory. (self resume: proc preemptedYieldingIf: preemptionYields from: CSResume) ifTrue: [self forProcessPrimitiveReturnToExecutivePostContextSwitch: inInterpreter]"! Item was changed: ----- Method: InterpreterPrimitives>>primitiveResume (in category 'process primitives') ----- primitiveResume "Put this process on the scheduler's lists thus allowing it to proceed next time there is a chance for processes of it's priority level. It must go to the back of its run queue so as not to preempt any already running processes at this level. If the process's priority is higher than the current process, preempt the current process." | proc | proc := self stackTop. "rcvr" + "We only have to check for myList being nil. If it is nil then this is either the active process or + a process suspended with primitiveSuspend (and if it is the activeProcess suspendedContext will + be nil and the isContext: test will fail). If it is not nil then either the process is waiting on some + semaphore-like list or on one of the scheduler's lists. If it is on some semaphore-like list it should + not resume. If it is on one of the scheduler's lists it is runnable (already resumed)." + objectMemory nilObject = (objectMemory followField: MyListIndex ofObject: proc) ifFalse: + [^self primitiveFailFor: PrimErrInappropriate]. + (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: + [^self primitiveFailFor: PrimErrBadReceiver]. - (objectMemory isContext: (objectMemory fetchPointer: SuspendedContextIndex ofObject: proc)) ifFalse: - [^self primitiveFail]. self resume: proc preemptedYieldingIf: preemptionYields "Personally I would like to check MyList, which should not be one of the elements of the scheduler lists. But there are awful race conditions in things like should:notTakeMoreThan: that mean we can't. eem 9/27/2010 23:08. e.g. | proc myList classLinkedList | proc := self stackTop. myList := objectMemory fetchPointer: MyListIndex ofObject: proc. classLinkedList := self superclassOf: (objectMemory splObj: ClassSemaphore). ((self fetchClassOfNonInt: myList) ~= classLinkedList and: [objectMemory isContext: (objectMemory fetchPointer: SuspendedContextIndex ofObject: proc)]) ifFalse: [^self primitiveFail]. self resume: proc preemptedYieldingIf: preemptionYields"! From eliot.miranda at gmail.com Thu May 20 22:34:14 2021 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu, 20 May 2021 15:34:14 -0700 Subject: [Vm-dev] primitive 87 resume In-Reply-To: References: Message-ID: Hi Florin, I submitted a suitable implementation to VMMakerInbox for our records, see VMMaker.oscog-eem.2959. Some time I'll try and test this to see if the issues are serious or not. On Thu, May 20, 2021 at 3:15 PM Eliot Miranda wrote: > Hi Florin, > > here's my comment in the implementation from 2010: > > "Personally I would like to check MyList, which should not be one of the > elements of the scheduler lists. > But there are awful race conditions in things like should:notTakeMoreThan: > that mean we can't. > eem 9/27/2010 23:08. e.g. > > So it appears that there may be issues that make it difficult to change > the primitive. > > On Wed, May 19, 2021 at 4:05 PM Florin Mateoc > wrote: > >> >> Hi all, >> >> In the method Process>>resume, which invokes primitive 87, the comment >> states that the primitive should fail if the process is already waiting in >> a queue. >> But the implementation does not do that. If we execute (inspect) the >> snippet: >> >> | evaluationProcess result delay testProcess | >> delay := Delay forMilliseconds: 50. >> testProcess := Processor activeProcess. >> evaluationProcess := [ >> delay unschedule. >> result := testProcess isBlocked. >> testProcess resume] fork. >> delay wait. >> result >> >> it returns true (and no primitive failed error occurs), which means we >> successfully resumed a blocked (waiting on a semaphore) process. >> I also checked in VMMaker and indeed, the code does not check if the >> process is on a queue or not before just putting it on a runnable list. >> >> What do you think? Should the comment be changed or the implementation? >> >> Florin >> > > > -- > _,,,^..^,,,_ > best, Eliot > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Thu May 20 22:39:47 2021 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 20 May 2021 22:39:47 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2960.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2960.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2960 Author: eem Time: 20 May 2021, 3:39:38.287864 pm UUID: 9f7e6567-73d5-4991-83e1-e1958fd55611 Ancestors: VMMaker.oscog-eem.2958 InterpreterPrimitives>>primitiveResume should also follow the SuspendedContextIndex field of a process on Spur, as does the CoInterpreterPrimitives version. Update the comment re not checking myList. See VMMaker.oscog-eem.2959 in VMMakerInbox for a version that does check and is being considered for inclusion. =============== Diff against VMMaker.oscog-eem.2958 =============== Item was changed: ----- Method: CoInterpreterPrimitives>>primitiveResume (in category 'process primitives') ----- primitiveResume "Put this process on the scheduler's lists thus allowing it to proceed next time there is a chance for processes of it's priority level. It must go to the back of its run queue so as not to preempt any already running processes at this level. If the process's priority is higher than the current process, preempt the current process." | proc inInterpreter | proc := self stackTop. "rcvr" (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: [^self primitiveFail]. "We're about to switch process, either to an interpreted frame or a machine code frame. To know whether to return or enter machine code we have to know from whence we came. We could have come from the interpreter, either directly or via a machine code primitive. We could have come from machine code. The instructionPointer tells us where from:" inInterpreter := instructionPointer >= objectMemory startOfMemory. (self resume: proc preemptedYieldingIf: preemptionYields from: CSResume) ifTrue: [self forProcessPrimitiveReturnToExecutivePostContextSwitch: inInterpreter] "Personally I would like to check MyList, which should not be one of the elements of the scheduler lists. But there are awful race conditions in things like should:notTakeMoreThan: that mean we can't. + eem 9/27/2010 23:08, updated eem 5/20/2021 15:36. e.g. - eem 9/27/2010 23:08. e.g. + | proc | + proc := self stackTop. ''rcvr'' + ''We only have to check for myList being nil. If it is nil then this is either the active process or + a process suspended with primitiveSuspend (and if it is the activeProcess suspendedContext will + be nil and the isContext: test will fail). If it is not nil then either the process is waiting on some + semaphore-like list or on one of the scheduler's lists. If it is on some semaphore-like list it should + not resume. If it is on one of the scheduler's lists it is runnable (already resumed).'' + objectMemory nilObject = (objectMemory followField: MyListIndex ofObject: proc) ifFalse: + [^self primitiveFailFor: PrimErrInappropriate]. + (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: + [^self primitiveFailFor: PrimErrBadReceiver]. - | proc myList classLinkedList | - proc := self stackTop. - myList := objectMemory fetchPointer: MyListIndex ofObject: proc. - classLinkedList := self superclassOf: (objectMemory splObj: ClassSemaphore). - ((self fetchClassOfNonInt: myList) ~= classLinkedList - and: [objectMemory isContext: (objectMemory fetchPointer: SuspendedContextIndex ofObject: proc)]) ifFalse: - [^self primitiveFail]. ''We're about to switch process, either to an interpreted frame or a machine code frame. To know whether to return or enter machine code we have to know from whence we came. We could have come from the interpreter, either directly or via a machine code primitive. We could have come from machine code. The instructionPointer tells us where from:'' inInterpreter := instructionPointer >= objectMemory startOfMemory. + (self resume: proc preemptedYieldingIf: preemptionYields from: CSResume) ifTrue: - (self resume: proc preemptedYieldingIf: preemptionYields from: CSResume) ifTrue: [self forProcessPrimitiveReturnToExecutivePostContextSwitch: inInterpreter]"! Item was changed: ----- Method: InterpreterPrimitives>>primitiveResume (in category 'process primitives') ----- primitiveResume "Put this process on the scheduler's lists thus allowing it to proceed next time there is a chance for processes of it's priority level. It must go to the back of its run queue so as not to preempt any already running processes at this level. If the process's priority is higher than the current process, preempt the current process." | proc | proc := self stackTop. "rcvr" + (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: - (objectMemory isContext: (objectMemory fetchPointer: SuspendedContextIndex ofObject: proc)) ifFalse: [^self primitiveFail]. self resume: proc preemptedYieldingIf: preemptionYields "Personally I would like to check MyList, which should not be one of the elements of the scheduler lists. But there are awful race conditions in things like should:notTakeMoreThan: that mean we can't. + eem 9/27/2010 23:08, updated eem 5/20/2021 15:36. e.g. - eem 9/27/2010 23:08. e.g. + | proc | + proc := self stackTop. ''rcvr'' + ''We only have to check for myList being nil. If it is nil then this is either the active process or + a process suspended with primitiveSuspend (and if it is the activeProcess suspendedContext will + be nil and the isContext: test will fail). If it is not nil then either the process is waiting on some + semaphore-like list or on one of the scheduler's lists. If it is on some semaphore-like list it should + not resume. If it is on one of the scheduler's lists it is runnable (already resumed).'' + objectMemory nilObject = (objectMemory followField: MyListIndex ofObject: proc) ifFalse: + [^self primitiveFailFor: PrimErrInappropriate]. + (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: + [^self primitiveFailFor: PrimErrBadReceiver]. - | proc myList classLinkedList | - proc := self stackTop. - myList := objectMemory fetchPointer: MyListIndex ofObject: proc. - classLinkedList := self superclassOf: (objectMemory splObj: ClassSemaphore). - ((self fetchClassOfNonInt: myList) ~= classLinkedList - and: [objectMemory isContext: (objectMemory fetchPointer: SuspendedContextIndex ofObject: proc)]) ifFalse: - [^self primitiveFail]. self resume: proc preemptedYieldingIf: preemptionYields"! From commits at source.squeak.org Thu May 20 22:54:41 2021 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 20 May 2021 22:54:41 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2961.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2961.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2961 Author: eem Time: 20 May 2021, 3:54:32.723618 pm UUID: fa08f5a0-f381-4cee-9c68-6a7610fd2728 Ancestors: VMMaker.oscog-eem.2960 Tweak primitiveResume to get better Slang inlining. =============== Diff against VMMaker.oscog-eem.2960 =============== Item was changed: ----- Method: CoInterpreterPrimitives>>primitiveResume (in category 'process primitives') ----- primitiveResume "Put this process on the scheduler's lists thus allowing it to proceed next time there is a chance for processes of it's priority level. It must go to the back of its run queue so as not to preempt any already running processes at this level. If the process's priority is higher than the current process, preempt the current process." + | proc ctxt inInterpreter | - | proc inInterpreter | proc := self stackTop. "rcvr" + ctxt := objectMemory followField: SuspendedContextIndex ofObject: proc. "written this way to get better Slang inlining" + (objectMemory isContext: ctxt) ifFalse: + [^self primitiveFailFor: PrimErrBadReceiver]. - (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: - [^self primitiveFail]. "We're about to switch process, either to an interpreted frame or a machine code frame. To know whether to return or enter machine code we have to know from whence we came. We could have come from the interpreter, either directly or via a machine code primitive. We could have come from machine code. The instructionPointer tells us where from:" inInterpreter := instructionPointer >= objectMemory startOfMemory. (self resume: proc preemptedYieldingIf: preemptionYields from: CSResume) ifTrue: [self forProcessPrimitiveReturnToExecutivePostContextSwitch: inInterpreter] "Personally I would like to check MyList, which should not be one of the elements of the scheduler lists. But there are awful race conditions in things like should:notTakeMoreThan: that mean we can't. eem 9/27/2010 23:08, updated eem 5/20/2021 15:36. e.g. + | proc field | - | proc | proc := self stackTop. ''rcvr'' ''We only have to check for myList being nil. If it is nil then this is either the active process or a process suspended with primitiveSuspend (and if it is the activeProcess suspendedContext will be nil and the isContext: test will fail). If it is not nil then either the process is waiting on some semaphore-like list or on one of the scheduler's lists. If it is on some semaphore-like list it should not resume. If it is on one of the scheduler's lists it is runnable (already resumed).'' + field := objectMemory followField: MyListIndex ofObject: proc. + objectMemory nilObject = field ifFalse: - objectMemory nilObject = (objectMemory followField: MyListIndex ofObject: proc) ifFalse: [^self primitiveFailFor: PrimErrInappropriate]. + field := objectMemory followField: SuspendedContextIndex ofObject: proc. + (objectMemory isContext: field) ifFalse: - (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: [^self primitiveFailFor: PrimErrBadReceiver]. ''We're about to switch process, either to an interpreted frame or a machine code frame. To know whether to return or enter machine code we have to know from whence we came. We could have come from the interpreter, either directly or via a machine code primitive. We could have come from machine code. The instructionPointer tells us where from:'' inInterpreter := instructionPointer >= objectMemory startOfMemory. (self resume: proc preemptedYieldingIf: preemptionYields from: CSResume) ifTrue: [self forProcessPrimitiveReturnToExecutivePostContextSwitch: inInterpreter]"! Item was changed: ----- Method: InterpreterPrimitives>>primitiveResume (in category 'process primitives') ----- primitiveResume "Put this process on the scheduler's lists thus allowing it to proceed next time there is a chance for processes of it's priority level. It must go to the back of its run queue so as not to preempt any already running processes at this level. If the process's priority is higher than the current process, preempt the current process." + | proc ctxt | - | proc | proc := self stackTop. "rcvr" + ctxt := objectMemory followField: SuspendedContextIndex ofObject: proc. "written this way to get better Slang inlining" + (objectMemory isContext: ctxt) ifFalse: + [^self primitiveFailFor: PrimErrBadReceiver]. - (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: - [^self primitiveFail]. self resume: proc preemptedYieldingIf: preemptionYields "Personally I would like to check MyList, which should not be one of the elements of the scheduler lists. But there are awful race conditions in things like should:notTakeMoreThan: that mean we can't. eem 9/27/2010 23:08, updated eem 5/20/2021 15:36. e.g. + | proc field | - | proc | proc := self stackTop. ''rcvr'' ''We only have to check for myList being nil. If it is nil then this is either the active process or a process suspended with primitiveSuspend (and if it is the activeProcess suspendedContext will be nil and the isContext: test will fail). If it is not nil then either the process is waiting on some semaphore-like list or on one of the scheduler's lists. If it is on some semaphore-like list it should not resume. If it is on one of the scheduler's lists it is runnable (already resumed).'' + field := objectMemory followField: MyListIndex ofObject: proc. + objectMemory nilObject = field ifFalse: - objectMemory nilObject = (objectMemory followField: MyListIndex ofObject: proc) ifFalse: [^self primitiveFailFor: PrimErrInappropriate]. + field := objectMemory followField: SuspendedContextIndex ofObject: proc. + (objectMemory isContext: field) ifFalse: - (objectMemory isContext: (objectMemory followField: SuspendedContextIndex ofObject: proc)) ifFalse: [^self primitiveFailFor: PrimErrBadReceiver]. self resume: proc preemptedYieldingIf: preemptionYields"! From florin.mateoc at gmail.com Thu May 20 23:23:28 2021 From: florin.mateoc at gmail.com (Florin Mateoc) Date: Thu, 20 May 2021 19:23:28 -0400 Subject: [Vm-dev] primitive 87 resume In-Reply-To: References: Message-ID: Hi Eliot, Indeed, that's where I discovered the anomaly - but I think that is not a good justification, that method looks bogus to me. It does not actually need to resume anything, it should read evaluationProcess := [ result := aBlock value. evaluated := true. delay signalWaitingProcess; unschedule. ] forkNamed: 'Process to evaluate should: notTakeMoreThanMilliseconds:'. instead of evaluationProcess := [ result := aBlock value. evaluated := true. delay unschedule. testProcess resume ] forkNamed: 'Process to evaluate should: notTakeMoreThanMilliseconds:'. Cheers, Florin On Thu, May 20, 2021 at 6:15 PM Eliot Miranda wrote: > > Hi Florin, > > here's my comment in the implementation from 2010: > > "Personally I would like to check MyList, which should not be one of the > elements of the scheduler lists. > But there are awful race conditions in things like should:notTakeMoreThan: > that mean we can't. > eem 9/27/2010 23:08. e.g. > > So it appears that there may be issues that make it difficult to change > the primitive. > > On Wed, May 19, 2021 at 4:05 PM Florin Mateoc > wrote: > >> >> Hi all, >> >> In the method Process>>resume, which invokes primitive 87, the comment >> states that the primitive should fail if the process is already waiting in >> a queue. >> But the implementation does not do that. If we execute (inspect) the >> snippet: >> >> | evaluationProcess result delay testProcess | >> delay := Delay forMilliseconds: 50. >> testProcess := Processor activeProcess. >> evaluationProcess := [ >> delay unschedule. >> result := testProcess isBlocked. >> testProcess resume] fork. >> delay wait. >> result >> >> it returns true (and no primitive failed error occurs), which means we >> successfully resumed a blocked (waiting on a semaphore) process. >> I also checked in VMMaker and indeed, the code does not check if the >> process is on a queue or not before just putting it on a runnable list. >> >> What do you think? Should the comment be changed or the implementation? >> >> Florin >> > > > -- > _,,,^..^,,,_ > best, Eliot > -------------- next part -------------- An HTML attachment was scrubbed... URL: From lewis at mail.msen.com Fri May 21 18:34:03 2021 From: lewis at mail.msen.com (David T. Lewis) Date: Fri, 21 May 2021 14:34:03 -0400 Subject: [Vm-dev] Intermittent AttachableFileStream error during 7:36 and 10:36 today In-Reply-To: References: <20210519210235.GA15318@shell.msen.com> Message-ID: <20210521183403.GA11568@shell.msen.com> I agree with the assessment of Alistair Grant in https://github.com/pharo-project/opensmalltalk-vm/issues/233 "Option 3. Modify globalSessionID so that it never uses more than 31 bits" Yes this seems safest and best to me. Dave On Thu, May 20, 2021 at 10:53:35AM +0200, Andrei Chis wrote: > > Maybe not related at all, but in a different context we were getting > random failures when redirecting output from os commands to the stdio > depending on the value of #ioMSecs caused by an inconsistency in how > globalSessionID was computed > (https://github.com/pharo-project/opensmalltalk-vm/issues/233) > > On Wed, May 19, 2021 at 11:28 PM Bob Westergaard wrote: > > > > > > I'm pretty sure that is it. I added some logging code to primitiveTestEndOfFileFlag() and the session ids do not compare. I see (in a not very recent) VMMaker image that #ioMSecs is used to create the global session id. Maybe there is some overflow/underflow with the primitive type used for this field? > > > > -- Bob > > > > On Wed, May 19, 2021 at 2:17 PM Bob Westergaard wrote: > >> > >> I wonder if the file/pipe sessionID comparison with the getThisSessionID() that is failing in a primitive somewhere. I guess I'll look at how that is created. > >> > >> -- Bob > >> > >> On Wed, May 19, 2021 at 2:06 PM Bob Westergaard wrote: > >>> > >>> > >>> Hi Dave, > >>> > >>> I'm changing the system time before starting the image. > >>> > >>> -- Bob > >>> > >>> On Wed, May 19, 2021 at 2:02 PM David T. Lewis wrote: > >>>> > >>>> > >>>> Wos, that's a new one on me. What exactly are you changing on your > >>>> computer, are you changing the system time, or changing time zone? > >>>> > >>>> Dave > >>>> > >>>> On Wed, May 19, 2021 at 12:17:58PM -0700, Bob Westergaard wrote: > >>>> > > >>>> > Hi, > >>>> > > >>>> > I have a rather bizarre intermittent failure that I'd see if anyone else > >>>> > can reproduce. > >>>> > > >>>> > I've taken the following: > >>>> > > >>>> > http://files.squeak.org/5.3/Squeak5.3-19435-64bit/Squeak5.3-19435-64bit-202003021730-Linux.zip > >>>> > > >>>> > Started it up and loaded the latest system updates and the OSProcess > >>>> > package (access OS functions). > >>>> > > >>>> > I then did: > >>>> > > >>>> > CommandShell command: 'date' > >>>> > > >>>> > This works as I'd expect it too. > >>>> > > >>>> > However, what is interesting is that if I change the time on the machine to > >>>> > any time between 7:36AM and 10:36AM (PDT, I'm in San Jose, CA) for today > >>>> > (May 19th) this call fails with the stack below. I'm quitting the image > >>>> > between time changes. > >>>> > > >>>> > There was no failure for the same time period yesterday. Nor does it > >>>> > appear to fail for any other time period today. > >>>> > > >>>> > -- Bob > >>>> > > >>>> > Stack follows: > >>>> > > >>>> > 19 May 2021 10:30:20.503624 am > >>>> > > >>>> > VM: unix - Smalltalk > >>>> > Image: Squeak5.3 [latest update: #19458] > >>>> > > >>>> > SecurityManager state: > >>>> > Restricted: false > >>>> > FileAccess: true > >>>> > SocketAccess: true > >>>> > Working Dir > >>>> > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared > >>>> > Trusted Dir > >>>> > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/secure > >>>> > Untrusted Dir > >>>> > /scratch/bwesterg/squeak/Squeak5.3-19435-64bit-202003021730-Linux/shared/My > >>>> > Squeak > >>>> > > >>>> > AioEventHandler(Object)>>notify: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > aString: 'aio event forwarding not supported' > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > < > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > BlockClosure>>cull: > >>>> > Receiver: [closure] in > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Arguments and temporary variables: > >>>> > firstArg: Warning: aio event forwarding not supported > >>>> > Receiver's instance variables: > >>>> > outerContext: > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > startpc: 154 > >>>> > numArgs: 1 > >>>> > > >>>> > [] in Context>>handleSignal: > >>>> > Receiver: BlockClosure>>on:do: > >>>> > Arguments and temporary variables: > >>>> > < > >>>> > Receiver's instance variables: > >>>> > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > pc: 32 > >>>> > stackp: 3 > >>>> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") > >>>> > closureOrNil: nil > >>>> > receiver: [closure] in > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > >>>> > > >>>> > BlockClosure>>ensure: > >>>> > Receiver: [closure] in Context>>handleSignal: > >>>> > Arguments and temporary variables: > >>>> > aBlock: [closure] in Context>>handleSignal: > >>>> > complete: nil > >>>> > returnValue: nil > >>>> > Receiver's instance variables: > >>>> > outerContext: Context>>handleSignal: > >>>> > startpc: 174 > >>>> > numArgs: 0 > >>>> > > >>>> > Context>>handleSignal: > >>>> > Receiver: BlockClosure>>on:do: > >>>> > Arguments and temporary variables: > >>>> > exception: Warning: aio event forwarding not supported > >>>> > handlerActive: true > >>>> > val: nil > >>>> > Receiver's instance variables: > >>>> > sender: AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > pc: 32 > >>>> > stackp: 3 > >>>> > method: (BlockClosure>>#on:do: "a CompiledMethod(1660548)") > >>>> > closureOrNil: nil > >>>> > receiver: [closure] in > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > >>>> > > >>>> > Warning(Exception)>>signal > >>>> > Receiver: Warning: aio event forwarding not supported > >>>> > Arguments and temporary variables: > >>>> > > >>>> > Receiver's instance variables: > >>>> > messageText: 'aio event forwarding not supported' > >>>> > tag: nil > >>>> > signalContext: Warning(Exception)>>signal > >>>> > handlerContext: BlockClosure>>on:do: > >>>> > outerContext: nil > >>>> > > >>>> > Warning(Exception)>>signal: > >>>> > Receiver: Warning: aio event forwarding not supported > >>>> > Arguments and temporary variables: > >>>> > signalerText: 'aio event forwarding not supported' > >>>> > Receiver's instance variables: > >>>> > messageText: 'aio event forwarding not supported' > >>>> > tag: nil > >>>> > signalContext: Warning(Exception)>>signal > >>>> > handlerContext: BlockClosure>>on:do: > >>>> > outerContext: nil > >>>> > > >>>> > Warning class>>signal: > >>>> > Receiver: Warning > >>>> > Arguments and temporary variables: > >>>> > signalerText: 'aio event forwarding not supported' > >>>> > Receiver's instance variables: > >>>> > superclass: Notification > >>>> > methodDict: a MethodDictionary(#defaultAction->(Warning>>#defaultAction "a > >>>> > CompiledMethod...etc... > >>>> > format: 65541 > >>>> > instanceVariables: nil > >>>> > organization: ('priv handling' defaultAction) > >>>> > > >>>> > subclasses: {Deprecation . ServiceCancelled . SAXWarning . > >>>> > UndeclaredVariableWarning...etc... > >>>> > name: #Warning > >>>> > classPool: nil > >>>> > sharedPools: nil > >>>> > environment: nil > >>>> > category: #'Kernel-Exceptions' > >>>> > suppressed: false > >>>> > resetOnStartUp: false > >>>> > > >>>> > AioEventHandler(Object)>>notify: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > aString: 'aio event forwarding not supported' > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > AioEventHandler>>aioEnable:forSemaphore:externalObject: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > ioDescriptor: nil > >>>> > semaphoreIndex: 17 > >>>> > trueOrFalse: true > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > < > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > BlockClosure>>on:do: > >>>> > Receiver: [closure] in > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Arguments and temporary variables: > >>>> > exceptionOrExceptionSet: Warning > >>>> > handlerAction: [closure] in > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents:...etc... > >>>> > handlerActive: false > >>>> > Receiver's instance variables: > >>>> > outerContext: > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > startpc: 140 > >>>> > numArgs: 0 > >>>> > > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > exceptionEventFlag: true > >>>> > readEventFlag: true > >>>> > writeEventFlag: false > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: > >>>> > Receiver: an AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' > >>>> > exceptionEventFlag: true > >>>> > readEventFlag: true > >>>> > writeEventFlag: false > >>>> > Receiver's instance variables: > >>>> > dependents: nil > >>>> > semaphore: nil > >>>> > semaIndex: nil > >>>> > handlerProc: nil > >>>> > descriptor: nil > >>>> > > >>>> > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: > >>>> > Receiver: AioEventHandler > >>>> > Arguments and temporary variables: > >>>> > aFileStream: BufferedAsyncFileReadStream: 'pipeReader' > >>>> > exceptionEventFlag: true > >>>> > readEventFlag: true > >>>> > writeEventFlag: false > >>>> > Receiver's instance variables: > >>>> > superclass: Model > >>>> > methodDict: a MethodDictionary(#aioDisable:->(AioEventHandler>>#aioDisable: > >>>> > "a CompiledMethod...etc... > >>>> > format: 65541 > >>>> > instanceVariables: #('semaphore' 'semaIndex' 'handlerProc' 'descriptor') > >>>> > organization: ('aio event forwarding' aioDisable: > >>>> > aioEnable:forSemaphore:externalObject:...etc... > >>>> > subclasses: nil > >>>> > name: #AioEventHandler > >>>> > classPool: a Dictionary(#AioPluginPresent->true ) > >>>> > sharedPools: nil > >>>> > environment: Smalltalk > >>>> > category: #'OSProcess-AIO' > >>>> > > >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling > >>>> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' > >>>> > Arguments and temporary variables: > >>>> > > >>>> > Receiver's instance variables: > >>>> > > >>>> > > >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize > >>>> > Receiver: BufferedAsyncFileReadStream: 'pipeReader' > >>>> > Arguments and temporary variables: > >>>> > > >>>> > Receiver's instance variables: > >>>> > > >>>> > > >>>> > BufferedAsyncFileReadStream class(AttachableFileStream > >>>> > class)>>name:attachTo:writable: > >>>> > Receiver: BufferedAsyncFileReadStream > >>>> > Arguments and temporary variables: > >>>> > aSymbolOrString: 'pipeReader' > >>>> > anIOHandle: #[93 179 159 128 0 0 0 0 48 162 123 2 0 0 0 0 0 0 0 0 0 0 0 0] > >>>> > readWriteFlag: false > >>>> > Receiver's instance variables: > >>>> > superclass: AsyncFileReadStream > >>>> > methodDict: a > >>>> > MethodDictionary(#actAsExecutor->(BufferedAsyncFileReadStream>>#a...etc... > >>>> > format: 65552 > >>>> > instanceVariables: #('nonBlockingMode' 'readBuffer' 'readSyncSemaphore' > >>>> > 'dataAv...etc... > >>>> > organization: ('finalization' actAsExecutor) > >>>> > ('read ahead buffer' appendAllToBuffer:...etc... > >>>> > subclasses: nil > >>>> > name: #BufferedAsyncFileReadStream > >>>> > classPool: nil > >>>> > sharedPools: nil > >>>> > environment: Smalltalk > >>>> > category: #'OSProcess-Base' > >>>> > > >>>> > > >>>> > --- The full stack --- > >>>> > AioEventHandler(Object)>>notify: > >>>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > BlockClosure>>cull: > >>>> > [] in Context>>handleSignal: > >>>> > BlockClosure>>ensure: > >>>> > Context>>handleSignal: > >>>> > Warning(Exception)>>signal > >>>> > Warning(Exception)>>signal: > >>>> > Warning class>>signal: > >>>> > AioEventHandler(Object)>>notify: > >>>> > AioEventHandler>>aioEnable:forSemaphore:externalObject: > >>>> > [] in AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > BlockClosure>>on:do: > >>>> > AioEventHandler>>initializeForExceptions:readEvents:writeEvents: > >>>> > AioEventHandler>>forFileStream:exceptions:readEvents:writeEvents: > >>>> > AioEventHandler class>>forFileStream:exceptions:readEvents:writeEvents: > >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>enableEventHandling > >>>> > BufferedAsyncFileReadStream(AsyncFileReadStream)>>initialize > >>>> > BufferedAsyncFileReadStream class(AttachableFileStream > >>>> > class)>>name:attachTo:writable: > >>>> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > >>>> > AttachableFileStream>>asBufferedAsyncFileReadStream > >>>> > ExternalPipe>>setBufferedReader > >>>> > PipeableOSProcess(PipeJunction)>>enableOutputStreamTriggers > >>>> > PipeableOSProcess>>enableEventTriggers > >>>> > PipeableOSProcess(PipeJunction)>>prepareOutputForInternalReader > >>>> > PipeableOSProcess>>prepareOutputForInternalReader > >>>> > PipeableOSProcess(PipeJunction)>>prepareOutputFor: > >>>> > ProxyPipeline>>fromString:shell: > >>>> > ProxyPipeline class>>fromString:shell: > >>>> > CommandShell>>pipelineCollectionFrom: > >>>> > CommandShell>>evaluateOrMakePipelinesFrom: > >>>> > CommandShell>>command:echo: > >>>> > [] in CommandShell>>processCommand:echo: > >>>> > [] in BlockClosure>>newProcess > >>>> From commits at source.squeak.org Fri May 21 22:22:42 2021 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 21 May 2021 22:22:42 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2962.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2962.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2962 Author: eem Time: 21 May 2021, 3:22:33.156394 pm UUID: 8b5a2a1e-46d4-445a-a0eb-95c71ffc7e16 Ancestors: VMMaker.oscog-eem.2961 Implement as intended (i.e. treat the parameter as an iomage-level Smalltalk object) InterpreterProxy>>isOopMutable:/isOopImmutable: =============== Diff against VMMaker.oscog-eem.2961 =============== Item was changed: + ----- Method: InterpreterProxy>>isOopImmutable: (in category 'testing') ----- - ----- Method: InterpreterProxy>>isOopImmutable: (in category 'object access') ----- isOopImmutable: oop + ^oop isReadOnlyObject! - ^StackInterpreter objectMemoryClass isOopImmutable: oop! Item was changed: ----- Method: InterpreterProxy>>isOopMutable: (in category 'testing') ----- isOopMutable: anOop + ^anOop isReadOnlyObject not! - ^self notYetImplementedError! From stes at telenet.be Sun May 23 18:51:02 2021 From: stes at telenet.be (stes@PANDORA.BE) Date: Sun, 23 May 2021 20:51:02 +0200 (CEST) Subject: [Vm-dev] new cog-spur VM for OpenIndiana Message-ID: <2091531222.180894048.1621795862386.JavaMail.zimbra@telenet.be> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Hello, Update about the OpenSmalltalk VM on "OpenIndiana". See docs and screenshots of Squeak and Cuis on "OpenIndiana" at: http://docs.openindiana.org/handbook/community/squeak/index.html I have renamed the packages to squeak, stack-spur and cog-spur respectively. The version number 5.0.2957 is something of my own fabrication, based on the names VMMaker.oscog-eem.2957 for Stack and CoInterpreter. # pkg info cog-spur Name: runtime/smalltalk/cog-spur Summary: The OpenSmalltalk Cog Spur Virtual Machine Category: Development/Smalltalk State: Installed Publisher: userland Version: 5.0.2957 Branch: 2020.0.1.0 Packaging Date: Sat May 15 10:35:19 2021 Last Install Time: Sat May 15 10:46:22 2021 Size: 1.00 MB Thanks, David Stes -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAEBCAAGBQJgqqPJAAoJENdFDkXGicizquQIAMX3NQcUaDXyT3wYOQ6M+lJb i3h8w9PDDKVRdj4Gys3YnZwQSl6omtgd9IjthcM9bQ3CrayVb23WJOGMal+7dpEk 5OIXELGb/a6/uzc48FNJIbyw4b8kB3XcZYyflCJYEHGQX0/eteBl7kBPWjiXL0EI G2ZOkI2NnZl/1JM2/3kLVQG0o+P1MqOW0pZ5m+rsSbhOP5cJYUaLdSW7CgiWDbpd +mTWo9RspAHRrcVIjMiKCvKded8zCxLg+Pwdk3efk+PPzcnzUjYOxi2ZJ9mPDFLB hdp+S5XHJ+CMMgmMHrPTmc5L8b7VFAuo/KbSJerIXciqios4u9rRscNDYiKguIg= =I/Sm -----END PGP SIGNATURE----- From robert.withers at pm.me Wed May 26 17:27:22 2021 From: robert.withers at pm.me (Robert Withers) Date: Wed, 26 May 2021 17:27:22 +0000 Subject: [Vm-dev] #doesNotUnderstand: in BuildSqueakSpurTrunkVMMakerImage.st Message-ID: Hello everyone. I hope you all are well. I am trying to build a VMMaker image to generate plugins for the new ReedSolomon Erasure coding and Error Correction, in Cryptography. I cloned the opensmalltalk-vm and am running ./buildspurtrunkvmmaker64image.sh -vm /usr/local/bin/squeakthe ''. When it gets to building the BuildSqueakSpurTrunkVMMakerImage I receive a DNU regarding external function. I have attached the stack trace. /usr/local/bin/squeak Spur64VMMaker.image BuildSqueakSpurTrunkVMMakerImage.st I appreciate your assistance! -- Kindly, Robert -------------- next part -------------- A non-text attachment was scrubbed... Name: Object-doesNotUnderstand.zip Type: application/zip Size: 652 bytes Desc: not available URL: From eliot.miranda at gmail.com Wed May 26 19:12:24 2021 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed, 26 May 2021 12:12:24 -0700 Subject: [Vm-dev] #doesNotUnderstand: in BuildSqueakSpurTrunkVMMakerImage.st In-Reply-To: References: Message-ID: Hi Rob, can you just paste in the stack trace? The attachment won't open so I can't see anything... On Wed, May 26, 2021 at 10:27 AM Robert Withers wrote: > Hello everyone. I hope you all are well. I am trying to build a VMMaker > image to generate plugins for the new ReedSolomon Erasure coding and > Error Correction, in Cryptography. I cloned the opensmalltalk-vm and am > running ./buildspurtrunkvmmaker64image.sh -vm /usr/local/bin/squeakthe > ''. When it gets to building the BuildSqueakSpurTrunkVMMakerImage I > receive a DNU regarding external function. I have attached the stack trace. > > /usr/local/bin/squeak Spur64VMMaker.image > BuildSqueakSpurTrunkVMMakerImage.st > > I appreciate your assistance! > > -- > Kindly, Robert > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Wed May 26 19:18:00 2021 From: robert.withers at pm.me (Robert Withers) Date: Wed, 26 May 2021 19:18:00 +0000 Subject: [Vm-dev] #doesNotUnderstand: in BuildSqueakSpurTrunkVMMakerImage.st In-Reply-To: References: Message-ID: <1383a85f-7456-db22-e324-e469cb6d48b7@pm.me> Certainly, I apologize for passing an unreadable zip file. I looked at that file out and it is just the top frame DNU, not the full stack. I do not know how to copy the full stack, but here is the location where it DNUs. This comes in the update: FFI-Kernel-mt.173. Is this what you need? Otherwise I will need guidance to provide what you are looking for. Thx, Eliot! externalFunctionDeclaration "Parse the function declaration for a call to an external library. (1) Create an instance of ExternalLibraryFunction and install it as first literal. (2) Add a pragma to primitive call 120. " | descriptorClass callType modifier retType externalName args argType module fn | descriptorClass := cue environment valueOf: #ExternalFunction ifAbsent: [^ false]. callType := descriptorClass callingConventionFor: here. Kindly, Robert On 5/26/21 3:12 PM, Eliot Miranda wrote: > Hi Rob, > > can you just paste in the stack trace? The attachment won't open so I can't see anything... > > On Wed, May 26, 2021 at 10:27 AM Robert Withers wrote: > >> Hello everyone. I hope you all are well. I am trying to build a VMMaker >> image to generate plugins for the new ReedSolomon Erasure coding and >> Error Correction, in Cryptography. I cloned the opensmalltalk-vm and am >> running ./buildspurtrunkvmmaker64image.sh -vm /usr/local/bin/squeakthe >> ''. When it gets to building the BuildSqueakSpurTrunkVMMakerImage I >> receive a DNU regarding external function. I have attached the stack trace. >> >> /usr/local/bin/squeak Spur64VMMaker.image >> BuildSqueakSpurTrunkVMMakerImage.st >> >> I appreciate your assistance! >> >> -- >> Kindly, Robert > > -- > > _,,,^..^,,,_ > best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From boris at shingarov.com Thu May 27 03:33:17 2021 From: boris at shingarov.com (Boris Shingarov) Date: Wed, 26 May 2021 23:33:17 -0400 Subject: [Vm-dev] #doesNotUnderstand: in BuildSqueakSpurTrunkVMMakerImage.st In-Reply-To: <1383a85f-7456-db22-e324-e469cb6d48b7@pm.me> References: <1383a85f-7456-db22-e324-e469cb6d48b7@pm.me> Message-ID: > I looked at that file out and it is just the top frame DNU, not the > full stack. I do not know how to copy the full stack, but here is the > location where it DNUs In the debugger, in the menu (i.e. right-click) of the stack frame list, there is an item called "copy bug report to clipboard". On 5/26/21 3:18 PM, Robert Withers wrote: > > > Certainly, I apologize for passing an unreadable zip file. I looked at > that file out and it is just the top frame DNU, not the full stack. I > do not know how to copy the full stack, but here is the location where > it DNUs. This comes in the update: FFI-Kernel-mt.173. Is this what you > need? Otherwise I will need guidance to provide what you are looking > for. Thx, Eliot! > > externalFunctionDeclaration >     "Parse the function declaration for a call to an external library. > >     (1) Create an instance of ExternalLibraryFunction and install it > as first literal. >     (2) Add a pragma to primitive call 120. >     " >     | descriptorClass callType modifier retType externalName args > argType module fn | >     descriptorClass := cue environment >         valueOf: #ExternalFunction >         ifAbsent: [^ false]. >     callType := *descriptorClass callingConventionFor: here*. > > > Kindly, Robert > On 5/26/21 3:12 PM, Eliot Miranda wrote: >> Hi Rob, >> >>    can you just paste in the stack trace?  The attachment won't open >> so I can't see anything... >> >> On Wed, May 26, 2021 at 10:27 AM Robert Withers > > wrote: >> >>  Hello everyone. I hope you all are well. I am trying to build a >> VMMaker >> image to generate plugins for the new ReedSolomon Erasure coding and >> Error Correction, in Cryptography. I cloned the opensmalltalk-vm >> and am >> running ./buildspurtrunkvmmaker64image.sh -vm >> /usr/local/bin/squeakthe >> ''. When it gets to building the BuildSqueakSpurTrunkVMMakerImage I >> receive a DNU regarding external function. I have attached the >> stack trace. >> >> /usr/local/bin/squeak Spur64VMMaker.image >> BuildSqueakSpurTrunkVMMakerImage.st >> >> I appreciate your assistance! >> >> -- >> Kindly, Robert >> >> >> >> -- >> _,,,^..^,,,_ >> best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From marcel.taeumel at hpi.de Thu May 27 06:52:17 2021 From: marcel.taeumel at hpi.de (Marcel Taeumel) Date: Thu, 27 May 2021 08:52:17 +0200 Subject: [Vm-dev] #doesNotUnderstand: in BuildSqueakSpurTrunkVMMakerImage.st In-Reply-To: References: <1383a85f-7456-db22-e324-e469cb6d48b7@pm.me> Message-ID: Hi all! I will clean this up ASAP. Was too tired yesterday and hit this unexpected loading issue when merging the latest changes for FFI-Kernel and FFI-Callbacks. Sorry for the inconvenience. Best, Marcel Am 27.05.2021 05:33:30 schrieb Boris Shingarov : I looked at that file out and it is just the top frame DNU, not the full stack. I do not know how to copy the full stack, but here is the location where it DNUs In the debugger, in the menu (i.e. right-click) of the stack frame list, there is an item called "copy bug report to clipboard". On 5/26/21 3:18 PM, Robert Withers wrote: cite="mid:1383a85f-7456-db22-e324-e469cb6d48b7 at pm.me"> Certainly, I apologize for passing an unreadable zip file. I looked at that file out and it is just the top frame DNU, not the full stack. I do not know how to copy the full stack, but here is the location where it DNUs. This comes in the update: FFI-Kernel-mt.173. Is this what you need? Otherwise I will need guidance to provide what you are looking for. Thx, Eliot! externalFunctionDeclaration "Parse the function declaration for a call to an external library. (1) Create an instance of ExternalLibraryFunction and install it as first literal. (2) Add a pragma to primitive call 120. " | descriptorClass callType modifier retType externalName args argType module fn | descriptorClass := cue environment valueOf: #ExternalFunction ifAbsent: [^ false]. callType := descriptorClass callingConventionFor: here. Kindly, Robert On 5/26/21 3:12 PM, Eliot Miranda wrote: cite="mid:CAC20JE02jwrU_OOCjzrxdq_+avqPy83z+VZWnpDFrB2w6sZHOw at mail.gmail.com"> Hi Rob, can you just paste in the stack trace? The attachment won't open so I can't see anything... On Wed, May 26, 2021 at 10:27 AM Robert Withers < href="mailto:robert.withers at pm.me" moz-do-not-send="true">robert.withers at pm.me> wrote: Hello everyone. I hope you all are well. I am trying to build a VMMaker image to generate plugins for the new ReedSolomon Erasure coding and Error Correction, in Cryptography. I cloned the opensmalltalk-vm and am running ./buildspurtrunkvmmaker64image.sh -vm /usr/local/bin/squeakthe ''. When it gets to building the BuildSqueakSpurTrunkVMMakerImage I receive a DNU regarding external function. I have attached the stack trace. /usr/local/bin/squeak Spur64VMMaker.image BuildSqueakSpurTrunkVMMakerIma [http://ge.st] target="_blank" moz-do-not-send="true">ge.st I appreciate your assistance! -- Kindly, Robert -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From marcel.taeumel at hpi.de Thu May 27 10:22:45 2021 From: marcel.taeumel at hpi.de (Marcel Taeumel) Date: Thu, 27 May 2021 12:22:45 +0200 Subject: [Vm-dev] #doesNotUnderstand: in BuildSqueakSpurTrunkVMMakerImage.st In-Reply-To: References: <1383a85f-7456-db22-e324-e469cb6d48b7@pm.me> Message-ID: Hi all. FFI should load fine again. :-) Best, Marcel Am 27.05.2021 08:52:17 schrieb Marcel Taeumel : Hi all! I will clean this up ASAP. Was too tired yesterday and hit this unexpected loading issue when merging the latest changes for FFI-Kernel and FFI-Callbacks. Sorry for the inconvenience. Best, Marcel Am 27.05.2021 05:33:30 schrieb Boris Shingarov : I looked at that file out and it is just the top frame DNU, not the full stack. I do not know how to copy the full stack, but here is the location where it DNUs In the debugger, in the menu (i.e. right-click) of the stack frame list, there is an item called "copy bug report to clipboard". On 5/26/21 3:18 PM, Robert Withers wrote: cite="mid:1383a85f-7456-db22-e324-e469cb6d48b7 at pm.me"> Certainly, I apologize for passing an unreadable zip file. I looked at that file out and it is just the top frame DNU, not the full stack. I do not know how to copy the full stack, but here is the location where it DNUs. This comes in the update: FFI-Kernel-mt.173. Is this what you need? Otherwise I will need guidance to provide what you are looking for. Thx, Eliot! externalFunctionDeclaration "Parse the function declaration for a call to an external library. (1) Create an instance of ExternalLibraryFunction and install it as first literal. (2) Add a pragma to primitive call 120. " | descriptorClass callType modifier retType externalName args argType module fn | descriptorClass := cue environment valueOf: #ExternalFunction ifAbsent: [^ false]. callType := descriptorClass callingConventionFor: here. Kindly, Robert On 5/26/21 3:12 PM, Eliot Miranda wrote: cite="mid:CAC20JE02jwrU_OOCjzrxdq_+avqPy83z+VZWnpDFrB2w6sZHOw at mail.gmail.com"> Hi Rob, can you just paste in the stack trace? The attachment won't open so I can't see anything... On Wed, May 26, 2021 at 10:27 AM Robert Withers < href="mailto:robert.withers at pm.me" moz-do-not-send="true">robert.withers at pm.me> wrote: Hello everyone. I hope you all are well. I am trying to build a VMMaker image to generate plugins for the new ReedSolomon Erasure coding and Error Correction, in Cryptography. I cloned the opensmalltalk-vm and am running ./buildspurtrunkvmmaker64image.sh -vm /usr/local/bin/squeakthe ''. When it gets to building the BuildSqueakSpurTrunkVMMakerImage I receive a DNU regarding external function. I have attached the stack trace. /usr/local/bin/squeak Spur64VMMaker.image BuildSqueakSpurTrunkVMMakerIma [http://ge.st] target="_blank" moz-do-not-send="true">ge.st I appreciate your assistance! -- Kindly, Robert -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Thu May 27 11:21:37 2021 From: robert.withers at pm.me (Robert) Date: Thu, 27 May 2021 11:21:37 +0000 Subject: [Vm-dev] #doesNotUnderstand: in BuildSqueakSpurTrunkVMMakerImage.st In-Reply-To: References: <1383a85f-7456-db22-e324-e469cb6d48b7@pm.me> Message-ID: Yep! All is well with this problem. I appreciate your help. No worries! I was able to update the image and load all the VMMaker code. I set the Preferences using the Preference Wizard. I enabled larger fonts so I don’t have to squint any more. Super! I’m getting old. Unfortunately I ran into another walk back when attempting to generate external plugins. I will post a new thread regarding this error. Kindly, Robert . .. ... ‘...^,^ On Thu, May 27, 2021 at 06:22, Marcel Taeumel wrote: > Hi all. > > FFI should load fine again. :-) > > Best, > Marcel > >> Am 27.05.2021 08:52:17 schrieb Marcel Taeumel : >> >> Hi all! >> >> I will clean this up ASAP. Was too tired yesterday and hit this unexpected loading issue when merging the latest changes for FFI-Kernel and FFI-Callbacks. >> >> Sorry for the inconvenience. >> >> Best, >> Marcel >> >>> Am 27.05.2021 05:33:30 schrieb Boris Shingarov : >>> >>>> I looked at that file out and it is just >>>> the top frame DNU, not the full stack. I do not know how to copy >>>> the full stack, but here is the location where it DNUs >>> >>> In the debugger, in the menu (i.e. right-click) of the stack frame >>> list, there is an item called "copy bug report to clipboard". >>> >>> On 5/26/21 3:18 PM, Robert Withers >>> wrote: >>> >>>> >>> >>> cite="mid:1383a85f-7456-db22-e324-e469cb6d48b7 at pm.me"> >>> >>> Certainly, I apologize for passing an unreadable zip file. I >>> looked at that file out and it is just the top frame DNU, not >>> the full stack. I do not know how to copy the full stack, but >>> here is the location where it DNUs. This comes in the update: >>> FFI-Kernel-mt.173. Is this what you need? Otherwise I will need >>> guidance to provide what you are looking for. Thx, Eliot! >>> >>> externalFunctionDeclaration >>> >>> "Parse the function declaration for a call to an external >>> library. >>> >>> (1) Create an instance of ExternalLibraryFunction and >>> install it as first literal. >>> >>> (2) Add a pragma to primitive call 120. >>> >>> " >>> >>> | descriptorClass callType modifier retType externalName >>> args argType module fn | >>> >>> descriptorClass := cue environment >>> >>> valueOf: #ExternalFunction >>> >>> ifAbsent: [^ false]. >>> >>> callType := descriptorClass callingConventionFor: here. >>> >>> Kindly, Robert >>> >>> On 5/26/21 3:12 PM, Eliot Miranda >>> wrote: >>> >>>> >>> >>> cite="mid:CAC20JE02jwrU_OOCjzrxdq_+avqPy83z+VZWnpDFrB2w6sZHOw at mail.gmail.com"> >>> >>> Hi Rob, >>> >>> can you >>> just paste in the stack trace? The attachment won't open so >>> I can't see anything... >>> >>> On Wed, May 26, 2021 at >>> 10:27 AM Robert Withers < >>> href="mailto:robert.withers at pm.me" moz-do-not-send="true">robert.withers at pm.me> >>> wrote: >>> >>>> Hello >>>> everyone. I hope you all are well. I am trying to build a >>>> VMMaker >>>> >>>> image to generate plugins for the new ReedSolomon Erasure >>>> coding and >>>> >>>> Error Correction, in Cryptography. I cloned the >>>> opensmalltalk-vm and am >>>> >>>> running ./buildspurtrunkvmmaker64image.sh -vm >>>> /usr/local/bin/squeakthe >>>> >>>> ''. When it gets to building the >>>> BuildSqueakSpurTrunkVMMakerImage I >>>> >>>> receive a DNU regarding external function. I have attached >>>> the stack trace. >>>> >>>> /usr/local/bin/squeak Spur64VMMaker.image >>>> >>>> BuildSqueakSpurTrunkVMMakerImahttp://ge.st >>>> target="_blank" moz-do-not-send="true">ge.st >>>> >>>> I appreciate your assistance! >>>> >>>> -- >>>> >>>> Kindly, Robert >>> >>> -- >>> >>> _,,,^..^,,,_ >>> >>> best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Thu May 27 11:48:15 2021 From: robert.withers at pm.me (Robert Withers) Date: Thu, 27 May 2021 11:48:15 +0000 Subject: [Vm-dev] walkback while generating external plugins Message-ID: <515017e0-7952-5691-a9a8-e7d98e1bbea4@pm.me> Hi, I am getting a walkback when generating new external plugins: RSErasurePlugin and RSFECPlugin. The culprit seems to be a super call to InterpreterPlugin class>>#declareCVarsIn:, called from RSErasurePlugin class>>declareCVarsIn:. I snipped the stack to pertinent frames. Thx! 27 May 2021 7:44:38.719538 am VM: unix - Smalltalk Image: Squeak6.0alpha [latest update: #20535] SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir /home/rabbit/vm-dev/opensmalltalk-vm/image Trusted Dir /home/rabbit/vm-dev/opensmalltalk-vm/image/secure Untrusted Dir /home/rabbit/vm-dev/opensmalltalk-vm/image/My Squeak ByteSymbol(Object)>>doesNotUnderstand: #removeVariable:ifAbsent:     Receiver: #cg     Arguments and temporary variables:         aMessage:     removeVariable: 'translatedMethodCache' ifAbsent: nil         exception:     MessageNotUnderstood: ByteSymbol>>removeVariable:ifAbsent:         resumeValue:     nil     Receiver's instance variables: #cg RSErasurePlugin class(InterpreterPlugin class)>>declareCVarsIn:     Receiver: RSErasurePlugin     Arguments and temporary variables:         aCCodeGenerator:     #cg     Receiver's instance variables:         superclass:     InterpreterPlugin         methodDict:     a MethodDictionary(#add:by:->(RSErasurePlugin>>#add:by: "a CompiledMethod...etc...         format:     65542         instanceVariables:     #('logTable' 'expTable' 'multiplicationTable')         organization:     ('arithmetic' add:by: divide:by: exp:power: galoisMultiply:by: subtractFrom:by:...etc...         subclasses:     {RSErasurePluginSimulator}         name:     #RSErasurePlugin         classPool:     nil         sharedPools:     nil         environment:     Smalltalk         category:     #CryptographyRSFECPlugin         timeStamp:     3799545237 RSErasurePlugin class>>declareCVarsIn:     Receiver: RSErasurePlugin     Arguments and temporary variables:         cg:     a VMPluginCodeGenerator     Receiver's instance variables:         superclass:     InterpreterPlugin         methodDict:     a MethodDictionary(#add:by:->(RSErasurePlugin>>#add:by: "a CompiledMethod...etc...         format:     65542         instanceVariables:     #('logTable' 'expTable' 'multiplicationTable')         organization:     ('arithmetic' add:by: divide:by: exp:power: galoisMultiply:by: subtractFrom:by:...etc...         subclasses:     {RSErasurePluginSimulator}         name:     #RSErasurePlugin         classPool:     nil         sharedPools:     nil         environment:     Smalltalk         category:     #CryptographyRSFECPlugin         timeStamp:     3799545237 -- --- Kindly, Robert From robert.withers at pm.me Thu May 27 12:40:54 2021 From: robert.withers at pm.me (Robert Withers) Date: Thu, 27 May 2021 12:40:54 +0000 Subject: [Vm-dev] [WORKAROUND] Re: walkback while generating external plugins In-Reply-To: <515017e0-7952-5691-a9a8-e7d98e1bbea4@pm.me> References: <515017e0-7952-5691-a9a8-e7d98e1bbea4@pm.me> Message-ID: I got past this by removing the call to super>>#declareCVarsIn: from RSFECPlugin class>>#declareCVarsIn:, just like DESPlugin & DSAPlugin. SHA2Plugin still calls the super method, which does not walkback. --- Kindly, Robert On 5/27/21 7:48 AM, Robert Withers wrote: > Hi, > > I am getting a walkback when generating new external plugins: > RSErasurePlugin and RSFECPlugin. The culprit seems to be a super call to > InterpreterPlugin class>>#declareCVarsIn:, called from RSErasurePlugin > class>>declareCVarsIn:. I snipped the stack to pertinent frames. Thx! > > 27 May 2021 7:44:38.719538 am > > VM: unix - Smalltalk > Image: Squeak6.0alpha [latest update: #20535] > > SecurityManager state: > Restricted: false > FileAccess: true > SocketAccess: true > Working Dir /home/rabbit/vm-dev/opensmalltalk-vm/image > Trusted Dir /home/rabbit/vm-dev/opensmalltalk-vm/image/secure > Untrusted Dir /home/rabbit/vm-dev/opensmalltalk-vm/image/My Squeak > > ByteSymbol(Object)>>doesNotUnderstand: #removeVariable:ifAbsent: >     Receiver: #cg >     Arguments and temporary variables: >         aMessage:     removeVariable: 'translatedMethodCache' ifAbsent: nil >         exception:     MessageNotUnderstood: > ByteSymbol>>removeVariable:ifAbsent: >         resumeValue:     nil >     Receiver's instance variables: > #cg > > RSErasurePlugin class(InterpreterPlugin class)>>declareCVarsIn: >     Receiver: RSErasurePlugin >     Arguments and temporary variables: >         aCCodeGenerator:     #cg >     Receiver's instance variables: >         superclass:     InterpreterPlugin >         methodDict:     a > MethodDictionary(#add:by:->(RSErasurePlugin>>#add:by: "a > CompiledMethod...etc... >         format:     65542 >         instanceVariables:     #('logTable' 'expTable' > 'multiplicationTable') >         organization:     ('arithmetic' add:by: divide:by: exp:power: > galoisMultiply:by: subtractFrom:by:...etc... >         subclasses:     {RSErasurePluginSimulator} >         name:     #RSErasurePlugin >         classPool:     nil >         sharedPools:     nil >         environment:     Smalltalk >         category:     #CryptographyRSFECPlugin >         timeStamp:     3799545237 > > RSErasurePlugin class>>declareCVarsIn: >     Receiver: RSErasurePlugin >     Arguments and temporary variables: >         cg:     a VMPluginCodeGenerator >     Receiver's instance variables: >         superclass:     InterpreterPlugin >         methodDict:     a > MethodDictionary(#add:by:->(RSErasurePlugin>>#add:by: "a > CompiledMethod...etc... >         format:     65542 >         instanceVariables:     #('logTable' 'expTable' > 'multiplicationTable') >         organization:     ('arithmetic' add:by: divide:by: exp:power: > galoisMultiply:by: subtractFrom:by:...etc... >         subclasses:     {RSErasurePluginSimulator} >         name:     #RSErasurePlugin >         classPool:     nil >         sharedPools:     nil >         environment:     Smalltalk >         category:     #CryptographyRSFECPlugin >         timeStamp:     3799545237 > > -- > --- > Kindly, > Robert > > From leves at caesar.elte.hu Thu May 27 14:24:40 2021 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu, 27 May 2021 16:24:40 +0200 (CEST) Subject: [Vm-dev] [WORKAROUND] Re: walkback while generating external plugins In-Reply-To: References: <515017e0-7952-5691-a9a8-e7d98e1bbea4@pm.me> Message-ID: Hi Robert, According to your stack trace, the argument of #declareCVarsIn: is not a CCodeGenerator but the symbol #cg. And that is what causes the problem. I think you may not be running the right code to generate the plugin sources. Levente On Thu, 27 May 2021, Robert Withers wrote: > > I got past this by removing the call to super>>#declareCVarsIn: from > RSFECPlugin class>>#declareCVarsIn:, just like DESPlugin & DSAPlugin. > SHA2Plugin still calls the super method, which does not walkback. > > --- > Kindly, > Robert > > > On 5/27/21 7:48 AM, Robert Withers wrote: >> Hi, >> >> I am getting a walkback when generating new external plugins: >> RSErasurePlugin and RSFECPlugin. The culprit seems to be a super call to >> InterpreterPlugin class>>#declareCVarsIn:, called from RSErasurePlugin >> class>>declareCVarsIn:. I snipped the stack to pertinent frames. Thx! >> >> 27 May 2021 7:44:38.719538 am >> >> VM: unix - Smalltalk >> Image: Squeak6.0alpha [latest update: #20535] >> >> SecurityManager state: >> Restricted: false >> FileAccess: true >> SocketAccess: true >> Working Dir /home/rabbit/vm-dev/opensmalltalk-vm/image >> Trusted Dir /home/rabbit/vm-dev/opensmalltalk-vm/image/secure >> Untrusted Dir /home/rabbit/vm-dev/opensmalltalk-vm/image/My Squeak >> >> ByteSymbol(Object)>>doesNotUnderstand: #removeVariable:ifAbsent: >>     Receiver: #cg >>     Arguments and temporary variables: >>         aMessage:     removeVariable: 'translatedMethodCache' ifAbsent: nil >>         exception:     MessageNotUnderstood: >> ByteSymbol>>removeVariable:ifAbsent: >>         resumeValue:     nil >>     Receiver's instance variables: >> #cg >> >> RSErasurePlugin class(InterpreterPlugin class)>>declareCVarsIn: >>     Receiver: RSErasurePlugin >>     Arguments and temporary variables: >>         aCCodeGenerator:     #cg >>     Receiver's instance variables: >>         superclass:     InterpreterPlugin >>         methodDict:     a >> MethodDictionary(#add:by:->(RSErasurePlugin>>#add:by: "a >> CompiledMethod...etc... >>         format:     65542 >>         instanceVariables:     #('logTable' 'expTable' >> 'multiplicationTable') >>         organization:     ('arithmetic' add:by: divide:by: exp:power: >> galoisMultiply:by: subtractFrom:by:...etc... >>         subclasses:     {RSErasurePluginSimulator} >>         name:     #RSErasurePlugin >>         classPool:     nil >>         sharedPools:     nil >>         environment:     Smalltalk >>         category:     #CryptographyRSFECPlugin >>         timeStamp:     3799545237 >> >> RSErasurePlugin class>>declareCVarsIn: >>     Receiver: RSErasurePlugin >>     Arguments and temporary variables: >>         cg:     a VMPluginCodeGenerator >>     Receiver's instance variables: >>         superclass:     InterpreterPlugin >>         methodDict:     a >> MethodDictionary(#add:by:->(RSErasurePlugin>>#add:by: "a >> CompiledMethod...etc... >>         format:     65542 >>         instanceVariables:     #('logTable' 'expTable' >> 'multiplicationTable') >>         organization:     ('arithmetic' add:by: divide:by: exp:power: >> galoisMultiply:by: subtractFrom:by:...etc... >>         subclasses:     {RSErasurePluginSimulator} >>         name:     #RSErasurePlugin >>         classPool:     nil >>         sharedPools:     nil >>         environment:     Smalltalk >>         category:     #CryptographyRSFECPlugin >>         timeStamp:     3799545237 >> >> -- >> --- >> Kindly, >> Robert >> >> From robert.withers at pm.me Thu May 27 15:02:13 2021 From: robert.withers at pm.me (Robert Withers) Date: Thu, 27 May 2021 15:02:13 +0000 Subject: [Vm-dev] [WORKAROUND] Re: walkback while generating external plugins In-Reply-To: References: <515017e0-7952-5691-a9a8-e7d98e1bbea4@pm.me> Message-ID: Yep, that was the issue. Plugin now generating. Thanks! Now to realize a plugin implementation..., to speed up my RS code. --- Kindly, Robert On 5/27/21 10:24 AM, Levente Uzonyi wrote: > Hi Robert, > > According to your stack trace, the argument of #declareCVarsIn: is not a > CCodeGenerator but the symbol #cg. And that is what causes the problem. > I think you may not be running the right code to generate the plugin > sources. > > > Levente > > On Thu, 27 May 2021, Robert Withers wrote: > >> I got past this by removing the call to super>>#declareCVarsIn: from >> RSFECPlugin class>>#declareCVarsIn:, just like DESPlugin & DSAPlugin. >> SHA2Plugin still calls the super method, which does not walkback. >> >> --- >> Kindly, >> Robert >> >> >> On 5/27/21 7:48 AM, Robert Withers wrote: >>> Hi, >>> >>> I am getting a walkback when generating new external plugins: >>> RSErasurePlugin and RSFECPlugin. The culprit seems to be a super call to >>> InterpreterPlugin class>>#declareCVarsIn:, called from RSErasurePlugin >>> class>>declareCVarsIn:. I snipped the stack to pertinent frames. Thx! >>> >>> 27 May 2021 7:44:38.719538 am >>> >>> VM: unix - Smalltalk >>> Image: Squeak6.0alpha [latest update: #20535] >>> >>> SecurityManager state: >>> Restricted: false >>> FileAccess: true >>> SocketAccess: true >>> Working Dir /home/rabbit/vm-dev/opensmalltalk-vm/image >>> Trusted Dir /home/rabbit/vm-dev/opensmalltalk-vm/image/secure >>> Untrusted Dir /home/rabbit/vm-dev/opensmalltalk-vm/image/My Squeak >>> >>> ByteSymbol(Object)>>doesNotUnderstand: #removeVariable:ifAbsent: >>>     Receiver: #cg >>>     Arguments and temporary variables: >>>         aMessage:     removeVariable: 'translatedMethodCache' ifAbsent: nil >>>         exception:     MessageNotUnderstood: >>> ByteSymbol>>removeVariable:ifAbsent: >>>         resumeValue:     nil >>>     Receiver's instance variables: >>> #cg >>> >>> RSErasurePlugin class(InterpreterPlugin class)>>declareCVarsIn: >>>     Receiver: RSErasurePlugin >>>     Arguments and temporary variables: >>>         aCCodeGenerator:     #cg >>>     Receiver's instance variables: >>>         superclass:     InterpreterPlugin >>>         methodDict:     a >>> MethodDictionary(#add:by:->(RSErasurePlugin>>#add:by: "a >>> CompiledMethod...etc... >>>         format:     65542 >>>         instanceVariables:     #('logTable' 'expTable' >>> 'multiplicationTable') >>>         organization:     ('arithmetic' add:by: divide:by: exp:power: >>> galoisMultiply:by: subtractFrom:by:...etc... >>>         subclasses:     {RSErasurePluginSimulator} >>>         name:     #RSErasurePlugin >>>         classPool:     nil >>>         sharedPools:     nil >>>         environment:     Smalltalk >>>         category:     #CryptographyRSFECPlugin >>>         timeStamp:     3799545237 >>> >>> RSErasurePlugin class>>declareCVarsIn: >>>     Receiver: RSErasurePlugin >>>     Arguments and temporary variables: >>>         cg:     a VMPluginCodeGenerator >>>     Receiver's instance variables: >>>         superclass:     InterpreterPlugin >>>         methodDict:     a >>> MethodDictionary(#add:by:->(RSErasurePlugin>>#add:by: "a >>> CompiledMethod...etc... >>>         format:     65542 >>>         instanceVariables:     #('logTable' 'expTable' >>> 'multiplicationTable') >>>         organization:     ('arithmetic' add:by: divide:by: exp:power: >>> galoisMultiply:by: subtractFrom:by:...etc... >>>         subclasses:     {RSErasurePluginSimulator} >>>         name:     #RSErasurePlugin >>>         classPool:     nil >>>         sharedPools:     nil >>>         environment:     Smalltalk >>>         category:     #CryptographyRSFECPlugin >>>         timeStamp:     3799545237 >>> >>> -- >>> --- >>> Kindly, >>> Robert >>> >>> From robert.withers at pm.me Thu May 27 16:17:24 2021 From: robert.withers at pm.me (Robert Withers) Date: Thu, 27 May 2021 16:17:24 +0000 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... Message-ID: I am trying to build the vm with RS external plugins I generated. I am getting some pushback: > rabbit at ganymede:~/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build$ ./mvm > clean? y > checking for gcc... clang > checking whether the C compiler works... no > configure: error: in `/home/rabbit/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build': > configure: error: C compiler cannot create executables > See `config.log' for more details How could I resolve this issue? I have the latest gcc, I think: > rabbit at ganymede:~/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build$ gcc --version > gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 I appreciate! -- --- Kindly, Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Thu May 27 16:41:45 2021 From: robert.withers at pm.me (Robert Withers) Date: Thu, 27 May 2021 16:41:45 +0000 Subject: [Vm-dev] Trying to access the wiki. Can someone create an account for me? Message-ID: Or point me to the wiki registration page? Grazie! -- --- Kindly, Robert From commits at source.squeak.org Thu May 27 17:26:48 2021 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 27 May 2021 17:26:48 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2963.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2963.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2963 Author: eem Time: 27 May 2021, 10:26:40.297558 am UUID: efbaae14-a74e-4d2f-a882-21c3b80d3a9f Ancestors: VMMaker.oscog-eem.2962 Get StackInterpreterSimulator respond to input in a timely manner. Eliminate a few gratuitous changes between CogVMSimulator and StackInterpreterSimulator. =============== Diff against VMMaker.oscog-eem.2962 =============== Item was changed: ----- Method: CogVMSimulator>>allObjectsSelect: (in category 'debug support') ----- allObjectsSelect: objBlock "self allObjectsSelect: [:oop | (self baseHeader: oop) = 1234]" | selected | selected := OrderedCollection new. objectMemory allObjectsDoSafely: + [:obj| + (objBlock value: obj) ifTrue: [selected addLast: obj]]. + ^selected! - [:oop| (objBlock value: oop) ifTrue: [selected addLast: oop]]. - ^ selected! Item was changed: ----- Method: CogVMSimulator>>ioUTCMicroseconds (in category 'I/O primitives support') ----- ioUTCMicroseconds "Return the value of the microsecond clock." "NOT. Actually, we want something a lot slower and, for exact debugging, something more repeatable than real time. Dan had an idea: use the byteCount... We increment byteCount in stackLimitFromMachineCode and a real machine can easily run e.g. nfib at 6e7 / second, which this would be 1 usec ~= 60 byteCounts. + Use 100 byteCounts per usec by default; see CogVMSimulator class>>initializeWithOptions:" - Use 10 byteCounts per usec by default; see CogVMSimulator class>>initializeWithOptions:objectMemoryClass:" ^byteCount // ByteCountsPerMicrosecond + startMicroseconds "Dan: At 20k bytecodes per second, this gives us about 200 ticks per second, or about 1/5 of what you'd expect for the real time clock. This should still service events at one or two per second"! Item was changed: ----- Method: CogVMSimulator>>openOn:extraMemory: (in category 'initialize-release') ----- openOn: fileName extraMemory: extraBytes "CogVMSimulator new openOn: 'clone.im' extraMemory: 100000" | f version headerSize dataSize count oldBaseAddr bytesToShift swapBytes headerFlags firstSegSize heapSize hdrNumStackPages hdrEdenBytes hdrMaxExtSemTabSize hdrCogCodeSize stackZoneSize methodCacheSize primTraceLogSize allocationReserve | "open image file and read the header" (f := self openImageFileNamed: fileName) ifNil: [^self]. "Set the image name and the first argument; there are no arguments during simulation unless set explicitly." systemAttributes at: 1 put: fileName. ["begin ensure block..." imageName := f fullName. f binary. version := self getWord32FromFile: f swap: false. "current version: 16r1968 (=6504) vive la revolucion!!" (self readableFormat: version) ifTrue: [swapBytes := false] ifFalse: [(version := version byteSwap32) = self imageFormatVersion ifTrue: [swapBytes := true] ifFalse: [self error: 'incomaptible image format']]. headerSize := self getWord32FromFile: f swap: swapBytes. dataSize := self getLongFromFile: f swap: swapBytes. "length of heap in file" oldBaseAddr := self getLongFromFile: f swap: swapBytes. "object memory base address of image" objectMemory specialObjectsOop: (self getLongFromFile: f swap: swapBytes). objectMemory lastHash: (self getLongFromFile: f swap: swapBytes). "Should be loaded from, and saved to the image header" savedWindowSize := self getLongFromFile: f swap: swapBytes. headerFlags := self getLongFromFile: f swap: swapBytes. self setImageHeaderFlagsFrom: headerFlags. extraVMMemory := self getWord32FromFile: f swap: swapBytes. hdrNumStackPages := self getShortFromFile: f swap: swapBytes. "4 stack pages is small. Should be able to run with as few as three. 4 should be comfortable but slow. 8 is a reasonable default. Can be changed via vmParameterAt: 43 put: n" numStackPages := desiredNumStackPages ~= 0 ifTrue: [desiredNumStackPages] ifFalse: [hdrNumStackPages = 0 ifTrue: [self defaultNumStackPages] ifFalse: [hdrNumStackPages]]. desiredNumStackPages := hdrNumStackPages. stackZoneSize := self computeStackZoneSize. "This slot holds the size of the native method zone in 1k units. (pad to word boundary)." hdrCogCodeSize := (self getShortFromFile: f swap: swapBytes) * 1024. cogCodeSize := desiredCogCodeSize ~= 0 ifTrue: [desiredCogCodeSize] ifFalse: [hdrCogCodeSize = 0 ifTrue: [cogit defaultCogCodeSize] ifFalse: [hdrCogCodeSize]]. desiredCogCodeSize := hdrCogCodeSize. self assert: f position = (objectMemory wordSize = 4 ifTrue: [40] ifFalse: [64]). hdrEdenBytes := self getWord32FromFile: f swap: swapBytes. objectMemory edenBytes: (desiredEdenBytes ~= 0 ifTrue: [desiredEdenBytes] ifFalse: [hdrEdenBytes = 0 ifTrue: [objectMemory defaultEdenBytes] ifFalse: [hdrEdenBytes]]). desiredEdenBytes := hdrEdenBytes. hdrMaxExtSemTabSize := self getShortFromFile: f swap: swapBytes. hdrMaxExtSemTabSize ~= 0 ifTrue: [self setMaxExtSemSizeTo: hdrMaxExtSemTabSize]. "pad to word boundary. This slot can be used for anything else that will fit in 16 bits. Preserve it to be polite to other VMs." the2ndUnknownShort := self getShortFromFile: f swap: swapBytes. self assert: f position = (objectMemory wordSize = 4 ifTrue: [48] ifFalse: [72]). firstSegSize := self getLongFromFile: f swap: swapBytes. objectMemory firstSegmentSize: firstSegSize. "For Open PICs to be able to probe the method cache during simulation the methodCache must be relocated to memory." methodCacheSize := methodCache size * objectMemory wordSize. primTraceLogSize := primTraceLog size * objectMemory wordSize. "To cope with modern OSs that disallow executing code in writable memory we dual-map the code zone, one mapping with read/write permissions and the other with read/execute permissions. In simulation all we can do is use memory, so if we're simulating dual mapping we use double the memory and simulate the memory sharing in the Cogit's backEnd." effectiveCogCodeSize := (InitializationOptions at: #DUAL_MAPPED_CODE_ZONE ifAbsent: [false]) ifTrue: [cogCodeSize * 2] ifFalse: [cogCodeSize]. "allocate interpreter memory. This list is in address order, low to high. In the actual VM the stack zone exists on the C stack." heapBase := (Cogit guardPageSize + effectiveCogCodeSize + stackZoneSize + methodCacheSize + primTraceLogSize + self rumpCStackSize) roundUpTo: objectMemory allocationUnit. "compare memory requirements with availability" allocationReserve := self interpreterAllocationReserveBytes. objectMemory hasSpurMemoryManagerAPI ifTrue: [| freeOldSpaceInImage headroom | freeOldSpaceInImage := self getLongFromFile: f swap: swapBytes. headroom := objectMemory initialHeadroom: extraVMMemory givenFreeOldSpaceInImage: freeOldSpaceInImage. heapSize := objectMemory roundUpHeapSize: dataSize + headroom + objectMemory newSpaceBytes + (headroom > allocationReserve ifTrue: [0] ifFalse: [allocationReserve])] ifFalse: [heapSize := dataSize + extraBytes + objectMemory newSpaceBytes + (extraBytes > allocationReserve ifTrue: [0] ifFalse: [allocationReserve])]. + "allocate interpreter memory" + heapBase := objectMemory startOfMemory. + objectMemory + setHeapBase: heapBase + memoryLimit: heapBase + heapSize + endOfMemory: heapBase + dataSize. "bogus for Spur" - heapBase := objectMemory - setHeapBase: heapBase - memoryLimit: heapBase + heapSize - endOfMemory: heapBase + dataSize. self assert: cogCodeSize \\ 4 = 0. self assert: objectMemory memoryLimit \\ 4 = 0. self assert: self rumpCStackSize \\ 4 = 0. objectMemory allocateMemoryOfSize: objectMemory memoryLimit. "read in the image in bulk, then swap the bytes if necessary" f position: headerSize. count := objectMemory readHeapFromImageFile: f dataBytes: dataSize. count ~= dataSize ifTrue: [self halt]] ensure: [f close]. self moveMethodCacheToMemoryAt: objectMemory cogCodeBase + effectiveCogCodeSize + stackZoneSize. self movePrimTraceLogToMemoryAt: objectMemory cogCodeBase + effectiveCogCodeSize + stackZoneSize + methodCacheSize. self ensureImageFormatIsUpToDate: swapBytes. bytesToShift := objectMemory memoryBaseForImageRead - oldBaseAddr. "adjust pointers for zero base address" UIManager default informUser: 'Relocating object pointers...' during: [self initializeInterpreter: bytesToShift]. self initializeCodeGenerator! 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' + classVariableNames: 'ByteCountsPerMicrosecond' - 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 added: + ----- Method: StackInterpreterSimulator class>>initializeWithOptions: (in category 'class initialization') ----- + initializeWithOptions: optionsDictionary + super initializeWithOptions: optionsDictionary. + + ByteCountsPerMicrosecond := InitializationOptions + at: #ByteCountsPerMicrosecond + ifAbsent: [50]! Item was changed: ----- Method: StackInterpreterSimulator>>incrementByteCount (in category 'interpreter shell') ----- incrementByteCount (byteCount := byteCount + 1) = breakCount ifTrue: + [self doOrDefer: [self changed: #byteCountText; changed: #composeAll]. - [self doOrDefer: [self changed: #byteCountText]. self halt: 'breakCount reached']. byteCount \\ 1000 = 0 ifTrue: + [self doOrDefer: [self changed: #byteCountText; changed: #composeAll]. - [self doOrDefer: [self changed: #byteCountText]. self forceInterruptCheck]! 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." Display reverse: ((displayView ifNil: [0 at 0] ifNotNil: [displayView bounds origin]) extent: 16 at 16). 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). - byteCount := byteCount + (1000 * 50). self primitiveFail] ifFalse: [microseconds >= 1000 ifTrue: [stackLimit = self allOnesAsCharStar ifFalse: + [(Delay forMilliseconds: microseconds + 999 // 1000) wait. + self forceInterruptCheck]] - [(Delay forMilliseconds: microseconds + 999 // 1000) wait]] ifFalse: [Processor yield]]. "And increase the byteCount form which the microsecond clock is derived..." + byteCount := byteCount + (microseconds * ByteCountsPerMicrosecond) - 1. - byteCount := byteCount + microseconds - 1. self incrementByteCount! Item was changed: ----- Method: StackInterpreterSimulator>>ioUTCMicroseconds (in category 'I/O primitives support') ----- ioUTCMicroseconds "Return the value of the microsecond clock." "NOT. Actually, we want something a lot slower and, for exact debugging, + something more repeatable than real time. Dan had an idea: use the byteCount... + Use 50 byteCounts per usec by default; see StackInterpreterSimulator class>>initializeWithOptions:" - something more repeatable than real time. Dan had an idea: use the byteCount..." + ^byteCount // ByteCountsPerMicrosecond + startMicroseconds + + "Dan: + At 20k bytecodes per second, this gives us about 200 ticks per second, or about 1/5 + of what you'd expect for the real time clock. This should still service events at one or + two per second"! - ^(byteCount // 50) + startMicroseconds! Item was changed: ----- Method: StackInterpreterSimulator>>openOn:extraMemory: (in category 'initialize-release') ----- openOn: fileName extraMemory: extraBytes "StackInterpreterSimulator new openOn: 'clone.im' extraMemory: 100000" | f version headerSize dataSize count oldBaseAddr bytesToShift swapBytes headerFlags heapBase firstSegSize heapSize hdrNumStackPages hdrEdenBytes hdrMaxExtSemTabSize allocationReserve | "open image file and read the header" (f := self openImageFileNamed: fileName) ifNil: [^self]. "Set the image name and the first argument; there are no arguments during simulation unless set explicitly." systemAttributes at: 1 put: fileName. ["begin ensure block..." imageName := f fullName. f binary. version := self getWord32FromFile: f swap: false. "current version: 16r1968 (=6504) vive la revolucion!!" (self readableFormat: version) ifTrue: [swapBytes := false] + ifFalse: [(version := version byteSwap32) = self imageFormatVersion - ifFalse: [(version := objectMemory byteSwapped: version) = self imageFormatVersion ifTrue: [swapBytes := true] ifFalse: [self error: 'incomaptible image format']]. headerSize := self getWord32FromFile: f swap: swapBytes. dataSize := self getLongFromFile: f swap: swapBytes. "length of heap in file" oldBaseAddr := self getLongFromFile: f swap: swapBytes. "object memory base address of image" objectMemory specialObjectsOop: (self getLongFromFile: f swap: swapBytes). objectMemory lastHash: (self getLongFromFile: f swap: swapBytes). "Should be loaded from, and saved to the image header" savedWindowSize := self getLongFromFile: f swap: swapBytes. headerFlags := self getLongFromFile: f swap: swapBytes. self setImageHeaderFlagsFrom: headerFlags. extraVMMemory := self getWord32FromFile: f swap: swapBytes. hdrNumStackPages := self getShortFromFile: f swap: swapBytes. "4 stack pages is small. Should be able to run with as few as three. 4 should be comfortable but slow. 8 is a reasonable default. Can be changed via vmParameterAt: 43 put: n" numStackPages := desiredNumStackPages ~= 0 ifTrue: [desiredNumStackPages] ifFalse: [hdrNumStackPages = 0 ifTrue: [self defaultNumStackPages] ifFalse: [hdrNumStackPages]]. desiredNumStackPages := hdrNumStackPages. "pad to word boundary. This slot can be used for anything else that will fit in 16 bits. It is used for the cog code size in Cog. Preserve it to be polite to other VMs." theUnknownShort := self getShortFromFile: f swap: swapBytes. self assert: f position = (objectMemory wordSize = 4 ifTrue: [40] ifFalse: [64]). hdrEdenBytes := self getWord32FromFile: f swap: swapBytes. objectMemory edenBytes: (hdrEdenBytes = 0 ifTrue: [objectMemory defaultEdenBytes] ifFalse: [hdrEdenBytes]). desiredEdenBytes := hdrEdenBytes. hdrMaxExtSemTabSize := self getShortFromFile: f swap: swapBytes. hdrMaxExtSemTabSize ~= 0 ifTrue: [self setMaxExtSemSizeTo: hdrMaxExtSemTabSize]. "pad to word boundary. This slot can be used for anything else that will fit in 16 bits. Preserve it to be polite to other VMs." the2ndUnknownShort := self getShortFromFile: f swap: swapBytes. self assert: f position = (objectMemory wordSize = 4 ifTrue: [48] ifFalse: [72]). firstSegSize := self getLongFromFile: f swap: swapBytes. objectMemory firstSegmentSize: firstSegSize. "compare memory requirements with availability" allocationReserve := self interpreterAllocationReserveBytes. objectMemory hasSpurMemoryManagerAPI ifTrue: [| freeOldSpaceInImage headroom | freeOldSpaceInImage := self getLongFromFile: f swap: swapBytes. headroom := objectMemory initialHeadroom: extraVMMemory givenFreeOldSpaceInImage: freeOldSpaceInImage. heapSize := objectMemory roundUpHeapSize: dataSize + headroom + objectMemory newSpaceBytes + (headroom > allocationReserve ifTrue: [0] ifFalse: [allocationReserve])] ifFalse: [heapSize := dataSize + extraBytes + objectMemory newSpaceBytes + (extraBytes > allocationReserve ifTrue: [0] ifFalse: [allocationReserve])]. "allocate interpreter memory" heapBase := objectMemory startOfMemory. objectMemory setHeapBase: heapBase memoryLimit: heapBase + heapSize endOfMemory: heapBase + dataSize. "bogus for Spur" objectMemory allocateMemoryOfSize: objectMemory memoryLimit. "read in the image in bulk, then swap the bytes if necessary" f position: headerSize. count := objectMemory readHeapFromImageFile: f dataBytes: dataSize. count ~= dataSize ifTrue: [self halt]] ensure: [f close]. self ensureImageFormatIsUpToDate: swapBytes. bytesToShift := objectMemory memoryBaseForImageRead - oldBaseAddr. "adjust pointers for zero base address" UIManager default informUser: 'Relocating object pointers...' during: [self initializeInterpreter: bytesToShift]! Item was changed: ----- Method: StackInterpreterSimulator>>parent (in category 'accessing') ----- parent - ^ parent! From leves at caesar.elte.hu Thu May 27 18:04:41 2021 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu, 27 May 2021 20:04:41 +0200 (CEST) Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: References: Message-ID: The VM uses clang instead of gcc. So, you need to install clang. Levente From commits at source.squeak.org Thu May 27 18:05:22 2021 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 27 May 2021 18:05:22 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2964.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2964.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2964 Author: eem Time: 27 May 2021, 11:05:14.535182 am UUID: ba494336-b0c6-40f4-a0ed-be2b024f274d Ancestors: VMMaker.oscog-eem.2963 Fix a slip in primitiveSetOrHasIdentityHash (a primitive fail didn't return) & a speeling rorre. =============== Diff against VMMaker.oscog-eem.2963 =============== Item was changed: ----- Method: InterpreterPrimitives>>primitiveSetOrHasIdentityHash (in category 'object access primitives') ----- primitiveSetOrHasIdentityHash | hash oldHash thisReceiver isReceiverAClass | argumentCount = 0 ifTrue: [| hasHash | hasHash := (objectMemory isNonImmediate: self stackTop) and: [objectMemory hasIdentityHash: self stackTop]. + self pop: 1 thenPushBool: hasHash. - self pop: argumentCount + 1 thenPushBool: hasHash. ^self]. argumentCount = 2 ifTrue: [isReceiverAClass := self booleanValueOf: self stackTop. + self successful ifFalse: + [^self primitiveFailFor: PrimErrBadArgument]] - self successful ifFalse: [self primitiveFailFor: PrimErrBadArgument] ] ifFalse: [isReceiverAClass := false]. hash := self stackIntegerValue: argumentCount - 1. thisReceiver := self stackObjectValue: argumentCount. self successful ifTrue: [oldHash := objectMemory hashBitsOf: thisReceiver. objectMemory setHashBitsOf: thisReceiver to: hash. + (isReceiverAClass and: [objectMemory hasSpurMemoryManagerAPI]) ifTrue: + [objectMemory classAtIndex: hash put: thisReceiver. + "this figures out if the index is ambiguous and fixes all the instances if needed" + objectMemory allInstancesOf: thisReceiver]. + self methodReturnInteger: oldHash]! - (isReceiverAClass and: [objectMemory hasSpurMemoryManagerAPI]) ifTrue: - [objectMemory classAtIndex: hash put: thisReceiver. - "next line figures out if the index is anbiguous and fix all the instances if needed" - objectMemory allInstancesOf: thisReceiver]. - self pop: argumentCount + 1 thenPushInteger: oldHash]! From robert.withers at pm.me Thu May 27 18:12:37 2021 From: robert.withers at pm.me (Robert Withers) Date: Thu, 27 May 2021 18:12:37 +0000 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: References: Message-ID: <4b726529-a048-f9a7-e083-19f40a054646@pm.me> Awesome, let me try it! --- Kindly, Robert On 5/27/21 2:04 PM, Levente Uzonyi wrote: > The VM uses clang instead of gcc. So, you need to install clang. > > > Levente From Das.Linux at gmx.de Thu May 27 18:12:46 2021 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu, 27 May 2021 20:12:46 +0200 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: References: Message-ID: <0FE7E203-8941-42E9-A0C6-FD6303779F6E@gmx.de> Also, try the https://github.com/OpenSmalltalk/opensmalltalk-vm/tree/fix_include_order branch for the time being. Best regards -tobias > On 27. May 2021, at 20:04, Levente Uzonyi wrote: > > The VM uses clang instead of gcc. So, you need to install clang. > > > Levente From robert.withers at pm.me Thu May 27 18:34:02 2021 From: robert.withers at pm.me (Robert Withers) Date: Thu, 27 May 2021 18:34:02 +0000 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: <0FE7E203-8941-42E9-A0C6-FD6303779F6E@gmx.de> References: <0FE7E203-8941-42E9-A0C6-FD6303779F6E@gmx.de> Message-ID: <4e7f71a6-8a62-8b69-3c62-022e45b633e5@pm.me> I tried and got a conflicts error. Unsure how to proceed. rabbit at ganymede:~/vm-dev/opensmalltalk-vm$ git pull origin fix_include_order From https://github.com/OpenSmalltalk/opensmalltalk-vm * branch fix_include_order -> FETCH_HEAD Auto-merging stacksrc/vm/interp.c CONFLICT (content): Merge conflict in stacksrc/vm/interp.c ... Auto-merging spur64src/vm/cointerp.c CONFLICT (content): Merge conflict in spur64src/vm/cointerp.c Automatic merge failed; fix conflicts and then commit the result. --- Kindly, Robert On 5/27/21 2:12 PM, Tobias Pape wrote: > Also, try the > https://github.com/OpenSmalltalk/opensmalltalk-vm/tree/fix_include_order > branch for the time being. > > Best regards > -tobias > >> On 27. May 2021, at 20:04, Levente Uzonyi >> [](mailto:leves at caesar.elte.hu) >> wrote: >> >> The VM uses clang instead of gcc. So, you need to install clang. >> >> Levente -------------- next part -------------- An HTML attachment was scrubbed... URL: From Das.Linux at gmx.de Thu May 27 18:43:22 2021 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu, 27 May 2021 20:43:22 +0200 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: <4e7f71a6-8a62-8b69-3c62-022e45b633e5@pm.me> References: <0FE7E203-8941-42E9-A0C6-FD6303779F6E@gmx.de> <4e7f71a6-8a62-8b69-3c62-022e45b633e5@pm.me> Message-ID: <9722405E-D651-4AA8-833E-75BFE0D0F156@gmx.de> Hi > On 27. May 2021, at 20:34, Robert Withers wrote: > > I tried and got a conflicts error. Unsure how to proceed. > rabbit at ganymede:~/vm-dev/opensmalltalk-vm$ git pull origin fix_include_order > From https://github.com/OpenSmalltalk/opensmalltalk-vm > * branch fix_include_order -> FETCH_HEAD > Auto-merging stacksrc/vm/interp.c > CONFLICT (content): Merge conflict in stacksrc/vm/interp.c > ... > Auto-merging spur64src/vm/cointerp.c > CONFLICT (content): Merge conflict in spur64src/vm/cointerp.c > Automatic merge failed; fix conflicts and then commit the result. Darn, that branch has to be updated -.- Nicolas might have an idea tho… Best regards -tobias > --- > Kindly, > Robert > > > On 5/27/21 2:12 PM, Tobias Pape wrote: >> Also, try the >> >> https://github.com/OpenSmalltalk/opensmalltalk-vm/tree/fix_include_order >> >> branch for the time being. >> >> Best regards >> -tobias >> >> >>> On 27. May 2021, at 20:04, Levente Uzonyi >>> wrote: >>> >>> The VM uses clang instead of gcc. So, you need to install clang. >>> >>> >>> Levente >>> >> From ron at usmedrec.com Thu May 27 18:55:19 2021 From: ron at usmedrec.com (Ron Teitelbaum) Date: Thu, 27 May 2021 14:55:19 -0400 Subject: [Vm-dev] Trying to access the wiki. Can someone create an account for me? In-Reply-To: References: Message-ID: Sent privately. Ron On Thu, May 27, 2021 at 12:41 PM Robert Withers wrote: > > Or point me to the wiki registration page? Grazie! > > -- > --- > Kindly, > Robert > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From eliot.miranda at gmail.com Thu May 27 22:19:19 2021 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu, 27 May 2021 15:19:19 -0700 Subject: [Vm-dev] 16-bit SoundBuffer Message-ID: Hi All, I'm looking for debugging help as I don't have time to look at this. Here's a change set that renames SoundBuffer to OldSOundBuffer and introduces an equivalent replacement that uses the native 16-bit format Spur supports, and hence provides faster access via jitted at: & at:put: primitives. Things seem to work except the one sound test that fails in writing the data to a file. If you have time or energy please take a look. AdvThanksance _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: 16BitSoundBuffer.st Type: application/octet-stream Size: 15346 bytes Desc: not available URL: From robert.withers at pm.me Fri May 28 00:17:20 2021 From: robert.withers at pm.me (Robert Withers) Date: Fri, 28 May 2021 00:17:20 +0000 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: <9722405E-D651-4AA8-833E-75BFE0D0F156@gmx.de> References: <0FE7E203-8941-42E9-A0C6-FD6303779F6E@gmx.de> <4e7f71a6-8a62-8b69-3c62-022e45b633e5@pm.me> <9722405E-D651-4AA8-833E-75BFE0D0F156@gmx.de> Message-ID: <2ea6c0a8-d6db-317a-0e2b-30e2e3dfe5de@pm.me> On 5/27/21 2:43 PM, Tobias Pape wrote: > Darn, that branch has to be updated -.- > Nicolas might have an idea tho… Hi Tobias, Alright, I will wait for your update, then. --- Kindly, Robert From commits at source.squeak.org Fri May 28 03:19:49 2021 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 28 May 2021 03:19:49 0000 Subject: [Vm-dev] VM Maker: VMMaker.oscog-eem.2965.mcz Message-ID: Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2965.mcz ==================== Summary ==================== Name: VMMaker.oscog-eem.2965 Author: eem Time: 27 May 2021, 8:19:40.639111 pm UUID: 1856cb21-d33c-4bb0-a610-2379ae8ffa4f Ancestors: VMMaker.oscog-eem.2964 Make stSizeOf: easier to optimize. Correct the comment for SpurMemoryManager>>slotSizeOf:. =============== Diff against VMMaker.oscog-eem.2964 =============== Item was changed: ----- Method: SpurMemoryManager>>slotSizeOf: (in category 'object access') ----- slotSizeOf: oop "*DO NOT CONFUSE THIS WITH numSlotsOf:. This is an ObjectMemory compatibility method with questionable semantics. Answers the number of slots in the receiver. If the receiver is a byte object, return the number of bytes. + If the receiver is a short object, return the number of shorts. + If the receiver is a word object, return the number of words. + If the receiver is a double word object, return the number of double words. + Otherwise return the number of pointers." - Otherwise return the number of words." (self isImmediate: oop) ifTrue: [^0]. ^self lengthOf: oop! Item was changed: ----- Method: StackInterpreter>>stSizeOf: (in category 'indexing primitive support') ----- stSizeOf: oop + "Answer the number of indexable fields in the given object. (i.e., what Smalltalk would return for size)." + "Note: Assume oop is not an immediate!!" - "Return the number of indexable fields in the given object. (i.e., what Smalltalk would return for size)." - "Note: Assume oop is not a SmallInteger!!" | hdr fmt totalLength fixedFields | hdr := objectMemory baseHeader: oop. fmt := objectMemory formatOfHeader: hdr. totalLength := objectMemory lengthOf: oop baseHeader: hdr format: fmt. + (objectMemory isPureBitsFormat: fmt) ifTrue: + [^totalLength]. fixedFields := objectMemory fixedFieldsOf: oop format: fmt length: totalLength. fmt = objectMemory indexablePointersFormat ifTrue: [self assert: (objectMemory isContextHeader: hdr) not]. ^totalLength - fixedFields! From bruce.oneel at pckswarms.ch Fri May 28 05:55:51 2021 From: bruce.oneel at pckswarms.ch (Bruce O'Neel) Date: Fri, 28 May 2021 07:55:51 +0200 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: References: Message-ID: <2963fd8f56fa5ea32bdbc899959eb1f6@mail.infomaniak.com> Hi, Or edit the clang to cc in mvm. cheers bruce TARGET_ARCH="-m64" \ CC=clang \ CFLAGS="$CFLAGS" \ On 2021-05-27T20:04:41.000+02:00, Levente Uzonyi wrote: > The VM uses clang instead of gcc. So, you need to install clang. >  > Levente -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Fri May 28 17:12:13 2021 From: tim at rowledge.org (tim Rowledge) Date: Fri, 28 May 2021 10:12:13 -0700 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: <2963fd8f56fa5ea32bdbc899959eb1f6@mail.infomaniak.com> References: <2963fd8f56fa5ea32bdbc899959eb1f6@mail.infomaniak.com> Message-ID: <8D7E4900-D0BF-4164-9DF9-C525C1FC52D6@rowledge.org> > On 2021-05-27, at 10:55 PM, Bruce O'Neel wrote: > > Hi, > > Or edit the clang to cc in mvm. > > cheers > bruce > > TARGET_ARCH="-m64" \ > > CC=clang \ > > CFLAGS="$CFLAGS" \ +1 for this. If we expect a tool it is helpful to make it obvious that we need the tool, rather than obscuring the need tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Estne volumen in toga, an solum tibi libet me videre? = Is that a scroll in your toga, or are you just happy to see me? From robert.withers at pm.me Fri May 28 20:43:40 2021 From: robert.withers at pm.me (Robert Withers) Date: Fri, 28 May 2021 20:43:40 +0000 Subject: [Vm-dev] My post to stackexchange's code review site [1]. Message-ID: <76f6d1ed-cd1e-0d23-1cc5-2dcf005e93a7@pm.me> A little outreach...I am referencing a CCodeGenerator, is it so? Any suggestions to clean it up, please let me know! Eliot, I mention Spur, Cog and Sista. How could I be more accurate in my descriptions of their roles? [1] [Squeak code for performant ReedSolomon error correction](https://codereview.stackexchange.com/questions/261315/squeak-code-for-performant-reedsolomon-error-correction) - https://codereview.stackexchange.com/questions/261315/squeak-code-for-performant-reedsolomon-error-correction -- --- Kindly, Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Fri May 28 21:37:22 2021 From: robert.withers at pm.me (Robert) Date: Fri, 28 May 2021 21:37:22 +0000 Subject: [Vm-dev] A group for Squeakers on clubhouse Message-ID: Join up & join me! https://www.clubhouse.com/join/squeakers/YPbUWqn2 Kindly, Robert . .. ... ‘...^,^ -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Sat May 29 15:20:32 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 15:20:32 +0000 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: <9722405E-D651-4AA8-833E-75BFE0D0F156@gmx.de> References: <0FE7E203-8941-42E9-A0C6-FD6303779F6E@gmx.de> <4e7f71a6-8a62-8b69-3c62-022e45b633e5@pm.me> <9722405E-D651-4AA8-833E-75BFE0D0F156@gmx.de> Message-ID: <9e7ddf7f-61e7-8373-5515-7f0907ef6679@pm.me> Hi Tobias, Any progress on updating the fix_include_order branch? I have poked around with git and my local repo is all messed up with conflicts. I do not know how to dump all those merge attempts and be back at the HEAD of Cog. But also, you stated I need the fix_include_order branch to build on Linux. I want to build my plugins and test them! --- Kindly, Robert On 5/27/21 2:43 PM, Tobias Pape wrote: > Hi > > >> On 27. May 2021, at 20:34, Robert Withers wrote: >> >> I tried and got a conflicts error. Unsure how to proceed. >> rabbit at ganymede:~/vm-dev/opensmalltalk-vm$ git pull origin fix_include_order >> From https://github.com/OpenSmalltalk/opensmalltalk-vm >> * branch fix_include_order -> FETCH_HEAD >> Auto-merging stacksrc/vm/interp.c >> CONFLICT (content): Merge conflict in stacksrc/vm/interp.c >> ... >> Auto-merging spur64src/vm/cointerp.c >> CONFLICT (content): Merge conflict in spur64src/vm/cointerp.c >> Automatic merge failed; fix conflicts and then commit the result. > Darn, that branch has to be updated -.- > Nicolas might have an idea tho… > > Best regards > -tobias > > >> --- >> Kindly, >> Robert >> >> >> On 5/27/21 2:12 PM, Tobias Pape wrote: >>> Also, try the >>> >>> https://github.com/OpenSmalltalk/opensmalltalk-vm/tree/fix_include_order >>> >>> branch for the time being. >>> >>> Best regards >>> -tobias >>> >>> >>>> On 27. May 2021, at 20:04, Levente Uzonyi >>>> wrote: >>>> >>>> The VM uses clang instead of gcc. So, you need to install clang. >>>> >>>> >>>> Levente >>>> > From Das.Linux at gmx.de Sat May 29 15:23:38 2021 From: Das.Linux at gmx.de (Tobias Pape) Date: Sat, 29 May 2021 17:23:38 +0200 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: <9e7ddf7f-61e7-8373-5515-7f0907ef6679@pm.me> References: <0FE7E203-8941-42E9-A0C6-FD6303779F6E@gmx.de> <4e7f71a6-8a62-8b69-3c62-022e45b633e5@pm.me> <9722405E-D651-4AA8-833E-75BFE0D0F156@gmx.de> <9e7ddf7f-61e7-8373-5515-7f0907ef6679@pm.me> Message-ID: > On 29. May 2021, at 17:20, Robert Withers wrote: > > Hi Tobias, > > Any progress on updating the fix_include_order branch? I have poked > around with git and my local repo is all messed up with conflicts. I do > not know how to dump all those merge attempts and be back at the HEAD of > Cog. But also, you stated I need the fix_include_order branch to build > on Linux. I want to build my plugins and test them! > Sorry, nothing much I can do :( -t > --- > Kindly, > Robert > > > On 5/27/21 2:43 PM, Tobias Pape wrote: >> Hi >> >> >>> On 27. May 2021, at 20:34, Robert Withers wrote: >>> >>> I tried and got a conflicts error. Unsure how to proceed. >>> rabbit at ganymede:~/vm-dev/opensmalltalk-vm$ git pull origin fix_include_order >>> From https://github.com/OpenSmalltalk/opensmalltalk-vm >>> * branch fix_include_order -> FETCH_HEAD >>> Auto-merging stacksrc/vm/interp.c >>> CONFLICT (content): Merge conflict in stacksrc/vm/interp.c >>> ... >>> Auto-merging spur64src/vm/cointerp.c >>> CONFLICT (content): Merge conflict in spur64src/vm/cointerp.c >>> Automatic merge failed; fix conflicts and then commit the result. >> Darn, that branch has to be updated -.- >> Nicolas might have an idea tho… >> >> Best regards >> -tobias >> >> >>> --- >>> Kindly, >>> Robert >>> >>> >>> On 5/27/21 2:12 PM, Tobias Pape wrote: >>>> Also, try the >>>> >>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/tree/fix_include_order >>>> >>>> branch for the time being. >>>> >>>> Best regards >>>> -tobias >>>> >>>> >>>>> On 27. May 2021, at 20:04, Levente Uzonyi >>>>> wrote: >>>>> >>>>> The VM uses clang instead of gcc. So, you need to install clang. >>>>> >>>>> >>>>> Levente >>>>> >> > From robert.withers at pm.me Sat May 29 16:13:07 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 16:13:07 +0000 Subject: [Vm-dev] Issues: Trying to build the RS vm with the mvm script... In-Reply-To: References: <0FE7E203-8941-42E9-A0C6-FD6303779F6E@gmx.de> <4e7f71a6-8a62-8b69-3c62-022e45b633e5@pm.me> <9722405E-D651-4AA8-833E-75BFE0D0F156@gmx.de> <9e7ddf7f-61e7-8373-5515-7f0907ef6679@pm.me> Message-ID: <69d3f836-b7f4-ce53-07d1-b6b2e341207c@pm.me> Alright, I was able to move forwards. I removed the opensmalltalk-vm tree with the Cog branch and then cloned the repo again with the fix_include_order branch specified: > rabbit at ganymede:~/vm-dev$ git clone -b fix_include_order https://github.com/OpenSmalltalk/opensmalltalk-vm.git I was able to compile RSErasurePlugin, reporting with many errors. I will start a new thread, on these issues. --- Kindly, Robert On 5/29/21 11:23 AM, Tobias Pape wrote: >> On 29. May 2021, at 17:20, Robert Withers >> [](mailto:robert.withers at pm.me) >> wrote: >> >> Hi Tobias, >> >> Any progress on updating the fix_include_order branch? I have poked >> around with git and my local repo is all messed up with conflicts. I do >> not know how to dump all those merge attempts and be back at the HEAD of >> Cog. But also, you stated I need the fix_include_order branch to build >> on Linux. I want to build my plugins and test them! > > Sorry, nothing much I can do :( > -t > >> --- >> Kindly, >> Robert >> >> On 5/27/21 2:43 PM, Tobias Pape wrote: >> >>> Hi >>> >>>> On 27. May 2021, at 20:34, Robert Withers >>>> [](mailto:robert.withers at pm.me) >>>> wrote: >>>> >>>> I tried and got a conflicts error. Unsure how to proceed. >>>> rabbit at ganymede:~/vm-dev/opensmalltalk-vm$ git pull origin fix_include_order >>>> From >>>> https://github.com/OpenSmalltalk/opensmalltalk-vm >>>> * branch fix_include_order -> FETCH_HEAD >>>> Auto-merging stacksrc/vm/interp.c >>>> CONFLICT (content): Merge conflict in stacksrc/vm/interp.c >>>> ... >>>> Auto-merging spur64src/vm/cointerp.c >>>> CONFLICT (content): Merge conflict in spur64src/vm/cointerp.c >>>> Automatic merge failed; fix conflicts and then commit the result. >>> >>> Darn, that branch has to be updated -.- >>> Nicolas might have an idea tho… >>> >>> Best regards >>> -tobias >>> >>>> --- >>>> Kindly, >>>> Robert >>>> >>>> On 5/27/21 2:12 PM, Tobias Pape wrote: >>>> >>>>> Also, try the >>>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/tree/fix_include_order >>>>> branch for the time being. >>>>> >>>>> Best regards >>>>> -tobias >>>>> >>>>>> On 27. May 2021, at 20:04, Levente Uzonyi >>>>>> [](mailto:leves at caesar.elte.hu) >>>>>> wrote: >>>>>> >>>>>> The VM uses clang instead of gcc. So, you need to install clang. >>>>>> >>>>>> Levente -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Sat May 29 16:15:48 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 16:15:48 +0000 Subject: [Vm-dev] Many errors compiling RSErasurePlugin.c Message-ID: Some of the initial errors have to do with the static declarations of logTable and expTable. Here is the output... > libtool: compile: clang -Wall -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2 -DCOGMTVM=0 -pthread -DLSB_FIRST=1 -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -DHAVE_CONFIG_H -I/home/rabbit/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build -I/home/rabbit/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build -I/home/rabbit/vm-dev/opensmalltalk-vm/platforms/unix/vm -I/home/rabbit/vm-dev/opensmalltalk-vm/platforms/Cross/vm -I/home/rabbit/vm-dev/opensmalltalk-vm/spur64src/vm -I/usr/local/include -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -c /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c -fPIC -DPIC -o .libs/RSErasurePlugin.o > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:44:15: error: static declaration of 'exp' follows non-static declaration > static usqInt exp(sqInt a); > ^ > /usr/include/x86_64-linux-gnu/bits/mathcalls.h:95:17: note: previous declaration is here > __MATHCALL_VEC (exp,, (_Mdouble_ __x)); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:48:15: error: static declaration of 'log' follows non-static declaration > static usqInt log(sqInt a); > ^ > /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:17: note: previous declaration is here > __MATHCALL_VEC (log,, (_Mdouble_ __x)); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:29: error: redefinition of 'multiplicationTable' as different kind of symbol > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:50:26: note: previous definition is here > static unsigned short ** multiplicationTable(void); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:66: error: expected '}' > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:63: note: to match this '{' > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:180:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:201:11: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] > return signal(Exception, "Argument 'divisor' is 0"); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:201:18: error: use of undeclared identifier 'Exception' > return signal(Exception, "Argument 'divisor' is 0"); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:221:1: error: static declaration of 'exp' follows non-static declaration > exp(sqInt a) > ^ > /usr/include/x86_64-linux-gnu/bits/mathcalls.h:95:17: note: previous declaration is here > __MATHCALL_VEC (exp,, (_Mdouble_ __x)); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:241:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(base) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:270:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:299:1: error: static declaration of 'log' follows non-static declaration > log(sqInt a) > ^ > /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:17: note: previous declaration is here > __MATHCALL_VEC (log,, (_Mdouble_ __x)); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:304:3: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] > signal(RSErasureIllegalArgumentError, "zero argument"); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:304:10: error: use of undeclared identifier 'RSErasureIllegalArgumentError' > signal(RSErasureIllegalArgumentError, "zero argument"); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:307:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:320:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(value) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:328:9: warning: incompatible pointer types returning 'unsigned short **(void)' from a function with result type 'unsigned short **' [-Wincompatible-pointer-types] > return multiplicationTable; > ^~~~~~~~~~~~~~~~~~~ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:341:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:374:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:380:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] > popthenPushInteger(2, result); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:418:24: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] > result = ((usqInt) (signal(Exception, "Argument 'divisor' is 0"))); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:418:31: error: use of undeclared identifier 'Exception' > result = ((usqInt) (signal(Exception, "Argument 'divisor' is 0"))); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:434:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] > popthenPushInteger(2, result); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:455:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] > popthenPushInteger(2, result); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:496:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:506:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] > popthenPushInteger(2, result); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:550:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:560:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] > popthenPushInteger(2, result); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:590:3: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] > signal(RSErasureIllegalArgumentError, "zero argument"); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:590:10: error: use of undeclared identifier 'RSErasureIllegalArgumentError' > signal(RSErasureIllegalArgumentError, "zero argument"); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:593:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:596:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] > popthenPushInteger(2, result); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:638:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:645:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] > popthenPushInteger(2, result); > ^ > /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:695:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] > ? twosComplement(a) > ^ > 24 warnings and 10 errors generated. > make[1]: *** [Makefile:177: RSErasurePlugin.lo] Error 1 > make: *** [Makefile:582: RSErasurePlugin.la] Error 2 -- --- Kindly, Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: RSErasurePlugin.c Type: text/x-csrc Size: 254120 bytes Desc: not available URL: From robert.withers at pm.me Sat May 29 17:49:23 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 17:49:23 +0000 Subject: [Vm-dev] Many errors compiling RSErasurePlugin.c In-Reply-To: References: Message-ID: I managed to remove all errors. The mvm script generated .la and .lo files, in these locations: > rabbit at ganymede:~/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build/RSErasurePlugin/ > rabbit at ganymede:~/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/buil/RSFECPlugin/ Looking into /usr/local/lib/squeak/5.0-202010010729/ at my previously installed Squeak vm, the plugin files are .so (shared object). Where can I find the .so files for the 2 new plugins I generated? Thx! --- Kindly, Robert On 5/29/21 12:15 PM, Robert Withers wrote: > Some of the initial errors have to do with the static declarations of logTable and expTable. Here is the output... > >> libtool: compile: clang -Wall -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2 -DCOGMTVM=0 -pthread -DLSB_FIRST=1 -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -DHAVE_CONFIG_H -I/home/rabbit/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build -I/home/rabbit/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build -I/home/rabbit/vm-dev/opensmalltalk-vm/platforms/unix/vm -I/home/rabbit/vm-dev/opensmalltalk-vm/platforms/Cross/vm -I/home/rabbit/vm-dev/opensmalltalk-vm/spur64src/vm -I/usr/local/include -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -c /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c -fPIC -DPIC -o .libs/RSErasurePlugin.o >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:44:15: error: static declaration of 'exp' follows non-static declaration >> static usqInt exp(sqInt a); >> ^ >> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:95:17: note: previous declaration is here >> __MATHCALL_VEC (exp,, (_Mdouble_ __x)); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:48:15: error: static declaration of 'log' follows non-static declaration >> static usqInt log(sqInt a); >> ^ >> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:17: note: previous declaration is here >> __MATHCALL_VEC (log,, (_Mdouble_ __x)); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:29: error: redefinition of 'multiplicationTable' as different kind of symbol >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:50:26: note: previous definition is here >> static unsigned short ** multiplicationTable(void); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:66: error: expected '}' >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:63: note: to match this '{' >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:180:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:201:11: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >> return signal(Exception, "Argument 'divisor' is 0"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:201:18: error: use of undeclared identifier 'Exception' >> return signal(Exception, "Argument 'divisor' is 0"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:221:1: error: static declaration of 'exp' follows non-static declaration >> exp(sqInt a) >> ^ >> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:95:17: note: previous declaration is here >> __MATHCALL_VEC (exp,, (_Mdouble_ __x)); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:241:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(base) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:270:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:299:1: error: static declaration of 'log' follows non-static declaration >> log(sqInt a) >> ^ >> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:17: note: previous declaration is here >> __MATHCALL_VEC (log,, (_Mdouble_ __x)); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:304:3: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >> signal(RSErasureIllegalArgumentError, "zero argument"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:304:10: error: use of undeclared identifier 'RSErasureIllegalArgumentError' >> signal(RSErasureIllegalArgumentError, "zero argument"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:307:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:320:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(value) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:328:9: warning: incompatible pointer types returning 'unsigned short **(void)' from a function with result type 'unsigned short **' [-Wincompatible-pointer-types] >> return multiplicationTable; >> ^~~~~~~~~~~~~~~~~~~ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:341:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:374:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:380:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:418:24: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >> result = ((usqInt) (signal(Exception, "Argument 'divisor' is 0"))); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:418:31: error: use of undeclared identifier 'Exception' >> result = ((usqInt) (signal(Exception, "Argument 'divisor' is 0"))); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:434:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:455:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:496:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:506:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:550:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:560:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:590:3: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >> signal(RSErasureIllegalArgumentError, "zero argument"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:590:10: error: use of undeclared identifier 'RSErasureIllegalArgumentError' >> signal(RSErasureIllegalArgumentError, "zero argument"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:593:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:596:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:638:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:645:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:695:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> 24 warnings and 10 errors generated. >> make[1]: *** [Makefile:177: RSErasurePlugin.lo] Error 1 >> make: *** [Makefile:582: RSErasurePlugin.la] Error 2 > > -- > --- > Kindly, > Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: From Das.Linux at gmx.de Sat May 29 18:08:12 2021 From: Das.Linux at gmx.de (Tobias Pape) Date: Sat, 29 May 2021 20:08:12 +0200 Subject: [Vm-dev] Many errors compiling RSErasurePlugin.c In-Reply-To: References: Message-ID: .la and .lo is libtool stuff, I think they should be made into .so's somewhere down the make pipeline, but my memory is a bit hazy there… > On 29. May 2021, at 19:49, Robert Withers wrote: > > I managed to remove all errors. The mvm script generated .la and .lo files, in these locations: > > rabbit at ganymede:~/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build/RSErasurePlugin/ > rabbit at ganymede:~/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/buil/RSFECPlugin/ > > > Looking into /usr/local/lib/squeak/5.0-202010010729/ at my previously installed Squeak vm, the plugin files are .so (shared object). Where can I find the .so files for the 2 new plugins I generated? Thx! > --- > Kindly, > Robert > > > On 5/29/21 12:15 PM, Robert Withers wrote: >> Some of the initial errors have to do with the static declarations of logTable and expTable. Here is the output... >> >> libtool: compile: clang -Wall -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2 -DCOGMTVM=0 -pthread -DLSB_FIRST=1 -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -DHAVE_CONFIG_H -I/home/rabbit/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build -I/home/rabbit/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build -I/home/rabbit/vm-dev/opensmalltalk-vm/platforms/unix/vm -I/home/rabbit/vm-dev/opensmalltalk-vm/platforms/Cross/vm -I/home/rabbit/vm-dev/opensmalltalk-vm/spur64src/vm -I/usr/local/include -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -c /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c -fPIC -DPIC -o .libs/RSErasurePlugin.o >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:44:15: error: static declaration of 'exp' follows non-static declaration >> static usqInt exp(sqInt a); >> ^ >> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:95:17: note: previous declaration is here >> __MATHCALL_VEC (exp,, (_Mdouble_ __x)); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:48:15: error: static declaration of 'log' follows non-static declaration >> static usqInt log(sqInt a); >> ^ >> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:17: note: previous declaration is here >> __MATHCALL_VEC (log,, (_Mdouble_ __x)); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:29: error: redefinition of 'multiplicationTable' as different kind of symbol >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:50:26: note: previous definition is here >> static unsigned short ** multiplicationTable(void); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:66: error: expected '}' >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:63: note: to match this '{' >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:180:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:201:11: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >> return signal(Exception, "Argument 'divisor' is 0"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:201:18: error: use of undeclared identifier 'Exception' >> return signal(Exception, "Argument 'divisor' is 0"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:221:1: error: static declaration of 'exp' follows non-static declaration >> exp(sqInt a) >> ^ >> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:95:17: note: previous declaration is here >> __MATHCALL_VEC (exp,, (_Mdouble_ __x)); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:241:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(base) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:270:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:299:1: error: static declaration of 'log' follows non-static declaration >> log(sqInt a) >> ^ >> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:17: note: previous declaration is here >> __MATHCALL_VEC (log,, (_Mdouble_ __x)); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:304:3: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >> signal(RSErasureIllegalArgumentError, "zero argument"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:304:10: error: use of undeclared identifier 'RSErasureIllegalArgumentError' >> signal(RSErasureIllegalArgumentError, "zero argument"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:307:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:320:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(value) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:328:9: warning: incompatible pointer types returning 'unsigned short **(void)' from a function with result type 'unsigned short **' [-Wincompatible-pointer-types] >> return multiplicationTable; >> ^~~~~~~~~~~~~~~~~~~ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:341:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:374:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:380:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:418:24: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >> result = ((usqInt) (signal(Exception, "Argument 'divisor' is 0"))); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:418:31: error: use of undeclared identifier 'Exception' >> result = ((usqInt) (signal(Exception, "Argument 'divisor' is 0"))); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:434:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:455:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:496:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:506:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:550:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:560:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:590:3: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >> signal(RSErasureIllegalArgumentError, "zero argument"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:590:10: error: use of undeclared identifier 'RSErasureIllegalArgumentError' >> signal(RSErasureIllegalArgumentError, "zero argument"); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:593:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:596:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:638:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:645:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >> popthenPushInteger(2, result); >> ^ >> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:695:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >> ? twosComplement(a) >> ^ >> 24 warnings and 10 errors generated. >> make[1]: *** [Makefile:177: RSErasurePlugin.lo] Error 1 >> make: *** [Makefile:582: RSErasurePlugin.la] Error 2 >> >> -- >> --- >> Kindly, >> Robert >> >> From robert.withers at pm.me Sat May 29 18:22:32 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 18:22:32 +0000 Subject: [Vm-dev] [FIXED] Re: Many errors compiling RSErasurePlugin.c In-Reply-To: References: Message-ID: <29146792-60ae-4067-41b2-836284e84ae2@pm.me> No worries! I found them in the .libs directory under each plugin directory. I am testing the plugins from inside squeak, now. There are errors: primitiveFailed for primLog:, for instance. --- Kindly, Robert On 5/29/21 2:08 PM, Tobias Pape wrote: > .la and .lo is libtool stuff, I think they should be made into .so's somewhere down the make pipeline, but my memory is a bit hazy there… > >> On 29. May 2021, at 19:49, Robert Withers wrote: >> >> I managed to remove all errors. The mvm script generated .la and .lo files, in these locations: >> >> rabbit at ganymede:~/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build/RSErasurePlugin/ >> rabbit at ganymede:~/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/buil/RSFECPlugin/ >> >> >> Looking into /usr/local/lib/squeak/5.0-202010010729/ at my previously installed Squeak vm, the plugin files are .so (shared object). Where can I find the .so files for the 2 new plugins I generated? Thx! >> --- >> Kindly, >> Robert >> >> >> On 5/29/21 12:15 PM, Robert Withers wrote: >>> Some of the initial errors have to do with the static declarations of logTable and expTable. Here is the output... >>> >>> libtool: compile: clang -Wall -g -O2 -DNDEBUG -DDEBUGVM=0 -msse2 -DCOGMTVM=0 -pthread -DLSB_FIRST=1 -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -DHAVE_CONFIG_H -I/home/rabbit/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build -I/home/rabbit/vm-dev/opensmalltalk-vm/build.linux64x64/squeak.cog.spur/build -I/home/rabbit/vm-dev/opensmalltalk-vm/platforms/unix/vm -I/home/rabbit/vm-dev/opensmalltalk-vm/platforms/Cross/vm -I/home/rabbit/vm-dev/opensmalltalk-vm/spur64src/vm -I/usr/local/include -m64 -Wno-missing-braces -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-label -Wno-unused-function -Wno-unused-variable -c /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c -fPIC -DPIC -o .libs/RSErasurePlugin.o >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:44:15: error: static declaration of 'exp' follows non-static declaration >>> static usqInt exp(sqInt a); >>> ^ >>> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:95:17: note: previous declaration is here >>> __MATHCALL_VEC (exp,, (_Mdouble_ __x)); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:48:15: error: static declaration of 'log' follows non-static declaration >>> static usqInt log(sqInt a); >>> ^ >>> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:17: note: previous declaration is here >>> __MATHCALL_VEC (log,, (_Mdouble_ __x)); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:29: error: redefinition of 'multiplicationTable' as different kind of symbol >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:50:26: note: previous definition is here >>> static unsigned short ** multiplicationTable(void); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:66: error: expected '}' >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:166:63: note: to match this '{' >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:180:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:201:11: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >>> return signal(Exception, "Argument 'divisor' is 0"); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:201:18: error: use of undeclared identifier 'Exception' >>> return signal(Exception, "Argument 'divisor' is 0"); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:221:1: error: static declaration of 'exp' follows non-static declaration >>> exp(sqInt a) >>> ^ >>> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:95:17: note: previous declaration is here >>> __MATHCALL_VEC (exp,, (_Mdouble_ __x)); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:241:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(base) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:270:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:299:1: error: static declaration of 'log' follows non-static declaration >>> log(sqInt a) >>> ^ >>> /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:17: note: previous declaration is here >>> __MATHCALL_VEC (log,, (_Mdouble_ __x)); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:304:3: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >>> signal(RSErasureIllegalArgumentError, "zero argument"); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:304:10: error: use of undeclared identifier 'RSErasureIllegalArgumentError' >>> signal(RSErasureIllegalArgumentError, "zero argument"); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:307:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:320:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(value) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:328:9: warning: incompatible pointer types returning 'unsigned short **(void)' from a function with result type 'unsigned short **' [-Wincompatible-pointer-types] >>> return multiplicationTable; >>> ^~~~~~~~~~~~~~~~~~~ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:341:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:374:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:380:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >>> popthenPushInteger(2, result); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:418:24: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >>> result = ((usqInt) (signal(Exception, "Argument 'divisor' is 0"))); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:418:31: error: use of undeclared identifier 'Exception' >>> result = ((usqInt) (signal(Exception, "Argument 'divisor' is 0"))); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:434:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >>> popthenPushInteger(2, result); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:455:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >>> popthenPushInteger(2, result); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:496:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:506:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >>> popthenPushInteger(2, result); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:550:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:560:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >>> popthenPushInteger(2, result); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:590:3: warning: implicit declaration of function 'signal' is invalid in C99 [-Wimplicit-function-declaration] >>> signal(RSErasureIllegalArgumentError, "zero argument"); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:590:10: error: use of undeclared identifier 'RSErasureIllegalArgumentError' >>> signal(RSErasureIllegalArgumentError, "zero argument"); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:593:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:596:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >>> popthenPushInteger(2, result); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:638:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:645:2: warning: implicit declaration of function 'popthenPushInteger' is invalid in C99 [-Wimplicit-function-declaration] >>> popthenPushInteger(2, result); >>> ^ >>> /home/rabbit/vm-dev/opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c:695:5: warning: implicit declaration of function 'twosComplement' is invalid in C99 [-Wimplicit-function-declaration] >>> ? twosComplement(a) >>> ^ >>> 24 warnings and 10 errors generated. >>> make[1]: *** [Makefile:177: RSErasurePlugin.lo] Error 1 >>> make: *** [Makefile:582: RSErasurePlugin.la] Error 2 >>> >>> -- >>> --- >>> Kindly, >>> Robert >>> >>> > From robert.withers at pm.me Sat May 29 18:37:24 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 18:37:24 +0000 Subject: [Vm-dev] [CRASH] I am getting a segmentation fault calling my primitive Message-ID: Hey y'all, I am getting a segmentation fault calling primitiveGaloisMultiplyBy in my RSErasurePlugin. I have attached the crash.dmp file. Investigating...assistance requested. Grazie!! -- --- Kindly, Robert -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: crash.dmp URL: From robert.withers at pm.me Sat May 29 18:42:59 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 18:42:59 +0000 Subject: [Vm-dev] [CRASH] I am getting a segmentation fault calling my primitive In-Reply-To: References: Message-ID: Here is the RSErasurePlugin.so & RSFECPlugin.so so folks may be able to help me test the seg-fault with these plugin and loading the latest RSErasure code: > Installer ss > project: 'Cryptography'; > install: 'ProCrypto-1-1-1'; > install: 'ProCryptoTests-1-1-1'. Here is the code I run that leads to the seg-fault: > RSErasureGalois newGalois. --- Kindly, Robert On 5/29/21 2:37 PM, Robert Withers wrote: > Hey y'all, > > I am getting a segmentation fault calling primitiveGaloisMultiplyBy in > my RSErasurePlugin. I have attached the crash.dmp file. > Investigating...assistance requested. Grazie!! > > -- > --- > Kindly, > Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: RSErasurePlugin.so Type: application/octet-stream Size: 28184 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: RSFECPlugin.so Type: application/octet-stream Size: 27600 bytes Desc: not available URL: From robert.withers at pm.me Sat May 29 18:49:30 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 18:49:30 +0000 Subject: [Vm-dev] [CRASH] I am getting a segmentation fault calling my primitive In-Reply-To: References: Message-ID: Could the issue be bounds checking in the primitive? But it is a seg-fault, not a #primitiveFailed. Thanks for any and all help! This one has me stumped. > ((interpreterProxy isBytes: a) > and: [ (interpreterProxy stSizeOf: a) = 4 ]) > ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ]. > ((interpreterProxy isBytes: b) > and: [ (interpreterProxy stSizeOf: b) = 4 ]) > ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ]. --- Kindly, Robert On 5/29/21 2:42 PM, Robert Withers wrote: > Here is the RSErasurePlugin.so & RSFECPlugin.so so folks may be able to help me test the seg-fault with these plugin and loading the latest RSErasure code: > >> Installer ss >> project: 'Cryptography'; >> install: 'ProCrypto-1-1-1'; >> install: 'ProCryptoTests-1-1-1'. > > Here is the code I run that leads to the seg-fault: > >> RSErasureGalois newGalois. > > --- > Kindly, > Robert > > On 5/29/21 2:37 PM, Robert Withers wrote: > >> Hey y'all, >> >> I am getting a segmentation fault calling primitiveGaloisMultiplyBy in >> my RSErasurePlugin. I have attached the crash.dmp file. >> Investigating...assistance requested. Grazie!! >> >> -- >> --- >> Kindly, >> Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Sat May 29 19:29:50 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 19:29:50 +0000 Subject: [Vm-dev] [CRASH] I am getting a segmentation fault calling my primitive In-Reply-To: References: Message-ID: I commented out these argument checks and regenerated and rebuilt the plugins. New plugins are attached. Now the RSErasureGaloisWithPlugin is working, for the following squeak calls. > RSErasureGalois newGalois... a RSErasureGaloisWithPlugin > self addOrSubtract: 2 by: 1. = 3 > self divide: 4 by: 2. = 14 > self exp: 3. = 8 > self exp: 2 power: 2. = 4 > self log: 4. = 2 > self galoisMultiply: 2 by: 2. = 4 > self tableMultiply: 2 by: 2. = 4 I still have problems with the RSFECPlugin, calling methods in RSFECGenericGFWithPlugin: > RSFECGenericGF newPrimitive: 16r012D size: 256 generatorBase: 1... a RSFECGenericGFWithPlugin > self addOrSubtract: 2 by: 1. = 3 > self exp: 3. {#primitiveFailed} > self inverse: 2. = 0 > self log: 4. {#primitiveFailed} > self multiply: 2 by: 2. {#primitiveFailed} --- Kindly, Robert On 5/29/21 2:49 PM, Robert Withers wrote: > Could the issue be bounds checking in the primitive? But it is a seg-fault, not a #primitiveFailed. Thanks for any and all help! This one has me stumped. > >> ((interpreterProxy isBytes: a) >> and: [ (interpreterProxy stSizeOf: a) = 4 ]) >> ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ]. >> ((interpreterProxy isBytes: b) >> and: [ (interpreterProxy stSizeOf: b) = 4 ]) >> ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ]. > > --- > Kindly, > Robert > > On 5/29/21 2:42 PM, Robert Withers wrote: > >> Here is the RSErasurePlugin.so & RSFECPlugin.so so folks may be able to help me test the seg-fault with these plugin and loading the latest RSErasure code: >> >>> Installer ss >>> project: 'Cryptography'; >>> install: 'ProCrypto-1-1-1'; >>> install: 'ProCryptoTests-1-1-1'. >> >> Here is the code I run that leads to the seg-fault: >> >>> RSErasureGalois newGalois. >> >> --- >> Kindly, >> Robert >> >> On 5/29/21 2:37 PM, Robert Withers wrote: >> >>> Hey y'all, >>> >>> I am getting a segmentation fault calling primitiveGaloisMultiplyBy in >>> my RSErasurePlugin. I have attached the crash.dmp file. >>> Investigating...assistance requested. Grazie!! >>> >>> -- >>> --- >>> Kindly, >>> Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: RSErasurePlugin.so Type: application/octet-stream Size: 27528 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: RSFECPlugin.so Type: application/octet-stream Size: 27264 bytes Desc: not available URL: From robert.withers at pm.me Sat May 29 20:25:13 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 20:25:13 +0000 Subject: [Vm-dev] [CRASH] I am getting a segmentation fault calling my primitive In-Reply-To: References: Message-ID: <4d782bd5-09ef-5d57-8458-64aa5017d219@pm.me> I have an issue with: > RSErasureGalois newGalois divide: 4 by: 2. In the image I get 2. In the plugin I get 142, which is the value for index 255 in the expTable. My question is how can I printf to stdout, inside the plugin code. I tried adding some debug lines to the c code: printf( "a: %i\n", a ); printf( "b: %i\n", b ); logA = logTable[a]; logB = logTable[b]; printf( "logA: %i\n", logA ); printf( "logB: %i\n", logB ); logResult = logA - logB; while (logResult <= 0) { logResult += 0xFF; } if (logResult == 0) { return 1; } printf( "logResult: %i\n", logResult ); result = expTable[logResult]; printf( "result: %i\n", result ); This did not work, however. How can I debug the c code? --- Kindly, Robert On 5/29/21 3:29 PM, Robert Withers wrote: > I commented out these argument checks and regenerated and rebuilt the plugins. New plugins are attached. > > Now the RSErasureGaloisWithPlugin is working, for the following squeak calls. > >> RSErasureGalois newGalois... a RSErasureGaloisWithPlugin > >> self addOrSubtract: 2 by: 1. = 3 >> self divide: 4 by: 2. = 14 >> self exp: 3. = 8 >> self exp: 2 power: 2. = 4 >> self log: 4. = 2 >> self galoisMultiply: 2 by: 2. = 4 >> self tableMultiply: 2 by: 2. = 4 > > I still have problems with the RSFECPlugin, calling methods in RSFECGenericGFWithPlugin: > >> RSFECGenericGF newPrimitive: 16r012D size: 256 generatorBase: 1... a RSFECGenericGFWithPlugin > >> self addOrSubtract: 2 by: 1. = 3 >> self exp: 3. {#primitiveFailed} >> self inverse: 2. = 0 >> self log: 4. {#primitiveFailed} >> self multiply: 2 by: 2. {#primitiveFailed} > > --- > Kindly, > Robert > > On 5/29/21 2:49 PM, Robert Withers wrote: > >> Could the issue be bounds checking in the primitive? But it is a seg-fault, not a #primitiveFailed. Thanks for any and all help! This one has me stumped. >> >>> ((interpreterProxy isBytes: a) >>> and: [ (interpreterProxy stSizeOf: a) = 4 ]) >>> ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ]. >>> ((interpreterProxy isBytes: b) >>> and: [ (interpreterProxy stSizeOf: b) = 4 ]) >>> ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ]. >> >> --- >> Kindly, >> Robert >> >> On 5/29/21 2:42 PM, Robert Withers wrote: >> >>> Here is the RSErasurePlugin.so & RSFECPlugin.so so folks may be able to help me test the seg-fault with these plugin and loading the latest RSErasure code: >>> >>>> Installer ss >>>> project: 'Cryptography'; >>>> install: 'ProCrypto-1-1-1'; >>>> install: 'ProCryptoTests-1-1-1'. >>> >>> Here is the code I run that leads to the seg-fault: >>> >>>> RSErasureGalois newGalois. >>> >>> --- >>> Kindly, >>> Robert >>> >>> On 5/29/21 2:37 PM, Robert Withers wrote: >>> >>>> Hey y'all, >>>> >>>> I am getting a segmentation fault calling primitiveGaloisMultiplyBy in >>>> my RSErasurePlugin. I have attached the crash.dmp file. >>>> Investigating...assistance requested. Grazie!! >>>> >>>> -- >>>> --- >>>> Kindly, >>>> Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Sat May 29 22:43:28 2021 From: robert.withers at pm.me (Robert Withers) Date: Sat, 29 May 2021 22:43:28 +0000 Subject: [Vm-dev] trying to use kdbg with the build.debug vm Message-ID: <71445300-e9a0-9d66-7a76-d98100d37bd2@pm.me> I d/l and made kdbg. I can run it and load the debug vm. How could I set a breakpoint in my RSFECPlugin.c code, starting with primitiveExp() such that it will break when I call it from Squeak? -- --- Kindly, Robert From robert.withers at pm.me Sun May 30 04:13:00 2021 From: robert.withers at pm.me (Robert Withers) Date: Sun, 30 May 2021 04:13:00 +0000 Subject: [Vm-dev] trying to use kdbg with the build.debug vm In-Reply-To: <71445300-e9a0-9d66-7a76-d98100d37bd2@pm.me> References: <71445300-e9a0-9d66-7a76-d98100d37bd2@pm.me> Message-ID: <4ca1909d-7fe6-059a-fa7c-ec341d127d27@pm.me> I figured out how to open the plugin src file under opensmalltalk-vm/src/plugins/RSErasurePlugin/RSErasurePlugin.c & opensmalltalk-vm/src/plugins/RSFECPlugin/RSFECPlugin.c and I was able to set a breakpoint in RSErasurePlugin.c. After some investigation, I found I was extracting the arguments off the stack out of order. Fixed them. The vm under kdbg was breaking in sqUnixX11.c from time to time and when I click "run" twice the image blows up. Not sure why this is happening but I kept trying and managed to break into my method, in RSErasurePlgun.c. I currently have a few issues (3) with RSFECPlugin.c giving different answers than the in-image impl. Investigating... > > --- Kindly, Robert On 5/29/21 6:43 PM, Robert Withers wrote: > I d/l and made kdbg. I can run it and load the debug vm. How could I set > a breakpoint in my RSFECPlugin.c code, starting with primitiveExp() such > that it will break when I call it from Squeak? > > -- > --- > Kindly, > Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: From noreply at github.com Sun May 30 04:49:41 2021 From: noreply at github.com (Eliot Miranda) Date: Sat, 29 May 2021 21:49:41 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 1cdfb3: Use export in Mac Makefiles to reduce command-line... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 1cdfb34b842dae8d63febab9271b05074ab94c79 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/1cdfb34b842dae8d63febab9271b05074ab94c79 Author: Eliot Miranda Date: 2021-05-29 (Sat, 29 May 2021) Changed paths: M build.macos32x86/common/Makefile.app M build.macos32x86/common/Makefile.vm M build.macos64ARMv8/common/Makefile.app M build.macos64ARMv8/common/Makefile.vm M build.macos64x64/common/Makefile.app M build.macos64x64/common/Makefile.vm Log Message: ----------- Use export in Mac Makefiles to reduce command-line args in submake invocations. From no-reply at appveyor.com Sun May 30 05:32:49 2021 From: no-reply at appveyor.com (AppVeyor) Date: Sun, 30 May 2021 05:32:49 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2447 Message-ID: <20210530053249.1.4BBEE3BF06759BCC@appveyor.com> An HTML attachment was scrubbed... URL: From noreply at github.com Sun May 30 20:57:21 2021 From: noreply at github.com (Eliot Miranda) Date: Sun, 30 May 2021 13:57:21 -0700 Subject: [Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 1b31cb: Use export to simplify windows Makefiles. Fix BIT... Message-ID: Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: 1b31cb8634e4dacd2487678e882d33af718bdca5 https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/1b31cb8634e4dacd2487678e882d33af718bdca5 Author: Eliot Miranda Date: 2021-05-30 (Sun, 30 May 2021) Changed paths: M build.win32x86/common/Makefile M build.win32x86/common/Makefile.lib.extra M build.win32x86/common/Makefile.msvc M build.win32x86/common/Makefile.msvc.flags M build.win32x86/common/Makefile.msvc.plugin M build.win32x86/common/Makefile.msvc.tools M build.win32x86/common/Makefile.plugin M build.win32x86/common/Makefile.tools M build.win64x64/common/Makefile M build.win64x64/common/Makefile.lib.extra M build.win64x64/common/Makefile.msvc M build.win64x64/common/Makefile.msvc.flags M build.win64x64/common/Makefile.msvc.plugin M build.win64x64/common/Makefile.msvc.tools M build.win64x64/common/Makefile.plugin M build.win64x64/common/Makefile.tools M platforms/win32/plugins/Mpeg3Plugin/Makefile.msvc Log Message: ----------- Use export to simplify windows Makefiles. Fix BIT_IDENTICAL_FLOATING_POINT build for MSVC Makefiles (have no time to test non-MSVC currently). From no-reply at appveyor.com Sun May 30 20:58:08 2021 From: no-reply at appveyor.com (AppVeyor) Date: Sun, 30 May 2021 20:58:08 +0000 Subject: [Vm-dev] Build failed: opensmalltalk-vm 1.0.2448 Message-ID: <20210530205808.1.D1604EB0E2E9EE95@appveyor.com> An HTML attachment was scrubbed... URL: From robert.withers at pm.me Sun May 30 23:07:36 2021 From: robert.withers at pm.me (Robert Withers) Date: Sun, 30 May 2021 23:07:36 +0000 Subject: [Vm-dev] Reed Solomon plugins & performance slow down Message-ID: Hey all'y'all, I got the plugins working correctly. Published to Cryptography. The plugins are attached. Unfortunately profiling indicates a slow down. The leaves did change from GaloisField methods to GaloisFieldPoly methods. I will work on pluginizing the GFPoly methods, such as #evaluateAt: & #multiplyByMonomialDegree:coefficient:... Here are the results without plugins (135 seconds): > WITHOUT PLUGINS > > - 132032 tallies, 135390 msec. > > **Tree** > -------------------------------- > Process: (40) 57626: nil > -------------------------------- > > **Leaves** > 16.9% {22843ms} RSFECGenericGF>>exp: > 9.2% {12450ms} RSFECGenericGF>>maskValue: > 8.6% {11659ms} RSFECGenericGF>>addOrSubtract:by: > 7.2% {9806ms} RSFECGenericGF>>log: > 6.6% {8958ms} RSFECGenericGF>>normalizeIndex: > 4.9% {6578ms} RSFECGenericGF>>multiply:by: > 2.3% {3130ms} RSErasureGalois>>maskValue: > 2.3% {3118ms} RSFECGenericGFPoly>>evaluateAt: > 1.6% {2175ms} RSErasureGalois>>normalizeIndex: > 1.3% {1718ms} RSFECGenericGFPoly>>addOrSubtractPoly: > 1.3% {1702ms} RSFECGenericGFPoly>>multiplyByMonomialDegree:coefficient: > 1.2% {1606ms} RSErasureGalois>>log: > 1.1% {1516ms} RSErasureGalois>>galoisMultiply:by: And here are the results with plugins (152 seconds): > WITH PLUGINS > > - 149040 tallies, 152531 msec. > > **Tree** > -------------------------------- > Process: (40) 89223: nil > -------------------------------- > > **Leaves** > 27.9% {42565ms} RSFECGenericGFWithPlugin>>addOrSubtract:by: > 17.3% {26440ms} RSFECGenericGFPoly>>evaluateAt: > 8.5% {12926ms} RSFECGenericGFWithPlugin>>maskValue: > 7.3% {11062ms} RSFECGenericGFPoly>>multiplyByMonomialDegree:coefficient: > 6.5% {9854ms} RSFECGenericGFPoly>>addOrSubtractPoly: > 5.6% {8598ms} RSFECGenericGFWithPlugin>>multiply:by: > 2.6% {4032ms} RSErasureGaloisWithPlugin>>galoisMultiply:by: > 2.4% {3601ms} RSErasureGaloisWithPlugin>>addOrSubtract:by: > 2.1% {3137ms} RSErasureGaloisWithPlugin>>maskValue: > 1.6% {2436ms} RSFECGenericGFPoly>>multiplyPoly: -- --- Kindly, Robert -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: RSErasurePlugin.so Type: application/octet-stream Size: 32200 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: RSFECPlugin.so Type: application/octet-stream Size: 27256 bytes Desc: not available URL: From leves at caesar.elte.hu Mon May 31 00:18:34 2021 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon, 31 May 2021 02:18:34 +0200 (CEST) Subject: [Vm-dev] Reed Solomon plugins & performance slow down In-Reply-To: References: Message-ID: Hi Robert, I had a quick look at the plugin code. The operations you implemented in the plugin are way too simple. The VM's JIT makes the smalltalk code run faster, because it has the same operations implemented, and it can avoid calling the overhead of calling the primitive many times. Hence the slowdown. For example, RSFECPlugin >> #primitiveAddOrSubtractby seems to implement bitwise xor on two 32-bit unsigned values, but the arguments are always 0-255. The VM has primitive 16, which does bitwise xor and covers that input range, so the JIT, combined with other operations can generate machine code directly with that without jumping back and forth between native code and smalltalk. If you want a plugin to provide any noticable speedup, you need to do more computation in a single primtiive call. Levente P.S.: I think, in RSFECGenericGC >> #initializeExpTable, the lines x := x bitXor: primitive. x bitAnd: (size - 1)]]. should read x := (x bitXor: primitive) bitAnd: size - 1 ]]. From robert.withers at pm.me Mon May 31 00:50:57 2021 From: robert.withers at pm.me (Robert Withers) Date: Mon, 31 May 2021 00:50:57 +0000 Subject: [Vm-dev] Reed Solomon plugins & performance slow down In-Reply-To: References: Message-ID: <8e0916a2-cacf-a08b-32e4-9dce40383a2f@pm.me> Hi Levente, Thank you for having a look-see and letting me know your thoughts! It makes sense what you are saying. so I think the only way to speed it up is to embed the loops into primitives. I have 5 of 6 methods from Poly that I am stuffing into the plugin. The #dividePoly: is a bit more complicated, updating the remainder poly and so forth. I do not think a Poly can be within a primitive. Hopefully, {product := Array new: size withAll: 0} will work in translation. I fixed #initializeExpTable per your suggestion. Thanks! --- Kindly, Robert On 5/30/21 8:18 PM, Levente Uzonyi wrote: > Hi Robert, > > I had a quick look at the plugin code. The operations you implemented in > the plugin are way too simple. The VM's JIT makes the smalltalk code run > faster, because it has the same operations implemented, and it can avoid > calling the overhead of calling the primitive many times. Hence the > slowdown. > > For example, RSFECPlugin >> #primitiveAddOrSubtractby seems to implement > bitwise xor on two 32-bit unsigned values, but the arguments are always > 0-255. The VM has primitive 16, which does bitwise xor and covers that > input range, so the JIT, combined with other operations can generate > machine code directly with that without jumping back and forth between > native code and smalltalk. > > If you want a plugin to provide any noticable speedup, you need to do > more computation in a single primtiive call. > > > Levente > > P.S.: I think, in RSFECGenericGC >> #initializeExpTable, the lines > > x := x bitXor: primitive. > x bitAnd: (size - 1)]]. > > should read > > x := (x bitXor: primitive) bitAnd: size - 1 ]]. From robert.withers at pm.me Mon May 31 19:43:29 2021 From: robert.withers at pm.me (Robert Withers) Date: Mon, 31 May 2021 19:43:29 +0000 Subject: [Vm-dev] Reed Solomon plugins & performance slow down In-Reply-To: <8e0916a2-cacf-a08b-32e4-9dce40383a2f@pm.me> References: <8e0916a2-cacf-a08b-32e4-9dce40383a2f@pm.me> Message-ID: <9efaa46d-bf63-9708-8063-aca4136fbf7f@pm.me> My previous email is awaiting approval as it is too big. I attached a crash.dmp. Here is the email with a link to the crash dump I placed on dropbox. I implemented a set of 5 primitives for Polynomial math in the RSFECPlugin class and added a RSFECGenericGFPolyWithPlugin to call them. In testing FEC I get a segFault, but looking at the Smalltalk stack dump it is happening in the RSErasurePlugin which is not called by the RSFEC code. It looks like a DoIt and I cannot find the offending code. Where can I look for a DoIt that is calling RSErasure code when running RSFEC code? Here is the smalltalk stack dump and I am attaching the crash.dmp file [1]. > 0x7ffde5e6a1b0 I RSErasureGaloisWithPlugin>galoisMultiply:by: 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin > 0x7ffde5e6a220 I RSErasureGaloisWithPlugin>generateMultiplicationTable 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin > 0x7ffde5e59df0 I RSErasureGaloisWithPlugin>initialize 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin > 0x7ffde5e59e20 M RSErasureGaloisWithPlugin class(Behavior)>new 0x7fdeec8: a(n) RSErasureGaloisWithPlugin class > 0x7ffde5e59e60 I RSErasureGalois class>newGalois 0x6a89510: a(n) RSErasureGalois class > 0x7ffde5e59e90 M UndefinedObject>DoIt 0x2de78e0: a(n) UndefinedObject []1 crash.zip - https://www.dropbox.com/s/qyq735yksmc4dbr/crash.zip?dl=0 > --- Kindly, Robert --- Kindly, Robert On 5/30/21 8:50 PM, Robert Withers wrote: > Hi Levente, > > Thank you for having a look-see and letting me know your thoughts! It > makes sense what you are saying. so I think the only way to speed it up > is to embed the loops into primitives. I have 5 of 6 methods from Poly > that I am stuffing into the plugin. The #dividePoly: is a bit more > complicated, updating the remainder poly and so forth. I do not think a > Poly can be within a primitive. Hopefully, {product := Array new: size > withAll: 0} will work in translation. I fixed #initializeExpTable per > your suggestion. > > Thanks! > > --- > Kindly, > Robert > > On 5/30/21 8:18 PM, Levente Uzonyi wrote: > >> Hi Robert, >> >> I had a quick look at the plugin code. The operations you implemented in >> the plugin are way too simple. The VM's JIT makes the smalltalk code run >> faster, because it has the same operations implemented, and it can avoid >> calling the overhead of calling the primitive many times. Hence the >> slowdown. >> >> For example, RSFECPlugin >> #primitiveAddOrSubtractby seems to implement >> bitwise xor on two 32-bit unsigned values, but the arguments are always >> 0-255. The VM has primitive 16, which does bitwise xor and covers that >> input range, so the JIT, combined with other operations can generate >> machine code directly with that without jumping back and forth between >> native code and smalltalk. >> >> If you want a plugin to provide any noticable speedup, you need to do >> more computation in a single primtiive call. >> >> Levente >> >> P.S.: I think, in RSFECGenericGC >> #initializeExpTable, the lines >> >> x := x bitXor: primitive. >> x bitAnd: (size - 1)]]. >> >> should read >> >> x := (x bitXor: primitive) bitAnd: size - 1 ]]. -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Mon May 31 20:00:16 2021 From: robert.withers at pm.me (Robert Withers) Date: Mon, 31 May 2021 20:00:16 +0000 Subject: [Vm-dev] Reed Solomon plugins & performance slow down In-Reply-To: <9efaa46d-bf63-9708-8063-aca4136fbf7f@pm.me> References: <8e0916a2-cacf-a08b-32e4-9dce40383a2f@pm.me> <9efaa46d-bf63-9708-8063-aca4136fbf7f@pm.me> Message-ID: <177aecc8-6a8c-15be-ad0c-02d5597a5e69@pm.me> The segFault occurs with a call to a RSFECPlugin primitive>>#primMultiplyPolySelfCoefficients:otherCoefficients:product:fieldSize:. But the crash.dmp shows a RSErasureGaloisWithPlugin as the error site. I am very confused as the call I am making in the FEC test is to the RSFECPlugin, but the RSErasurePlugin is the one cited as causing the segFault. I even removed the RSErasurePlugin from the vm directory and this is still occurring. > RSFECGenericGFPolyWithPlugin>>#multiplyPoly: other > > | product | > (field = other field) > ifFalse: [RSErasureIllegalArgumentError signal: 'GenericGFPolys do not have same GenericGF field']. > (self isZero) > ifTrue: [^ field zero] > ifFalse: [other isZero ifTrue: [^ field zero]]. > product := Array new: (self coefficients size + other coefficients size - 1) withAll: 0. > > product := self primMultiplyPolySelfCoefficients: self coefficients otherCoefficients: other coefficients product: product fieldSize: field size. > > ^ RSFECGenericGFPoly newField: field coefficients: product. Any assistance most welcome. This has me stumped. --- Kindly, Robert On 5/31/21 3:43 PM, Robert Withers wrote: > My previous email is awaiting approval as it is too big. I attached a crash.dmp. Here is the email with a link to the crash dump I placed on dropbox. > > I implemented a set of 5 primitives for Polynomial math in the RSFECPlugin class and added a RSFECGenericGFPolyWithPlugin to call them. In testing FEC I get a segFault, but looking at the Smalltalk stack dump it is happening in the RSErasurePlugin which is not called by the RSFEC code. It looks like a DoIt and I cannot find the offending code. Where can I look for a DoIt that is calling RSErasure code when running RSFEC code? Here is the smalltalk stack dump and I am attaching the crash.dmp file [1]. > >> 0x7ffde5e6a1b0 I RSErasureGaloisWithPlugin>galoisMultiply:by: 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin >> 0x7ffde5e6a220 I RSErasureGaloisWithPlugin>generateMultiplicationTable 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin >> 0x7ffde5e59df0 I RSErasureGaloisWithPlugin>initialize 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin >> 0x7ffde5e59e20 M RSErasureGaloisWithPlugin class(Behavior)>new 0x7fdeec8: a(n) RSErasureGaloisWithPlugin class >> 0x7ffde5e59e60 I RSErasureGalois class>newGalois 0x6a89510: a(n) RSErasureGalois class >> 0x7ffde5e59e90 M UndefinedObject>DoIt 0x2de78e0: a(n) UndefinedObject > > []1 crash.zip - https://www.dropbox.com/s/qyq735yksmc4dbr/crash.zip?dl=0 > >> > > --- > Kindly, > Robert > --- > Kindly, > Robert > > On 5/30/21 8:50 PM, Robert Withers wrote: > >> Hi Levente, >> >> Thank you for having a look-see and letting me know your thoughts! It >> makes sense what you are saying. so I think the only way to speed it up >> is to embed the loops into primitives. I have 5 of 6 methods from Poly >> that I am stuffing into the plugin. The #dividePoly: is a bit more >> complicated, updating the remainder poly and so forth. I do not think a >> Poly can be within a primitive. Hopefully, {product := Array new: size >> withAll: 0} will work in translation. I fixed #initializeExpTable per >> your suggestion. >> >> Thanks! >> >> --- >> Kindly, >> Robert >> >> On 5/30/21 8:18 PM, Levente Uzonyi wrote: >> >>> Hi Robert, >>> >>> I had a quick look at the plugin code. The operations you implemented in >>> the plugin are way too simple. The VM's JIT makes the smalltalk code run >>> faster, because it has the same operations implemented, and it can avoid >>> calling the overhead of calling the primitive many times. Hence the >>> slowdown. >>> >>> For example, RSFECPlugin >> #primitiveAddOrSubtractby seems to implement >>> bitwise xor on two 32-bit unsigned values, but the arguments are always >>> 0-255. The VM has primitive 16, which does bitwise xor and covers that >>> input range, so the JIT, combined with other operations can generate >>> machine code directly with that without jumping back and forth between >>> native code and smalltalk. >>> >>> If you want a plugin to provide any noticable speedup, you need to do >>> more computation in a single primtiive call. >>> >>> Levente >>> >>> P.S.: I think, in RSFECGenericGC >> #initializeExpTable, the lines >>> >>> x := x bitXor: primitive. >>> x bitAnd: (size - 1)]]. >>> >>> should read >>> >>> x := (x bitXor: primitive) bitAnd: size - 1 ]]. -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Mon May 31 20:22:57 2021 From: robert.withers at pm.me (Robert Withers) Date: Mon, 31 May 2021 20:22:57 +0000 Subject: [Vm-dev] Reed Solomon plugins & performance slow down In-Reply-To: <177aecc8-6a8c-15be-ad0c-02d5597a5e69@pm.me> References: <8e0916a2-cacf-a08b-32e4-9dce40383a2f@pm.me> <9efaa46d-bf63-9708-8063-aca4136fbf7f@pm.me> <177aecc8-6a8c-15be-ad0c-02d5597a5e69@pm.me> Message-ID: <10912c0b-013e-1efa-6d01-3e8c817b5209@pm.me> Extremely strange. I unloaded the CryptographyRSErasure and CryptographyRSErasureTests packages. I still get a crash dump referencing RSErasureGaloisWithPlugin>galoisMultiply:by:. I am totally confused! This class isn't even loaded in my image! WTH is going on!? > Smalltalk stack dump: > 0x7ffde5e6a1b0 I RSErasureGaloisWithPlugin>galoisMultiply:by: 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin > 0x7ffde5e6a220 I RSErasureGaloisWithPlugin>generateMultiplicationTable 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin > 0x7ffde5e59df0 I RSErasureGaloisWithPlugin>initialize 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin > 0x7ffde5e59e20 M RSErasureGaloisWithPlugin class(Behavior)>new 0x7fdeec8: a(n) RSErasureGaloisWithPlugin class > 0x7ffde5e59e60 I RSErasureGalois class>newGalois 0x6a89510: a(n) RSErasureGalois class > 0x7ffde5e59e90 M UndefinedObject>DoIt 0x2de78e0: a(n) UndefinedObject --- Kindly, Robert On 5/31/21 4:00 PM, Robert Withers wrote: > The segFault occurs with a call to a RSFECPlugin primitive>>#primMultiplyPolySelfCoefficients:otherCoefficients:product:fieldSize:. But the crash.dmp shows a RSErasureGaloisWithPlugin as the error site. I am very confused as the call I am making in the FEC test is to the RSFECPlugin, but the RSErasurePlugin is the one cited as causing the segFault. I even removed the RSErasurePlugin from the vm directory and this is still occurring. > >> RSFECGenericGFPolyWithPlugin>>#multiplyPoly: other >> >> | product | >> (field = other field) >> ifFalse: [RSErasureIllegalArgumentError signal: 'GenericGFPolys do not have same GenericGF field']. >> (self isZero) >> ifTrue: [^ field zero] >> ifFalse: [other isZero ifTrue: [^ field zero]]. >> product := Array new: (self coefficients size + other coefficients size - 1) withAll: 0. >> >> product := self primMultiplyPolySelfCoefficients: self coefficients otherCoefficients: other coefficients product: product fieldSize: field size. >> >> ^ RSFECGenericGFPoly newField: field coefficients: product. > > Any assistance most welcome. This has me stumped. > > --- > Kindly, > Robert > > On 5/31/21 3:43 PM, Robert Withers wrote: > >> My previous email is awaiting approval as it is too big. I attached a crash.dmp. Here is the email with a link to the crash dump I placed on dropbox. >> >> I implemented a set of 5 primitives for Polynomial math in the RSFECPlugin class and added a RSFECGenericGFPolyWithPlugin to call them. In testing FEC I get a segFault, but looking at the Smalltalk stack dump it is happening in the RSErasurePlugin which is not called by the RSFEC code. It looks like a DoIt and I cannot find the offending code. Where can I look for a DoIt that is calling RSErasure code when running RSFEC code? Here is the smalltalk stack dump and I am attaching the crash.dmp file [1]. >> >>> 0x7ffde5e6a1b0 I RSErasureGaloisWithPlugin>galoisMultiply:by: 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin >>> 0x7ffde5e6a220 I RSErasureGaloisWithPlugin>generateMultiplicationTable 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin >>> 0x7ffde5e59df0 I RSErasureGaloisWithPlugin>initialize 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin >>> 0x7ffde5e59e20 M RSErasureGaloisWithPlugin class(Behavior)>new 0x7fdeec8: a(n) RSErasureGaloisWithPlugin class >>> 0x7ffde5e59e60 I RSErasureGalois class>newGalois 0x6a89510: a(n) RSErasureGalois class >>> 0x7ffde5e59e90 M UndefinedObject>DoIt 0x2de78e0: a(n) UndefinedObject >> >> []1 crash.zip - https://www.dropbox.com/s/qyq735yksmc4dbr/crash.zip?dl=0 >> >>> >> >> --- >> Kindly, >> Robert >> --- >> Kindly, >> Robert >> >> On 5/30/21 8:50 PM, Robert Withers wrote: >> >>> Hi Levente, >>> >>> Thank you for having a look-see and letting me know your thoughts! It >>> makes sense what you are saying. so I think the only way to speed it up >>> is to embed the loops into primitives. I have 5 of 6 methods from Poly >>> that I am stuffing into the plugin. The #dividePoly: is a bit more >>> complicated, updating the remainder poly and so forth. I do not think a >>> Poly can be within a primitive. Hopefully, {product := Array new: size >>> withAll: 0} will work in translation. I fixed #initializeExpTable per >>> your suggestion. >>> >>> Thanks! >>> >>> --- >>> Kindly, >>> Robert >>> >>> On 5/30/21 8:18 PM, Levente Uzonyi wrote: >>> >>>> Hi Robert, >>>> >>>> I had a quick look at the plugin code. The operations you implemented in >>>> the plugin are way too simple. The VM's JIT makes the smalltalk code run >>>> faster, because it has the same operations implemented, and it can avoid >>>> calling the overhead of calling the primitive many times. Hence the >>>> slowdown. >>>> >>>> For example, RSFECPlugin >> #primitiveAddOrSubtractby seems to implement >>>> bitwise xor on two 32-bit unsigned values, but the arguments are always >>>> 0-255. The VM has primitive 16, which does bitwise xor and covers that >>>> input range, so the JIT, combined with other operations can generate >>>> machine code directly with that without jumping back and forth between >>>> native code and smalltalk. >>>> >>>> If you want a plugin to provide any noticable speedup, you need to do >>>> more computation in a single primtiive call. >>>> >>>> Levente >>>> >>>> P.S.: I think, in RSFECGenericGC >> #initializeExpTable, the lines >>>> >>>> x := x bitXor: primitive. >>>> x bitAnd: (size - 1)]]. >>>> >>>> should read >>>> >>>> x := (x bitXor: primitive) bitAnd: size - 1 ]]. -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Mon May 31 22:47:37 2021 From: robert.withers at pm.me (Robert Withers) Date: Mon, 31 May 2021 22:47:37 +0000 Subject: [Vm-dev] Reed Solomon plugins & performance slow down In-Reply-To: <10912c0b-013e-1efa-6d01-3e8c817b5209@pm.me> References: <8e0916a2-cacf-a08b-32e4-9dce40383a2f@pm.me> <9efaa46d-bf63-9708-8063-aca4136fbf7f@pm.me> <177aecc8-6a8c-15be-ad0c-02d5597a5e69@pm.me> <10912c0b-013e-1efa-6d01-3e8c817b5209@pm.me> Message-ID: All right some more info. I still don't see what this has to do with RSErasureGaloisWithPlugin. This class in not loaded and I found out some info on the call into primitiveMultiplyByPolySelfCoefficientsOtherCoefficientsProductFieldSize. I used kdbg and set a breakpoint at the beginning of the function. Listed below with the BOOM site bold/italic. The last line in the listing is where it sigterms. The issue is that the 3 Oops, accessed just previously as stack values 3. 2 & 1 are all 0, when stepped over in the kdbg. I tried to recompile the build.debug and installed it. Same exact problem. I recompiled the #primMultiply calling site to this function, still no change. I hope an angel will fix it! > EXPORT(sqInt) > > primitiveMultiplyPolySelfCoefficientsOtherCoefficientsProductFieldSize(void) > > { > > unsigned int aCoeff; > > unsigned int *aCoefficients; > > sqInt aIndex; > > sqInt aLength; > > unsigned int *bCoefficients; > > sqInt bIndex; > > sqInt bLength; > > unsigned int fieldSize; > > unsigned int *otherCoefficients; > > sqInt otherCoefficientsOop; > > unsigned int otherCount; > > unsigned int *product; > > sqInt productOop; > > unsigned int *result; > > unsigned int *selfCoefficients; > > sqInt selfCoefficientsOop; > > unsigned int selfCount; > > if (!((methodArgumentCount()) == 4)) { > > return primitiveFailFor(PrimErrBadNumArgs); > > } > > selfCoefficientsOop = stackIntegerValue(3); > > otherCoefficientsOop = stackIntegerValue(2); > > productOop = stackIntegerValue(1); > > fieldSize = stackIntegerValue(0); > > selfCount = stSizeOf(selfCoefficientsOop); --- Kindly, Robert On 5/31/21 4:22 PM, Robert Withers wrote: > Extremely strange. I unloaded the CryptographyRSErasure and CryptographyRSErasureTests packages. I still get a crash dump referencing RSErasureGaloisWithPlugin>galoisMultiply:by:. I am totally confused! This class isn't even loaded in my image! WTH is going on!? > >> Smalltalk stack dump: 0x7ffde5e6a1b0 I RSErasureGaloisWithPlugin>galoisMultiply:by: 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin 0x7ffde5e6a220 I RSErasureGaloisWithPlugin>generateMultiplicationTable 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin 0x7ffde5e59df0 I RSErasureGaloisWithPlugin>initialize 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin 0x7ffde5e59e20 M RSErasureGaloisWithPlugin class(Behavior)>new 0x7fdeec8: a(n) RSErasureGaloisWithPlugin class 0x7ffde5e59e60 I RSErasureGalois class>newGalois 0x6a89510: a(n) RSErasureGalois class 0x7ffde5e59e90 M UndefinedObject>DoIt 0x2de78e0: a(n) UndefinedObject > > --- > Kindly, > Robert > > On 5/31/21 4:00 PM, Robert Withers wrote: > >> The segFault occurs with a call to a RSFECPlugin primitive>>#primMultiplyPolySelfCoefficients:otherCoefficients:product:fieldSize:. But the crash.dmp shows a RSErasureGaloisWithPlugin as the error site. I am very confused as the call I am making in the FEC test is to the RSFECPlugin, but the RSErasurePlugin is the one cited as causing the segFault. I even removed the RSErasurePlugin from the vm directory and this is still occurring. >> >>> RSFECGenericGFPolyWithPlugin>>#multiplyPoly: other | product | (field = other field) ifFalse: [RSErasureIllegalArgumentError signal: 'GenericGFPolys do not have same GenericGF field']. (self isZero) ifTrue: [^ field zero] ifFalse: [other isZero ifTrue: [^ field zero]]. product := Array new: (self coefficients size + other coefficients size - 1) withAll: 0. product := self primMultiplyPolySelfCoefficients: self coefficients otherCoefficients: other coefficients product: product fieldSize: field size. ^ RSFECGenericGFPoly newField: field coefficients: product. >> >> Any assistance most welcome. This has me stumped. >> >> --- >> Kindly, >> Robert >> >> On 5/31/21 3:43 PM, Robert Withers wrote: >> >>> My previous email is awaiting approval as it is too big. I attached a crash.dmp. Here is the email with a link to the crash dump I placed on dropbox. >>> >>> I implemented a set of 5 primitives for Polynomial math in the RSFECPlugin class and added a RSFECGenericGFPolyWithPlugin to call them. In testing FEC I get a segFault, but looking at the Smalltalk stack dump it is happening in the RSErasurePlugin which is not called by the RSFEC code. It looks like a DoIt and I cannot find the offending code. Where can I look for a DoIt that is calling RSErasure code when running RSFEC code? Here is the smalltalk stack dump and I am attaching the crash.dmp file [1]. >>> >>>> 0x7ffde5e6a1b0 I RSErasureGaloisWithPlugin>galoisMultiply:by: 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin 0x7ffde5e6a220 I RSErasureGaloisWithPlugin>generateMultiplicationTable 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin 0x7ffde5e59df0 I RSErasureGaloisWithPlugin>initialize 0xc7ed9d8: a(n) RSErasureGaloisWithPlugin 0x7ffde5e59e20 M RSErasureGaloisWithPlugin class(Behavior)>new 0x7fdeec8: a(n) RSErasureGaloisWithPlugin class 0x7ffde5e59e60 I RSErasureGalois class>newGalois 0x6a89510: a(n) RSErasureGalois class 0x7ffde5e59e90 M UndefinedObject>DoIt 0x2de78e0: a(n) UndefinedObject >>> >>> []1 crash.zip - https://www.dropbox.com/s/qyq735yksmc4dbr/crash.zip?dl=0 >>> >>>> >>> >>> --- >>> Kindly, >>> Robert >>> --- >>> Kindly, >>> Robert >>> >>> On 5/30/21 8:50 PM, Robert Withers wrote: >>> >>>> Hi Levente, >>>> >>>> Thank you for having a look-see and letting me know your thoughts! It >>>> makes sense what you are saying. so I think the only way to speed it up >>>> is to embed the loops into primitives. I have 5 of 6 methods from Poly >>>> that I am stuffing into the plugin. The #dividePoly: is a bit more >>>> complicated, updating the remainder poly and so forth. I do not think a >>>> Poly can be within a primitive. Hopefully, {product := Array new: size >>>> withAll: 0} will work in translation. I fixed #initializeExpTable per >>>> your suggestion. >>>> >>>> Thanks! >>>> >>>> --- >>>> Kindly, >>>> Robert >>>> >>>> On 5/30/21 8:18 PM, Levente Uzonyi wrote: >>>> >>>>> Hi Robert, >>>>> >>>>> I had a quick look at the plugin code. The operations you implemented in >>>>> the plugin are way too simple. The VM's JIT makes the smalltalk code run >>>>> faster, because it has the same operations implemented, and it can avoid >>>>> calling the overhead of calling the primitive many times. Hence the >>>>> slowdown. >>>>> >>>>> For example, RSFECPlugin >> #primitiveAddOrSubtractby seems to implement >>>>> bitwise xor on two 32-bit unsigned values, but the arguments are always >>>>> 0-255. The VM has primitive 16, which does bitwise xor and covers that >>>>> input range, so the JIT, combined with other operations can generate >>>>> machine code directly with that without jumping back and forth between >>>>> native code and smalltalk. >>>>> >>>>> If you want a plugin to provide any noticable speedup, you need to do >>>>> more computation in a single primtiive call. >>>>> >>>>> Levente >>>>> >>>>> P.S.: I think, in RSFECGenericGC >> #initializeExpTable, the lines >>>>> >>>>> x := x bitXor: primitive. >>>>> x bitAnd: (size - 1)]]. >>>>> >>>>> should read >>>>> >>>>> x := (x bitXor: primitive) bitAnd: size - 1 ]]. -------------- next part -------------- An HTML attachment was scrubbed... URL: