Ugg Groan.

Given it is Clang, which is agressive on taking the undefined parts of the C standards as undefined, combined with the debug ones not crashing means that there is probably some code that looks ok but is actually taking advantage of something that is not defined in C.

We could try turning off optimization for this plugin but that is a hack and not a fix.

I might get lucky and see if I can scare some sensible  message out of Clang about what it thinks is undefined.

cheers

bruce

On 2021-12-10T15:06:41.000+01:00, Marcel Taeumel <marcel.taeumel@hpi.de> wrote:
Hmm... Clang seems to be part of the problem. A gcc build on Ubuntu 18.04 did not crash.

squeak.cog.spur_win64x64 (Windows 10 21H2)
Clang 13.0.0 - CRASH
Clang 8.0.1 - CRASH

squeak.cog.spur_linux64x64 (Ubuntu 18.04)
gcc 7.5.0 - OK (with some failing tests)
Clang 9.0.0 - CRASH

Am 10.12.2021 14:40:26 schrieb Marcel Taeumel <marcel.taeumel@hpi.de>:

Hi Levente --

Windows VM crashes, too. But at a different test: #testHMACSH512Spec.

<image.png>

And the filename for the crash-dmp is broken.

Best,
Marcel

Am 10.12.2021 13:43:45 schrieb Levente Uzonyi <leves@caesar.elte.hu>:


Hi Marcel,

The SHA2 plugin (primitiveSHA256ProcessBufferUpdatingHash) still
crashes with that VM on 64-bit linux.
The plugin code works with earlier versions, so it's either a VM
change of the past 6-9 months, a code generator bug or a compiler bug IMO.

To reproduce the crash, evaluate the following:

Installer ss
project: 'Registers';
install: 'Registers-Core'.
Installer ss
project: 'Cryptography';
addPackage: 'CryptographyHashing';
addPackage: 'CryptographyHashingTests';
install.
(Smalltalk classNamed: #SHA256WithSHA2PluginTest) run: #testInputs

Interestingly another test (SHA512WithSHA2PluginTest) using a very
similar primitive but with DoubleWords works fine. So perhaps it's an
alignment issue.

Assert and debug VMs do not have that issue, so it's not that easy to
debug it. What I found was that buffer's value at
https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/99f1116c0f7a4ba9a0bf88cf7deb276325aa2d79/src/plugins/SHA2Plugin/SHA2Plugin.c#L277
was not the expected pointer, so the subsequent copying into it resulted
in segmentation fault.


Levente