GDBArch_x86.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 25 Feb 2019 17:55:20 +0000
changeset 177 e7bd05df3d6b
parent 157 4774e35d3396
child 259 651864c2aa29
permissions -rw-r--r--
Introduce new internal API `GDBDebuggerObject >> updateFrom:` to update one ("old") object with another one ("new"). This is used in cases when we want to preserve an identity of API objects.
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
157
4774e35d3396 Portability: guard loading of UDIS86
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
    58
     Smalltalk isSmalltalkX ifTrue:[
4774e35d3396 Portability: guard loading of UDIS86
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
    59
        (Smalltalk includesKey:#UDIS86) ifFalse:[
4774e35d3396 Portability: guard loading of UDIS86
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
    60
            PackageLoadError ignoreIn:[
4774e35d3396 Portability: guard loading of UDIS86
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
    61
                Smalltalk loadPackage: 'jv:dragonfly/udis86sx'.
4774e35d3396 Portability: guard loading of UDIS86
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
    62
            ]
4774e35d3396 Portability: guard loading of UDIS86
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
    63
        ].
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    64
    ].
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
    "/ 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
    67
157
4774e35d3396 Portability: guard loading of UDIS86
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
    68
    "Modified: / 30-10-2018 / 19:39:05 / 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
    69
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    70
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    71
!GDBArch_x86 methodsFor:'accessing'!
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
name
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    74
    ^ mode == 64 ifTrue:[ 'x86_64' ] ifFalse:[ 'i386' ]
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    "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
    77
    "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
    78
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    80
!GDBArch_x86 methodsFor:'initialization'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    81
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    82
setMode: anInteger
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    83
    self assert: (anInteger == 32 or:[ anInteger == 64 ]).
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    84
    mode := anInteger.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    85
    (Smalltalk includesKey:#UDIS86) ifTrue:[
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    86
        disassembler := (Smalltalk at:#UDIS86) new.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    87
        disassembler mode: mode.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    88
        buffer := ExternalBytes unprotectedNew: 16
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    89
    ].
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    90
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    91
    "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
    92
    "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
    93
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    94
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
    95
!GDBArch_x86 methodsFor:'queries'!
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
sizeofPointer
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    ^ 8
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
    "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
   101
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   103
!GDBArch_x86 methodsFor:'utilities'!
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
disassemble1: bytes pc: pc
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   106
    "
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   107
    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
   108
    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
   109
    conform to GDBInstructionDissection protocol.
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
    @see GDBInstructionDissection
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   112
    "
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   113
    disassembler isNil ifTrue:[ 
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   114
        "/ UDIS86 not available.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   115
        ^ super disassemble1: bytes pc: pc
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   116
    ].
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   117
    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
   118
    disassembler buffer: buffer pc: pc.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   119
    ^ disassembler disassemble
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   120
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   121
    "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
   122
    "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
   123
! !
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
!GDBArch_x86 class methodsFor:'documentation'!
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
version_HG
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
    ^ '$Changeset: <not expanded> $'
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
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   132
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   133
GDBArch_x86 initialize!