VDBAddressRange.st
author Jan Vrany <jan.vrany@labware.com>
Tue, 26 Jul 2022 15:01:33 +0100
changeset 265 f2470f0dd9cd
parent 264 23960fcb9dac
permissions -rw-r--r--
Do not show address for (pseudo) instructions with no code While such instructions do not appear in GDB-produced disassembly, they may appear in some manually-generated instruction lists. One example of such (pseudo) instruction is label.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
264
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
     2
jv:libgdbs - GNU Debugger Interface Library
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Copyright (C) 2015-now Jan Vrany
264
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
     4
Copyright (C) 2022 LabWare
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
264
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
     6
Permission is hereby granted, free of charge, to any person obtaining a copy
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
     7
of this software and associated documentation files (the 'Software'), to deal
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
     8
in the Software without restriction, including without limitation the rights
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
     9
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    10
copies of the Software, and to permit persons to whom the Software is
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    11
furnished to do so, subject to the following conditions:
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
264
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    13
The above copyright notice and this permission notice shall be included in all
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    14
copies or substantial portions of the Software.
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    15
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    16
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    17
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    18
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    19
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    20
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    21
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    22
SOFTWARE.
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
"
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
"{ Package: 'jv:vdb' }"
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
"{ NameSpace: Smalltalk }"
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
GDBDebuggerObject subclass:#VDBAddressRange
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
	instanceVariableNames:'start end'
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
	classVariableNames:''
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
	poolDictionaries:''
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
	category:'VDB-Expressions'
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
!VDBAddressRange class methodsFor:'documentation'!
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
copyright
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
"
264
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    39
jv:libgdbs - GNU Debugger Interface Library
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
Copyright (C) 2015-now Jan Vrany
264
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    41
Copyright (C) 2022 LabWare
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    42
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    43
Permission is hereby granted, free of charge, to any person obtaining a copy
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    44
of this software and associated documentation files (the 'Software'), to deal
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    45
in the Software without restriction, including without limitation the rights
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    46
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    47
copies of the Software, and to permit persons to whom the Software is
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    48
furnished to do so, subject to the following conditions:
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
264
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    50
The above copyright notice and this permission notice shall be included in all
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    51
copies or substantial portions of the Software.
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
264
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    53
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    54
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    55
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    56
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    57
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    58
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23960fcb9dac Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 192
diff changeset
    59
SOFTWARE.
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
"
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
! !
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
!VDBAddressRange class methodsFor:'instance creation'!
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
from: startAddr to: endAddr
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    ^ self new setStart: startAddr end: endAddr
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    "Created: / 21-10-2019 / 00:02:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
! !
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
!VDBAddressRange methodsFor:'accessing'!
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
disassemble
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    | result disassembly arch |
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    result := debugger send: (GDBMI_data_disassemble arguments: (Array with: '-s' with: start value with: '-e' with: end value with: '--' with: 5)).
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    disassembly := result propertyAt: 'asm_insns'.
192
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    79
    disassembly isNil ifTrue:[  
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    80
        "/ Empty range?
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    81
        disassembly := #()
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    82
    ] ifFalse:[
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    83
        arch := debugger selectedInferior threads anyOne stack first arch.
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    84
        disassembly do:[:each | each setDebugger: debugger; setArchitecture: arch ].
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    85
    ].
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    ^ disassembly
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    "Created: / 21-10-2019 / 00:26:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
192
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    89
    "Modified: / 22-05-2020 / 14:07:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
188
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
! !
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
!VDBAddressRange methodsFor:'converting'!
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
asString
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    ^ start asString , ' , ' , end asString
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    "Created: / 10-11-2019 / 23:40:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
! !
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
!VDBAddressRange methodsFor:'initialization'!
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
setStart: startAddr end: endAddr
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    start := startAddr.
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
    end := endAddr.
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
    "Created: / 20-10-2019 / 23:47:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
! !
7080f4698aec UI: add `VDBDisassemblyApplication`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
192
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
   109
!VDBAddressRange class methodsFor:'documentation'!
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
   110
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
   111
version_HG
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
   112
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
   113
    ^ '$Changeset: <not expanded> $'
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
   114
! !
045efd98ea95 Fix `VDBAddressRange >> disassemble` w.r.t empty range
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
   115