VMOffsets.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 29 Aug 2018 21:32:19 +0100
changeset 50 7f439240d923
parent 23 d2d9a2d4d6bf
permissions -rw-r--r--
UDIS86: fixed crash caused by keeping `ud_t` structure on smalltalk heap ...and this the structure may move. Thisx resulted on hard-to-debug heap corruptions because `ud_t.asm_buf` is initializad to a pointer to `ud_t.asm_buf_int`. Therefore when the bytearray moved, the pointer become invalid and subsequent call to `ud_disassemble()` smashed whatever object happened to be where the bytearray were. The fix is straigtforward, use `ExternalBytes`! Sigh.

"
    Copyright (c) 2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the 'Software'), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.
"
"{ Package: 'jv:dragonfly' }"

"{ NameSpace: Smalltalk }"

SharedPool subclass:#VMOffsets
	instanceVariableNames:''
	classVariableNames:'SIZEOF_CONTEXTHEADER SIZEOF_CONPRIVATE
		OFFS__BYTEOFFS_CONTEXT_SENDER OFFS__BYTEOFFS_CONTEXT_HOME
		OFFS__BYTEOFFS_CONTEXT_RECEIVER OFFS__BYTEOFFS_CONTEXT_SELECTOR
		OFFS__BYTEOFFS_CONTEXT_SEARCHCLASS OFFS__BYTEOFFS_CONTEXT_LINENO
		OFFS__BYTEOFFS_CONTEXT_RETVAL OFFS___ySTACK_HANDLER__
		OFFS___ySTACK_HANDLER_N__ OFFS___ySTACK_HANDLER_U__
		OFFS___MKLARGEINT OFFS___store OFFS___new OFFS__SEND0 OFFS__SEND1
		OFFS__SEND2 OFFS__SEND3 OFFS__SEND4 OFFS__SEND5 OFFS__SEND6
		OFFS__SEND7 OFFS__SEND8 OFFS__SEND9 OFFS__SEND10 OFFS__SEND11
		OFFS__SEND12 OFFS__SEND13 OFFS__SEND14 OFFS__SEND15
		OFFS___ILC_CHECK0__ OFFS___ILC_CHECK1__ OFFS___ILC_CHECK2__
		OFFS___ILC_CHECK3__ OFFS___ILC_CHECK4__ OFFS___ILC_CHECK5__
		OFFS___ILC_CHECK6__ OFFS___ILC_CHECK7__ OFFS___ILC_CHECK8__
		OFFS___ILC_CHECK9__ OFFS___ILC_CHECK10__ OFFS___ILC_CHECK11__
		OFFS___ILC_CHECK12__ OFFS___ILC_CHECK13__ OFFS___ILC_CHECK14__
		OFFS___ILC_CHECK15__ OFFS___ILC_CHECK0s__ OFFS___ILC_CHECK1s__
		OFFS___ILC_CHECK2s__ OFFS___ILC_CHECK3s__ OFFS___ILC_CHECK4s__
		OFFS___ILC_CHECK5s__ OFFS___ILC_CHECK6s__ OFFS___ILC_CHECK7s__
		OFFS___ILC_CHECK8s__ OFFS___ILC_CHECK9s__ OFFS___ILC_CHECK10s__
		OFFS___ILC_CHECK11s__ OFFS___ILC_CHECK12s__ OFFS___ILC_CHECK13s__
		OFFS___ILC_CHECK14s__ OFFS___ILC_CHECK15s__ OFFS___stackBottom__
		OFFS___stackTop__ OFFS___newNextPtr__ OFFS___newEndPtr__
		OFFS___newSpace__ OFFS___thisContext OFFS_true OFFS_false
		OFFS_Float OFFS_SmallInteger OFFS_UndefinedObject OFFS_Context
		OFFS_BlockContext OFFS_ShortFloat OFFS_trueStruct
		OFFS_falseStruct OFFS_jmp_SEND0 OFFS_jmp_SEND1 OFFS_jmp_SEND2
		OFFS_jmp_SEND3 OFFS_jmp_SEND4 OFFS_jmp_SEND5 OFFS_jmp_SEND6
		OFFS_jmp_SEND7 OFFS_jmp_SEND8 OFFS_jmp_SEND9 OFFS_jmp_SEND10
		OFFS_jmp_SEND11 OFFS_jmp_SEND12 OFFS_jmp_SEND13 OFFS_jmp_SEND14
		OFFS_jmp_SEND15 OFFS_jmp_SENDN OFFS_jmp__ySTACK_HANDLER__
		OFFS_jmp__ySTACK_HANDLER_U__ OFFS_jmp__ySTACK_HANDLER_N__
		OBJFUNCArgIndexReceiver OBJFUNCArgIndexSelector
		OBJFUNCArgIndexSearchClass OBJFUNCArgIndexILC
		OBJFUNCArgIndexArgBase OBJFUNCArgIndexArg1'
	poolDictionaries:''
	category:'System-Compiler-Interface'
!

!VMOffsets class methodsFor:'documentation'!

copyright
"
    Copyright (c) 2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the 'Software'), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.

"
! !

!VMOffsets class methodsFor:'class initialization'!

initialize
   self initializeC.
   OBJFUNCArgIndexReceiver := 1.
   OBJFUNCArgIndexSelector := 2.
   OBJFUNCArgIndexSearchClass := 3.
   OBJFUNCArgIndexILC := 4.
   OBJFUNCArgIndexArgBase := OBJFUNCArgIndexILC.
   OBJFUNCArgIndexArg1 := OBJFUNCArgIndexArgBase + 1.

    "Modified: / 20-04-2016 / 20:00:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

initializeC
%{
    @global(VMOffsets:SIZEOF_CONTEXTHEADER) = __MKINT(SIZEOF_CONTEXTHEADER);
    @global(VMOffsets:SIZEOF_CONPRIVATE) = __MKINT(SIZEOF_CONPRIVATE);
    @global(VMOffsets:OFFS__BYTEOFFS_CONTEXT_SENDER) = __MKINT(OFFS__BYTEOFFS_CONTEXT_SENDER);
    @global(VMOffsets:OFFS__BYTEOFFS_CONTEXT_HOME) = __MKINT(OFFS__BYTEOFFS_CONTEXT_HOME);
    @global(VMOffsets:OFFS__BYTEOFFS_CONTEXT_RECEIVER) = __MKINT(OFFS__BYTEOFFS_CONTEXT_RECEIVER);
    @global(VMOffsets:OFFS__BYTEOFFS_CONTEXT_SELECTOR) = __MKINT(OFFS__BYTEOFFS_CONTEXT_SELECTOR);
    @global(VMOffsets:OFFS__BYTEOFFS_CONTEXT_SEARCHCLASS) = __MKINT(OFFS__BYTEOFFS_CONTEXT_SEARCHCLASS);
    @global(VMOffsets:OFFS__BYTEOFFS_CONTEXT_LINENO) = __MKINT(OFFS__BYTEOFFS_CONTEXT_LINENO);
    @global(VMOffsets:OFFS__BYTEOFFS_CONTEXT_RETVAL) = __MKINT(OFFS__BYTEOFFS_CONTEXT_RETVAL);
    @global(VMOffsets:OFFS___ySTACK_HANDLER__) = __MKINT(OFFS___ySTACK_HANDLER__);
    @global(VMOffsets:OFFS___ySTACK_HANDLER_N__) = __MKINT(OFFS___ySTACK_HANDLER_N__);
    @global(VMOffsets:OFFS___ySTACK_HANDLER_U__) = __MKINT(OFFS___ySTACK_HANDLER_U__);
    @global(VMOffsets:OFFS___MKLARGEINT) = __MKINT(OFFS___MKLARGEINT);
    @global(VMOffsets:OFFS___store) = __MKINT(OFFS___store);
    @global(VMOffsets:OFFS___new) = __MKINT(OFFS___new);
    @global(VMOffsets:OFFS__SEND0) = __MKINT(OFFS__SEND0);
    @global(VMOffsets:OFFS__SEND1) = __MKINT(OFFS__SEND1);
    @global(VMOffsets:OFFS__SEND2) = __MKINT(OFFS__SEND2);
    @global(VMOffsets:OFFS__SEND3) = __MKINT(OFFS__SEND3);
    @global(VMOffsets:OFFS__SEND4) = __MKINT(OFFS__SEND4);
    @global(VMOffsets:OFFS__SEND5) = __MKINT(OFFS__SEND5);
    @global(VMOffsets:OFFS__SEND6) = __MKINT(OFFS__SEND6);
    @global(VMOffsets:OFFS__SEND7) = __MKINT(OFFS__SEND7);
    @global(VMOffsets:OFFS__SEND8) = __MKINT(OFFS__SEND8);
    @global(VMOffsets:OFFS__SEND9) = __MKINT(OFFS__SEND9);
    @global(VMOffsets:OFFS__SEND10) = __MKINT(OFFS__SEND10);
    @global(VMOffsets:OFFS__SEND11) = __MKINT(OFFS__SEND11);
    @global(VMOffsets:OFFS__SEND12) = __MKINT(OFFS__SEND12);
    @global(VMOffsets:OFFS__SEND13) = __MKINT(OFFS__SEND13);
    @global(VMOffsets:OFFS__SEND14) = __MKINT(OFFS__SEND14);
    @global(VMOffsets:OFFS__SEND15) = __MKINT(OFFS__SEND15);
    @global(VMOffsets:OFFS___ILC_CHECK0__) = __MKINT(OFFS___ILC_CHECK0__);
    @global(VMOffsets:OFFS___ILC_CHECK1__) = __MKINT(OFFS___ILC_CHECK1__);
    @global(VMOffsets:OFFS___ILC_CHECK2__) = __MKINT(OFFS___ILC_CHECK2__);
    @global(VMOffsets:OFFS___ILC_CHECK3__) = __MKINT(OFFS___ILC_CHECK3__);
    @global(VMOffsets:OFFS___ILC_CHECK4__) = __MKINT(OFFS___ILC_CHECK4__);
    @global(VMOffsets:OFFS___ILC_CHECK5__) = __MKINT(OFFS___ILC_CHECK5__);
    @global(VMOffsets:OFFS___ILC_CHECK6__) = __MKINT(OFFS___ILC_CHECK6__);
    @global(VMOffsets:OFFS___ILC_CHECK7__) = __MKINT(OFFS___ILC_CHECK7__);
    @global(VMOffsets:OFFS___ILC_CHECK8__) = __MKINT(OFFS___ILC_CHECK8__);
    @global(VMOffsets:OFFS___ILC_CHECK9__) = __MKINT(OFFS___ILC_CHECK9__);
    @global(VMOffsets:OFFS___ILC_CHECK10__) = __MKINT(OFFS___ILC_CHECK10__);
    @global(VMOffsets:OFFS___ILC_CHECK11__) = __MKINT(OFFS___ILC_CHECK11__);
    @global(VMOffsets:OFFS___ILC_CHECK12__) = __MKINT(OFFS___ILC_CHECK12__);
    @global(VMOffsets:OFFS___ILC_CHECK13__) = __MKINT(OFFS___ILC_CHECK13__);
    @global(VMOffsets:OFFS___ILC_CHECK14__) = __MKINT(OFFS___ILC_CHECK14__);
    @global(VMOffsets:OFFS___ILC_CHECK15__) = __MKINT(OFFS___ILC_CHECK15__);
    @global(VMOffsets:OFFS___ILC_CHECK0s__) = __MKINT(OFFS___ILC_CHECK0s__);
    @global(VMOffsets:OFFS___ILC_CHECK1s__) = __MKINT(OFFS___ILC_CHECK1s__);
    @global(VMOffsets:OFFS___ILC_CHECK2s__) = __MKINT(OFFS___ILC_CHECK2s__);
    @global(VMOffsets:OFFS___ILC_CHECK3s__) = __MKINT(OFFS___ILC_CHECK3s__);
    @global(VMOffsets:OFFS___ILC_CHECK4s__) = __MKINT(OFFS___ILC_CHECK4s__);
    @global(VMOffsets:OFFS___ILC_CHECK5s__) = __MKINT(OFFS___ILC_CHECK5s__);
    @global(VMOffsets:OFFS___ILC_CHECK6s__) = __MKINT(OFFS___ILC_CHECK6s__);
    @global(VMOffsets:OFFS___ILC_CHECK7s__) = __MKINT(OFFS___ILC_CHECK7s__);
    @global(VMOffsets:OFFS___ILC_CHECK8s__) = __MKINT(OFFS___ILC_CHECK8s__);
    @global(VMOffsets:OFFS___ILC_CHECK9s__) = __MKINT(OFFS___ILC_CHECK9s__);
    @global(VMOffsets:OFFS___ILC_CHECK10s__) = __MKINT(OFFS___ILC_CHECK10s__);
    @global(VMOffsets:OFFS___ILC_CHECK11s__) = __MKINT(OFFS___ILC_CHECK11s__);
    @global(VMOffsets:OFFS___ILC_CHECK12s__) = __MKINT(OFFS___ILC_CHECK12s__);
    @global(VMOffsets:OFFS___ILC_CHECK13s__) = __MKINT(OFFS___ILC_CHECK13s__);
    @global(VMOffsets:OFFS___ILC_CHECK14s__) = __MKINT(OFFS___ILC_CHECK14s__);
    @global(VMOffsets:OFFS___ILC_CHECK15s__) = __MKINT(OFFS___ILC_CHECK15s__);
    @global(VMOffsets:OFFS___stackBottom__) = __MKINT(OFFS___stackBottom__);
    @global(VMOffsets:OFFS___stackTop__) = __MKINT(OFFS___stackTop__);
    @global(VMOffsets:OFFS___newNextPtr__) = __MKINT(OFFS___newNextPtr__);
    @global(VMOffsets:OFFS___newEndPtr__) = __MKINT(OFFS___newEndPtr__);
    @global(VMOffsets:OFFS___newSpace__) = __MKINT(OFFS___newSpace__);
    @global(VMOffsets:OFFS___thisContext) = __MKINT(OFFS___thisContext);
    @global(VMOffsets:OFFS_true) = __MKINT(OFFS_true);
    @global(VMOffsets:OFFS_false) = __MKINT(OFFS_false);
    @global(VMOffsets:OFFS_Float) = __MKINT(OFFS_Float);
    @global(VMOffsets:OFFS_SmallInteger) = __MKINT(OFFS_SmallInteger);
    @global(VMOffsets:OFFS_UndefinedObject) = __MKINT(OFFS_UndefinedObject);
    @global(VMOffsets:OFFS_Context) = __MKINT(OFFS_Context);
    @global(VMOffsets:OFFS_BlockContext) = __MKINT(OFFS_BlockContext);
    @global(VMOffsets:OFFS_ShortFloat) = __MKINT(OFFS_ShortFloat);
    @global(VMOffsets:OFFS_trueStruct) = __MKINT(OFFS_trueStruct);
    @global(VMOffsets:OFFS_falseStruct) = __MKINT(OFFS_falseStruct);
    @global(VMOffsets:OFFS_jmp_SEND0) = __MKINT(OFFS_jmp_SEND0);
    @global(VMOffsets:OFFS_jmp_SEND1) = __MKINT(OFFS_jmp_SEND1);
    @global(VMOffsets:OFFS_jmp_SEND2) = __MKINT(OFFS_jmp_SEND2);
    @global(VMOffsets:OFFS_jmp_SEND3) = __MKINT(OFFS_jmp_SEND3);
    @global(VMOffsets:OFFS_jmp_SEND4) = __MKINT(OFFS_jmp_SEND4);
    @global(VMOffsets:OFFS_jmp_SEND5) = __MKINT(OFFS_jmp_SEND5);
    @global(VMOffsets:OFFS_jmp_SEND6) = __MKINT(OFFS_jmp_SEND6);
    @global(VMOffsets:OFFS_jmp_SEND7) = __MKINT(OFFS_jmp_SEND7);
    @global(VMOffsets:OFFS_jmp_SEND8) = __MKINT(OFFS_jmp_SEND8);
    @global(VMOffsets:OFFS_jmp_SEND9) = __MKINT(OFFS_jmp_SEND9);
    @global(VMOffsets:OFFS_jmp_SEND10) = __MKINT(OFFS_jmp_SEND10);
    @global(VMOffsets:OFFS_jmp_SEND11) = __MKINT(OFFS_jmp_SEND11);
    @global(VMOffsets:OFFS_jmp_SEND12) = __MKINT(OFFS_jmp_SEND12);
    @global(VMOffsets:OFFS_jmp_SEND13) = __MKINT(OFFS_jmp_SEND13);
    @global(VMOffsets:OFFS_jmp_SEND14) = __MKINT(OFFS_jmp_SEND14);
    @global(VMOffsets:OFFS_jmp_SEND15) = __MKINT(OFFS_jmp_SEND15);
    @global(VMOffsets:OFFS_jmp_SENDN) = __MKINT(OFFS_jmp_SENDN);
    @global(VMOffsets:OFFS_jmp__ySTACK_HANDLER__) = __MKINT(OFFS_jmp__ySTACK_HANDLER__);
    @global(VMOffsets:OFFS_jmp__ySTACK_HANDLER_U__) = __MKINT(OFFS_jmp__ySTACK_HANDLER_U__);
    @global(VMOffsets:OFFS_jmp__ySTACK_HANDLER_N__) = __MKINT(OFFS_jmp__ySTACK_HANDLER_N__);

%}.

    "Created: / 25-01-2016 / 14:20:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!VMOffsets class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
! !


VMOffsets initialize!