GDBArchitecture.st
author Jan Vrany <jan.vrany@labware.com>
Fri, 08 Sep 2023 12:40:22 +0100
changeset 317 7f63737e0374
parent 272 cdd1c9ad00de
permissions -rw-r--r--
Fix `GDBMIDebugger` after rename of `GDBStXUnixProcess` to `GDBUnixProcess` ...in commit d1422e1ee.
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!