GDBRegisterWithValue.st
author Jan Vrany <jan.vrany@labware.com>
Fri, 08 Sep 2023 12:40:22 +0100
changeset 317 7f63737e0374
parent 316 7cc3798b2ff7
child 322 1b26d0a9560c
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:
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
jv:libgdbs - GNU Debugger Interface Library
342b6dfe3a6f Add model for machine registers
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: 259
diff changeset
     4
Copyright (C) 2021-2023 LabWare
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 254
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: 254
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: 254
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: 254
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: 254
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: 254
diff changeset
    11
furnished to do so, subject to the following conditions:
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 254
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: 254
diff changeset
    14
copies or substantial portions of the Software.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 254
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: 254
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: 254
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: 254
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: 254
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: 254
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: 254
diff changeset
    22
SOFTWARE.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
"{ Package: 'jv:libgdbs' }"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
"{ NameSpace: Smalltalk }"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
GDBDebuggerObject subclass:#GDBRegisterWithValue
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
    29
	instanceVariableNames:'register frame valueString value changed previous'
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
	classVariableNames:''
342b6dfe3a6f Add model for machine registers
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: 259
diff changeset
    32
	category:'GDB'
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
!GDBRegisterWithValue class methodsFor:'documentation'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
copyright
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
jv:libgdbs - GNU Debugger Interface Library
342b6dfe3a6f Add model for machine registers
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: 259
diff changeset
    41
Copyright (C) 2021-2023 LabWare
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 254
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: 254
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: 254
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: 254
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: 254
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: 254
diff changeset
    48
furnished to do so, subject to the following conditions:
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 254
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: 254
diff changeset
    51
copies or substantial portions of the Software.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
259
651864c2aa29 Relicense under MIT license.
Jan Vrany <jan.vrany@labware.com>
parents: 254
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: 254
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: 254
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: 254
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: 254
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: 254
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: 254
diff changeset
    59
SOFTWARE.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
!GDBRegisterWithValue class methodsFor:'accessing-magritte'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
descriptionContainer
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    ^ super descriptionContainer
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
        define: #number as: Integer;
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
        define: #value as: String;
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
        yourself
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    "Created: / 26-09-2018 / 10:38:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
!GDBRegisterWithValue methodsFor:'accessing'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
name
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    ^  register name
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    "Created: / 27-09-2018 / 10:06:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
number
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    ^ register isInteger ifTrue:[
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
        register
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
    ] ifFalse:[
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
        register number
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    ]
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    "Created: / 27-09-2018 / 09:56:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
225
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    92
register
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    93
    "Return the register definition of this register (as GDBRegister)"
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    94
    ^ register
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    95
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    96
    "Modified (comment): / 24-03-2021 / 15:13:22 / Jan Vrany <jan.vrany@labware.com>"
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    97
!
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    98
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
value
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   100
    "Return the value of the register. The returned value is either
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   101
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   102
       * an integer in case the register is integer register - GPRs and so on)
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   103
       * a dictionary in case of 'composite' registers - for example a value
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   104
         of FPR might be returned as '{float = 0xABCDDCBA, double = 0xA...B}'
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   105
         Similarly for vector registers (SSE / SSE2 regs on x86, VSRs on POWER)
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   106
    "
254
6f3a6ee16a4a Check for register changes in `GDBRegisterWithValue >> #value`
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
   107
    (value isNil or:[changed value]) ifTrue: [
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   108
        value := (GDBMIParser on: self valueString) parseValue.
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   109
        "/ Sigh, we do now know the 'type' of the register (that is,
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   110
        "/ GPR, FPR, SPR or some other kind. We do not even know the bitsize. 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   111
        "/ Still, it is kinda handy to intepret GPRs as signed value.
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   112
        "/ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   113
        "/ However, #parseValue returns it as unsigned value, so we make
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   114
        "/ some guesses based on unsigned value.
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   115
        "/ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   116
        "/ First, assume it is 64bit unsigned value...
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   117
        (value between: 16r8000000000000000 and: 16rFFFFFFFFFFFFFFFF) ifTrue: [ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   118
            value := (value bitAnd:16rFFFFFFFFFFFFFFFF)-16r10000000000000000 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   119
        ] ifFalse: [ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   120
            "/ ...then assume it is 32bit value...
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   121
            (valueString size == (2+8) and:[value between: 16r80000000 and: 16rFFFFFFFF]) ifTrue: [ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   122
                value := (value bitAnd:16rFFFFFFFF)-16r100000000 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   123
            ].
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   124
        ].
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   125
    ].
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   126
    ^ value
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   127
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   128
    "Modified: / 27-09-2018 / 15:26:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
