Skip to content

32-bit Linux Cog VM segfaults after a few seconds #767

Description

@LinqLover

I downloaded squeak.cog.spur_linux32x86 from the new release (202603271636) and installed the required 32-bit libraries (multiarch) on my Ubuntu 24.04 64-bit system. When I run the 32-bit VM with either Squeak6.0-22148-32bit.image or Squeak6.1alpha-23704-32bit.image (both freshly retrieved from files.squeak.org), it crashes after a few seconds:

Output
christoph@tuxedo-christoph:~/Downloads/squeak.cog.spur_linux32x86/sqcogspur32linuxht$ ./squeak ~/Downloads/Squeak6.1alpha-23704-32bit/Squeak6.1alpha-23704-32bit.image 
pthread_setschedparam failed: Operation not permitted
This VM uses a separate heartbeat thread to update its internal clock
and handle events.  For best operation, this thread should run at a
higher priority, however the VM was unable to change the priority.  The
effect is that heavily loaded systems may experience some latency
issues.  If this occurs, please create the appropriate configuration
file in /etc/security/limits.d/ as shown below:

cat <<END | sudo tee /etc/security/limits.d/squeak.conf

  •  hard    rtprio  2
    
  •  soft    rtprio  2
    

END

and report to the squeak mailing list whether this improves behaviour.

You will need to log out and log back in for the limits to take effect.
For more information please see
https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/r3732#linux
Aborted (core dumped)

christoph@tuxedo-christoph:~/Downloads/squeak.cog.spur_linux32x86/sqcogspur32linuxht$ ./squeak ~/Downloads/Squeak6.0-22148-32bit/Squeak6.0-22148-32bit.image
pthread_setschedparam failed: Operation not permitted
This VM uses a separate heartbeat thread to update its internal clock
and handle events. For best operation, this thread should run at a
higher priority, however the VM was unable to change the priority. The
effect is that heavily loaded systems may experience some latency
issues. If this occurs, please create the appropriate configuration
file in /etc/security/limits.d/ as shown below:

cat <<END | sudo tee /etc/security/limits.d/squeak.conf

  •  hard    rtprio  2
    
  •  soft    rtprio  2
    

END

and report to the squeak mailing list whether this improves behaviour.

You will need to log out and log back in for the limits to take effect.
For more information please see
https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/r3732#linux
stack page bytes 8192 available headroom 6888 minimum unused headroom 7048

Segmentation fault Tue Apr 21 19:53:20 2026

/home/christoph/Downloads/squeak.cog.spur_linux32x86/sqcogspur32linuxht/lib/squeak/7.0-202603271636-32bit/squeak
Squeak VM version: 7.0-202603271636 Sun Mar 29 14:07:49 UTC 2026 gcc 11 [Production Spur i686 VM]
Built from: CoInterpreter VMMaker.oscog-eem.3738 uuid: c3a9466e-a7e5-46c2-92fa-cdd228ffecef Mar 29 2026
With: StackToRegisterMappingCogit VMMaker.oscog-eem.3724 uuid: 4f19a1df-89b9-4dc2-9096-99d4c29a72b7 Mar 29 2026
Revision: VM: 202603271636 https://github.com/OpenSmalltalk/opensmalltalk-vm
Date: Fri Mar 27 17:36:22 2026 CommitHash: a8ed1b5
Plugins: 202603271636 https://github.com/OpenSmalltalk/opensmalltalk-vm
Build host: Linux runnervm19da2 6.8.0-1044-azure #50~22.04.1-Ubuntu SMP Wed Dec 3 15:13:22 UTC 2025 i686 athlon i686 GNU/Linux
plugin path: ./lib/squeak/7.0-202603271636-32bit [default: /home/christoph/Downloads/squeak.cog.spur_linux32x86/sqcogspur32linuxht/lib/squeak/7.0-202603271636-32bit/]

