-----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----- |
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----- |
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----- |
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----- |
-----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----- |
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 |
Free forum by Nabble | Edit this page |