GDBInstructionDissection.st
author Jan Vrany <jan.vrany@labware.com>
Mon, 04 Sep 2023 14:00:57 +0100
changeset 314 4a2ef5a087f0
parent 272 cdd1c9ad00de
permissions -rw-r--r--
Add MI parser test This commit add test to parse real-world frament which failed to Pharo properly at some point. It is encoded here as bytearray to make sure all the characters are preserved exactly as they were.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
jv:libgdbs - GNU Debugger Interface Library
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Copyright (C) 2015-now Jan Vrany
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 261
diff changeset
     4
Copyright (C) 2022-2023 LabWare
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
     6
Permission is hereby granted, free of charge, to any person obtaining a copy
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
     7
of this software and associated documentation files (the 'Software'), to deal
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
     8
in the Software without restriction, including without limitation the rights
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
     9
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    10
copies of the Software, and to permit persons to whom the Software is
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    11
furnished to do so, subject to the following conditions:
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    13
The above copyright notice and this permission notice shall be included in all
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    14
copies or substantial portions of the Software.
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    16
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    17
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    18
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    19
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    20
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    21
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    22
SOFTWARE.
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
"{ Package: 'jv:libgdbs' }"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
"{ NameSpace: Smalltalk }"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
Object subclass:#GDBInstructionDissection
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
	instanceVariableNames:''
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
	classVariableNames:'Null'
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
	poolDictionaries:''
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 261
diff changeset
    32
	category:'GDB-Internal'
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
!GDBInstructionDissection class methodsFor:'documentation'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
copyright
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
jv:libgdbs - GNU Debugger Interface Library
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
Copyright (C) 2015-now Jan Vrany
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 261
diff changeset
    41
Copyright (C) 2022-2023 LabWare
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    43
Permission is hereby granted, free of charge, to any person obtaining a copy
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    44
of this software and associated documentation files (the 'Software'), to deal
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    45
in the Software without restriction, including without limitation the rights
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    46
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    47
copies of the Software, and to permit persons to whom the Software is
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    48
furnished to do so, subject to the following conditions:
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    50
The above copyright notice and this permission notice shall be included in all
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    51
copies or substantial portions of the Software.
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    53
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    54
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    55
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    56
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    57
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    58
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 133
diff changeset
    59
SOFTWARE.
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
!GDBInstructionDissection class methodsFor:'initialization'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
initialize
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    "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:
diff changeset
    67
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    "/ please change as required (and remove this comment)
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    Null := self new
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    "Modified: / 16-08-2018 / 10:27:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
!GDBInstructionDissection class methodsFor:'accessing'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
null
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    ^ Null
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    "Created: / 16-08-2018 / 10:27:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
!GDBInstructionDissection methodsFor:'accessing'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
261
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    85
branchTargetFrom: thisInstructionAddress 
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    86
    "Return an absolute address of next instruction if branch is taken.
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    87
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    88
     The argument - `thisInstructionAddress` - is an addres of the branch
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    89
     instruction (that is, the address of the receiver).
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    90
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    91
     Assumes that this instruction is a branch instruction."
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    "Return and address of next instruction if branch is taken.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
     Assumes that this instruction is a branch instruction."
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
261
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    95
    self shouldNeverBeSent "since isBranch returns false"
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
261
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    97
    "Created: / 01-09-2022 / 22:44:47 / Jan Vrany <jan.vrany@labware.com>"
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
!GDBInstructionDissection methodsFor:'testing'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
isBranch
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    "Return `true` is this instruction is some sort of branch instruction."
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
    ^ false
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
    "Created: / 03-07-2018 / 14:39:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    "Modified (comment): / 16-08-2018 / 14:02:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
isReturn
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    "Return `true` is this instruction is a return"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    ^ false
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    "Created: / 03-07-2018 / 14:39:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    "Modified (comment): / 16-08-2018 / 14:02:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
261
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   118
!GDBInstructionDissection class methodsFor:'documentation'!
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   119
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   120
version_HG
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   121
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   122
    ^ '$Changeset: <not expanded> $'
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   123
! !
45c8f1eedf12 Rename `GDBInstructionDissection >> #branchTarget` to `branchTargetFrom:`
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   124
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
GDBInstructionDissection initialize!