254
6f3a6ee16a4a Check for register changes in `GDBRegisterWithValue >> #value`
Jan Vrany <jan.vrany@labware.com>
parents: 251
diff changeset
   129
    "Modified: / 24-01-2022 / 16:22:39 / Jan Vrany <jan.vrany@labware.com>"
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   130
!
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   131
316
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   132
value: anObject 
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   133
    "Set the value of register. Currently this is limited to integer registers
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   134
     only."
316
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   135
    
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   136
    self value isInteger ifFalse: [
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   137
        self error: 'Compound values not supported'.
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   138
    ].
248
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   139
    debugger 
316
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   140
        send: (GDBMI_data_evaluate_expression arguments: (Array 
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   141
                        with: '--thread'
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   142
                        with: frame thread id
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   143
                        with: '--frame'
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   144
                        with: frame level
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   145
                        with: ('$' , register name , ' = ' , (anObject asInteger printString))))
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   146
        andWithResultDo: [:result | 
248
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   147
            result isDone ifTrue: [
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   148
                frame invalidate: self.
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   149
                changed value: true.
316
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   150
                debugger push: (GDBRegisterChangedEvent new setRegister: self)
248
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   151
            ].
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   152
        ].
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   153
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   154
    "Created: / 10-09-2021 / 15:31:35 / Jan Vrany <jan.vrany@labware.com>"
248
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   155
    "Modified: / 18-11-2021 / 12:13:34 / Jan Vrany <jan.vrany@labware.com>"
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   156
!
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   157
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   158
valueString
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   159
    valueString isNil ifTrue: [
316
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   160
        | result  registers |
248
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   161
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   162
        frame isValid ifTrue: [
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   163
            [
316
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   164
                result := debugger 
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   165
                        send: (GDBMI_data_list_register_values new arguments: (Array 
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   166
                                        with: '--thread'
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   167
                                        with: frame thread id
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   168
                                        with: '--frame'
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   169
                                        with: frame level
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   170
                                        with: 'r'
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   171
                                        with: register number)).
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   172
                registers := result propertyAt: #'register-values'.
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   173
                self assert: registers size == 1.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   174
                self assert: registers first register = register number.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   175
                valueString := registers first valueString.
316
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   176
            ] on: GDBCommandFailedError do: [:ex | valueString := ex description. ].
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   177
        ] ifFalse: [
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   178
            valueString := 'invalid frame'.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   179
        ].
316
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   180
        (previous notNil and: [ previous ~= valueString ]) ifTrue: [
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   181
            changed value: true.
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   182
            debugger push: (GDBRegisterChangedEvent new setRegister: self)
7cc3798b2ff7 Rename `GDBRegisterValueChangedEvent` to `GDBRegisterChangedEvent`
Jan Vrany <jan.vrany@labware.com>
parents: 315
diff changeset
   183
        ].
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   184
    ] ifFalse: [
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   185
        changed value.
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   186
    ].
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   187
    ^ valueString
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   189
    "Created: / 10-09-2021 / 14:14:14 / Jan Vrany <jan.vrany@labware.com>"
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   190
    "Modified: / 18-11-2021 / 18:03:18 / Jan Vrany <jan.vrany@labware.com>"
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
315
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   193
!GDBRegisterWithValue methodsFor:'displaying'!
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   194
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   195
displayOn: aStream
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   196
    | name |
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   197
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   198
    name := register name isString 
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   199
                ifTrue: [ register name ]
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   200
                ifFalse:[ register printString ].
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   201
    aStream nextPutAll: name.
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   202
    aStream next: 10 - name size put: Character space.
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   203
    aStream nextPutAll: self valueString.
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   204
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   205
    "Created: / 01-09-2023 / 23:11:40 / Jan Vrany <jan.vrany@labware.com>"
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   206
! !
91819b724b59 Add inspector tabs showing breakpoints, inferiors, ...
Jan Vrany <jan.vrany@labware.com>
parents: 272
diff changeset
   207
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
!GDBRegisterWithValue methodsFor:'initialization'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
setDebugger: aGDBDebugger
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    super setDebugger: aGDBDebugger.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
    changed := GDBTransientDataHolder debugger: debugger factory: [
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
        (frame notNil and:[frame isValid]) ifTrue:[
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
            | changes change |
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
            changes := frame registersChanges.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
            change := changes detect:[:each | each number = self number ] ifNone:[ nil ].
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   218
            (change notNil and:[change valueString ~= valueString]) ifTrue:[
248
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   219
                valueString := change valueString.
9f09de962169 When setting register value, invalidate only register that has changed
Jan Vrany <jan.vrany@labware.com>
parents: 238
diff changeset
   220
                value := nil.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
                true
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
            ] ifFalse:[ 
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
                false
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
            ].
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
        ] ifFalse:[ 
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
            false
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
        ].
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
    ].
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    "Created: / 27-09-2018 / 15:11:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   231
    "Modified: / 18-11-2021 / 17:19:20 / Jan Vrany <jan.vrany@labware.com>"
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
setFrame: aGDBFrame
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
    self setDebugger: aGDBFrame debugger.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
    frame := aGDBFrame.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    "Created: / 26-09-2018 / 22:25:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
    "Modified: / 27-09-2018 / 15:31:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