C stack backtrace & registers:
eax 0x59d9a8ef ebx 0x56812c78 ecx 0x00000000 edx 0x000e0c5d
edi 0x00000001 esi 0x00000001 ebp 0x00000088 esp 0xffc5a828
eip 0x566a6ba8
*./lib/squeak/7.0-202603271636-32bit/squeak(+0x27ba8)[0x566a6ba8]
./lib/squeak/7.0-202603271636-32bit/squeak(+0xa3eb7)[0x56722eb7]
./lib/squeak/7.0-202603271636-32bit/squeak(+0xa4282)[0x56723282]
linux-gate.so.1(__kernel_rt_sigreturn+0x0)[0xf07355a0]
./lib/squeak/7.0-202603271636-32bit/squeak(+0x27ba8)[0x566a6ba8]
./lib/squeak/7.0-202603271636-32bit/squeak(+0x55355)[0x566d4355]
./lib/squeak/7.0-202603271636-32bit/squeak(+0x559ed)[0x566d49ed]
./lib/squeak/7.0-202603271636-32bit/squeak(+0x55ae6)[0x566d4ae6]
[0x580f05a8]
[0x5812201e]
[0x5812aff1]
[0x5812ae0e]
[0x5812ad8e]
[0x58135303]
[0x5812d4c5]
[0x580f0fe8]
[0xffc59adc]

