GDBArchitecture.st
author Jan Vrany <jan.vrany@labware.com>
Thu, 07 Dec 2023 12:33:31 +0000
changeset 322 1b26d0a9560c
parent 272 cdd1c9ad00de
permissions -rw-r--r--
Emit and handle (custom) `-register-changed` notification This commit adds new (custom) asynchronous notification about register value being changed. Standard GDB does not notify MI clients about register value being changed when debugging (for example, by CLI command `set $rax = 1` or via Python's `Value.assign()`). This caused libgdb's register value cache being out of sync. In the past, this was partially worked around by manually emiting the notification on `GDBRegisterWithValue` APIs, but this did not (and could not) handle the case register was changed from GDB command line. To solve this problem, this commit installs a custom Python event handler that emits new GDB/MI notification - `-register-changed` - whenever a register changes after debugee is stopped. This has been enabled by upstream GDB commit 4825fd "gdb/python: implement support for sending custom MI async notifications" On libgdbs side, complete inferior state is invalidated. In theory, one could carefully invalidate only the changed `GDBRegisterWithValue` but in certain cases this could also change the backtrace (for example, if one updates stack pointer) or position in code. So it seems safer to just invalidate everything.
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
272
cdd1c9ad00de Change class categories to facilitate Pharo port
Jan Vrany <jan.vrany@labware.com>
parents: 262
diff changeset
     4
Copyright (C) 2021-2023 LabWare
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 241
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: 241
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: 241
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: 241
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: 241
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: 241
diff changeset
    11
furnished to do so, subject to the following conditions:
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 241
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: 241
diff changeset
    14
copies or substantial portions of the Software.
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 241
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: 241
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: 241
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: 241
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: 241
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: 241
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: 241
diff changeset
    22
SOFTWARE.
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
"{ Package: 'jv:libgdbs' }"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
"{ NameSpace: Smalltalk }"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
Object subclass:#GDBArchitecture
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
	instanceVariableNames:''
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
	classVariableNames:'Architectures'
70c17add3b24 Introduces a model of architectures
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: 262
diff changeset
    32
	category:'GDB'
132
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
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
!GDBArchitecture class methodsFor:'documentation'!
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
copyright
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
jv:libgdbs - GNU Debugger Interface Library
70c17add3b24 Introduces a model of architectures
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: 262
diff changeset
    41
Copyright (C) 2021-2023 LabWare
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 241
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: 241
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: 241
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: 241
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: 241
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: 241
diff changeset
    48
furnished to do so, subject to the following conditions:
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 241
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: 241
diff changeset
    51
copies or substantial portions of the Software.
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 241
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: 241
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: 241
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: 241
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: 241
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: 241
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: 241
diff changeset
    59
SOFTWARE.
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
!
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
documentation
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
    Sub-instances of GDBArchitecture models a target 
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    architecture such as x86_64, PowerPC or RISC-V and
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    provides architecture-specific services.
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    In GDB, each frame has associated architecture (and
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    may differ from architecture of other frames!!)
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    [author:]
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
        Jan Vrany <jan.vrany@fit.cvut.cz>
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
    [instance variables:]
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
    [class variables:]
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
    [see also:]
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
!GDBArchitecture class methodsFor:'initialization'!
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
initialize
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    "Invoked at system start or when the class is dynamically loaded."
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    "/ please change as required (and remove this comment)
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
135
6efae6456f14 Added pool `GDBStopReasons` with constants for (know) reasons
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
    91
    Architectures := Dictionary new
205
26ed194991b7 Add RISC-V architecture definition
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    92
                        at: 'i386'        put: (GDBArch_x86 new setMode: 32; yourself);
26ed194991b7 Add RISC-V architecture definition
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    93
                        at: 'i386:x86-64' put: (GDBArch_x86 new setMode: 64; yourself);
26ed194991b7 Add RISC-V architecture definition
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    94
                        at: 'riscv:rv64'  put: (GDBArch_RV64 new);
262
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    95
                        at: 'powerpc:common64' put: (GDBArch_PPC64 new);
205
26ed194991b7 Add RISC-V architecture definition
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    96
                        yourself.
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
205
26ed194991b7 Add RISC-V architecture definition
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
    98
    "Created: / 22-05-2020 / 13:21:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
262
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
    99
    "Modified: / 21-11-2022 / 17:11:05 / Jan Vrany <jan.vrany@labware.com>"
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
! !
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
!GDBArchitecture class methodsFor:'instance creation'!
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
named: aString
135
6efae6456f14 Added pool `GDBStopReasons` with constants for (know) reasons
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 133
diff changeset
   105
    Architectures isEmptyOrNil ifTrue:[self initialize].
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
    ^ Architectures 
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
        at: aString 
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
        ifAbsentPut:[GDBArch_unknown new setName: aString ].
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    "
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   111
    GDBArchitecture named: 'i386:x86-64'
205
26ed194991b7 Add RISC-V architecture definition
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
   112
    GDBArchitecture named: 'riscv:rv64'
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
    GDBArchitecture named: 'mips'
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    "
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
    "Created: / 16-08-2018 / 08:57:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
205
26ed194991b7 Add RISC-V architecture definition
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 188
diff changeset
   117
    "Modified (comment): / 22-05-2020 / 13:22:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
188
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   118
!
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   119
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   120
unknown
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   121
    ^ GDBArchitecture named: 'unknown'
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   122
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   123
    "Created: / 10-06-2019 / 12:37:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   124
    "Modified: / 10-06-2019 / 14:38:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
!GDBArchitecture methodsFor:'accessing'!
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
name
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
    ^ self subclassResponsibility
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    "Created: / 16-08-2018 / 07:35:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
206
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   133
!
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   134
262
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   135
registerNameOfProgramCounter
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   136
    "Returns the name of program counter register. For example,
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   137
     on i386 it is 'eip', on x86_64 it is 'rip'."
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   138
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   139
    ^ 'pc' "This should be a good guess"
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   140
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   141
    "Created: / 09-12-2022 / 12:47:44 / Jan Vrany <jan.vrany@labware.com>"
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   142
!
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   143
206
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   144
registerNamesToDisplay
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   145
    "Returns a list of register names to display in register view (VDBRegisterListApplication)
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   146
     or `nil` if all available registers are to be displayed.
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   147
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   148
     This is used on platforms for limit the number of registers, usually
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   149
     because either (i) it is too long and has a lots of 'uninterested' registers
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   150
     or (ii) some registers are not supported by gdbserver / QEMU or whatever
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   151
     and this is used to avoid errors while still displaying 'interesting' registers.
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   152
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   153
     Essentially a hack.
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   154
    "
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   155
    ^ nil "/ By default, show all registers
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   156
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   157
    "Created: / 22-05-2020 / 13:17:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   158
!
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   159
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   160
registerNumbersToDisplayUsing: registerMap
241
286aa6020b9e Update only "displayed" registers
Jan Vrany <jan.vrany@labware.com>
parents: 206
diff changeset
   161
    "Returns a list of register numbers to display or empty list
206
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   162
     to display all registers.
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   163
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   164
     See #registerNamesToDisplay.
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   165
    "
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   166
    | inverseMap |
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   167
241
286aa6020b9e Update only "displayed" registers
Jan Vrany <jan.vrany@labware.com>
parents: 206
diff changeset
   168
    self registerNamesToDisplay isNil ifTrue:[ ^ #() ].
206
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   169
    inverseMap := Dictionary new.
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   170
    registerMap keysAndValuesDo:[:regno :reg | inverseMap at: reg name put: regno ].
241
286aa6020b9e Update only "displayed" registers
Jan Vrany <jan.vrany@labware.com>
parents: 206
diff changeset
   171
    ^ self registerNamesToDisplay collect:[:regname |  inverseMap at: regname ]
206
3d4aca3ff608 Allow architecture definition to specify a subset of registers to display
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
   172
241
286aa6020b9e Update only "displayed" registers
Jan Vrany <jan.vrany@labware.com>
parents: 206
diff changeset
   173
    "Created: / 22-05-2020 / 13:42:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
262
0caf6fafaebd Allow to use 'pc' as program counter register name in `#setRegister:to:` API
Jan Vrany <jan.vrany@labware.com>
parents: 259
diff changeset
   174
    "Modified: / 21-11-2022 / 17:00:24 / Jan Vrany <jan.vrany@labware.com>"
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
!GDBArchitecture methodsFor:'printing & storing'!
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
printOn:aStream
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    super printOn:aStream.
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
    aStream 
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
        nextPut: $(;
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
        nextPutAll: self name;
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
        nextPut: $).
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
    "Modified: / 16-08-2018 / 09:01:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
!GDBArchitecture methodsFor:'queries'!
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
sizeofPointer
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    self subclassResponsibility
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
    "Created: / 16-08-2018 / 09:35:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
! !
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
133
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   197
!GDBArchitecture methodsFor:'utilities'!
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   198
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   199
disassemble1: bytes pc: pc
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   200
    "
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   201
    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
   202
    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
   203
    conform to GDBInstructionDissection protocol.
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   204
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   205
    @see GDBInstructionDissection
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   206
    "
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   207
    ^ GDBInstructionDissection null
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   208
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   209
    "Created: / 16-08-2018 / 10:56:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   210
! !
026074322527 Add support for instruction dissection
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 132
diff changeset
   211
188
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   212
!GDBArchitecture class methodsFor:'documentation'!
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   213
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   214
version_HG
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   215
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   216
    ^ '$Changeset: <not expanded> $'
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   217
! !
232f6808cabd Always return an architecture from `GDBInstruction >> arch`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
   218
132
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
70c17add3b24 Introduces a model of architectures
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
GDBArchitecture initialize!