GDBRegisterWithValue.st
author Jan Vrany <jan.vrany@labware.com>
Thu, 14 Oct 2021 14:23:27 +0200
changeset 238 bdf011a6482b
parent 237 81a18c404314
child 248 9f09de962169
permissions -rw-r--r--
Allow to set register value using via `GDBRegisterWithValue >> #value:` This is currently limited to integer registers only.
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
225
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
     4
Copyright (C) 2021 LabWare
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
This library is free software; you can redistribute it and/or
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
modify it under the terms of the GNU Lesser General Public
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
License as published by the Free Software Foundation; either
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
version 2.1 of the License. 
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
This library is distributed in the hope that it will be useful,
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
but WITHOUT ANY WARRANTY; without even the implied warranty of
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
Lesser General Public License for more details.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
You should have received a copy of the GNU Lesser General Public
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
License along with this library; if not, write to the Free Software
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
"{ Package: 'jv:libgdbs' }"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
"{ NameSpace: Smalltalk }"
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
GDBDebuggerObject subclass:#GDBRegisterWithValue
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
    25
	instanceVariableNames:'register frame valueString value changed'
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	classVariableNames:''
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	poolDictionaries:''
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	category:'GDB-Core'
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
!GDBRegisterWithValue class methodsFor:'documentation'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
copyright
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
jv:libgdbs - GNU Debugger Interface Library
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
Copyright (C) 2015-now Jan Vrany
225
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    37
Copyright (C) 2021 LabWare
144
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
This library is free software; you can redistribute it and/or
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
modify it under the terms of the GNU Lesser General Public
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
License as published by the Free Software Foundation; either
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
version 2.1 of the License. 
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
This library is distributed in the hope that it will be useful,
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
but WITHOUT ANY WARRANTY; without even the implied warranty of
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
Lesser General Public License for more details.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
You should have received a copy of the GNU Lesser General Public
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
License along with this library; if not, write to the Free Software
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
!GDBRegisterWithValue class methodsFor:'accessing-magritte'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
descriptionContainer
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    ^ super descriptionContainer
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
        define: #number as: Integer;
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
        define: #value as: String;
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
        yourself
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
    "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
    64
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
!GDBRegisterWithValue methodsFor:'accessing'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
name
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    ^  register name
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: / 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
    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
number
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
    ^ register isInteger ifTrue:[
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
        register
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    ] ifFalse:[
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
        register number
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    ]
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
    "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
    82
!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
225
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    84
register
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    85
    "Return the register definition of this register (as GDBRegister)"
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    86
    ^ register
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    87
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    88
    "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
    89
!
8bafbf291261 Add `GDBRegisterWithValue >> #register`
Jan Vrany <jan.vrany@labware.com>
parents: 144
diff changeset
    90
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
value
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
    92
    "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
    93
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
    94
       * 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
    95
       * 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
    96
         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
    97
         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
    98
    "
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
    99
    value isNil ifTrue: [
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   100
        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
   101
        "/ 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
   102
        "/ 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
   103
        "/ 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
   104
        "/ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   105
        "/ 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
   106
        "/ 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
   107
        "/ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   108
        "/ 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
   109
        (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
   110
            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
   111
        ] ifFalse: [ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   112
            "/ ...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
   113
            (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
   114
                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
   115
            ].
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   116
        ].
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   117
    ].
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   118
    ^ value
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   119
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   120
    "Modified: / 27-09-2018 / 15:26:50 / 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
   121
    "Modified: / 14-10-2021 / 01:23:34 / 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
   122
!
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
value: anObject
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   125
    "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
   126
     only."
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   127
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   128
    self value isInteger ifFalse: [ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   129
        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
   130
    ].
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   131
    debugger send: (GDBMI_data_evaluate_expression arguments: (Array with: '--thread' with: frame thread id with: '--frame' with: frame level with: ('$', register name , ' = ' , (anObject asInteger printString) ))) andWait: false.
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   132
    frame invalidate.
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   133
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   134
    "Created: / 10-09-2021 / 15:31:35 / 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
   135
    "Modified: / 14-10-2021 / 01:24:05 / 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
   136
