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!