Smalltalk stack dump:
0xffc78800 I IndentingListItemMorph>drawOn: 0x582ce6a0: a(n) IndentingListItemMorph
0xffc7881c M FormCanvas(Canvas)>draw: 0x5847f4e8: a(n) FormCanvas
0xffc78838 M FormCanvas(Canvas)>drawMorph: 0x5847f4e8: a(n) FormCanvas
0xffc78854 M IndentingListItemMorph(Morph)>fullDrawOn: 0x582ce6a0: a(n) IndentingListItemMorph
0xffc78870 M FormCanvas(Canvas)>fullDraw: 0x5847f4e8: a(n) FormCanvas
0xffc7888c M FormCanvas(Canvas)>fullDrawMorph: 0x5847f4e8: a(n) FormCanvas
0xffc788ac M [] in TransformMorph>drawSubmorphsOn: 0x582c5650: a(n) TransformMorph
0xffc788cc M Array(SequenceableCollection)>reverseDo: 0x582ccad0: a(n) Array
0xffc7668c M [] in TransformMorph>drawSubmorphsOn: 0x582c5650: a(n) TransformMorph
0xffc766a8 M FormCanvas(Canvas)>translateBy:clippingTo:during: 0x58469ef8: a(n) FormCanvas
0xffc766e8 M FormCanvas>transformBy:clippingTo:during:smoothing: 0x58469ef8: a(n) FormCanvas
0xffc76710 M TransformMorph>drawSubmorphsOn: 0x582c5650: a(n) TransformMorph
0xffc7672c M TransformMorph(Morph)>fullDrawOn: 0x582c5650: a(n) TransformMorph
0xffc76748 M FormCanvas(Canvas)>fullDraw: 0x58469ef8: a(n) FormCanvas
0xffc76764 M FormCanvas(Canvas)>fullDrawMorph: 0x58469ef8: a(n) FormCanvas
0xffc76784 M [] in PluggableTreeMorph(Morph)>drawSubmorphsOn: 0x582c1cd0: a(n) PluggableTreeMorph
0xffc767a4 M Array(SequenceableCollection)>reverseDo: 0x582c5548: a(n) Array
0xffc767c0 M [] in PluggableTreeMorph(Morph)>drawSubmorphsOn: 0x582c1cd0: a(n) PluggableTreeMorph
0xffc767e0 M PluggableTreeMorph(Morph)>drawSubmorphsOn: 0x582c1cd0: a(n) PluggableTreeMorph
0xffc767fc M PluggableTreeMorph(Morph)>fullDrawOn: 0x582c1cd0: a(n) PluggableTreeMorph
0xffc76818 M FormCanvas(Canvas)>fullDraw: 0x58469ef8: a(n) FormCanvas
0xffc76834 M FormCanvas(Canvas)>fullDrawMorph: 0x58469ef8: a(n) FormCanvas
0xffc76854 M [] in PluggableSystemWindow(Morph)>drawSubmorphsOn: 0x582bd950: a(n) PluggableSystemWindow
0xffc76874 M Array(SequenceableCollection)>reverseDo: 0x583b5fd0: a(n) Array
0xffc76890 M [] in PluggableSystemWindow(Morph)>drawSubmorphsOn: 0x582bd950: a(n) PluggableSystemWindow
0xffc768b0 M PluggableSystemWindow(Morph)>drawSubmorphsOn: 0x582bd950: a(n) PluggableSystemWindow
0xffc768cc M PluggableSystemWindow(Morph)>fullDrawOn: 0x582bd950: a(n) PluggableSystemWindow
0xffc7468c M FormCanvas(Canvas)>fullDraw: 0x58469ef8: a(n) FormCanvas
0xffc746a8 M FormCanvas(Canvas)>fullDrawMorph: 0x58469ef8: a(n) FormCanvas
0xffc746f8 M [] in WorldState>drawWorld:submorphs:invalidAreasOn: 0x58d9bf80: a(n) WorldState
0xffc74728 M Rectangle>allAreasOutsideList:startingAt:do: 0x582c49e8: a(n) Rectangle
0xffc7474c M Rectangle>allAreasOutsideList:do: 0x582c49e8: a(n) Rectangle
0xffc74788 M [] in WorldState>drawWorld:submorphs:invalidAreasOn: 0x58d9bf80: a(n) WorldState
0xffc747ac M Array(SequenceableCollection)>do: 0x58469698: a(n) Array
0xffc747dc M WorldState>drawWorld:submorphs:invalidAreasOn: 0x58d9bf80: a(n) WorldState
0xffc74814 M WorldState>displayWorld:submorphs: 0x58d9bf80: a(n) WorldState
0xffc74834 M PasteUpMorph>privateOuterDisplayWorld 0x58da3cb8: a(n) PasteUpMorph
0xffc7484c M PasteUpMorph>displayWorld 0x58da3cb8: a(n) PasteUpMorph
0xffc7486c M [] in WorldState>displayWorldSafely: 0x58d9bf80: a(n) WorldState
0xffc7488c M FullBlockClosure(BlockClosure)>on:do: 0x58466810: a(n) FullBlockClosure
0xffc748b0 M WorldState>displayWorldSafely: 0x58d9bf80: a(n) WorldState
0xffc748d0 M [] in WorldState>doOneCycleNowFor: 0x58d9bf80: a(n) WorldState
0xffc5e5c0 M [] in ActiveWorldVariable class(DynamicVariable class)>value:during: 0x58d8f788: a(n) ActiveWorldVariable
0xffc5e5e0 M FullBlockClosure(BlockClosure)>ensure: 0x58464920: a(n) FullBlockClosure
0xffc5e608 M ActiveWorldVariable class(DynamicVariable class)>value:during: 0x58d8f788: a(n) ActiveWorldVariable
0xffc5e630 M [] in ActiveWorldVariable class>value:during: 0x58d8f788: a(n) ActiveWorldVariable
0xffc5e650 M FullBlockClosure(BlockClosure)>ensure: 0x58464850: a(n) FullBlockClosure
0xffc5e670 M ActiveWorldVariable class>value:during: 0x58d8f788: a(n) ActiveWorldVariable
0xffc5e690 M PasteUpMorph>becomeActiveDuring: 0x58da3cb8: a(n) PasteUpMorph
0xffc5e6b8 I WorldState>doOneCycleNowFor: 0x58d9bf80: a(n) WorldState
0xffc5e6dc I WorldState>doOneCycleFor: 0x58d9bf80: a(n) WorldState
0xffc5e700 I PasteUpMorph>doOneCycle 0x58da3cb8: a(n) PasteUpMorph
0xffc5e720 I PreferenceWizardMorph>refreshWorld 0x583b6a78: a(n) PreferenceWizardMorph
0xffc5e740 I PreferenceWizardMorph>showWelcome 0x583b6a78: a(n) PreferenceWizardMorph
0xffc5e760 I PreferenceWizardMorph>openInWorld 0x583b6a78: a(n) PreferenceWizardMorph
0xffc5e780 I PreferenceWizardMorph class>open 0x58e4e2b0: a(n) PreferenceWizardMorph
0xffc5e7a4 I [] in ReleaseBuilder class>prepareEnvironment 0x58994140: a(n) ReleaseBuilder
0xffc5e7c8 I ReleaseBuilder class>startUp: 0x58994140: a(n) ReleaseBuilder
0xffc5e7f4 M [] in SmalltalkImage>send:toClassesNamedIn:with: 0x589aa238: a(n) SmalltalkImage
0xffc5e81c I OrderedCollection>do: 0x58a4b4b0: a(n) OrderedCollection
0xffc5e844 I SmalltalkImage>send:toClassesNamedIn:with: 0x589aa238: a(n) SmalltalkImage
0xffc5e870 I SmalltalkImage>processStartUpList: 0x589aa238: a(n) SmalltalkImage
0xffc5e894 I SmalltalkImage>startUpPostSnapshot: 0x589aa238: a(n) SmalltalkImage
0xffc5e8c0 I SmalltalkImage>snapshot:andQuit:withExitCode:embedded: 0x589aa238: a(n) SmalltalkImage
0x5ad3ee30 s SmalltalkImage>snapshot:andQuit:embedded: 0x589aa238: a(n) SmalltalkImage
0x5ad3eff0 s SmalltalkImage>snapshot:andQuit: 0x589aa238: a(n) SmalltalkImage
0x5ad3f0c0 s [] in ReleaseBuilder class>saveAndQuit 0x58994140: a(n) ReleaseBuilder
0x5ad3f198 s WorldState>runStepMethodsIn: 0x58d9bf80: a(n) WorldState
0x5ad3f228 s PasteUpMorph>runStepMethods 0x58da3cb8: a(n) PasteUpMorph
0x5ad3f2f8 s [] in WorldState>doOneCycleNowFor: 0x58d9bf80: a(n) WorldState
0x5ad3f358 s [] in ActiveWorldVariable class(DynamicVariable class)>value:during: 0x58d8f788: a(n) ActiveWorldVariable
0x5ad3f3d8 s FullBlockClosure(BlockClosure)>ensure: 0x5ad3f438: a(n) FullBlockClosure
0x5ad3f4c0 s ActiveWorldVariable class(DynamicVariable class)>value:during: 0x58d8f788: a(n) ActiveWorldVariable
0x5ad3f5b8 s [] in ActiveWorldVariable class>value:during: 0x58d8f788: a(n) ActiveWorldVariable
0x5ad3f688 s FullBlockClosure(BlockClosure)>ensure: 0x5ad3f6e8: a(n) FullBlockClosure
0x5ad3f768 s ActiveWorldVariable class>value:during: 0x58d8f788: a(n) ActiveWorldVariable
0x5ad3f860 s PasteUpMorph>becomeActiveDuring: 0x58da3cb8: a(n) PasteUpMorph
0x5ad3f460 s WorldState>doOneCycleNowFor: 0x58d9bf80: a(n) WorldState
0x5ad3f548 s WorldState>doOneCycleFor: 0x58d9bf80: a(n) WorldState
0x5ad3f628 s PasteUpMorph>doOneCycle 0x58da3cb8: a(n) PasteUpMorph
0x5ad3f708 s [] in MorphicProject>spawnNewProcess 0x58b5e988: a(n) MorphicProject
0x5ad3f7e8 s [] in FullBlockClosure(BlockClosure)>newProcess 0x5ad3f848: a(n) FullBlockClosure