!
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   137
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   138
valueString
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   139
    valueString isNil ifTrue: [
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   140
        | result registers |
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   141
        result := debugger send: (GDBMI_data_list_register_values new arguments: (Array with: '--thread' with: frame thread id with: '--frame' with: frame level with: 'r' with: register number)).
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   142
        registers := result propertyAt: #'register-values'.     
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   143
        self assert: registers size == 1.
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   144
        self assert: registers first register = register number.
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   145
        valueString := registers first valueString.
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   146
    ] ifFalse: [
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   147
        changed value.
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   148
    ].
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   149
    ^ valueString
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
237
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   151
    "Created: / 10-09-2021 / 14:14:14 / Jan Vrany <jan.vrany@labware.com>"
81a18c404314 Change `GDBRegisterWithValue >> #value` to return numeric value
Jan Vrany <jan.vrany@labware.com>
parents: 225
diff changeset
   152
    "Modified: / 10-09-2021 / 15:58:15 / Jan Vrany <jan.vrany@labware.com>"
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
!GDBRegisterWithValue methodsFor:'initialization'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
setDebugger: aGDBDebugger
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
    super setDebugger: aGDBDebugger.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
    changed := GDBTransientDataHolder debugger: debugger factory: [
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
        (frame notNil and:[frame isValid]) ifTrue:[
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
            | changes change |
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
            changes := frame registersChanges.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
            change := changes detect:[:each | each number = self number ] ifNone:[ nil ].
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   165
            (change notNil and:[change value ~= valueString]) ifTrue:[ 
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   166
                valueString := change value.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
                true
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
            ] ifFalse:[ 
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
                false
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
            ].
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
        ] ifFalse:[ 
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
            false
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
        ].
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
    ].
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
    "Created: / 27-09-2018 / 15:11:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
setFrame: aGDBFrame
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    self setDebugger: aGDBFrame debugger.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
    frame := aGDBFrame.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
    "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
   184
    "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
   185
!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
setRegisterFrom: aDictionary
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
    self assert: register isInteger.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
    self assert: (aDictionary includesKey: register).
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
    register := aDictionary at: register.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
    "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
   194
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
!GDBRegisterWithValue methodsFor:'printing & storing'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
printOn:aStream
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
    "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
   200
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
    super printOn:aStream.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
    aStream nextPut:$(.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
    register isInteger ifTrue:[
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
        register printOn:aStream.
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
    ] ifFalse:[ 
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
        register name printOn:aStream.    
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    ].
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
    aStream nextPutAll: ': '.
238
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   209
    valueString printOn: aStream.
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
    aStream nextPut:$).
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
    "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
   213
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
!GDBRegisterWithValue methodsFor:'private'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
_number: anInteger
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
    register := anInteger
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
    "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
   221
!
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   222
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   223
_value: aString
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   224
    valueString := aString
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   225
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   226
    "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
   227
!
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   228
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   229
invalidate
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   230
    changed notNil ifTrue: [ changed invalidate ].
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   231
    valueString := nil.
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   232
    value := nil.
bdf011a6482b Allow to set register value using via `GDBRegisterWithValue >> #value:`
Jan Vrany <jan.vrany@labware.com>
parents: 237
diff changeset
   233
    "Created: / 10-09-2021 / 15:37:58 / Jan Vrany <jan.vrany@labware.com>"
144
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
!GDBRegisterWithValue methodsFor:'queries'!
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
hasChanged
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
    "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
   240
     'stop', false otherwise (i.e., when unchanged)"
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
    ^ changed value
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
    "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
   245
! !
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
!GDBRegisterWithValue class methodsFor:'documentation'!
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
342b6dfe3a6f Add model for machine registers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
version_HG
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
    ^ '$Changeset: <not expanded> $'
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