setRegisterFrom: aDictionary
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
    self assert: register isInteger.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
    self assert: (aDictionary includesKey: register).
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
    register := aDictionary at: register.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
    "Created: / 26-09-2018 / 10:41:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
!GDBRegisterWithValue methodsFor:'printing & storing'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
printOn:aStream
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
    "append a printed representation of the receiver to the argument, aStream"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
    super printOn:aStream.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
    aStream nextPut:$(.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
    register isInteger ifTrue:[
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
        register printOn:aStream.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
    ] ifFalse:[ 
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
        register name printOn:aStream.    
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
    ].
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
    aStream nextPutAll: ': '.
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   264
    valueString printOn: aStream.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
    aStream nextPut:$).
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
    "Modified: / 26-09-2018 / 10:48:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
!GDBRegisterWithValue methodsFor:'private'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
_number: anInteger
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
    register := anInteger
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
    "Created: / 26-09-2018 / 10:39:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   276
!
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   277
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   278
_value: aString
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   279
    valueString := aString
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   280
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   281
    "Created: / 10-09-2021 / 15:43:04 / Jan Vrany <jan.vrany@labware.com>"
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   282
!
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   283
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   284
invalidate
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   285
    valueString notNil ifTrue: [
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   286
        changed notNil ifTrue: [ changed invalidate ].
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   287
        previous := valueString.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   288
        valueString := nil.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   289
        value := nil.
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   290
    ].
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   291
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   292
    "Created: / 10-09-2021 / 15:37:58 / Jan Vrany <jan.vrany@labware.com>"
251
e34f610942df Experimental improvement of tracking register changes
Jan Vrany <jan.vrany@labware.com>
parents: 249
diff changeset
   293
    "Modified: / 18-11-2021 / 17:48:07 / Jan Vrany <jan.vrany@labware.com>"
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
!GDBRegisterWithValue methodsFor:'queries'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
hasChanged
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
    "Return true, if the value of this register has changed since last
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
     'stop', false otherwise (i.e., when unchanged)"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
    ^ changed value
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
    "Created: / 27-09-2018 / 16:01:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
!GDBRegisterWithValue class methodsFor:'documentation'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
version_HG
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
    ^ '$Changeset: <not expanded> $'
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313