Most recent primitives (oldest first)

PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#*
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#*
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#-
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BoxedFloat64>>#+
PrimitiveFailure BoxedFloat64
PrimitiveFailure BoxedFloat64
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
Behavior>>#basicNew:
BitBlt>>#copyBits
Number>>#@
Number>>#@
Behavior>>#basicNew
SmallInteger>>#-
SmallInteger>>#-
StackOverflow
BitBlt>>#copyBits
Behavior>>#basicNew
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
StackOverflow
BitBlt>>#copyBits
StackOverflow
BitBlt>>#copyBits
StackOverflow
BitBlt>>#primDisplayString:from:to:map:xTable:kern:
BitBlt>>#primDisplayString:from:to:map:xTable:kern:
BitBlt>>#copyBits
BitBlt>>#copyBits
StackOverflow
BitBlt>>#copyBits
Behavior>>#basicNew
BitBlt>>#primDisplayString:from:to:map:xTable:kern:
BitBlt>>#primDisplayString:from:to:map:xTable:kern:
Behavior>>#basicNew
StackOverflow
StackOverflow
StackOverflow
Object>>#shallowCopy
Object>>#perform:with:
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
BitBlt>>#copyBits
FullBlockClosure>>#value:
BitBlt>>#copyBits
FullBlockClosure>>#value:
FullBlockClosure>>#value:
Behavior>>#basicNew
StackOverflow
StackOverflow
StackOverflow
StackOverflow
StackOverflow
StackOverflow
StackOverflow
StackOverflow
BitBlt>>#copyBits
PrimitiveFailure GrafPort
Behavior>>#basicNew
BitBlt>>#copyBits
FullBlockClosure>>#value
BitBlt>>#primDisplayString:from:to:map:xTable:kern:
BitBlt>>#primDisplayString:from:to:map:xTable:kern:
CompactCode

stack page bytes 8192 available headroom 6888 minimum unused headroom 7048

(Segmentation fault)

Aborted (core dumped)

This a regression from the previous VM release (202312181441) where the binary appears to operate correctly on my stack.

32-bit Stack VM works fine.
32-bit Debug Cog VM also works fine, so it's a Heisenbug! 🎉

Can anybody else reproduce this or is this my system being weird? Could this be related to my multiarch setup or not really? Should we have better CI to spot such issues earlier?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions