regression: TestObjectsAsMethods crash in 4.19.5 (not in 4.16.7)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

regression: TestObjectsAsMethods crash in 4.19.5 (not in 4.16.7)

stes
 
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256


As can be seen in the screenshot at:

http://docs.openindiana.org/handbook/community/squeak/index.html

I'm deselecting the Tests-ObjectsAsMethods test (1 test),
because it causes (reproducible) SIGSEGV on Solaris cc/OpenIndiana gcc.

I think the segmentation fault is new in recent 4.19, I think it didn't happen
a while ago in 4.16.

I can test this as follows: when I install an older version

squeak -version
4.16.7-3775

then I go into test runner: Tests-ObjectsAsMethods and select
TestObjectsAsMethods that works in 4.16.7

Test Runner

...
TestObjectsAsMethods

3 run, 3 passes, 0 expected failures, 0 failures, 0 errors, 0 unexpected passes

But it stopped working in 4.19.x which is from I believe from:

ContextInterpreter VMMaker-dtl.422 uuid: e72b95a0-204e-45a1-a4e4-3ac3c9e7a51a

the interp.c file is automatically generated from VMMaker-dtl.422.

It's reproducible in the sense that if I deselect all tests, and just select
that one single test, I can repeatedly and reproducible SIGSEGV the VM.

When I run the VM under a debugger:

dbx: warning: Bad transition in runtime linker interface. CONSISTENT->CONSISTENT
t@1 (l@1) signal SEGV (no mapping at the fault address) in interpret at line 9120 in file "interp.c"
 9120   foo->freeContexts = longAt((newContext + (BASE_HEADER_SIZE)) + (0 << (SHIFT_FOR_WORD)));

(dbx) where
current thread: t@1
=>[1] interpret(), line 9120 in "interp.c"
  [2] main(argc = 1, argv = 0xfeffe250, envp = 0xfeffe258), line 1484 in "sqUnixMain.c"

The above is from Solaris with cc/dbx but the same thing appears to happen
for me on OpenIndiana with gcc/gdb.

Unfortunately because the code of interp.c is automatically generated,
it looks complicated to me and I don't see what's wrong with those "
freeContext" code.

The crash appears to be in:

                                /* begin internalActivateNewMethod */
                                methodHeader = longAt((foo->newMethod + (BASE_HEADER_SIZE)) + (HeaderIndex << (SHIFT_FOR_WORD)));
                                needsLarge = methodHeader & LargeContextBit;
                                if ((needsLarge == 0) && (foo->freeContexts != NilContext)) {
                                        newContext = foo->freeContexts;
                                        /* begin setFreeContextsAfter: */
                                        foo->freeContexts = longAt((newContext + (BASE_HEADER_SIZE)) + (0 << (SHIFT_FOR_WORD)));
                                } else {
                                        /* begin externalizeIPandSP */

Has anyone seen this ?

Also what is the test
TestObjectsAsMethods
actually doing please ? what is it testing ?


Regards,
David Stes



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBCAAGBQJgMnV5AAoJEAwpOKXMq1MafEgH/3EWQxaSaVm2g4r/2p99Wc21
P+U+ijqKpVTDfJ1smwV/GsgF0V8ZrZky0k7BzRDAyq3Gi/HGVm0e2bqOAKa1fo2Y
MUS9JHOW4Lys+9qWgT0aLiWypjYlzThtYS0/Lfh013tsF1bBv2eppTceUyq/Zitv
6J0IFvDOspMN/zHwBw/ux3H6uR049boZ3mvk23sp3KIHDc2Yw2kF4TAXBwjZXmVO
UFlIAC4EAahrtNZyLZSIBDbsXOl+wJGmQTsOIBG81pfSFpP6RBrIARcu6enZC3Wc
bwsvWYADs49SKgVq3NBovfyzkZBIW30V82xlVKpOnp6A4FnOYXxQiVm9sNaOVXc=
=34TJ
-----END PGP SIGNATURE-----
Reply | Threaded
Open this post in threaded view
|

Re: regression: TestObjectsAsMethods crash in 4.19.5 (not in 4.16.7)

David T. Lewis
 
Thanks.

Confirmed on Linux amd64, so it is not Solaris/OpenIndiana issue.

Dave

On Sun, Feb 21, 2021 at 04:02:38PM +0100, [hidden email] wrote:

>  
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
>
> As can be seen in the screenshot at:
>
> http://docs.openindiana.org/handbook/community/squeak/index.html
>
> I'm deselecting the Tests-ObjectsAsMethods test (1 test),
> because it causes (reproducible) SIGSEGV on Solaris cc/OpenIndiana gcc.
>
> I think the segmentation fault is new in recent 4.19, I think it didn't happen
> a while ago in 4.16.
>
> I can test this as follows: when I install an older version
>
> squeak -version
> 4.16.7-3775
>
> then I go into test runner: Tests-ObjectsAsMethods and select
> TestObjectsAsMethods that works in 4.16.7
>
> Test Runner
>
> ...
> TestObjectsAsMethods
>
> 3 run, 3 passes, 0 expected failures, 0 failures, 0 errors, 0 unexpected passes
>
> But it stopped working in 4.19.x which is from I believe from:
>
> ContextInterpreter VMMaker-dtl.422 uuid: e72b95a0-204e-45a1-a4e4-3ac3c9e7a51a
>
> the interp.c file is automatically generated from VMMaker-dtl.422.
>
> It's reproducible in the sense that if I deselect all tests, and just select
> that one single test, I can repeatedly and reproducible SIGSEGV the VM.
>
> When I run the VM under a debugger:
>
> dbx: warning: Bad transition in runtime linker interface. CONSISTENT->CONSISTENT
> t@1 (l@1) signal SEGV (no mapping at the fault address) in interpret at line 9120 in file "interp.c"
>  9120   foo->freeContexts = longAt((newContext + (BASE_HEADER_SIZE)) + (0 << (SHIFT_FOR_WORD)));
>
> (dbx) where
> current thread: t@1
> =>[1] interpret(), line 9120 in "interp.c"
>   [2] main(argc = 1, argv = 0xfeffe250, envp = 0xfeffe258), line 1484 in "sqUnixMain.c"
>
> The above is from Solaris with cc/dbx but the same thing appears to happen
> for me on OpenIndiana with gcc/gdb.
>
> Unfortunately because the code of interp.c is automatically generated,
> it looks complicated to me and I don't see what's wrong with those "
> freeContext" code.
>
> The crash appears to be in:
>
>                                 /* begin internalActivateNewMethod */
>                                 methodHeader = longAt((foo->newMethod + (BASE_HEADER_SIZE)) + (HeaderIndex << (SHIFT_FOR_WORD)));
>                                 needsLarge = methodHeader & LargeContextBit;
>                                 if ((needsLarge == 0) && (foo->freeContexts != NilContext)) {
>                                         newContext = foo->freeContexts;
>                                         /* begin setFreeContextsAfter: */
>                                         foo->freeContexts = longAt((newContext + (BASE_HEADER_SIZE)) + (0 << (SHIFT_FOR_WORD)));
>                                 } else {
>                                         /* begin externalizeIPandSP */
>
> Has anyone seen this ?
>
> Also what is the test
> TestObjectsAsMethods
> actually doing please ? what is it testing ?
>
>
> Regards,
> David Stes
>
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2
>
> iQEcBAEBCAAGBQJgMnV5AAoJEAwpOKXMq1MafEgH/3EWQxaSaVm2g4r/2p99Wc21
> P+U+ijqKpVTDfJ1smwV/GsgF0V8ZrZky0k7BzRDAyq3Gi/HGVm0e2bqOAKa1fo2Y
> MUS9JHOW4Lys+9qWgT0aLiWypjYlzThtYS0/Lfh013tsF1bBv2eppTceUyq/Zitv
> 6J0IFvDOspMN/zHwBw/ux3H6uR049boZ3mvk23sp3KIHDc2Yw2kF4TAXBwjZXmVO
> UFlIAC4EAahrtNZyLZSIBDbsXOl+wJGmQTsOIBG81pfSFpP6RBrIARcu6enZC3Wc
> bwsvWYADs49SKgVq3NBovfyzkZBIW30V82xlVKpOnp6A4FnOYXxQiVm9sNaOVXc=
> =34TJ
> -----END PGP SIGNATURE-----
Reply | Threaded
Open this post in threaded view
|

Re: regression: TestObjectsAsMethods crash in 4.19.5 (not in 4.16.7)

David T. Lewis
 
I'm not yet sure what to do about it, but the problem was introduced last
April in VMMaker-dtl.415. Apparently the obsolete primitiveInvokeObjectAsMethod
was not quite as obsolete as I thought it was.

Dave


Name: VMMaker-dtl.415
Author: dtl
Time: 19 April 2020, 5:30:30.208 pm
UUID: 747f8591-57e6-4950-858a-c7fbc22ad1c2
Ancestors: VMMaker-dtl.414

VMMaker 4.19.1
Required for Squeak trunk Collections-eem.885 and above.

Install primitiveArrayBecomeOneWayNoCopyHash as primitive 248, replacing obsolete primitiveInvokeObjectAsMethod.

Fix 128 primitiveArrayBecome to match oscog logic. This a fix from VMMaker.oscog-eem.647 which Eliot explained as follows:
Fix primitiveArrayBecome (the two-way become); it should /not/
specify copyHash.  ObjectMemory ignores the copyHash flag when doing a two-way become, hence the wrong sense of the flag had
no effect.  Hence correctly evaluate testBecomeIdentityHash.

The primitives now do this:
  primitive 72: twoWay: false copyHash: true
  primitive 128: twoWay: true copyHash: false
  primitive 248: twoWay: false copyHash: false
  primitive 249: twoWay: false copyHash: <arg 3 value>



On Sun, Feb 21, 2021 at 11:29:13AM -0500, David T. Lewis wrote:

>  
> Thanks.
>
> Confirmed on Linux amd64, so it is not Solaris/OpenIndiana issue.
>
> Dave
>
> On Sun, Feb 21, 2021 at 04:02:38PM +0100, [hidden email] wrote:
> >  
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA256
> >
> >
> > As can be seen in the screenshot at:
> >
> > http://docs.openindiana.org/handbook/community/squeak/index.html
> >
> > I'm deselecting the Tests-ObjectsAsMethods test (1 test),
> > because it causes (reproducible) SIGSEGV on Solaris cc/OpenIndiana gcc.
> >
> > I think the segmentation fault is new in recent 4.19, I think it didn't happen
> > a while ago in 4.16.
> >
> > I can test this as follows: when I install an older version
> >
> > squeak -version
> > 4.16.7-3775
> >
> > then I go into test runner: Tests-ObjectsAsMethods and select
> > TestObjectsAsMethods that works in 4.16.7
> >
> > Test Runner
> >
> > ...
> > TestObjectsAsMethods
> >
> > 3 run, 3 passes, 0 expected failures, 0 failures, 0 errors, 0 unexpected passes
> >
> > But it stopped working in 4.19.x which is from I believe from:
> >
> > ContextInterpreter VMMaker-dtl.422 uuid: e72b95a0-204e-45a1-a4e4-3ac3c9e7a51a
> >
> > the interp.c file is automatically generated from VMMaker-dtl.422.
> >
> > It's reproducible in the sense that if I deselect all tests, and just select
> > that one single test, I can repeatedly and reproducible SIGSEGV the VM.
> >
> > When I run the VM under a debugger:
> >
> > dbx: warning: Bad transition in runtime linker interface. CONSISTENT->CONSISTENT
> > t@1 (l@1) signal SEGV (no mapping at the fault address) in interpret at line 9120 in file "interp.c"
> >  9120   foo->freeContexts = longAt((newContext + (BASE_HEADER_SIZE)) + (0 << (SHIFT_FOR_WORD)));
> >
> > (dbx) where
> > current thread: t@1
> > =>[1] interpret(), line 9120 in "interp.c"
> >   [2] main(argc = 1, argv = 0xfeffe250, envp = 0xfeffe258), line 1484 in "sqUnixMain.c"
> >
> > The above is from Solaris with cc/dbx but the same thing appears to happen
> > for me on OpenIndiana with gcc/gdb.
> >
> > Unfortunately because the code of interp.c is automatically generated,
> > it looks complicated to me and I don't see what's wrong with those "
> > freeContext" code.
> >
> > The crash appears to be in:
> >
> >                                 /* begin internalActivateNewMethod */
> >                                 methodHeader = longAt((foo->newMethod + (BASE_HEADER_SIZE)) + (HeaderIndex << (SHIFT_FOR_WORD)));
> >                                 needsLarge = methodHeader & LargeContextBit;
> >                                 if ((needsLarge == 0) && (foo->freeContexts != NilContext)) {
> >                                         newContext = foo->freeContexts;
> >                                         /* begin setFreeContextsAfter: */
> >                                         foo->freeContexts = longAt((newContext + (BASE_HEADER_SIZE)) + (0 << (SHIFT_FOR_WORD)));
> >                                 } else {
> >                                         /* begin externalizeIPandSP */
> >
> > Has anyone seen this ?
> >
> > Also what is the test
> > TestObjectsAsMethods
> > actually doing please ? what is it testing ?
> >
> >
> > Regards,
> > David Stes
> >
> >
> >
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v2
> >
> > iQEcBAEBCAAGBQJgMnV5AAoJEAwpOKXMq1MafEgH/3EWQxaSaVm2g4r/2p99Wc21
> > P+U+ijqKpVTDfJ1smwV/GsgF0V8ZrZky0k7BzRDAyq3Gi/HGVm0e2bqOAKa1fo2Y
> > MUS9JHOW4Lys+9qWgT0aLiWypjYlzThtYS0/Lfh013tsF1bBv2eppTceUyq/Zitv
> > 6J0IFvDOspMN/zHwBw/ux3H6uR049boZ3mvk23sp3KIHDc2Yw2kF4TAXBwjZXmVO
> > UFlIAC4EAahrtNZyLZSIBDbsXOl+wJGmQTsOIBG81pfSFpP6RBrIARcu6enZC3Wc
> > bwsvWYADs49SKgVq3NBovfyzkZBIW30V82xlVKpOnp6A4FnOYXxQiVm9sNaOVXc=
> > =34TJ
> > -----END PGP SIGNATURE-----
Reply | Threaded
Open this post in threaded view
|

Re: regression: TestObjectsAsMethods crash in 4.19.5 (not in 4.16.7)

stes
In reply to this post by stes
 
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256


> Install primitiveArrayBecomeOneWayNoCopyHash as primitive 248
> replacing obsolete primitiveInvokeObjectAsMethod.

That must be it, I guess.

TestObjectsAsMethods used to work for me with the VM 4.16.7

Test Runner

...
TestObjectsAsMethods

3 run, 3 passes, 0 expected failures, 0 failures, 0 errors, 0 unexpected passes

I have no idea whether the test can be simply removed,
maybe if the test is obsoleted, the problem is solved!

But that still leaves the issue of how to use the new VM with an *OLD* image!

I must add that I'm not sure what TestObjectsAsMethods is doing,
and whether there is any code out there that uses this functionality.

Regards,
David Stes

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBCAAGBQJgNMTZAAoJEAwpOKXMq1Ma33QH/joLL1fRFiOiOWVowpB6ESX0
qeVlQvRm02HFk9+che3d3eirqqpp73Vucj4TQabgXsAfJ4GwYKWugNgReyMTJVeK
M62Ue5+UkuiRBQUTxlw5wR3FPsI8OxDP0XBIiad0Qqk8uPjLWcx6uBGXR4NCNE0r
D4Jy94o7L9g+b0zuGhJ711zfLCoicAIkipifCqCjneHzbZK8VXcY7kgdg62PaXcw
JH7DN/glh8gkOyt8qWY+mt13BchEswIh/8m0LdIruviMJtQYUy27/zqadbcf3BFL
2bnkRlVQj+bDLfxhVhr4GAsZHYSrF1zFdNqrO9Xb1fTSj8IAMcDi2exISNsceCs=
=Gqk7
-----END PGP SIGNATURE-----
Reply | Threaded
Open this post in threaded view
|

Re: regression: TestObjectsAsMethods crash in 4.19.5 (not in 4.16.7)

stes
 
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256


> Install primitiveArrayBecomeOneWayNoCopyHash as primitive 248
> replacing obsolete primitiveInvokeObjectAsMethod.

Any news on this Tests-ObjectsAsMethods issue ?

The purpose of those tests are not clear to me;

Perhaps the change for the "primitives" which was made, can be reverted ?

Possibly that creates a new problem for primitiveArrayBecomeOneWayNoCopyHash.

David Stes

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBCAAGBQJgPSIjAAoJEAwpOKXMq1MaKBoIALZFV2hJydzkLUcLB1YDIS5D
7M3E/ucLxvfWoCBygz0/r/TLou2Sk57x9WpGTWpBkMwOlQiPfL5q10Zq5iOZ+qDA
Zbdz3iUHEV8FlVTGoOD4HR+eoblfnNhE6KhhkKb5YqmIVkpXr1UNY5ao/MPOFYV0
s12lTGqznhoh5ZI+i2U+sTDJljNiJojxzvWdq5rJ658PISWFPuqw/YJamQZvKiWx
/HFQf+om5MKPt/jtzfpCxskuJ5evU2XBcTb6dFXzNgeaoqJEsLnnUj08vubHMA34
mRYHk+Pp4SxMYV/0CJ3dWOgOirMN7yVi7tTdKAdJeEmoPqP4cMUMbb8C+xOA5Uc=
=5Ffs
-----END PGP SIGNATURE-----
Reply | Threaded
Open this post in threaded view
|

Re: regression: TestObjectsAsMethods crash in 4.19.5 (not in 4.16.7)

David T. Lewis
 
On Mon, Mar 01, 2021 at 06:20:58PM +0100, [hidden email] wrote:

>  
> > Install primitiveArrayBecomeOneWayNoCopyHash as primitive 248
> > replacing obsolete primitiveInvokeObjectAsMethod.
>
> Any news on this Tests-ObjectsAsMethods issue ?
>
> The purpose of those tests are not clear to me;
>
> Perhaps the change for the "primitives" which was made, can be reverted ?
>
> Possibly that creates a new problem for primitiveArrayBecomeOneWayNoCopyHash.
>
> David Stes
>

You can consider this a bug in the most recent interpreter VMs. I had
failed to notice that there is a hard coded reference to that primitive
number within the VM itself, and this reference is now resulting in
invocation of the wrong function.

A trivial fix is to rearrange some primtive number assignments, but the
correct thing to do is adopt the logic that Eliot uses in oscog so that
the function is not invoked as a "primitive" at all.

I'll try to follow up on this next week.

Dave