GDBArch_x86.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 22 Sep 2018 00:48:20 +0100
changeset 142 23eeecb22a2c
parent 133 026074322527
child 157 4774e35d3396
permissions -rw-r--r--
Fix initialization of `GDBArch_x86` ...to handle case when package `jv:dragonfly/udis86sx` is not available. This used to raise an error which caused VDB startup failure.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
jv:libgdbs - GNU Debugger Interface Library
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Copyright (C) 2015-now Jan Vrany
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
This library is free software; you can redistribute it and/or
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
modify it under the terms of the GNU Lesser General Public
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
License as published by the Free Software Foundation; either
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
version 2.1 of the License. 
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
This library is distributed in the hope that it will be useful,
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
Lesser General Public License for more details.
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
You should have received a copy of the GNU Lesser General Public
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
License along with this library; if not, write to the Free Software
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
"{ Package: 'jv:libgdbs' }"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ NameSpace: Smalltalk }"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    23
GDBArchitecture subclass:#GDBArch_x86
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    24
	instanceVariableNames:'mode disassembler buffer'
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	classVariableNames:''
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	poolDictionaries:''
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	category:'GDB-Core'
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    30
!GDBArch_x86 class methodsFor:'documentation'!
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
copyright
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
jv:libgdbs - GNU Debugger Interface Library
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
Copyright (C) 2015-now Jan Vrany
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
This library is free software; you can redistribute it and/or
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
modify it under the terms of the GNU Lesser General Public
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
License as published by the Free Software Foundation; either
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
version 2.1 of the License. 
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
This library is distributed in the hope that it will be useful,
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
but WITHOUT ANY WARRANTY; without even the implied warranty of
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
Lesser General Public License for more details.
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
You should have received a copy of the GNU Lesser General Public
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
License along with this library; if not, write to the Free Software
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    53
!GDBArch_x86 class methodsFor:'initialization'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    54
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    55
initialize
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    56
    "Invoked at system start or when the class is dynamically loaded."
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    57
142
23eeecb22a2c Fix initialization of `GDBArch_x86`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
    58
    (Smalltalk includesKey:#UDIS86) ifFalse:[
23eeecb22a2c Fix initialization of `GDBArch_x86`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
    59
        PackageLoadError ignoreIn:[
23eeecb22a2c Fix initialization of `GDBArch_x86`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
    60
            Smalltalk loadPackage: 'jv:dragonfly/udis86sx'.
23eeecb22a2c Fix initialization of `GDBArch_x86`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
    61
        ]
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    62
    ].
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    63
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    64
    "/ please change as required (and remove this comment)
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    65
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    66
    "Modified: / 16-08-2018 / 13:59:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    67
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    68
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    69
!GDBArch_x86 methodsFor:'accessing'!
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
name
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    72
    ^ mode == 64 ifTrue:[ 'x86_64' ] ifFalse:[ 'i386' ]
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    "Created: / 16-08-2018 / 07:37:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    75
    "Modified: / 16-08-2018 / 11:01:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    78
!GDBArch_x86 methodsFor:'initialization'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    79
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    80
setMode: anInteger
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    81
    self assert: (anInteger == 32 or:[ anInteger == 64 ]).
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    82
    mode := anInteger.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    83
    (Smalltalk includesKey:#UDIS86) ifTrue:[
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    84
        disassembler := (Smalltalk at:#UDIS86) new.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    85
        disassembler mode: mode.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    86
        buffer := ExternalBytes unprotectedNew: 16
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    87
    ].
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    88
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    89
    "Created: / 16-08-2018 / 11:00:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    90
    "Modified: / 20-08-2018 / 07:53:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    91
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    92
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    93
!GDBArch_x86 methodsFor:'queries'!
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
sizeofPointer
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
    ^ 8
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    "Created: / 16-08-2018 / 09:35:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   101
!GDBArch_x86 methodsFor:'utilities'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   102
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   103
disassemble1: bytes pc: pc
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   104
    "
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   105
    Disassemble one instruction from given bytes (as ByteArray)
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   106
    and return the instruction dissection. Returned object must
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   107
    conform to GDBInstructionDissection protocol.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   108
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   109
    @see GDBInstructionDissection
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   110
    "
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   111
    disassembler isNil ifTrue:[ 
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   112
        "/ UDIS86 not available.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   113
        ^ super disassemble1: bytes pc: pc
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   114
    ].
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   115
    buffer replaceBytesFrom: 1  to: bytes size with: bytes startingAt: 1.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   116
    disassembler buffer: buffer pc: pc.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   117
    ^ disassembler disassemble
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   118
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   119
    "Created: / 16-08-2018 / 11:07:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   120
    "Modified: / 16-08-2018 / 14:00:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   121
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   122
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   123
!GDBArch_x86 class methodsFor:'documentation'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   124
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   125
version_HG
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   126
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   127
    ^ '$Changeset: <not expanded> $'
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   128
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   129
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   130
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   131
GDBArch_x86 initialize!